bitterhowl 20 February 2026, 02:16
А Рим это что за фракция в движке?
Как для Рима выглядит этот скрипт?
Рим по движку - venice, вышеописанный скрипт для Рима на паузе и в файле скриптов пока отсутствует,
Логика по написанию скриптов была следующей: пишу скрипт под конкретную фракцию, где в начале стоит проверка на контроль фракции ИИ и сразу остановка скрипта, далее в счетчиках/переменных используется название фракции, проверяю скрипт если все работает через автозамену меняю название фракции на другую и получаю под нее готовый скрипт, со своими уникальными счетчиками/переменных, и не пересекающийся со скриптами других фракций.
И в случаи если фракция ИИ скрипт просто должен был стопорнуться через terminate_monitor в начале хода игрока, чтоб не нагружать движок, так как есть экземпляры скриптов на 15к а то и 50к строк, которые должны работать только для игрока человека, смысла их держать в буфере нет и лучше их закрывать по крайней мере логика такая была... по сути эти габаритные скрипты еще разделены и функционируют...
Когда основные скрипты по Экономике рабства, торговцах, закулисных интригах закончил, перешел к условиям "Империя" по сути это небольшие скрипты с условиями принятия "законопроектов/указов" которые игрок может принять накопив достаточный политический вес... на данный момент были готовы скрипты для фракций Галлов и Германцев... все работало как часы, пока не решил зайти за Рим и словил фаталл эррор...
bitterhowl 20 February 2026, 02:16
Кроме того, все эти мониторы можно завести под один monitor_event, убрав
if I_IsFactionAIControlled ingaevones
terminate_monitor
end_if
Вчера это и проверил, склеил все скрипты по общим характеристикам монитора и условий, и кампания за Рим загрузилась, без вылетов и ругательств... единственное теперь эти скрипты будут каждый ход Игрока проверяться... В данный момент где уместно добавил доп проверку на список фракций ИИ к примеру:
monitor_event FactionTurnStart FactionIsLocal
and Treasury >= 5000
if I_IsFactionAIControlled france
and I_IsFactionAIControlled milan
and I_IsFactionAIControlled boii
and I_IsFactionAIControlled denmark
and I_IsFactionAIControlled england
and I_IsFactionAIControlled portugal
and I_IsFactionAIControlled hre
and I_IsFactionAIControlled ingaevones
terminate_monitor
end_if
if I_LocalFaction france
...
if I_LocalFaction milan и тд
Но вот для скриптов где используется проверка на наличие у фракции постройки храма, или персональной постройки "ассимиляции" такой подход не сработает...
К примеру есть такой скрипт где я проверяю количество построек Царский указ у Бриттов:
monitor_event SettlementTurnStart SettlementIsLocal
and SettlementBuildingExists >= royal_law_brit
if I_IsFactionAIControlled england
terminate_monitor
end_if
if I_EventCounter hostages_nobility_england = 1
terminate_monitor
end_if
if I_LocalFaction england
inc_event_counter kuningaz_england 1
end_if
end_monitor
так как постройка royal_law_brit доступна только Бриттам, игрок человек играя не за Бриттов, физически не сможет исполнить условия скрипта (разве что захватит город с этой постройкой) и он будет висеть мертвым грузом и дергать проверку каждый ход...
Как вариант в отдельном скрипте проверить является ли фракция игроком человеком если да, то в Риме отстраиваю все постройки через скрипт:
monitor_event PreFactionTurnStart FactionIsLocal
if I_LocalFaction venice
console_command create_building Rome temple_horses_temple
console_command create_building Rome temple_war_temple
console_command create_building Rome temple_belenus_temple
console_command create_building Rome temple_tonitrus_temple
console_command create_building Rome temple_goddes_barb_temple
console_command create_building Rome temple_of_fertility_temple
console_command create_building Rome temple_of_andraste_temple
console_command create_building Rome temple_of_heroes_barb_temple
console_command create_building Rome house_sage
console_command create_building Rome royal_law_arv
console_command create_building Rome royal_law_belg
console_command create_building Rome royal_law_boii
console_command create_building Rome royal_law_galat
console_command create_building Rome royal_law_brit
console_command create_building Rome royal_law_celtiber
console_command create_building Rome temple_sophia_pantheon_suevi
console_command create_building Rome temple_ubertas_pantheon_suevi
console_command create_building Rome temple_tor_pantheon_suevi
console_command create_building Rome kuningaz_suevi
console_command create_building Rome ting_cimbri
terminate_monitor
end_if
end_monitor
после чего в конце файла скриптов (после выполнения всех предыдущих) добавляю еще один монитор по типу:
monitor_event FactionTurnStart FactionIsLocal
if I_LocalFaction venice
destroy_buildings venice temple_of_fertility falce
destroy_buildings venice temple_war falce
destroy_buildings venice temple_belenus falce
destroy_buildings venice temple_tonitrus falce
destroy_buildings venice house_sage falce
destroy_buildings venice hinterland_arv falce
destroy_buildings venice hinterland_belg falce
destroy_buildings venice hinterland_boii falce
destroy_buildings venice hinterland_galat falce
destroy_buildings venice hinterland_brit falce
destroy_buildings venice hinterland_celtiber falce
destroy_buildings venice hinterland_suevi falce
destroy_buildings venice hinterland_cimbri falce
destroy_buildings venice temple_sophia falce
destroy_buildings venice temple_ubertas falce
destroy_buildings venice temple_tor falce
terminate_monitor
end_if
end_monitor
В результате такой манипуляцией получится "схлопнуть" не нужные мониторы, но сие дело муторное конечно...