Перейти к контенту

Рекомендуемые сообщения

, кстати, в оригинальном модуле LuaXml.lua, тов. Charsi модифицировал функцию поиска тегов. Смысл в том, что раньше надо было искать субтег последовательно:

local xfile = xml.load("test.xml")
local xscene = xfile:find("scene"):find("camera")
а теперь, как в сталке можно через двоеточие:

local xscene = xfile:find("scene:camera")
Изменено пользователем Shadows
Ссылка на комментарий

Shadows

Каждый преследует свои цели. Предлагая идею динамического файла, я не не ставлю цели читать оригинальные в принципе.

Потому что мне это не нужно.

Пока не задавали дополнительных вопросов, но я опережу события.

Дело в том, что создавая объект окна, я храню в его userdat-е только участок кода, который описывает сам объект.

Практически это всегда простая таблица, изредка со вложенной таблицей.

Применять для этого специальный синтаксис, я думаю, не целесообразно. Опять же, учитывая поставленные цели.

Это я делаю для того, чтобы не перезаписывать весь файл. Неизвестно каких размеров он мог бы быть.

Небольшой блок кода записывается практически мгновенно. 

Поэтому и работа функции (той же find) предполагает работу с классическим XML.

 

А для Сталкера идея и исполнение Charsi отличное.

Изменено пользователем Gun12
Ссылка на комментарий

Всем добра.
Возникла проблема со сном ГГ в ЗП.
При входе в зону сна вылезает "Спать (F)", нажимаю, а ничего не происходит. Вся проблема заключается в том, что я не знаю, где я "запортачил" код. Изменение sleep_manger.script на оригинальный ничего не дало. Помогите, если кто-то знает, с чем связан данный баг.

AWRP : Re - Load 0.2 ©

Ссылка на комментарий

@Akella-96 aka SvD

При такой неопределённой ситуации нужно начинать с all.spawn-а

Логика рестриктора сна (напр. Затона) name = zat_a2_sr_sleep находиться в файле cfg = scripts\sr_sleep.ltx.

Нужно проверить, срабатывает ли рестриктор при заходе в него ГГ :

on_actor_inside = sr_idle@run %=run_tutorial(tutorial_sleep)%

Должна вызываться функция xr_effects.run_tutorial

Проставь выводы в лог и посмотри что работает а что нет.

Для проверки нахождения в зонах (рестрикторах и т.д.) удобно пользоваться расширением sData, которое выводит различные параметры на экран в режиме реального времени.

Изменено пользователем Dennis_Chikin
тому, кому отвечали - явно не интересно. Остальным - тем более.
Ссылка на комментарий

@Nazgool, у меня была похожая проблема с диалогами, когда я написал функцию, касающуюся юзания брони, ГГ не мог говорить, пока не нам нет брони. Здесь, видимо, похожая ситуация. Закосяченный сторонний код, который мешает выполнять функцию сна. Случайно нет никакой проги, которая поверяет правильное построение скриптов? Если есть, можно ссылку в студию?

AWRP : Re - Load 0.2 ©

Ссылка на комментарий
Доброго времени суток всем форумчанам! Не так давно столкнулся с довольно специфичной проблемой, попробовал свои силы в примитивах  ИК на x-ray (инверсной кинематики) и встал перед стеной вопроса. Возможно ли, получить "динамически" id НПС? Поясню, мы наводим прицел на НПС и нам игра(думаю все таки движок ибо в скриптах такого рода функций не встречал) имя НПС, его группировку и отношение к ГГ. Мне это нужно для следующего: есть id нпс, по которому мы вычисляем дистанцию до цели. После чего если, наша дистанция удовлетворяет условию мы проводим с НПС некие действия, скажем запускаем кат сцену с воровством, просто здороваемся и много чего еще чего душе угодно.
Дабы не быть голословным и не нарушать правила темы, прилагаю ниже свою версию скрипта который должен выступить в роли решения моей проблемы
 
function test_ik()
local dist = se_obj:position():distance_to(db.actor:position()) 
for a = 1,65534 do  
        local se_obj = alife():object(a)
        if se_obj and isStalker(se_obj) then
        if dist <= 3 then 
        news_manager.send_tip(db.actor,"Hi GG!")
            end  
        end
    end
end

Но в моем примере уже куча проблем, ибо таких сталкеров может быть 2, 3 и тп. Да и думаю это лишком будет нагружать "калькуляторы". У кого нибудь есть идеи по решению данного вопроса? 
Заранее благодарен!

Изменено пользователем mumie
Ссылка на комментарий

@mumie, чтото в скрипте у тебя мешанина, форум перетусовал?

Если тебе нужны все сталкеры, которые в онлайне и ближе, чем некая дистанция, то можно перебирать таблицу db.storage (вроде она). Там хранятся не только сталкеры, так что придется проверять принадлежность. По хорошему, можно создать свою отдельную таблицу онлайновых сталкеров, в любом случае, объектов в этих таблицах будет не так много.

