Создание новой групировки. Сегодня мы создадим новую группировку. Назовем её, скажем,
"Ветер". Не суть важно.
Практика:
Базовый уровень
1. Для начала в game_relations.ltx и в таблицу отношений группировок
в конце и в заголовке добавляем название своей группировки и
коэффициенты отношений к ней у других группировок. Также, не
забываем прописать её собственное отношение к другим
группировкам:
[communities_relations]
;|actor |act_dol|act_fre|stalker|monolit|militar|killer |ecolog |dolg |freedom|
bandit |zombied|strange|trader|arena_enemy|wind|
;================================================= ==========
actor = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0
actor_dolg = 0, 0, 0, 0, -5000, -500, -5000, 5000, 600, -5000, -5000, -5000, 0, 0,
-5000
actor_freedom = 0, 0, 0, 0, -5000, -5000, -5000, -1500, -5000, 5000, 0, -5000, 0,
0, -5000, 0
stalker = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0
monolith = -5000, -5000, -5000, -5000, 5000, -5000, -5000, -5000, -5000, -5000,
5000, 5000, -5000, 0, -5000, 0
military = -5000, -5000, -5000, -5000, -5000, 5000, -5000, 0, -5000, -5000,
-5000, -5000, 0, 0, -5000, 0
killer = -5000, -5000, 0, -5000, -5000, -5000, 5000, -5000, -5000, -5000, 0,
-5000, -5000, 0, -5000, 0
ecolog = 0, 600, -5000, 0, -5000, 1000, -5000, 5000, 500, -5000, -500, -5000, 0,
0, 0, 0
dolg = 0, 600, -5000, 0, -5000, -500, -5000, 5000, 5000, -5000, -5000, -5000, 0,
0, 0, 0
freedom = 0, -5000, 600, 0, -5000, -5000, -5000, -1500, -5000, 5000, 0, -5000,
0, 0, 0, 0
bandit = -5000, -5000, 0, -5000, -5000, -500, 0, -5000, -5000, 0, 0, -5000, -5000,
0, -5000, 0
zombied = -5000, -5000, -5000, -5000, 5000, -5000, -5000, -5000, -5000, -5000,
-5000, 5000, -5000, 0, -5000, 0
stranger = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -500, -5000, 0, 0, 0, 0
trader = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
arena_enemy = -5000, -5000, -5000, -5000, -5000, -5000, 0, 0, 0, -5000, -5000,
0, 0, 0, 0, 0
wind = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0
Также, изменим эту строку, добавив туда имя и номер группировки:
;названия группировок
communities = actor, 0, actor_dolg, 1, actor_freedom, 2, stalker, 5,
monolith, 6, military, 7, killer, 8, ecolog, 9, dolg, 10,
freedom, 11, bandit, 12, zombied, 13, stranger, 14, trader, 15, arena_enemy,
16, wind, 18,
Отсчет идет построчно начиная сверху. Хотя есть небольшой нюанс. У
первых трех строк - нумерация начинается с нуля, с остальных
группировок она идет как надо. Для wind выставили 18, так как мы эту
группировку отделили от других.
Далее, в разделе [communities_sympathy] в конце добавляем свою
группировку и коэффициент "впечатлительности" - чем он меньше,
тем меньше отношение группировки будет меняться к вам в целом:
[communities_sympathy]
actor = 0.0
actor_dolg = 0.0
actor_freedom = 0.0
stalker = 0.0
monolith = 0.0
military = 0.0
killer = 0.0
ecolog = 0.0
dolg = 0.1
freedom = 0.1
bandit = 0.0
zombied = 0.0
trader = 0.0
stranger = 0.0
arena_enemy = 0.0
wind = 0.0
2. После этого в файле death_manager*****ipt ищем строку local
community_list и в скобках добавляем название своей группировки:
function init_drop_settings()
local community_list = { "stalker", "dolg", "freedom", "bandit", "military",
"zombied", "ecolog", "killer", "monolith",
"arena_enemy", "actor_dolg", "wind" }
3. В файле death_items_by_communities.ltx пишем [x]:stalker (вместо x -
название вашей группировки):
[...]
af_dummy_spring = 0
af_fuzz_kolobok = 0
;Еда
vodka = 0
[arena_enemy]
[actor_dolg]
[wind]: stalker
bread = 0
kolbasa = 0
vodka = 0
energy_drink = 0.3
4. Если предусматривается респавн бойцов новой группировки, в
se_respawn*****ipt прописываем в local simMaxCount = { после строчек
с зомбированными сталкерами строку:
wind_novice = 20, wind_regular = 20, wind_veteran = 20, wind_master = 6,
5. Чтобы при убийстве непися новой группировки игра не вылетала в
xr_statistic*****ipt,
после строки:
zombied_novice = 1, zombied_experienced = 2, zombied_veteran = 3,
zombied_master = 4,
пишем
dark_stalker_novice = 1, dark_stalker_experienced = 2,
dark_stalker_veteran = 3, dark_stalker_master = 4,
6. Ну а в character_desk_x.xml выбираем любого NPC (или группу) и
меняем группировку на свою:
esc_wolf_name
ui_npc_u_stalker_neytral_balon_1
esc_wolf_bio
esc_wolf
wind
[...]
7. Чтобы у персонажа в графе "Группировка" отображалось не "wind",
а "Ветер", зарегистрируем соответствующую строку в файле
string_table_general.xml:
Ветер
Одиночка
[...]
8. Существует возможность создать для нашей новой группировки
места, где они будут ходить (*_terrain брать из m_stalker.ltx):
То есть, к примеру, существует секция:
[stalker_terrain]
255,000,255,255
008,001,255,255 ;Разрешено ходить по опасным местам на баре
012,001,255,255 ;Разрешено ходить по опасным местам на Милитари
Тогда можно создать новую, по аналогии:
[wind_terrain]
255,000,255,255
008,001,255,255 ;Разрешено ходить по опасным местам на баре
012,001,255,255 ;Разрешено ходить по опасным местам на Милитари
010,001,255,255 ;Разрешено ходить по опасным местам на янтаре
Здесь, очевидно, указаны координаты самого уровня. Для каждого
уровня существует своя начальная координата.
Продвинутый уровень:
Такой метод достаточно примитивен. Это не полноценная
группировка. Нам нужны соответствующие диалоги, возможность
получения квестов и вступления в группировку, уникальные NPC.
Квесты:
Добавим квесты, которые нужно выполнить для группировки. Пока -
простые поручения распространенных типов.
Во-первых, пропишите в список диалогов персонажа следующие
строки:
[что-нибудь]_dialog
[что-нибудь]_reward
Примеры названий: tm_trader_dialog, tm_wolf_dialog...
Внимание! Метод не проверен.
Этим мы добавили ему ветку диалога "Есть работа?", а также ветку
для награды за квест/отказа от него. Теперь зарегистрируем в
task_manager.ltx набор новых заданий.
[...]
;--------Wind------------------------
;----------Kill Stalker----
wind_kill_stalker
;----------Find Item----
wind_find_item
[...]
;tasks for Wind
[wind_find_item]
type = find_item
community = actor
text = [ссылка на текст с рассказом заказчика о задании]
description = [ссылка на текст с описанием задания]
parent = [имя NPC-заказчика]
target = scientific_outfit
reward_money = 5000
reward_reputation = +5
reward_rank = 4
reward_item = wpn_sig_m1
time = 86400
[wind_kill_stalker]
type = kill_stalker
community = actor
text = [ссылка на текст с рассказом заказчика о задании]
description = [ссылка на текст с описанием задания]
parent = [имя NPC-заказчика]
target = sim_stalker_master_master
reward_money = 4000
reward_reputation = +5
reward_rank = 9
reward_item = ammo_5.56x45_ap, ammo_5.56x45_ap, ammo_5.56x45_ap
time = 86400
Не забудьте прописать описания заданий в текстовые массивы.
Подробнее о редактировании task_manager.ltx читайте в уроке,
посвященном однотипным квестам.
Да, и зарегистрируйте сами ветки диалогов в файле dialogs.xml. Вот
пример того, как это сделано для заданий "Долга":
Соответственно, пройдем туда, куда указывает строка
task_manager.init_dolg_task_dialog - в task_manager*****ipt:
function init_dolg_task_dialog(dlg)
get_random_task():init_task_dialog(dlg, "dolg")
По аналогии делаем и с нашим "Ветром".
Вступление в группировку:
Реализуем возможность вступления в группировку.
Прописываем в dialogs*****ipt такие action'ы:
-----------------------------------------------------------------------------------
-- Community
-----------------------------------------------------------------------------------
[...]
function actor_set_wind (actor, npc)
printf ("ACTOR NOW IN WIND COMMUNITY"
if db.actor then
db.actor:set_character_community ("actor_wind", 0, 0)
end
return true
end
После чего создадим диалог, и сделаем в нем фразу с action'ом вида
actor_set_wind. Советую изучить урок, посвященный
диалогам. Автор не я, мне принадлежит редактирование и мелкие правки по моему усмотрению...