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




Norinke

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

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

  • 7 Страниц
  • « Первая
  • 3
  • 4
  • 5
  • 6
  • 7
 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



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

    Дата: 03 апреля 2020, 09:26

    BOOT 03 апреля 2020, 09:16

    Norinke 03 апреля 2020, 05:27

    можно выставить больше 10, это чисто как пример был

    оно добавляет до текущего

    declare some_counter

    inc_counter some_counter 5
    some_counter тут он уже 5

    inc_counter some_counter 9
    some_counter 14

    inc_counter some_counter 10
    some_counter 24

    inc_counter some_counter 10
    some_counter 34



    А вот такое значение:
    declare_counter bla_bla

    set_counter bla_bla 5

    and I_CompareCounter bla_bla < 6 - Будет считывать назад счетчик??

    P.S. Спасибо вам огромное за время потраченое на меня)

    да, проверку пройдет, значение же меньше 6, это все есть здесь в статье, внимательно прочитайте ещё раз
       BOOT
      • Imp
      Imperial
       

      Дата: 03 апреля 2020, 12:55

      Norinke 03 апреля 2020, 09:26

      BOOT 03 апреля 2020, 09:16

      Norinke 03 апреля 2020, 05:27

      можно выставить больше 10, это чисто как пример был

      оно добавляет до текущего

      declare some_counter

      inc_counter some_counter 5
      some_counter тут он уже 5

      inc_counter some_counter 9
      some_counter 14

      inc_counter some_counter 10
      some_counter 24

      inc_counter some_counter 10
      some_counter 34



      А вот такое значение:
      declare_counter bla_bla

      set_counter bla_bla 5

      and I_CompareCounter bla_bla < 6 - Будет считывать назад счетчик??

      P.S. Спасибо вам огромное за время потраченое на меня)

      да, проверку пройдет, значение же меньше 6, это все есть здесь в статье, внимательно прочитайте ещё раз

      Да, да спасибо это я уже понял
      а если надо что бы и 5 проверило надо "=< 5"
         BOOT
        • Imp
        Imperial
         

        Дата: 03 апреля 2020, 14:03

        Простите еще один вопрос...
        set_counter bla_bla 5
        inc_counter bla_bla 5

        and I_CompareCounter bla_bla = 10

        Так же можно делать, это не ошибка??
           Norinke
          • Imp
          Imperial
           

          Дата: 03 апреля 2020, 14:34

          Где именно?
             BOOT
            • Imp
            Imperial
             

            Дата: 03 апреля 2020, 14:42

            Norinke 03 апреля 2020, 14:34

            Где именно?

            Выставляем на пять и добавляем пять,
            а потом проверка.
            Иль я чего то не понял?
               Norinke
              • Imp
              Imperial
               

              Дата: 03 апреля 2020, 14:48

              А зачем это вместе ставить?
                 BOOT
                • Imp
                Imperial
                 

                Дата: 03 апреля 2020, 14:52

                Norinke 03 апреля 2020, 14:48

                А зачем это вместе ставить?

                Ааааа, то есть в отдельном мониторе??
                   Norinke
                  • Imp
                  Imperial
                   

                  Дата: 03 апреля 2020, 14:56

                  Пример приведите полный, так работать будет, но смысл ставить их один за другим
                     BOOT
                    • Imp
                    Imperial
                     

                    Дата: 03 апреля 2020, 15:02

                    Извените, пока примера нет, я еще в голове проматываю...))
                    Я пытаюсь запомнить и выучить)
                    Милионный раз спасибо за обяснения))
                    А вашу статью перечитываю почти каждый день!
                    P.S. "...и за потраченное вами время..."
                       BOOT
                      • Imp
                      Imperial
                       

                      Дата: 03 апреля 2020, 17:16

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