Как заспавнить мертвеца — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Как заспавнить мертвеца — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(Отмена правки 10298 участника 188.163.66.141 (обсуждение))
Строка 1: Строка 1:
 
==== в ТЧ ====
 
==== в ТЧ ====
 
Делаем всё так как написано в [[All.spawn. Создание NPC|этой]] статье.<br />
 
Делаем всё так как написано в [[All.spawn. Создание NPC|этой]] статье.<br />
только вместо health = 1 и upd:health = 1<br />
+
только вместо ''health = 1'' и ''upd:health = 1''<br />
ставим health = 0 и upd:health = 0
+
ставим ''health = 0'' и ''upd:health = 0''
 
==== Прим. от Erlik====
 
==== Прим. от Erlik====
 
''В ТЧ тоже есть метод для спавна трупа:''
 
''В ТЧ тоже есть метод для спавна трупа:''
Строка 11: Строка 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 />
<pre>
+
<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\
</pre>
+
</ini>
  
в gamedata\configs\scripts\ создать логику для нашего мертвеца:
+
в '''gamedata\configs\scripts\''' создать логику для нашего мертвеца:
<pre>
+
<ini>
 
[logic]
 
[logic]
 
active = walker@1
 
active = walker@1
Строка 31: Строка 31:
 
combat_ignore_cond = true
 
combat_ignore_cond = true
 
on_info = %=kill_npc()%
 
on_info = %=kill_npc()%
</pre>
+
</ini>
  
 
Можно также сделать, чтобы НПС помер после выдачи инфопорции:
 
Можно также сделать, чтобы НПС помер после выдачи инфопорции:
<pre>
+
<ini>
 
[logic]
 
[logic]
 
active = walker@1
 
active = walker@1
Строка 43: Строка 43:
 
combat_ignore_cond = true
 
combat_ignore_cond = true
 
on_info = {+инфопорция} %=kill_npc()%
 
on_info = {+инфопорция} %=kill_npc()%
</pre>
+
</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 />
+
На примере рестриктора:<br />
 
Спавн с самого начала игры
 
Спавн с самого начала игры
<pre>
+
<ini>
 
[logic]
 
[logic]
 
active = sr_idle
 
active = sr_idle
Строка 61: Строка 87:
  
 
[sr_idle@end]
 
[sr_idle@end]
</pre>
+
</ini>
  
 
Или спавн после выдачи определённой инфопорции
 
Или спавн после выдачи определённой инфопорции
<pre>
+
<ini>
 
[logic]
 
[logic]
 
active = sr_idle
 
active = sr_idle
Строка 72: Строка 98:
  
 
[sr_idle@end]
 
[sr_idle@end]
</pre>
+
</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]]
  
 
[[Категория:Конфигурационные файлы]]
 
[[Категория:Конфигурационные файлы]]

Версия 09:19, 23 июля 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

Другие места
LANGUAGE