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

Использование предметов актором


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

А вот мои поделки.

 

 

local actor_id 	= 0
local idnoparent	= 65535

local con = get_console()
local function log(arg)
	con:execute("load ~ "..string.sub(tostring(arg),1 , 200))
	--con:execute("flush")
end

--------------------------------------------------------------
function init_item(obj)
	local new_binder = bind_item(obj)
	obj:bind_object(new_binder)
end

class "bind_item" (object_binder)
function bind_item:__init(obj) super(obj)
end

function bind_item:net_spawn(data)
	if not object_binder.net_spawn(self, data) then
		return false
	end
	self.sect = self.object:section()
	
	log("bind_item:net_spawn(data) section-("..self.sect..")id-("..self.object:id()..")time-("..time_global()..")")
	return true
end

function bind_item:update(delta)
	object_binder.update(self, delta)
	local parent = self.object:parent()
	if parent then
		self.parent_id = parent:id()
	else
		self.parent_id = idnoparent
	end
	-- Здесь может быть код
end

function bind_item:net_destroy()
	if self.parent_id == actor_id and level.main_input_receiver() then
		log("bind_item:net_destroy()activate item!!! section-("..self.sect..")id-("..self.object:id()..")time-("..time_global()..")")
		-- Здесь располагаем код или функцию активации предмета.
	end
	object_binder.net_destroy(self)
end

 

 

Вероятно код не совсем оптимален, но я такой юзаю для активации разных предметов. Преимущество: не зависимость, кинул скрипт в папку скрипты, и всё работает, хорошо для глобальных модов, и мелких то же.

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

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


Ссылка на сообщение
1. Просто забросить скрипт - недостаточно. Надо еще в конфиге предмета прописывать. А там может быть прописано нечто иное.

Ну это само собой.

 

 

3. проверять парента на апдейте - это медленно и печально. Коллбэки срабатывают именно тогда, когда он действительно используется/передается и т.д.

В основном это для всяких приборов, которые обычно в единичном экземпляре. На счёт быстродействия, вроде не сколько микросекунд выполняется, общем если предметов не много, то это лучшей вариант, ну а если их 100500, то так лучше не надо, например для всяких аптечек не годится, а для пультов очень да же годится.

Хорошо бы в правленых движках этот колбек (use_item) на сам биндер предмета повесить.

ЗЫ

Ах да, ещё, если инвентарь открыт, и какой нибудь скрипт зачистит инвентарь ГГ (удалит этот предмет), то скрипт ложно сработает.

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

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

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


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

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