Создание новой группировки — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Создание новой группировки — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(Мир)
(оформление)
 
(не показаны 15 промежуточные версии 9 участников)
Строка 1: Строка 1:
 
==Новая группировка==
 
==Новая группировка==
  
Сегодня мы создадим новую группировку. Назовем её, скажем, "Мир". Не суть важно.
+
Сегодня мы создадим новую группировку. Назовем её, скажем, "Ветер". Не суть важно.
  
 
==Практика==
 
==Практика==
Строка 9: Строка 9:
 
'''1.''' Для начала в '''game_relations.ltx''' и в таблицу отношений группировок в конце и в заголовке добавляем название своей группировки и коэффициенты отношений к ней у других группировок. Также, не забываем прописать её собственное отношение к другим группировкам:
 
'''1.''' Для начала в '''game_relations.ltx''' и в таблицу отношений группировок в конце и в заголовке добавляем название своей группировки и коэффициенты отношений к ней у других группировок. Также, не забываем прописать её собственное отношение к другим группировкам:
  
<pre>[communities_relations]
+
<ini>[communities_relations]
 
;|actor  |act_dol|act_fre|stalker|monolit|militar|killer |ecolog |dolg  |freedom|bandit |zombied|strange|trader|arena_enemy|wind|
 
;|actor  |act_dol|act_fre|stalker|monolit|militar|killer |ecolog |dolg  |freedom|bandit |zombied|strange|trader|arena_enemy|wind|
 
;=================================================================================================================================
 
;=================================================================================================================================
Строка 29: Строка 29:
 
arena_enemy = -5000,  -5000,  -5000,  -5000,  -5000,  -5000,      0,      0,      0,  -5000,  -5000,      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</pre>
+
wind = 0,   0,   0,   0,  -5000,  -5000,  -5000,      0,   0,   0,  -5000,  -5000,   0,   0,  -5000, 0</ini>
 
+
 
Также, изменим эту строку, добавив туда имя и номер группировки:
 
Также, изменим эту строку, добавив туда имя и номер группировки:
  
<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, 18,</pre>
+
freedom, 11, bandit, 12, zombied, 13, stranger, 14, trader, 15, arena_enemy, 16, wind, 18  
  
 
Отсчет идет построчно начиная сверху. Хотя есть небольшой нюанс. У первых трех строк - нумерация начинается с нуля, с остальных группировок она идет как надо. Для wind выставили 18, так как мы эту группировку отделили от других.
 
Отсчет идет построчно начиная сверху. Хотя есть небольшой нюанс. У первых трех строк - нумерация начинается с нуля, с остальных группировок она идет как надо. Для wind выставили 18, так как мы эту группировку отделили от других.
Строка 41: Строка 40:
 
Далее, в разделе ''[communities_sympathy]'' в конце добавляем свою группировку и коэффициент "впечатлительности" - чем он меньше, тем меньше отношение группировки будет меняться к вам в целом:
 
Далее, в разделе ''[communities_sympathy]'' в конце добавляем свою группировку и коэффициент "впечатлительности" - чем он меньше, тем меньше отношение группировки будет меняться к вам в целом:
  
<pre>[communities_sympathy]
+
<ini>[communities_sympathy]
 
actor = 0.0
 
actor = 0.0
 
actor_dolg = 0.0
 
actor_dolg = 0.0
Строка 57: Строка 56:
 
stranger = 0.0
 
stranger = 0.0
 
arena_enemy =     0.0
 
arena_enemy =     0.0
wind = 0.0</pre>
+
wind = 0.0</ini>
 
+
 
'''2.''' После этого в файле '''death_manager.script''' ищем строку ''local community_list'' и в скобках добавляем название своей группировки:
 
'''2.''' После этого в файле '''death_manager.script''' ищем строку ''local community_list'' и в скобках добавляем название своей группировки:
  
<pre>function init_drop_settings()
+
<lua>function init_drop_settings()
 
local community_list = { "stalker", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "monolith",  
 
local community_list = { "stalker", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "monolith",  
"arena_enemy", "actor_dolg", "wind" }</pre>
+
"arena_enemy", "actor_dolg", "wind" }</lua>
  
 
'''3.''' В файле '''death_items_by_communities.ltx''' пишем ''[x]:stalker'' (вместо ''x'' - название вашей группировки):
 
'''3.''' В файле '''death_items_by_communities.ltx''' пишем ''[x]:stalker'' (вместо ''x'' - название вашей группировки):
  
