Сичевые Свитки - Статья - Скрипт на мятежи и восстания в потерянных столицах
Приветствую всех тех,кто занимается моддингом. В этой теме я выложу свой собственный тутор,то как сделать такой скрипт.
Во первых все скрипты находятся в файле в Campaign_script.txt,по этому пути data\world\maps\campaign\imperial_campaign.
Следующий код нужно вставить в этот файл до таких строчек:
... wait_monitors end_script
Сделал споллер(Скрипт на примере Лондона):
Каждая часть скрипта подписана и разжована.
Спойлер (раскрыть)
script ;===============================1)АНГЛИЯ================== declare_counter England_live declare_counter attack_London declare_counter attack_London2 declare_counter attack_FailLondon declare_counter attack_NotFailLondon ;=======Обьявить войну тому у кого город,если будет перемирие с той фракцией,которая захватила Лондон,то атака не произойдет monitor_event FactionTurnEnd FactionIsLocal and I_CompareCounter England_live = 1 if I_SettlementOwner London = venice ;Если Лондон у Венеции console_command diplomatic_stance england venice war ;война между Англией и Венецией end_if if I_SettlementOwner London = sicily;Если Лондон у Венеции console_command diplomatic_stance england sicily war;война между Англией и Сицилией и т.д end_if if I_SettlementOwner London = milan console_command diplomatic_stance england milan war end_if if I_SettlementOwner London = egypt console_command diplomatic_stance england egypt war end_if if I_SettlementOwner London = scotland console_command diplomatic_stance england scotland war end_if if I_SettlementOwner London = mongols console_command diplomatic_stance england mongols war end_if if I_SettlementOwner London = turks console_command diplomatic_stance england turks war end_if if I_SettlementOwner London = france console_command diplomatic_stance england france war end_if if I_SettlementOwner London = hre console_command diplomatic_stance england hre war end_if if I_SettlementOwner London = portugal console_command diplomatic_stance england portugal war end_if if I_SettlementOwner London = poland console_command diplomatic_stance england poland war end_if if I_SettlementOwner London = byzantium console_command diplomatic_stance england byzantium war end_if if I_SettlementOwner London = moors console_command diplomatic_stance england moors war end_if if I_SettlementOwner London = russia console_command diplomatic_stance england russia war end_if if I_SettlementOwner London = spain console_command diplomatic_stance england spain war end_if if I_SettlementOwner London = hungary console_command diplomatic_stance england hungary war end_if if I_SettlementOwner London = aragon console_command diplomatic_stance england aragon war end_if if I_SettlementOwner London = kievan_rus console_command diplomatic_stance england kievan_rus war end_if if I_SettlementOwner London = teutonic_order console_command diplomatic_stance england teutonic_order war end_if if I_SettlementOwner London = norway console_command diplomatic_stance england norway war end_if if I_SettlementOwner London = jerusalem console_command diplomatic_stance england jerusalem war end_if if I_SettlementOwner London = kwarezm console_command diplomatic_stance england kwarezm war end_if if I_SettlementOwner London = vladimir console_command diplomatic_stance england vladimir war end_if if I_SettlementOwner London = papal_states console_command diplomatic_stance england papal_states war end_if end_monitor ;====================Спауним армию======================= monitor_event FactionTurnStart FactionType england ;(Скрипт сработает на переходе хода Англии) and I_IsFactionAIControlled england ;(Если Англией контролит АИ) and not I_SettlementUnderSiege London ;(Лондон не под осадой) and I_CompareCounter England_live = 0 ;(Счетчик = 0) and not I_SettlementOwner London = england; (И самое главное,Англичане потеряли Лондон) and I_NumberOfSettlements england > 0 ;(фракция Англия все еще жива) and RandomPercent > 70 ;(шанс мятежа 30%),можно менять set_counter England_live 1 ;(Ставим счетчик на = 1) add_money england 35000 spawn_army ;(создать армию) faction england character random_name, named character, age 51, x 57, y 117, label england, direction E, family traits Script 1 unit NE Bodyguard exp 1 armour 0 weapon_lvl 0 unit Feudal Knights exp 5 armour 1 weapon_lvl 1 unit Feudal Knights exp 3 armour 1 weapon_lvl 1 unit Feudal Knights exp 5 armour 1 weapon_lvl 1 unit Feudal Knights exp 5 armour 1 weapon_lvl 1 unit Dismounted Feudal Knights exp 6 armour 1 weapon_lvl 1 unit Dismounted Feudal Knights exp 6 armour 1 weapon_lvl 1 unit Feudal Knights exp 5 armour 1 weapon_lvl 1 unit Feudal Knights exp 5 armour 1 weapon_lvl 1 unit Dismounted Feudal Knights exp 6 armour 1 weapon_lvl 1 unit Dismounted Feudal Knights exp 6 armour 1 weapon_lvl 1 unit Dismounted Feudal Knights exp 6 armour 1 weapon_lvl 1 unit Longbowmen exp 6 armour 1 weapon_lvl 0 unit Longbowmen exp 7 armour 1 weapon_lvl 0 unit Longbowmen exp 7 armour 0 weapon_lvl 0 unit Mailed Knights exp 5 armour 0 weapon_lvl 0 unit NE Trebuchet exp 5 armour 0 weapon_lvl 0 unit NE Trebuchet exp 5 armour 0 weapon_lvl 0 unit NE Trebuchet exp 5 armour 0 weapon_lvl 0 unit NE Trebuchet exp 5 armour 0 weapon_lvl 0 sieging spawn_army faction england character random_name, named character, age 25, x 57, y 120, label england1, direction W, family traits Script 1 unit NE Bodyguard exp 1 armour 0 weapon_lvl 0 unit Feudal Knights exp 5 armour 1 weapon_lvl 1 unit Feudal Knights exp 3 armour 1 weapon_lvl 1 unit Dismounted Feudal Knights exp 6 armour 1 weapon_lvl 1 unit Dismounted Feudal Knights exp 6 armour 1 weapon_lvl 1 unit Longbowmen exp 6 armour 1 weapon_lvl 0 unit Longbowmen exp 7 armour 7 weapon_lvl 0 unit Mounted Sergeants exp 3 armour 1 weapon_lvl 1 unit Mounted Sergeants exp 3 armour 1 weapon_lvl 1 unit NE Trebuchet exp 5 armour 0 weapon_lvl 0 unit NE Trebuchet exp 5 armour 0 weapon_lvl 0 unit NE Trebuchet exp 5 armour 0 weapon_lvl 0 unit NE Trebuchet exp 5 armour 0 weapon_lvl 0 sieging ;unit Longbowmen exp 7(Уровень лычки) armour 1(броня) weapon_lvl(оружие) 0.Это юнит из вашего EDU.Export_descr_unit add_settlement_turmoil London 20 ;(Поднять мятеж в Лондоне).Ограничение движка -80 % общественого порядка,так что не обязательно жители города поднимут мятеж,если вы снизите налоги и сохраните фул стэк с городе ;Также важно отметить,что 57, y 117 эти точки появления их на Открытых пустынях Африки.Сразу рядом с Лондоном спаунить опасно,может произойти вылет,если клетка будет занята end_monitor ;=====================Проверка Сушествует ли персонажи?Если их уже нет то еше спауним одного============ monitor_event FactionTurnStart FactionType england and not I_CharacterExists england and not I_CharacterExists england1 set_counter England_live 0(счетчик на = 0) end_monitor ;[size=3]Следующая часть скрипта пойдет куда сложнее,я разобью их на несколько частей[/size] ;======================АТАКУЕМ ЛОНДОН==================================================== ;;;;;;;;;;;;;;;;;;;;; ЧАСТЬ N3, Внимание очень важно,чтобы персонаж стоял под городом,т.к в прошлый раз он взял город в осаду.Произойти может все что угодно(игрок сделает вылазку и убьет стэк,и стэк там уже не стоит или отдаст город дипломатом и т.д) ;;;;;;;;;;;;;;;;;;;;;; monitor_event FactionTurnEnd FactionIsLocal and I_IsFactionAIControlled england and I_CompareCounter attack_NotFailLondon > 0 and I_CharacterExists england if I_SettlementOwner London = england ;Если город у Англичан,то ставим счетчик = 0 console_command remove_trait england script ;Забирает трейт,который снимает очки передвижения console_command remove_trait england1 script set_counter England_live 0 end_if if I_CharacterTypeNearTile england, named_character, 0, 79,217;(Итак если мы стоим в первой точке,атакуем город) and I_CompareCounter attack_London = 2 and I_SettlementUnderSiege London siege_settlement england, London, attack set_counter attack_London 0 set_counter attack_NotFailLondon 0 terminate_monitor end_if if I_CharacterTypeNearTile england, named_character, 0, 79,218;(Итак если мы стоим в второй точке,атакуем город) and I_CompareCounter attack_FailLondon = 2 and I_SettlementUnderSiege London siege_settlement england, London, attack set_counter attack_FailLondon 0 set_counter attack_NotFailLondon 0 terminate_monitor end_if end_monitor ;=========================ОСАЖДАЕМ ЛОНДОН============================ monitor_event PreFactionTurnStart FactionType england and I_CharacterExists england;(персонаж существует) and I_CharacterExists england1 and not I_SettlementUnderSiege London if I_SettlementOwner London = england console_command remove_trait england script console_command remove_trait england1 script set_counter England_live 0 end_if ;;;;;;;;;;;;;;;;;;;;; ЧАСТЬ N2,Внимание очень важно,чтобы персонаж стоял под городом,иначе команда siege_settlement даст вам вылет ;;;;;;;;;;;;;;;;;;;;;; if not I_CharacterTypeNearTile england, named_character, 0, 79,217;(Если нужный персонаж не стоит под Лондон,то встать туда) and I_CompareCounter attack_London > 0 reposition_character england, 79,217 set_counter attack_FailLondon 1 set_counter attack_London 1 end_if if I_CharacterTypeNearTile england, named_character, 0, 79,217;(Если он встал в эту точку,то берем город в осаду) and I_CompareCounter attack_London = 1 and not I_SettlementOwner London = england console_command remove_trait england script character_flash_stop england siege_settlement england, London, maintain set_counter attack_London 2 end_if if not I_CharacterTypeNearTile england, named_character, 0, 79,217;(Если он не встал в эту точку, встать в соседнюю точку) and I_CompareCounter attack_FailLondon = 1 reposition_character england, 79,218 set_counter attack_FailLondon 1 end_if if I_CharacterTypeNearTile england, named_character, 0, 79,218;(И опять же попытка N2,если он уже второй точке берем город в осаду) and I_CompareCounter attack_FailLondon = 1 and not I_SettlementOwner London = england character_flash_stop england console_command remove_trait england script siege_settlement england, London, maintain set_counter attack_FailLondon 2 end_if ;;;;;;;;;;;;;;;;Часть N2 Для второго стэка Англичан) if not I_CharacterTypeNearTile england, named_character, 0, 81,217 and I_CompareCounter attack_London2 > 0 reposition_character england1, 81,217 set_counter attack_London2 2 end_if if I_CharacterTypeNearTile england, named_character, 0, 81,217 and I_CompareCounter attack_London2 = 2 and not I_SettlementOwner London = england console_command remove_trait england1 script character_flash_stop england1 siege_settlement england1, London, maintain set_counter attack_London2 3 end_if if not I_CharacterTypeNearTile england, named_character, 0, 81,217 and I_CompareCounter attack_London2 > 0 and I_CharacterExists england1 reposition_character england1, 81,218 set_counter attack_London2 2 end_if if I_CharacterTypeNearTile england, named_character, 0, 81,218 and I_CompareCounter attack_London2 = 2 and not I_SettlementOwner London = england character_flash_stop england1 console_command remove_trait england1 script siege_settlement england1, London, maintain end_if ;;;;;;;;;;;;;;;;;;;;; Это идет сразу первой частью;;;;;;;;;;;;;;;;;;;;;; if I_CompareCounter attack_London = 0 ;если Счетчик = 0 reposition_character england, 75,218 ;Телепортируемся из Африки к Лондону historic_event Capital_England ;Историческое событие,как его создать написано здесь if not I_CharacterTypeNearTile england, named_character, 0, 75,218 ;ВНИМАНИЕ,если эта точка занята,то встанем в соседнюю reposition_character england, 76,218 end_if set_counter attack_London 1 end_if if I_CompareCounter attack_London2 = 0 reposition_character england1, 83,219 if not I_CharacterTypeNearTile england, named_character, 0, 83,219 reposition_character england1, 83,218 end_if set_counter attack_London2 1 end_if set_counter attack_NotFailLondon 1 end_monitor end_script
Также нам понадобиться следующий трейт,вот это добавить просто в export_descr_character_traits
Trait script Characters family, princess, merchant, spy, assassin, diplomat, priest Level script Description script_desc EffectsDescription script_effects_desc GainMessage script_gain_desc LoseMessage script_lose_desc Threshold 1 Effect MovementPoints -40 Effect Loyalty 10
А вот это в export_vnvs. Он лежит здесь data/text
{script_desc}Этот трейт нужен для скриптованных армий {script_effects_desc} +1 к навыку армии
---
Оригинальное Авторство:
OPASEH, создатель мода Булатная Сталь
История Происхождения:
Локальная копия оригинальной статьи, взятой мной из модоковальни M2TW на форуме СиЧь.