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

Скриптование


Svoboда

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

Создал скрипт для включения в ПДА меток на рестрикторы по названию их секции. Вылет с логом: 

 

Скрытый текст

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

 

Поделиться этим сообщением


Ссылка на сообщение
1 час назад, Norman Eisenherz сказал:

1. Нужны скобки вокруг проверок имени: объект И (имя ИЛИ имя …)

 

2. При таком количестве проверок можно переделать код на сверку по списку:

local names = { name_1 = true, name_2 = true, … }

if sobj and names[ sobj:section_name() ] then …

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

Поделиться этим сообщением


Ссылка на сообщение

Возможно ли повесить коллбэк на обыск трупа НПС?

Поделиться этим сообщением


Ссылка на сообщение

А интересное кино получается, отметки на карте исчезают после загрузки сохранения. Их нужно обновлять после каждого load'а? 

Поделиться этим сообщением


Ссылка на сообщение
7 часов назад, gam сказал:

Конечно. Но для чего?

Чтобы сделать проверку, когда ГГ обыскивает любого НПС из группы.

Поделиться этим сообщением


Ссылка на сообщение

Написал скрипт на проверку нахождения в спейс рестрикторе  НПС, чтобы ГГ зачистил указанную зону, кроме НПС с группировкой "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:

 

Поделиться этим сообщением


Ссылка на сообщение
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]

 

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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