Создание новой группировки
Материал из Mod Wiki.
Версия 19:36, 24 августа 2007 (править) BAC9-FLCL (Обсуждение | вклад) (→Авторы) ← К предыдущему изменению |
Текущая версия (14:20, 9 сентября 2007) (править) (отменить) Arhet (Обсуждение | вклад) (→Базовый уровень) |
||
(43 промежуточные версии не показаны) | |||
Строка 7: | Строка 7: | ||
===Базовый уровень=== | ===Базовый уровень=== | ||
- | '''1.''' Для начала в '''game_relations.ltx''' и в таблицу отношений группировок в конце добавляем название своей группировки и коэффициенты отношений: | + | '''1.''' Для начала в '''game_relations.ltx''' и в таблицу отношений группировок в конце и в заголовке добавляем название своей группировки и коэффициенты отношений к ней у других группировок. Также, не забываем прописать её собственное отношение к другим группировкам: |
<pre>[communities_relations] | <pre>[communities_relations] | ||
- | ; |actor |act_dol|act_fre|stalker|monolit|militar|killer |ecolog |dolg |freedom|bandit |zombied|strange|trader |arena_enemy| | + | ;|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 | + | 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_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, | + | 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 | + | 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, | + | 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, | + | 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 | + | 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 | + | 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 | + | 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 | + | 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 | + | 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, | + | 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 | + | 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 | 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, | + | 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</pre> | + | wind = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0</pre> |
Также, изменим эту строку, добавив туда имя и номер группировки: | Также, изменим эту строку, добавив туда имя и номер группировки: | ||
Строка 35: | Строка 35: | ||
<pre>;названия группировок | <pre>;названия группировок | ||
communities = actor, 0, actor_dolg, 1, actor_freedom, 2, stalker, 5, monolith, 6, military, 7, killer, 8, ecolog, 9, dolg, 10, | 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, | + | freedom, 11, bandit, 12, zombied, 13, stranger, 14, trader, 15, arena_enemy, 16, wind, 18,</pre> |
+ | |||
+ | Отсчет идет построчно начиная сверху. Хотя есть небольшой нюанс. У первых трех строк - нумерация начинается с нуля, с остальных группировок она идет как надо. Для wind выставили 18, так как мы эту группировку отделили от других. | ||
Далее, в разделе ''[communities_sympathy]'' в конце добавляем свою группировку и коэффициент "впечатлительности" - чем он меньше, тем меньше отношение группировки будет меняться к вам в целом: | Далее, в разделе ''[communities_sympathy]'' в конце добавляем свою группировку и коэффициент "впечатлительности" - чем он меньше, тем меньше отношение группировки будет меняться к вам в целом: | ||
Строка 75: | Строка 77: | ||
[actor_dolg] | [actor_dolg] | ||
- | [wind]: stalker</pre> | + | [wind]: stalker |
+ | bread = 0 | ||
+ | kolbasa = 0 | ||
+ | vodka = 0 | ||
+ | energy_drink = 0.3 | ||
+ | </pre> | ||
- | '''4.''' Ну а в '''character_desk_x.xml''' выбираем любого NPC (или группу) и меняем группировку на свою: | + | '''4.''' Если предусматривается респавн бойцов новой группировки, в '''se_respawn.script''' прописываем в '''local simMaxCount = {''' после строчек с зомбированными сталкерами строку: |
+ | |||
+ | <pre> | ||
+ | wind_novice = 20, wind_regular = 20, wind_veteran = 20, wind_master = 6, | ||
+ | </pre> | ||
+ | |||
+ | '''5.''' Чтобы при убийстве непися новой группировки игра не вылетала в '''xr_statistic.script''', | ||
+ | |||
+ | после строки: | ||
+ | |||
+ | <pre>zombied_novice = 1, zombied_experienced = 2, zombied_veteran = 3, zombied_master = 4,</pre> | ||
+ | |||
+ | пишем | ||
+ | |||
+ | <pre>dark_stalker_novice = 1, dark_stalker_experienced = 2, dark_stalker_veteran = 3, dark_stalker_master = 4,</pre> | ||
+ | |||
+ | |||
+ | '''6.''' Ну а в '''character_desk_x.xml''' выбираем любого NPC (или группу) и меняем группировку на свою: | ||
<pre><!---esc_wolf---> | <pre><!---esc_wolf---> | ||
Строка 89: | Строка 113: | ||
[...]</pre> | [...]</pre> | ||
- | ''' | + | '''7.''' Чтобы у персонажа в графе "Группировка" отображалось не "wind", а "Ветер", зарегистрируем соответствующую строку в файле string_table_general.xml: |
<pre><?xml version="1.0" encoding="windows-1251" ?> | <pre><?xml version="1.0" encoding="windows-1251" ?> | ||
Строка 100: | Строка 124: | ||
</string> | </string> | ||
[...]</pre> | [...]</pre> | ||
+ | |||
+ | '''8.''' Существует возможность создать для нашей новой группировки места, где они будут ходить (''*_terrain'' брать из '''m_stalker.ltx'''): | ||
+ | |||
+ | То есть, к примеру, существует секция: | ||
+ | <pre> | ||
+ | [stalker_terrain] | ||
+ | 255,000,255,255 | ||
+ | 008,001,255,255 ;Разрешено ходить по опасным местам на баре | ||
+ | 012,001,255,255 ;Разрешено ходить по опасным местам на Милитари | ||
+ | </pre> | ||
+ | |||
+ | Тогда можно создать новую, по аналогии: | ||
+ | |||
+ | <pre> | ||
+ | [wind_terrain] | ||
+ | 255,000,255,255 | ||
+ | 008,001,255,255 ;Разрешено ходить по опасным местам на баре | ||
+ | 012,001,255,255 ;Разрешено ходить по опасным местам на Милитари | ||
+ | 010,001,255,255 ;Разрешено ходить по опасным местам на янтаре | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | Здесь, очевидно, указаны координаты самого уровня. Для каждого уровня существует своя начальная координата. | ||
===Продвинутый уровень=== | ===Продвинутый уровень=== | ||
- | Такой метод достаточно примитивен. Это не полноценная группировка. Нам нужны соответствующие диалоги, возможность получения квестов и вступления в группировку | + | Такой метод достаточно примитивен. Это не полноценная группировка. Нам нужны соответствующие диалоги, возможность получения квестов и вступления в группировку, уникальные NPC. |
====Квесты==== | ====Квесты==== | ||
Строка 109: | Строка 156: | ||
Добавим квесты, которые нужно выполнить для группировки. Пока - простые поручения распространенных типов. | Добавим квесты, которые нужно выполнить для группировки. Пока - простые поручения распространенных типов. | ||
- | + | Во-первых, пропишите в список диалогов персонажа следующие строки: | |
- | <pre> <actor_dialog> | + | <pre> <actor_dialog>[что-нибудь]_dialog</actor_dialog> |
- | <actor_dialog> | + | <actor_dialog>[что-нибудь]_reward</actor_dialog></pre> |
- | + | Примеры названий: ''tm_trader_dialog'', ''tm_wolf_dialog''... | |
- | Теперь зарегистрируем в '''task_manager.ltx''' набор новых заданий. | + | <span style="color: gray">Внимание! Метод не проверен.</span> |
+ | |||
+ | Этим мы добавили ему ветку диалога "Есть работа?", а также ветку для награды за квест/отказа от него. Теперь зарегистрируем в '''task_manager.ltx''' набор новых заданий. | ||
<pre>[list] | <pre>[list] | ||
+ | |||
[...] | [...] | ||
+ | |||
;--------Wind------------------------ | ;--------Wind------------------------ | ||
;----------Kill Stalker---- | ;----------Kill Stalker---- | ||
Строка 125: | Строка 176: | ||
;----------Find Item---- | ;----------Find Item---- | ||
wind_find_item | wind_find_item | ||
+ | |||
[...] | [...] | ||
+ | |||
;tasks for Wind | ;tasks for Wind | ||
Строка 131: | Строка 184: | ||
type = find_item | type = find_item | ||
community = actor | community = actor | ||
- | text = [ | + | text = [ссылка на текст с рассказом заказчика о задании] |
- | description = [ | + | description = [ссылка на текст с описанием задания] |
- | parent = | + | parent = [имя NPC-заказчика] |
- | target = | + | target = scientific_outfit |
- | + | reward_money = 5000 | |
reward_reputation = +5 | reward_reputation = +5 | ||
reward_rank = 4 | reward_rank = 4 | ||
Строка 145: | Строка 198: | ||
type = kill_stalker | type = kill_stalker | ||
community = actor | community = actor | ||
- | text = [ | + | text = [ссылка на текст с рассказом заказчика о задании] |
- | description = [ | + | description = [ссылка на текст с описанием задания] |
- | parent = | + | parent = [имя NPC-заказчика] |
target = sim_stalker_master_master | target = sim_stalker_master_master | ||
reward_money = 4000 | reward_money = 4000 | ||
Строка 154: | Строка 207: | ||
reward_item = ammo_5.56x45_ap, ammo_5.56x45_ap, ammo_5.56x45_ap | reward_item = ammo_5.56x45_ap, ammo_5.56x45_ap, ammo_5.56x45_ap | ||
time = 86400</pre> | time = 86400</pre> | ||
+ | |||
+ | Не забудьте прописать описания заданий в текстовые массивы. Подробнее о редактировании '''task_manager.ltx''' читайте в [[Однотипные квесты|уроке]], посвященном однотипным квестам. | ||
+ | |||
+ | Да, и зарегистрируйте сами ветки диалогов в файле '''dialogs.xml'''. Вот пример того, как это сделано для заданий "Долга": | ||
+ | |||
+ | <pre> <dialog id="tm_dolg_dialog" priority="-1"> | ||
+ | <init_func>task_manager.init_dolg_task_dialog</init_func> | ||
+ | </dialog> | ||
+ | <dialog id="tm_dolg_reward" priority="0"> | ||
+ | <init_func>task_manager.init_dolg_reward_dialog</init_func> | ||
+ | <precondition>task_manager.has_active_vendor_task</precondition> | ||
+ | </dialog></pre> | ||
+ | |||
+ | Соответственно, пройдем туда, куда указывает строка ''task_manager.init_dolg_task_dialog'' - в '''task_manager.script''': | ||
+ | |||
+ | <pre>function init_dolg_task_dialog(dlg) | ||
+ | get_random_task():init_task_dialog(dlg, "dolg")</pre> | ||
+ | |||
+ | По аналогии делаем и с нашим "Ветром". | ||
+ | |||
+ | ====Вступление в группировку==== | ||
+ | |||
+ | Реализуем возможность вступления в группировку. | ||
+ | |||
+ | Прописываем в '''dialogs.script''' такие action'ы: | ||
+ | <pre>----------------------------------------------------------------------------------- | ||
+ | -- 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</pre> | ||
+ | |||
+ | После чего создадим диалог, и сделаем в нем фразу с action'ом вида ''<action>actor_set_wind</action>''. Советую изучить [[Создание диалогов|урок]], посвященный диалогам. | ||
+ | |||
+ | ====Новые NPC==== | ||
+ | |||
+ | Лучше всего всё вышеприведенное повесить на нового, уникального персонажа. Способ его спавна описан [[Cпавн через скрипт#Спавн NPC|здесь]]. | ||
==Авторы== | ==Авторы== | ||
- | Статья | + | Статья [[Участник:BAC9-FLCL|BAC9-FLCL]].<br> |
+ | Способ открыт [[Участник:Arhet|Arhet]] ([[Team:SRP Team|SRP Team]]). | ||
+ | |||
+ | |||
+ | Альтернатива - статья [[Участник:SenseyVit|SenseyVit]] ([http://stalkerhunt.ucoz.ru/publ/1-1-0-2 открыть]). | ||
+ | [[Категория:Статьи участников]] |
Текущая версия
Содержание |
Новая группировка
Сегодня мы создадим новую группировку. Назовем её, скажем, "Ветер". Не суть важно.
Практика
Базовый уровень
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.script ищем строку 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.script прописываем в local simMaxCount = { после строчек с зомбированными сталкерами строку:
wind_novice = 20, wind_regular = 20, wind_veteran = 20, wind_master = 6,
5. Чтобы при убийстве непися новой группировки игра не вылетала в xr_statistic.script,
после строки:
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---> <specific_character id="esc_wolf" team_default = "1"> <name>esc_wolf_name</name> <icon>ui_npc_u_stalker_neytral_balon_1</icon> <bio>esc_wolf_bio</bio> <class>esc_wolf</class> <community>wind</community> [...]
7. Чтобы у персонажа в графе "Группировка" отображалось не "wind", а "Ветер", зарегистрируем соответствующую строку в файле string_table_general.xml:
<?xml version="1.0" encoding="windows-1251" ?> <string_table> <string id="wind"> <text>Ветер</text> </string> <string id="actor"> <text>Одиночка</text> </string> [...]
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.
Квесты
Добавим квесты, которые нужно выполнить для группировки. Пока - простые поручения распространенных типов.
Во-первых, пропишите в список диалогов персонажа следующие строки:
<actor_dialog>[что-нибудь]_dialog</actor_dialog> <actor_dialog>[что-нибудь]_reward</actor_dialog>
Примеры названий: tm_trader_dialog, tm_wolf_dialog...
Внимание! Метод не проверен.
Этим мы добавили ему ветку диалога "Есть работа?", а также ветку для награды за квест/отказа от него. Теперь зарегистрируем в task_manager.ltx набор новых заданий.
[list] [...] ;--------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. Вот пример того, как это сделано для заданий "Долга":
<dialog id="tm_dolg_dialog" priority="-1"> <init_func>task_manager.init_dolg_task_dialog</init_func> </dialog> <dialog id="tm_dolg_reward" priority="0"> <init_func>task_manager.init_dolg_reward_dialog</init_func> <precondition>task_manager.has_active_vendor_task</precondition> </dialog>
Соответственно, пройдем туда, куда указывает строка task_manager.init_dolg_task_dialog - в task_manager.script:
function init_dolg_task_dialog(dlg) get_random_task():init_task_dialog(dlg, "dolg")
По аналогии делаем и с нашим "Ветром".
Вступление в группировку
Реализуем возможность вступления в группировку.
Прописываем в dialogs.script такие 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'ом вида <action>actor_set_wind</action>. Советую изучить урок, посвященный диалогам.
Новые NPC
Лучше всего всё вышеприведенное повесить на нового, уникального персонажа. Способ его спавна описан здесь.