rost2000 0 Опубликовано 26 Октября Создал скрипт для включения в ПДА меток на рестрикторы по названию их секции. Вылет с логом: Скрытый текст FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...:\games\s.t.a.l.k.e.r\gamedata\scripts\sander.script:382: attempt to index local 'sobj' (a nil value) Сам код: Скрытый текст function yan_storyline_spot_add() for i = 1, 65534 do local sim = alife() if sim then local sobj = sim:object(i) if sobj and sobj:section_name() == "yan_storyline_ecolog_spot1" or sobj:section_name() == "yan_storyline_ecolog_spot2" or sobj:section_name() == "yan_storyline_ecolog_spot3" or sobj:section_name() == "yan_storyline_ecolog_spot4" then -- printf("level has sobj", sobj) level.map_add_object_spot(sobj.id, "crlc_big", "storyline_yan_spot") end end end end Поделиться этим сообщением Ссылка на сообщение
rost2000 0 Опубликовано 26 Октября 1 час назад, Norman Eisenherz сказал: 1. Нужны скобки вокруг проверок имени: объект И (имя ИЛИ имя …) 2. При таком количестве проверок можно переделать код на сверку по списку: local names = { name_1 = true, name_2 = true, … } … if sobj and names[ sobj:section_name() ] then … Вылет пропал, но метка так и не появилась. Предполагаю, что нужно id не серверного, а клиентского объекта получить? Поделиться этим сообщением Ссылка на сообщение
rost2000 0 Опубликовано 28 Октября Возможно ли повесить коллбэк на обыск трупа НПС? Поделиться этим сообщением Ссылка на сообщение
rost2000 0 Опубликовано 28 Октября А интересное кино получается, отметки на карте исчезают после загрузки сохранения. Их нужно обновлять после каждого load'а? Поделиться этим сообщением Ссылка на сообщение
rost2000 0 Опубликовано 29 Октября 7 часов назад, gam сказал: Конечно. Но для чего? Чтобы сделать проверку, когда ГГ обыскивает любого НПС из группы. Поделиться этим сообщением Ссылка на сообщение
rost2000 0 Опубликовано 5 Ноября Написал скрипт на проверку нахождения в спейс рестрикторе НПС, чтобы ГГ зачистил указанную зону, кроме НПС с группировкой "stalker". Вылетает с таким логом. Как я понимаю, методы применяются ко всем объектам, а нужно, чтобы только к НПС. Искал проверку, что объект является НПС, но не нашел. function storyline_complex_clear() local sim = alife() if sim then local zone = sim:story_object(904) for id = 1, 65534 do sobj = sim:object(id) return sobj and zone and zone:inside(sobj:position()) and not sobj:community() == "stalker" end end end Скрытый текст FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: No such operator defined stack trace: Поделиться этим сообщением Ссылка на сообщение
rost2000 0 Опубликовано 13 Ноября 05.11.2024 в 12:35, rost2000 сказал: Написал скрипт на проверку нахождения в спейс рестрикторе НПС, чтобы ГГ зачистил указанную зону, кроме НПС с группировкой "stalker". Вылетает с таким логом. Как я понимаю, методы применяются ко всем объектам, а нужно, чтобы только к НПС. Искал проверку, что объект является НПС, но не нашел. function storyline_complex_clear() local sim = alife() if sim then local zone = sim:story_object(904) for id = 1, 65534 do sobj = sim:object(id) return sobj and zone and zone:inside(sobj:position()) and not sobj:community() == "stalker" end end end Показать FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: No such operator defined stack trace: Продолжение по этому скрипту, который отказывается работать (проверка всегда возвращает false). Решил проверить, работает ли проверка на присутствие объекта в рестрикторе. Вызвал такую функцию: function sander_test() local sim = alife() local obj if sim then local zone = sim:story_object(904) for id = 1, 65534 do obj = sim:object(id) if zone and zone:inside(obj:position()) then news_manager.send_tip(db.actor, "NEW_INFO = " .. tostring(obj:name()), nil, "trader", 5000, 92) end end end end Что привело к вылету: Скрытый текст [13.11.24 12:14:13.051] [2912] [print_output([CScriptEngine::lua_pcall_failed])] SCRIPT RUNTIME ERROR: ! No such operator [__call] defined in class [___VECTOR] stack traceback: [C]: at 0x7ff6a879ff50 [C]: in function 'position' d:\games\s.t.a.l.k.e.r\gamedata\scripts\ui_main_menu.script:222: in function 'sander_test' d:\games\s.t.a.l.k.e.r\gamedata\scripts\ui_main_menu.script:189: in function <d:\games\s.t.a.l.k.e.r\gamedata\scripts\ui_main_menu.script:164> [13.11.24 12:14:13.051] [2912] ********************************************************************************* [13.11.24 12:14:13.051] [2912] FATAL ERROR [error]Expression : FATAL ERROR [error]Function : CScriptEngine::lua_pcall_failed [error]File : F:\Repos\OGSR-Engine\ogsr_engine\COMMON_AI\script_engine.cpp [error]Line : 60 [error]Description : [CScriptEngine::lua_pcall_failed]: ! No such operator [__call] defined in class [___VECTOR] Поделиться этим сообщением Ссылка на сообщение