<pre>[...]
+
<ini>[...]
 
af_dummy_spring = 0
 
af_dummy_spring = 0
 
af_fuzz_kolobok = 0
 
af_fuzz_kolobok = 0
Строка 82: Строка 80:
 
vodka = 0
 
vodka = 0
 
energy_drink = 0.3
 
energy_drink = 0.3
</pre>
+
</ini>
 
+
 
'''4.''' Если предусматривается респавн бойцов новой группировки, в '''se_respawn.script''' прописываем в '''local simMaxCount = {''' после строчек с зомбированными сталкерами строку:
 
'''4.''' Если предусматривается респавн бойцов новой группировки, в '''se_respawn.script''' прописываем в '''local simMaxCount = {''' после строчек с зомбированными сталкерами строку:
  
Строка 90: Строка 87:
 
</pre>
 
</pre>
  
 +
И в файле '''misc\smart_terrain_presets.ltx''', в секциях требуемых уровней, на которых предусматривается респаун бойцов новой группировки, добавляем строки с названием своей группировки:
 +
 +
<pre>
 +
[l02_garbage]
 +
wind = novice, experienced, veteran, master
 +
</pre>
 
'''5.''' Чтобы при убийстве непися новой группировки игра не вылетала в '''xr_statistic.script''',
 
'''5.''' Чтобы при убийстве непися новой группировки игра не вылетала в '''xr_statistic.script''',
  
 
после строки:
 
после строки:
  
<pre>zombied_novice = 1, zombied_experienced = 2, zombied_veteran = 3, zombied_master = 4,</pre>
+
<lua>zombied_novice = 1, zombied_experienced = 2, zombied_veteran = 3, zombied_master = 4,</lua>
 
+
 
пишем
 
пишем
 
+
<lua>wind_novice = 1, wind_experienced = 2, wind_veteran = 3, wind_master = 4,</lua>
<pre>dark_stalker_novice = 1, dark_stalker_experienced = 2, dark_stalker_veteran = 3, dark_stalker_master = 4,</pre>
+
и ниже в '''function getNpcType(npc)''' добавим:
 +
<lua> elseif npc:character_community() == "wind" then
 +
community = "wind"</lua>
  
  
 
'''6.''' Ну а в '''character_desk_x.xml''' выбираем любого NPC (или группу) и меняем группировку на свою:
 
'''6.''' Ну а в '''character_desk_x.xml''' выбираем любого NPC (или группу) и меняем группировку на свою:
  
<pre><!---esc_wolf--->
+
<xml><!---esc_wolf--->
 
<specific_character id="esc_wolf" team_default = "1">
 
<specific_character id="esc_wolf" team_default = "1">
 
<name>esc_wolf_name</name>
 
<name>esc_wolf_name</name>
Строка 111: Строка 115:
 
<class>esc_wolf</class>
 
<class>esc_wolf</class>
 
<community>wind</community>
 
<community>wind</community>
[...]</pre>
+
[...]</xml>
  
 
'''7.''' Чтобы у персонажа в графе "Группировка" отображалось не "wind", а "Ветер", зарегистрируем соответствующую строку в файле string_table_general.xml:
 
'''7.''' Чтобы у персонажа в графе "Группировка" отображалось не "wind", а "Ветер", зарегистрируем соответствующую строку в файле string_table_general.xml:
  
<pre><?xml version="1.0" encoding="windows-1251" ?>
+
<xml><?xml version="1.0" encoding="windows-1251" ?>
 
<string_table>
 
<string_table>
 
<string id="wind">
 
<string id="wind">
Строка 123: Строка 127:
 
<text>Одиночка</text>
 
<text>Одиночка</text>
 
</string>
 
</string>
[...]</pre>
+
[...]</xml>
  
 
'''8.''' Существует возможность создать для нашей новой группировки места, где они будут ходить (''*_terrain'' брать из '''m_stalker.ltx'''):
 
'''8.''' Существует возможность создать для нашей новой группировки места, где они будут ходить (''*_terrain'' брать из '''m_stalker.ltx'''):
  
 
То есть, к примеру, существует секция:
 
То есть, к примеру, существует секция:
<pre>
+
<ini>
 
[stalker_terrain]
 
[stalker_terrain]
 
255,000,255,255
 
255,000,255,255
 
008,001,255,255 ;Разрешено ходить по опасным местам на баре
 
008,001,255,255 ;Разрешено ходить по опасным местам на баре
 
