英雄无敌3-WoG中文站

标题: 【已解决】如何取消裸奔及裸城? [打印本页]

作者: 水流行险    时间: 2021-2-3 06:25
标题: 【已解决】如何取消裸奔及裸城?
本帖最后由 水流行险 于 2021-6-1 02:22 编辑

战斗胜利后,胜利的一方没有部队只剩下宠物后,随机增加几个低级部队,如英雄招募时带的部队。这样避免守城的英雄战胜后没有部队了,但下一个电脑的连续攻击会直接占领城市,因为没有部队的英雄视为不存在的“幽灵状态”。请版主和高手指点?

逻辑应该是:

战后生成
检查胜利一方1234567的部队
如果为0
检查英雄所属种族
则增加1级2级的兵随机数量1-10个

作者: fhx    时间: 2021-2-3 08:26
没看明白呢,封魔里面开始经常裸奔啊
作者: lztzero123    时间: 2021-2-3 09:52
fhx 发表于 2021-2-3 08:26
没看明白呢,封魔里面开始经常裸奔啊

封魔好像不能裸奔哪,至少带个凤凰放末日吧
作者: iq7paradise    时间: 2021-2-3 14:45
还不如给魔法塔添加复活、英雄添加中土来的简单呢……
作者: 圣战骑兵    时间: 2021-2-8 09:49
出城不就没这事了嘛
作者: 水流行险    时间: 2021-2-8 18:45
圣战骑兵 发表于 2021-2-8 09:49
出城不就没这事了嘛

电脑的回合,两个电脑连续攻城,第二次的时候没有兵了,只有追随者和指挥官。
作者: 水流行险    时间: 2021-2-20 16:24
@canary @XEricSin @贤知有您
作者: XEricSin    时间: 2021-2-20 21:27
我这里有英雄没兵的城也会触发战斗,你的情况我复现不了。
如果你实在想用erm实现你的想法,可以考虑
!?BG1;
!!BU:C=1;[战斗是否结束]
!!BA&1:M..[设置英雄部队]
作者: 水流行险    时间: 2021-2-21 00:31
XEricSin 发表于 2021-2-20 21:27
我这里有英雄没兵的城也会触发战斗,你的情况我复现不了。
如果你实在想用erm实现你的想法,可以考虑
!?B ...

!?BG1;
!!BU:C=1;[战斗是否结束]
检查部队是否为0
如果为0则
检查英雄所属城镇
!!BA&1:M#1/#2/$1/$2;[设置英雄部队]设置战斗中的怪物.
   #1 = 攻击方的怪物(0)或防守方的怪物(1) 见 格式 C
   #2 = 位置编号 (0..6)
   $1 = 怪物类型 (使用 -1 为某一位置无)
   $2 = 怪物数量
作者: XEricSin    时间: 2021-2-21 12:19
水流行险 发表于 2021-2-21 00:31
!?BG1;
!!BU:C=1;[战斗是否结束]
检查部队是否为0

具体你自己设条件吧,注意那个&1的位置,BU:C=1是获取结束状态到标记1。
作者: 水流行险    时间: 2021-2-21 19:00
XEricSin 发表于 2021-2-21 12:19
具体你自己设条件吧,注意那个&1的位置,BU:C=1是获取结束状态到标记1。

要帮忙!因为BA:M的第一项就分攻击方和防守方的了!如何和等级相挂钩?
作者: XEricSin    时间: 2021-2-21 21:45
什么等级?

作者: 水流行险    时间: 2021-2-21 23:45
XEricSin 发表于 2021-2-21 21:45
什么等级?

加英雄所属城镇的1级兵
作者: XEricSin    时间: 2021-2-22 00:20
水流行险 发表于 2021-2-21 23:45
加英雄所属城镇的1级兵

你直接按生物编号加吧,比如0号枪兵是天使城
作者: 水流行险    时间: 2021-3-10 01:04
XEricSin 发表于 2021-2-22 00:20
你直接按生物编号加吧,比如0号枪兵是天使城

@Archer30
还是搞不定!我的脚本就剩下这个地方就完美了
作者: Archer30    时间: 2021-3-10 22:14
水流行险 发表于 2021-3-10 01:04
@Archer30
还是搞不定!我的脚本就剩下这个地方就完美了

