Голосование

Как вы оцениваете Смуту?












Оформление



Пользователей
  • Всего: 28883
  • Последний: alexff099
Сейчас на форуме
Пользователи: 0
Гостей: 704
Всего: 704

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - uhanich

Страницы: [1]
1
Warband Module Decompiler - преобразовывает текстовые файлы мода в питоновские файлы модульной системы, готовые для редактирования и компиляции.

Авторы: Aeldarian, Janycz
Требуемая версия игры: Warband v1.173 + WSE 4.7.3 или Warband v1.153 + WSE или M&B v1.011/1.010 или WFaS v1.143
Язык интерфейса: английский, русский (как включить русский читать там)
Warband Script Enhancer(WSE): поддерживается
Скачать декомпилятор: Прямая ссылка
Исходный код: GitHub, Bitbucket

Для работы декомпилятора нужен .NET Framenwork v4.7.2

Скриншот:
Описание: Фактически эта программка позволяет получить модульную систему любого мода вне зависимости от того, публиковал ли её автор.

ВАЖНО!!! Данная программа публикуется здесь исключительно для собственного использования, если вам хочется под себя и для себя доработать какой-то мод. Публикация в общественный доступ работ, использующих чужой код, полученный с помощью этой программы, будет расцениваться, как использование чужих ресурсов без согласия авторов, со всеми вытекающими.





Программа и исходники распространяются по лицензии GNU GLPv3 (http://www.gnu.org/copyleft/gpl.html)

Примечание.
Если для создания декомпилируемого мода модификации подвергались не только module_ файлы, но и process_, как например в Custom Commander, то корректная работа не гарантируется.

2
Автор: uhanich
Версия игры: 1.153
создавалось и тестировалось на 1.153, но гипотетически должно работать и на более ранних версиях.


Ниже комплект скриптов для создания в любой презентации аналога прокручиваемой панели с инвентарём из игровых окон натива (торговля, экипировка компаньонов, лутинг и пр.) всего в несколько строк.

Данный кит позволяет создать до десяти полностью интерактивных панели в одной презентации, функционально ничем не отличающихся от нативных (перемещение и замена предметов внутри одной панели и между разными панелями, всплывающие подсказки с информацией о предмете), а также настроить по своему желанию их масштаб, рабочую область и положение

Итак:

module_scripts:
В начало файла, послеfrom ID_animations import *Добавитьfrom header_presentations import *
В конец файла, до последней квадратной скобки  ]Добавить#script_prsnt_troop_inventory
  # INPUT:
  # param1: troop
  # param2: inventory slot size. 900 - default. Number must be a multiple of 20
  # param3: right boundary. Max 1000
  # param4: down boundary. Max 750
  # param5: vertical container size. Max 750 - down boundary
 
  ("prsnt_troop_inventory",
    [
(store_script_param, ":troop_id", 1),
(store_script_param, ":inv_slot_size", 2),
(store_script_param, ":container_pos_x", 3),
(store_script_param, ":container_pos_y", 4),
(store_script_param, ":container_size_y", 5),

(store_div, ":shift", ":inv_slot_size", 20),

(troop_get_inventory_capacity, ":capacity", ":troop_id"),
(val_sub, ":capacity", 10),

(store_mul, ":container_size_x", ":shift", 6),
(val_sub, ":container_pos_x", ":container_size_x"),
(val_sub, ":container_pos_x", 20),

(str_clear, s0),
(create_text_overlay, ":container_overlay", s0, tf_scrollable),
(position_set_x, pos1, ":container_pos_x"),
(position_set_y, pos1, ":container_pos_y"),
(overlay_set_position, ":container_overlay", pos1),
(position_set_x, pos1, ":container_size_x"),
(position_set_y, pos1, ":container_size_y"),
(overlay_set_area_size, ":container_overlay", pos1),

        (assign, ":slot", "$g_number_overlays"),
(troop_set_slot, "trp_temp_array_b", ":slot", ":container_overlay"),
(val_add, ":slot", 10),
(troop_set_slot, "trp_temp_array_b", ":slot", ":inv_slot_size"),
(val_add, ":slot", 10),
(troop_set_slot, "trp_temp_array_b", ":slot", ":troop_id"),
(val_add, ":slot", 10),
(troop_set_slot, "trp_temp_array_b", ":slot", ":capacity"),
(val_add, "$g_number_overlays", 1),

(try_for_range, ":inv_slot", 0, ":capacity"),
(store_add, reg1, ":inv_slot", 10),
(create_mesh_overlay, reg0, "mesh_inv_slot"),
(overlay_set_container_overlay, reg0, ":container_overlay"),
(call_script, "script_prsnt_set_obj_pos_and_size", reg0, ":troop_id", reg1, 0, ":inv_slot_size"),
(try_end),

(try_for_range, ":inv_slot", 0, ":capacity"),
(store_add, ":real_inv_slot", ":inv_slot", 10),
(troop_get_inventory_slot, ":item_id", ":troop_id", ":real_inv_slot"),
(store_add, ":inv_slot_overlay", ":container_overlay", 1),
(val_add, ":inv_slot_overlay", ":inv_slot"),
(try_begin),
(gt, ":item_id", 0),
(create_mesh_overlay_with_item_id, reg0, ":item_id"),
(overlay_set_container_overlay, reg0, ":container_overlay"),
(troop_set_slot, "trp_temp_array_a", ":inv_slot_overlay", reg0),
(call_script, "script_prsnt_set_obj_pos_and_size", reg0, ":troop_id", ":real_inv_slot", 1, ":inv_slot_size"),
(else_try),
(troop_set_slot, "trp_temp_array_a", ":inv_slot_overlay", -1),
(try_end),
(try_end),
     ]),