012,001,255,255 ;Разрешено ходить по опасным местам на Милитари
 
012,001,255,255 ;Разрешено ходить по опасным местам на Милитари
</pre>
+
</ini>
  
 
Тогда можно создать новую, по аналогии:
 
Тогда можно создать новую, по аналогии:
  
<pre>
+
<ini>
 
[wind_terrain]
 
[wind_terrain]
 
255,000,255,255
 
255,000,255,255
Строка 143: Строка 147:
 
012,001,255,255 ;Разрешено ходить по опасным местам на Милитари
 
012,001,255,255 ;Разрешено ходить по опасным местам на Милитари
 
010,001,255,255 ;Разрешено ходить по опасным местам на янтаре
 
010,001,255,255 ;Разрешено ходить по опасным местам на янтаре
</pre>
+
</ini>
  
  
Строка 158: Строка 162:
 
Во-первых, пропишите в список диалогов персонажа следующие строки:
 
Во-первых, пропишите в список диалогов персонажа следующие строки:
  
<pre> <actor_dialog>[что-нибудь]_dialog</actor_dialog>
+
<pre> <actor_dialog>[tm_trader_diolog]_dialog</actor_dialog>
<actor_dialog>[что-нибудь]_reward</actor_dialog></pre>
+
<actor_dialog>[tm_wolf_diolog]_reward</actor_dialog></pre>
  
 
Примеры названий: ''tm_trader_dialog'', ''tm_wolf_dialog''...
 
Примеры названий: ''tm_trader_dialog'', ''tm_wolf_dialog''...
Строка 167: Строка 171:
 
Этим мы добавили ему ветку диалога "Есть работа?", а также ветку для награды за квест/отказа от него. Теперь зарегистрируем в '''task_manager.ltx''' набор новых заданий.
 
Этим мы добавили ему ветку диалога "Есть работа?", а также ветку для награды за квест/отказа от него. Теперь зарегистрируем в '''task_manager.ltx''' набор новых заданий.
  
<pre>[list]
+
<ini>[list]
  
 
[...]
 
[...]
Строка 206: Строка 210:
 
reward_rank = 9
 
reward_rank = 9
 
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</ini>
  
 
Не забудьте прописать описания заданий в текстовые массивы. Подробнее о редактировании '''task_manager.ltx''' читайте в [[Однотипные квесты|уроке]], посвященном однотипным квестам.
 
Не забудьте прописать описания заданий в текстовые массивы. Подробнее о редактировании '''task_manager.ltx''' читайте в [[Однотипные квесты|уроке]], посвященном однотипным квестам.
Строка 212: Строка 216:
 
Да, и зарегистрируйте сами ветки диалогов в файле '''dialogs.xml'''. Вот пример того, как это сделано для заданий "Долга":
 
Да, и зарегистрируйте сами ветки диалогов в файле '''dialogs.xml'''. Вот пример того, как это сделано для заданий "Долга":
  
<pre>    <dialog id="tm_dolg_dialog" priority="-1">
+
<xml>    <dialog id="tm_dolg_dialog" priority="-1">
 
<init_func>task_manager.init_dolg_task_dialog</init_func>
 
<init_func>task_manager.init_dolg_task_dialog</init_func>
 
     </dialog>
 
     </dialog>
Строка 218: Строка 222:
 
<init_func>task_manager.init_dolg_reward_dialog</init_func>
 
<init_func>task_manager.init_dolg_reward_dialog</init_func>
 
<precondition>task_manager.has_active_vendor_task</precondition>
 
<precondition>task_manager.has_active_vendor_task</precondition>
     </dialog></pre>
+
     </dialog></xml>
  
 
Соответственно, пройдем туда, куда указывает строка ''task_manager.init_dolg_task_dialog'' - в '''task_manager.script''':  
 