我写了个脚本上来。战后以及过天如果裸奔的话,会强行塞一个同族1级兵。这个脚本仅适用于ERA 3
  1. ZVSE2
  2. ; Author:   Archer30
  3. ; Engine:   ERM 2.0+
  4. ; Requires: ERA 3.4+, Era Erm Framework, WoG Scripts (80 base)

  5. ; This script gives a 1st level creature native to the hero if a hero is with no creatue at the end of a battle/turn.


  6. ; ============== SETTINGS ==============
  7. !#VRi^armedhero_on^:S(TRUE);            [This script will be activated only if true]
  8. ; ============ END SETTINGS ============


  9. !?FU(armedhero_RestrainValues);
  10. !!VRi^armedhero_on^:F(FALSE)/(TRUE);  

  11. !#FU(armedhero_RestrainValues):P;

  12. !?FU(OnGameEnter)&i^armedhero_on^;
  13. !!UN:C5102718/4/?(dismissLast:y);       [check if dismiss last stack is enabled]
  14. !!UN:C5968130/4/?(transferLast:y);      [check if transfer last stack is enabled]
  15. !!VRi^armedhero_on^|(dismissLast)<>2114058371/(transferLast)<>14844943:S(FALSE); [end function if hero without army is allowed]

  16. !?FU(OnAfterBattleUniversal)&i^armedhero_on^;
  17. !!BA:H0/?(heroLeft:y) H1/?(heroRight:y);
  18. !!FU(armedhero_EnsureHeroesHaveArmies)&(heroLeft)>(NO_HERO):P(heroLeft);
  19. !!FU(armedhero_EnsureHeroesHaveArmies)&(heroRight)>(NO_HERO):P(heroRight);

  20. !?FU(WOG_EndOfTurn)&i^armedhero_on^;
  21. !!OW:C?(player:y);

  22. !!re i/(HERO_FIRST)/(HERO_LAST_WOG);
  23.   !!HEi:O?(heroOwner:y);
  24.   !!FU(armedhero_EnsureHeroesHaveArmies)&(heroOwner)=(player):Pi;
  25. !!en;

  26. !?FU(armedhero_EnsureHeroesHaveArmies);
  27. !#VA(hero:x);
  28. !#VA(firstLevelMons[9]:y);

  29. !!VR(firstLevelMons):C(MON_PIKEMAN)/(MON_CENTAUR)/(MON_GREMLIN)/(MON_IMP)/(MON_SKELETON)/(MON_TROGLODYTE)/(MON_GOBLIN)/(MON_GNOLL)/(MON_PIXIE);

  30. !!re i/(ARMY_SLOT_FIRST)/(ARMY_SLOT_LAST); [check for all slots of the hero]
  31.   !!HE(hero):C0/i/?(monType:y)/?(monCount:y);

  32.   !!FU&(monType)<>(NO_MON):E;
  33. !!en;

  34. !!HE(hero):B2/?(class:y);               [Check for type of hero if the hero is with no army]
  35. !!VR(townType:y):S(class) :2;
  36. !!HE(hero):C2/(firstLevelMons[townType])/1/0; [add in first level creature according to type of hero]
复制代码



作者: 水流行险    时间: 2021-3-10 23:27
Archer30 发表于 2021-3-10 22:14
我写了个脚本上来。战后以及过天如果裸奔的话,会强行塞一个同族1级兵。

ZVSE2

哇!就是这样!可是怎么没有函数填上去呢?
作者: Archer30    时间: 2021-3-10 23:29
水流行险 发表于 2021-3-10 23:27
哇!就是这样!可是怎么没有函数填上去呢?

ERA 3(ERM 2)函数和变量都可以用名词表示
作者: 水流行险    时间: 2021-3-10 23:30
本帖最后由 水流行险 于 2021-3-10 23:33 编辑
Archer30 发表于 2021-3-10 23:29
这是ERA 3(ERM 2)的语法,函数都是用字符表示的

我放进去了,没有反应啊?我看了80,是这样的啊!真奇怪!我把这个脚本放到80里面吗?


作者: Archer30    时间: 2021-3-10 23:31
水流行险 发表于 2021-3-10 23:30
我放进去了,没有反应啊?

你必须新建一个ERM文件,然后把我的脚本贴进去。

注意,最前面必须是ZVSE2。。必须用ERA 3.3+。如果开启了允许裸奔的选项或插件的话,脚本就不会生效。

作者: 水流行险    时间: 2021-3-10 23:40
Archer30 发表于 2021-3-10 23:31
你必须新建一个ERM文件,然后把我的脚本贴进去。

注意,最前面必须是ZVSE2。。必须用ERA 3.3+。如果开 ...

高手!革新了我的认知!!
谢谢您的帮助!我的妩媚完美脚本终于完成了
作者: Archer30    时间: 2021-3-10 23:43
水流行险 发表于 2021-3-10 23:40
高手!革新了我的认知!!
谢谢您的帮助!我的妩媚完美脚本终于完成了

感谢测试
作者: 水流行险    时间: 2021-5-31 17:33
Archer30 发表于 2021-3-10 23:31
你必须新建一个ERM文件,然后把我的脚本贴进去。

注意,最前面必须是ZVSE2。。必须用ERA 3.3+。如果开 ...

还有一个问题?同样,防止裸城,应该改哪里?
作者: Archer30    时间: 2021-6-1 01:41
水流行险 发表于 2021-5-31 17:33
还有一个问题?同样,防止裸城,应该改哪里?

