Огромное спасибо Архету за то, что оставил тут подсказку о создании торговца
Как раз то, без чего не выйдет создание торговца)
Напишу небольшой тутор по созданию торговца на примере созданного мною Ворона-торговца (незадействованый греховец из мода СРП, кроме модели и профиля у него не был ни одной записи в моде), может кто-то его в вики выложит, т.к. я не шарю, как там статьи правильно редактировать.
И так. Сперва мы создаём профиль непися. Например, создаём файл
character_desc_darkstalkers.xml по адресу
gamedata\config\gameplay\Создание нового файла не обязательно, но упрощает совмещение модов.
В созданном файле
character_desc_darkstalkers.xml пишем профиль нового непися:
Цитата
<specific_character id="esc_dark_stalker_voron" no_random = "1">
<name>Ворон</name>
<icon>ui_npc_dark_voron</icon>
<map_icon x="0" y="0"></map_icon>
<bio>sim_stalker_novice_bio</bio>
<class>esc_dark_stalker_01</class> -- настраивает респавнер на класс персонажа для спавна разных моделей. т.к. мы спавним уникального непися, класс можно скопировать у сидор или взять любой другой у любого непися.
<community>dark_stalker</community>
<money min="500000" max="500000" infinitive="1"></money>
<rank>1000</rank>
<reputation>-553</reputation>
<visual>actors\dark_stalker\dark_stalker_voron</visual>
<snd_config>characters_voice\human_01\monolith\</snd_config>
<crouch_type>-1</crouch_type>
<panic_treshold>0</panic_treshold>
<supplies>
[spawn] \n
wpn_dark_gauss \n
ammo_gauss \n
#include "gameplay\character_items.xml" \n
#include "gameplay\character_drugs.xml" \n
#include "gameplay\character_food.xml"
</supplies>
#include "gameplay\character_criticals_3.xml"
<start_dialog>hello_dialog_dark_stalker</start_dialog>
<actor_dialog>dm_cool_info_dialog</actor_dialog>
<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>
<actor_dialog>join_dark</actor_dialog>
</specific_character>
Выделенный красным цветом сегмент - обязателен для создания торговца.
Выделенный синим цветом сегмент - бессконечные деньги. Указанная сумма не позволяет продать неписю хабара, большую по стоимости, чем это число.
Профиль создан, пара стандартных диалогов, взятых у любого другого профиля, дописать не составит труда. Я ничего не менял в своём коде. Лезем в
npc_profile.xml, который находится в той же папке. Где-нить внизу делаем запись:
Цитата
<character id="esc_dark_stalker_voron">
<class>esc_dark_stalker_01</class> -- настраивает респавнер на класс персонажа для спавна разных моделей. т.к. мы спавним уникального непися, класс можно скопировать у сидор или взять любой другой у любого непися.
<specific_character>esc_dark_stalker_voron</specific_character> -- ссылка на профиль нашего непися.
</character>
Непись создан. Теперь надо вводить его в симуляцию. Открываем файл
gamedata\config\creatures\spawn_sections.ltx и прописываем в конце:
Код
[esc_dark_stalker_voron]:stalker_trader - дописать суффикс торговца... хотя у меня и без него всё работало =)
$spawn = "respawn\esc_dark_stalker_voron" - опция спавна для Левел Едитора
character_profile = esc_dark_stalker_voron - профиль непися
spec_rank = regular
community = dark_stalker - группировка
Не помню, надо ли писать отдельный конфиг файл для введения нового непися, по аналогии с m_person.ltx потому пропущу этот момент. Если надо - допишу
Дальше, самое нудное - спавн. Спасибо Arhet'y за пример. Для спавна, качаем прогу acdc от bardak'a и декомпилим all.spawn (надеюсь active perl все скачали, как написанов ридми декомпилера, иначе толку от проги бардака нуль) и в понравившемся месте делаем запись с уникальным номером. Я заспавнил на Кордоне:
Код
[8796]
; cse_abstract properties
section_name = stalker_trader -- метка, что сталкер является торговцем
name = dark_stalker_voron -- имя любое, вроде бы; где оно используется не знаю
position = -215.67399597168,-20.403390884355,-151.03227233887 -- местоположение на игровой карте
direction = 0.0445535257458687,-0.000645029998850077,0.0144814234226942
; cse_alife_trader_abstract properties
character_profile = esc_dark_stalker_voron
; cse_alife_object properties
game_vertex_id = 61 -- геймвертекс, без него спавнер не будет знать, на какой именно карте и в какой её части спавнить объект
distance = 3.5
level_vertex_id = 42599 -- левелвертекс, без него спавнер не будет знать, в именно какой части карты спавнить объект
object_flags = 0xfffffffb
custom_data = <<END
[logic]
cfg = scripts\esc_voron.ltx -- конфиг с логикой
[smart_terrains]
none = true -- смарт террейн; если создаёте статического торговца - лучше не выставлять смарт террейн; если хотите бродягу - пишите по аналогии с другими неписями
[spawn]
wpn_dark_gauss -- спавним в инвентаре всё, что хотим
END
story_id = 9958 - уникальный стори_ид для меток на карте
; cse_visual properties
visual_name = actors\dark_stalker\dark_stalker_voron -- внешний вид, указать путь к .ogf модели, без окончания формата файла!
; cse_alife_creature_abstract properties
g_team = 0
g_squad = 0
g_group = 0
health = 2
dynamic_out_restrictions =
dynamic_in_restrictions =
upd:health = 2
upd:timestamp = 0
upd:creature_flags = 0
upd:position = -215.67399597168,-20.403390884355,-151.03227233887 -- те же координаты, что и в секции position
upd:o_model = 0
upd:o_torso = 0,0,0
upd:g_team = 0
upd:g_squad = 0
upd:g_group = 0
; 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 = 2,2,1,2,0
predicate4 = 2,2,1,2
; cse_ph_skeleton properties
upd:start_dialog =
; se_stalker properties
Спавн файл еще рано собирать!
Далее, создаём файл конфиг торговца, который указали в спавне -
gamedata\config\scripts\esc_voron.ltx и пишем в нём:
Код
[logic]
active = walker
trade = misc\trade_voron.ltx -- файл торговли, создаётся по аналогии с существующими
trader_flags = 0 - флаг трейдера
inv_max_weight = 10000 -- вес инвентаря торговца
on_death = death
[walker]
path_walk = esc_sin_voron_walk -- привязка вейпоинта, чтобы трейдер стоял на месте или двигался по определённому курсу
path_look = esc_sin_voron_look -- куда смотрит непись
meet = meet -- параметры реакции непися на встречу с актором
[meet]
use = true
use_wpn = true -- перезаряжает оружие
meet_talk_enabled = true
Теперь лезем за скриптом от бардака и снимаем координаты местоположения нашего непися. У кого нету скрипта, копируем в g
amedata/scripts/ui_main_menu.script этот скрипт:
Код
function main_menu:OnButton_credits_clicked()
local text
local vid
local gvid
local a = vector()
local text
a = db.actor:position()
vid = db.actor:level_vertex_id()
gvid = db.actor:game_vertex_id()
text = "Позиция:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid
news_manager.send_tip(db.actor, text, nil, nil, 30000)
end
Заходим в игру, ищем нужное нам место (ногами или деморекордом) и жмём из меню кнопку CREDITS и мы услышим звуковой сигнал, после чего выходим в игру из меню, и в строке сообщений высветиться вся инфа. Всё - F12 или на бумажку списываем полученные координаты.
Создаём вейпоинты и лукпоинты. И так, мы сняли координаты мест, где хотим видеть торговца и где мы хотим, чтобы он ходил - теперь в разобранном all.spawn ищите файл way_*левел*.ltx и туда пишем данные. Я приведу пример свой, опять таки. В файле
way_l01_escape.ltx пишем:
Код
[esc_sin_voron_look] -- имя, которые мы записали в gamedata\config\scripts\esc_voron.ltx
points = p0,p1
p0:name = wp00
p0:flags = 0x1
p0:position = -205.306793212891,-20.4855155944824,-150.415893554688
p0:game_vertex_id = 46
p0:level_vertex_id = 54218
p1:name = wp01
p1:flags = 0x1
p1:position = -207.645278930664,-20.2700958251953,-146.980590820313
p1:game_vertex_id = 61
p1:level_vertex_id = 45276
[esc_sin_voron_walk] -- имя, которые мы записали в gamedata\config\scripts\esc_voron.ltx
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -215.67399597168,-20.403390884355,-151.03227233887
p0:game_vertex_id = 47
p0:level_vertex_id = 37503
Если нужно создать несколько вейпоинтов - смотри по аналогии с уже существующими.
После всего этого собираем all.spawn и стартуем новую игру. Лично у меня всё прекрасно работало
Если где есть неточности - говорите, исправлю.. писал ночью, мог что-то упустить)