В принципе, если тебе нужно, чтобы ГГ еще и смотрел в сторону непися, из скриптов это тоже можно сделать.

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

@Desertir,скорее всего форум. у меня вроде ровный был. Но я же говорю, что этот скрипт тоже рабочий, но есть одно но, в радиусе может быть n колличество сталкеров, а мне нужен один, желательно тот на которого указан курсор(прицел), в этом и беда. 

Ссылка на комментарий

Мысли в слух. Найти вектор между ГГ и каждым неписем (которые ближе Н метров) и найти направление взгляда ГГ. По хорошему, надо найти корреляцию, методом тыка найти коэффициент, при котором непись будет "под прицелом" и сравнивать с ним. Но это... не круто.

ЗЫ: вроде есть правка движка, которая позволяет получить объект, на которого направлен прицел :) Поищи в X-Ray Extension или гдето там.

Изменено пользователем Desertir

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

@mumie,на какую игру делаешь? 

Если ТЧ или ЗП, то

http://www.amk-team.ru/forum/index.php?showtopic=10538&page=1

Скачай документацию и посмотри раздел "Получение информации о точке/объекте, куда смотрит актор"

А через это http://www.amk-team.ru/forum/index.php?showtopic=10538&p=831341 будет проще всего нужные из них поставить.

 

На ЧН могуть быть проблемы с не-лицензионными версиями игры, т.к они обычно используют свой xrGame.dll

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

@*Shoker*,мда, мой косяк. ЗП. Спасибо за прямой ответ, буду рыскать ибо это направление одно из самых малоизученных, но наверное одно из перспективнейших, если конечно в стакере вообще можно говорить о перспективах ;)

 

Устное предупреждение.

Правила форума, п. 2.1.1, также п.5 шапки темы.

Благодарности, пожалуйста, в личку.

Оффтопика, пожалуйста, не надо.

Murarius

Ссылка на комментарий

Столкнулся с проблемой: при удалении с помощью alife():release(corps,true) трупа - в логе: "- Critical: SMapLocation binded to non-existent object id=<ИД_NPC>" (в консоли строки зелёного цвета).
Гугл пугает: "сеёфгейм повреждён", "игра уничтожила труп, но не очистила точку на карте, привязанную к нему".
Озадачился, занёс удаляемые трупы в таблицу (по примеру уборщика NLC sak_off_corpses.script) и повесил проверку таблицы и удаление из неё на апдейт актора.

С тем же эффектом. Всё удаляется, но ругается в лог.

Подскажите, как корректно удалять трупаки?

 

Зачем трогать биндер актора, если проблема в чем-то, привязанном к конкретному трупу ?

Может быть просто оставить этот труп в покое ? dc

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

@k01jan,ну я не помню стопроцентного метода, но возможно, тебе поможет "оживление трупов". Попробуй ставить совсем малое количество жизней, пусть хоть сотую часть, и затем тут же удаляй. Метка по идее должна пропасть после "оживления". 

 

И чем именно должно помочь это оживление ? dc

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

Процесс удаление трупов NPC инициируется из motivator_binder:death_callback.
@mumie, в каком смысле "оживление"? Перехватывать "смерть" неписей в дэт-калбэке мотиватора, добавлять им здоровья и удалять чуть-живых?
Ерунда какая-то получается...

Ссылка на комментарий

Читал тему. Много думал. Потом читал "шапку" (1-й пост), и снова тему, и опять много думал.

Пришел к выводу, что большинство авторов последних постов - телепаты, и передают мысли друг-другу на расстоянии прямо через мировой эфир.

 

Просьба: снизойти до простых смертных, и писать: какой death_callback из из какого апдейта биндера атора при помощи каких таблиц у Вас удаляет трупы, и в какой версии какой игры.

И куда у вас из-за этого исчезают все НПЦ (тоже, в какой версии, и какой игры). А если не из-за этого, то из-за чего ?

По тому как лихорадочно просмотрел все скрипты ТЧ1.0006 и не обнаружил ничего из упомянутого в сообщениях на этой странице.

 

Действительно, ерунда какая-то получается. ©k01jan

 

Может бы мне кто-нибудь компанию в чтении шапки темы составит ?

 

mumie, что касается неписей, на которых смотрит актор, то если бы это был ТЧ, я бы посоветовал обратить внимание на xr_meet.script, и еще пачку других, сходных по смыслу.

Изменено пользователем Dennis_Chikin
  • Нравится 1
  • Не нравится 1
Ссылка на комментарий

Скажите, а скриптами можно в ТЧ 1.0006 ускорить мышиный курсор в UI-менюшках (главное меню, инвентарь и т.п.)? Уж больно он неповоротливый. ЗЫ: знаю, что через движок точно можно, но пока никто не сделал, рассматриваю скрипты как альтернативу.

Ссылка на комментарий