Соответственно, пройдем туда, куда указывает строка ''task_manager.init_dolg_task_dialog'' - в '''task_manager.script''':  
 
 
 
 
<pre>function init_dolg_task_dialog(dlg)  
+
<lua>function init_dolg_task_dialog(dlg)  
get_random_task():init_task_dialog(dlg, "dolg")</pre>  
+
get_random_task():init_task_dialog(dlg, "dolg") --('эта функция для взятия квеста)
 
 
 
 
 +
function init_dolg_reward_dialog(dlg)
 +
get_random_task():init_reward_dialog(dlg, "dolg") --(а эта функция для отказа от квеста)
 +
end</lua>
 +
 
По аналогии делаем и с нашим "Ветром".
 
По аналогии делаем и с нашим "Ветром".
  
Строка 232: Строка 240:
  
 
Прописываем в '''dialogs.script''' такие action'ы:
 
Прописываем в '''dialogs.script''' такие action'ы:
<pre>-----------------------------------------------------------------------------------
+
<lua>-----------------------------------------------------------------------------------
 
-- Community
 
-- Community
 
-----------------------------------------------------------------------------------
 
-----------------------------------------------------------------------------------
Строка 238: Строка 246:
 
[...]
 
[...]
  
function actor_set_wind (actor, npc)
+
function actor_set_wind(actor, npc)
printf ("ACTOR NOW IN WIND COMMUNITY"
+
printf("ACTOR NOW IN [WIND] COMMUNITY")
if db.actor then
+
if db.actor then
db.actor:set_character_community ("actor_wind", 0, 0)
+
db.actor:set_character_community("wind", 0, 0)
 +
end
 +
return true
 
end
 
end
return true
+
</lua>
end</pre>
+
После чего создадим диалог, и сделаем в нем фразу с action'ом вида ''<action>dialogs.actor_set_wind</action>''. Советую изучить [[Создание диалогов|урок]], посвященный диалогам.
 
+
После чего создадим диалог, и сделаем в нем фразу с action'ом вида ''<action>actor_set_wind</action>''. Советую изучить [[Создание диалогов|урок]], посвященный диалогам.
+
  
 
====Новые NPC====
 
====Новые NPC====
Строка 255: Строка 263:
  
 
Статья [[Участник:BAC9-FLCL|BAC9-FLCL]].<br>
 
Статья [[Участник:BAC9-FLCL|BAC9-FLCL]].<br>
Способ открыт [[Участник:Arhet|Arhet]] ([[Team:SRP Team|SRP Team]]).
+
Способ открыт [[Участник:Arhet|Arhet]] ([[Team:SRP Team|SRP Team]])
 +
Статью поправил: [[Участник:Vikman|Vikman]]
 +
 
  
 +
Альтернатива - статья [[Участник:SenseyVit|SenseyVit]]
  
Альтернатива - статья [[Участник:SenseyVit|SenseyVit]] ([http://stalkerhunt.ucoz.ru/publ/1-1-0-2 открыть]).
 
  
 
[[Категория:Скрипты]][[Категория:Конфигурационные_файлы]]
 
[[Категория:Скрипты]][[Категория:Конфигурационные_файлы]]

Текущая версия на 08:56, 23 июля 2013

Новая группировка

Сегодня мы создадим новую группировку. Назовем её, скажем, "Ветер". Не суть важно.

Практика

Базовый уровень

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,

И в файле misc\smart_terrain_presets.ltx, в секциях требуемых уровней, на которых предусматривается респаун бойцов новой группировки, добавляем строки с названием своей группировки:

[l02_garbage]
wind = novice, experienced, veteran, master

5. Чтобы при убийстве непися новой группировки игра не вылетала в xr_statistic.script,

после строки:

zombied_novice = 1, zombied_experienced = 2, zombied_veteran = 3, zombied_master = 4,

пишем

wind_novice = 1, wind_experienced = 2, wind_veteran = 3, wind_master = 4,

и ниже в function getNpcType(npc) добавим:

		elseif npc:character_community() == "wind" then
			community = "wind"


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>[tm_trader_diolog]_dialog</actor_dialog>
		<actor_dialog>[tm_wolf_diolog]_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")	 --('эта функция для взятия квеста)
 
function init_dolg_reward_dialog(dlg)
	get_random_task():init_reward_dialog(dlg, "dolg") --(а эта функция для отказа от квеста)
end

По аналогии делаем и с нашим "Ветром".

Вступление в группировку

Реализуем возможность вступления в группировку.

Прописываем в 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("wind", 0, 0)
	end
	return true
end
 

После чего создадим диалог, и сделаем в нем фразу с action'ом вида <action>dialogs.actor_set_wind</action>. Советую изучить урок, посвященный диалогам.

Новые NPC

Лучше всего всё вышеприведенное повесить на нового, уникального персонажа. Способ его спавна описан здесь.

Авторы

Статья BAC9-FLCL.
Способ открыт Arhet (SRP Team) Статью поправил: Vikman


Альтернатива - статья SenseyVit

Другие места
LANGUAGE