贤知有您 发表于 2012-6-25 22:35:17

战斗前选择隐藏兵种(0626更新战神旗设定)

话说编写这个ERM是为了检验最近的一个小发现.最近发现ERM中的关于VR语句对Z变量有一定的操作能力,于是想到或者可以使用Z变量作为存储多个数据的可能.
这类似于编程的数组.只不过Z变量需要通过一定规律记录一系列数据形式,并通过操作读取出需要的数据.
今天将这个小发现应用于 "战斗前选择隐藏兵种" 上, 原则上需要 7个生物槽*(生物槽位置+生物编号+个数+经验)=28个V变量来记录.
但这里变通一下,只需要一个Z变量记录即可.不信请马上试试以下脚本.
脚本类似"自动战斗"选项,在战斗前给予玩家选择,可以简单避免用到W变量的问题.
顺便奉上TXT脚本及测试地图..详细代码见2楼.













[ 本帖最后由 hanter007 于 2012-6-26 12:51 编辑 ]

贤知有您 发表于 2012-6-25 22:35:30

2012-6-26更新:可以保留战神旗的设定.

ZVSE

**★战斗前选择隐藏部分不参战的兵种★**
**By Hanter007 2012-6-26
**新增Z变量 Z800 (存储被隐藏兵种的信息:生物槽/生物类型/生物个数/生物经验/生物宝物类型/生物宝物选项)
**函数 FU20000 &X1=300/301
**可使用一个V变量来定义是否开启此战斗前选项。(类似开关"快速战斗"选项)
**由于是战前隐藏,战后恢复,战后招魂术带来的兵种在前,所以拥有招魂术的英雄要注意慎重选择.
**玩家甚至可以隐藏所有生物槽的兵种,但请确保战场上仍有其它生物出现(如宠物和追随者),否则一开战即失败.
**战后如果原来的生物槽位置被放置了生物(例如招魂),与原隐藏的生物编号一样则叠加,否则直接由原生物取代.
**战后如果英雄失败或逃跑,被隐藏的生物将消失.
**存在一个隐藏的BUG,但触发条件苛刻,并需重新开始地图且改变是否WOG化的设定.此BUG只在图片显示上有问题,不影响游戏,实际可以无视之.

!#VRz800:S^^;
!?BA0&1000;[战前通用变量准备]
!!BA:H0/?v9555;[进攻方英雄编号到v9555]
!!BA:H1/?v9560;[防御方英雄到v9560]
!!HEv9555&v9555>=0:E?v9549;[攻击方英雄战斗前经验v9549]
!!HEv9560&v9560>=0:E?v9551;[防御方英雄战斗前经验v9551]
!?BA1&1000;[战后通用变量准备]
!!HEv9555&v9555>=0:E?v9550;[攻击方英雄战斗后经验v9550]
!!HEv9560&v9560>=0:E?v9552;[防御方英雄战斗后经验v9552]

!?BA0&1000;
!!VRz800:S^^; [战斗开始,清空Z800的内容]
!!BA:O?y-2/?y-3; [攻击方: y-2, 防御: y-3]玩家颜色
!!OW:Iy-2/?y-4; [攻击方 Human (0) or AI (1): y-4]
!!OW:Iy-3/?y-5; [防御方 hero Human (0) or AI (1): y-5]
!!BA:E?y-6;
!!VRy-6&y-4=1/y-5=1:S1;
!!VRy-7&y-4=0:Sv9555;
!!VRy-7&y-4=1:Sv9560;
!!FU20000&y-6=0:P300/y-7;

!?FU20000&x1=300;
!!EXx2/0:Ad/d/?y13 R?y14/?y15; [第一格:类型/个数/经验值 宝物类型/宝物设置]
!!EXx2/1:Ad/d/?y23 R?y24/?y25;
!!EXx2/2:Ad/d/?y33 R?y34/?y35;
!!EXx2/3:Ad/d/?y43 R?y44/?y45;
!!EXx2/4:Ad/d/?y53 R?y54/?y55;
!!EXx2/5:Ad/d/?y63 R?y64/?y65;
!!EXx2/6:Ad/d/?y73 R?y74/?y75;
**若用上面EX读取生物类型等会产生一个严重的BUG,所以需用HE读取一次**
!!HEx2:C0/0/?y11/?y12; [第一格:类型/个数]
!!HEx2:C0/1/?y21/?y22;
!!HEx2:C0/2/?y31/?y32;
!!HEx2:C0/3/?y41/?y42;
!!HEx2:C0/4/?y51/?y52;
!!HEx2:C0/5/?y61/?y62;
!!HEx2:C0/6/?y71/?y72;

