Автор:RaDJa
Уроков по созданию npc много, но многие из них не понятны, поэтому я сделал свою статью по этой теме.
Урок прменим и к ТЧ, и к ЧН, и к ЗП.
Для работы нужна программа Active Perl (её нужно просто скачать и установить) и ACDC (в ней мы и будем работать) Замечу, что для каждого Сталкера нужен свой ACDC.
После того как скачали эти программы в папке с ACDC создаём .bat файлы: decompile и compile. Первый батник будет распаковывать all.spawn, второй запаковывать обратно изменённый all.spawn. В батнике decompile прописываем вот это:
perl acdc.pl -d all.spawn
pause - для ТЧ
или
perl acdccop.pl -d all.spawn
pause - для ЗП
perl acdc_cs.pl -d all.spawn
pause - для ЧН
в батнике compile прописываем:
acdc.pl -c all.ltx
pause - для ТЧ
acdccop.pl -c all.ltx
pause - для ЗП и т.д.
далее закидываем all.spawn( путь gamedata\ spawns) в папку с acdc и запускаем decompile. Появилось много файлов ltx. Нам нужны файлы типа alife... и выбираем файл с нужной локацией.
Теперь приступаем к работе. Я буду показывать пример на базе ЗП.
-открываем alife_zaton
-в самый конец добавляем нашего сталкера
[1865] -номер объекта должен быть выше последнего объекта в файле
; cse_abstract properties
section_name = stalker
name = mudak -имя объекта
position = 62.0999984741211,-3.55999994277954,37.5999984741211 - место где он появится(рассмотрим позже)
direction = -0.0120869996026158,2.81339907646179,-0.0158249996602535 - угол поворота сталкера
; cse_alife_trader_abstract properties
money = 416
character_profile = mudak -имя в character desc...
; cse_alife_object properties
game_vertex_id = 292 - для каждого уровня это значение своё
distance = 0
level_vertex_id = 76655 - не трогаем
object_flags = 0xffffffbf
custom_data = <<END
[logic]
cfg = scripts\mudak_logic.ltx - ссылка на файл логики нашего сталкера
; cse
[smart_terrains]
none = true
END
story_id = 10000 - будем считать его порядковым номером (для новых npc лучше ставить больше 10000)
; cse_visual properties
visual_name = actors\stalker_merc\stalker_merc_4
; cse_alife_creature_abstract properties
g_team = 0
g_squad = 1
g_group = 2
health = 1 -поставим 0 будет лежать труп
dynamic_out_restrictions =
dynamic_in_restrictions =
upd:health = 1
upd:timestamp = 0
upd:creature_flags = 0
upd:position = 62.0999984741211,-3.55999994277954,37.5999984741211 - место где он появится(рассмотрим позже) Важно! Нужно писать то же самое что и в строке position
upd:o_model = 0
upd:o_torso = 2.81339907646179,-0.0120869996026158,0
upd:g_team = 0
upd:g_squad = 1
upd:g_group = 2
; cse_alife_monster_abstract properties
upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0
; cse_alife_human_abstract properties
predicate5 = 1,2,2,1,2
predicate4 = 0,1,1,1
; cse_ph_skeleton properties
upd:start_dialog =
; se_stalker properties
ПРИМЕР БЕЗ КОМЕНТОВ:
[1865]
; cse_abstract properties
section_name = stalker
name = mudak
position = 62.0999984741211,-3.55999994277954,37.5999984741211
direction = -0.0120869996026158,2.81339907646179,-0.0158249996602535
; cse_alife_trader_abstract properties
money = 416
character_profile = mudak
; cse_alife_object properties
game_vertex_id = 292
distance = 0
level_vertex_id = 76655
object_flags = 0xffffffbf
custom_data = <<END
[logic]
cfg = scripts\mudak_logic.ltx
; cse
[smart_terrains]
none = true
END
story_id = 10000
; cse_visual properties
visual_name = actors\stalker_merc\stalker_merc_4
; cse_alife_creature_abstract properties
g_team = 0
g_squad = 1
g_group = 2
health = 1
dynamic_out_restrictions =
dynamic_in_restrictions =
upd:health = 1
upd:timestamp = 0
upd:creature_flags = 0
upd:position = 62.0999984741211,-3.55999994277954,37.5999984741211
upd:o_model = 0
upd:o_torso = 2.81339907646179,-0.0120869996026158,0
upd:g_team = 0
upd:g_squad = 1
upd:g_group = 2
; cse_alife_monster_abstract properties
upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0
; cse_alife_human_abstract properties
predicate5 = 1,2,2,1,2
predicate4 = 0,1,1,1
; cse_ph_skeleton properties
upd:start_dialog =
; se_stalker properties
ТЕПЕРЬ ЗАПАКОВЫВАЕМ ОБРАТНО в all.spawn (внимание!если что-то сделано не правильно, то запаковки не будет) Если же всё правильно, то должен появится файл all.spawn.new Закидываем его в вашу gamedata\spawns и переименовываем файл в all.spawn
Осталась работа в скриптах и конфигах
-В папку gamedata\config(s) вкладываем файл game_story_ids, открываем его и конце пишем: 10000 = "mudak"
-В папку gamedata\config(s)\creatures вставляем файл spawn_sections_zaton, открываем его и в самом конце вписываем:
[mudak]:stalker
$spawn = "respawn\mudak"
character_profile = mudak
spec_rank = novice
community = stalker
-Теперь по пути gamedata\config(s)\gameplay вставляем файл npc_profile и в нём пишем:
<character id="mudak">
<class>mudak</class>
<specific_character>mudak</specific_character>
</character>
-По этому же пути gamedata\config(s)\gameplay вставляем character_desc_zaton и вставляем в конце:
<!---------------------------------------mudak----------------------------------------------------->
<specific_character id="mudak" team_default = "1">
<name>Мудак</name>
<icon>ui_inGame2_merc_4</icon>
<bio>mudak</bio>
<class>mudak</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
<rank>434</rank>
<reputation>5</reputation>
<money min="10000" max="10000" infinitive="0"/>
<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>
<visual>actors\stalker_merc\stalker_merc_4</visual>
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
wpn_ak74 \n
ammo_5.45x39_fmj \n
</supplies>
#include "gameplay\character_criticals_4.xml"
<!--<start_dialog>zat_b5_stalker_commander_dialog</start_dialog>-->
</specific_character>
-Осталось только дать логику нашему сталкеру, чтобы он тупо не бродил по Затону
В папке gamedata\config(s)\script создаём пустой файл mudak_logic.ltx и в нём пишем:
[logic]
active = remark1
danger = danger_ignore
[danger_ignore]
ignore_distance = 5
[remark1]
no_move = true
Теперь можно поглазеть на нашего сталкера в игре (Он должен появится на Шевченко)
Но хочу обратить внимание, что для упрощения снятия координат месторасположения npc в ТЧ можно воспользоваться во время игры консольной командой rs_stats on, а в ЗП rs_camera on