裸城也不行了?
那我写一下。每回合遍历所有城镇,如果裸城就添加对应的一级兵。战后也会检查。不过有驻守城镇的英雄或者来访英雄都会跳过检查。
  1. ZVSE2
  2. ; Author:   Archer30
  3. ; Engine:   ERM 2.0+
  4. ; Requires: ERA 3.4+, Era Erm Framework, WoG Scripts (80 base)

  5. ; Give a 1st level creature native to the town if a town has no creatue at the end of a battle/turn.


  6. ; ============== SETTINGS ==============
  7. !#VRi^townguards_on^:S(TRUE);           [This script will be activated only if true]
  8. ; ============ END SETTINGS ============


  9. !?FU(townguards_RestrainValues);
  10. !!VRi^townguards_on^:F(FALSE)/(TRUE);

  11. !#FU(townguards_RestrainValues):P;

  12. !?FU(WOG_EndOfTurn)&i^townguards_on^;
  13. !#VA(x:y) (y:y) (z:y);

  14. !!OW:C?(player:y);
  15. !!VR(x):S-1;

  16. !!re i;                                 [loop though all towns]
  17.   !!UN:U(OBJ_TOWN)/(ANY_OBJ)/-1/(x)/(y)/(z);
  18.   !!br&(x)<0;

  19.   !!CA(x)/(y)/(z):O?(owner:y);
  20.   !!CA(x)/(y)/(z):H0/?(garrisonHero:y) H1/?(visitingHero:y); [check for garrison / visiting hero]
  21.   !!FU(townguards_EnsureTownsAreGuarded)&(player)=(owner)/(garrisonHero)=(NO_HERO)/(visitingHero)=(NO_HERO):P(x)/(y)/(z);
  22. !!en;

  23. !?FU(OnAfterBattleUniversal)&i^townguards_on^;
  24. !!OBi^battle_x^/i^battle_y^/i^battle_z^:T?(type:y);

  25. !!if&(type)=(OBJ_TOWN);
  26.   !!CAi^battle_x^/i^battle_y^/i^battle_z^:H0/?(garrisonHero:y) H1/?(visitingHero:y);
  27.   !!FU(townguards_EnsureTownsAreGuarded)&(garrisonHero)=(NO_HERO)/(visitingHero)=(NO_HERO):Pi^battle_x^/i^battle_y^/i^battle_z^;
  28. !!en;

  29. !?FU(townguards_EnsureTownsAreGuarded);
  30. !#VA(x:x) (y:x) (z:x);
  31. !#VA(firstLevelMons[9]:y);

  32. !!VR(firstLevelMons):C(MON_PIKEMAN)/(MON_CENTAUR)/(MON_GREMLIN)/(MON_IMP)/(MON_SKELETON)/(MON_TROGLODYTE)/(MON_GOBLIN)/(MON_GNOLL)/(MON_PIXIE);

  33. !!re (slotInd:y)/(ARMY_SLOT_FIRST)/(ARMY_SLOT_LAST);
  34.   !!CA(x)/(y)/(z):M2/(slotInd)/?(monType:y)/?(monCount:y);

  35.   !!FU&(monType)<>(NO_MON):E;
  36. !!en;

  37. !!CA(x)/(y)/(z):T?(townType:y);       [Check type of the town if the town is with no army]
  38. !!CA(x)/(y)/(z):M2/(ARMY_SLOT_FIRST)/(firstLevelMons[townType])/1; [add in first level creature according to the type of town]
复制代码




作者: 水流行险    时间: 2021-6-1 02:21
Archer30 发表于 2021-6-1 01:41
裸城也不行了?那我写一下。回合结束遍历所有城镇,如果裸城就添加对应的一级兵。这个就不涉及战 ...

这些码好漂亮啊
作者: 水流行险    时间: 2021-6-1 02:45
本帖最后由 水流行险 于 2021-6-1 02:48 编辑
水流行险 发表于 2021-6-1 02:21
这些码好漂亮啊

我的目的是让防止裸奔和裸城为守城服务,就是一定会发生守城战。

//从魔法行会要招募的8级生物守护神
!?BF&1000;战斗开始前时设置战场   加&1000是只有人类参加时
!!BA:S?y3; 检测是否是攻城
!!FU&y3=0:E;如果不是攻城则退

!!CA998:T?y17;获取城镇的类型
! !CA998:B3/0;检查编号为0一级魔法行会 守护神建筑是否建造    最好改为1级1/3 --3/3--5/3倍数对应魔法行会
! !FU&-1:E;[没有神器]   ------空白的三行是原始脚本

