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

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


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

Отвечаю сам себе на один из вопросов:

Почаще необходимо проверять грамматику: анимация для работы "patrool" прописана неверно (binicular вместо binocular), к тому же переход с последней точки был не на начальную, а на несуществующую (но, к счастью, это не смертельно, в отличие от грамматики).

P.S. Просьба объединить данный пост с предыдущим, срок редактирования истёк.

Работы на Artstation - https://www.artstation.com/artist/stalker_lom

Сталкер Лом, мог бы сам найти в форуме пост: "комплект функций для вывода в лог" (и тут поновее).

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

 

На твоем примере:

1. Разработчики компания-разработчик (признана нежелательной), дабы не иметь от игроков причитаний по поводу прерываний игры - закомментировали аварийный вывод в лог информации.

Ты совершенно правильно восстановил этот вывод ( error_log(reason) ), что и дало тебе в лог именно то, что и задумано было разработчиками, т.е. при ошибке в аргументе наименования состояния (иль др.) - была вызвана функция прерывания (abort) и тебе в лог была дана информация, которая и помогла найти ошибку (binicular).

Т.о. если есть желание или необходимость выловить ошибки в скриптах/конфигах - НЕ следует комментировать функцию abort! Именно она помогает вылавливать заведомые ошибки.

2. Т.к. функция прерывания была закомментирована, то ошибка в имени состояния не была обнаружена и выполнение сценария (скрипта) в state_manager:set_state было продолжено, что привело к получению нИлевого значения для state_lib.states[binicular] и соответственно 502-ая строка:

if state_lib.states[state_name].special_danger_move == true then

споткнулась на попытке получить поле 'special_danger_move' из несуществующей субтаблицы.

Т.о. твой 1-ый вопрос по ошибке - это следствие, причину которого ты и обнаружил, найдя ответ/причину для 2-го вопроса/вылета.

3. В текстах скриптов можно видеть немало строк типа:

--printf("Set State called: for %s State: %s", self.npc:name(), state_name)

Как видно, это закомментированная строка. Если ее раскомментировать, то... к сожалению все одно в лог-файле ничего не будет, т.к. как функция printf, как и функция abort, отключена разработчиками... Вот для ее активизации и требуется упомянутый в начале "комплект функций для вывода в лог". Это позволяет отслеживать выполнение сценариев и получать информацию по мере выполнения. Ну а имея информацию и думалку - гораздо проще и быстрее находить и исправлять ошибки. ;-)

 

Ну и собственно "грамматика" то тут ни при чем. Причина в банальной описке, которую никакой чекер кодов не обнаружит, т.к. имена переменным и их значения в таких случаях часто "в соответствии с синтаксисом и правилами" языка. Это как раз отлавливается контролем выполнения сценариев, для чего и существуют функции printf и abort, т.к. сам движок далеко не всегда предоставляет при фатальных ошибках достточную информацию о причине. Если всерьез занялся моддингом - советую дополнительно почитать на эту тему про debug в Lua (хотя для реализации потребуется вносить правки в библиотеки движка или внешние добавлять).

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Как перевести одного НПС из сквада в оффлайн? И как наоборот заспанить в оффлайне?

К20

Народ прошу не пинайте жестоко и очень прошу помощи. Проблема, после отравления Гавром вылет вот стаким логом"

...FATAL ERROR

 

[error]Expression : e_entity

[error]Function : xrServer::Process_event_reject

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\xrServer_process_event_reject.cpp

[error]Line : 12

[error]Description : entity not found. id_parent=0 id_entity=6030 frame=19460

 

 

stack trace:"

Выручайте.

Походу тело разорвало, такой вылет говорит что дочерние объекты не найдены в инвентаре.... Вылет постоянен?

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

Что-то кончается, что-то начинается...

Доброго времени суток! Возникла вот такая проблема:

FATAL ERROR

[error]Expression : fatal error
[error]Function	 : CBlender_default::Compile
[error]File		 : D:\prog_repository\sources\trunk\Layers\xrRenderPC_R1\BlenderDefault.cpp
[error]Line		 : 63
[error]Description : <no expression>
[error]Arguments	 : Not enought textures for shader, base tex: act\act_arm_1_bump

stack trace:

Может, знает кто? Как устранять?

ЗЫ. Вылетает только на статическом освещении.

Заранее благодарен за ответ.

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

Vano_Santuri

Вылет постоянный, сейчас поробовал ещё раз.

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

Vano_Santuri

