こはね 发表于 2020-8-8 13:40:28

给地图添加昼夜循环触发

//帝国3地图触发分三种,一种是官方设定的标准格式触发,除了是官方设定没有任何优点,需要读取xml文件,使用自定义触发程序不能与未修改触发程序的玩家联机,如果存在中文路径,无法执行;另外两种是通过c++注释符号将触发程序精简成命令并直接输出到游戏,可以自定义触发程序,几百个kb、tr、ui、xs命令任意发挥。第二种触发虽然可以自由发挥,但是仍然受中文路径限制,而第三种触发则不受中文路径限制,就算存在中文路径也能运行,但是输出长度有限制,一个触发程序最高输出255字符,超出就会导致无法读取,使所有触发程序失效。本文不再详述三种地图触发的区别以及使用方法,您自己参考https://www.aoebbs.net/tutorial.php?mod=13-5。

//----------------------------------------------------------------------------------------------------------
//以本人制作的中国地图为例子:
      // ***************************************** Installation Path *****************************************
   /*开头触发--踢出中文路径玩家;原理:已知中文路径会导致第一种、第二种触发程序失效,所以用第一种触发程序设定一个值,在用第三种触发程序检测这个数值,如果不等于那个值就使用UI命令,使其主动退出游戏。*/
      rmCreateTrigger("GameStart");
      rmSetTriggerRunImmediately(true);
      rmSetTriggerPriority(5);
      rmSetTriggerEffectParam("IdleProc","true);trQuestVarSet(\"Path\",1);}}/*");
      rmCreateTrigger("Path      active      runImmediately{if(trQuestVarGet(\"Path\")!=1){"+"showSPCNote(\"Error!\",\"<color=0,1,1>Use-the-English-path-to-install-the-Age-of-Empires-III,please.\");"+"uiMessageBox2(20948);trEndGame();trYouWin(true);xsDisableRule(\"_Path\");}}/*");
      rmSetTriggerActive(false);
      rmSetTriggerPriority(5);
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//首先在void main(void)前面声明几个值(我也不知道这样表达是否正确,其实我不太懂c++的)
      void oxy(string xs1="", string xs2="",string xs3="") {
          rmAddTriggerEffect("SetIdleProcessing");
         rmSetTriggerEffectParam("IdleProc", "true); */ "+xs1+xs2+xs3+" /* ");
      }

      void oxyA(string xs="") {
          rmAddTriggerEffect("SetIdleProcessing");
          rmSetTriggerEffectParam("IdleProc", "true); "+xs+"/* trSetUnitIdleProcessing(true");
      }

      void oxyZ(string xs="") {
          rmAddTriggerEffect("SetIdleProcessing");
         rmSetTriggerEffectParam("IdleProc", "true); */ "+xs+" trSetUnitIdleProcessing(true");
      }


