Как заспавнить мертвеца — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(→в ТЧ) |
|||
(не показаны 3 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
− | + | ==== в ТЧ ==== | |
− | + | Делаем всё так как написано в [[All.spawn. Создание NPC|этой]] статье.<br /> | |
+ | только вместо ''health = 1'' и ''upd:health = 1''<br /> | ||
+ | ставим ''health = 0'' и ''upd:health = 0'' | ||
==== Прим. от Erlik==== | ==== Прим. от Erlik==== | ||
''В ТЧ тоже есть метод для спавна трупа:'' | ''В ТЧ тоже есть метод для спавна трупа:'' | ||
Строка 9: | Строка 11: | ||
==== в ЧН ==== | ==== в ЧН ==== | ||
− | Можно так же как и в ТЧ. Или без редактирования all.spawn:<br /> | + | Можно так же как и в ТЧ. Или без редактирования '''all.spawn''':<br /> |
− | Создать НПС, добавить его в character_desc_*****.xml, npc_profile.xml и spawn_sections.ltx<br /> | + | Создать НПС, добавить его в '''character_desc_*****.xml''', '''npc_profile.xml''' и '''spawn_sections.ltx'''<br /> |
− | В последнем файле (spawn_sections.ltx) добавить НПС свою логику.<br /> | + | В последнем файле ('''spawn_sections.ltx''') добавить НПС свою логику.<br /> |
− | < | + | <ini> |
[ID_непися]:stalker | [ID_непися]:stalker | ||
$spawn = "respawn\ID_непися" | $spawn = "respawn\ID_непися" | ||
character_profile = ID_непися ;из character_desc_*****.xml | character_profile = ID_непися ;из character_desc_*****.xml | ||
custom_data = scripts\скриптовая_логика_нпс.ltx ;из gamedata\configs\scripts\ | custom_data = scripts\скриптовая_логика_нпс.ltx ;из gamedata\configs\scripts\ | ||
− | </ | + | </ini> |
− | в gamedata\configs\scripts\ создать логику для нашего мертвеца: | + | в '''gamedata\configs\scripts\''' создать логику для нашего мертвеца: |
− | < | + | <ini> |
[logic] | [logic] | ||
active = walker@1 | active = walker@1 | ||
Строка 29: | Строка 31: | ||
combat_ignore_cond = true | combat_ignore_cond = true | ||
on_info = %=kill_npc()% | on_info = %=kill_npc()% | ||
− | </ | + | </ini> |
Можно также сделать, чтобы НПС помер после выдачи инфопорции: | Можно также сделать, чтобы НПС помер после выдачи инфопорции: | ||
− | < | + | <ini> |
[logic] | [logic] | ||
active = walker@1 | active = walker@1 | ||
Строка 41: | Строка 43: | ||
combat_ignore_cond = true | combat_ignore_cond = true | ||
on_info = {+инфопорция} %=kill_npc()% | on_info = {+инфопорция} %=kill_npc()% | ||
− | </ | + | </ini> |
==== в ЗП ==== | ==== в ЗП ==== | ||
− | В ЗП для этого даже есть специальная функция: | + | В ЗП для этого даже есть специальная функция. Находится она в '''xr_effects.script''': |
+ | <lua>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</lua> | ||
+ | Если вызывать через логику, то имеет такую структуру: | ||
<pre> | <pre> | ||
=spawn_corpse(ID_непися:walk_поинт_для_спавна) | =spawn_corpse(ID_непися:walk_поинт_для_спавна) | ||
</pre> | </pre> | ||
− | + | На примере рестриктора:<br /> | |
Спавн с самого начала игры | Спавн с самого начала игры | ||
− | < | + | <ini> |
[logic] | [logic] | ||
active = sr_idle | active = sr_idle | ||
Строка 59: | Строка 87: | ||
[sr_idle@end] | [sr_idle@end] | ||
− | </ | + | </ini> |
Или спавн после выдачи определённой инфопорции | Или спавн после выдачи определённой инфопорции | ||
− | < | + | <ini> |
[logic] | [logic] | ||
active = sr_idle | active = sr_idle | ||
Строка 70: | Строка 98: | ||
[sr_idle@end] | [sr_idle@end] | ||
− | </ | + | </ini> |
+ | |||
+ | ==== Универсальный способ ==== | ||
+ | Все очень просто. Создаем стандартную функцию спавна: | ||
+ | <lua>function test_corpse_spawn() | ||
+ | alife():create("ID_НПС",vector():set(x,y,z),lvid,gvid) | ||
+ | end</lua> | ||
+ | '''x, y, z, lvid, gvid''' - координаты | ||
+ | И дописываем к строке спавна значение ''':on_death()''': | ||
+ | <lua>function test_corpse_spawn | ||
+ | alife():create("ID_НПС",vector():set(x,y,z),lvid,gvid):on_death() | ||
+ | end</lua> | ||
− | Автор [[Участник:THE_ATLAS|THE_ATLAS]] | + | '''Автор:''' [[Участник:THE_ATLAS|THE_ATLAS]] |
+ | <br>'''Подкорректировал некоторые утверждения, оформление и добавил универсальный способ:''' [[Участник:FantomICW|FantomICW]] | ||
− | [[Категория: | + | [[Категория:Конфигурационные_файлы]] |
Текущая версия на 19:47, 17 сентября 2013
Содержание
в ТЧ
Делаем всё так как написано в этой статье.
только вместо health = 1 и upd:health = 1
ставим health = 0 и upd:health = 0
Прим. от Erlik
В ТЧ тоже есть метод для спавна трупа:
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
Автор: THE_ATLAS
Подкорректировал некоторые утверждения, оформление и добавил универсальный способ: FantomICW