Вы не подскажете как определить эти дочерние объекты?

 

Большое спасибо, даже косвенная ссылка помогла, прошёл.

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

Так как прошел? В чем именно была проблема?

Что-то кончается, что-то начинается...

Vano_Santuri

Не стал ломать файлы, а просто подбором, раз 30 перезагружался, оказалось телепортеры Кости, каюсь чатерил и их было несколько штук в инвентаре, вот они и глючили. Но самое что интересное их не должно быть на локации, т.с. выложить в тайник не помогало, тайник был организован на другой локации. Так что ещё раз спасибо и сновым годом вас, здоровья и всего того что вы сами себе пожелаете.

 

Цитировать предыдущие посты полностью вовсе не обязательно.

ColR_iT

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

Не могу разобраться, толи я что-то не понимаю, толи стимовская версия не слушается...

В этом сообщении http://www.amk-team.ru/forum/index.php?showtopic=8230&st=2020#entry478281 написано как заставить всех говорить со мной.

Сделал, но не работает. Я попытался удалить все проверки в Гулаг скрипте на командера {!is_squad_commander}, снова провал. Тогда я удалил вообще все проверки, на оружие, ранение, на то что я враг, все равно все работает :ny_huh: . Сможет кто-нибудь помочь?

Очевидное и невероятное

Господа, где редактируется такой параметр, как состояние предмета, при котором техник его не ремонтирует?

хочу сделать чтоб они всё ремонтировали.

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

~150Uz3icF.jpg

Если бы иконки этих предметов отрисовывались самыми нижними, то такой проблемы бы не было. Выяснил, что упорядочивание идёт точно не по названию секции, т.к. секции удаляемых предметов начинаются с "zz_". Если у кого есть мысли по этому вопросу, прошу поделиться.

Shredder, сделай размер иконок для удаляемых предметов 0х0.

 

Странно, в ТЧ такого вылета не было. Выкидывание этих предметов из инвентаря перед удалением тоже не помогает?

Изменено пользователем Charsi
  • Нравится 2

Charsi, почему-то я был уверен, что вылетит, ну и собственно вот:

FATAL ERROR

 

[error]Expression : assertion failed

[error]Function : CUICellContainer::GetItemPos

[error]File : D:\prog_repository\sources\trunk\xrGame\ui\UIDragDropListEx.cpp

[error]Line : 769

[error]Description : 0

 

Когда то спрашивал про то как в пда включить метки переходов, сейчас при попытке сделать это ловлю вылет "бла-бла-бла? attempt to index 'obj' (a nill value)"

 

 

 

 
Простите за офф-топик, как сделать чтобы в ЗП переходы отображались на карте?

