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




Norinke

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

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

  • 7 Страниц
  • « Первая
  • 1
  • 2
  • 3
  • 4
  • Последняя »
 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
     

    Дата: 22 марта 2020, 20:34

    bitterhowl 22 марта 2020, 20:26

    Я проверил у себя, прежде чем постить - работает с "путотой" и записи в логе нет.


    я вот так вот писал когда тестил, и у меня был вылет при запуске компании

    Цитата

    monitor_event FactionTurnStart
    set_event_counter all_event 1
    set_event_counter random_counter 1
    end_monitor

    monitor_event EventCounter

    if I_EventCounter random_counter = 1
    historic_event difficulty_very_hard
    set_event_counter random_counter 0
    end_if

    set_event_counter all_event 0

    end_monitor


    так вылета нет

    Цитата

    monitor_event EventCounter

    if I_EventCounter random_counter = 1
    historic_event difficulty_very_hard
    set_event_counter random_counter 0
    end_if

    set_event_counter all_event 0

    end_monitor
       bitterhowl
      • Imp
      Imperial
       

      Дата: 22 марта 2020, 20:51

      Я проверил сейчас еще раз, вот код. Все работает - на первом ходу сообщение, отвечаю согласием, снимаются деньги и появляется 3 юнита в поселении.

      Спойлер (раскрыть)
      второй счетчик добавил для количества if.
         Norinke
        • Imp
        Imperial
         

        Дата: 22 марта 2020, 21:30

        bitterhowl 22 марта 2020, 20:51

        Я проверил сейчас еще раз, вот код. Все работает - на первом ходу сообщение, отвечаю согласием, снимаются деньги и появляется 3 юнита в поселении.

        Спойлер (раскрыть)
        второй счетчик добавил для количества if.

        хмм... заработало, но когда сменил на вот так, получил вылет, наверное нельзя вызывать historic_event внутри(он у меня в тестовом стоит, так проще смотреть работает ли все)

        Цитата

        monitor_event EventCounter
        if I_EventCounter difficulty_very_hard_accepted = 1

        historic_event difficulty_very_hard
        set_event_counter roynar_moors_accepted 0
        end_if
        if I_EventCounter essos_accepted = 1
        console_command add_money -5000
        set_counter essos_merchant 1
        if RandomPercent < 50
        set_counter success_mission 1
        end_if
        set_event_counter essos_accepted 0
        end_if
        end_monitor
           bitterhowl
          • Imp
          Imperial
           

          Дата: 22 марта 2020, 21:51

          У вас ивент difficulty_very_hard повторяет название счетчика - возможно в этом проблема. Получается только что выбрали "да" в этом ивенте и снова его задаете. Попробуйте любой другой historic_event вместо difficulty_very_hard туда вставить.
             Norinke
            • Imp
            Imperial
             

            Дата: 22 марта 2020, 22:14

            bitterhowl 22 марта 2020, 21:51

            У вас ивент difficulty_very_hard повторяет название счетчика - возможно в этом проблема. Получается только что выбрали "да" в этом ивенте и снова его задаете. Попробуйте любой другой historic_event вместо difficulty_very_hard туда вставить.

            вставлял, та же беда, попробуйте у себя
               bitterhowl
              • Imp
              Imperial
               

              Дата: 22 марта 2020, 23:01

              да, вылет, лог такой
              Спойлер (раскрыть)

              Исполняет историческое событие и вылетает.

              -Добавлено-

              Вылечил.

              Вот так - вылет

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

              вот так - нет, показывает сообщение и все хорошо.
              Спойлер (раскрыть)
              Надо было сначала счетчик предыдущего ивента обнулить.
                 BOOT
                • Imp
                Imperial
                 

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

                Уважаемый Norinke!
                Можете подробне мне нубу рассказать о счетчиках, когда у вас будет время?))
                Я написал скрипт для себя на португалию он сработал отменно, таким же способом написал на другие фракции скрипты эти работают но не так как первый((((!
                   Norinke
                  • Imp
                  Imperial
                   

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

                  BOOT 01 апреля 2020, 18:08

                  Уважаемый Norinke!
                  Можете подробне мне нубу рассказать о счетчиках, когда у вас будет время?))
                  Я написал скрипт для себя на португалию он сработал отменно, таким же способом написал на другие фракции скрипты эти работают но не так как первый((((!

                  ну так задавай вопросы, показывай скрипты
                     BOOT
                    • Imp
                    Imperial
                     

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

                    Показать пока что не могу, временно доступа нет до компьютера нет((

                    set_counter - это присвоение значения?

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

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

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

                      Показать пока что не могу, временно доступа нет до компьютера нет((

                      set_counter - это присвоение значения?

                      Сам скрипт игрок берет город, появляются две армии и должны отбить город, так вот одна вечно тикает((


                      да

                      тикает? тікає?

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