!!VRz-1:S^^;
!!VRz-2:S^^;
!!VRz-3:S^^;
!!VRz-4:S^^;
!!VRz-5:S^^;
!!VRz-6:S^^;
!!VRz-7:S^^;
!!VRz-8:S^^;
!!HEx2:S12/?y10; [检测英雄是否有招魂术]
!!VRz-8&y10>0:S^【英雄拥有招魂术,请慎重选择!】^;
!!VRz-10:S^请选择战斗时要隐藏的生物%Z-8^;
!!UN&y11>-1/y12>0:N3/1/y11/0; [生物名称于 z1]
!!VRz-1&y11>-1/y12>0:S^第1格生物槽:%Y12 个 %Z1^;
!!UN&y21>-1/y22>0:N3/1/y21/0; [生物名称于 z1]
!!VRz-2&y21>-1/y22>0:S^第2格生物槽:%Y22 个 %Z1^;
!!UN&y31>-1/y32>0:N3/1/y31/0; [生物名称于 z1]
!!VRz-3&y31>-1/y32>0:S^第3格生物槽:%Y32 个 %Z1^;
!!UN&y41>-1/y42>0:N3/1/y41/0; [生物名称于 z1]
!!VRz-4&y41>-1/y42>0:S^第4格生物槽:%Y42 个 %Z1^;
!!UN&y51>-1/y52>0:N3/1/y51/0; [生物名称于 z1]
!!VRz-5&y51>-1/y52>0:S^第5格生物槽:%Y52 个 %Z1^;
!!UN&y61>-1/y62>0:N3/1/y61/0; [生物名称于 z1]
!!VRz-6&y61>-1/y62>0:S^第6格生物槽:%Y62 个 %Z1^;
!!UN&y71>-1/y72>0:N3/1/y71/0; [生物名称于 z1]
!!VRz-7&y71>-1/y72>0:S^第7格生物槽:%Y72 个 %Z1^;

!!IF:G0/1/256/-10/-1/-2/-3/-4/-5/-6/-7;[结果存于V1,第一个0表示多选]
!!FU|v1=0:E; [全部不选]
!!VRy81:Sv1&1;
!!VRy82:Sv1&2;
!!VRy83:Sv1&4;
!!VRy84:Sv1&8;
!!VRy85:Sv1&16;
!!VRy86:Sv1&32;
!!VRy87:Sv1&64;
!!VRy4:S0; [计算要隐蔽的生物槽个数]
!!VRy4&y81>0:+1;
!!VRy4&y82>0:+1;
!!VRy4&y83>0:+1;
!!VRy4&y84>0:+1;
!!VRy4&y85>0:+1;
!!VRy4&y86>0:+1;
!!VRy4&y87>0:+1;

*!IF&y3=y4:M^你不能把所有生物的隐蔽掉!^;
*!FU&y3=y4:E; [如果真隐蔽了所有生物,而又无其它追随者之类的,会直接失败]
!!FU&y4=0:E; [没有任何要隐蔽的生物]
**将所有数据写入到一个Z变量中**
**Z变量充当一个V变量的数组**(注意需用空格分隔数字)
**每个元素组包括3个数据:生物槽/生物类型/生物个数/生物经验**
**Z变量每个元素用空格分隔,且提取号从0开始**
!!VRz800:S^%Y4 4 %X2 0 0 0 0^; [第一组比其它元素组多一个元素,为方便以后按编号提取]
**[第1个数代表元素组的组数,第2个数代表每组包括的元素个数,3代表英雄编号,4-7没用 用0占位](Z变量位置0-6)**
**[也就是说,Z变量元素组的第一组用来记录数组的重要信息,可成为数组的头部(头部比其它组多一个元素)]**
!!VRz800&y81>0:S^%Z800
0 %Y11 %Y12 %Y13 %Y14 %Y15^; [从第6个开始记录元素组,4个为一组(提取编号从5开始)]
!!VRz800&y82>0:S^%Z800
1 %Y21 %Y22 %Y23 %Y24 %Y25^;
!!VRz800&y83>0:S^%Z800
2 %Y31 %Y32 %Y33 %Y34 %Y35^;
!!VRz800&y84>0:S^%Z800
3 %Y41 %Y42 %Y43 %Y44 %Y45^;
!!VRz800&y85>0:S^%Z800
4 %Y51 %Y52 %Y53 %Y54 %Y55^;
!!VRz800&y86>0:S^%Z800
5 %Y61 %Y62 %Y63 %Y64 %Y65^;
!!VRz800&y87>0:S^%Z800
6 %Y71 %Y72 %Y73 %Y74 %Y75^;

