Community Imperial: Скрипты мода DenMod - Сообщество Империал




DinarMayor

Скрипты мода DenMod

Описания всех скриптов и их обсуждение.
Theme created: 03 October 2022, 21:27 · Author: DinarMayor
Views:
 47 688

  • 27 Pages
  • « First
  • 18
  • 19
  • 20
  • 21
  • 22
  • Last »
 1 
 DinarMayor
  • Imp
Imperial
 

Date: 26 November 2022, 16:36




Скрипты мода DenMod



Imp



В этой теме будут выкладываться и обсуждаться новые скрипты мода. Также буду рад предложениям и идеям для скриптов - возможно что-то хотели бы увидеть в моде, а может исправить/изменить уже имеющейся скрипт. В шапке темы будут описания только тех скриптов, которые внедрены в текущую(доступную) версию мода, а все новые будут в этой теме.



Описание скриптов (Reveal)



Номер карты для тех, кто хочет отблагодарить разработчика:
СберБанк: 2202 2063 6114 3568



     DinarMayor
    • Imp
    Imperial
     

    Date: 13 August 2025, 03:51

    Евгений_Хмельницкий275618

    local tile = M2TW.stratMap.getTile(xLocCoord,yLocCoord);

    Хорошо, я посмотрю, но я уже понял в чем дело.
       DinarMayor
      • Imp
      Imperial
       

      Date: 13 August 2025, 18:17

      Евгений_Хмельницкий275618

      local tile = M2TW.stratMap.getTile(xLocCoord,yLocCoord);

      Вот файл: To view the link Register

      To view the link Register для версии проги 3.3.1:
      clickAtMap={["isClicked"]=false,["xTile"]=0,
      ["yTile"]=0}
      function onClickAtTile(x,y)
          clickAtMap.isClicked=true;
          clickAtMap.xTile=x;
          clickAtMap.yTile=y;
          xLocCoord, yLocCoord = clickAtMap.xTile, clickAtMap.yTile;
          print(xLocCoord..", "..yLocCoord)
      
      	local M2TW = gameDataAll.get();
          local tile = M2TW.stratMap.getTile(xLocCoord,yLocCoord);
          if tile then
              local character = tile.character;
              if character then
                  local selectedChar = character.namedCharacter;
                  print("selectedChar: fullName: "..selectedChar.fullName..", localizedDisplayName: "..selectedChar.localizedDisplayName..", label: "..selectedChar.label..", subFaction: "..selectedChar.subFaction..", index: "..selectedChar.index);
                  test_character=selectedChar;
              end
      
              local settlement = tile.settlement;
              if settlement then
                  print("settlement: name: "..settlement.name..", level: "..settlement.level..", regionID: "..settlement.regionID..", localizedName: "..settlement.localizedName..", creatorFactionID: "..tostring(settlement.creatorFactionID)..", capital: "..tostring(M2TW.stratMap.getRegion(settlement.regionID).settlementName).."
      , gatesAreOpened: "..tostring(settlement.gatesAreOpened)..", isCastle: "..settlement.isCastle);
                  test_settlement=settlement;
              end
          end
      end
         Евгений_Хмельницкий2
        • Imp
        Imperial
         

        Date: 14 August 2025, 06:58

        DinarMayor 13 August 2025, 18:17


        Вот файл: To view the link Register


        ОГРОМНОЕ спасибо за помощь! Всё работает и даже больше чем я хотел)

        Хотел ещё Вам написать в личку здесь, но т.к. профиль у меня новый, форум не даёт этого сделать, написал в Дискорд. Вы там сидите?
           Seydlitz
          • Imp
          Imperial
           

          Date: 06 September 2025, 16:36

          DinarMayor 17 March 2023, 10:55

          Добавил скрипт, позволяющий спешивать конных арбалетчиков непосредственно перед боем(по одному юниту за клик)(армия должна быть под руководством полководца), а после боя или при нажатии "Избежать боя" юниты обратно залезут на лошадь. :008:
          То же самое планирую сделать и для штурмов, но чуть позже.

          То есть у игрока будет выбор между конным отрядом в виде не очень сильных арбалетчиков и пешим аналогом в виде полноценных арбалетчиков.


          dismountedMounted.lua (Reveal)

          [/notice][/announ]

          Я вот установил EOP 3.3.1 специально, чтобы попробовать повторить этот скрипт. В качестве "котиков" для эксперимента выбраны "feudal knights" и "dismounted feudal knights" (UnitID соотв. поменял на UnitName, где это по логике должно быть, и все упоминания данного скрипта в других местах - кнопки и т.п. - повторил).
          Ошибка вылезла после жмякания на кнопку советника перед битвой:
          .../units/dismountedMounted.lua:3: attempt to index global 'gDataBatt' (a nil value)
          Можно подсказать, куда копать?
             Seydlitz
            • Imp
            Imperial
             

            Date: 07 September 2025, 08:15

            Надо было, пожалуй, уточнить, что сделано:
            1. dismountedMounted.lua перенесен полностью с сохранением пути и скорректирован:
            Spoiler (expand)

            2. В luaPluginScript.lua внесено:
            Spoiler (expand)
               DinarMayor
              • Imp
              Imperial
               

              Date: 11 September 2025, 01:31

              Seydlitz

              Можно подсказать, куда копать?

              Это глобальная переменная gDataBatt. Можно просто добавить в начале функции вот это:
              if not gDataBatt then gDataBatt=gameDataAll.get().battleStruct; end


              А вообще, вот я с ходу переделал немного - должен подойти и для версии 4.0 и для более ранних версий:
              Spoiler (expand)

              В таблице disMountedNew слева - какой юнит, справа - на какой юнит менять. В таблице disMountedOld наоборот. Можно добавлять сколько угодно.
              В версии 4.0 все работает. Проверь у себя.
                 Seydlitz
                • Imp
                Imperial
                 

                Date: 11 September 2025, 14:02

                DinarMayor 11 September 2025, 01:31

                Проверь у себя.

                :0112: Работает! Спасибо огромное! :062:
                Ещё не пробовал, но я так понимаю, в этой табличке же всё должно сработать и в обратную сторону? Пеших в конных так же менять бы, а то после битвы выкупленные спешенные рыцари возвращаются именно пешими.
                Ещё бы заставить теперь ИИ спешивать своих так же перед битвой. Например, монголам свою конницу перед штурмом города.
                   DinarMayor
                  • Imp
                  Imperial
                   

                  Date: 11 September 2025, 14:18

                  Seydlitz

                  должно сработать и в обратную сторону?

                  Спешенные меняются обратно либо при нажатии "белого флага", либо после битвы.

                  Seydlitz

                  выкупленные спешенные рыцари возвращаются именно пешими.

                  Для этого нужно делать новые функции. А так, они обратно поменяются после следующей битвы/отступления - лошадей не отдали при выкупе)))

                  Seydlitz

                  Ещё бы заставить теперь ИИ спешивать своих так же перед битвой. Например, монголам свою конницу перед штурмом города.

                  Это отдельная история. Если и когда сделаю это - напишу. Скорее когда, т.к. действительно монголам это не помешает, да и остальным тоже. Тут нужен новый скрипт. Проверять составы армии ИИ и если он идёт на штурм преимущественно конницей, то часть смешиваем. Как-то так примерно. Для текущей версии мода я не буду этого делать не т.к. я сейчас готовлю мод к релизу и в основном занимаюсь отслеживанием и лечением багов, а добавление новых скриптов потребует времени и новых тестов, а значит релиз задержится.
                     Seydlitz
                    • Imp
                    Imperial
                     

                    Date: 11 September 2025, 15:48

                    DinarMayor 11 September 2025, 14:18

                    Спешенные меняются обратно либо при нажатии "белого флага", либо после битвы.

                    Вот, кстати, у меня вообще обратно не вернулись. Ни после битвы ни при белом флаге.
                    Опять, небось, что-то не предусмотрел, типа gDataBatt.
                    Про обратное действие я только скопировал в luaPluginScript.lua следующие строки:
                    function onButtonPressed(buttonName)
                    	if(buttonName=="prebattle_withdraw_button") then
                    		batWith_back_dismountedMounted();	-- dismountedMounted.lua
                    	end
                    end
                    
                    function onPostBattle(character)
                    	if character.faction.isPlayerControlled==1 then
                    		back_dismountedMounted(character.character,"onPostBattle");		-- dismountedMounted.lua
                    	end
                    end
                    
                       DinarMayor
                      • Imp
                      Imperial
                       

                      Date: 12 September 2025, 02:41

                      Seydlitz

                      у меня вообще обратно не вернулись

                      В версии 3.3.1 чуть иначе:
                      function onButtonPressed(eventData)
                          local buttonName = eventData.resourceDescription;
                          if buttonName=="prebattle_withdraw_button" then
                              batWith_back_dismountedMounted();   -- dismountedMounted.lua
                          end
                      end
                      
                      function onPostBattle(eventData)
                          local character = eventData.character;
                          if character.faction.isPlayerControlled==1 then
                              back_dismountedMounted(character.character,"onPostBattle");   -- dismountedMounted.lua
                          end
                      end
                      


                      Как вообще во время onPostBattle не было ошибки(окошка Луа с исключением). :038:
                      И еще очень важный момент: вот эти To view the link Register(например onPostBattle) не должны повторяться нигде, т.е. если один раз где-то в luaPluginScript.lua прописано, то больше нигде, ни в одном файле, этой функции быть не должно - сработает только последняя. Это касается вообще всех глобальных функций.

                      Если хочешь на самом деле разобраться в скриптинге на Луа, то тебе нужно самому попробовать написать какой-нибудь простенький скрипт, для начала. Пока ты будешь это делать, по-любому будешь какие-то ошибки получать, и решая их, ты наберешься опыта и в будущем уже будешь знать как правильно. Конечно, нужно прочитать/изучить основы Луа(в инете много инфы), но лично я считаю, что лучше всего так: начинаешь практику и при необходимости читаешь теорию - тогда ты уже и теорию больше понимаешь. Лично для меня это так работает - я только на теории не вывожу.)

                      К тому же есть куча готовых примеров(как тут, так и в дискорде), где можно подсмотреть. Ссылку на документацию ЕОР кидал уже выше, но вот еще раз: To view the link Register

                      Да, лучше проверять скрипты Луа в игре в оконном режиме, т.к. окошки с ошибками в полноэкранном режиме остается как бы за игрой - их не видно и создается впечатление что игра просто зависла.
                        • 27 Pages
                        • « First
                        • 18
                        • 19
                        • 20
                        • 21
                        • 22
                        • Last »
                         
                        Translate a Page
                        Conditions · Responsibility · Confid. · About · 03 Jul 2026, 09:55 · Mirrors: ImtwOrg, ImtwSite, ImtwRuImtwRu, ImtwOrg, ImtwSite