Сообщество Империал: Основы и немного о счетчиках (Medieval 2: Total War) - Сообщество Империал




Norinke

Основы и немного о счетчиках (Medieval 2: Total War)

Основы и немного о счетчиках, а так же с чем они связанные
Тема создана: 22 марта 2020, 04:37 · Автор: Norinke
Просмотров:
 10 687

  • 7 Страниц
  • « Первая
  • 1
  • 2
  • 3
  • 4
  • 5
  • Последняя »
 2 
 Norinke
  • Imp
Imperial
 

Дата: 22 марта 2020, 04:37

Imp


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

Со временем надеюсь напишу по всем командам, а так же условиям и евентам, возможно напишу докумендос по комадам на подобии зелено глазого с ТВЦ

Оффтоп (контент вне темы)



Это основа которую мы будем использовать

     monitor_event < команда которая вызывает проверку события

     terminate_monitor < отключить монитор без возможности его восстановления, все что написано после этой команды не ликвидно

     end_monitor < окончание нашего монитора


А теперь более понятно на примере

|

     monitor_event FactionTurnStart < когда начинается ход какой либо фракции, запускается наш монитор
     terminate_monitor
     end_monitor


Но ясно дело этого нам мало, в целом в игре есть 220 с хвостиком событый которые она проверяет
и так же 410 с хвостиком условий и 240 с чем-то команд, со временем надеюсь обясню по всем

Вот как выгляди к примеру проверка на ход Швеции

|

     monitor_event FactionTurnStart FactionType sweden
     terminate_monitor
     end_monitor

     FactionTurnStart < проверка события начало хода какой либо фракции

     FactionType < проверка какой тип фракции начал ход, если не швеция, то игнорит

Небольшое примечание, мы не может использовать все существующие проверки к FactionTurnStart
к примеру мы не можем использовать проверку SettlementName, потому что это же не город(ваш кеп)

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

К примеру I_CompareCounter, является универсальным

В то время как FactionType может применятся к тем евентам, которые имеют информацию о фракции


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

А BecomesFactionLeader уже знает больше, это событие что персонаж становится лидером какого либо альянса, тут уже мы можем
проверять записи по персонажу, фракцию, проверить регион где стоит и еще всякое, но опять таки, здесь еще нужно следовать логике, к числу записей по персонажу подходит такая проверка как "WonBattle", но она же не логичная, у нас сработало событие, что персонаж стал лидером, а не что окончилась битва, так не забавыйте о банальной логике

Так же у нас есть кроме обычного monitor_event есть

     monitor_conditions

Чем он отличается? Он работает исключительно с универсальными проверками, как I_BattleStarted(используется только во время бытвы), I_CompareCounter, I_SettlementOwner(карта глобальная) и т.д.
к примеру если нам нужно что-то сделать сразу же после того как счетчик I_CompareCounter принял значение 100, то мы можем использовать его

|

monitor_conditions I_CompareCounter TestCounter = 1
historic_event bla_bla_bla < показать сообщение
end_monitor


Но в таком случае не забывайте использовать terminate_monitor или изменить показания счетчика, а то вас заспамит сообщениями и ничего хорошо с этого не будет

|

monitor_conditions I_CompareCounter TestCounter = 1
historic_event bla_bla_bla < показать сообщение
set_counter TestCounter 2
end_monitor



Так же есть команда которая означает не, пример

|

     monitor_event FactionTurnStart not FactionType sweden
     terminate_monitor
     end_monitor


Она указывает, что событие пройдет проверку, только если ход не Швеции
Так же можно вместо not поставить !

|

     monitor_event FactionTurnStart ! FactionType sweden
     terminate_monitor
     end_monitor


Иногда нам нужно делать заметки, чтобы сами разобратся что мы написали, через определенное время, или к примеру хотим посмотреть что будет без определенной проверки или команды, тут нам на выручку приходя комментарии, ставятся они просто точная с зяпятой;

|

     monitor_event FactionTurnStart ! FactionType sweden
     ;historic_event war_with_Polan отключаем ибо захотелось
     set_counter war_Kiev 5 ; ставим счетчик на 5
     terminate_monitor
     end_monitor

все что после точки с зяпятой ; игнорируется

Надеюсь понятно объяснил основы, а теперь немножко о другом, о счетчиках и что с ними едят




Объявляем простой счетчик, который будет часто использоваться на самом то деле, хотя и может использоваться только внутри файла campaign_script

