в ТЧ
Спавнимо НПС. Можливо, зроблю про це окремий пост та скину в коментарі сюди, якщо вже його не зробив.
тільки замість health = 1 та upd:health = 1
ставимо health = 0 та upd:health = 0
У ТЧ теж є метод для спавна трупа:
local obj = alife ( ) :create ( "stalker" , pos, lvid, gvid ) -- позиція та вертекси obj:on_death ( )
в ЧН
Можна так само, як і в ТЧ. Або без редагування all.spawn :
Створити НПС, додати його до character_desc_**.xml , npc_profile.xml і spawn_sections.ltx
В останньому файлі ( spawn_sections.ltx ) додати НПС свою логіку.
[ID_непися]:stalker $spawn = "respawn\ID_непися" character_profile = ID_непися ;из character_desc_**.xml custom_data = scripts\скриптовая_логика_нпс.ltx ;из gamedata\configs\scripts\
у gamedata\configs\scripts\ створити логіку для нашого мерця:
[logic] active = walker@1 [walker@1] path_walk = где_стоит path_look = куда_смотрит combat_ignore_cond = true on_info = %=kill_npc()%
Можна також зробити, щоб НПС помер після видачі інфопорції:
[logic] active = walker@1 [walker@1] path_walk = где_стоит path_look = куда_смотрит combat_ignore_cond = true on_info = {+инфопорция} %=kill_npc()%
у ЗП
У ЗП для цього є навіть спеціальна функція. Знаходиться вона в xr_effects.script :
function spawn_corpse(actor, obj, p) --' p[1] - секция кого спаунить --' p[2] - имя патрульного пути где спаунить. local spawn_sect = p[1] if spawn_sect == nil then abort("Wrong spawn section for 'spawn_corpse' function %s. For object %s", tostring(spawn_sect), obj:name()) end local path_name = p[2] if path_name == nil then abort("Wrong path_name for 'spawn_corpse' function %s. For object %s", tostring(path_name), obj:name()) end if not level.patrol_path_exists(path_name) then abort("Path %s doesnt exist. Function 'spawn_corpse' for object %s ", tostring(path_name), obj:name()) end local ptr = patrol(path_name) local index = p[3] or 0 local se_obj = alife():create(spawn_sect, ptr:point(index), ptr:level_vertex_id(0), ptr:game_vertex_id(0)) se_obj:kill() end
Якщо викликати через логіку, має таку структуру:
=spawn_corpse(ID_непися:walk_поинт_для_спавна)
На прикладі рестриктора:
Спавн від початку гри
[logic] active = sr_idle [sr_idle] on_info = sr_idle@end %=spawn_corpse(ID_непися:walk_поинт_для_спавна)% [sr_idle@end]
Або спавн після видачі певної інфопорції
[logic] active = sr_idle [sr_idle] on_info = {+инфопорция} sr_idle@end %=spawn_corpse(ID_непися:walk_поинт_для_спавна)% [sr_idle@end]
Універсальний спосіб
Все дуже просто. Створюємо стандартну функцію спавна:
function test_corpse_spawn() alife():create("ID_НПС",vector():set(x,y,z),lvid,gvid) end
x, y, z, lvid, gvid - координати І дописуємо до рядка сповна значення :on_death() :
function test_corpse_spawn alife():create("ID_НПС",vector():set(x,y,z),lvid,gvid):on_death() end