Overf1rst 1 503 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Тень Чернобыля. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 6 4 1 3 1 3 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 21 июня, 2021 ian98 я в папке с чекером создал папку отдельную, только туда кидаю скрипты для проверки В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 298 Опубликовано 21 июня, 2021 vader_33 снова лог со столом, он же вроде есть, или его нет? Или table в луа это вообще не стол? Expression : fatal error Function : CScriptEngine::lua_error File : .\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:30: attempt to call field 'change_rank2' (a table value) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 21 июня, 2021 ian98 table - это таблица. Как щас файл выглядит? Дополнено 0 минут спустя ian98 и как функция в бинд сталкере выглядит В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 298 Опубликовано 21 июня, 2021 (изменено) vader_33 Спойлер function change_rank_2() for a = 1, 65534, 1 do local sobj = alife():object(a) if sobj and is_stalker(sobj) and sobj:alive() and sobj:rank()==0 then local is_tbl_npc = npc_tbl[ sobj:name() ] or npc_tbl[ sobj:profile_name() ] if is_tbl_npc then sobj:set_rank(upgrade_exp*lvl+math.random(1,1000)) end end end end function is_stalker(sobj) return sobj:clsid() == clsid.script_stalker end таблица сверху есть одна npc_tbl Я вот думаю, может она вообще не нужна? Таблица эта. Ну-ка уберу ее. Изменено 21 июня, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 21 июня, 2021 ian98 вообще весь файл. В бинд сталкере как прописано? В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 298 Опубликовано 21 июня, 2021 bind_stalker.scriptchange_rank2.script Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 21 июня, 2021 (изменено) ian98 а, блин, невнимательность. Функция называется change_rank_2(), а в биндере прописано change_rank2() Изменено 21 июня, 2021 пользователем vader_33 1 В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 298 Опубликовано 21 июня, 2021 (изменено) vader_33 боги. я только сейчас увидел... Целый день копался в character_desc, выдавал там визуалы сюжетным нпс, с ума сойдешь... Изменено 21 июня, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 21 июня, 2021 ian98 надо отдыхать) В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 298 Опубликовано 21 июня, 2021 vader_33 так хочется доделать уже, плюс все пробегать нужно, а там внезапно ВСЕГДА какие-то вылеты на пути. Их править, пока правишь еще что-то придумал, ввел, опять пробегать и снова вылеты, и так по кругу. Уже 7 круг. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 21 июня, 2021 ian98 по невнимательности еще больше вылетов будет, лучше делать не спеша В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 298 Опубликовано 21 июня, 2021 (изменено) vader_33 Да тут уже:D Expression : fatal error Function : CScriptEngine::lua_error File : .\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...w of chernobyl\gamedata\scripts\change_rank_2.script:263: attempt to perform arithmetic on global 'upgrade_exp' (a nil value) Неправильно выдаю експу видно. Ага upgrade_exp это из xrs_armor скрипта Изменено 21 июня, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 21 июня, 2021 ian98 upgrade_exp не назначено Дополнено 2 минуты спустя ian98 я ж говорю, отдыхать надо) Всё, я ушел, уже бежать надо 1 В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 298 Опубликовано 21 июня, 2021 (изменено) Проспался, а теперь не могу понять как выдать репутацию. set_character_reputation(number) и change_character_reputation(number) приводят к вылетам. И еще это условие как-то через одно место проверяется sobj:rank() == 0. Спойлер function change_rank_2() for a = 1, 65534, 1 do local sobj = alife():object(a) if sobj and is_stalker(sobj) then local is_tbl_npc = npc_tbl[ sobj:name() ] or npc_tbl[ sobj:profile_name() ] if is_tbl_npc then sobj:set_rank(math.random(1,1000)) sobj:set_character_reputation(math.random(-5000,5000)) end end end end Вообще, цель создать скрипт, который бы выдавал ранг и репутацию всем у кого ранг равняется 0. Сейчас я вроде понял почему не работало sobj:rank() == 0. Ну, я понял, что оно не в той строчке не так вставлено, но я не знаю как вставить так. Пробовал так Спойлер -- всех комментариев нет в скрипте. function change_rank_2() for a = 1, 65534, 1 do local sobj = alife():object(a) if sobj:rank() >= 1 then return end -- что-то вроде проверки, если ранг выше или равняется 1, то аборт if sobj:rank() == 0 then -- если ранг 0, то if sobj and is_stalker(sobj) then -- если сталкер sobj:set_rank(math.random(1,1000)) -- выдаем ранг, как выдавать еще и репутацию я так и не понял end end end end function is_stalker(sobj) return sobj:clsid() == clsid.script_stalker end Спойлер FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : .\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...w of chernobyl\gamedata\scripts\change_rank_2.script:6: attempt to call method 'rank' (a nil value) stack trace: Я думаю ошибка какая-то простая, ранга этого нет, но как сделать чтобы он был. Я не понимаю. Это должно быть как local rank = что-то там? А уже потом все это? Что-то типо такого Спойлер function change_rank_2() for a = 1, 65534, 1 do local sobj = alife():object(a) local rank = ranks.get_obj_rank_name(npc) -- нашел такую строчку в одном из скриптов. Она неправильная, но как пример, что ранк нужно обозначить сперва. if rank() >= 1 then return end if rank() == 0 then if sobj and is_stalker(sobj) then sobj:set_rank(math.random(1,1000)) end end end end function is_stalker(sobj) return sobj:clsid() == clsid.script_stalker end Изменено 21 июня, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 22 июня, 2021 (изменено) 9 часов назад, ian98 сказал: set_character_reputation(number) и change_character_reputation(number) приводят к вылетам просил же лог прикладывать 9 часов назад, ian98 сказал: И еще это условие как-то через одно место проверяется sobj:rank() == 0. в чем именно там ошибка проверки? Сверяли ранг всех нпс до изменения и после изменения? Перебрал всех нпс и вывел в лог ранги - ни у кого 0 не было, в основном больше 100 9 часов назад, ian98 сказал: local rank = что-то там? это уже есть, sobj:rank(). А вылет из-за того, что сначала должно идти условие if sobj..., чтобы потом sobj:rank() применялось к точно существующему объекту в игре. При переборе просто подставляются числа от 1 до 65534, не обязательно alife():object(a) при этом будет существовать в игре Дополнено 10 минуты спустя 9 часов назад, ian98 сказал: set_character_reputation(number) и change_character_reputation(number) приводят к вылетам может вылет происходит из-за того, что нпс не успевают выйти в онлайн. Если в луа_хелп метод находится только в C++ class game_object - значит, он только для онлайнового объекта Изменено 22 июня, 2021 пользователем vader_33 В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 298 Опубликовано 22 июня, 2021 (изменено) 1 час назад, vader_33 сказал: в чем именно там ошибка проверки? Сверяли ранг всех нпс до изменения и после изменения? Перебрал всех нпс и вывел в лог ранги - ни у кого 0 не было, в основном больше 100 sobj:rank() == 0 then Если вставляю в скрипт, то персонажи с 0 рангом не получают ранг, а все остальные получают. А как можно сделать так, чтобы наоборот персонажи с нулевым получали, а все остальные нет? Неужели просто поставить 1? В общем, нет, странно все это. Вот, мой скрипт, уже в который раз: Спойлер function change_rank_2() for a = 1, 65534, 1 do local sobj = alife():object(a) if sobj and is_stalker(sobj) and sobj:rank() == 0 then sobj:set_rank(math.random(1,2000)) end end end function is_stalker(sobj) return sobj:clsid() == clsid.script_stalker end Вот профиль волка Спойлер <icon>ui_npc_u_stalker_neytral_balon_1</icon> <bio>esc_wolf_bio</bio> <name>esc_wolf_name</name> <rank>0</rank> <class>esc_wolf</class> <crouch_type>-1</crouch_type> <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <reputation>5</reputation> <money min="600" max="2000" infinitive="0"/> <snd_config>characters_voice\human_01\stalker\</snd_config> <visual>actors\trader\trader</visual> А вот, что в игре Спойлер Спойлер Да, у волка еще есть 105 профилей, все сделаны по шаблону Спойлер <specific_character id="esc_wolf_1" team_default = "1"> #include "gameplay\random_visual\1.xml" <name>esc_wolf_name</name> <rank>0</rank> <class>esc_wolf</class> <crouch_type>-1</crouch_type> <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <supplies> #include "gameplay\weapons\test.xml" #include "gameplay\loot\loot.xml" </supplies> #include "gameplay\character_no_criticals.xml" #include "gameplay\dialogs\wolf.xml" </specific_character> А каждый конфиг в gamedata/random_visual выглядит вот так. Вот прям каждый. Проверено тотал коммандером(имеется ввиду <rank>0</rank> или его отсутствие вообще) Спойлер <icon>ui_npc_u_barman</icon> <map_icon x="1" y="4"></map_icon> <bio>bar_barmen_bio</bio> <money min="100000" max="110000" infinitive="1"></money> <reputation>50</reputation> <visual>actors\stalker_zombi\zombie_fresh_1</visual> <snd_config>characters_voice\human_01\stalker\</snd_config> или я уже отчаялся и делал так Спойлер <icon>ui_npc_u_stalker_neytral_balon_1</icon> <bio>esc_wolf_bio</bio> <reputation>5</reputation> <money min="600" max="2000" infinitive="0"/> <rank>0</rank> <snd_config>characters_voice\human_01\stalker\</snd_config> <visual>actors\neytral\stalker_neytral_balon_1</visual> Это я к тому, что ранг Волка, ну, полюбому нулевой, а скрипт его игнорит... И если убрать проверку, только тогда Волк вместе со всеми начинает получать свой ранк. Только скрипт на нетспавне висит и каждый раз ранк роллит по новой, что прикольно, но ломает xrs_armor, который я все же решил не отключать и раздавать им визуалы несюжетным персам. Так и сижу, голову ломаю. Что делаю не так.. Можно ли вырезать выдачу ранга в xrs_armor, но оставить выдачу визуала? Там скрипт большой, пытался удалить строки за это отвечающие пару раз, но в итоге ломал н?*)ен весь скрипт целиком. Изменено 22 июня, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 22 июня, 2021 32 минуты назад, ian98 сказал: Можно ли вырезать выдачу ранга в xrs_armor, но оставить выдачу визуала? а, так это из-за выдачи ранга в xrs_armor все получают ранг. Я-то думаю, что такое, у меня с условием "if sobj and is_stalker(sobj) and sobj:alive() and sobj:rank()==0 then" вообще никто ничего не получает, мистика. Вечером гляну xrs_armor Дополнено 3 минуты спустя ian98 он остался как в этом сообщении или менялся? В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 298 Опубликовано 22 июня, 2021 (изменено) vader_33 Да, xrs_armor дает ранг, но, уточню на всякий, скриншоты которые скидывал я сделаны с отключенным xrs_armor. А вообще, если оставить xrs_armor и скрипт на выдачу ранга, то xrs_armor кое-как выдает скины(выдает далеко не всем, а только персонажам с высоким рангом, только они переодеваются, хотя броники для переодевания у всех прописаны со 100 шансом. НО, уже переодетые нпс при перезагрузке могут своего визуала лишиться, я думаю это уже связано со вторым скриптом на выдачу ранга.) Спойлер function change_rank_2() for a = 1, 65534, 1 do local sobj = alife():object(a) if sobj and is_stalker(sobj) then sobj:set_rank(math.random(1,2000)) end end end function is_stalker(sobj) return sobj:clsid() == clsid.script_stalker end Дополнено 2 минуты спустя vader_33 остался таким же. Я могу вообще всю геймдату дать, заодно и оценишь свой вклад, да и проще будет. Она 400 мб весит. Мод, на мой скромный вкус, получается действительно весьма потешный в самом хорошем смысле. Дополнено 3 минуты спустя xrs_armor.script а могу просто оставить, на всякий. Все-таки там были изменения, хоть и незначительные. Изменено 22 июня, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 22 июня, 2021 ian98 пока не ушел, быстренько раздал новичкам в деревне экзы - как был ранг новичок, так и остался. xrs_armor.script редактировал оригинальный, копировать 100 визуалов - ну такое) change_rank2.script тоже скидываю, с которым проверял, ни у одного ранга 1000 нету. Только для теста в xrs_armor.script закомментил 607 строчку, чтобы нпс сразу переодевались. У меня всё работает, как задумано, нпс с рангом не 0 не меняют ранг ни при переодевании ни при загрузке, если с этими файлами все равно будут менять ранг - я уже не знаю, в чем тут дело change_rank2.script xrs_armor.7z 1 В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 298 Опубликовано 22 июня, 2021 (изменено) vader_33 Я даю 105 визуалов) Только тем у кого проблемы с xrs_armor и они выходят калеками из оффлайна. Хотя, возможно, потихоньку действительно раздам каждому нпс в игре по 105 визуалов+несюжетные будут получать по визуалу сверху+ранг динамический, еще бы репутацию динамическую ко всему прочему. Дело нехитрое, просто долгое и нудное. Дополнено 32 минуты спустя vader_33 не знаю, а что должно было произойти? Со своим xrs_armor, но с комментарием строчки --if dist_to_actor>1 or dist_to_actor>150 then скомбинировал твой скрипт для выдачи ранга. В самой игре выдал всем экзоскелеты: персонажи с 0 рангом остались с 0 рангом и не сменили визуалы, в топе были какие-то военные и я не знаю сменили ли они визуалы, не смотрел. Мне кажется не сменили. Попробовал потом свой xsr_armor выключить, полностью взяв два файла твоих. Вижу визуалы у всех экзоскелетные и ранги новички. Я могу и так обыграть, прикольно. Это я могу 200 мб расплодившихся визуалов по своиму какому-то косяку явно удалять теперь и без смены ранга менять один раз и навсегда визуал через костюм. Всего 1 строчка? Ну, кстати, по-моему там две строчки. Я еще увидел -- end. Нет, вообще большое спасибо, у меня явно были какие-то проблемы в скриптах. Теперь их точно меньше. А вот там таймер стоит аж на 10 секунд, так ли он нужен? Возвращаясь к 100+ визуалам, можно ли тогда это сделать скриптом? Речь об этой строчке из профиля каждого нпс в игре <icon x="20" y="10"></icon> - можно ли выдавать скриптом это? Изменено 22 июня, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 22 июня, 2021 ian98 строчка с условием закоменчена для теста, чтобы сразу переодевались. С условием будут переодеваться когда актор не видит нпс и отошёл от них. Она не влияет ни на что, просто красивее смотрится, чем исчезающий и проявляющиеся нпс. А ранг менялся той же функцией сет ранк, её закомментил. Я щас не могу посмотреть, что там за таймер, вечером гляну В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 298 Опубликовано 22 июня, 2021 (изменено) vader_33 таймер на срабатывания переодевания(уход в оффлайн/онлайн). Их там два. Один на +11000, второй на +8500. Я поставил на +1000, +500 - скрипт практически сразу срабатывает и избавляет игрока от случайного вылета с логом stack trace: 0023:004D8F60 XR_3DA.exe, CTheoraSurface::`vftable'() [error][ 126] : Не найден указанный модуль. или stack trace: 0023:004D8F60 XR_3DA.exe, CTheoraSurface::`vftable'() при использовании пда во время срабатывания скрипта. Еще попытался снова выдать репутацию. Сменил немного скрипт согласно рекомендациям. Сейчас он выглядит так, но не работает. Но и не вылетает, что тоже неплохо. Спойлер function change_rep_2() for k, v in pairs (db.storage) do local obj = level.object_by_id(k) if sobj and is_stalker(sobj) then local is_tbl_npc = npc_tbl[ sobj:name() ] or npc_tbl[ sobj:profile_name() ] if is_tbl_npc then --_dbg.log1("до set rank: npc = %s, rank = %s", sobj:name(), sobj:rank()) sobj:set_character_reputation(-5000) --_dbg.log1(" после set rank: npc = %s, rank = %s", sobj:name(), sobj:rank()) end end end end dbg log может и убрать можно бы было, но я боюсь трогать скрипты. Они об меня ломаются. Изменено 22 июня, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 22 июня, 2021 ian98 дбг лог можно убрать, я убрать забыл. В нет спавне ещё не успевают выйти в онлайн нпс, в дб.сторадж онлайновые только Дополнено 7 минуты спустя ian98 насчёт изменения иконки, надо смотреть скрипт изменения нет-пакета, меняется ли она В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Bowsette 2 029 Опубликовано 22 июня, 2021 (изменено) del Изменено 22 июня, 2021 пользователем Ruwar Спойлер Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 22 июня, 2021 16 часов назад, ian98 сказал: при использовании пда во время срабатывания скрипта. хм, у меня не вылетает В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты