Jump to content
Halford

[SoC] Ковыряемся в файлах

Recommended Posts

Прошу прощения за все возможные бояны, но может быть кто-то разбирался, и может ответить одним куском:

 

Часть NPC и монстров постоянно болтается в онлайне: явно прописанный в схемах offline = false перекрывает настройки alife. То же самое заметил для всех(?) переодевшихся неписей.

Кто-нибудь может сказать, зачем оно вообще так сделано ?

 

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

 

Share this post


Link to post
Share on other sites

Кто нибудь сталкивался с такой ошибкой:

[error]Expression : assertion failed

[error]Function : CStepManager::reload

[error]File : E:\stalker\sources\trunk\xr_3da\xrGame\step_manager.cpp

[error]Line : 46

[error]Description : param.cycles >= 1

?

Она связана с чем-то конкретным, или "ой, что-то где-то в скрипте/конфиге случайно не то сделали, где - не знаем, восстановим старую копию ?"

malandrinus, ага, спасибо, действительно случайно. Дератизацией, вестимо.

 

А вот теперь я совсем ничего не понимаю. Удаляю весь m_rat.ltx, и прописываю:

[rat_weak]:m_tushkano_e

[rat_normal]:m_tushkano_e

[rat_strong]:m_tushkano_e

непосредственно в monsters.ltx, запускаюсь, перехожу с локации, где спавнится 6 rat_strong, но я их почему-то не вижу (причем спавнятся не знаю через что, но не se_respawn.script), на соседнюю, и вижу - 6 крыс.

Удаляю из monsters.ltx, что там прописал, и получаю при спавне законный: "Can't open section 'rat_strong'"

 

Это КАК ???

Edited by Dennis_Chikin

Share this post


Link to post
Share on other sites

А не порадует ли кто статьей про убиение всякого ? Для начала, конечно, монстров.

 

Как это делать идеологически правильно, что необходимо и достаточно, есть ли различия по онлайну/оффлайну, текущей и прочим картам, что где при этом вызываетися, что изменится само, а что надо потом еще вызывать/править руками, какие подводные камни ?

 

Код из amk_offline_alife у меня вроде работает, и делает именно то, что надо, но не вылезет ли сюрпризов потом ?

Edited by Dennis_Chikin

Share this post


Link to post
Share on other sites

Ну наверняка кто-нибудь знает место, где зверушка видит врагов. Подскажите, а ?

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

 

Хорошо, переформулирую вопрос:

 

Что с точки зрения кода должна давать вот эта конструкция:

function set_scheme(npc, ini, scheme, section, gulag_name)

local storage = xr_logic.assign_storage_and_bind(npc, ini, scheme, section)

...

storage.aggressive = ini:line_exist( section, "aggressive_home")

end

?

 

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

 

Edited by Dennis_Chikin

Share this post


Link to post
Share on other sites

А поясните, кому не лень, подробно смысл вот такой конструкции:

 

if obj.m_game_vertex_id and game_graph():valid_vertex_id(obj.m_game_vertex_id) then

local map=alife():level_name(game_graph():vertex(obj.m_game_vertex_id):level_id())

end

 

Есть оъекты, для которых какое-либо условие не выполнятся ? И что с ними такими красивыми по-хорошему следует делать ? Ничего ?

malandrinus, ну я же просил: подробно. А если не валидный ? Если пропустить проверку vertex(obj.m_game_vertex_id):level_id() нам чем грозит ? А level.object_by_id() ? Или для последнего мы просто не сможем найти соответствие ?

Edited by Dennis_Chikin

Share this post


Link to post
Share on other sites

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

Или это секретная информация, и все копают сами ?

 

Upd: ага, на солько хватает беглого взгляда - в amk.script есть все нужное. Просто в предыдущие разы, когда смотрел - не увидел.

 

Edited by Dennis_Chikin

Share this post


Link to post
Share on other sites

Это не про ковыряние, но, кто-нибудь, снимите меня с ручника:

if wpn_data[obj:section_name()][p_obj:community()] then
    get_console():execute("load ~DC~: add_item to: "..p_obj:name()..", "..p_obj:community())
    local wpn_pri = wpn_data[obj:section_name()][p_obj:community()]
    get_console():execute("load ~DC~: wpn_pri1: "..tostring(wpn_pri or "nil value"))