#script_prsnt_set_obj_pos_and_size
# INPUT:
# param1: overlay
# param2: troop
# param3: inventory slot
# param4: overlay type (0 = inventory slot overlay, 1 = inventory item overlay)
# param5: inventory slot size
  ("prsnt_set_obj_pos_and_size",
    [
(store_script_param, ":overlay", 1),
(store_script_param, ":troop", 2),
(store_script_param, ":inv_slot", 3),
(store_script_param, ":overlay_type", 4),
(store_script_param, ":overlay_size", 5),

(val_sub, ":inv_slot", 10),
(troop_get_inventory_capacity, ":capacity", ":troop"),
(val_sub, ":capacity", 10),
(try_begin),
(eq, ":overlay_type", 1),
(store_mul, ":overlay_new_size", ":overlay_size", 113),
(val_div, ":overlay_new_size", 100),
(else_try),
(assign, ":overlay_new_size", ":overlay_size"),
(try_end),
(store_div, ":shift", ":overlay_size", 20),

(store_add, ":location_in_horizontal", ":inv_slot", 3),
(val_mod, ":location_in_horizontal", 3),

(store_sub, ":location_in_vertical", ":inv_slot", ":capacity"),
(val_sub, ":location_in_vertical", 2),
(val_abs, ":location_in_vertical"),
(val_add, ":location_in_vertical", 3),
(val_div, ":location_in_vertical", 3),
(val_sub, ":location_in_vertical", 2),

(store_mul, ":pos_x", ":location_in_horizontal", ":shift"),
(val_mul, ":pos_x", 2),
(store_mul, ":pos_y", ":location_in_vertical", ":shift"),
(val_mul, ":pos_y", 2),
(try_begin),
(eq, ":overlay_type", 1),
(val_add, ":pos_x", ":shift"),
(val_add, ":pos_y", ":shift"),
(try_end),

(position_set_x, pos1, ":overlay_new_size"),
(position_set_y, pos1, ":overlay_new_size"),
(overlay_set_size, ":overlay", pos1),

(position_set_x, pos1, ":pos_x"),
(position_set_y, pos1, ":pos_y"),
(overlay_set_position, ":overlay", pos1),
(overlay_set_additional_render_height, ":overlay", 0),
     ]),