Объявление должно быть в обязательном порядке, и оно в самом начале имеет значение 0
     declare_counter < команда обявление
     war_start_after_2_ages < условное имя

     declare_counter war_start_after_2_ages

Обьявление должно быть перед тем как мы будем использовать наш счетчик, так же оно не должно быть в monitor_event
пример

|

declare_counter war_start_after_2_ages

monitor_event FactionTurnStart FactionType sweden
terminate_monitor
end_monitor


Присваиваем счетчику значение

     set_counter war_start_after_2_ages 100

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

|

declare_counter war_start_after_2_ages
set_counter war_start_after_2_ages 100

monitor_event FactionTurnStart FactionType sweden
terminate_monitor
end_monitor


Добавляем или отнимаем к счетчику значение
     inc_counter war_start_after_2_ages -50 или 10


Это условие которое проверяет показатель счетчика
     I_CompareCounter


Оно может использовать в условиях монитора

Цитата

monitor_event FactionTurnStart FactionType sweden < когда фракция Швеция начнет свой год
and I_CompareCounter war_start_after_2_ages = 1 < проверяем наше значение

set_counter war_start_after_2_ages 100

end_monitor


А так же внутри монитора может использовать

|

monitor_event FactionTurnStart FactionType sweden < когда фракция Швеция начнет свой год

if I_CompareCounter war_start_after_2_ages = 1
set_counter war_start_after_2_ages 100
end_if

end_monitor


Операторы = > < ! думаю всем знакомы еще со школы
= равно
< меньше
> больше
<= меньше равно
>= больше равно
!= не равно


Евентовый счетчик, он может использоваться почти везде и не нужно делать объявление, в отличии от простого счетчика counter

Так же любое историческое событие является евент счетчиком, к примеру любое событие из descr_event является счетчиком
event historic new_era_begins
date 180
Когда событие не случилось стоит 0, когда оно случится(в данном случае в 180 году), счетчик примет значение 1


     set_event_counter historic_event_Holy_War_2 56

Так же как и в обычном, добавить или отнять у счетчика
     inc_event_counter historic_event_Holy_War_2 -50 или 10

Создается случайный счетчик и выбирается случайное число от 1 до 20(границы могут быть и другие от 30 до 100 и т.д.)
     generate_random_counter RandomCounter 1 20

Команда совмещает в себе характеристики inc и random, то есть можно к примеру добавить случайное число в рамках от 10 до 20
использовать только на event_counter, к обычному не применять

     random_counter_inc RandomCounter 10 20


Отличие от обычного счетчик еще в том, что здесь есть собственная проверка изменяется ли event_counter

Срабатывает в случае изменения какого либо из счетчиков
     monitor_event EventCounter

Имя счетчика
     EventCounterType

Проверка числа
     EventCounter

|

monitor_event EventCounter EventCounterType historic_event_Holy_War_2
and EventCounter > 5

end_monitor



Так же есть как и в обычном счетчике проверка и может использоваться так же как и обычный
     I_EventCounter

|

monitor_event FactionTurnStart FactionType sweden
and I_EventCounter historic_event_Holy_War_2 = 1
set_counter historic_event_Holy_War_2 100
end_monitor


А так же внутри монитора может использовать

|

monitor_event FactionTurnStart FactionType sweden
if I_EventCounter historic_event_Holy_War_2 = 1
set_counter historic_event_Holy_War_2 100
end_if
end_monitor


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

recruit_pool "iqta'dar" 0 0.08 1 0 requires factions { turks, } and event_counter some_event_counter 1

в EDB так же можно использовать not

recruit_pool "iqta'dar" 0 0.08 1 0 requires factions { turks, } and not event_counter some_event_counter 1

в descr_mercenaries , здесь срабатывает проверка, если event_counter равен 1, когда 0 отключает

unit Numidian Cavalry exp 1 cost 315 replenish 0.04 - 0.13 max 2 initial 0 events { some_event_counter}




Создать событие, появится сообщение о событии, текст берется из historic_events, и так же для него создаться event_counter
     historic_event rebel_attack_London

Так же событие можно ограничить по фракциям, к примеру
     historic_event rebel_attack_London { england, }

Можно добавить видео
     historic_event rebel_attack_London faction/rebel_attack.bik { england, }

Так же можно добавить выбор да или нет, для игрока, для ИИ разве что сделать выбор случайным,
или прописать соответствующие условия, при каких будет принимать или отвергать

     historic_event rebel_attack_London true faction/rebel_attack.bik { england, }

