ohd 发表于 2022-5-5 11:42:17

用脚本增加的新的组合宝物,如何才能有组件的效果?

比如增加一个组合宝物,组件为四个拘灵护符:I,II III IV,但是组合后的宝物,在战斗时不会召唤半巫妖。如何实现佩戴一个组合宝物,相当与佩戴了4个拘灵护符,能够召唤数量为11.2倍力量的半巫妖?还有3个加施法次数的宝物:法力罐,组合后能够增加6次施法次数。如何实现,有大神解答一下吗

Archer30 发表于 2022-5-7 16:30:58

ohd 发表于 2022-5-6 08:47
英文不怎么好,看到这么多没见过的的单词,没有说明书,真是搞不明白了呀,大佬要是有空,能不 ...
Summoner's PhylacteryZVSE2
; Author:   Archer30
; Engine:   ERM 2.0+
; Requires: ERA 3.3+

; Allow the #166 artifact to summon targeted monsters on battle start
; The script is not compatible with Advanced Classes Mod


; ============== SETTINGS ==============
!#VRi^summart_art^:S166;               
!#VRi^summart_mon^:S(MON_LICH);         
!#VRi^summart_numPerPower^:S1120;      
; ============ END SETTINGS ============


!?FU(OnBattleRound)&i^battle_round^=0/i^Advanced_Classes_Mod_Active^<>(TRUE);
; Loop through left and right side
!!re i/(BATTLE_LEFT)/(BATTLE_RIGHT);
; Check if any hero has the targeted artifact
!!if&i^battle_hero_%i^>(NO_HERO);
    !!VR(hero:y):S(HERO_SORSHA);
    !!HE(hero):A2/i^summart_art^/?(has:y)/?(equipped:y);

    ; Try to summon if the hero has the targeted art
    !!if&(equipped);
      ; Check if it is eligible to summon (if the stack count is fewer than 20)
      !!FU(summart_CheckIfEligibleToSummon):Pi/?(isEligible:y);

      !!if&(isEligible);
      !!VR(type:y):Si^summart_mon^;
      !!MA:X(type)/?(flags:y);
      !!VR(isWide:y):S(flags) &(MON_FLAG_WIDE);

      !!FU(summart_GetRandomPosition):Pi/(isWide)/?(randPos:y)/3;

      !!if&(randPos)>-1;
          ; Summon the stack and play sound
          !!SN&i^battle_isVisible^:P^SUMNELM^;

          ; Calculate the quantity of summoning
          !!HE(hero):Fd/d/?(pwr:y)/d;
          !!VR(num:y):S(pwr) *i^summart_num^ :100;
         
          !!BU:S(type)/(num)/(randPos)/i/-1/(TRUE);
          ; Add in the flag of summoning creature so the stack ID would be released after killed
          !!BU:E(randPos)/?(stack:y);
          !!BM(stack):Fd|(MON_FLAG_SUMMONED);
      !!en;
      !!en;
    !!en;
!!en;
!!en;

!?FU(summart_CheckIfEligibleToSummon);
!#VA(side:x) (result:x);

!!VR(result):S(FALSE);

!!UN:C6919200/4/?(value:y);
!!VR(address:y):S(side) *4 +21692 +(value);
!!UN:C(address)/4/?(stackNum:y);

!!VR(result)&(stackNum)<21:S(TRUE);

!?FU(summart_GetRandomPosition);
!#VA(side:x) (isWide:x) (randPos:x) (maxColumn:x);

!!VR(randPos):S-1;

; Set max column to 15 (all the columns are allowed) if the parametre wasn't defined
!!FU:A?(numArgs:y);
!!VR(maxColumn)&(numArgs)<4:S15;

!!FU(NewIntArray):P?(validPosArray:y);

; Loop through all the positions and fill in the array for available ones
!!re (pos:y)/1/185;
!!VR(isAvailPos:y):S(TRUE);
    !!FU(summart_CheckIfHexIsFree):P(side)/(pos)/(maxColumn)/?(isAvailPos);