#script_prsnt_init_variables_and_show_item_details
# INPUT:
# param1: overlay id
# param2: mouse action (0 if mouse enters, 1 if mouse leaves)
  ("prsnt_init_variables_and_show_item_details",
    [
(store_script_param_1, ":object"),
(store_script_param_2, ":enters_leaves"),

(try_begin),
(eq, ":enters_leaves", 0),
(try_begin),
(assign, ":continue", 0),
(try_for_range, ":array_temp_slot", 0, "$g_number_overlays"),
(troop_get_slot, ":container_overlay", "trp_temp_array_b", ":array_temp_slot"),
(eq, ":container_overlay", ":object"),
(assign, "$cur_cont", ":object"), #selected container id
(val_add, ":array_temp_slot", 10),
(troop_get_slot, "$cur_cont_inv_slot_size", "trp_temp_array_b", ":array_temp_slot"), #selected container inventory slot size
(val_add, ":array_temp_slot", 10),
(troop_get_slot, "$cur_cont_troop", "trp_temp_array_b", ":array_temp_slot"), #selected container inventory troop
(val_add, ":array_temp_slot", 10),
(troop_get_slot, "$cur_cont_cap", "trp_temp_array_b", ":array_temp_slot"), #selected container inventory capacity
(assign, ":continue", 1),
(try_end),
(eq, ":continue", 1),
(else_try),
(lt, "$g_moving_overlay", 0),
(store_add, ":end", "$cur_cont", "$cur_cont_cap"),
(val_add, ":end", 1),
(store_add, ":start", "$cur_cont", 1),
(is_between, ":object", ":start", ":end"),
(store_sub, ":inv_slot", ":object", "$cur_cont"),
(val_add, ":inv_slot", 9),
(troop_get_inventory_slot, ":item_id", "$cur_cont_troop", ":inv_slot"),
(try_begin),
(gt, ":item_id", 0),
(troop_get_inventory_slot_modifier, ":modifier", "$cur_cont_troop", ":inv_slot"),
(overlay_get_position, pos1, ":object"),
(position_get_x, ":pos_x", pos1),
(position_get_y, ":pos_y", pos1),
(store_div, ":shift", "$cur_cont_inv_slot_size", 20),
(val_add, ":pos_x", ":shift"),
(val_add, ":pos_y", ":shift"),
(position_set_x, pos1, ":pos_x"),
(position_set_y, pos1, ":pos_y"),
(show_item_details_with_modifier, ":item_id", ":modifier", pos1, 100),
(else_try),
(close_item_details),
(try_end),
(try_end),
(else_try),
(eq, ":object", "$cur_cont"),
(close_item_details),
(try_end),
     ]),