создастя отдельно два event_counter с именем события и праставками _accepted и _declined
rebel_attack_London_accepted
rebel_attack_London_declined

Если нажали да

|

monitor_conditions I_EventCounter rebel_attack_London_accepted = 1
set_event_counter rebel_attack_London_accepted 0 или terminate_monitor если событие одноразовое
end_monitor


Если нажали нет

|

monitor_conditions I_EventCounter rebel_attack_London_declined = 1
set_event_counter rebel_attack_London_declined 0 или terminate_monitor если событие одноразовое
end_monitor


Для ИИ можно сделать так

|

monitor_event *****

historic_event rebel_attack_London true faction/rebel_attack.bik { england, }

generate_random_counter random_accept 0 10

if I_EventCounter random_accept <= 5
set_event_counter rebel_attack_London_accepted 1
end_if

if I_EventCounter random_accept > 5
set_event_counter rebel_attack_London_declined 1
end_if

end_monitor



Надеюсь все было понятно, если что можете смело задавать вопросы, я почти не кусаюсь
     BOOT
    • Imp
    Imperial
     

    Дата: 01 апреля 2020, 18:34

    Про "ноги" Я знаю, но вот первый скрипт сработал просто идеально...
       BOOT
      • Imp
      Imperial
       

      Дата: 01 апреля 2020, 19:08

      Спаун первой армии
      Спойлер (раскрыть)

      P.S. Извените я по памяти писал...))
         BOOT
        • Imp
        Imperial
         

        Дата: 01 апреля 2020, 20:10

        Спойлер (раскрыть)

        P.S. Вот сам скрипт..))
           Edmond
          • Imp
          Imperial
           

          Дата: 01 апреля 2020, 20:12

          Учимся использовать спойлеры)
             BOOT
            • Imp
            Imperial
             

            Дата: 01 апреля 2020, 20:24

            Edmond 01 апреля 2020, 20:12

            Учимся использовать спойлеры)

            Простите, я сначала отправил а потом только нашел как делать спойлеры))
               youneuoy
              • Imp
              Imperial
               

              Дата: 01 апреля 2020, 20:31

              BOOT

              Простите, я сначала отправил а потом только нашел как делать спойлеры))

              починил
                 BOOT
                • Imp
                Imperial
                 

                Дата: 01 апреля 2020, 20:36

                youneuoy 01 апреля 2020, 20:31

                BOOT

                Простите, я сначала отправил а потом только нашел как делать спойлеры))

                починил

                Спасибо))
                   BOOT
                  • Imp
                  Imperial
                   

                  Дата: 01 апреля 2020, 21:52

                  Ув. Norinke.

                  Посмотрите на скрипт где правильно а где нет???
                     Norinke
                    • Imp
                    Imperial
                     

                    Дата: 01 апреля 2020, 23:24

                    BOOT 01 апреля 2020, 21:52

                    Ув. Norinke.

                    Посмотрите на скрипт где правильно а где нет???

                    ну для начала очевидно

                    1 - задайте label армии и используйте вместо имени везде где нужно, имя может такое уже существовать, а вот лейбл уникальная штука

                    spawn_army
                    faction portugal
                    character Gill, named character, age 18, x 54, y 83

                    spawn_army
                    faction portugal
                    character Gill, named character, age 18, x 54, y 83, label attack_something

                    2 - я не вижу трейта, который убирал бы возможность генерал ходить

                    3 - в случае если фракция не Португалия, у вас буду висеть лишние мониторы, это не кошерно

                    4 - зачем использовать два раза if который выполняете те же условия(и зачем вы во 2 if поставили те же условия что и в сам монитор?)

                    Цитата

                    and not I_SettlementOwner Lisbon = portugal
                    and I_NumberOfSettlements portugal > 0
                    and not I_SettlementUnderSiege Lisbon



                    if not I_LocalFaction portugal
                    and not I_SettlementUnderSiege Lisbon
                    and not I_SettlementOwner Lisbon = portugal
                    and I_NumberOfSettlements portugal > 0



                    5 - у вас все идет одно за другим здеся, то есть все сделается в один ход

                    Цитата

                    monitor_event FactionTurnStart FactionType portugal
                    and I_CompareCounter AttacLisbonFail = 1
                    if I_CharacterExists Rodrigo
                    siege_settlement Rodrigo, Lisbon, maintain
                    end_if
                    set_counter AttacLisbonFail 2
                    set_counter AttacLisbon 2
                    terminate_monitor
                    end_monitor

                    monitor_event FactionTurnStart FactionType portugal
                    and I_CompareCounter AttacLisbon = 2
                    if I_CharacterExists Gill
                    siege_settlement Gill, Lisbon, maintain
                    end_if
                    set_counter AttacLisbon 3
                    terminate_monitor
                    end_monitor

                    monitor_event FactionTurnStart FactionType portugal
                    and I_CompareCounter AttacLisbon = 3
                    if I_CharacterExists Gill
                    and I_SettlementUnderSiege Lisbon
                    siege_settlement Gill, Lisbon, attack
                    end_if
                    set_counter AttacLisbon 4
                    terminate_monitor
                    end_monitor


                    6 - зачем это? оно ничего не дает, просто место занимает

                    Цитата

                    monitor_event FactionTurnStart not FactionIsLocal
                    set_counter AttacLisbonFail 0
                    set_counter AttacLisbon 0
                    terminate_monitor
                    end_monitor
                       BOOT
                      • Imp
                      Imperial
                       

                      Дата: 02 апреля 2020, 00:18

                      Norinke 01 апреля 2020, 23:24

                      BOOT 01 апреля 2020, 21:52

                      Ув. Norinke.

                      Посмотрите на скрипт где правильно а где нет???

                      ну для начала очевидно

                      1 - задайте label армии и используйте вместо имени везде где нужно, имя может такое уже существовать, а вот лейбл уникальная штука

                      spawn_army
                      faction portugal
                      character Gill, named character, age 18, x 54, y 83

                      spawn_army
                      faction portugal
                      character Gill, named character, age 18, x 54, y 83, label attack_something

                      2 - я не вижу трейта, который убирал бы возможность генерал ходить

                      3 - в случае если фракция не Португалия, у вас буду висеть лишние мониторы, это не кошерно

                      4 - зачем использовать два раза if который выполняете те же условия(и зачем вы во 2 if поставили те же условия что и в сам монитор?)

                      Цитата

                      and not I_SettlementOwner Lisbon = portugal
                      and I_NumberOfSettlements portugal > 0
                      and not I_SettlementUnderSiege Lisbon



                      if not I_LocalFaction portugal
                      and not I_SettlementUnderSiege Lisbon
                      and not I_SettlementOwner Lisbon = portugal
                      and I_NumberOfSettlements portugal > 0



                      5 - у вас все идет одно за другим здеся, то есть все сделается в один ход

                      Цитата

                      monitor_event FactionTurnStart FactionType portugal
                      and I_CompareCounter AttacLisbonFail = 1
                      if I_CharacterExists Rodrigo
                      siege_settlement Rodrigo, Lisbon, maintain
                      end_if
                      set_counter AttacLisbonFail 2
                      set_counter AttacLisbon 2
                      terminate_monitor
                      end_monitor

                      monitor_event FactionTurnStart FactionType portugal
                      and I_CompareCounter AttacLisbon = 2
                      if I_CharacterExists Gill
                      siege_settlement Gill, Lisbon, maintain
                      end_if
                      set_counter AttacLisbon 3
                      terminate_monitor
                      end_monitor

                      monitor_event FactionTurnStart FactionType portugal
                      and I_CompareCounter AttacLisbon = 3
                      if I_CharacterExists Gill
                      and I_SettlementUnderSiege Lisbon
                      siege_settlement Gill, Lisbon, attack
                      end_if
                      set_counter AttacLisbon 4
                      terminate_monitor
                      end_monitor


                      6 - зачем это? оно ничего не дает, просто место занимает

                      Цитата

                      monitor_event FactionTurnStart not FactionIsLocal
                      set_counter AttacLisbonFail 0
                      set_counter AttacLisbon 0
                      terminate_monitor
                      end_monitor




                      Спасибо огромное вам))

                      На счет "label" проблема, этот скрипт на движке Medieval II, medieval.exe, а он лабелы не читает, вырубает все скрипты(((

                      А вы еще будете писать гайды по Счетчикам?...

                      Мне бы очень хотелось самому научиться (разобраться) в счетчиках))
                        • 7 Страниц
                        • « Первая
                        • 1
                        • 2
                        • 3
                        • 4
                        • 5
                        • Последняя »
                         
                        Перевести Страницу
                        Условия · Ответственность · Конфид. · Визитка · 03 июл 2026, 05:48 · Зеркала: ImtwOrg, ImtwSite, ImtwOnline