异界行者 发表于 2012-3-10 14:08:30

英雄自动施法脚本优化

2013/4/14 更新:修复些小BUG(具体忘了,因为是早就修复了但没到论坛更新……)。
2012/4/23 更新:修复检测出错BUG。
2012/3/16 更新:加入疗伤魔法判定,毁灭之光判定。


开启英雄特技后,魔法特技英雄会自动施法,不过原来的自动施法有很大瑕疵。比如状态魔法会不停对同一个目标不停施法,对其他生物完全不理会。而且由于堆栈算法的缺陷,导致某些堆栈是100%随机不到的。

于是我做了优化。目前测试情况良好。

以下为原代码

!?FU805;
!!VRv428&v425=0/w30=0:S0;            //v428 is side which will under spell
!!VRv428&v425=0/w30=1:S1;
!!VRv428&v425=1/w30=0:S1;
!!VRv428&v425=1/w30=1:S0;
·
·                         (中间的我这里省略,但是也要去掉)
·
·
!!BHv425:Mv434;
!!HEv433:Sw32/v435;
!!HEv433:Iv429/1;
!!VRv429:Sw29+w31;
!!VRw31&v429<2:S-1*w29+2;            //if chance is more than 1/2 then decrease to 1/2

以下为替换代码

!?FU805;
!!VRv428&v425=0/w30=0:S0;            //v428 is side which will under spell
!!VRv428&v425=0/w30=1:S1;
!!VRv428&v425=1/w30=0:S1;
!!VRv428&v425=1/w30=1:S0;


!!VRy28:S1;
!!VRy28&w28>65/w28<70:S0;            //元素召唤检测
!!VRv437: *5 +3 %8;
!!VRv430:R20 *y28;
!!VRx16:S0;
!!BMv430&v430>-1/v430<42:N?v429;                     //v429 - number of monsters
!!BMv430&v430>-1/v430<42:T?v435;                     //v435 - type of monster
!!VRv429&v435>=145/v435<=149:S0;       //tower arrows and ballistas cannot be target
!!VRv429|v435=122/v435=124/v435=128:S0;


;//小检测段
!!BMv430&v430>-1/v430<42:Gw28/?y20/?y21;               //y20 当前持续时间
!!VRy20&v430>-1/v430<42/w28=47:S0;                           //毁灭之光检测


!!VRy29:Sy20*y28;
!!VRv430|y29>1/v429<=0:R6;                   新查找
!!VRv430&v428=0:%21;         //堆栈矫正
!!VRv430&v428=1:%21+21;      //堆栈矫正
!!BMv430&v430>-1/v430<42:N?v429;
!!BMv430&v430>-1/v430<42:T?v435;
!!VRv429&v435>=145/v435<=149:S0;
!!VRv429|v435=122/v435=124/v435=128:S0;
;//
!!BMv430&v430>-1/v430<42:Gw28/?y20/?y21;               //y20 当前持续时间
!!VRy20&w28=47/v430>-1/v430<42:S0;                           //毁灭之光检测
!!VRy29:Sy20*y28;
!!VRv430|y29>1/v429<=0:R6;                   新查找
!!VRv430&v428=0:%21;         //堆栈矫正
!!VRv430&v428=1:%21+21;      //堆栈矫正
!!BMv430&v430>-1/v430<42:N?v429;
!!BMv430&v430>-1/v430<42:T?v435;
!!VRv429&v435>=145/v435<=149:S0;
!!VRv429|v435=122/v435=124/v435=128:S0;
;//
!!BMv430&v430>-1/v430<42:Gw28/?y20/?y21;               //y20 当前持续时间
!!VRy20&w28=47/v430>-1/v430<42:S0;                           //毁灭之光检测
!!VRy29:Sy20*y28;
!!VRv430|y29>1/v429<=0:R6;                   新查找
!!VRv430&v428=0:%21;         //堆栈矫正
!!VRv430&v428=1:%21+21;      //堆栈矫正
!!BMv430&v430>-1/v430<42:N?v429;
!!BMv430&v430>-1/v430<42:T?v435;
!!VRv429&v435>=145/v435<=149:S0;
!!VRv429|v435=122/v435=124/v435=128:S0;




!!DO646/0/41/1:P;                      //循环检测


!!VRv431:S0;                           //v431 - position to cast if 0 then do not cast
!!BMv430&v429>0:P?v431;


!!VRv429:Sw29+w31-1;                     //v429 - chance is 1 of (w29+w31)
!!VRv432&v431>0/v429>0:S0Rv429;       //randomize v432


!!BMv430&v430>-1/v430<42:Gw28/?y20/?y21;               //y20 当前持续时间
!!BMv430&w28=47/v430>-1/v430<42:D?y22;
!!VRy20&w28=47/y22>0/v430>-1/v430<42:S0;                           //毁灭之光检测