#script_prsnt_relocate_item
# INPUT:
# param1: overlay id
# param2: mouse button (0 left mouse button, 1 right mouse button, 2 middle mouse button)
  ("prsnt_relocate_item",
    [
(store_script_param_1, ":object"),
(store_script_param_2, ":mouse_button"),

(try_begin),
(eq, ":mouse_button", 0),
(try_begin),
(lt, "$g_moving_overlay", 0),
(try_begin),
(neq, ":object", "$cur_cont"),
(store_add, ":end", "$cur_cont", "$cur_cont_cap"),
(val_add, ":end", 1),
(store_add, ":start", "$cur_cont", 1),
(is_between, ":object", ":start", ":end"),
(store_sub, ":inv_slot", ":object", "$cur_cont"),
(val_add, ":inv_slot", 9),
(troop_get_inventory_slot, ":item_id", "$cur_cont_troop", ":inv_slot"),
(try_begin),
(gt, ":item_id", 0),
(close_item_details),
(assign, "$g_moving_item", ":item_id"),
(troop_get_inventory_slot_modifier, "$g_moving_modifier", "$cur_cont_troop", ":inv_slot"),
(troop_set_inventory_slot, "$cur_cont_troop", ":inv_slot", -1),
(troop_get_slot, "$g_moving_overlay", "trp_temp_array_a", ":object"),

(store_mul, ":moving_overlay_size", "$cur_cont_inv_slot_size", 226),
(val_div, ":moving_overlay_size", 100),

(overlay_set_container_overlay, "$g_moving_overlay", -1),
(mouse_get_position, pos1),
(overlay_set_position, "$g_moving_overlay", pos1),
(overlay_set_additional_render_height, "$g_moving_overlay", 2),

(position_set_x, pos1, ":moving_overlay_size"),
(position_set_y, pos1, ":moving_overlay_size"),
(overlay_set_size, "$g_moving_overlay", pos1),
(try_end),
(try_end),
(else_try),
(close_item_details),
(try_begin),
(neq, ":object", "$cur_cont"),
(store_add, ":end", "$cur_cont", "$cur_cont_cap"),
(val_add, ":end", 1),
(store_add, ":start", "$cur_cont", 1),
(is_between, ":object", ":start", ":end"),
(store_sub, ":inv_slot", ":object", "$cur_cont"),
(val_add, ":inv_slot", 9),
(troop_get_inventory_slot, ":item_id", "$cur_cont_troop", ":inv_slot"),
(try_begin),
(gt, ":item_id", 0),
(troop_get_inventory_slot_modifier, ":modifier", "$cur_cont_troop", ":inv_slot"),
(troop_set_inventory_slot, "$cur_cont_troop", ":inv_slot", "$g_moving_item"),
(troop_set_inventory_slot_modifier, "$cur_cont_troop", ":inv_slot", "$g_moving_modifier"),

(troop_get_slot, ":replaced_overlay", "trp_temp_array_a", ":object"),
(troop_set_slot, "trp_temp_array_a", ":object", "$g_moving_overlay"),

(assign, "$g_moving_item", ":item_id"),
(assign, "$g_moving_modifier", ":modifier"),

(overlay_set_additional_render_height, "$g_moving_overlay", 0),
(call_script, "script_prsnt_set_obj_pos_and_size", "$g_moving_overlay", "$cur_cont_troop", ":inv_slot", 1, "$cur_cont_inv_slot_size"),
(overlay_set_container_overlay, "$g_moving_overlay", "$cur_cont"),

(assign, "$g_moving_overlay", ":replaced_overlay"),

(overlay_set_container_overlay, "$g_moving_overlay", -1),
(mouse_get_position, pos1),
(overlay_set_position, "$g_moving_overlay", pos1),
(overlay_set_additional_render_height, "$g_moving_overlay", 2),

(store_mul, ":moving_overlay_size", "$cur_cont_inv_slot_size", 226),
(val_div, ":moving_overlay_size", 100),

(position_set_x, pos1, ":moving_overlay_size"),
(position_set_y, pos1, ":moving_overlay_size"),
(overlay_set_size, "$g_moving_overlay", pos1),
(else_try),
(troop_set_inventory_slot, "$cur_cont_troop", ":inv_slot", "$g_moving_item"),
(troop_set_inventory_slot_modifier, "$cur_cont_troop", ":inv_slot", "$g_moving_modifier"),

(troop_set_slot, "trp_temp_array_a", ":object", "$g_moving_overlay"),

(overlay_set_container_overlay, "$g_moving_overlay", "$cur_cont"),
(call_script, "script_prsnt_set_obj_pos_and_size", "$g_moving_overlay", "$cur_cont_troop", ":inv_slot", 1, "$cur_cont_inv_slot_size"),
(overlay_set_additional_render_height, "$g_moving_overlay", 0),

(overlay_get_position, pos1, ":object"),
(position_get_x, ":pos_x", pos1),
(position_get_y, ":pos_y", pos1),
(store_div, ":shift", "$cur_cont_inv_slot_size", 20),
(val_add, ":pos_x", ":shift"),
(val_add, ":pos_y", ":shift"),
(position_set_x, pos1, ":pos_x"),
(position_set_y, pos1, ":pos_y"),
(show_item_details_with_modifier, "$g_moving_item", "$g_moving_modifier", pos1, 100),

(assign, "$g_moving_overlay", -1),
(assign, "$g_moving_item", -1),
(try_end),
(try_end),
(try_end),
(try_end),
     ]),



module_presentations:

В вашей презентации
В блоке последствий тригера ti_on_presentation_load после (set_fixed_point_multiplier, 1000),объявить 2 переменные(assign, "$g_moving_overlay", -1),
(assign, "$g_number_overlays", 0),
После чего вызываете script_prsnt_troop_inventory столько раз, сколько панелей инвентаря вы хотите создать, указав при этом желаемые параметры создаваемой панели(call_script, "script_prsnt_troop_inventory", <параметр1>, <параметр2>, <параметр3>, <параметр4>, <параметр5>),

В блоке последствий тригера ti_on_presentation_run (try_begin),
(gt, "$g_moving_overlay", 0),
(mouse_get_position, pos1),
(overlay_set_position, "$g_moving_overlay", pos1),
(try_end),

В блоке последствий тригера ti_on_presentation_mouse_enter_leave (store_trigger_param_1, ":object"),
(store_trigger_param_2, ":enters_leaves"),
(call_script, "script_prsnt_init_variables_and_show_item_details", ":object", ":enters_leaves"),

В блоке последствий тригера ti_on_presentation_mouse_press (store_trigger_param_1, ":object"),
(store_trigger_param_2, ":mouse_button"),
(call_script, "script_prsnt_relocate_item", ":object", ":mouse_button"),



Пример:

Дополнительно добавив в module_meshes строку("inventory_window", 0, "inventory_window_b", 0, 0, 0, 0, 0, 0, 1, 1, 1),а в module_presentations создав простую презентацию всего из тридцати строк
Мы получаем практически полный аналог окна лутинга, за исключением возможности поменять собственную экипировку, но при необходимости это делается просто.



