Создание тайников.
Метод 1 (через all.spawn):
1) В алл спавне открываем alife_название локации на которой будем делать тайник.ltx
Идем в самый низ и пишем туда такую конструкцию:
[ХХХ] ; cse_abstract properties section_name = inventory_box name = bla_bla_bla_box position = XXX direction = 0,0,0 ; cse_alife_object properties game_vertex_id = XXX distance = 0 level_vertex_id = XXX object_flags = 0xffffff3b custom_data = <<END [logic] cfg = scripts\treasure_inventory_box.ltx END story_id = XXXX ; cse_visual properties visual_name = physics\equipment_cache\equipment_instrument_case_01_case
ГДЕ:
[ХХХ] - номер секции (никогда не повторяется!). В конце смотрим последнюю конструкцию и номер ее секции, к этому номеру прибавляем пару десятков (чтобы уж наверняка) и записываем его в фигурные скобки. Например: у последней секции имеем номер [666]. Прибавляем к нему пару десятков и пишем уже к себе. Вместо [ХХХ] записываем [700]
section_name - название секции. Не трогаем.
name - Задаем какой хотим (я задал bla_bla_bla_box). Никогда в названии не должно быть пробела. Вместо него юзаем знак "_".
position - Координаты спавна тайника. записываются в формате X,Y,Z : -44.825649,-10.059822,-74.628242 (это пример, пишем свои координаты, которые снимаем в нужной точке).
direction - Направление обзора. Тут оно не важно, поэтому ставим нули.
game_vertex_id - Вертекс в игре. Узнать его можно во время снятия координат. Как правило пишется сразу после X,Y,Z.
level_vertex_id - Вертекс на уровне. Узнать его можно также, как и с гейм вертексом.
ПРИМЕР: -44.825649,-10.059822,-74.628242,234287,77
где: -44.825649,-10.059822,-74.628242 --- это координаты (X,Y,Z), 234287 --- это левел вертекс, 77 --- гейм вертекс.
cfg - Это ссылка на логику, ничего не меняем.
story_id - Уникальный айди обьекта, о том как его добавить расскажу чуть ниже. Вместо моих иксов пишем например число 19123.
visual_name - Визуал тайника (модель). Можно задавать не только стандартную, но и например модель ящика, бревна, и т.д
Когда данную конструкцию вставили, заполнили все пункты которым я написал описание, можно запаковывать обратно алл спавн.
2) Добавим наш айди тайника:
В gamedata\config\game_story_ids.ltx в самом низу, после строчки: 5480 = "ros_secret_0025". Так как в алл спавне мы задали сид равный 19123 (а так можно любой, но только не тот который есть уже в игре), то мы пишем следующую строчку:
19123 = "bla_bla_bla"
ГДЕ:
19123 - это айди обьекта, указанный в алл спавне.
"bla_bla_bla" - название тайника в game_story_ids.ltx
Название обязательно должно совпадать в game_story_ids.ltx и treasure_manager.ltx
3) Теперь наполнение тайника:
В gamedata\config\misc\treasure_manager.ltx пишем следующие строчки:
[bla_bla_bla] target = 19123 name = bla_bla_bla_name description = bla_bla_bla_descr items = wpn_gauss, 1, medkit, 10 condlist = {=npc_rank(experienced)} 9 community = stalker
ГДЕ:
[bla_bla_bla] - конфигурационное имя тайника (такое же как и в game_story_ids.ltx)
target - СИД (который мы писали в алл спавне и регистрировали в game_story_ids.ltx)
name - имя тайника которое будет выводится в игре.
description - описание тайника (также выводится в игре).
items - наполнение тайника. (я прописал 1 винтовку гаусса и 10 аптечек)
condlist - кондишн выпадения тайника. Т.е условие при котором тайник выпадет для ГГ.
community - группировка, при обыске мертвых бойцов которой, тайник может выпасть (влияет condlist)
Далее в этом же файле находим строчки (вверху файла): ros_secret_0025. И следом за этой строчкой пишем наш тайник: bla_bla_bla.
4) Осталось прописать имя и описание для тайника, которое будет выводится в игре.
Идем в gamedata\config\text\rus\stable_treasure_manager.xml и пишем внизу, но ДО закрывающего тега </string_table> следующие строчки:
<string id="bla_bla_bla_descr"> <text>текст с описанием тайника</text> </string> <string id="bla_bla_bla_name"> <text>название тайника</text> </string>
ГДЕ:
<string id="bla_bla_bla_descr"> - это описание тайника, которое мы задавали в treasure_manager.ltx (description = bla_bla_bla_descr)
<string id="bla_bla_bla_name"> - это имя тайника, которое мы также задавали в treasure_manager.ltx (name = bla_bla_bla_name)
Все. Заходим в игру и любуемся своим созданным тайником (не забываем про условие выпадения).
Метод 2 (с помощью скрипта):
1) Создаем в папке \gamedata\scripts наш файл с функцией спавна тайника (я назвал файл spawn.script)
Пишем туда простую до неприличия функцию:
function spawn_box() local a = vector() a.x = -247.674 a.y = -19.526 a.z = -128.201 alife():create("box",a,11044,8) end
ГДЕ:
spawn_box - имя нашей функции (можно написать любое).
a.x, a.y, a.z - координаты.
"box" - имя нашего тайника (используется для спавна).
a - обьявленная ранее переменная координат (ее можно и не писать, а перечислить просто координаты через ",").
11044 - левел вертекс
8 - гейм вертекс.
2) В папке \gamedata\config\scripts создаем файл box.ltx .
Записываем в него список предметов, которые будут спавниться:
[spawn] wpn_vintorez = 1 ammo_m209 = 10 medkit = 10 af_gravi = 1
3) Открываем \gamedata\config\creatures\spawn_sections.ltx .
Пишем внизу:
[box]:inv_box visual = equipments\item_rukzak radius = 1 custom_data = scripts\box.ltx
ГДЕ:
[box] - имя тайника (то же самое, что и в функции спавна).
inv_box - параметры нашего тайника (визуал, класс и т.д, который задается в devices.ltx).
custom_data - ссылка на файл со списком спавнящихся предметов.
4) Открываем \gamedata\config\misc\devices.ltx .
Пишем внизу:
[inv_box] GroupControlSection = spawn_group discovery_dependency = $spawn = "devices\inventory box" class = O_INVBOX cform = skeleton visual = physics\box\expl_dinamit.ogf script_binding = bind_physic_object.init
ГДЕ:
inv_box - тоже имя, что и задавалось после [box] в spawn_sections.ltx
5) Осталось лишь как-то вызвать наш спавн. Вызовем после совершения определенного действия в игре.
Открываем \gamedata\config\gameplay\info_l01escape.xml
Находим там такие строчки:
<!-- труп у аномалии --> <info_portion id="esc_tutorial_dead_novice"> <article>tutorial_moving_anomaly</article> </info_portion>
И ставим наш экшен на вызов функции:
<action>spawn.spawn_box</action>
Получится так:
<!-- труп у аномалии --> <info_portion id="esc_tutorial_dead_novice"> <article>tutorial_moving_anomaly</article> <action>spawn.spawn_box</action> </info_portion>
ГДЕ:
spawn - это название файла с функцией.
spawn_box - название функции (в этом же файле).
Таким образом, после того, как мы обыщем труп у тоннеля с Электрами, произойдет спавн нашего тайника в заданных выше координатах.
Читать!
Вот программа: http://webfile.ru/5891368
Распаковываем и ложим в папку с нашим алл спавном. Туда же ложим game.graph из нашей игры. С названиями батников думаю понятно
Добавляем все что нужно в алайф_название локации. Затем открываем папку stkutils и в ней находим файл scan.pm, открываем его (нотпад открывает спокойно) и пишем туда те секции, которые мы добавляли.
ПРИМЕР: писал section_name = inv_box в алайф_название локации.
Открываю файл scan.pm, после тега #common пишу следующее:
'inv_box' => 'S_INVBOX',
Сохраняем и компилируем спавн файл. Все без ошибок.
Не забываем про классы!!!
S_INVBOX - для тайников, у сталкеров например другой класс. Классы можно глянуть в scan.pm
Простой тайник, который будет заспавнен при НИ с прописанным в нем хабаром:
[ХХХ] ; cse_abstract properties section_name = inventory_box name = level_inventory_box position = -246.44346618652,-24.793485641479,-135.53407287598 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 4 distance = 0 level_vertex_id = 11711 object_flags = 0xffffff3b custom_data = <<END [spawn] exo_outfit medkit_scientic = 2 medkit_army = 1 antirad = 2 bandage = 4 ammo_5.56x45_ap = 3 ammo_9x39_pab9 = 4 grenade_f1 = 3 END ; cse_visual properties visual_name = equipments\item_rukzak
В этом случае нам нужно только вставить данную секцию в alife_локация с нужными координатами и вертексами и отредактировать на ваш вкус и потребности эту часть секции:
[spawn] exo_outfit medkit_scientic = 2 medkit_army = 1 antirad = 2 bandage = 4 ammo_5.56x45_ap = 3 ammo_9x39_pab9 = 4 grenade_f1 = 3 END
В данном случае в тайнике будет лежать:
Экзоскелет
две научные аптечки
армейская аптечка
два антирада
четыре бинта
три пачки патронов 5.56х45
четыре пачки патронов 9х39
три гранаты Ф-1