else
    get_console():execute("load ~DC~: add_item to: "..p_obj:name()..", common")
    local wpn_pri = wpn_data[obj:section_name()].common
end
get_console():execute("load ~DC~: wpn_pri2: "..tostring(wpn_pri or "nil value"))

 

результат:

! Cannot find saved game ~dc~: add_item to: esc_soldier_respawn_10153, military

! Cannot find saved game ~dc~: wpn_pri1: 36

! Cannot find saved game ~dc~: wpn_pri2: nil value

 

P.S. То есть, понятно, что "end" в данном случае закрывает область видимости объявленных до него переменных, но с чего бы вдруг ?

 

Я вижу в описаниях языка такое свойство "end" для циклов, но не вижу для ветвлений.

 

Edited by Dennis_Chikin

Share this post


Link to post
Share on other sites

Нужен ликбез:

 

Монстры/неписи визуально совершают какие-то движения - скажем, сидят, потом побежали, потом развернулись, еще что-то сделали... С началом/концом каждой фазы наверняка связан какой-то код. Прочитанное намекает, что это - state_mgr*.script. Но там внутри много всего, и все равно непонятно, как это соотносится с наблюдаемым визуально. Задача: узнать, из откуда-нибудь (хоть вывести в лог из того же стэйт-менеджера, лишь бы это было как можно проще): что сейчас происходит визуально. То есть, что начал делать данный непись, делает ли он это, или уже повис, и момент, когда он наконец закончил делать то, что начал, если вообще закончил.

 

Ткните носом во что-нибудь ?

 

Полтергейст, со стэком - я, кажется, нашел архитектурную проблему в более другом месте. Сейчас осмысливаю. Коротко, если вдруг есть возможность заменить у объектов методы can_switch_*() на переменную - должно ощутимо полегчать во многом разном. А вот с состояниями - в том-то и дело, что вылеты. Без логов. Со специфическим визуальным проявлением. Хочется докопаться до причин. Достаточно было бы в нужных местах вставить диагностику: кто последний - тот, очевидно, и виноват.

 

P.S. smart_terrain проще, imho, закрасить, чем отскребать. Это - ад.

 

Edited by Dennis_Chikin

Share this post


Link to post
Share on other sites

Скажите, кто-нибудь: я правильно понимаю, что перезаряжание неписями оружия - это чисто движковое, и скриптом можно это сделать только чаще, но нет ни какой возможности запретить ? Разве что у непися патроны отобрать ?

 

Ага, аддон Бака ковыряю. И обнаружил полное отсутствие соответствия того, что делается внутри, с внешними проявлениями.

 