Как видите, нужно указать всего лишь 5 параметров, остальное сделают за вас скрипты

3

Сервисов позволяющих хранить ваши документы и автоматически синхронизировать их множество. На мой взгляд самым простым, доступным и удобным является сервис Google Диск, хотя особой разницы между ними нет. На примере этого сервиса я и объясню, как это работает.

Установка и настройка:
- Вам понадобится почтовый ящик на gmail.com
- Зайдя в свою почту перейдите по ссылке https://drive.google.com (также Google Диск можно найти в списке "все сервисы")
- Скачайте инсталятор клиентской части
- Запустите её установку и введите адрес своей почти на gmail.com и пароль к нему.
- Зайдите в "расширенные настройки"
- Укажите путь к месту, где вы планируете разместить папку, которую нужно будет синхронизировать
В этом месте программа создаст свою папку.
- Нажмите "синхронизировать" чтобы завершить настройку программы
Теперь все файлы в этой папке будут автоматически размещаться в вашем Google Диск в интернете, и моментально обновляться, при редактировании. Так что разработку можно вести на разных компьютерах с подключением к интернету, не заморачиваясь переносом файлов на носителях, или вручную пересылая их через почту или файлообменники.

Для команд разработчиков очень полезна функция совместного доступа к файлам
Настройка совместного доступа:


Всё. Теперь все участники получили доступ к общему хранилищу файлов, которое будет автоматически синхронизироваться с их локальными папками.
Как настроить права доступа к конкретным папкам для оптимальной работы команды, дело фантазии инициатора, благо все необходимые инструменты для этого имеются.

Можно конечно и не заморачиваться с раздачей прав и добавлением пользователей, а просто создать одну учётную запись и просто дать всем участникам команды пароль от неё, но это уже дело доверия.

Да всё предельно просто и очевидно и я конечно же не открыл Америку, возможно, кто-то уже давно так и поступает, но такой подход позволит сэкономить кучу времени и вообще облегчить процесс разработки. К тому же убережёт ваши нервы при потере данных. Просто решил поделиться опытом, вдруг кому-то пригодится.

Для справки. Google Диск бесплатно предоставляет 5Гб. Для большинства модов этого должно быть вполне достаточно. Если всё же 5Гб мало, никто не мешает создать ещё несколько аккаунтов и распределить по ним папки. Добавлю, что оплата, для платного варианта минимально за 80-90 рублей в месяц вы получаете до 25 гигов для хранения контента.

Повторюсь, Google Диск не единственный подобный сервис, возможно есть и лучше.
Со скоростью проблем не замечал. При моём канале в 50Мбит\с скорость обмена данными с Google Диск ниже 10 Мбит\с не опускалась.

4
СКАЧАТЬ С НАШЕГО САЙТА


Автор: uhanich
Версия игры: Warband 1.153
Версия мода: 1.00
Русификатор: Встроен. Основан на русификаторе от Borod в редакции WebeR. Поскольку мод писался в первую очередь для себя, а я ещё со времён ИГ привык к русику от 1с, то названия населённых пунктов и войск заменены на "русские лицензионные" :)

Скачать: c google 18Мб (там же архив ранних версий и исходник)

Скачать









Если нашли ошибку, просьба сообщать о ней с обязательным копипастом текста ошибки (если она была) из файла rgl_log.txt а также с описанием того, что вы делали до этого, что во время этого, и чего хотели добиться :)


5
Как оказалось далеко не все знают об этой возможности, и после внесения изменений и компиляции модульной системы, для проверки работы этих изменений каждый раз заново запускают игру, на что уходит уйма времени, если сложить количество изменений и их проверок. Особенно если компьютер не самый мощный.

Собственно рецепт:
1. В лаунчере заходим в Кофигурацию\Configure
2. Идем во вкладку Видео\Video и ставим галочку у пункта Запускать в окне\Start Windowed
3. Запускаем игру и сворачиваем её
4. Вносим нужные изменения в модульку и компилируем
5. Переключаемся на запущенный клиент игры, в строке меню находим View и в выпадающем списке выбираем Restore Module Data

Также для переключения между полноэкранным и оконным режимом можно использовать сочетание клавиш alt+enter