Вот честно говоря, ни разу не замечал "неповоротливости". Общее тормозилово на фоне развернутого инвентаря на фоне кучи неписей с фонариками на фоне тумана на фоне кривых текстур - это - да.

Оно разве не в настройках задается ?

 

И, соответственно, mouse_sens через консоль должно отрабатывать.

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

@Dennis_Chikin, судя по вопросам, ты раньше не имел дел с движком 1.0007. Скажем так: перейдя с него на 6, сразу заметна разница. Нет, mouse_sens относится только к 3D, а не UI. В теме ковыряний движка я тоже спросил, но и скриптовой вариант не помешал бы.

Изменено пользователем macron
Ссылка на комментарий

О-о.. Вот оно как обернулось... А я ж всего лишь помочь просил...
Ну, что ж, ладно..


1) dc - "не трогать", к сожалению, не получится. Труп не единичный, не квестовый - и вообще, любой. Проблема не привязана к конкретному трупу. При удалении поголовно всех трупов такая штука происходит. Биндер (надо же, меня понимают..) трогать пришлось, т.к мотиватор лишь ловит смерти неписей и вызывает скрипт, а он часто не успевает их обработать. Например, если гибнут массово (граната, яростная перестрелка и т.п.). Поэтому - таблица (=очередь на обработку), которая из биндера на апдэйте актора проверяется.
2) @Dennis_Chikin, я Вас заочно (лишь по работам для НС, к моему глубочайшему сожалению) знаю и искренне уважаю.. Но палку-то зачем перегибать?
"какой death_callback из из какого апдейта биндера атора" - ИМХО, не стоит Вам слишком много думать. Особенно - за других. Ведь это - всего лишь Ваши домыслы. Видимо, ввёл в заблуждение dc фразой "Зачем трогать биндер актора". Вот не знаю, к чему это он?
Я писал недвусмысленно: "при удалении с помощью alife():release(corps,true) трупа - в логе: "- Critical: SMapLocation binded to non-existent object id=<ИД_NPC>""
Стандартная для модов функция, удаление работает. Только вот лог этот... О том и спросил.
Что именно Вам здесь непонятно?
Раскину "на пальцах": скрипт успешно удаляет трупы NPC. При этом в логе: "- Critical: SMapLocation binded to non-existent object id=<удалённого_трупа>".
Такая терминология Вам доступна?
По версии - действительно, я косяк упорол - ТЧ6 (кстати, спасибо за косвенную подсказку - на 4 и ЗП не помню таких логов, или - просто не замечал. Проверю.)
P.S.: Я бы мог Вам помочь читать. И не только шапку.
3) Мои попытки всё исправить - организация очереди удаления в виде динамической таблицы с обработкой её из из bind_stalker.script из ф-и actor_binder:update(delta) результата не дали.
Попробую предварительно увести усопших в оффлан.



Зачем бан ? Я изложил общее впечатление от попытки прочитать за один раз всю страницу, не являсь автором этих сообщений. Получилось - то, что получилось. ;)
Самим авторам - разумеется, все понятно. По крайней мере в своих сообщениях. Иначе было бы уже совсем странно.

И некоторые меры для облегчения прочтения действительно нобходимы:
Версия, моды поверх, кого именно удаляли, как и когда удаляли, код, откуда вызывали.
Ну или если не удаляли, а что другое делали - опять же, версия, код, что видим, где что пишет странного, если пишет.


Теперь - по делу:
В bind_stalker.script из ф-и actor_binder:update(delta) вызывается скрипт, удаляющий трупы, удовлетворяющие неким условиям. Схема работает, вот только в логе после каждого удалённого NPC появляется запись вида: "- Critical: SMapLocation binded to non-existent object id=номер_его_ID'а".
Как бороть?

 

Ну так код где ?

По тому как действительно странно в высшей степени. То, что не стоит удалять живых неписей - это в общем-то неоднократно обсуждалось, в том числе и прямо здесь. По тому что очень много где хранятся game_object, и на внезапное удаление объекта серверного не проверяются.

 

Для трупов - в принципе должно быть проще, но вот я же буквально пару страниц назад здесь жаловался на то, что и трупы в некоторых случаях тоже пытаются "жить активной жизнью".

Так что - да, в оффлайн их сначала, и только когда попытка получить game_object безуспешна - удалять.

 

А еще лучше - все удаления производить где-то из net_spawn() собственно актора, или раньше.

 

Впрочем, и это все теория, к проблеме имеющая отношение едва-ли.

SMapLocation binded to non-existent object - как бы намекает, что дело не в самом трупе. Ну, пока я кода не  вижу. Ergo, действительно, попробовать удалить, пока в офлайне, а потом попробовать посетить актором место, где был оный труп, и глянуть: будет повторяться, али нет.

 

p.s. А вообще, кстати, и предупреждение стоило бы выписать. По тому что поиском вот прям даже в теме причина замечательно находится. ;)

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   1 пользователь

×
×
  • Создать...