| 
				
			Создание новой группировки Новая группировка
 Сегодня мы создадим 
новую группировку. Назовем её, скажем, "Ветер". Не суть важно.
 Практика:
 Базовый
 уровень
 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--->
 <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:
 
 <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_tas
 k</precondition>
 </dialog>
 Соответственно, пройдем 
туда, куда указывает строка 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'ом вида <action>actor_set_wind</action>. Советую 
изучить урок, посвященный диалогам.
 [править]
 Новые NPC
 Лучше 
всего всё вышеприведенное повесить на нового, уникального персонажа. 
Способ его спавна описан здесь.
 
 
 Вычисляем координаты
 Нашел
 на одном форуме, достаточно интересно.
 Как получить координаты для 
спавна предмета или НПЦ. Скрипт сей найден на каком-то форуме, проверен и
 работает функция спавна имеет вид
 alife():create(section,position,levelvertex,gameve
 rtex)
 Где:
 section - имя того/чего спавним
 position,levelvertex,gamevertex
 - координаты, позиция вершины обьекта, и сектора карты.
 Напишу 
подробно, как очень про100 их узнать:
 Заходим, предварительно 
распаковав, в каталог gamedata/scripts/ И там в файле 
ui_main_menu*****ipt в конце дописываем это:
 function 
main_menu:OnButton_credits_clicked()
 local text
 local vid
 local
 gvid
 local a = vector()
 local text
 a = db.actor:position()
 vid
 = db.actor:level_vertex_id()
 gvid = db.actor:game_vertex_id()
 text
 = "Позиция:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= 
"..a.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid
 news_manager.send_tip(db.actor,
 text, nil, nil, 30000)
 end
 Теперь в игре идём на то место (или 
ногами или деморекордом), где спавним обьект, выходим в меню игры, и 
жмём на клавишу СОЗДАТЕЛИ (CREDITS) - соответственно нашему взоры не 
предстаёт никакой список создателей, а мы услышим звуковой сигнал, после
 чего выходим в игру из меню, и в строке сообщений высветиться вся инфа.
 Всё - F12 или на бумажку.
 
 |