Для реализации этой логики в Total War: Attila вам понадобится создать скрипт на языке Lua и упаковать его в модификацию (файл .pack) через программу Pack File Manager (PFM) или Rusted Pack File Manager (RPFM).
Ниже представлен готовый код скрипта и пошаговая инструкция по его интеграции.
## Код скрипта (имя_скрипта.lua)
local function OnCharacterArmies(context)
local character = context:character()
-- Проверяем, что родился именно мужчина
if not character:is_male() then
return
end
-- Фильтр для римских фракций (Западная и Восточная Римские империи)
local faction_key = character:faction():name()
if faction_key ~= "att_fact_western_roman_empire" and faction_key ~= "att_fact_eastern_roman_empire" then
return
end
-- Получаем объект отца
local father = character:father()
if father:is_null() then
return
end
-- Извлекаем полное имя отца
local father_full_name = father:get_forename()
-- Разделяем имя отца на составные части (преномен, номен, когномен)
local name_parts = {}
for part in string.gmatch(father_full_name, "%S+") do
table.insert(name_parts, part)
end
-- Для римлян номен обычно идет вторым словом (например, Марк Флавий Авит -> Флавий)
local father_nomen = name_parts[2]
if not father_nomen then
return
end
-- Получаем текущее рандомное имя ребенка
local child_current_name = character:get_forename()
local child_parts = {}
for part in string.gmatch(child_current_name, "%S+") do
table.insert(child_parts, part)
end
-- Берем первое слово ребенка (его личное имя) и добавляем номен отца
local child_prenomen = child_parts[1]
local child_cognomen = child_parts[3] or "" -- если есть третье имя
local new_name = child_prenomen .. " " .. father_nomen
if child_cognomen ~= "" then
new_name = new_name .. " " .. child_cognomen
end
-- Принудительно меняем имя персонажа в игре
script_interface:change_character_custom_name(character, new_name)
end
-- Регистрируем триггер на событие рождения персонажа
script_interface:add_listener(
"RomanDynastyNamesListener",
"CharacterComesOfAge", -- Срабатывает, когда персонаж появляется в семейном древе
true,
function(context) OnCharacterArmies(context) end,
true
)
## Инструкция по установке модификации
1. Скачайте утилиту: Откройте RPFM (Rusted Pack File Manager).
2. Создайте новый пакет: Нажмите File -> New Packfile.
3. Создайте структуру папок:
* Нажмите правой кнопкой мыши по названию пак-файла -> Create -> Folder. Назовите её script.
* Внутри папки script создайте папку campaign.
* Внутри campaign создайте папку с именем нужной кампании (например, main_attila для основной игры).
4. Добавьте файл скрипта:
* Нажмите правой кнопкой мыши по конечной папке -> Create -> File.
* Назовите его mod_roman_names.lua.
* Вставьте код, приведенный выше, в этот файл и сохраните.
5. Пропишите загрузку: Чтобы игра прочитала скрипт, его нужно вызвать в главном файле кампании scripting.lua (обычно через команду require("mod_roman_names") в начале файла) или упаковать как автозагружаемый скрипт.
6. Сохраните мод: Сохраните файл под именем вроде @roman_names.pack в папку Total War Attila/data.
7. Активируйте: Включите модификацию в официальном лаунчере игры.
## Важные нюансы
* Локализация: Скрипт считывает текстовые строки напрямую. Если у вас установлена русская версия игры, он будет искать и склеивать русские слова («Марк», «Флавий»). Если английская — английские.
* Тройные имена: Скрипт корректно отсекает второе слово отца (номен) и подставляет его ребенку, сохраняя структуру «Преномен (ребенка) + Номен (отца) + Когномен (ребенка)».