!!if&(isWide)/(isAvailPos);
    !!VR(secPos:y)&(side)=(BATTLE_LEFT):S(pos) +1;
    !!VR(secPos)&(side)=(BATTLE_RIGHT):S(pos) -1;
    !!FU(summart_CheckIfHexIsFree):P(side)/(secPos)/(maxColumn)/?(isAvailPos);
!!en;

!!FU(Array_Push)&(isAvailPos):P(validPosArray)/(pos);
!!en;

; Get a random valid position from the array
!!SN:M(validPosArray)/?(arraySize:y);

!!if&(arraySize)>=1;
!!VR(lastIndex:y):S(arraySize)-1;
!!VR(randPosPtr:y):R0/0/(lastIndex);
!!SN:M(validPosArray)/(randPosPtr)/?(randPos);
!!en;

!?FU(summart_CheckIfHexIsFree);
!#VA(side:x) (pos:x) (maxColumn:x) (isAvailPos:x);

!!VR(isAvailPos):S(TRUE);

!!VR(realColumn:y):S(pos) %17;

; Get the column number to each side
!!if&(side)=(BATTLE_LEFT);
!!VR(column:y):S(realColumn);
!!el;
!!VR(column):S16 -(realColumn);
!!en;

; Store the position if it is not overlapped with a statck, on obstacles or reaches the max column limit
!!if&(column)>0/(column)<=(maxColumn);
!!BU:E(pos)/?(stack:y) O(pos)/?(obstacleFlag:y);
!!VR(isAvailPos)|(stack)>(NO_STACK)/(obstacleFlag)>0:S(FALSE);
!!el;
!!VR(isAvailPos):S(FALSE);
!!en;

用于召唤的宝物、召唤的生物、数量可在Settings区域更改。

Archer30 发表于 2022-5-5 12:56:47

按我理解,你需要重新定义这件组合宝物的效果(从0开始)。不存在更加方便的打开一个开关就可以让组合宝物自动享有单件的效果的东西。

61933291 发表于 2022-5-5 13:06:01

期待大佬做MOD吧

ohd 发表于 2022-5-5 15:04:56

Archer30 发表于 2022-5-5 12:56
按我理解,你需要重新定义这件组合宝物的效果(从0开始)。不存在更加方便的打开一个开关就可以让组合宝物 ...

怎么定义呀?能不能抽空写一个,让小白学习下呀?比如拘灵护符4个组合成一个
我写的:
!!UN:A29/166/217/218/219/220;
!!UN:A166/1/30000;
!!UN:A166/2/9;
!!UN:A166/3/16;
!!UN:A166/4/29;
!!VRz221:S^拘灵神符^;
!!VRz222:S^战斗开始时召唤半巫妖(数量=力量*11.2)。^;
!!UN:A166/9/221;
!!UN:A166/10/222;
这样写可以组合起来,但是不会召唤

Archer30 发表于 2022-5-5 15:16:53

看起来楼主不是进阶职业mod玩家,所以用了166号空白宝物?

定义一件能战前召唤的宝物要仔细说的话有很多细节,这里先说脚本逻辑。
1. 决定召唤时机(比如!?FU(OnSetupBattlefield)、!?FU(OnBattleRound)&i^battle_round^=0)
2. 在这个时机检查左右方英雄是否拥有指定编号的宝物(HE:A2)
3. 为拥有宝物的一方召唤指定数量的生物(BU:S)

逻辑很简单,但是具体在第三步的召唤其实有可以考究的地方(比如召唤的位置,如何寻找战场上一个空白的可用位置)。关于这部分我之前写过一个让敌对的AI玩家每回合召唤生物的脚本模板,楼主可以参考一下用这个脚本改造成你需要的效果。如果链接打不开,或者脚本卡在哪一步,请留言。
The Ultimate Summoner - GitHub

