Community Imperial: Ограничение количества нанимаемых юнитов - Сообщество Империал




Gromozeka

Ограничение количества нанимаемых юнитов

Нанимайте только заданное количество отрядов
Theme created: 11 April 2014, 12:41 · Author: Gromozeka
Views:
 24 410

  • 2 Pages
  • 1
  • 2
 Gromozeka
  • Imp
Imperial
 

Date: 11 April 2014, 12:41

...я хочу сделать нечто на подобие ограничения найма, как в Наполеоне, чтобы не боле трёх, пяти или одного или неважно какая цифра отрядов юнита определённого вида можно было нанимать) не факт, что у меня зто получится, это всего лишь задумка в теории...
...полагаю есть вероятность воплощения чего-то подобного и подозреваю, что только посредством скриптов всё таки...
     Avtocrator
    • Imp
    Imperial
     

    Date: 12 April 2014, 00:18

    peskot

    ...я хочу сделать нечто на подобие ограничения найма, как в Наполеоне, чтобы не боле трёх, пяти или одного или неважно какая цифра отрядов юнита определённого вида можно было нанимать) не факт, что у меня зто получится, это всего лишь задумка в теории...

    Можно просто прописать со старта и все.

    Если принципиально, чтоб именно нанимать тоже можно, но мудрено, на основе скрипта из Bellum Crucis.

    Проблема в том, что для скриптов нет команды, подсчитывающей количество определенных отрядов. Однако есть команда, отслеживающая когда был нанят юнит определенной категории и юнит определенного класса(см. category и class в шапке темы), при том в игре использованы не все существующие классы(не использованы дрессировщики handler). На основе этого в Bellum Crucis создали скрипт, который при найме одного юнита(подставного) заменяет его на другого юнита/агента.

    В общий чертах Ваш скрипт будет таким:

    Quote

    monitor_event UnitTrained TrainedUnitCategory handler; нанят подставной юнит категории дрессировщик
    and FactionType england; если фракция - Англия
    and SettlementName London; лучше сделать найм в определенном городе

    create_unit London, название уникального юнита, num 0, exp 0, arm 0, wep 0; собственно создает в Лондоне того самого уникального юнита, ради которого все затеяли
    destroy_units england название подставного юнита; уничтожает подставного юнита
    inc_event_counter название счетчика 1; счетчик - он прибавляет 1 пункт при срабатывании и позволит ограничить найм, просто пропишите в здании где будет наниматься подставной юнит условие and название счетчика < 6 и болше пяти юнитов нанять не сможете

    end_monitor


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

    Однако переобучать его будет невозможно. Разве только способом, который указал раньше.
       OPASEH
      • Imp
      Imperial
       

      Date: 12 April 2014, 00:36

      Avtocrator Зачем так все сложно? Для всех городов писать такое это ужас.

      Вариант № 1 (простой) - лимит только в одного юнита.
      Скрипт:
      monitor_event PreFactionTurnStart ваша фракция
      and I_UnitExists ваш юнит
      set_event_counter Unit_limit 1
      end_monitor
      
      monitor_event PreFactionTurnStart ваша фракция
      and not I_UnitExists ваш юнит
      set_event_counter Unit_limit 0
      end_monitor
      

      Export_descr_buildings.txt
      recruit_pool "Desert Archers" 1 0.32 4 0 requires factions { moors, } and not event_counter Unit_limit 1
      


      Итак, что делает скрипт? Он проверяет наличие у фракции опредленного юнита, если такой юнит уже есть, то скрипт уберет его из найма вообще у всех городов. При этом учтите, вы не сможете сделать отображение в интерфейсе как в Наполеоне: "Сейчас 0 из 4"

      Вариант №2:
      Юнит нанимаеться сразу и на конец хода фракции нанимателя остается в поселении. Принцип исчезания юнита из найма такой же.
      Скрипт:
      monitor_event SettlementTurnEnd SettlementName Clermont
      and I_NumberUnitsInSettlement ваш юнит = 1
      inc_event_counter Unit_limit 1
      end_monitor
      
      monitor_event SettlementTurnEnd SettlementName Clermont
      and I_NumberUnitsInSettlement ваш юнит = 2
      inc_event_counter Unit_limit 1
      end_monitor
      
      monitor_event SettlementTurnEnd SettlementName Clermont
      and I_NumberUnitsInSettlement ваш юнит = 3
      inc_event_counter Unit_limit 1
      end_monitor
      
      Когда величина достигла опредленного количества, убераем из найма 
      
      monitor_event PreFactionTurnStart ваша фракция
      and I_CompareCounter Unit_limit = 3 (лимит в 3 юнита)
      set_event_counter Unit_limit 1
      end_monitor
      
      Если еще у фракции нет 3 юнитов, найм разрешен
      monitor_event PreFactionTurnStart ваша фракция
      and I_CompareCounter Unit_limit < 3 (лимит в 3 юнита)
      set_event_counter Unit_limit 0
      end_monitor
      


      Export_descr_buildings.txt
      recruit_pool "DesertArchers" 1 0.32 4 0 requires factions { moors, } and not event_counter Unit_limit 1
      

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

        Date: 12 April 2014, 09:27

        ...огромнейшее мерси!!! ...только маленькое уточнение - сам скрипт писать отдельным скриптом и запускать с панели управления, либо же добавлять строки в какой-то из существующих скриптов?
           Avtocrator
          • Imp
          Imperial
           

          Date: 12 April 2014, 10:41

          OPASEH
          Мой скрипт рассчитан для найма в конкретном городе, а не для того, чтоб по всем 199 прописывать.

          monitor_event SettlementTurnEnd SettlementName Clermont
          and I_NumberUnitsInSettlement ваш юнит = 1
          inc_event_counter Unit_limit 1
          end_monitor

          Т.е. каждый раз, если на конец хода в поселении будут происходить изменения но при этом останется один-единственный нанятый юнит, то счетчик будет продолжать тикать?


          peskot

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


          Вставляете в файл campaign_script.txt после всех скриптов, но до строк:
          	wait_monitors
          
          end_script

          Никаких панелей управления, он и так сработает.
             OPASEH
            • Imp
            Imperial
             

            Date: 12 April 2014, 12:53

            Avtocrator 12 April 2014, 10:41

            Т.е. каждый раз, если на конец хода в поселении будут происходить изменения но при этом останется один-единственный нанятый юнит, то счетчик будет продолжать тикать?

            monitor_event SettlementTurnEnd SettlementName Clermont
            and I_CompareCounter Unit_limit = 0
            and I_NumberUnitsInSettlement ваш юнит = 1
            inc_event_counter Unit_limit 1
            end_monitor
            


            Avtocrator 12 April 2014, 10:41

            Мой скрипт рассчитан для найма в конкретном городе, а не для того, чтоб по всем 199 прописывать.

            Это ясно, но нанимать юнитов зачастую можно не только в одном конкретном городе.
               Avtocrator
              • Imp
              Imperial
               

              Date: 13 April 2014, 23:21

              OPASEH
              monitor_event SettlementTurnEnd SettlementName Clermont
              and I_CompareCounter Unit_limit = 0
              and I_NumberUnitsInSettlement ваш юнит = 1
              inc_event_counter Unit_limit 1
              end_monitor
              

              Да, но тогда будет другая проблема, юнит могут наоборот сразу же выводить из поселения, тогда следующий счетчик при найме второго уникального юнита не сработает, ведь для этого надо два юнита в поселении:
              monitor_event SettlementTurnEnd SettlementName Clermont
              and I_NumberUnitsInSettlement ваш юнит = 2
              inc_event_counter Unit_limit 1
              end_monitor
              

              Потому ИМХО если принципиально количество, то надо вести подсчет нанятых, а не присутствующих в поселении.
                 OPASEH
                • Imp
                Imperial
                 

                Date: 13 April 2014, 23:54

                Я думал до вас дойдет))))

                monitor_event SettlementTurnEnd SettlementName Clermont
                and I_CompareCounter Unit_limit = 0
                and I_NumberUnitsInSettlement ваш юнит = 1
                inc_event_counter Unit_limit 1
                end_monitor
                
                monitor_event SettlementTurnEnd SettlementName Clermont
                and I_CompareCounter Unit_limit = 1
                and I_NumberUnitsInSettlement ваш юнит = 2
                inc_event_counter Unit_limit 1
                end_monitor
                
                monitor_event SettlementTurnEnd SettlementName Clermont
                and I_CompareCounter Unit_limit = 2
                and I_NumberUnitsInSettlement ваш юнит = 3
                inc_event_counter Unit_limit 1
                end_monitor
                
                   Avtocrator
                  • Imp
                  Imperial
                   

                  Date: 14 April 2014, 00:04

                  OPASEH

                  Я думал до вас дойдет))))

                  Так читайте же)))

                  Avtocrator

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

                  Как я понимаю I_NumberUnitsInSettlement считает юнитов в поселении, но если нанять 3-ех юнитов, вовсе не обязательно, что они встретятся в этом городе и сработает скрипт на ограничение. Так можно будет до бесконечности нанимать.
                     OPASEH
                    • Imp
                    Imperial
                     

                    Date: 14 April 2014, 02:27

                    monitor_event SettlementTurnEnd SettlementName Clermont
                    and I_NumberUnitsInSettlement ваш юнит = 1
                    set_counter Unit_limit 1
                    end_monitor
                    
                    monitor_event SettlementTurnEnd SettlementName Clermont
                    and I_NumberUnitsInSettlement ваш юнит = 2
                    set_counter Unit_limit 2
                    end_monitor
                    
                    monitor_event SettlementTurnEnd SettlementName Clermont
                    and I_NumberUnitsInSettlement ваш юнит = 3
                    set_counter Unit_limit 3
                    end_monitor
                    
                    Когда величина достигла опредленного количества, убераем из найма 
                    
                    monitor_event PreFactionTurnStart ваша фракция
                    and I_CompareCounter Unit_limit = 3 (лимит в 3 юнита)
                    set_event_counter Unit_limit 1
                    end_monitor
                    
                    Если еще у фракции нет 3 юнитов, найм разрешен
                    monitor_event PreFactionTurnStart ваша фракция
                    and I_CompareCounter Unit_limit < 3 (лимит в 3 юнита)
                    set_event_counter Unit_limit 0
                    end_monitor
                    

                    Тогда надо будет писать под максимальный одновременный найм. В данном случае их 3. Для других городов другой скрипт.
                      • 2 Pages
                      • 1
                      • 2
                       
                      Translate a Page
                      Conditions · Responsibility · Confid. · About · 02 Jul 2026, 23:50 · Mirrors: ImtwOrg, ImtwSite, ImtwRuImtwRu, ImtwOrg, ImtwSite