Также, внезапно обнаружилось, что по крайней мере в "Солянке" у неписей в момент смерти исчезают патроны, которые были в инвентаре. Кроме 9x18. Найти скрипт, ответственный за это - не удалось. 8( Удаление в death_manager отключено, естественно. Более того, когда в нем было удаление - в логе на v1.0006 была интенсивная ругань по поводу удаления несуществующего серверного объекта. То есть, где-то хранится список этих самых патронов, и идет попытка удаления по списку. Как аптечки, бинты, гранаты в аддонах xStream'а и Бака.

Что это может быть ?

 

Share this post


Link to post
Share on other sites
Dennis_Chikin

Гляньте в xr_death.script

 

Нет, не то. 8(

 

xr_death отрабатывает первым, затем - отрегистрация от смартов, затем в мотиваторе вызывается десменеджер, а после кто-то неизвестный ворует патроны. 8(

Видимо тот же, кто и спавнит.

 

Но, блин, кто ??? Сам движок ?

 

Share this post


Link to post
Share on other sites

А вот кто подскажет нахаляву, как прямо вчера наиболее безболезненно можно решить следующую задачу:

 

в момент X запустить для избраного непися последовательность действий: найти укрытие, перезарядить оружие, искать врага ? Момент X может быть абсолютно любым, просто мы знаем, что надо вот прямо сейчас. Не взирая на то, чем он занят.

 

Share this post


Link to post
Share on other sites

Или лыжи не едут, или что...

 

Задаем в цикле: db.actor:set_actor_position(db.actor:position()) - и актора потащило по всей локаци. Или против направления, куда двигался последний раз, или, если стоял на месте - куда-то на северо-восток. Причем резвенько так потащило...

 

Ошибки плавучки ? Неизлечимо ?

 

Share this post


Link to post
Share on other sites

Кто-нибудь разбирался с торговлей на предмет того, какие столы при каких условиях неписи выставляют на продажу ?

 

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

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

 

Аддон Бака в той части, которой он занимается отбиранием стволов, естественно, отключен. То есть, все полученные неписями стволы в инвентаре у них железно присутствуют.

 

 

И еще, может кто подскажет "идеогически правильный", не тормозной способ отследить конец торговли с неписем и узнать: с кем именно мы только что торговали ?

Edited by Dennis_Chikin

Share this post


Link to post
Share on other sites

Скажите кто-нибудь, непися вообще можно принудительно загнать в смарттеррэйн так, чтобы obj:smart_terrain_id() при этом возвращал корректное значение ?

 

Предположим, что в олспавне для него ничего не прописано.

 

Или, даже, просто выгнать непися-эксклюзива, и тут же запихнуть обратно - не дожидаясь, когда для него вызовется неведомо-что неведомо-где, и загонит куда надо ?

 

Share this post


Link to post
Share on other sites
m_army.ltx, m_bandit.ltx - эти файлы не используются.

 

Это как ?

Буквально месяц назад крутил им зрение. Первоначально оторвав от соли скрипт, который делал всему живому ровно 60 метров, зачем-то.

 

Да и кровотечение у бандитов amk вроде как воспринимал...

 

Share this post


Link to post
Share on other sites

О, кстати, о конфигах. А не найдется ли здесь кого-нибудь, кто может провести ликбез по восприятию звуков неписями ?

 

Вижу на уровне скриптов странное: выстрелил, скажем, ГГ в воздух, и все неписи в радиусе слышимости выстрела имеют дэнжер-объект типа attack_sound. И он все длится, и длится, и не кончается. А с enemy_sound - еще веселее. 300 метров, и тоже уже навечно. Причем best_danger - то-ли первый услышанный, то-ли еще каким образом, но тоже вечно один и тот же. Даже если уже и умер.

 

P.S. На гугле меня не то, чтобы забанили, но полезного не нашлось.

 

Добавлено через 20 мин.:

Gaz24, патроны могут удалиться скриптом death_manager.script, либо остаться в стволе.

Выпилил из десменеджера удаление патронов чуть более, чем полностью. Удаляются. Все, кроме простых 9x18.

Причем удалются уже ПОСЛЕ отработки десменеджера. То есть, если бы удалялось в нем, что происходит с другими предметами - удаление было бы раньше. На 1.0006 хорошо видно по логу.

 

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

Аналогичная фигня происходит при удалении живого непися. Сначала удаление инвентаря вместе с неписем, потом попытка удаления патронов.

 

Уже, кстати, писал про это.

Edited by Dennis_Chikin

Share this post


Link to post
Share on other sites
Полтергейст

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

 

О. А вот на это похоже. Хотя идея с приписанными патронами странна. Но очень похоже. И тогда понятно с сообщениями об ошибке: уничтожение непися, уничтожение движком ствола, попытка уничтожения уже уничтоженных патронов от ствола.

 

Share this post


Link to post
Share on other sites

Есть непись. В олспавне ему запрещено браться под смарты. Олспавн трогать не хочется, но непися надо запихать в смарт.

 

Можно переписать custom-data, но это как-то некрасиво.

Можно (и, наверное, когда-то придется) переделать проверку условий для взятия под смарт.

 

Но я вот вижу в ковыряемом файлики типа gamedata\config\scripts\sak\esc_fox.ltx содержимым вида:

[smart_terrains]
esc_stalker_camp = {-val_x18_door_open}
sak_lager = {+val_x18_door_open}

Сейчас такое впечатление, что они не работают. Но зачем-то ведь были ? И если бы их как-то задействовать - это было бы то, что доктор прописал.

Как ?

Edited by ColR_iT

Share this post


Link to post
Share on other sites

  • Recently Browsing   0 members

    No registered users viewing this page.

AMK-Team.ru

×
×
  • Create New...