Нам потребуются: программы Notepad (желательно Notepad++ – прим. переводчика) и справочный файл с портала twcenter – Docudemons 4.0
Создание «свиты»
Шаг 1 – Файлы, которые нужно будет править
export_descr_ancillaries.txt в папке data вашего мода,
export_ancillaries.txt в папке data/text
и картинку для отображения анча в игре в папке data/ui/ancillaries
На всякий случай сохраните исходные файлы в отдельной папке, лучше с пояснением в названии откуда они и с какой даты изменения, если компилируете несколько модов то можно запутаться потом.
Шаг 2 – из чего состоит сам анч
Для примера возьмем типичную схему, из чего состоит анч. Состоит он из двух частей, таким же образом построен сам файл export_descr_ancillaries.txt.
В первой части находятся описания всех анчей, где перечислены свойства и эффекты для каждого из них.
Во второй части находятся триггеры, т.е. часть программного кода, из которой движок Медивела берет условия для присвоения анча персонажу. Триггеры не всегда обязательны для присвоения анчей, анчи можно давать напрямую скриптовой командой. проверяет совпадение сочетания заданных условий для присвоения персонажу анча.
Рассмотрим схему описания анча, т.е. его первую часть.
Ancillary ancillary_name (обязательное поле)
Type ancillary_type
Transferable 0/1
Image ancillary_image.tga (обязательное поле)
Unique
ExcludedAncillaries ancillary_name(s)
ExcludeCultures excluded_culture(s)
Description ancillary_description (обязательное поле)
EffectsDescription ancillary_effects_description (обязательное поле)
Effect Attribute Attribute_points (обязательное поле)
Последовательность полей должна быть именно такой. Необязательные поля писать необязательно, но если они есть, то последовательность полей нужно соблюдать.
Значение строк:
Ancillary
ancillary_name – собственно название анча, по которому движок игры распознает каждый конкретный анч. Название пишется всегда со строчной, т.е.
Biographer будет неправильно (по крайней мере все анчи, что встречались мне в модах пишутся со строчной).
Type
ancillary_type – Тип анча позволяет объединить несколько анчей в группу. Важный параметр, с помощью которого можно писать скрипты и значительно разнообразить ход игры. Ванильные типы такие Academic, Entertain, Sex, Health, Court, Pet, Money, Magic, Religion, Family, Military, Diplomacy, Naval, Politics, Relic. Security (защита) – телохранители, цепной пес, придворный шпион и т.д., Heraldry (геральдика)– во многих модах есть возможность давать генералу поселение в собственность, и для каждого поселения создается отдельный анч с гербом, Military (военный) – военные советники, стратеги, ветераны, вестовые и т.д.
Тип анча, помимо существующих ванильных, может быть задан игроком произвольно, название любое. Насколько известно, ограничения на количество типов анчей в игре нет. Пишется как со строчной, так и с прописной.
Зачем вообще нужно вводить тип анча? Движок игры распознает каждый конкретный анч ( значение строки ancillary_name)у персонажа только в нескольких случаях, при смерти генерала (скриптовое условие GeneralWithAncKilled),может проверить наличие анча у конкретной фракции или в мире в целом (скриптовое условие FactionwideAncillaryExists либо I_WorldwideAncillaryExists)
Во всех остальных случаях игра проверяет только тип анча по строке
ancillary_type (условие HasAncType)
То есть к примеру если речь идет об обычном генерале, которого нет в семейном древе фракции, вы не можете узнать есть ли у него конкретный анч, пока он жив. В некоторых скриптах это бывает нужно, если речь идет о сюжетно важных предметах/личностях (Кольцо Всевластья например и т.д.) Решение простое – задаете анч, присваиваете ему тип, в котором он будет единственным анчем – и вам доступна возможность узнавать у движка сведения об этом конкретном анче. Например:
Ancillary megaring
Type ring (или какое угодно название вообще)
Условие HasAncType можно широко использовать при присвоении трейтов, в сюжетных скриптах и т.д.
Transferable
0 – эта строчка отвечает за возможность передачи анча между персонажами, если стоит 0, то анч нельзя передать, если 1 то можно.
Image
ancillary_image.tga – строка, отвечающая за игровую картинку, отображающую анч. Картинка должна отвечать заданным параметрам (откройте любую существующую картинку анча и смотрите их)
Unique – с этим параметорм анч будет уникальным, появляется в кампании один раз.
ExcludedAncillaries – если хотите, чтобы два анча были противопоставлены друг другу. То есть персонаж, имеющий один анч уже не сможет иметь «противопоставленный». Пример: priestesse и whore. Если в свите есть монашка, то шлюха туда не попадает, если указать этим анчам друг друга в поле ExcludedAncillaries. Нужно обязательно ввести это поле для обоих выбранных анчей (В записи для pristesse в строке ExcludedAncillaries надо прописать whore, и наоборот - у whore в строке ExcludedAncillaries должно быть pristesse).
ExcludeCultures – культуры, которые не могут получить этот анч, если хотите чтобы анч не был доступен фракции с определенной культурой (какой культуре принаждлежит фракция можно узнать в descr_sm_faction)
Description
ancillary_description – текстовое описание анча, полностью на ваше усмотрение.
EffectsDescription
ancillary_effects_desc – текстовое описание эффектов анча.
Effect
Authority 1 – сам эффект и его количественное значение. До 8 эффектов на 1 анч может быть. Эффекты можно посмотреть здесь
Для просмотра ссылки Зарегистрируйтесь)
Шаг 3 – создание нового анча
Откройте export_descr_ancillaries.txt.
Скопируйте любую существующую запись анча в верхнюю часть файла.
Например, мы создаем анч great_chief
;This file is generated from the Spreadsheet VnV,txt
;Please modify the spreadsheet and re-export the data, rather than editing this file directly
;===============================================================
;== ANCILLARY DATA STARTS HERE ==
;===============================================================
;------------------------------------------
Ancillary great_chief
Type Court
Transferable 0
Image great_chief.tga
ExcludeCultures mesoamerican
Description great_chief_desc
EffectsDescription great_chief_effects_desc
Effect Authority 1
Effect BattleSurgery 5
Effect MovementPoints 10
Пояснение по пунктам.
Ancillary greatchief либо great_chief (без символов такого типа «_» операторы недопустимы)
Type Court – любой тип на ваше усмотрение
Transferable 0 передаваемый или нет 0 – нельзя передавать, 1 - можно
Image great_chief.tga – меняете файл на great_chief tga (название полностью должно совпадать с названием анча)
ExcludeCultures mesoamerican – если хотите чтобы анч не был доступен фракции с определенной культурой, то правьте. Если без разницы, то можно убрать это поле вообще.
Description ancillary_desc – меняете на great_chief_desc, соответственно, тоже совпадает с названием анча. Создаете соответствующий пункт в export_ancillaries.txt , текст описания произвольно придумываете сами.
EffectsDescription ancillary_effects_desc см. предыдущий пункт.
Effect Authority 1
Effect BattleSurgery 5
Effect MovementPoints 10 – вписываете эффекты, которые связаны с анчем. Максимально не более 8 на один анч.
Шаг 4 Внедрение анча в игру.
Существует как минимум три способа присвоения персонажу нового члена свиты.
Способ первый, если вы хотите, чтобы анч был у персонажа, изначально существующего у фракции на момент начала игры – требуется прописать персонажу анч в файле descr_strat.txt Как редактировать этот файл читайте в отдельных туторах, в отношении добавления анча там все просто – вписываете персонажу имя анча в поле ancillaries. В примере ниже у Риона Аллириона в анчах титул лорда замка Божий Дар.
character Ryone Allyrion, named character, male, age 38, x 100, y 20
traits GoodCommander 1 , LoyaltyStarter 1 , GoodTrader 1 ,
ancillaries godsgrace
army
unit ME Bodyguard exp 1 armour 0 weapon_lvl 0
Здесь не требуется никакой проверки со стороны движка игры, анч уже присвоен, поэтому никаких триггеров для его присвоения в таком случае писать не надо. Но при отсутствии триггеров после гибели этого персонажа анч в кампании больше не появится.
Способ второй, если нужно присвоить анч персонажу, появляющемуся в ходе кампании, например, в результате скрипта восстания или нашествия. По причине, которая остается загадкой для меня, при прописи появления такого персонажа и спауне его армии, указывать анчи для него нельзя. Трейты можно, а вот анчи нельзя. Но есть специальная консольная команда, которая позволяет делать это. Загвоздка в том, что для присвоения анча с ее помощью требуется знать имя персонажа, или на худой конец его label. То есть такой скрипт не позволит вам дать анч случайному персонажу. Вот пример спауна персонажа в ходе игры и присвоения ему трех анчей.
monitor_event FactionTurnStart FactionType denmark
and I_TurnNumber = 5
spawn_army
faction denmark
character Davos Seaworth, named character, age 48, x 97, y 243
traits LoyaltyStarter 1 , Brave 3 , Loyal 3 , GoodCommander 1 ,
unit NE Bodyguard exp 7 armour 0 weapon_lvl 0
end
console_command give_ancillary "Davos Seaworth" hand_of_king2
console_command give_ancillary "Davos Seaworth" smuggler
console_command give_ancillary "Davos Seaworth" veteran_sailor
end_monitor
Способ третий, и
основной для анчей – с использованием триггеров. Для одного анча может быть от одного тригера и больше. Напоминаю, что анч может не иметь триггеров совсем и быть полностью рабочим, но его появление придется всегда прописывать вручную. Триггер – это точка проверки совпадения заданных условий. Если условия совпали – триггер срабатывает и производит заданный эффект. Применительно к Медивелу надо добавить, что помимо совпадения сочетания условий вы можете задать и вероятность действия триггера. То есть для анчей это значит – при определенных условиях присвоение персонажу анча может быть с шансом от 100% (обязательное во всех случаях) до 1% (1 раз на 100 совпадений нужных условий).
Из чего состоит триггер?
Trigger Trigger_Name
WhenToTest Event_Name
Condition Condition_1
and Condition_2
...
and Condition_8
AcquireAncillary ancillary_name Chance Percentage
Trigger
Trigger_Name – имя вашего триггера, совершенно произвольно задаете, без пробелов, если нужно, используйте_нижнее_почеркивание; названия триггеров не должны повторяться, иначе CTD.
WhenToTest
Event_Name – задаете игровое событие, при котором игра будет тестировать триггер. Список возможных событий для этого поля содержится в справочном файле Docudemons, в разделе Events. Примеры – CharacterTurnEnd (персонаж завершил свой ход), PostBattle (после окончания битвы), FactionTurnStart (начало хода фракции), GeneralCaptureSettlement (генерал захватил поселение) и т.д.
Condition
Condition_1 – условие, при котором срабатывает триггер; триггер может содержать от 1 до 8 условий. Список возможных условий для этого поля содержится в справочном файле Docudemons, в разделе Conditions. Примеры – IsGeneral (персонаж является генералом), EndedInSettlement (персонаж завершил ход в поселении), SettlementHasPlague (в поселении чума), I_IsFactionAIControlled (фракцией управляет компьютер), PercentageBodyguardKilled (количество телохранителей генерала убито в битве), IsSettlementGarrisoned (есть ли в поселении гарнизон). Игра учитывает множество параметров, благодаря чему можно писать очень изощренные триггеры.
AcquireAncillary
ancillary_name Chance Percentage – здесь все понятно, вводите имя анча, который присваивается персонажу при выполнении условий триггера, и вероятность – от 1 до 100, где 100 это присвоение анча во всех случаях совпадения условий, 1 – в 1 случае из 100 совпадений, вероятность игра генерирует случайно.
Примеры триггеров
Trigger biographer_vnv_trigger
WhenToTest CharacterTurnEnd
Condition EndedInSettlement
and RemainingMPPercentage = 100
and TimeInRegion > 3
and Attribute Command >= 5
and IsGeneral
AcquireAncillary biographer chance 5
Объяснение – если на момент окончания своего хода генерал с уровнем атрибута Командование 5 и более находится в поселении, не использовав очков движения (т.е. находился в поселении весь ход), и провел в этом регионе больше 3 ходов, то с вероятностью 5% он получит персонального биографа.
Trigger merchant
WhenToTest CharacterTurnEnd
Condition IsGeneral
and EndedInSettlement
and RemainingMPPercentage = 100
and FactionType moors
and SettlementBuildingExists >= great_market
and not IsFactionHeir
AcquireAncillary merchant chance 5
Объяснение – если на момент окончания своего хода генерал, не являющийся наследником фракции moors, находится в поселении, не использовав очков движения, и в поселении есть строение уровня «great_market» или лучше, то с вероятностью 5% он получит купца.
Trigger valyriansword_father_anc_trigger
WhenToTest FatherDiesNatural
Condition FatherAnc valyriansword
and IsGeneral
and not HasAncType Sword
AcquireAncillary valyriansword chance 90
Объяснение – если отец персонажа умер естественной смертью, и имел при жизни анч «валирийский меч», то его сын-генерал, не имеющий в своей свите анч типа Меч (Type Sword) с вероятностью 90% получит валирийский меч в свиту. UPD от 2019г. - условие FatherAnc нерабочее, для наследования отцовских параметров нужно использовать FatherTrait
Безусловно, невозможно привести здесь примеры всех возможных триггеров, вы можете изучить самостоятельно любой мод на наличие подобных триггеров. На личном опыте могу сказать, что со временем вы быстро научитесь читать условия и начнете получать удовольствие от составления собственных хитроумных условий для присвоения анчей. Потому что в особо злостных случаях триггеры анчей могут пересекаться с различными счетчиками в campain_script.txt и вызывать эффекты в export_descr_buildings.txt ;-)
Шаг 5 Текстовое описание анча.
Откройте файл export_ancillaries.txt в папке data/text вашего мода.
Скопируйте любую строку (к примеру, нижеуказанные):
{zealous_disciple}Zealous Disciple
{zealous_disciple_desc}I will not leave the Prophet's side, nor let anyone harm him
{zealous_disciple_effects_desc}+1 Management, +1 to personal security (improves the chances of detecting and foiling assassination attempts)
Теперь нужно только произвести правильные изменения. Если вы помните, мы брали для примера анч great_chief
{great_chief}Great Chief – символ «_» используется только между скобок
{great_chief_desc}This man is a Great Chief, of his people, and country – вы сможете прочитать описание в игре, когда наведете курсор мыши на иконку, соответствующую анчу
{great_chief_effects_desc} – это описание эффектов, если оператор свиты изменяет показатель атрибуты персонажа (командование, рыцарство, здоровье, очки перемещения и т.д.)
Примечание: export_descr_enums это только статистика, вы не нуждаетесь в таком файле, чтобы добавить свиту в игру.
Автор: Swagger
Перевод: Shadamer адаптация bitterhowl