!!VRi:S0;等级数初始化
!!CA998:B3/0;检查1级
!!VRi&1:+1;等级数+1
!!CA998:B3/1;检查2级
!!VRi&1:+1;等级数+1
!!CA998:B3/2;检查3级
!!VRi&1:+1;等级数+1
!!CA998:B3/3;检查4级
!!VRi&1:+1;等级数+1
!!CA998:B3/4;检查5级
!!VRi&1:+1;等级数+1    现状 i=等级数

!!BH1:N?y30;检测守城英雄编号???守城英雄?如果没有守城英雄则退出。
!!FU&y30<0:E;[没有英雄就退出]---------------应改为没有英雄就等于0,怎么改?
!!HEy30:Ed/?y29;检测守城英雄等级

!!VRy10:S0;[获得最高英雄等级]
!!re y1/0/155/1:;
  !!HEy1:O?y2 Ed/?y3/1;
  !!if&y2=你要的颜色/y3>y10:;
      !!VRy10:Sy3;[记录最高等级]
  !!en:;
!!en:;

!!VRy28:Sy17+150;设置怪物类型为城镇类型+150
! !VRy27:Sy29:1;召唤的数量跟守城英雄等级挂钩*或:
! !VRy27:Sy29:i;召唤的数量跟守城英雄等级成正比同时与魔法行会等级成反比:
!!VRy27:Sy29+y10:i;召唤的数量跟(守城英雄等级+最高英雄等级)成正比同时与魔法行会等级成反比:
!!BU:Sy28/y27/97/1/-1/0;在指定位置上召唤与英雄等级数量得8级怪物 97中心城门


作者: 水流行险    时间: 2021-6-1 03:10
Archer30 发表于 2021-6-1 01:41
裸城也不行了?那我写一下。每回合遍历所有城镇,如果裸城就添加对应的一级兵。这个就不涉及战后的检 ...

这个也要攻城战后检查啊,如果两个电脑连续攻击,就会出现漏洞,这和英雄裸奔一样。
作者: Archer30    时间: 2021-6-1 03:24
水流行险 发表于 2021-6-1 03:10
这个也要攻城战后检查啊,如果两个电脑连续攻击,就会出现漏洞,这和英雄裸奔一样。

你一直在提这个连续攻击会产生bug的问题,这边不能复现。
你的城如果在战后没有兵,那么这场战斗你的城已经失守了(除非你的城有一个裸奔的英雄带指挥官)。如果不是,上传存档看看

这个添加兵力的功能是在OnEveryDay上触发的,所有颜色的玩家行动前,都会触发一次

作者: 水流行险    时间: 2021-6-1 03:29
Archer30 发表于 2021-6-1 03:24
你一直在提这个连续攻击会产生bug的问题,这边不能复现。你的城如果在战后没有兵,那么这场战斗你的城 ...

我的兵都是放置的“预备役”;就是赢了以后这些兵都会清零。然后这时下一个电脑又会来。如果是有守城英雄,英雄战后就会自动多出一个小兵,就可以继续战斗

!!FU&y30<0:E;[没有英雄就退出]---------------应改为没有英雄就等于0,怎么改?
作者: Archer30    时间: 2021-6-1 03:55
水流行险 发表于 2021-6-1 03:29
我的兵都是放置的“预备役”;就是赢了以后这些兵都会清零。然后这时下一个电脑又会来。如果是有守城英雄 ...

总的来说,对于需不需要检测战后防止裸城的问题。

1. 你的城有英雄——那么英雄会有防止裸奔的脚本强行加兵
2. 你的城没有英雄——那么战后你的城如果没兵,说明已经战败了。战败后,新城主如果让这个城保持裸城,那么在下一个玩家行动前这个城会被防止裸城脚本强行塞兵

结论:裸城脚本不需要检测战后,没错?

这里没看懂“没有英雄就等于0”,具体什么等于0?
如果是BH:N的检测结果不准确,试试BA:H,也是检测英雄的

防止裸城的脚本加入了驻守和来访英雄的检查,如果有这两个英雄其中之一,则跳过加兵(有英雄的话会被防止英雄裸奔的脚本加兵的)
作者: 水流行险    时间: 2021-6-1 04:39
本帖最后由 水流行险 于 2021-6-1 04:44 编辑
Archer30 发表于 2021-6-1 03:55
总的来说,对于需不需要检测战后防止裸城的问题。

1. 你的城有英雄——那么英雄会有防止裸奔的脚本强 ...

我的城只有一个兵(没有英雄),第一次战斗我的总兵力是一个兵,加上预备役放置的很多兵。然后我在战斗中胜利了,但是这一个兵死了,同时预备役放置的兵在战后会清理。这时,城镇没有易主,接着,第二个电脑又来攻城。如果我没有一个小兵,就视为空城,不触发攻城战,城镇立即易主。所以要战后裸城检查。


关于召唤八级生物,没有守城英雄时,让其等级为0,不应该终止函数,所以两个红字的地方要修改一下。
!!VRy27:Sy29+y10:i;召唤的数量跟(守城英雄等级+最高英雄等级)成正比同时与魔法行会等级成反比



