Как создать фракции и менять владельца региона. (Empire: Total War)

Как создать фракции и менять владельца региона. (Empire: Total War)

1.Как ввести в игру новое государство
2.Как изменить владельца региона
3.Передача армий новому владельцу
4.Новые етнические групы для найма юнитов
5.Задаем первоначальное положение камеры при игре за открытую фракцию

Обсудить на ФОРУМЕ!



1. Создаем новое государство


Наверное каждый из играющих в ETW задумывался что "вот как бы было хорошо если бы сдесь была еще вот эта или эта фракция". К сожалению возможности добавлять нет но мы можем заменить одну из уже существующих :

Открываем startpos.esf в двух редакторах EsfEditor , чтобы копировать ряд значений.
1.1. Создание startpos.esf
Выбираем фракцию которую вы хотите пустить в расход. Наилучший выбор - фракции миноры. Например возьмем Саксонию и передадим ей область Финляндию. Это можно сделать несколькими способами:
А) Редактируем startpos.esf изменяя собственника провинции Финляндия, то есть прописываем вместо владения провинцией Швецией нового хозяина -Саксонию- изменения вносятяся в Region Ownership
Б)Легче сделать гибридный startpos.esf. Для создания гибрида нам нужен сам startpos.esf и одно сохранение. Для получения требуемого сохранения запускаем игру за Швецию и через меню дипломатия дарим Финляндию Саксонии. После этого делаем гибрид. Данный гибрид у нас будет оригинальным startpos.esf, пока не сделаем другой.
В) Не зависимо от того какой способ вы выбрали, откроем EsfEditor(ом) startpos.esf, перейдем к региону Саксония и запомним Id области, далее перейдем к фракции Саксония и увидим что Id региона совпадает с Id столицы фракции .
Г) У Саксонии есть армия и два агента (дворянин и шпион) все они размещены в столице. Необходимо их переместить в регион Финляндия. Для этого не обходимо изменить координаты местоположения армии и командира. Аналогичные действия необходимо проделать для дворянина и шпиона. Все необходимые координаты лежат в startpos.esf.
Путь к координатам : CAMPAIGN_ENV/CAMPAIN_MODEL/WORLD/FACTION_ARRAY/***FACTION/CAHARCTER_ARRAY/CHARACTER/LOCOMOTABLE парные координаты прописаны в первых четырех строках вкладки LOCOMOTABLE - это для командующего армией и для агентов.
Аналогичные координаты для армии прописаны в другой части startpos.esf
Вот путь : CAMPAIGN_ENV/CAMPAIN_MODEL/CAI_INTERFACE/CAI_WORLD/CAI_WORLD_RESOURCE_MOBILES/CAI_SITUATED - где в первых двух строках координаты местоположения армии, а в третьей Id региона Саксония, только это немного другой вариант Id - CAI_REGION Id. Таким образом для перемещения армии нам необходимо прописать новые координаты и новый CAI_REGION Id (Финляндии)
Для того чтобы армию разместить в городе надо внести ряд изменений во вкладки WORLD и CAI_WORLD, но это проделывать не будем, что бы не усложнять пример. Агенты как и армии прописаны в CAI_WORLD_RESOURCE_MOBILES
Таким образом что бы переместить армию и агентов мне необходимо три пары новых координат на территории Финляндии, для того что бы внести изменения в startpos.esf . Вот как их я получу:
1. Запускаем игру используя гибридный startpos.esf за Саксонию и выводим армию и агентов из города. Далее сохраняем игру под названием "Гибрид", но не выходим из игры, а переходим к региону Финляндия и нанимаем три юнита. Завершаем ход. Когда юниты наймутся в Або то выводим их из города в три разные точки. Сохраняем игру под название "Сетка" и выходим из игры. Первый сейв под названием "Гибрид" необходим для создания нового гибридного startpos.esf, а сохранение "Сетка" для того чтобы снять необходимые три пары координат.
Примечание: Если бы не было агентов, то мы просто расформировали армию и не выполняли действия 2 и 3, но так как нет способа избавится от агентов придеться выполнить действия этих пунктов.
2. Для начало необходимо найти три CAI_ARMY Id's (CAI_WORLD_RESOURCE_MOBILES точнее один для армии. А два других для агента). Это необходимо для облегчения поиска Переходим по пути : WORLD/FACTION_ARRAY/FACTION/CAHARCTER_ARRAY/CHARACTER- тут мы ищем требуемые нам три Id's -в первой строке прописаны. Далее переходим к
CAI_WORLD/ CAI_WORLD_REGIONS что бы найти подпункты отвечающие за Саксонию и Финляндию. Единственный способ облегчения могу предложить следующий найти заранее требуемые Id's, в EsfEditor откроем regions.esf и перейдем по пути - root/region_data/region и найдем требуемые регионы тут запомните их порядковые номера. Заходим в CAI_WORLD/ CAI_WORLD_REGIONS и производим отсчет пунктов CAI_WORLD_REGIONS - то есть нумерация вкладок совпадает с нумерацией вкладок region в regions.esf, теперь запомним Id's наших регионов в CAI_WORLD_REGIONS/CAI_REGION.
Для Финляндии необходим только Id, а вот для Саксонии несколько больше информации надо запомнить(записать на лист). В пункте CAI_WORLD_REGIONS/CAI_REGION для Саксонии в третьей строке запомним Id столицы- CAI_SETTLEMENT Id. Это не обходимо для того чтоб найти столицу Саксонии , точнее подпункт CAI_SETTLEMENT который отвечает за нее в вкладке CAI_WORLD_ SETTLEMENTS, когда найдем переходим в подпункт CAI_WORLD_ SETTLEMENTS/CAI_GARISSONABLE. Тут в первой строке прописан очередной необходимый Id- CAI_ARMY Id!
Это немного приближает нас к завершению перемещения армии, но копание в Id's еще не закончено. Используя этот Id находим нашу армию в CAI_WORLD_RESOURCE_MOBILES, точнее подпункт который за нее отвечает. Когда находим переходим по пути CAI_WORLD_RESOURCE_MOBILES/ CAI_RESOURCE_MOBILE тут в первой строке прописан CAI_CHARACTER Id нашего командира армии. Хотя два соседних подпункта отвечают у нас за агентов, для их поиска нет такой системы как для поиска армии(тут буржуй наврал с три короба подпункты отвечающие за агентов тут находятся если мне память не изменяет через CAI_ FACTION Id и Id агентов из FACTION/CAHARCTER_ARRAY/CHARACTER )
Переходим далее к CAI_WORLD_ CHARACTERS/CAI_ CHARACTERS и находим тут подпункт который отвечает за командира. Теперь вернемся немного назад перейдя по пути WORLD/FACTION_ARRAY/FACTION/CAHARCTER_ARRAY/CHARACTER(тут в четвертой строке будет прописан аналогичный 9-ти значный Id) По такому совпадению находим подпункты отвечающие за двух агентов. В CAI_WORLD_ CHARACTERS/CAI_ CHARACTERS в первой строке CAI_ARMY , то есть таким же способом определяем подпункты отвечающие за агентов.
3. Теперь откроем в EsfEditor сохранение "Сетка". Это нам необходимо для того что бы списать требуемые нам три пары новых координат. Переходим по пути WORLD/FACTION_ARRAY/FACTION(saxony)/CAHARCTER_ARRAY/CHARACTER и находим тут три подпункта которые у нас отвечают за три ранее нанятых нами полка юнитов, которых мы вывели из города. В каждом из трех подпунктов CAHARCTER_ARRAY/CHARACTER/LOCOMOTABLE мы списываем по паре требуемых координат.
4. Используя startpos.esf и сохранение "Гибрид" создаем новый гибрид startpos.esf. Открываем его EsfEditor и находим Саксонию перейдя по пути : WORLD/FACTION_ARRAY/FACTION/CAHARCTER_ARRAY/CHARACTER и вводим ранее полученные нам координаты в первые четыре строкиLOCOMOTABLE для трех требуемых CHARACTER. Переходим к CAI_WORLD_RESOURCE_MOBILES и в каждой вкладке CAI_RESOURCE_MOBILE для трех персон, используя ранее нами найденные Id в подпунктах CAI_SITUATED, вводим опять те же пары координат. что переписывали ранее, в первую и вторую строку, а в третей строке прописан Id CAI_REGION Финляндия.
Д) Запускаем игру за Саксонию, если все сделано правильно и не допущено ни каких ошибок, то фракции Саксонии принадлежит две области- Саксония и Финляндия, а армия и два агента переместились на территорию провинции Финляндия. Буржуй опустил описание переделки Финляндию в провинцию в которой находится столица. Но это действие тоже необходимо выполнить. Так как нам не обходимо передать Саксонию Пруссии. После передачи, сохраняем и выходим из игры. Делаем очередной гибрид. После этого в гибридный startpos.esf необходимо внести еще ряд изменений.
Переходим по пути CAMPAIGN_PREOPEN_MAP_INFO/REGION_OWNERSHIP_BY_THEATRE и перепишем тут владельцев областей. Финляндию передаем от Швеции Саксонии, а Пруссии передадим провинцию Саксония. Теперь перейдем в следующем направлении WORLD/FACTION_ARRAY/FACTION (saxony)/FACTION_FLAG_AND_COLOURS и тут нам необходимо изменить цвета - R,G,B, что бы на карте стратегической и карте тактической, а так же в меню у нас был не флаг Саксонии, а флаг Финляндии. Для получения требуемых цветов- точнее цифр отвечающих за определенные цвета откроем программу paint.net - есть она у всех и выбираем цвета которые нас устраивают, перепишем их числовые значения. Я выбрал светло-голубой (86, 173, 255). Эти числа нам пригодятся в дальнейшем при создании mod.pack/db/faction_tables.



1.2. Создание mod pack file
Для начала создаем обычную папку и обзываем как вам нравится, я назвал ее my mod. Запускаем программу PFM и открываем в ней patch.pack (не забываем убрать галочку в меню Файл), далее для начала жмем на extract db/factions_table, далее открываем таблицу эту же пунктик и жмем на export - чтобы получить таблицу с расширением TSV, при выполнение данные операций - по извлечению и экспортируем указываем на ранее созданную папку, еще раз повторюсь в моем случае это папка- my mod. Аналогичным образом поступаем со следущими пунктиками дериктории db:
* units_to_exclusive_faction_permissions_tables
* warscape_rigid_lod_tables
*warscape_rigid_tables
Теперь нам необходимо открыть следующий фаил с расширением .pack - models.pack. Из нее извлекаем (extract) следующие пункты:
* rigidmodels/ campaignbuildings/campaignagenticons
* flags/textures and naval/textures
Следующий файл который нам не обходим - это ui.pack, извлекаем flags/saxony (в нашем случае это фракция которую перерабатываем по нашему усмотрению)
А) Открываем таблицу factions.TSV используя блокнот (но к примеру у меня после установки хрюши БлекЭдишен блокнот начал капризничать, то есть открывать эти таблицы не построчно, а виде сплошной каши, в этом случае используем текстовый редактор WordPad) и выбираем строку в которой прописана фракция Саксония. В первую очередь нас интересуют две ячейки(в блокноте у нас таблица открывается строкой , название столбцов в самом верху таблицы, для лучшего ориентирования откроем эту же таблицу в PFM тут все более наглядно выглядит- то есть используем ее как маленькую подсказку) в именно где прописано название фракции и цифроваяые группы (Faction Id и Id2) внесем исправления - изменив фракцию.
В) Category вносим изменения взяв их у фракции с подобной культурой. В качестве источника информации можно использовать фракцию Шведов. В Type, Nation, Nationality вносим соответствующие изменения. Не все ячейки своим содержимым влияют на игру каким-нибудь образом, в некоторых содержится справочная информация. В Names вводим name_group для Вашей новой фракции. Но это если у вашей фракции есть уже название, к примеру если бы мы запускали какую-либо из появляющихся фракций в игре - такую как Неаполь, но в нашем случае это невозможно, так как Финляндия изночально в игре не прописана, поэтому нам необходимо внести еще изменения в localisation.loc.
Так или иначе нам надо ввести название группы для Финляндии. Поэтому нам надо добавить новую группу в таблице names_group. Но в большинстве своем мы найдем подходящую группу из уже прописанных в игре, точнее - подберем . Изменим также значение Sounds на соответствующие, Icons для юнитов, в ячейках R1, G1, B1, ..., пропишем те значения которые прописывали для Финляндии в гибридном startpos.esf. В Group опредилимся с юнитами, которые будет иметь новая фракция. Names 1 пропишем как names_english (прописываем свою фракцию по аналогии с другими), содержание Names 2 аналогично Names . После того как вы внесли все изменения, необходимо удалить все строчки, которые отвечают за другие фракции, кроме той которую редактировали. После этого сохраним изменение в данной таблице (точнее то что от нее осталось) и закроем ее.
Б) units_to_exclusive_faction_permissions.TSV. Для Финляндии будем использовать юнитов sweden_denmark_group. Но в Шведской армии есть юниты, которые доступны только Швеции. Которые станут доступны и Финляндии. В Unit Id ref выбираем только определенные шведские юниты (например euro_dragoons_sweden, euro_heavy_cavalry_sweden, и т.д.) и шведский юнит hakkapeliitat, все остальное удаляем. Используя saxony/true получаем эти юниты доступными для Саксонии. Для hakkapelitat делаем строку sweden/false, так только у Финляндии(Саксония) будет доступен этот юнит. Сохраняем изменения в таблице и закрываем ее.
В) warscape_rigid_lod_tables.TSV . Открываем таблицу, лучше всего выстроить содержимое в алфавитном порядке, удаляем все строки за исключением строчки которая принадлежит нашей старой фракции. RigidModels/CampaignBuildings/CampaignAgentIcons/agent_ID_saxony.rigid_model. Сохраняем изменение и выходим из таблицы.
Г) warscape_rigid_tables.TSV. Повторите то же самое только оставляем, в моем случае agent_ID_saxony.
Д) Для создания флага есть несколько способов. Первый создание нового, а второй изменение старого, я буду использовать второй способ. В папке mymod открываем ui/flags и удаляем все файлы кроме файлов старой фракции, в нашем случае Саксонии. Тут выложены все флаги используемые фракцией в игре . Необходимо создать новый tga's. Для внесения требуемых изменений используем программу gimp.
Все флаги(одиннадцать штук) могут быть одинаковыми, но иметь разные названия. Это сделано для сены флагов в меню выбора фракции, и в процессе выполнения хода ИИ. Нет смысла выполнять повторно одни и те же действия если можно использовать один и тот же флаг 200 X 100 tga. На карте компании, и для карт битв эти флаги будут использоваться полосой прокрутки. Единственная сложность- это флаги для портретов и для описания фракции. Так что для начала создайте large.tga 512X256 на основе образца, а потом уж займитесь остальными.
Е) В rigidmodels/ campaignbuildings/campaignagenticons удаляем все кроме модели агента старой фракции, в нашем случае это agent_id_saxony.rigid_model. В папке текстуры содержится только dds агента, в нашем случае это agent_id_saxony_diffuse.dds. Запускаем программу gimp и изменитес цвета флага (создаем круглую эмблему с одного из Ваших флагов, которые Вы уже сделали).
Это для флага сверху агента на карте кампании. В flags/textures оставляем только flags.tai, flags0.dds, 1,2,3, naval_id.tai и naval_id0.dds. Находим flagsX.dds - флаг старой фракции. Теперь копируем latge.tga (512X256) который вы сделали. В naval_id0.dds и заменяем тут круглую эмблему-флаг над судами. В naval/textures оставляем dds фракции, в нашем случае ensign_saxony_diffuse.dds. Заменим содержимое также используя large.tga и переделываем флаги.
Ж) Теперь у нас есть все, чтобы сделать mod.pack. Запускаем PFM и в меню файла выбираем new pack файл чтобы добавить содержимое папку mymod. Перед закрытием необходимо зайти в Pack Action/Change pack type и поставить галочку на против mod. Теперь сохраняем под любым понравившимся нам именем , но вы должны сохранить mymod , но из программы не выходим. Жмем на наш Файл pack пи в открывшемся меню выбираем add directory. Добавляем все папки которые есть в mymod. Сохраняем. Открываем директорию db и переходим к db/factions table, жмем на import TSV и выбираем factions.TSV. Повторяем это со всеми таблицами в db. Сохраняем. Открываем снова db и переименовываем все таблицы. Например в my_factions таблицу factions и т.д. Делаем это для всех, но только для директории db.

1.3. Создание localisation.loc
Открываем patch_en.pack в PFM и извлекаем (extract) localisation_loc в папку mymod , а также экспортируем (export) в формате таблицы TSV. Закрываем PFM и открываем localisation.TSV. Выбираем вариант отсортировать в алфавитном порядке. Находим factions_screen_adjective_xxxxxx и factions_screen_name_xxxxxx в колонке B вписываем название нашей новой фракции. Сохраняем и закрываем таблицу.
Открываем PFM и в меню файла выбираем new pack, в Pack Action/Change pack type ставим галочку напротив movie. Сохраняем как сохранили ранее, но в папке mymod. Затем выбираем add directory text и добавляем (import) localisation.TSV в text/localisation_loc. Теперь мы увидим название нашей новой фракции в игре. Теперь скопируем два наших файла pack в папку ETW/data. Запускаем программку Mod Manager и добавляем в меню наш новый мод. В игре мы получим нашу новую фракцию под своим именем, со своим флагом, а все юниты будут в заданной цветовой гамме.
Другие действия.
Есть еще ряд изменений которые необходимо выполнить в ряде случаев. Если ваша новая фракция будет входить в другую группу нежели чем старая, то агенты будут иметь имена старой фракции, точнее группы. Для того что бы это исправить необходимо отредактировать startpos, изменить все имена в FAMILY и CHARACTERS и прописать новые имена в localisation.loc. Другой проблемой может быть несоответствие в религии между старой и новой фракцией. Необходимо исправить религию в вкладке FACTION. В подпункте FAMILY и в REGION/POPULATION. Так же возможно необходимо внести изменения в типе правительства, дипломатических отношений, и т.д. Большинство этих изменений необходимо внести в startpos в пункте FACTION. В моем моде Sturm und Drang вы можете увидеть все это. В нем я добавил три новых фракции, а так же внес изменения в итальянские фракции.

 

2. Меняем владельца региона

Сначала сделайте резервную копию вашего startpos.esf в data/campaigns/main/ folder.
Затем закачайте эту программу Редактор ESF-файлов и откройте startpos.esf.
Первая секция, которую мы будем редактировать, называется CAMPAIGN_PREOPEN_MAP_INFO и имя, предложенное здесь, игра будет выдавать на экране гранд кампании.
Сначала мы будем редактировать CAMPAIGN_PLAYERS_SETUP. Найдите появляющуюся фракцию, которой вы хотите играть.
Под секцией CAMPAIGN_PLAYER_SETUP вы увидите имя фракции и три логических выражения (логические в смысле да/нет). Поставив второе логическое выражение на True, вы сможете выбрать эту фракцию в меню.
Затем найдите свою фракцию в FACTION_INFOS и настройте последнее значение на 1 или, если вы планируете передать вашей фракции несколько регионов, просто введите это количество. Этот шаг возможно не обязателен, так как я заметил, что фракция, у которой я отнял территории, автоматически обновляется на стартовом экране.
Следом пойдем в REGION_OWNERSHIPS_BY_THEATRE. Каждая подсекция ? для своего театра действий: Индия, Америка, Европа. Выберите театр для вашего региона, затем определите место, где будет находиться регион, и поменяйте имя фракции на название появляющейся фракции, которой вы хотите играть.
Пойдем в секцию CAMPAIGN_ENV. Она определяет территории государств в начале первого хода.
Под CAMPAIGN_PLAYERS_SETUP вы должны сделать то же, что и в предыдущий раз ? поставить второе логическое выражение на True.
Теперь мы пройдем в CAMPAIGN_MODEL/WORLD.
Под этой секцией вы увидите FACTION_ARRAY и REGION_MANAGER. Это две последних штуки, которые мы будем редактировать.
Сначала пойдем в FACTION_ARRAY и найдем фракцию, которую вы хотите сделать появляющейся или фракцию, которой вы хотите передать регион.
Когда вы найдете его, вы увидите много настраиваемых данных для фракции в меню FACTION. Вот пояснения некоторых из них:
1. faction_id - int
2. faction_db_name - uft16
3. faction_display_name - utf16
4. unknown - Логическое значение
5. unknown - Логическое значение
6. Is Major Faction? - Логическое значение
7. unknown ? Бинарное значение
8. Official Religion - utf16
9. unknown ? Логическое значение
10. capitol_region_id - Int
11. capitol_region_id - Int
12. unknown - Логическое значение
13. Is Emergent? - Логическое значение
14. unknown -Uint
15. unknown ? Бинарное значение
16. unknown - int
17. unknown - int
18. Main AI mode - utf16 (FULL or MAINTAINANCE)
19. AI Personality - utf16
20. protector faction_id - int
Чтобы сделать появляющиеся фракции играбельными вам надо поставить Is Emergent на False.
Поэтому я советую написать Faction ID# для вашей фракции.
Затем мы пойдем в REGION_MANAGER, где вам понадобится найти место для вашего региона; это займет некоторое время, так как там 205 регионов.
В секции REGION вы увидите большой набор данных для каждого региона; здесь объяснение их назначения:
1. region_db_name - utf16
2. region_id - int
3. (skip past 13 unknowns)
4. owner faction_id - uint
5. owner theater_id - uint
6. theater_name - utf16
7. main_rebels - uft16 (Может принадлежать любой фракции или ребелам)
8. base rebels type - utf16 (Может принадлежать только ребелам)
9. coastal climate? - utf16
В первую очередь мы возьмем faction_id из нашей фракции и поставим это значение в owner faction_id.
Если мы используем появляющуюся фракцию, нам также нужно вернуться назад в секцию нашей фракции и изменить capitol_region_ids для того, чтобы указать на этот регион.
Затем мы должны редактировать части REGION_SLOT_MANAGER и SETTLEMENT.
Редактируйте столько значений, сколько сможете в REGION_SLOT_MANAGER; если вы дойдете до секции BUILDING, в ней находятся указания, кому принадлежат строения, а также gov_type. Вы должны редактировать каждое строение, чтобы иметь собственные названия для фракции и правительственный тип.
Кроме того, для каждого REGION_SLOT вам надо редактировать SEIGABLE_GARRISON_RESIDENCE/ GARRISON_RESIDENCE.
Сделайте то же самое под SETTLEMENT для SEIGABLE_GARRISON_RESIDENCE/GARRISON_RESIDENCE.
Если вы все сделали правильно, этот регион теперь должен принадлежать фракции, которую вы выбрали.
Если вы разблокировали появляющуюся фракцию, пожалуйста, возьмите на заметку, что вы можете играть только появляющейся фракцией, потому что остальные фракции крашатся на загрузке.
Как расформировать вражескую армию из поселения, которое больше не принадлежит им.
Теперь мы рассмотрим, как выгнать эти надоедливые армии из поселения. Я обнаружил, что через некоторое количество ходов армия в конечном итоге расформировывается. Когда вы загружаете игру с фиксом вашего региона, вы можете увидеть армию, сидящую в центре поселения, но не принадлежащую ему. Я думаю, что со временем АИ понимает, что юнит заблокирован, и уничтожает его.
Чтобы выполнить этот шаг, мы будем просматривать пункт ARMY под FACTION в FACTION_ARRAY начального хозяина региона.
Как вы видите, в первом пункте нам нужно найти армию, которую мы хотим редактировать. Чтобы сделать это, нам надо вернуться к региону, который мы передали другой фракции.
В списке SETTLEMENT/SIEGEABLE_GARRISON_RESIDENCE нашего региона мы увидим такие данные:
1. settlement_id - int
2. 8 unknowns
3. some ai ID - int
4. some ai ID - int
5. garrisoned_army_id - int
Здесь вы можете увидеть, что мы запишем наш settlement_id и изменим garrisoned_army_id на 0; теперь поселение не содержит гарнизона.
Затем мы возьмем наше settlement_id и найдем ARMY в ARMY_ARRAY старого хозяина региона.
В секции ARMY есть несколько настраиваемых данных, которые объясняются так:
1. unknown - Бинарное значение
2. unknown - Бинарное значение
3. army_id - int
4. settlement_id - int (Для поселения, в котором они базируются; 0 если нет поселения)
5. unknown - Логическое значение
6. unknown - int
Так как мы изменили settlement_id на 0, армия больше не будет находиться в поселении. Если все пройдет хорошо, вы обнаружите армию правее от поселения и после того, как вы сохраните игру, проверится законность нахождения этих войск и эта плохая армия будет отослана в ближайший регион.
Также если вы хотите получить всех правительственных людей, когда играете появляющейся фракцией, вам надо захватить регион и игра немедленно сгенерирует Лидера Фракции и министров.

3. Передаем армии.

Прежде чем передавать армию от одного владельца к другому, необходимо просчитать армию нового хозяина. Это необходимо по одной простой причине полки имеют свою определенную нумерацию.
Подразделения ополчения имеют свою нумерацию,у нас прописано unit_regiment_names_localisation_lookup_unit_name_euro_infantry_units_218, не надо понимать буквально что полк имеет номер 218, это просто его обозначение в игре
Конные полки и конное ополчения имеют свою нумерацию(общая),unit_regiment_names_localisation_lookup_unit_name_euro_cavalry_units_002-в данном случае у нас будет второй конный полк
Легкая пехота имеет свою нумерацию,unit_regiment_names_localisation_lookup_unit_name_euro_light_foot_001-тут аналогично первый полк легкой пехоты
линейная пехота свою нумерацию(прошу учесть такую маленькую деталь, что линейной пехотой в игре являются не только юниты с названием линейная пехота, но и ряд других юнитов, как пример казаки у России являются юнитами линейной пехоты),unit_regiment_names_localisation_lookup_unit_name_euro_infantry_units_001-тут первый полк линейной пехоты
полки пикинеров и батареи полупушек нумерации не имеют.unit_regiment_names_localisation_lookup_unit_name_euro_artillery_units_fixed_001-артиллерия
unit_regiment_names_localisation_lookup_unit_name_euro_infantry_units_161-пикинеры
В данном случае fixed_001 и units_161 ни какого отношения к номерам полков не имеют. Это обозначение в игре

Для каждой категории юнитов своя отдельная нумерация. Таким образом необходимо сосчитать число подразделений по категориям, что бы при прописке новой армии, новым полкам присвоить правильные номера, а у государства у которого отняли армию необходимо тоже потом исправить номера полков, соответственно уменьшить на то количество какое было передано. Данный способ гораздо проще чем ползать в стартпосте по всем армиям фракции и считать юнитсов, легко можно перепутать милицию(конницу и пехоту) и линпехов с легкой пехотой. Помимо этого необходимо запомнить ФИО General или colonel(admiral или captain ), по одной причине так проще его найти в стартпосте в CHARACTER_ARRAY\ CHARACTER, но об этом чуть позже
После того как сделано описанное выше, запускаем программу EsfEditor и открываем этой прогой файл startpos.esf(путь к нему следующий Empire Total War\data\campaigns\main).Далее в проге переходим по пути \startpos.esf\CAMPAIGN_STARTOPS\ CAMPAIGN_ENV\ CAMPAIGN_MODEL\ WORLD\FACTION_ARRAY\ FACTION_ARRAY\ FACTION То есть в списке FACTION_ARRAY мы ищем ту фракцию у которой армия(флот) отбирается. На скине видно что данный пункт FACTION отвечает за New Spain. Когда будет найдена требуемая фракция , дальнейший переход будет следующий FACTION \ CHARACTER_ARRAY \ CHARACTER_ARRAY\ CHARACTER\CAMPAING_LOCALISATION(обратите внимание что их три, интересуют только первые два пункта, в первом имя, в втором фамилия)То есть перебираем по очереди все вкладки CHARACTER_ARRAY\ CHARACTER\CAMPAING_LOCALISATION пока не найдем требуемого командира. После того как определились . Нам необходимо скопировать этого командира(CHARACTER_ARRAY) через функцию копирование.А затем вставить скопированный пункт CHARACTER_ARRAY той фракции которой передается армия, через функцию паста в пункт FACTION \ CHARACTER_ARRAY(вставленный пункт CHARACTER_ARRAY будет зеленого цвета и будет первым в общем списке характеров)Теперь необходимо вернуться к фракции донору и удалить скопированный ранее нами пункт CHARACTER_ARRAY, через функцию делета(удаляемый пункт станнит красного цвета)После сохранения открываем опять скопированный нами ранее CHARACTER_ARRAY. Теперь необходимо отредактировать командира в рамках той фракции, которой передали. Нам необходимо в пункте CHARACTER_ARRAY\ CHARACTER \ CHARACTER_DETAILS в третьей строке столбца Value изменить название фракции, то есть прописать новую фракциюТеперь вносим изменение в прописку имени командира CHARACTER_ARRAY\ CHARACTER \ CHARACTER_DETAILS \CAMPAIGN_LOCALISATION(в обоих пунктах)
То есть в обоих пунктах CAMPAIGN_LOCALISATION необходимо исправить names_name_names_spanish..... к примеру на names_name_names_ottoman?. меняем имя фракции.Но если передаем к примеру России(да и не только к примеру Австрия тоже отличие есть) то необходимо исправить не страну командира в пункте CHARACTER_ARRAY\ CHARACTER \ CHARACTER_DETAILS \CAMPAIGN_LOCALISATION(в обоих пунктах).
Таким образом в пункте CHARACTER_ARRAY\ CHARACTER \ CHARACTER_DETAILS \CAMPAIGN_LOCALISATION у европейского командира прописано names_name_names_spanish?, то для России необходимо прописать names_name_names_slavonic_general?.. Это копируется с любого характеса в пункте FACTION отвечающего за Россию.НО это еще не все если к примеру мы будем передавать османам армию, то необходимо еще одно действие в пункте в пункте CHARACTER_ARRAY\ CHARACTER \ CHARACTER_DETAILS \CAMPAIGN_LOCALISATION нам необходимо внести следующие изменение сменить строку agent_culture_details_onscreen_name_Generaleuropean на agent_culture_details_onscreen_name_Generalmiddle_east.То есть чтобы не было ошибки лучше открыть у фракции которой передаем еще одного командира в характес, для справочной информации.
Теперь опять сохраняем внесенные изменения.
После сохранения редактируем саму армию, которой командует переданный ранее нами командир. На смене нумерации полков я повторяться не буду, думаю и так все понятно с этим.
Возвращаемся к фракции у которой вырезали командира и переходим к пункту ARMY_ARRAY, он находится чуть ниже CHARACTER_ARRAY.Необходимо найти армию которой командует вырезанный ранее нами командир, тут три варианта, зная какие юнитсы входят в армию можно тупа перебирать все армии и вычислять требуемый состав , тип юнита прописан в пункте ARMY_ARRAY\ ARMY_ARRAY\ ARMY\UNITS_ARRAY\ UNITS_ARRAY\LAND_UNIT\LAND_RECORD_KEYЭтот способ хорош когда армия по составу специфическая, но в игре много армий в составе которых полупушки и пикинеры, тут этот вариант не катит, тут другой способ, через имя командира в списке ARMY_ARRAY\ ARMY_ARRAY\ ARMY\UNITS_ARRAY\ UNITS_ARRAY первый из UNITS_ARRAY командирский отряд, ФИО командира армии прописано в пункте ARMY_ARRAY\ ARMY_ARRAY\ ARMY\UNITS_ARRAY\ UNITS_ARRAY\LAND_UNIT\ UNIT\COMMANDER_DETAILS\ CAMPAING_LOCALISATION(в двух пунктах запись плана names_name_names_polish?.)Но я в принципе предпочитаю третий вариант поиска, а первых два варианта использую как проверочные самого себя. Третий вариант это использование ИД генерала(General ID ). Поэтому вернемся к пункту характерс скопированный ранее нами CHARACTER_ARRAY\ CHARACTER_ARRAY\ CHARACTER, в пункте CHARACTER в первой строке столбца Value прописана девятизначная группа цифр, которая является General ID.Этот ид можно выписать на лист или просто пока не закрывать, возращаемся к фракции донору обратно и переходим по пути ARMY_ARRAY\ ARMY_ARRAY\ ARMY\MILITARY_FORCE, в этом пункте в второй строке столбца Value прописан General ID и начинаем планомерно просматривать каждую армию до совпадения выписанной ранее группой цифр
Таким образом General ID обеспечивает взаимосвязь между командиром и его армией. Теперь когда требуемая армия найдена, поступаем с ней как и ранее поступили с CHARACTER_ARRAY командира, то есть вырезаем у фракции донора и вставляем в ARMY_ARRAY фракции которой передали командира.
НЕ забываем после этой манипуляции у фракции донора удалить армию, которую копировали. Теперь сохраняете произведенные изменения.
Далее необходимо исправить принадлежность к фракции командиров каждого полка армии в пункте ARMY_ARRAY\ ARMY_ARRAY\ ARMY\UNITS_ARRAY\ UNITS_ARRAY\LAND_UNIT\ UNIT\COMMANDER_DETAILS\ CAMPAING_LOCALISATION(в двух пунктах )
Делается это аналогично тем манипуляциям которые проделывались с командующим армии.
После того как переименуем командиров возможно придется еще и сами полки изменять, причина та же что и с характерс командира, то если у России линейная пехота к примеру называется euro_line_infantry_russia, то у османов линейная пехота будет обзываться к примеру east_ethnic_musketmen_isarelys. Таким образом возможен вариант внесения изменений в следующие пункты :
1.ARMY_ARRAY\ ARMY_ARRAY\ ARMY\UNITS_ARRAY\ UNITS_ARRAY\LAND_UNIT\LAND_RECORD_KEY
2.ARMY_ARRAY\ ARMY_ARRAY\ ARMY\UNITS_ARRAY\ UNITS_ARRAY\LAND_UNIT\ UNIT\ UNIT_RECORD_KEY
3.ARMY_ARRAY\ ARMY_ARRAY\ ARMY\UNITS_ARRAY\ UNITS_ARRAY\LAND_UNIT\ UNIT\ CAMPAING_LOCALISATION
Тут проще всего открыть любую армию у фракции которая получает армию в качестве справочника
По исправлению нумерации полков я говорил в самом начале поэтому заострять внимание на это не буду, но это как раз делается сейчас , как у фракции донора, так и у фракции которая получила армию. Теперь сохраняем все изменения.
Теперь необходимо отправится в тьму таракань, а именно в CAI_INTERFACE, путь туда следующий \startpos.esf\CAMPAIGN_STARTOPS\ CAMPAIGN_ENV\ CAMPAIGN_MODEL\ CAI_INTERFACE и далее идем \ CAI_ WORLD\ CAI_ WORLD _ CHARACTER \ в этом пункте лежит список всех характеров в игре виде общего списка CAI_WORLD_CHARACTER
Теперь чтоб не открывать весь список, необходимо сузить количество пунктов CAI_WORLD_CHARACTER в которых будем искать командира армии. Делается это через пункт CAI_ WORLD _ CHARACTER\OWNED_INDIRECT в нем прописан ИД фракции к которой принадлежит характерс, то есть пробегаем через ряд пунктов CAI_WORLD_CHARACTER проверяем OWNED_INDIRECT на искомый ид, когда находим вычисляем рядом лежащие характерсы интересующей нас фракции(а именно фракции донора)
Теперь отвлечемся от нашего командира и посмотрим откуда нам взять этот ИД(СА жуки ничего не могли придумать проще, решили мододелам мозг в хлам раздолбать). Для начала вернемся в самое начало и идем по пути \startpos.esf\CAMPAIGN_STARTOPS\ CAMPAIGN_ENV\ CAMPAIGN_MODEL\ WORLD\FACTION_ARRAY\ FACTION_ARRAY\ FACTION. Спросите почему я сразу это не объяснил, потому что каша в голове бы получилась у начинающих модостроитлей, один раз сделаете своими руками, потом будет все махом получаться, ?тяжело в учении ?легко в бою?. В пункте FACTION в первой строке столбца Value прописан интересующий нас ид фракции, тут он прописан виде девятизначного числа.
Выпишем на лист этот ид и переходим по пути \startpos.esf\CAMPAIGN_STARTOPS\ CAMPAIGN_ENV\ CAMPAIGN_MODEL\ CAI_INTERFACE и далее идем \ CAI_ WORLD\ CAI_ WORLD_ FACTIONS\ тут прописан список из пунктов CAI_ WORLD_ FACTIONS, каждый из которых отвечает за свою фракцию, аналог списка FACTION_ARRAY только отличие по содержанию. Далее переходим к пункту CAI_ WORLD_ FACTIONS тут в первой строке столбца Value прописан четырехзначный ИД фракции
Аналогичный ИД прописан в ниже находящемся пункте OWNED_INDIRECT
Но пока не известно какой именно фракции принадлежит данный пункт CAI_ WORLD_ FACTIONS, что бы определить нашли ли нужную фракцию или нет необходимо открыть пункт CAI_ WORLD_ FACTIONS\ CAI_ FACTIONS. В седьмой строке столбца Value будет прописан девятизначный ид фракции,
проверяем с ранее выписанным если не совпадает то переходим к следующему пункту CAI_WORLD_ FACTIONS и опять проверяем. Если ИД-ы совпали то мы нашли требуемую фракцию.
Теперь когда найден требуемый пункт CAI_WORLD_ FACTIONS выписываем(запоминаем) четырехзначный ИД фракции из пункта OWNED_INDIRECT и возвращаемся к моменту поиска командира армии в CAI_ WORLD _ CHARACTER по описанной выше методе. Когда определен возможный круг нахождения требуемого характера в CAI_WORLD_CHARACTER, необходимо опять вернуться к General ID, он прописан в CAI_WORLD_CHARACTER в пункте CAI_CHARACTER, в четвертой строке столбца Value
Таким образом пробегаем по всему списку CAI_WORLD_CHARACTER для определения требуемого пункта, который отвечает за командира. Когда он найден изменяем значение прописанного в CAI_WORLD _CHARACTER\OWNED_INDIRECT, то есть изменяем ИД фракции донора, на ИД фракции которой передаем.
Как определить ИД фракции которой передана армия повторяться смысла нет это было только что объяснено на примере вычисления аналогичного ИД фракции донора.
Теперь обратим внимание еще на одно число прописанное в CAI_WORLD_CHARACTER\CAI_CHARACTER только теперь на значение прописанное в первой строке столбца Value
Запомним это четырехзначное значение , оно обеспечивает взаимосвязь командира армии еще с одним пунктом CAI_INTERFACE это CAI_WORLD_RESOURSE_MOBILES, тут тоже прописаны командиры(для общего развития помимо этого если мне память не изменяет шпионы и священники тоже тут шкеряться). Переходим по пути \CAI_INTERFACE \CAI_WORLD\CAI_WORLD_RESOURSE_MOBILES \CAI_ WORLD_RESOURSE_MOBILES. Запомниный только что четырехзначное значение прописано в пункте CAI_ WORLD _RESOURSE_MOBILES в первой строке столбца Value
Таким образом пробегаемся по пунктам CAI_WORLD_RESOURSE_MOBILES пока ненаходим требуемое значение. Когда находим открываем пункт CAI_WORLD_RESOURSE_MOBILES и переходим к пункту OWNED_INDIRECT, тут изменяем значение четырехзначный ИД фракции донора на ИД фракции которой передали армию.
Сохраняем внесенные изменения. Усё
Теперь совсем немного для общего развития перейдем тут же к пункту CAI_RESOURSE_MOBILES , интересует нас 10 строка столбца Value, тут девятизначный ИД
Это очередной ИД командира , теперь посмотрим нашего командира в FACTION\CHARACTER_ARRAY\ CHARACTER_ARRAY\CHARACTER этот ИД прописан в третьей строке столбца Value
Теперь вернемся к нашей армии ARMY_ARRAY\ ARMY_ARRAY\ ARMY, в третьей строке столбца Value прописан идентичный ИД
Ну и последнее заглянем ARMY_ARRAY\ARMY_ARRAY\ARMY\MILITARY_FORCE, в третьей строке столбца Value прописан идентичный ИД

4. Создаем новые групы для найма.

1. Открываем патч пак пак менеджером.
2. Находим файл FACTION_TABLES\FACTION.
3. Находим вашу любимую фракцию, у меня это например knights_stjohn, выбираем её и смотрим на группировку там будет venice_group мы меняем на knights_stjohn_group.
4. Далее всё просто открываем ещё один файл очень интересный groupings_military
открыв мы видим все группировки в конце файла дописываем knights_stjohn_group.
5.Создаём новых юнитов и прописываем им принадлежность к фракции knights_stjohn_group, например euro_superior_line_infantry_vieux knights_stjohn_group.

5. Делаем вменяемую камеру.

Делать будем на примере 2 фракций:
(1)Империя Великих Моголов (для нее в игре уже существует описание и озвучка вводного туториала)
(2)Созданная фракция Украина (для нее будем делать свое)
Итак, из инструментов нам нужны PackFileManager, EsfEditor, любой текстовый редактор (блокнот), n-нное количество пива (на любителя)

Работать будем с файлами:
Patch\db\advice_levels_tables\advice_levels
Patch\db\advice_threads_tables\advice_threads
Patch_ru\text\localisation.loc
Main\export_advice.lua
\Steam\SteamApps\common\empire total war\data\campaigns\main\scripting.lua

Приступим:
Сперва желательно определится чего же мы все таки хотим, для Моголов мы решим сделать "полет" камеры подстать описанию, для Украины ограничимся столицей (Киевом). В любом случае нам нужны координаты местности, поэтому, открываем EsfEditor, идем по пути:
File\OpenESF\Путь_к_папке_игры\data\campaign_maps\global_map\regions.esf
в открывшемся файле идем по пути \root\region_data\regions и ищем в списке нужный нам регион

координаты можно найти во вкладке региона settlement_and_slots в виде Ш;Д

итого: для столицы Моголов это (554;191), для Киева (217;359).. координаты немного округлим, ибо пол градуса тут ничего не решают.

1.
1(1) - Открываем PackFileManager`ом наш patch.pack и идем по пути
\db\advice_threads_tables\advice_threads в нем ищем сточку
1010_Campaign_Advice_Mughal_Initial_Turns_Thread (для Моголов он уже существует).

1(2) - делаем копию этой строчки в этом же файле и меняем на
5256_Campaign_Advice_Ukraina_Initial_Turns_Thread (4 цифры в начале должны быть уникальными, поэтому подбираем не занятые).

2.
2(1) - далее идем в \db\advice_levels_tables\advice_levels и находим
151876182 1010_Campaign_Advice_Mughal_Initial_Turns_Thread 1 1
Campaign Factions Initial 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
none 01 00 00 00 00 00 01 00 6E 00 (для Моголов)

2(2) - копируем, изменяем на
2139657653 5256_Campaign_Advice_Ukraina_Initial_Turns_Thread 1 1
Campaign Factions Initial 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
none 01 00 00 00 00 00 01 00 6E 00 (Первую группу цифр тоже подбираем)
Сохраняем.
3.
3(1) - далее открываем PackFileManager`ом \main\export_advice.lua (.lua файлы открываются обычным блокнотом) и ищем блок:
--[[ 1010_Campaign_Advice_Mughal_Initial_Turns_Trigger ]]--

events.FactionTurnStart[#events.FactionTurnStart+1] =
function (context)
if conditions.FactionIsLocal(context) and conditions.TurnNumber(context) == 1 and
conditions.FactionName("mughal", context) then
effect.advance_contextual_advice_thread
("1010_Campaign_Advice_Mughal_Initial_Turns_Thread", 1, context)
return true
end
return false
end

3(2) - копируем его, меняем на:
--[[ 5256_Campaign_Advice_Ukraina_Initial_Turns_Trigger ]]--

events.FactionTurnStart[#events.FactionTurnStart+1] =
function (context)
if conditions.FactionIsLocal(context) and conditions.TurnNumber(context) == 1 and
conditions.FactionName("georgia", context) then
effect.advance_contextual_advice_thread
("5256_Campaign_Advice_Ukraina_Initial_Turns_Thread", 1, context)
return true
end
return false
end
тут надо сделать небольшое отступление, всвязи с тем, что моя Украина создана из Грузии, в строчке conditions.FactionName("georgia", context) необходимо написать именно ее, в этой строчке проверяется за какую фракцию мы играем..
Сохраняем.
4.
4(1) - открываем PackFileManager`ом Patch_ru\text\localisation.loc ищем
advice_levels_advice_item_title_151876182 "текст" True
advice_levels_onscreen_text_151876182 "текст" True

Эти строчки отвечают за текст, появляющийся в окошке "инструктажа" при начале новой игры.
в advice_levels_advice_item_title пишется текст на верхней панели (обычно это "С чего начать?")
в advice_levels_onscreen_text само описание

4(2) - копируем эти строчки, изменяем на:
advice_levels_advice_item_title_2139657653 С чего начать? True
advice_levels_onscreen_text_2139657653 Наше_описание True
(цифры из advice_levels)
Сохраняем.

5.
5 - вот мы и добрались непосредственно до редактирования камеры, открываем блокнотом
\Steam\SteamApps\common\empire total war\data\campaigns\main\scripting.lua находим блок:
--1010a_Campaign_Advice_Maratha_Initial_Turns_Thread
--Maratha camera pans = 111, 112

elseif conditions.AdviceJustDisplayed("1221146494", context) then
scripting.game_interface:set_zoom_limit(1.08, 0.02)
CampaignUI.ScrollCamera(24, {527.000, 122.000, 0.95},
{549.000, 94.000, 0.85},
{543.000, 181.000, 0.95})

camera_pan = 111

копируем, изменяем на:
--1010_Campaign_Advice_Mughal_Initial_Turns_Thread
--Mughal camera pans = 150, 151

elseif conditions.AdviceJustDisplayed("151876182", context) then
scripting.game_interface:set_zoom_limit(1.08, 0.02)
CampaignUI.ScrollCamera(22, {554.000, 191.000, 0.90},
{543.000, 86.000, 0.90},
{564.000, 91.000, 0.90})
camera_pan = 150

Для Украины:
--5256_Campaign_Advice_Ukraina_Initial_Turns_Thread
--Ukraina camera pans = 133

elseif conditions.AdviceJustDisplayed("2139657653", context) then
scripting.game_interface:set_zoom_limit(1.0, 0.5)
CampaignUI.SetCameraTarget (217.000, 359.000)

camera_pan = 133

далее ищем:
--1010a_Campaign_Advice_Maratha_Initial_Turns_Thread

elseif camera_pan == 111 then
CampaignUI.ScrollCamera(22, {587.000, 112.000, 0.95},
{553.000, 134.000, 0.95},
{525.000, 96.000, 0.85},
{547.000, 69.000, 0.85},
{571.000, 53.000, 0.85})
camera_pan = 112

elseif camera_pan == 112 then
CampaignUI.ScrollCamera(7, {-3.000, 368.000, 0.90},
{21.000, 340.000, 0.90})
camera_pan = 113

elseif camera_pan == 113 then
CampaignUI.ScrollCamera(14, {582.000, 37.000, 0.85},
{527.000, 122.000, 0.75})
camera_pan = 114

elseif camera_pan == 114 then
scripting.game_interface:set_zoom_limit(1.0, 0.5)
CampaignUI.SetCameraTarget(527.000, 122.000)
camera_pan = 0

копируем, меняем на:
--1010_Campaign_Advice_Mughal_Initial_Turns_Thread

elseif camera_pan == 150 then
CampaignUI.ScrollCamera(19, {628.000, 158.000, 0.90},
{527.000, 110.000,
0.90},
{580.000, 50.000,
0.90})
camera_pan = 151

elseif camera_pan == 151 then
CampaignUI.ScrollCamera(7, {-3.000, 368.000, 0.90},
{21.000, 340.000, 0.90})
camera_pan = 152

elseif camera_pan == 152 then
CampaignUI.ScrollCamera(14, {582.000, 37.000, 0.90},
{554.000, 191.000, 0.90})
camera_pan = 153
elseif camera_pan == 153 then
scripting.game_interface:set_zoom_limit(1.0, 0.5)
CampaignUI.SetCameraTarget(554.000, 191.000)
camera_pan = 0
Для Украины этот блок не нужен ибо камера статичная
далее находим:
--Maratha
elseif conditions.AdviceJustDisplayed("1221146494", context) then
CampaignUI.StopCamera()
camera_pan = 0
scripting.game_interface:set_zoom_limit(1.0, 0.5)
CampaignUI.SetCameraTarget (527.000, 122.000)
копируем, меняем на:
--Mughal
elseif conditions.AdviceJustDisplayed("151876182", context) then
CampaignUI.StopCamera()
camera_pan = 0
scripting.game_interface:set_zoom_limit(1.0, 0.5)
CampaignUI.SetCameraTarget (554.000, 191.000)
для Украины:
--Ukraina
elseif conditions.AdviceJustDisplayed("2139657653", context) then
CampaignUI.StopCamera()
camera_pan = 0
scripting.game_interface:set_zoom_limit(1.0, 0.5)
CampaignUI.SetCameraTarget (217.000, 359.000)
Сохраняем файл
Начинаем новую игру и видим:
Пояснения: CampaignUI.ScrollCamera(22, {554.000, 191.000, 0.90},
{543.000, 86.000, 0.90})
функция прокрутки карты, число 22 - скорость (чем меньше, тем быстрее), далее идут координаты точек (начальной в первом блоке и конечной во втором), третье значение в блоке это zoom.
CampaignUI.StopCamera() - функция остановки движения камеры
camera pans - номера положений камеры
CampaignUI.SetCameraTarget - указывает камере точку на карте

Добавить комментарий

Ссылки в комментариях не работают. Надоела капча - зарегистрируйся.

Защитный код
Обновить