Создание новой группировки
Материал из Mod Wiki.
Версия 20:25, 24 августа 2007 (править) BAC9-FLCL (Обсуждение | вклад) (→Продвинутый уровень) ← К предыдущему изменению |
Версия 20:37, 24 августа 2007 (править) (отменить) BAC9-FLCL (Обсуждение | вклад) (→Вступление в группировку) К следующему изменению → |
||
Строка 165: | Строка 165: | ||
====Вступление в группировку==== | ====Вступление в группировку==== | ||
- | + | Реализуем возможность вступления в группировку. | |
+ | |||
+ | Прописываем в '''dialogs.script''' такие action'ы: | ||
+ | <pre> | ||
+ | ----------------------------------------------------------------------------------- | ||
+ | -- 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) | ||
+ | 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>''. Советую изучить [[Создание диалогов|урок]], посвященный диалогам. | ||
==Авторы== | ==Авторы== | ||
Статья создана: [[Участник:BAC9-FLCL|BAC9-FLCL]] на базе статьи SenseyVit. | Статья создана: [[Участник:BAC9-FLCL|BAC9-FLCL]] на базе статьи SenseyVit. |
Версия 20:37, 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_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) 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.