ZVSE
**守城方开始战斗前自动增加预备役
**战后不保留部队
**EXricSin制作,2016.3.22于wog论坛编辑,独孤求败收录铭记
**FU29423-29425
===================================================

//从魔法行会要招募的8级生物守护神
!?BF&1000;战斗开始前时设置战场   加&1000是只有人类参加时
!!BA:S?y3; 检测是否是攻城
!!FU&y3=0:E;如果不是攻城则退

!!CA998:T?y17;获取城镇的类型

!!VRi:S0;等级数初始化
!!CA998:B3/0;检查1级
!!VRi&1:+1;等级数+1
!!CA998:B3/1;检查2级
!!VRi&1:+1;等级数+1
!!CA998:B3/2;检查3级
!!VRi&1:+1;等级数+1
!!CA998:B3/3;检查4级
!!VRi&1:+1;等级数+1
!!CA998:B3/4;检查5级
!!VRi&1:+1;等级数+1    现状 i=等级数

!!BH1:N?y30;检测守城英雄编号???守城英雄?如果没有守城英雄则退出。
!!FU&y30<0:E;[没有英雄就退出]---------------应改为没有英雄就等于0
!!HEy30:Ed/?y29;检测守城英雄等级

!!VRy10:S0;[获得最高英雄等级]
!!re y1/0/155/1:;
  !!HEy1:O?y2 Ed/?y3/1;
  !!if&y2=你要的颜色/y3>y10:;
      !!VRy10:Sy3;[记录最高等级]
  !!en:;
!!en:;

!!VRy28:Sy17+150;设置怪物类型为城镇类型+150
!!VRy27:Sy29+y10:i;召唤的数量跟(守城英雄等级+最高英雄等级)成正比同时与魔法行会等级成反比:
!!BU:Sy28/y27/97/1/-1/0;在指定位置上召唤与英雄等级数量得8级怪物 97中心城门

===================================================

//从高级到低级检测要招募的预备役生物
!?BF&1000;战斗开始前时设置战场   加&1000是只有人类参加时
!!BA:S?y4; 检测是否是攻城
!!FU&y4=0:E;如果不是攻城则退

**y8y9=0by default
!!CA998:T?y17;获取城镇的类型

  !!CA998:B3/43;检查编号为高级巢穴7的建筑是否建造
  !!VRy18:S0;
  !!VRy18&1:S1-y8;
  !!UN:Ty17/6/y18/?y26; //monster type
  !!FU29424:Py26/6/y9; //buy y26 /level 6/single recruit

  !!CA998:B3/42;检查编号为高级巢穴6的建筑是否建造
  !!VRy18:S0;
  !!VRy18&1:S1-y8;
  !!UN:Ty17/5/y18/?y25; //monster type
  !!FU29424:Py25/5/y9; //buy y25

  !!CA998:B3/41;检查编号为高级巢穴5的建筑是否建造
  !!VRy18:S0;
  !!VRy18&1:S1-y8;
  !!UN:Ty17/4/y18/?y24; //monster type
  !!FU29424:Py24/4/y9; //buy y24

  !!CA998:B3/40;检查编号为高级巢穴4的建筑是否建造
  !!VRy18:S0;
  !!VRy18&1:S1-y8;
  !!UN:Ty17/3/y18/?y23; //monster type
  !!FU29424:Py23/3/y9; //buy y23

  !!CA998:B3/39;检查编号为高级巢穴3的建筑是否建造
  !!VRy18:S0;
  !!VRy18&1:S1-y8;
  !!UN:Ty17/2/y18/?y22; //monster type
  !!FU29424:Py22/2/y9; //buy y22

  !!CA998:B3/38;检查编号为高级巢穴2的建筑是否建造
  !!VRy18:S0;
  !!VRy18&1:S1-y8;
  !!UN:Ty17/1/y18/?y21; //monster type
  !!FU29424:Py21/1/y9; //buy y21

  !!CA998:B3/37;检查编号为高级巢穴1的建筑是否建造
  !!VRy18:S0;
  !!VRy18&1:S1-y8;
  !!UN:Ty17/0/y18/?y20; //monster type
  !!FU29424:Py20/0/y9; //buy y20


!?FU29424; //征召怪物编号 x1/等级 x2/x3=是否单招(0 or 2)
!!CA998:M1/x2/?y12/?y13; //current reserve
!!VRy1:S1000000; //min recruits by resources
!!VRy1&y13<=y12/y1>y12:Sy12; //min recruits by reserve
!!VRy1&y13>y12/y1>y13:Sy13; //min recruits by reserve UP
!!FU&y1=0:E; //end if no available
!!DO29425/0/10/1:Px1/y1;//place on field