*!IF:M^%Z800^; [查看Z变量存储的情况]
**战斗前设置为0**
!!HEx2&y81>0:C0/0/255/0;
!!HEx2&y82>0:C0/1/255/0;
!!HEx2&y83>0:C0/2/255/0;
!!HEx2&y84>0:C0/3/255/0;
!!HEx2&y85>0:C0/4/255/0;
!!HEx2&y86>0:C0/5/255/0;
!!HEx2&y87>0:C0/6/255/0;

!?BA1&1000; [战斗后还原生物]
!!VRz800:H1; [检测Z800是否为空,于标志1中]
!!FU&-1:E; [没有文本,直接退出]
!!VRz1:M2/z800/2; [获取Z800中第3个元素值,于Z1中]这里代表英雄编号
!!VRy99:Vz1; [文本to数值]
!!FU|y99<0/y99>155:E; [不是英雄编号]
**检测该英雄是否失败,失败则会失去隐藏的兵种**
!!IF&v9555=y99/v9549=v9550:M^见势不妙,所有隐藏的兵种都一哄而散!^;
!!IF&v9560=y99/v9551=v9552:M^见势不妙,所有隐藏的兵种都一哄而散!^;
!!FU&v9555=y99/v9549=v9550:E; [英雄没有增加经验,失败方]
!!FU&v9560=y99/v9551=v9552:E; [英雄没有增加经验,失败方]
!!VRz1:M2/z800/0; [获取Z800中第1个元素值,于Z1中]这里代表元素组的个数
!!VRy98:Vz1; [文本to数值]
!!FU&y98<1:E; [提取元素组的个数]
!!DO20000/1/y98/1:P301/y99; [提取元素,y99人类玩家的英雄编号]
!!VRz800:S^^; [战后清空Z800内容(其实算重复了)]
!!UN:R1; [重画屏幕]

!?FU20000&x1=301; [提取元素组各元素]
**x2=英雄编号
**x16=元素组号(1开始)
**根据组号提取元素(这里每组有6个元素)**
!!VRy-1:Sx16*6+1; [第一组第一个元素,所处Z变量的位置]如x16=1时,'y-1'=7
!!VRy-2:Sx16*6+2;
!!VRy-3:Sx16*6+3;
!!VRy-4:Sx16*6+4;
!!VRy-5:Sx16*6+5;
!!VRy-6:Sx16*6+6;
!!VRz-1:M2/z800/y-1; [由提取编号,提取元素值]
!!VRz-2:M2/z800/y-2;
!!VRz-3:M2/z800/y-3;
!!VRz-4:M2/z800/y-4;
!!VRz-5:M2/z800/y-5;
!!VRz-6:M2/z800/y-6;
!!VRy-11:Vz-1; [转为数值]
!!FU|y-11<0/y-11>6:E; [生物槽]
!!VRy-12:Vz-2;
!!FU|y-12<0/y-12>196:E; [生物类型]
!!VRy-13:Vz-3;
!!FU|y-13<1:E; [生物个数]
!!VRy-14:Vz-4; [生物经验]
!!VRy-15:Vz-5; [生物携带的宝物类型(156=战神旗)-1表示没有]
!!VRy-16:Vz-6; [生物携带宝物的相关选项](0-8)
!!HEx2:C0/y-11/?y-90/d; [重新检测英雄对应生物槽的信息]
!!HEx2&y-90<>y-12:C0/y-11/y-12/y-13/y-14/0; [不同类型,直接覆盖]
!!HEx2&y-90=y-12:C0/y-11/y-12/dy-13/y-14/0;[相同类型时,叠加生物与经验]
!!EXx2/y-11:Ry-15/y-16; [设置生物宝物信息]

[ 本帖最后由 hanter007 于 2012-6-26 12:42 编辑 ]

沧海一粟 发表于 2012-6-25 22:38:18

强帖板凳

引用:今天将这个小发现应用于 "战斗前选择隐藏兵种" 上, 原则上需要 7个生物槽*(生物槽位置+生物编号+个数+经验)=28个V变量来记录.
但这里变通一下,只需要一个Z变量记录即可.不信请马上试试以下脚本.
这个绝对是创新,而且是很好的创新:good_job:
————————————————————
顺便提个小意见,没看到战旗......

[ 本帖最后由 沧海一粟 于 2012-6-25 22:48 编辑 ]