А также у меня при попытке заспавнить "метку на карте" (простите за мой простонародный слэнг) батник отказиваеться собирать алл спавн(

 

 

 

Outlaw, привожу способ, когда-то, кем-то в этой теме описанный:

 

Делаешь скрипт,например, lev_ch.script, в него пишешь:

 

 

Clayman, конечно это "кому-то", кто написал процитированное тобою нужно бы адресовать:"А головою кто будет думать?", но и тебе стОит более критично цитировать ...

Цитата

Далее, в bind_stalker.script после function actor_binder:update(delta) надо написать lev_ch.level_changer()

Это для того, чтобы один раз в самом начале игры поставить метки дается совет ставить проверку и выдачу каждые 20ms на потяжении все игры? wub.gif

Ну посмтотите тот саму функцию actor_binder:update(delta)!

Ведь все уже есть готовое:

 

 

 

if self.bCheckStart then

printf("SET DEFAULT INFOS")

if not has_alife_info("global_dialogs") then

self.object:give_info_portion("global_dialogs")

end

if not has_alife_info("level_changer_icons") then

self.object:give_info_portion("level_changer_icons")

end

self.bCheckStart = false

end

- и инфопоршень ("level_changer_icons") именно для отображения иконок переходов и именно только один раз при первом апдейте ...

 

Всего то нужно вставить сюда (при выдаче инфопоршня) вызов lev_ch.put_spots() или даже саму функцию.

 

 

Подскажите что за бабуйня и как с ней бороться?

Код

function level_changer()

if not has_alife_info("info_new_level") then

put_spots()

db.actor:give_info_portion("info_new_level")

end

end

 

function put_spots()

for i=1,65534 do

local obj = alife():object(i)

if obj then

if obj:name() == "Название 1-го левел чэнджера" then

level.map_add_object_spot_ser(obj.id,"level_changer_up","Подпись 1")

elseif obj:name() == "Название 2-го левел чэнджера" then

level.map_add_object_spot_ser(obj.id,"level_changer_up","Подпись 2")

elseif .....

end

end

end

Название берётся из поля name level_changer'а в all.spawn;

Подпись - например, "На Кордон".

Далее, в bind_stalker.script после function actor_binder:update(delta) надо написать lev_ch.level_changer()

и в файл info_portions.xml вставить строку

<info_portion id="info_new_level"></info_portion>

 

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

47.gif

LXTwrBW.png
ukgXKMe.png

Когда то спрашивал про то как в пда включить метки переходов, сейчас при попытке сделать это ловлю вылет "бла-бла-бла? attempt to index 'obj' (a nill value)"

 

 

 

Простите за офф-топик, как сделать чтобы в ЗП переходы отображались на карте?

А также у меня при попытке заспавнить "метку на карте" (простите за мой простонародный слэнг) батник отказиваеться собирать алл спавн(

 

 

 

Outlaw, привожу способ, когда-то, кем-то в этой теме описанный:

 

Делаешь скрипт,например, lev_ch.script, в него пишешь:

 

Clayman, конечно это "кому-то", кто написал процитированное тобою нужно бы адресовать:"А головою кто будет думать?", но и тебе стОит более критично цитировать ...

Цитата

Далее, в bind_stalker.script после function actor_binder:update(delta) надо написать lev_ch.level_changer()

Это для того, чтобы один раз в самом начале игры поставить метки дается совет ставить проверку и выдачу каждые 20ms на потяжении все игры? wub.gif

Ну посмтотите тот саму функцию actor_binder:update(delta)!

Ведь все уже есть готовое:

 

 

 

if self.bCheckStart then

printf("SET DEFAULT INFOS")

if not has_alife_info("global_dialogs") then

self.object:give_info_portion("global_dialogs")

end

if not has_alife_info("level_changer_icons") then

self.object:give_info_portion("level_changer_icons")

end

self.bCheckStart = false

end

- и инфопоршень ("level_changer_icons") именно для отображения иконок переходов и именно только один раз при первом апдейте ...

 

Всего то нужно вставить сюда (при выдаче инфопоршня) вызов lev_ch.put_spots() или даже саму функцию.

 

 

Подскажите что за "ерунда" и как с ней бороться?

 

Поменьше "жаргона" в постах.

ColR_iT

Код

function level_changer()

if not has_alife_info("info_new_level") then

put_spots()

db.actor:give_info_portion("info_new_level")

end

end

 

function put_spots()

for i=1,65534 do

local obj = alife():object(i)

if obj then

if obj:name() == "Название 1-го левел чэнджера" then

level.map_add_object_spot_ser(obj.id,"level_changer_up","Подпись 1")

elseif obj:name() == "Название 2-го левел чэнджера" then

level.map_add_object_spot_ser(obj.id,"level_changer_up","Подпись 2")

elseif .....

end

end

end

Название берётся из поля name level_changer'а в all.spawn;

Подпись - например, "На Кордон".

Далее, в bind_stalker.script после function actor_binder:update(delta) надо написать lev_ch.level_changer()

и в файл info_portions.xml вставить строку

<info_portion id="info_new_level"></info_portion>

 

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

47.gif

LXTwrBW.png
ukgXKMe.png

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

По поводу меток переходов. Помогло немного другое построение скрипта. Может кому пригодится.

function upd_level_changer()

for a=1,65534 do

local obj = alife():object(a)

if obj then

if obj and obj:name() == "имя_перехода_в_allspawn_1" then

level.map_add_object_spot_ser(obj.id,"level_changer_up","Название метки на карте 1")

end

end

if obj then

if obj and obj:name() == "имя_перехода_в_allspawn_2" then

level.map_add_object_spot_ser(obj.id,"level_changer_up","Название метки на карте 2")

end

end

...

end

end

 

 

В ЗП когда заспаунишь переход он действует сразу при попадании игрока в него, без вопросов. Никто не подскажет как этот "Вопрос типа вы действительно хотите перейти на другую локацию? Да/Нет" восстановить? А то даже проверить границы перехода проще будет)

47.gif

LXTwrBW.png
ukgXKMe.png

Я точно не знаю, в ту ли тему я пишу, если нет, поправьте.

Можно ли увеличить количество надписей, отображающихся при загрузке (лоадскринов)?

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

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

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

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

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

Войти

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

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

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...