!?FU29425; //放置怪物 x1=type x2=quantity
!!VRy10&x16=0:S14; //设置当前格子
!!VRy10&x16=1:S184;
!!VRy10&x16=2:S47;
!!VRy10&x16=3:S149;
!!VRy10&x16=4:S81;
!!VRy10&x16=5:S115;
!!VRy10&x16=6:S31;
!!VRy10&x16=7:S167;
!!VRy10&x16=8:S65;
!!VRy10&x16=9:S133;
!!VRy10&x16=10:S99;
!!VRy11:Sy10-1; //设置前一个格子

!!MA:Xx1/?y1;检测怪物属性
!!VRy1:&1;//双格兵?
!!BU:Oy10/?y2 Ey10/?y3; //检测当前格子是否已占
!!VRy6:Sy2 &4; //quick sand
!!VRy7:Sy2 &8; //mine
!!BU:Oy11/?y4 Ey11/?y5; //检测前一个格子是否已占
!!VRy8:Sy4 &4;
!!VRy9:Sy4 &8;

!!if|y2=0/y6=4/y7=8:; //当前格子是否已占
  !!FU&y3>-1:E; //end if occupied
  !!if&y1=0:; //单格兵直接召唤
    !!BU:Sx1/x2/y10/1/-1/0;          放置x1类型x2数量y3位置1右边-1无编号0不重画
    !!VRx16:S1000000;
  !!el:; //双格兵还要检测前一个格子是否已占
    !!if|y4=0/y8=4/y9=8:;
      !!FU&y5>-1:E; //end if occupied
      !!BU:Sx1/x2/y10/1/-1/0;summon  放置x1类型x2数量y3位置1右边-1无编号0不重画
      !!VRx16:S1000000;
    !!en:;
  !!en:;
!!en:;

===================================================

//战后清理战场和城镇

!?BA1&1000; 战后触发  加&1000是只有人类参加时
!!BA:S?y1; //检测攻城?
!!FU&y1=0:E;

!!BA:H0/?y3; //attacker hero
!!HEy3:O?y4;
!!FU&y4<0:E;

**如果攻城胜利则巢穴清零
!!CA998:M1/0/0/0;
!!CA998:M1/1/0/0;
!!CA998:M1/2/0/0;
!!CA998:M1/3/0/0;
!!CA998:M1/4/0/0;
!!CA998:M1/5/0/0;
!!CA998:M1/6/0/0;

***Erm over***





作者: Archer30    时间: 2021-6-1 05:01
水流行险 发表于 2021-6-1 04:39
我的城只有一个兵(没有英雄),第一次战斗我的总兵力是一个兵,加上预备役放置的很多兵。然后我在战斗中 ...

那确实必须战后检查,这应该能搞定?核心检查条件在取消英雄裸奔的脚本已经写清楚了

这里的红字问题我还是没有完全理解。你用i这个变量表示等级,那么等级为0:
  1. !!VRi&y30<0:S0;
复制代码

非常直白

但后边这个红字很难理解为什么这么设置(以及你的问题是啥?),为什么打算和魔法行会等级成反比?除以任何数之前都必须检查数是否为0,不然会有ERM错误,前面的语句已经让魔法行会为0级或没有守城英雄时i为0了,这里你打算怎么处理呢?考虑魔法行会0级或守城英雄不存在时,i为1,每加一级魔法行会,i+1?

另外的问题是,如果没有驻地的英雄,则来访英雄在攻城战中也会加入战斗,这在你的脚本中没有考虑呀
作者: 水流行险    时间: 2021-6-1 15:10
本帖最后由 水流行险 于 2021-6-1 16:14 编辑
Archer30 发表于 2021-6-1 05:01
那确实必须战后检查,这应该能搞定?核心检查条件在取消英雄裸奔的脚本已经写清楚了

这里的红字问题我 ...

来访英雄不用考虑,游戏的硬码会自动处理,当城镇里面有英雄就是野战,没有英雄就是攻城战。

以下是脚本的原型,表示在守城战在97位置召唤八级生物数量=守城英雄等级/该城魔法行会等级。我要变成数量=(守城英雄等级+该势力最高英雄等级)/该城魔法行会等级。仅此而已。主要是解决电脑不守城出现的偷城现象。


ZVSE
**守城方开始战斗前自动增加预备役
**战后不保留部队
**EXricSin制作,2016.3.22于wog论坛编辑,独孤求败收录铭记
**FU29423-29425
===================================================

//从魔法行会要招募的8级生物守护神
!?BF&1000;战斗开始前时设置战场   加&1000是只有人类参加时
!!BA:S?y3; 检测是否是攻城
!!FU&y3=0:E;如果不是攻城则退
!!CA998:T?y17;获取城镇的类型
!!VRi:S0;等级数初始化
!!CA998:B3/0;检查1级
!!VRi&1:+1;等级数+1
!!CA998:B3/1;检查2级
!!VRi&1:+1;等级数+1
!!CA998:B3/2;检查3级
!!VRi&1:+1;等级数+1
!!CA998:B3/3;检查4级
!!VRi&1:+1;等级数+1
!!CA998:B3/4;检查5级
!!VRi&1:+1;等级数+1    现状 i=等级数