/*---------------------------------------------------------------------------------

-----------------------------------------------------------------------------------*/

      // ****************************************** Trigger Start ********************************************
         /*下面的触发添加在void main(void)里面,建议添加在底部*/
      /*第二种触发程序开头,所有触发程序必须添加在这个触发程序下面*/
      rmCreateTrigger("aoebbs");
      rmSwitchToTrigger(rmTriggerID("aoebbs"));
      rmSetTriggerRunImmediately(true);
      oxyA("}}");      // *****************************************************************************************************



      oxy("rule _0start active runImmediately { ");                   /*第一个触发程序active作用中,runImmediately立刻运行*/
      oxy("if((trTime()-cActivationTime) >= 1.00000000){");   /*被active一秒后开始运行*/
      oxy("trSetLighting(\"spcCC5b\", 420.00000000);");      /*改变游戏照明为spcCC5b,变化时间为420秒,右边的数值越少,变化越快,越大,变化则越慢*/
      oxy("xsDisableRule(\"_0start\");");                                  /*关闭触发程序_0start,也就是关闭自己,如果不关闭就变成循环触发了,会一直卡在开头,无法改变照明*/
      oxy("xsEnableRule(\"_revolutionLighting\");");            /*开启触发程序_revolutionLighting,下面那个触发↓↓↓↓↓*/
      oxyZ("}} /*");

      oxy("rule _revolutionLighting inactive runImmediately { ");      /*inactive代表该触发程序处于未激活状态,需要用其他触发程序去激活*/
      oxy("if((trTime()-cActivationTime) >= 419.00000000){");            /*因为上面那个触发程序设定了420秒,所以这里设定激活419秒后运行*/
      oxy("trSetLighting(\"hc_revolution\", 250.00000000);");             /*改变游戏照明为hc_revolution,变化时间为250秒*/
      oxy("xsDisableRule(\"_revolutionLighting\");");                        /*关闭_revolutionLighting*/
      oxy("xsEnableRule(\"_6lISBOM\");");                                           /*开启_6lISBOM;↓↓↓↓↓↓↓↓*/
      oxyZ("}} /*");

      oxy("rule _6lISBOM inactive runImmediately { ");                      /*同上*/
      oxy("if((trTime()-cActivationTime) >= 250.00000000){");
      oxy("trSetLighting(\"Lisbon Storm\", 50.00000000);");
      oxy("xsDisableRule(\"_6lISBOM\");");
      oxy("xsEnableRule(\"_7spcJC4aflashback\");");
      oxyZ("}} /*");

      oxy("rule _7spcJC4aflashback inactive runImmediately { ");
      oxy("if((trTime()-cActivationTime) >= 50.00000000){");
      oxy("trSetLighting(\"spcJC4aflashback\", 120.00000000);");
      oxy("xsDisableRule(\"_7spcJC4aflashback\");");
      oxy("xsEnableRule(\"_8minescent\");");
      oxyZ("}} /*");

      oxy("rule _8minescent inactive runImmediately { ");
      oxy("if((trTime()-cActivationTime) >= 420.00000000){");
      oxy("trSetLighting(\"minescene\", 300.00000000);");
      oxy("xsDisableRule(\"_8minescent\");");
      oxy("xsEnableRule(\"_1start\");");
      oxyZ("}} /*");

      oxy("rule _1start inactive runImmediately { ");
      oxy("if((trTime()-cActivationTime) >= 300.00000000){");
      oxy("trSetLighting(\"New England Start\", 130.00000000);");
      oxy("xsDisableRule(\"_1start\");");
      oxy("xsEnableRule(\"_2start\");");
      oxyZ("}} /*");

      int LightingType = rmRandInt(1,2);         /*这里弄了个随机数,用来判断数值大小,然后设定不同的照明*/

      oxy("rule _2start inactive runImmediately { ");
      oxy("if((trTime()-cActivationTime) >= 130.00000000){");
                If ( LightingType == 1 )
                        {
                        oxy("trSetLighting(\"yellow_river\", 140.00000000);");
                        }
                If ( LightingType == 2 )
                        {
                        oxy("trSetLighting(\"yukon\", 140.00000000);");
                        }
      oxy("xsDisableRule(\"_2start\");");
      oxy("xsEnableRule(\"_3patagonia\");");
      oxyZ("}} /*");

      oxy("rule _3patagonia inactive runImmediately { ");
      oxy("if((trTime()-cActivationTime) >= 140.00000000){");
      oxy("trSetLighting(\"spcCC5b\", 150.00000000);");
      oxy("xsDisableRule(\"_3patagonia\");");
      oxy("xsEnableRule(\"_4hcrevolution4\");");
      oxyZ("}} /*");

      oxy("rule _4hcrevolution4 inactive runImmediately { ");
      oxy("if((trTime()-cActivationTime) >= 150.00000000){");
      oxy("trSetLighting(\"hc_revolution\", 250.00000000);");
      oxy("xsDisableRule(\"_4hcrevolution4\");");
      oxy("xsEnableRule(\"_6lISBOM\");");                                 /*开启触发程序_6lISBOM,你会发现从这个触发程序开始后,会从_6lISBOM无限循环到_4hcrevolution4*/
      oxyZ("}} /*");

      // ******************************************** Trigger End ********************************************
      /*第二种触发程序结尾,所有触发程序必须添加在这个触发程序上面*/
      oxy("rule _Temp inactive { if(true){");
      oxyZ("xsDisableSelf();");
      // *****************************************************************************************************


德州游骑兵 发表于 2020-11-14 13:28:43

帝国时代3决定版怎么修改不会 好难不会{:4_97:}

德州游骑兵 发表于 2020-11-14 13:30:49

帝国时代3有人教过我修改过后忘记了怎么修改 现在修改决定版不会了{:8_296:}

德州游骑兵 发表于 2020-11-14 13:34:13

修改在那个文件都不知道

こはね 发表于 2020-11-14 18:37:21

德州游骑兵 发表于 2020-11-14 13:34
修改在那个文件都不知道

跟原版基本上一样
页: [1]
查看完整版本: 给地图添加昼夜循环触发