I. Распаковка файла all.spawn с помощью программы acdc:
1. Помещаем файл all.spawn в папку, где находятся файлы от acdc. Лучше создать ее на диске С:
2. Открываем командную строку
3. В нем пишем cd\ Далее нажимаем enter. Эта команда задает диск С для работы с ним.
4. Далее пишем cd C:\"название папки, куда поместили acdc". Нажимаем enter. Теперь задали папку с которой будем работать.
5. Вводим acdc.pl -d all.spawn Нажимаем enter.
6. Если асдс подходит для данного алл.спавна, то вскоре все распакуется и распакованные файлы можно будет обнаружить в папке с асдс.
7. Если асдс не подходит, то он выдаст ошибку. Тут же в этом черном окне. Надо будет внимательно прочитать о чем ошибка. Обычно для разных модов не хватает какого-нибудь описания чего-нибудь. Например, может ругаться что не может найти af_soul.
Тогда надо будет открыть файл acdc.pl блокнотом. Там найти, где описываются артефакты и в конце строк с артефактами сделать запись для af_soul, напримере других артефактов. После сохранить файл и заново набрать команду по распаковке.
8. После того, как сделали изменения в алл.спавне, надо будет таким же образом войти в папку с acdc, как описывалось раньше.
9. Набрать следующую команду: acdc.pl -c all.ltx
10. Если все сделали правильно в алл.спавне, то через некоторе время в папке с асдс появится файл all.spawn.new. Его надо будет переименовать в all.spawn .
P.S. Правило при работе с all.spawn - не забывайте правильно пронумеровывать вновь создаваемые секции. Для этого надо найти самый большой номер секции в алл.спавне. И присваивать своим секциям номера по порядку за этим номером.
II. Работа непосредственно с самой программой ACDC:
Главное отличие ACDC от xrSpawner тем, что xrSpawner не определяет не game_vertex, ни level_vertex. А также он измеряет только позицию. А проявляется это в том, что порой обьекты которые мы спауним спаунером не всегда появляются на месте. Или вообще не появляются...
1. После распаковки у нас появится много файлов в формате .ltx
Мы там видим файлы alife и way. В файлах alife только обьекты которые спаунятся. А в way только пути. Путь - это и есть путь по которому может двигаться живой обьект.
Для начала найдём файл alife_l01_escape, а в нём:
[869] ; cse_abstract properties section_name = actor name = level_prefix_actor_0001 s_rp = 0 position = -139.449829101563,-29.6908683776855,-351.492797851563 direction = 0,0.00895109120756388,0 s_flags = 0x29 [dont_spawn_character_supplies] [spawn] wpn_binoc novice_outfit device_torch END ; cse_visual properties visual_name = actors\hero\stalker_novice ; cse_alife_creature_abstract properties g_team = 0 g_squad = 0 g_group = 0 health = 1 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 1 upd:timestamp = 0x75732029 upd:creature_flags = 0x70 upd:position = -139.449829101563,-29.6908683776855,-351.492797851563 upd:o_model = 0 upd:o_torso = 0.00895109120756388,0,-0.999959945678711 upd:g_team = 0 upd:g_squad = 0 upd:g_group = 0 ; cse_alife_trader_abstract properties money = 40 trader_flags = 0 character_profile = actor ; cse_ph_skeleton properties ; cse_alife_creature_actor properties upd:actor_state = 0xd20 upd:actor_accel_header = 0 upd:actor_accel_data = 0 upd:actor_velocity_header = 0 upd:actor_velocity_data = 0 upd:actor_radiation = 0 upd:actor_weapon = 110 upd:num_items = 0
Для начала припишем актору после строк:
[dont_spawn_character_supplies] [spawn]
Вот этот код:
wpn_binoc wpn_vintorez ammo_9x39_ap = 22 wpn_usp ammo_11.43x23_hydro = 22 novice_outfit device_torch
Таким образом при старте новой игры у Меченного в самом начале в рюкзаке будет лежать Винторез и 600 патронов к нему, пистолет USP и 420 патронов к нему.
2. Также можно изменить количество денег у ГГ при старте:
Находим такой код:
; cse_alife_trader_abstract properties money = 40 trader_flags = 0 character_profile = actor
В строчке money напишем любое число. Что будет, я думаю обьяснять не надо!
3. А теперь изменим начальные координаты при старте новой игры...к примеру пусть Меченный стартует не в бункере у Сидоровича, а на втором этаже блокпоста военных.
Находим вот такой код:
position = -139.449829101563,-29.6908683776855,-351.492797851563 direction = 0,0.00895109120756388,0
Теперь позиция и дирекция:
; cse_alife_object properties game_vertex_id = 19 (вертекс на игре) distance = 0.699999988079071 level_vertex_id = 111256 (вертекс на уровне) object_flags = 0xffffffbf custom_data = <<END
А теперь мы изменим их на:
position = -167.232299804688,-25.4363708496094,-354.692901611328 direction = 0,-0.365248799324036,0 ; cse_alife_object properties game_vertex_id = 0 distance = 0.699999988079071 level_vertex_id = 82413 object_flags = 0xffffffbf custom_data = <<END upd:health = 1 upd:timestamp = 0x75732029 upd:creature_flags = 0x70 upd:position = -167.232299804688,-25.4363708496094,-354.692901611328 upd:o_model = 0 upd:o_torso = -0.365248799324036,0,0.930909931659698 upd:g_team = 0 upd:g_squad = 0 upd:g_group = 0
То есть ГГ окажется на втором этаже блокпоста пр начале новой игры.
P.S. Для того чтобы узнать координаты ГГ пишем в консоли команду: rs_stats on и видим окно с разными параметрами(примерно пол экрана). Там находим самую нижнюю строчку: координаты будут в формате X/Y/Z. К примеру так: -167.232299804688,-25.4363708496094,-354.692901611328
4. Создание нового НПС:
a)Создадим нового непися на Кордоне. Открываем alife_l01_escape и листаем в самый низ. Если у вас чистая игра и вы ничего не делали в Олл спавне, то последняя секция у вас будет под номером 869.
Если стоит Солянка, то смотрим на номер последней секции и ставим следующий.
В самый коней вставляем такой код:
[870] ; cse_abstract properties section_name = stalker -//это для игры, тут пишется к примеру если у тебя сталкер или бандюк то должно быть section_name = stalker либо bandit name = volazar -// это имя непися, пишем что хотим position = -172.21215820313,-19.941787719727,-161.09272766113 -//позиция direction = 0,0,0 -//дирекция или направление взгляда(я пишу всегда нули) ; cse_alife_trader_abstract properties money = 5000 -//деньги, которые будут у непися character_profile = esc_volazar -//ссылка на профиль в 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\volazar_logic.ltx -//ссылка на логику 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
P.S:
upd:position = -172.21215820313,-19.941787719727,-161.09272766113 -//таже самая позиция
То, что начинается с знака -// и дальше - надо убрать, во всех строках, где есть описание!!! Написал для ознакомления, за что отвечает каждый параметр!
Компилируем, получаем файл all.spawn.new , копируем его в gamedata/spawns и переименовываем просто в all.spawn .
НО это ещё не всё!
c)Теперь открываем файл character_desc_escape и перед профилем Волка вставляем вот этот код:
<!---------------------------------------esc_volazar -----------------------------------------------------> <specific_character id="esc_volazar" team_default = "1"> <name>Волазар</name> <icon>ui_npc_u_stalker_neytral_balon_1</icon> <bio>esc_volazar</bio> <class>esc_volazar</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>
То есть у нас будет непись с визуалом военного, иконкой Волка, и голосом обычного сталкера!
d)Теперь создаем файл логики, в папке config/scripts создаем файл volazar_logic.ltx и пишем туда код:
[logic] active = remark1 danger = danger_ignore [danger_ignore] ignore_distance = 5 [remark1] no_move = true
Таким образом он будет стоять на месте и никуда не уйдёт...пока на него никто не нападёт!
e)Теперь открываем файл game_story_ids и в самый конец дописываем: 10000 = "esc_volazar"
f)Nеперь открываем файл npc_profile, вставляем туда код:
<character id="esc_volazar"> <class>esc_volazar</class> <specific_character>esc_volazar</specific_character> </character>
g)Далее открываем файл spawn_sections и вписываем следующее:
[esc_volazar]:stalker $spawn = "respawn\esc_volazar" character_profile = esc_volazar spec_rank = novice community = stalker
Всё! Готово! Теперь при старте игры мы увидим нового сталкера Волазар!
Немного элементарной логики...
К примеру: hodim_dvor - это путь по которому будет ходить НПС. Непися то мы сделали, но у него нет пути по которому он бы ходил, для этого создадим его (путь) в файле way_l01_escape.
Для этого пропишем ему такие строчки:
[hodim_dvor] points = p0,p1 p0:name = name00 p0:position = -145.44634246826,-12.15016746521,-412.68786621094 p0:game_vertex_id = 24 p0:level_vertex_id = 132887 p0:links = p1(1) p1:name = name01 -// номер точки p1:position = -132.61611938477,-30.142726898193,-363.87365722656 -//только позиция p1:game_vertex_id = 19 -// вертекс на игре p1:level_vertex_id = 118862 -//вертекс на уровне p1:links = p0(1) -//на какую точку после этой перейдёт НПС.
То есть, тут мы сделали так, что непись будет ходить туда сюда, а если не написать линкс (links), то он остановится на месте!
Дополнение.
Теперь уже известно, что такую логику использовать нельзя:
[logic] active = remark1
т.к. секция remark не предусмотрена, для использования в качестве активной.
Лучше так:
[logic] active = walker [walker] path_walk = volazar_walk path_look = volazar_look danger = danger_ignore [danger_ignore] ignore_distance = 5 [smart_terrains] none = true
Fagot.