!!BH1:N?y30;检测守城英雄编号???守城英雄?如果没有守城英雄则退出。
!!FU&y30<0:E;[没有英雄就退出]
!!HEy30:Ed/?y29;检测守城英雄等级
!!VRy28:Sy17+150;设置怪物类型为城镇类型+150
!!VRy27:Sy29:i;召唤的数量跟(守城英雄等级)成正比同时与魔法行会等级成反比:
!!BU:Sy28/y27/97/1/-1/0;在指定位置上召唤与英雄等级数量得8级怪物 97中心城门

作者: Archer30    时间: 2021-6-1 18:22
水流行险 发表于 2021-6-1 15:10
来访英雄不用考虑,游戏的硬码会自动处理,当城镇里面有英雄就是野战,没有英雄就是攻城战。

以下是脚 ...

我终于看懂了

看看是不是这么一回事
魔法行会等级为0和1,都是除以1
  1. //从魔法行会要招募的8级生物守护神
  2. !?BF&1000;战斗开始前时设置战场   加&1000是只有人类参加时
  3. !!BA:S?y3; 检测是否是攻城
  4. !!FU&y3=0:E;如果不是攻城则退

  5. !!CA998:T?y17;获取城镇的类型

  6. !!VRy11:S0;等级数初始化
  7. !!CA998:B3/0;检查1级
  8. !!VRy11&1:+1;等级数+1
  9. !!CA998:B3/1;检查2级
  10. !!VRy11&1:+1;等级数+1
  11. !!CA998:B3/2;检查3级
  12. !!VRy11&1:+1;等级数+1
  13. !!CA998:B3/3;检查4级
  14. !!VRy11&1:+1;等级数+1
  15. !!CA998:B3/4;检查5级
  16. !!VRy11&1:+1;等级数+1    现状y11=等级数
  17. !!VRy11&y11<1:S1;没有魔法行会则将y11设置为1

  18. !!BH1:N?y30;检测守城英雄编号

  19. !!if&y30<0;检测英雄是否存在
  20.   !!VRy29:S0;没有英雄则将y29为0
  21. !!el;
  22.   !!HEy30:Ed/?y29;有英雄则获取守城英雄等级
  23. !!en;

  24. !!BA:O?y31/?y32;检测守城方势力
  25. !!VRy10:S0;获得最高英雄等级

  26. !!re y1/0/155/1:;
  27.   !!HEy1:O?y2 Ed/?y3/1;
  28.   !!if&y2=y32/y3>y10:;
  29.       !!VRy10:Sy3;记录最高等级
  30.   !!en:;
  31. !!en:;

  32. !!VRy28:Sy17 +150;设置怪物类型为城镇类型+150
  33. !!VRy27:Sy29 +y10 :y11;召唤的数量跟(守城英雄等级+最高英雄等级)成正比同时与魔法行会等级成反比:
  34. !!BU:Sy28/y27/97/1/-1/0;在指定位置上召唤与英雄等级数量得8级怪物 97中心城门
复制代码





作者: 水流行险    时间: 2021-6-1 20:15
本帖最后由 水流行险 于 2021-6-1 20:54 编辑
Archer30 发表于 2021-6-1 18:22
我终于看懂了

看看是不是这么一回事

对,是这个意思。没有魔法行会就退出。不是和1级一样。!!VRy11&y11<1:S1;没有魔法行会则将y11设置为1   这里应该是没有魔法行会就退出
还有一点,i与y11,这个https://www.h3wog.com/forum.php?mod=viewthread&tid=54390&extra=page%3D1&page=4




作者: 水流行险    时间: 2021-6-1 21:21
水流行险 发表于 2021-6-1 20:15
对,是这个意思。没有魔法行会就退出。不是和1级一样。!!VRy11&y11

!!FU&y11<1:E;如果没有魔法行会则退
作者: 水流行险    时间: 2021-6-1 22:39
Archer30 发表于 2021-6-1 18:22
我终于看懂了

看看是不是这么一回事
这样可以吗?
ZVSE2
; Author:   Archer30
; Engine:   ERM 2.0+
; Requires: ERA 3.4+, Era Erm Framework

loop through all towns and add in first level creature to the garrison if a town is with no army daily    防止裸城

!?FU(OnEveryDay);                       [add in creature daily]
!!FU(TownMustHaveArmy):P;