ohd 发表于 2022-5-5 22:48:19

本帖最后由 ohd 于 2022-5-5 22:50 编辑

Archer30 发表于 2022-5-5 15:16
看起来楼主不是进阶职业mod玩家,所以用了166号空白宝物?

定义一件能战前召唤的宝物要仔细说的话有很多 ...
打开了,我先研究下,谢谢大佬回复指点

ohd 发表于 2022-5-6 00:14:43

Archer30 发表于 2022-5-5 15:16
看起来楼主不是进阶职业mod玩家,所以用了166号空白宝物?

定义一件能战前召唤的宝物要仔细说的话有很多 ...

这个脚本里面很多命令和字段在ERM帮助文档里面都找不到,看不懂啊....
第一句!?FU(OnBattleRound)&i^battle_round^>=0/i^battle_hasHuman^/i^battle_humanOnly^<>(TRUE);这里面(OnBattleRound)^battle_round什么的完全看不懂

Archer30 发表于 2022-5-6 00:43:48

ohd 发表于 2022-5-6 00:14
这个脚本里面很多命令和字段在ERM帮助文档里面都找不到,看不懂啊....
第一句!?FU(OnBattleRound)&i^bat ...
这些变量是在Era Erm Framework中定义的。很遗憾,由于版本更迭太快,ERM帮助并没有所有内容。完整的erm用法需要同时查看ERM帮助+ERA2/3更新日志+Era Erm框架mod。

第一句其实对于你来说是不重要的,我的脚本是之前玩家委托我写的脚本,他要求让敌对的电脑可以一直召唤生物打自己,所以我的触发条件是:
第0回合以上的回合,针对同时有电脑和人类玩家的战斗,每回合触发

相信看英文也能猜个大概了。
对于你的情况,实际上你只需要
!?BR&v997=0 也就是 !?FU(OnBattleRound)&i^battle_round^=0; (两者等价,表示第0回合触发)

这里顺带介绍一下触发器的别名。大部分触发器都有ERA 2形式(双字母或者5数字)以及ERA 3的名称形式,可以从这个帖子获取不完全列表。

fhx 发表于 2022-5-6 08:07:25

涉及脚本了,你们这是在玩代码

ohd 发表于 2022-5-6 08:47:22

Archer30 发表于 2022-5-6 00:43
这些变量是在Era Erm Framework中定义的。很遗憾,由于版本更迭太快,ERM帮助并没有所有内容。完整的erm ...

{:5_701:}英文不怎么好,看到这么多没见过的的单词,没有说明书,真是搞不明白了呀,大佬要是有空,能不能替我写一下这个脚本~
就是佩戴166号宝物的英雄(其他宝物也行),战斗开始时,召唤英雄力量*11.2倍的半巫妖~

lksidy 发表于 2022-5-6 11:17:39

玩代码的就是不一样,期待

ohd 发表于 2022-5-7 18:27:05

Archer30 发表于 2022-5-7 16:30
Summoner's Phylactery
用于召唤的宝物、召唤的生物、数量可在Settings区域更改。

大佬我自己写好了哟,这是我照着老版说明书写的,因为找不到合适的召唤位置,我就用了BF触发,凑合着也可以用,发出来给大佬看看:
第一个事件:
ZVSE
!?BF;
!!HE-10:A2/184/?w100/?w101;
!!FU&w101=0:E;
!!HE-10:F?v100/?v101/?v102/?v103;
!!VRv102:*12;
!!BU:S286/v102/90/0/-1/1;
第二个事件
ZVSE
!?BF;
!!BH1:N?y100;
!!FU&y100<0:E;
!!HE-20:A2/184/?w100/?w101;
!!FU&w101=0:E;
!!HE-20:F?v100/?v101/?v102/?v103;
!!VRv102:*12;
!!BU:S286/v102/97/1/-1/1;
感谢大佬的回复指点,感谢大佬的脚本,我会好好学习的{:2_143:}