!!VRy23:S0;                        //疗伤魔法
!!VRy24:S0;
!!BMv430&w28=37:L?y23;               //疗伤 检测是否损血
!!VRy24&y23>0:S1;
!!BMv430&y24=0:G42/?y23/?y21;      //疗伤 异常状态检测 检测
!!VRy24&y23>0:S1;
!!BMv430&y24=0:G54/?y23/?y21;
!!VRy24&y23>0:S1;
!!BMv430&y24=0:G45/?y23/?y21;
!!VRy24&y23>0:S1;
!!BMv430&y24=0:G62/?y23/?y21;
!!VRy24&y23>0:S1;
!!BMv430&y24=0:G45/?y23/?y21;
!!VRy24&y23>0:S1;
!!BMv430&y24=0:G52/?y23/?y21;
!!VRy24&y23>0:S1;
!!BMv430&y24=0:G60/?y23/?y21;
!!VRy24&y23>0:S1;
!!BMv430&y24=0:G61/?y23/?y21;
!!VRy24&y23>0:S1;
!!BMv430&y24=0:G50/?y23/?y21;
!!VRy24&y23>0:S1;
!!BMv430&y24=0:G59/?y23/?y21;
!!VRy20&y24=0/w28=37:S10;


!!VRv432&v431>0/v429<1/y20<2:S1;             //if (w29+w31)<=1 that means the time to cast


!!HEv433:I?v429/1;
!!HEv433:I100/1;
!!HEv433:Sw32/?v435;
!!BHv425:M?v434;


!!BG:A?v430;                           //if hero or monster casts spell do not randomly spell
!!VRv432|v430=1/v430=10:S2;




!!BHv425&v432=1/v431>0/y20<2/v429>0:Cw28/v431/v435/0;//v432=1 means that time to cast施法
!!VRw31&v432=1/v431>0/y20<2/w28>0/w28<1000:+w29; //if hero casts spell then w31 increasing by w29 value
!!VRw31&w28>0/w28<1000|v432<>1/v431<=0/y20>1:-1; //w43 keeps addition value that added to w29. w31 decrement every turn and the chance is increasing
!!VRv430:+1;
!!BHv425:Mv434;
!!HEv433:Sw32/v435;
!!HEv433:Iv429/1;


!!VRv429:Sw29+w31;
!!VRw31&v429<2:S-1*w29+2;            //if chance is more than 1/2 then decrease to 1/2
!?FU646;
*//循环段
!!BMv430&v430>-1/v430<42:Gw28/?y20/?y21;               //y20 当前持续时间
!!VRy20&w28=47/v430>-1/v430<42:S0;                           //毁灭之光检测
!!VRy29:Sy20*y28;
!!VRv430|y29>1/v429<=0:+1;                   新查找
!!VRv430&v428=0:%21;         //堆栈矫正
!!VRv430&v428=1:%21+21;      //堆栈矫正
!!BMv430&v430>-1/v430<42:N?v429;
!!BMv430&v430>-1/v430<42:T?v435;
!!VRv429&v435>=145/v435<=149:S0;
!!VRv429|v435=122/v435=124/v435=128:S0;
!!FU&y20<2/v429>0:E;

请将红色字段用绿色字段替换掉。省略部分的也要替换掉。
或者可以用我的脚本文件替换。不过里面还修改了其他特技,修改样例如图。
http://img2081.poco.cn/mypoco/myphoto/20120313/09/6214495620120313094850053.jpg
http://img165.poco.cn/mypoco/myphoto/20120313/09/6214495620120313094905074.jpg



[ 本帖最后由 异界行者 于 2013-4-14 13:59 编辑 ]

fly123 发表于 2012-3-10 15:59:57

good ,thanks.

无心云 发表于 2012-3-10 22:32:27

这个很好,但是我觉得英雄自动施法概率有点低啊

异界行者 发表于 2012-3-10 23:31:29

回复 3# 的帖子

当检测到所有目标都已经有该状态魔法,那么就会停止施法,并且施法概率提高。如果力量足够高,那么只要出现一个没有被魔法覆盖的目标,就会立刻加上去。如果该魔法有群体状态,且对应技能学到专家级,就会施法群体魔法。

这样一来,概率其实非常高了。并且我这里还把原来BT的兵种特长削弱了。魔法特长彻底崛起

睿明 发表于 2012-3-10 23:32:23