!?FU(TownMustHaveArmy);
!#VA(x:y) (y:y) (z:y);                  [define variables to store object coordinates]
!!VR(x):S-1;                            [set x-coordinate to -1 to force to start search from scratch]
!!re i;                                 [endless loop]
  !!SN:F^FindNextObject^/(OBJ_TOWN)/(ANY_OBJ)/?(x)/?(y)/?(z)/-1; [find next town, v1 is (TRUE) on success]
  !!br&v1=(FALSE);                      [exit loop if nothing found]
  !!re f/(ARMY_SLOT_FIRST)/(ARMY_SLOT_LAST);
    !!CA(x)/(y)/(z):M2/f/?(monType:y)/?(monCount:y);
    !!co 2&(monType)>(NO_MON)/(monCount)>0;
  !!en;
  !!CA(x)/(y)/(z):T?t;                  [Check type of the town if the town is with no army]
  !!VR(firstLevelMon[9]:y):C(MON_PIKEMAN)/(MON_CENTAUR)/(MON_GREMLIN)/(MON_IMP)/(MON_SKELETON)/(MON_TROGLODYTE)/(MON_GOBLIN)/(MON_GNOLL)/(MON_PIXIE);
  !!CA(x)/(y)/(z):M2/(ARMY_SLOT_FIRST)/(firstLevelMon[t])/1; [add in first level creature according to the type of town]
!!en;

!?FU(OnAfterBattleUniversal);
!#VA(x:y) (y:y) (z:y);                  [define variables to store object coordinates]
!!VR(x):S-1;                            [set x-coordinate to -1 to force to start search from scratch]
!!re i;                                 [endless loop]
  !!SN:F^FindNextObject^/(OBJ_TOWN)/(ANY_OBJ)/?(x)/?(y)/?(z)/-1; [find next town, v1 is (TRUE) on success]
  !!br&v1=(FALSE);                      [exit loop if nothing found]
  !!re f/(ARMY_SLOT_FIRST)/(ARMY_SLOT_LAST);
    !!CA(x)/(y)/(z):M2/f/?(monType:y)/?(monCount:y);
    !!co 2&(monType)>(NO_MON)/(monCount)>0;
  !!en;
  !!CA(x)/(y)/(z):T?t;                  [Check type of the town if the town is with no army]
  !!VR(firstLevelMon[9]:y):C(MON_PIKEMAN)/(MON_CENTAUR)/(MON_GREMLIN)/(MON_IMP)/(MON_SKELETON)/(MON_TROGLODYTE)/(MON_GOBLIN)/(MON_GNOLL)/(MON_PIXIE);
  !!CA(x)/(y)/(z):M2/(ARMY_SLOT_FIRST)/(firstLevelMon[t])/1; [add in first level creature according to the type of town]
!!en;



作者: Archer30    时间: 2021-6-1 23:01
水流行险 发表于 2021-6-1 22:39
这样可以吗?
ZVSE2
; Author:   Archer30

虽然也行,但效率太差。你不需要在每次战后遍历所有城镇,你只需要在攻城战后检查这场战斗中的防守的城镇是否是裸城
作者: 水流行险    时间: 2021-6-2 00:23
Archer30 发表于 2021-6-1 23:01
虽然也行,但效率太差。你不需要在每次战后遍历所有城镇,你只需要在攻城战后检查这场战斗中的防守的城镇 ...

  这……太难了,快救救我!
作者: 水流行险    时间: 2021-6-2 16:38
Archer30 发表于 2021-6-1 23:01
虽然也行,但效率太差。你不需要在每次战后遍历所有城镇,你只需要在攻城战后检查这场战斗中的防守的城镇 ...

好奇问一下,城镇的建筑物编号是0-43共44个,我如果
!!VRi:S0;等级数初始化
!!CA998:B3/0;检查1级
!!VRi&1:+1;等级数+1
!!CA998:B3/1;检查2级
!!VRi&1:+1;等级数+1
!!CA998:B3/2;检查3级
!!VRi&1:+1;等级数+1
!!CA998:B3/3;检查4级
!!VRi&1:+1;等级数+1
!!CA998:B3/4;检查5级
!!VRi&1:+1;等级数+1    现状 i=等级数

一直……到43,有什么问题吗?也就是说,先建了19号,然后21号,然后才见0号。能运作吗?@Archer30 @XEricSin @贤知有您
作者: Archer30    时间: 2021-6-4 07:36
水流行险 发表于 2021-6-2 00:23
这……太难了,快救救我!

防止英雄裸奔的脚本和防止裸城的脚本都更新了。裸城脚本加入了战后检查。看看是不是这么一回事
作者: 水流行险    时间: 2021-6-4 22:55
Archer30 发表于 2021-6-4 07:36
防止英雄裸奔的脚本和防止裸城的脚本都更新了。裸城脚本加入了战后检查。看看是不是这么一回事

太好了




欢迎光临 英雄无敌3-WoG中文站 (https://www.h3wog.com/) Powered by Discuz! X3.4