И так, возможно многим эта тема покажется странной и неактуальной в наши дни так как по всему интернету полно таких уроков, но я решил сделать его и на AP pro, так как не раз сталкивался с этим вопросом.
И так!
Создание новой группировки в ЗП
Давайте создавать новую группировку! Создадим к примеру группировку Чистое небо (уж очень нравится мне эта группировка)
Что нам понадобится?
Папка configs
1. Папка creatures
а)файл game_relations.ltx ;----- Отношение группировки к другим фракциям и к ГГ.
б)файл spawn_sections_general.ltx ;----- Регистрация character_profile дефолтных персов группировки.
3. Папка misc
а)файл death_items_by_communities.ltx ;----- Предметы которые могут появится у трупа непися группировки.
б)файл script_sound.ltx ;----- Звуковые схемы, просьба о помощи, различные фразы, реакций на действия.
в)файл script_sound_music_and_stories.ltx ;----- Звуковые схемы, анекдоты, историй, применяется в посиделках у костра
или на базах.
г)файл simulation.ltx ;----- Спавен сквадов группировки при старте игры.
д)файл squad_behaviours.ltx ;----- Возможность спавнить сквады группировки через смарты.
е)файл squad_descr.ltx ;----- Симуляция сквадов для распавна (пока не обезателен).
ё) файл dialog_manager.ltx ;----- Название говорит само за себя.
4. Папка text\rus\ui_st_pda.xml ;----- Название группировки на русском языке.
Папка scripts
а)фаил _g.script ;----- Регистрация новой группировки.
б)фаил death_manager.script ;----- Регистрация новой группировки.
г)фаил sound_theme.script ;----- Прописывается возможность произнесения фраз группировкой.
Конфиги
Открываем файл game_relation.ltx.
Что нам надо тут сделать?
Важно! Цифру после запятой ставить обязательно, т.е. если у вас была 10, то после названия клана вы должны дописать следующею цифру, 11 .
Теперь ищем такую строку:
Код
;коэффициенты "сочувствия" группировок
;после воздействия на одного из членов группировки
;goodwill его распространится на остальных членов группировки
;с определенным коэффициентом
;(порядок должен совпадать с communities_relations)
[communities_sympathy]
actor = 0.0
bandit = 0.0
dolg = 0.0
ecolog = 0.0
freedom = 0.0
killer = 0.0
army = 0.0
monolith = 0.0
monster = 0.0
stalker = 0.0 ;0.01
zombied = 0.0
И дописываем наш клан:
Код
;коэффициенты "сочувствия" группировок
;после воздействия на одного из членов группировки
;goodwill его распространится на остальных членов группировки
;с определенным коэффициентом
;(порядок должен совпадать с communities_relations)
[communities_sympathy]
actor = 0.0
bandit = 0.0
dolg = 0.0
ecolog = 0.0
freedom = 0.0
killer = 0.0
army = 0.0
monolith = 0.0
monster = 0.0
stalker = 0.0 ;0.01
zombied = 0.0
nebo = 0.0
Всё сохраняем и закрываем!
А теперь давайте сделаем нашу группировку говорящей. Это делается всего двумя файлами:
Список: configs/misc/script_sound.ltx
configs/misc/script_sound_music_and_stories.ltx
И везде где есть список группировок, как тут пишем свою.
Аналогично и со следующим файлом.
Далее можно добавить разные продукты для группировки, заходим в файл gamedata\configs\misc\death_items_by_communities.ltx и добавляем в самом низу секцию нашей группировки.
Код
[nebo]:stalker
Теперь весь список продуктов, а так же вероятность их спавна в инвентаре НПС новой группировки будет, как у сталкеров.
Если вы захотите добавить свои продукты или изменить вероятность спавна старых, то под секцией своей группировки дописываем нужный продукт с другой вероятностью. Например:
У сталкеров возьмём секцию респа какого-нибудь арта:
[stalker] af_cristall_flower = 0
И перетащим её в нашу группировку с другой вероятностью спавна
[nebo]:stalker af_cristall_flower = 0.1
Можно вобще не трогать этот файл, всё продукты будут спавниться по дефолту без вылетов.
Теперь "научим" НПС новой группировки общаться с ГГ. Открываешь файл dialog_manager
"Научим" НПС просить аптечку. Я буду делать на секции сталкеров. Ищем секцию Wounded dialogs и дописываем через запятую свой клан:
Код
;Wounded dialogs
[dm_help_0]
category = hello
npc_community = stalker, trader, monolith, nebo
level = all
wounded = true
[dm_help_1]
category = hello
npc_community = stalker, trader, monolith, nebo
level = all
wounded = true
Ну а теперь "научим" НПС здороваться. Ищем следующие:
Код
[dm_hello_0]
category = hello
npc_community = stalker, trader, monolith, nebo
level = all
[dm_hello_1]
category = hello
npc_community = stalker, trader, monolith, nebo
level = all
[dm_hello_2]
category = hello
npc_community = stalker, monolith, nebo
level = all
Вот и всё! Теперь наши НПС могут говорить без вылетов.
Сделаем наш клан понятным игроку. Идём в файл ui_st_pda.xml
Начинаем с этого файла. Давайте создадим пять профилей группировки: новичок, бывалый, опытный, ветеран, мастер.
В самом низу списка создаём пять секции:
Код
;****************************************************************
; nebo
;****************************************************************
[sim_default_nebo_0]:stalker
$spawn = "respawn\sim_default_nebo_0"
character_profile = sim_default_nebo_0
spec_rank = novice
community = nebo
[sim_default_nebo_1]:stalker
$spawn = "respawn\sim_default_nebo_1"
character_profile = sim_default_nebo_1
spec_rank = regular
community = nebo
[sim_default_nebo_2]:stalker
$spawn = "respawn\sim_default_nebo_2"
character_profile = sim_default_nebo_2
spec_rank = experienced
community = nebo
[sim_default_nebo_3]:stalker
$spawn = "respawn\sim_default_nebo_3"
character_profile = sim_default_nebo_3
spec_rank = veteran
community = nebo
[sim_default_nebo_4]:stalker
$spawn = "respawn\sim_default_nebo_4"
character_profile = sim_default_nebo_4
spec_rank = master
community = nebo
Сохраняем, закрываем.
Создаём секцию своих НПС в самом низу. Я буду показывать на одной секции, т.к. все займут много места.
Код
<specific_character id="sim_default_nebo_0_default_0" team_default = "1"> ;- ID
<name>GENERATE_NAME_stalker</name> ;-ИМЯ (в данном случае генерирутся из файлов сталкерских имён и кличек)
<icon>ui_inGame2_neutral_1</icon> ;- иконка
<map_icon x="1" y="0"></map_icon>
<bio>Опытный сталкер. Детальная информация отсутствует.</bio>
<class>sim_default_nebo_0</class> - класс
<community>nebo</community> <terrain_sect>stalker_terrain</terrain_sect>
<snd_config>characters_voice\human_01\stalker\</snd_config> ;- голос
В данном файле пишем следующие(чтобы не запутаться, пишите свой клан после секции зомбей(zombied)).
Код
[nebo]:default_behaviour
Тут создаём сквады нашего клана. В Simulation SQUADS пишем:
Код
[nebo_sim_squad_novice]:online_offline_group ;--id отряда с указанием скриптового класса.
faction = nebo - клан
npc_random = sim_default_nebo_0, sim_default_nebo_1 ;- НПС заданные для спавна
npc_in_squad = 2, 3 - количество НПС в скваде (в данном случае 2 или 3)
Теперь лезем в папку scripts и ищем файл death_manager.ltx
Открываем и ищем такую строку:
Код
function init_drop_settings()
local community_list = { "stalker", "dolg", "freedom", "bandit", "army", "zombied", "ecolog", "killer", "monolith" }
И дописываем свой клан:
Код
function init_drop_settings()
local community_list = { "stalker", "dolg", "freedom", "bandit", "army", "zombied", "ecolog", "killer", "monolith", "nebo" }
Важно! Делать именно так! После последнего клана ставим запятую, открываем кавычки, пишем название своего клана, закрываем кавычки.
Для чего надо регистрировать клан в этом скрипте?
Если вы не зарегистрируете его там, то при убийстве НПС нового клана у вас вылетит игра, другими словами этот файл является менеджером убийств всех ИИ существ в игре, от сталкеров до мутантов разных фракций.
В данном файле ищем строку squad_community_by_behaviour = {
После секции Монолита пишем свою группировку:
Код
["nebo"] = "nebo",
Не забываем про запятые!
В данном файле ищем строку local avail_communities = parse_names(utils.cfg_get_string(snd_ini, section, "avail_communities", nil, false, "", "stalker, ecolog, bandit, dolg, freedom, army, zombied, monolith, killer"))
И вписываем свой клан:
Тут ищем таблицу поведения относительно смартов. И после monster_special пишем следующие:
Код
nebo = {
squad = nil,
smart = { base = { prec = function(squad, target) return in_time_interval(18,8) and not xr_conditions.surge_started() and not travel_manager.check_squad_for_enemies(squad) and (target:name() == "zat_stalker_base_smart" or target:name() == "jup_a6" or target:name() == "pri_a16") end },
surge = { prec = function() return xr_conditions.surge_started() end },
territory= { prec = function() return in_time_interval(8,18) and not xr_conditions.surge_started() end },
resource = { prec = function(squad, target) return in_time_interval(8,18) and not xr_conditions.surge_started() end } -- and squad:has_detector()
},
actor = nil
},