如果是卷轴的话 可以实现以下情况吗
1、状态魔法的自动施展 可以加个 已拥有 此状态的 不在 随机 加载 魔法的 范围内
2、如果某生物 附加 拥有初级 的 状态,高级或者专家级的 魔法可以覆盖 低级的魔法, 这样比较合理,
3、如果 同时准备了几个不同魔法卷轴 的,但是某个卷轴的状态已经全部拥有,那么这个卷轴魔法状态的几率减半后转加给 其他卷轴的几率,这样就不重复了,(治疗魔法除外)
4、治疗魔法卷轴 筛选功能, 满血的和没有负面状态的 自动过滤,如果都没有合适的对象那么治疗魔法的情况,吧几率减半,附加到下个回合,
也就是说,一个治疗卷轴的几率是20%,那么这个回合都没有合适的对象, 几率减半后是 10 , 附加到下个回合,就是说下个 回合是30%的几率释放,
;juwe; 5、

睿明 发表于 2012-3-10 23:36:55

原帖由 异界行者 于 2012-3-10 14:08 发表 http://bbs.h3wog.com/images/common/back.gif
开启英雄特技后,魔法特技英雄会自动施法,不过原来的自动施法有很大瑕疵。比如状态魔法会不停对同一个目标不停施法,对其他生物完全不理会。而且由于堆栈算法的缺陷,导致某些堆栈是100%随机不到的。

于是我做了 ...


忘记 提了 最重要的一点就是,魔法特长的英雄的第二技能超过8个(有时候是 超过10个)就会出现2个出错的对话框,反正没到 魔法特长英雄的 行的的时候 不管是 战争机器还是 什么 只要是 东了就 出现那2个对话框 , 是否能解决下

灰狼王子 发表于 2012-3-11 06:33:48

原帖由 睿明 于 2012-3-10 23:36 发表 http://bbs.h3wog.com/images/common/back.gif



忘记 提了 最重要的一点就是,魔法特长的英雄的第二技能超过8个(有时候是 超过10个)就会出现2个出错的对话框,反正没到 魔法特长英雄的 行的的时候 不管是 战争机器还是 什么 只要是 东了就 出现那2个对话框 ...


哥也遇到了,尤其是在玩战役时,每动一下(包括等待和防御)都会蹦出2个出错的对话框,抓狂的不能继续玩了。MS是战争机器加强模式和10个技能冲突的BUG,话说哥是真心喜欢战争机器加强模式啊;iunei; 求高人修正之 ;aim;

[ 本帖最后由 灰狼王子 于 2012-3-11 06:34 编辑 ]

灰狼王子 发表于 2012-3-11 06:40:23

这个很实用,这几天正好玩战役碰上英雄特技是疗伤,二到极点就会对一支健康的没边的部队一个劲的自动释放,其他部队都快死了根本不管不问;iunei;概率倒真是不低;aim;

异界行者 发表于 2012-3-11 09:00:04

回复 5# 的帖子

卷轴的话本来就已经不错了。卷轴的自动施法是不会对同一个部队不停释放状态魔法的。而英雄自动施法,原来是会不停对同一目标施法,但是我优化后已经不会这样了。就如你所说,已经有了状态的单位不在随机范围内。

卷轴自动施法其实已经很完善了,而且我看过脚本,发现里面的内容太多,我不会改;wunai;

另外你们碰到出错,我记得好像是堆栈出错,范围在0-41之外了。我这段代码对堆栈选取优化过,目前没发现错误。
当然也可能因为我开启的设置不一样,所以没出错。不过有一种情况是肯定会出现错误,那就是第2技能大于8样时,如果用了WOG修改器修改了一下英雄,就算修改的不是技能,也会出错。

songfx 发表于 2012-3-11 11:57:41

异界读者终于出手了,赞一个。

songfx 发表于 2012-3-11 12:07:51

打错字了,无法编辑。。。

dadds 发表于 2012-3-11 12:36:27

回复 11# 的帖子

;om; 连管理员都无法编辑??

顺佢自燃 发表于 2012-3-11 17:07:17

想请问下异界行者,原话:“并且我这里还把原来BT的兵种特长削弱了。”,是怎么削弱的?能否再加上一个不削弱的脚本打包供大家下载。。。原因是,习惯了。。。谢谢。。。辛苦了。。。

异界行者 发表于 2012-3-11 17:42:17

回复 13# 的帖子

普通英雄的生物特长,将不再加血和伤害。
战役英雄的生物特长会增加血。

其实你直接按照上面的写的做就行。把红色换成绿色

贤知有您 发表于 2012-3-12 17:06:31

哇,如果特长生物英雄,不加血和伤害,那么特长好像不是太明显..高级英雄本来攻防都高了,那么特长兵种优势好像体现不出来.伤害可以不加,加血也可以吧.

异界行者 发表于 2012-3-12 17:16:36

回复 15# 的帖子

,我削弱兵种特长是因为本来的太变态了。特别是低级兵特长。1级兵特长的英雄带亲兵就像4级一样猛,数量又多。
不过你这么一说我削弱似乎也削弱过头了,那我回头改改吧。

睿明 发表于 2012-4-20 03:20:33