贤知有您 发表于 2012-6-25 22:49:50

回复 3# 的帖子

;balu;
还差点忘了战旗..其实原理是一样的.
Z变量中每个元素组增加一个元素而已.
明天试试添加下..夜深了,老婆杀到.
;aim;

克招 发表于 2012-6-25 22:55:04

这个主意不错,我想过用标志型变量来进行一个变量多组数据的想象,但是后面觉得太过于复杂,没有必要,就放弃了。

无心云 发表于 2012-6-25 23:08:05

原帖由 hanter007 于 2012-6-25 22:49 发表 http://www.h3wog.com/images/common/back.gif
;balu;
还差点忘了战旗..其实原理是一样的.
Z变量中每个元素组增加一个元素而已.
明天试试添加下..夜深了,老婆杀到.
;aim;

老婆没到,战斗!
老婆杀到,战斗中的战斗!
哈哈!

兽哥哥 发表于 2012-6-25 23:18:31

我来先精华再完善,最近007的作品层出不穷啊。

沧海一粟 发表于 2012-6-25 23:25:58

晕,出去逛圈回来还是我第一个下载的

原帖由 兽哥哥 于 2012-6-25 23:18 发表 http://bbs.h3wog.com/images/common/back.gif
我来先精华再完善,最近007的作品层出不穷啊。

兽哥你连下载都没有......
话说K你好像评分评错对象,我只有学兽笑纳了;misnn;

dadds 发表于 2012-6-25 23:34:39

真厉害啊,这个应该是前段时间mc.86写的那个部队休整的完善版吧

兽哥哥 发表于 2012-6-26 00:55:04

回复 8# 的帖子

不是有个直接的脚本粘贴的吗?我做测试而已。基本上出来的脚本我都有试验,但不是专家,只能点到为止

灰狼王子 发表于 2012-6-26 05:04:59

哥要怎么赞美你呢

这个真是爽歪歪,MS也不会浪费那么多变量是吧;tl; 效果也是一级棒,不得不加精啊:good_job:
现在一是加上战神旗帜测试一下是否会有问题,二是测试一些特殊情况:被元素指挥官驱逐、开了战争机器加强模式一战前被炮车直接杀死一小部分部队时、鬼族英雄招魂术战后会不会出问题等。

无心云 发表于 2012-6-26 08:17:21

;han; ;han;
想不到我这么辟精的话居然被沧海兄视为灌水,窃以为是可以加属性;dao;

哈哈

titanzwh 发表于 2012-6-26 09:39:31

好脚本

mc.86 发表于 2012-6-26 11:58:07

初看了一下,感觉楼主此文的意义很大。最近考虑类似问题时就纠结为什么erm不支持向量或数据组。楼主的发现似乎使得V变量数量理论上可以增加很多很多!这种贡献是基础性的,祝贺楼主!
         对原问题如果使用不常用生物(例如183-189号)数据槽可避免v变量占用(标志还是需要的),而即使不使用生物数据槽使用适当算法也可减少v变量或w变量占用不超过10个。当然这些远逊楼主的这种解决方案。

贤知有您 发表于 2012-6-26 13:02:27

回复 14# 的帖子

这里是利用VR对类似英文单词的复制来实现读取的..用空格隔开就可以了.换行符不影响.
因为可以使用词语的编号(从0开始),因此读取显得很简洁.这个编号就相当于数组中的下标了.
我这里第一组元素是比其它元素多一个元素的,用来记录一些相关信息,比如英雄编号/数据元素组的个数等.
如果用不完就用0来填充占据位置,只为后面读取方便而已.当然不填充也一样,只要算出后面的格式规律就行了.

另外那个VR:M1复制字符串的一个片段也很有用的,只要格式有规律性,就能得到一系列内容.

fly123 发表于 2012-6-26 16:18:51

这个厉害,学习啦。;go;

caijian 发表于 2012-6-26 17:20:22

真是惊人的突破,可以说是划时代的发现啊,提供了前所未有的新思路。;aieol;
这样看来ERM果然还大有潜力可挖;juwe;

水手 发表于 2012-6-26 17:26:18

回复 2# 的帖子

放心去干,我们跟你老婆做思想工作支持你

yunings 发表于 2012-6-26 19:57:18

007现在是绝对的技术流,佩服;aoleof;

fly123 发表于 2012-6-26 20:01:30

这个方法真的非常好,我决定以后写ERM采取这种方法。
页: [1] 2
查看完整版本: 战斗前选择隐藏兵种(0626更新战神旗设定)

捐赠