Многие сталкивались с необходимостью получения поршня при обыске трупа нпс или мутанта с уникальным именем. Те, кто работает со all.spawn просто используют стандарт игры, добавляя в логическую схему в спавне
Code
[know_info]
инфопоршень
Но почему только ифопоршень? Зачем писать ещё коды для отлова инфопоршней при обыске? Есть простой и надёжный способ. Нужно открыть блокнотом скрипт xr_motivator.script, найти там следующий код
Code
function motivator_binder:use_callback(obj, who)
if self.object:alive() then
xr_use.notify_on_use(obj, who)
if self.st.active_section then
xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "use_callback", obj, who)
end
else
--//выдача дефолтных тайников
treasure_manager.get_treasure_manager():use(self.object)
end
end
и после строки treasure_manager.get_treasure_manager():use(self.object) вставляем название_скрипта.dead_use(victim, who). Должно получиться примерно так
Code
function motivator_binder:use_callback(obj, who)
if self.object:alive() then
xr_use.notify_on_use(obj, who)
if self.st.active_section then
xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "use_callback", obj, who)
end
else
--//выдача дефолтных тайников
treasure_manager.get_treasure_manager():use(self.object)
mod.dead_use(victim, who)
end
end
Таким образом в случае юзания игроком нпс после смерти помимо выдачи тайника будет вызываться свой скрипт. Создаём скрипт и вставляем следующее
Quote
----------------------------------------------------------------------------------------------------
-- Функция юзания трупов нпс
-- В мотиватор, use коллбек вставить название_скрипта.dead_use(obj, who)
----------------------------------------------------------------------------------------------------
function dead_use(victim, who)
if not (victim and who) then return end --/>фикс
local name = victim:name()
if victim and who and who:id() == db.actor:id() then
if string.find(name, "bandit_resp_veteran_dead_bor") then --имя нпс
db.actor:give_info_portion("ПОРШЕНЬ") --или вызов скриптовых функций
elseif string.find(name, "esc_lager_volk") then --перебор
db.actor:give_info_portion("ПОРШЕНЬ")
return false --повторной выдачи не будет
else
return true
end
end
end
Нужно только знать имя нпс, которое задаёться ему при спавне.
Пример. Если вы создали нпс, прописали ему секцию в spawn_sections, значит его имя будет название секции, которое задаёте при спавне.
С мутантами можно также. Но сложнее. Нужно в биндере мутантов добавить use_callback и аналогично с биндером нпс.