Archer30 发表于 2022-5-7 20:26:02

ohd 发表于 2022-5-7 18:27
大佬我自己写好了哟,这是我照着老版说明书写的,因为找不到合适的召唤位置,我就用了BF触发,凑合着也可 ...

你的脚本理论上是可行的,细节上可以优化一下,比如:

1. 不要用w变量。w变量是英雄变量,一般只用于区分各个英雄独特的内容,比如战争机器增强III,每个英雄有数量不同的战争机器,用w比较合适。这里用不到w的,用y变量
2. 不要用v变量。v变量是全局变量,一般只用于跨函数传递内容。这里显然所有东西都在函数内消化就行,因此用y变量。
3. 这里的BU:S召唤的位置是固定的。在一些特殊的战场会出问题,比如冒险洞穴各种奇怪地形。我的脚本绝大部分篇幅就是为了找一个合适的召唤位置。有兴趣你可以看看算法,不太理解的话,直接用就行

ohd 发表于 2022-5-8 00:03:03

Archer30 发表于 2022-5-7 20:26
你的脚本理论上是可行的,细节上可以优化一下,比如:

1. 不要用w变量。w变量是英雄变量,一般只用于 ...

好的,变量我随便用的,我改下,感谢大佬

ohd 发表于 2022-5-8 11:58:30

Archer30 发表于 2022-5-7 20:26
你的脚本理论上是可行的,细节上可以优化一下,比如:

1. 不要用w变量。w变量是英雄变量,一般只用于 ...

大佬,我把w变量和v变量全部换为y变量后,脚本出错了
战斗开始后,召唤的半巫妖数量是0
ZVSE
!?BF;
!!HE-10:A2/184/?y100/?y101;
!!FU&y101=0:E;
!!HE-10:F?y100/?y101/?y102/?y103;
!!VRy102:*12;
!!BU:S286/y102/90/0/-1/1;


Archer30 发表于 2022-5-8 12:11:21

ohd 发表于 2022-5-8 11:58
大佬,我把w变量和v变量全部换为y变量后,脚本出错了
战斗开始后,召唤的半巫妖数量是0
ZVSE

y只有1到100

看了一下你用脚本的时候是添加为地图事件?不需要的,将脚本放入 ...\Mods\【你的mod名称】\Data\s 就行,然后去mod管理器加载【你的mod名称】

ohd 发表于 2022-5-8 13:50:42

Archer30 发表于 2022-5-8 12:11
y只有1到100

看了一下你用脚本的时候是添加为地图事件?不需要的,将脚本放入 ...\Mods\【你的mod名称 ...
那个mod文件夹里的脚本文件不会做呀,
感谢大佬指点,我又增加了几个新的组合宝物,加了一些功能,现在没有报错了{:5_752:}

Archer30 发表于 2022-5-8 14:08:39

ohd 发表于 2022-5-8 13:50
那个mod文件夹里的脚本文件不会做呀,
感谢大佬指点,我又增加了几个新的组合宝物,加了一些功能,现在 ...
参考常见问题与解答“我下载了ERM脚本,该放在哪个文件夹”。你的erm应该放在指定的位置,不需要放在地图内。

ohd 发表于 2022-5-8 14:23:30

Archer30 发表于 2022-5-8 14:08
参考常见问题与解答“我下载了ERM脚本,该放在哪个文件夹”。你的erm应该放在指定的位置,不需要放在地图 ...

怎么把事件里的脚本做成erm文件呀?是把脚本复制到txt里,然后把txt的后缀改成erm就行吗?
我有好几个事件,就要分别建立几个txt,把每个事件对应的脚本复制进去,然后全都改成erm
然后都放在同一个Mods\【mod名称】\Data\s文件夹里,然后在管理器里加载一下,这样就能用了吗?

页: [1] 2
查看完整版本: 用脚本增加的新的组合宝物,如何才能有组件的效果?

捐赠