All.spawn. Создание NPC — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
RedPython (обсуждение | вклад) м (restored) |
(→Работаем!!!) |
||
(не показаны 8 промежуточные версии 6 участников) | |||
Строка 19: | Строка 19: | ||
Открываем alife_l01_escape, и крутим в самый низ. | Открываем alife_l01_escape, и крутим в самый низ. | ||
− | Если у вас чистая игра и вы ничего не делали в | + | Если у вас чистая игра и вы ничего не делали в Алл спавне то посленяя секция у вас будет под номером 869. |
Добавляем туда вот такой код(в конец): | Добавляем туда вот такой код(в конец): | ||
Строка 154: | Строка 154: | ||
<specific_character id="esc_noobik" team_default = "1"> | <specific_character id="esc_noobik" team_default = "1"> | ||
<name>Нубик</name> | <name>Нубик</name> | ||
− | <icon> | + | <icon>ui_npc_u_stalker_neytral_balon_1</icon> |
<bio>esc_noobik</bio> | <bio>esc_noobik</bio> | ||
Строка 232: | Строка 232: | ||
Начинаем новую игру, и видем сталкера с именем Нубик = ) | Начинаем новую игру, и видем сталкера с именем Нубик = ) | ||
− | + | Можно сделать и так но НПС уйдет. Проще делать с логикой вместе. | |
− | + | Заместо: | |
+ | <ini> | ||
+ | [logic] | ||
+ | cfg = scripts\noobik_logic.ltx | ||
+ | </ini> | ||
+ | Лутчше написать: | ||
− | [[ | + | <ini> |
+ | [logic] | ||
+ | active = remark | ||
+ | combat_ignore = combat_ignore | ||
+ | danger = danger_condition | ||
+ | |||
+ | [remark] | ||
+ | anim = wait | ||
+ | combat_ignore_cond = always | ||
+ | |||
+ | [combat_ignore] | ||
+ | combat_ignore_cond = always | ||
+ | |||
+ | [danger_condition] | ||
+ | ignore_distance = 0 | ||
+ | ignore_distance_corpse = 0 | ||
+ | </ini> | ||
+ | |||
+ | И тогда НПС будет стоять на месте. =) | ||
+ | |||
+ | |||
+ | --<# И стоять НПС при такой логике будет до поры до времени, теперь ясно где все новички учатся изначально делать не правильно...<br> | ||
+ | Схема '''''remark''''' не предназначена выступать в роли активной схемы, она была создана для мягкого перехода между основными схемами, например '''''kamp''''' и '''''walker'''''.<br> | ||
+ | Игнорирование этого момента приводит к нежелательным эффектам, как следствие возникают необоснованные обвинения в адрес X-Ray. | ||
+ | Если же всё равно делаете через ''all.spawn'', то почему бы не прописать НПС нормальную логику, при которой он действительно будет стоять на месте и даже, если в последующем его что-то отвлечёт, то он вернётся на место, а не останется стоят там, куда перебежал.<ini>[logic] | ||
+ | active = walker@stay_at_position | ||
+ | combat_ignore = combat_ignore | ||
+ | danger = danger_condition | ||
+ | |||
+ | [walker@stay_at_position] | ||
+ | path_walk = walker_stay_at_position_walk | ||
+ | path_look = walker_stay_at_position_look | ||
+ | |||
+ | [combat_ignore] | ||
+ | combat_ignore_cond = always | ||
+ | |||
+ | [danger_condition] | ||
+ | ignore_distance = 0 | ||
+ | ignore_distance_corpse = 0</ini>И в файл ''way_имя_локации.ltx'' вписать две точки:<ini>[walker_stay_at_position_walk] | ||
+ | points = p0 | ||
+ | p0:name = name00 | ||
+ | p0:flags = 0x1 | ||
+ | p0:position = ;координаты на которых стоим | ||
+ | p0:game_vertex_id = ;гейм вертекс координат | ||
+ | p0:level_vertex_id = ;левел вертеск координат | ||
+ | |||
+ | [walker_stay_at_position_look] | ||
+ | points = p0 | ||
+ | p0:name = name00 | ||
+ | p0:flags = 0x1 | ||
+ | p0:position = ;координаты в которые смотрим | ||
+ | p0:game_vertex_id = ;гейм вертекс координат | ||
+ | p0:level_vertex_id = ;левел вертеск координат</ini> | ||
+ | И никаких проблем с поведением НПС --#> | ||
+ | |||
+ | |||
+ | '''Статью создал stalker-life''' | ||
+ | С поправками '''Melnik''' | ||
+ | Подкоректировал: '''Spaces''' | ||
+ | Замечание касательно логики: '''ColR_iT''' |
Текущая версия на 12:45, 2 февраля 2017
Что,как,зачем
Итак, я хочу рассказать вам как создать NPC через all.spawn. Метод был выявлен мною путем проб и ошибок. Конечно же у вас появился вопрос: « Ну а зачем же мучатся с all.spawn, если можно сделать тоже самое через скрипт?». Ответ: Хоть этот способ и не такой быстрый и легкий, но у него есть свои плюсы, необходимые многим, один из них - мы можем задать story id нашему NPC.(Можно прописать в секции нпс которого спауните в низу в файле spawn_sections.ltx Пример:story_id = 10000) "А что дает нам это?" Много чего, ну для примера - мы сможем поставить отметку на него. Я не буду объяснять такие простые вещи как декомпиляция all.spawn и остальное, но если же вы все таки не знаете как, пишите мне в лс на Гейменаторе(stalkers-life, или Идиот) Итак, хватит лишних слов, перейдем к работе...
Работаем!!!
С помощью ACDC декомпилируем all.spawn
Получаем кучу файлов типа : alife_l01_escape , way_l01_escape и тд.
Создадим нового непися на Кордоне. Открываем alife_l01_escape, и крутим в самый низ.
Если у вас чистая игра и вы ничего не делали в Алл спавне то посленяя секция у вас будет под номером 869. Добавляем туда вот такой код(в конец):
[870] ; cse_abstract properties section_name = stalker name = noobik position = -172.21215820313,-19.941787719727,-161.09272766113 direction = 0,0,0 ; cse_alife_trader_abstract properties money = 5000 character_profile = esc_noobik ; cse_alife_object properties game_vertex_id = 52 distance = 0 level_vertex_id = 76655 object_flags = 0xffffffbf custom_data = <<END [logic] cfg = scripts\noobik_logic.ltx ; cse [smart_terrains] none = true END story_id = 10000 ; cse_visual properties visual_name = actors\soldier\soldier_beret_1 ; 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 = -172.21215820313,-19.941787719727,-161.09272766113 upd:o_model = 0 upd:o_torso = 0.028013030067086,0,0.9996075630188 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
Разъясню некоторые пункты, чтобы в след. раз не пришлось прибегать к тутору.
section_name = stalker -//это для игры тут пишется к примеру если ето у тебя сталкера или бандюки то должно быть section_name = stalker name = noobik -//пишем что хотим position = -172.21215820313,-19.941787719727,-161.09272766113 -//позиция direction = 0,0,0 -// направление взгляда(можно писать всегда нули) ; cse_alife_trader_abstract properties money = 5000 -//его бабло character_profile = esc_noobik -//ссылка на профиль в character_desc_локация(раз создаем в алайф эскейп значит и профиль будет искатсья в чарактер_деск_ескейп) ; cse_alife_object properties game_vertex_id = 52 -// гейм вертекс distance = 0 level_vertex_id = 76655 -//левел вертекс object_flags = 0xffffffbf custom_data = <<END [logic] cfg = scripts\noobik_logic.ltx -// ссылка на логику ; cse[smart_terrains] none = true END story_id = 10000 -//его стори айди ; cse_visual properties visual_name = actors\soldier\soldier_beret_1 -// его визуал upd:health = 1 upd:timestamp = 0 upd:creature_flags = 0 upd:position = -172.21215820313,-19.941787719727,-161.09272766113 -//опять пишем позицию upd:o_model = 0 upd:o_torso = 0.028013030067086,0,0.9996075630188 upd:g_team = 0 upd:g_squad = 1 upd:g_group = 2 upd:next_game_vertex_id = 65535-//честно не знаю что это, я всегда пишу эти цифры upd:prev_game_vertex_id = 65535-//не знаю, но пишем всегда это upd:distance_from_point = 0 upd:distance_to_point = 0
Компилируем, получаем файл all.spawn.new , копируем его в геймдату/спавнс и переименовываем просто в олл спавн. Это еще не все!
теперь
открываем файл character_desc_escape
перед профилем волка вставляем это:
<!---------------------------------------esc_noobik-----------------------------------------------------> <specific_character id="esc_noobik" team_default = "1"> <name>Нубик</name> <icon>ui_npc_u_stalker_neytral_balon_1</icon> <bio>esc_noobik</bio> <class>esc_noobik</class> <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <rank>434</rank> <reputation>5</reputation> <money min="600" max="2000" infinitive="0"/> <snd_config>characters_voice\human_01\stalker\</snd_config> <crouch_type>-1</crouch_type> <visual>actors\soldier\soldier_beret_1</visual> <supplies> [spawn] \n wpn_pm \n ammo_9x18_fmj = 1 \n wpn_ak74u \n ammo_5.45x39_fmj \n </supplies> #include "gameplay\character_criticals_4.xml" </specific_character>
у нас будет чел с визуалом военного, иконкой волка, и голосом обычного сталкера
теперь создаем файл логики,
в папке config/scripts создаем файл noobik_logic.ltx
и пишем туды:
[logic] active = remark1 danger = danger_ignore [danger_ignore] ignore_distance = 5 [remark1] no_move = true
все, он никуда не уйдет пока на него не нападут = )
Теперь открываем файл game_story_ids
и в самый низ вписываем: 10000 = "esc_noobik"
теперь открываем файл npc_profile вставляем сие:
<character id="esc_noobik"> <class>esc_noobik</class> <specific_character>esc_noobik</specific_character> </character>
Все, мы на финишной прямой! Открываем файл spawn_sections
и в писываем:
[esc_noobik]:stalker $spawn = "respawn\esc_noobik" character_profile = esc_noobik spec_rank = novice community = stalker
Все, все готово! Начинаем новую игру, и видем сталкера с именем Нубик = )
Можно сделать и так но НПС уйдет. Проще делать с логикой вместе. Заместо:
[logic] cfg = scripts\noobik_logic.ltx
Лутчше написать:
[logic] active = remark combat_ignore = combat_ignore danger = danger_condition [remark] anim = wait combat_ignore_cond = always [combat_ignore] combat_ignore_cond = always [danger_condition] ignore_distance = 0 ignore_distance_corpse = 0
И тогда НПС будет стоять на месте. =)
--<# И стоять НПС при такой логике будет до поры до времени, теперь ясно где все новички учатся изначально делать не правильно...
Схема remark не предназначена выступать в роли активной схемы, она была создана для мягкого перехода между основными схемами, например kamp и walker.
Игнорирование этого момента приводит к нежелательным эффектам, как следствие возникают необоснованные обвинения в адрес X-Ray.
[logic] active = walker@stay_at_position combat_ignore = combat_ignore danger = danger_condition [walker@stay_at_position] path_walk = walker_stay_at_position_walk path_look = walker_stay_at_position_look [combat_ignore] combat_ignore_cond = always [danger_condition] ignore_distance = 0 ignore_distance_corpse = 0И в файл way_имя_локации.ltx вписать две точки:
[walker_stay_at_position_walk]points = p0 p0:name = name00 p0:flags = 0x1 p0:position = ;координаты на которых стоим p0:game_vertex_id = ;гейм вертекс координат p0:level_vertex_id = ;левел вертеск координат [walker_stay_at_position_look] points = p0 p0:name = name00 p0:flags = 0x1 p0:position = ;координаты в которые смотрим p0:game_vertex_id = ;гейм вертекс координат
p0:level_vertex_id = ;левел вертеск координат
И никаких проблем с поведением НПС --#>
Статью создал stalker-life
С поправками Melnik
Подкоректировал: Spaces
Замечание касательно логики: ColR_iT