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

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


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

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

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

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

Работы на Artstationhttps://www.artstation.com/artist/stalker_lom

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

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

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

 

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

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

Ты совершенно правильно восстановил этот вывод ( 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

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

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

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

...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

Не стал ломать файлы, а просто подбором, раз 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 пользователей

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