LZ改的 战役特殊英雄特长 我 使用过后觉得还不错, 就是 两边极端化 非常严重。。

像 巨龙摩莉尔 可以升级其他的龙,成为钻石 暗黑,和中立龙, 暗黑 和钻石还好, 升级中立龙就 太BT了 中立龙 起码也是9级兵吧。。
而人类的罗兰德 凯瑟琳 只得升级骑士,6级兵种,怎么看都觉得 怪、、、、

可以修改下 顺便帮我改其他的 不实用的 特长英雄加强下吗 ,,

元素族
格兰登, 他原始 特长+350金币。。实在是没什么用, 帮改为,自带高级土系魔法,和时空之门(也就是回城)
格雷尔,他原始 特长+350金币。。帮改为,自带高级水系魔法,战斗时 全体我方单位自带 魔法神镜,, 如果遇到远程,敌对的 自动施放失忆大法


女巫族
埃德妮(战役英雄),每周1,自我学习火系没有掌握的魔法,从1级开始到5级,战斗时 我方全体免疫火系有害魔法包括末日魔法,可以接受有益的火系魔法,我方全体单位自带火盾,
每场战斗开始时,1-15级 召唤火元素, 15-30级 召唤烈火元素, 30级以上 召唤火元素使者, 数量按照自身力量 而定,


野蛮人
科尔格 你的版本 我很喜欢, 就是去掉 每月加2比蒙的 那个设定就好。
肯洛-哈格 ,再怎么说也是战役英雄,几乎可以说没什么特别的,所以 想改为,拥有野蛮人残忍之斧的那个设定,可能比较好,,


地下城
巨龙摩莉尔,你的这个版本 去掉转职中立龙 和每月给2黑龙的设定就好。
摩莉尔,对带领的红龙和黑龙 生命加10%, 龙族单位每回合恢复最大上限生命的1%。如果有神圣血瓶,的话可以叠加。

鬼族
山德鲁(战役英雄)你的版本是 几率释放魔法神箭, 太普通了,我觉得 女巫的那个随机诅咒魔法的的设定给他, 就是说他带领的可攻击单位攻击时必定附带随机诅咒魔法,包括城的箭塔以及弩车,还有就是他如果拥有鬼王斗篷, 他所召唤的 亡灵 全部是升级单位。 如果他拥有诅咒铠甲, 他带领的攻击单位 拥有不被反击的 特技。
罗德-哈特,你版本的设定很好,想加一个,如果拥有鬼王斗篷 召唤的就是恐怖骑士,他带领的 黑暗骑士,恐怖骑士每一次攻击必定是 致命一击, 恐怖骑士的经验特技说明是100%,但是实际效果并不是这样, 所以 必定出致命一击 这个设定 给他 不错的

地狱族
塞尔伦, 喜欢你的版本, 就是去掉每月给恶魔的设定就好

塔楼
德肯(战役英雄)你的设定很完美我非常喜欢,再加个 他带领的魔幻法师所得的兵种经验 加倍。


壁垒。
珍尼(战役英雄)在战役里就是普通英雄去整容而已。。他拥有的急救帐篷效果加倍,而且初级最低下限是10,中级最低下限50,高级,最低下限100,帐篷生命加倍,他作为半大众,半战役英雄,战役的设定已经很给力了。
格鲁(战役英雄)再加个 他带领的幻影射手所得的兵种经验 加倍。


人类
凯瑟琳(战役英雄)他带领的天使可以拥有一次复活机会,且复活的效果为大天使的一半,大天使施法次数+1可以和其他施法次数叠加,神圣天使施法次数+2可以和其他施法次数叠加,并且效果由原来每1个单位的1000复活点数增加到10000,
罗兰德,他带领的 天使 和 大天使 可以升级为 神圣天使。。。

兽哥哥 发表于 2012-4-20 08:01:48

LS辛苦写这么多全是要将电脑赶尽杀绝的。;hej;

eva2000as 发表于 2012-4-20 08:43:50

原帖由 兽哥哥 于 2012-4-20 08:01 发表 http://bbs.h3wog.com/images/common/back.gif
LS辛苦写这么多全是要将电脑赶尽杀绝的。;hej; 等电脑抽到这些英雄就轮到人脑纠结了=_,=。

睿明 发表于 2012-4-20 15:23:17

原帖由 eva2000as 于 2012-4-20 08:43 发表 http://bbs.h3wog.com/images/common/back.gif
等电脑抽到这些英雄就轮到人脑纠结了=_,=。

这样的情况多的 去了, 不过这样才精彩, 要不然电脑 都是平庸的英雄,不公平吧。。AI本来就不怎么高。

而且 每族都有一2个高级英雄不错的,,
页: [1] 2 3
查看完整版本: 英雄自动施法脚本优化

捐赠