Игра чуть чуть призадумается (возможно выдаст пару ошибок, но это ни на что не влияет) и наш модуль будет успешно прогружен в уже запущенный клиент игры.
И так можно делать с однажды запущенной игрой несколько раз в зависимости от объёма оперативной памяти. Опытным путём выяснено, что при каждом Restore Module Data количество оперативки потребляемой mb_warband.exe увеличивается примерно на 10%. Так что периодически всё таки придётся перезапускать игру.
Новую игру начинать необязательно, если вы не вносили изменений требующих запуска новой игры. Достаточно загрузить сейв.
Почему-то упоминания об этом нигде не встречал, что странно, т.к. экономия времени огромная.

Ели у кого-то из бывалых есть дополнения и уточнения, с удовольствием внесу их в этот пост.

6
Не на правах рекламы, а исключительно для того, чтобы все, кто ещё не купил лицензию и не может играть на официальных серверах, всё таки получили такую возможность.

Всем привет.
В некоторых крупных сетях (точно знаю про Белый Ветер и М.Видео), сейчас проходит акция от 1С-Софтклаб. Называется как-то вроде "новая супер цена" или что-то подобное.
По этой акции диски "Великие битвы" и "Эпоха турниров" стоят 50р и 100р соответственно.
Срок окончания акции пока не известен.
Копии игр стоят именно столько, даже если на ценнике другая цена, но уточнить у консультанта всё же не помешает.


В Эльдорадо тоже есть эта акция, и МиБ есть в списках. Правда, в наличии там эти игры редко.

В стиме очередная распродажа игры на выходные (до 23ого):
Mount & Blade за 74 руб.
Warband за 87 руб.
With Fire & Sword за 49 руб.
Или всё вместе за 112 руб.

7
Мини-моды и улучшения / no regular troops MOD
« : 25 Февраля, 2011, 18:11 »
Идея:
Оригинальный варбанд меня устраивал полностью, но потом, не помню с каким патчем (вроде 1,25) разработчики таки довели до ума ветку охотников за головами, которые стали очень даже боеспособны, а то, что они нейтралы, позволяло менять подданство без риска падения морали. И мне стало интересно, продолжатся ли работы в данном направлении, ведь были же совершенно бестолковые ветки крестьян и селянок, да и разбойников всех мастей тоже полно. Но на этом всё и закончилось.
Пошарил в сети, подобного мода (просто новые ветки без глобальной модификации игры) не нашёл, вот и решил сделать сам :)

Всё делалось с помощью "Morgh's Mount & Blade Warband Mod Tools v1.30"
Изменению в основном подвергся "troops.txt", а также немного "item_kinds1.txt"
В процессе подбора экипировки Обнаружилось несколько предметов в игре не встречающихся, которые были добавлены в магазин. (самурайский комплект и т.п.)
За основу были взяты похожие регулярные войска. Характеристики слегка подняты.
Каждая ветка имеет как минимум 4 улучшения, на скриншотах показаны либо только последние, либо несколько последних в порядке возрастания.

На мой взгляд на балансе изменения почти не сказались, грозный вид новых юнитов ощутимых преимуществ в бою не даёт, скорее просто разнообразит.
Тем более, что пополнить свою армию ими весьма проблематично. Вариантов всего 2:
1. Освобождать пленных бандитов из захваченных замках и у побеждённых лордов (а там не всегда густо)
2. Использовать дробящее оружие, чтобы накаутировать злодеев, захватывать их в плен, а потом вербовать, что чревато потерей морали и необходимостью прокачивать бесполезный навык "содержание пленных"
В общем хлопотное это дело.

Мод русифицирован. За основу был взят один из русификаторов с этого сайта (не помню какой именно), и подвергся сильной переработке,  т.к. я привык к локализации от 1С. Все названия населённых пунктов и войск изменены на 1Совские. Кому не по душе такой перевод могут просто скопировать несколько последних строчек из "troops.csv" и вставить их в свой.

Описание новых и модифицированных веток развития:


P.S.  Мод вроде проверил, но всего не углядишь, возможны недочёты

Страницы: [1]
СиЧЪ Total War СиЧЪ Total War
Сайт "Всадники Кальрадии" не является СМИ. Администрация не несет ответственность за высказывания и публикацию каких-либо материалов, сделанные любыми пользователями форума, в том числе посредством личных и публичных сообщений. Материалы, размещенные на ресурсе третьими лицами, могут содержать информацию, не предназначенную для лиц, не достигнувших совершеннолетия. При обнаружении на ресурсе материалов, нарушающих законодательство Российской Федерации, необходимо обращаться к администрации.
Сайт работает на быстром VPS/VDS хостинге от FASTVPS


Powered by SMF 2.0 | SMF © Simple Machines LLC