Создание новой группировки

Материал из Mod Wiki.

(Различия между версиями)
Перейти к: навигация, поиск
Версия 20:37, 24 августа 2007 (править)
BAC9-FLCL (Обсуждение | вклад)
(Вступление в группировку)
← К предыдущему изменению
Версия 20:38, 24 августа 2007 (править) (отменить)
BAC9-FLCL (Обсуждение | вклад)
(Вступление в группировку)
К следующему изменению →
Строка 168: Строка 168:
Прописываем в '''dialogs.script''' такие action'ы: Прописываем в '''dialogs.script''' такие action'ы:
-<pre>+<pre>-----------------------------------------------------------------------------------
------------------------------------------------------------------------------------+
-- Community -- Community
----------------------------------------------------------------------------------- -----------------------------------------------------------------------------------
-function actor_in_dolg(actor, npc) 
-if db.actor then 
-return db.actor:character_community() == "actor_dolg" 
-end 
-return false 
-end 
-function actor_not_in_dolg(actor, npc)+[...]
-return not actor_in_dolg(actor, npc)+
-end+
- +
-function actor_set_dolg(actor, npc)+
-printf("ACTOR NOW IN [DOLG] COMMUNITY"+
-if db.actor then+
-db.actor:set_character_community("actor_dolg", 0, 0)+
-end+
-return true+
-end+
- +
-function actor_clear_community(actor, npc)+
-printf("ACTOR NOW IN [NEUTRAL] COMMUNITY"+
-if db.actor then+
-db.actor:set_character_community("actor", 0, 0)+
-end+
-return true+
-end+
- +
-function actor_set_stalker (actor, npc)+
-printf ("ACTOR NOW IN NEUTRAL COMMUNITY"+
-if db.actor then+
-db.actor:set_character_community ("actor", 0, 0)+
-end+
-return true+
-end+
- +
-function actor_set_military (actor, npc)+
-printf ("ACTOR NOW IN MILITARY COMMUNITY"+
-if db.actor then+
-db.actor:set_character_community ("military", 0, 0)+
-end+
-return true+
-end+
- +
-function actor_set_dolg (actor, npc)+
-printf ("ACTOR NOW IN DOLG COMMUNITY"+
-if db.actor then+
-db.actor:set_character_community ("actor_dolg", 0, 0)+
-end+
-return true+
-end+
- +
-function actor_set_killer (actor, npc)+
-printf ("ACTOR NOW IN KILLER COMMUNITY"+
-if db.actor then+
-db.actor:set_character_community ("killer", 0, 0)+
-end+
-return true+
-end+
- +
-function actor_set_ecolog (actor, npc)+
-printf ("ACTOR NOW IN ECOLOG COMMUNITY"+
-if db.actor then+
-db.actor:set_character_community ("ecolog", 0, 0)+
-end+
-return true+
-end+
- +
-function actor_set_bandit (actor, npc)+
-printf ("ACTOR NOW IN BANDIT COMMUNITY"+
-if db.actor then+
-db.actor:set_character_community ("bandit", 0, 0)+
-end+
-return true+
-end+
- +
-function actor_set_monolith (actor, npc)+
-printf ("ACTOR NOW IN MONOLITH COMMUNITY"+
-if db.actor then+
-db.actor:set_character_community ("monolith", 0, 0)+
-end+
-return true+
-end+
- +
-function actor_set_freedom (actor, npc)+
-printf ("ACTOR NOW IN FREEDOM COMMUNITY"+
-if db.actor then+
-db.actor:set_character_community ("actor_freedom", 0, 0)+
-end+
-return true+
-end+
function actor_set_wind (actor, npc) function actor_set_wind (actor, npc)
Строка 270: Строка 181:
return true return true
end</pre> end</pre>
 +
 +Они вам еще могу
После чего создадим диалог, и сделаем в нем фразу с action'ом вида ''<action>actor_set_wind</action>''. Советую изучить [[Создание диалогов|урок]], посвященный диалогам. После чего создадим диалог, и сделаем в нем фразу с action'ом вида ''<action>actor_set_wind</action>''. Советую изучить [[Создание диалогов|урок]], посвященный диалогам.

Версия 20:38, 24 августа 2007

Содержание

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

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

Практика

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

1. Для начала в game_relations.ltx и в таблицу отношений группировок в конце добавляем название своей группировки и коэффициенты отношений:

[communities_relations]
;	|actor  |act_dol|act_fre|stalker|monolit|militar|killer |ecolog |dolg   |freedom|bandit |zombied|strange|trader |arena_enemy|
;=================================================================================================================================
actor = 0,	   0,	   0,	   0,  -5000,  -5000,  -5000,      0,	   0,	   0,  -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,	  0,  -5000

stalker	= 0,	   0,	   0,	   0,  -5000,  -5000,  -5000,      0,	   0,	   0,  -5000,  -5000,	   0,	  0,  -5000
monolith = -5000,  -5000,  -5000,  -5000,   5000,  -5000,  -5000,  -5000,  -5000,  -5000,   5000,   5000,  -5000,	  0,  -5000
military = -5000,  -5000,  -5000,  -5000,  -5000,   5000,  -5000,      0,  -5000,  -5000,  -5000,  -5000, 	   0,	  0,  -5000
killer = -5000,  -5000,      0,  -5000,  -5000,  -5000,   5000,  -5000,  -5000,  -5000,	   0,  -5000,  -5000,	  0,  -5000
ecolog = 0,	 600,  -5000,      0,  -5000,   1000,  -5000,   5000,    500,  -5000,   -500,  -5000,	   0,	  0,      0
dolg = 0,    600,  -5000,      0,  -5000,   -500,  -5000,   5000,   5000,  -5000,  -5000,  -5000,	   0,	  0,      0
freedom = 0,  -5000,	 600,	   0,  -5000,  -5000,  -5000,  -1500,  -5000,   5000,	   0,  -5000,	   0,	  0,      0
bandit = -5000,  -5000,	   0,  -5000,  -5000,   -500,      0,  -5000,  -5000,	   0,	   0,  -5000,  -5000,	  0,  -5000
zombied	= -5000,  -5000,  -5000,  -5000,   5000,  -5000,  -5000,  -5000,  -5000,  -5000,  -5000,   5000,  -5000,	  0,  -5000
stranger = 0,	   0,	   0,      0,  -5000,  -5000,  -5000,      0,	   0,	   0,   -500,  -5000,	   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

wind = 0,	   0,	   0,	   0,  -5000,  -5000,  -5000,      0,	   0,	   0,  -5000,  -5000,	   0,	  0,  -5000

Также, изменим эту строку, добавив туда имя и номер группировки:

;названия группировок
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, 17,

Далее, в разделе [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

4. Ну а в 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>
		[...]

5. Чтобы у персонажа в графе "Группировка" отображалось не "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>
	[...]

Продвинутый уровень

Такой метод достаточно примитивен. Это не полноценная группировка. Нам нужны соответствующие диалоги, возможность получения квестов и вступления в группировку. Нового NPC пока создавать не будем, это достаточно сложная задача.

Квесты

Добавим квесты, которые нужно выполнить для группировки. Пока - простые поручения распространенных типов.

Во-первых, пропишите в список диалогов персонажа следующие строки:

		<actor_dialog>tm_[имя персонажа]_dialog</actor_dialog>
		<actor_dialog>tm_[имя персонажа]_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 = wind
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 = wind
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.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>. Советую изучить урок, посвященный диалогам.

Авторы

Статья создана: BAC9-FLCL на базе статьи SenseyVit.

Личные инструменты