偶久网

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

网站魔兽热门地图

查看: 10709|回复: 22

演示集锦 -☆- 修正《通用物品合成BUG》。

  [复制链接]
離離草 title=
发表于 2008-9-1 11:23:54
演示-通用物品叠加(修正) 2楼
演示-排行榜 3楼
演示-装备升级 4楼
演示-物品初始化 5楼
演示-练功房(修正) 6楼
演示-通用物品合成 7楼
演示 - 多面版展示技能 8楼
演示 - 装备限制 9楼
演示-通用自定义属性分配 10楼
演示 - 决斗 11楼
演示 - 选英雄的四种方式 12-13楼
演示-单体转群体技能模版 14楼
演示 - 物品栏合成 15楼
演示 - 随机属性系统
16楼





                                      关于变量的说明
  变量是什么,我一直说变量就是仓库,不同类型的变量可存储的东西是不同的,而变量组也就是将同一类型的仓库编号而已。
  变量的类型包括所有可控的元素:
  技能、攻击类型、布尔型、魔法效果、镜头物体、战斗声音、可破坏物、数值、物品、命令、单位、玩家等等。
  例如单位:大法师001,在触发里你可以直接指定这个单位,也可以在“赋值”以后用单位变量来代替这个单位执行动作和判断。
  PS:赋值,就是将特定类型的元素存储到特定的变量类型里,类似于将肉类存放在冷冻仓库而不可能存在家电仓库一样。
所以,我们的触发在以下情况下效果是相同的:
  例1、
事件:单位进入区域
条件:该单位是一个英雄为真
动作:移动 触发单位 到 地图的中心。

  例2
事件:单位进入区域
条件:该单位是一个英雄为真
动作:Set Unit(注:单位变量)=触发单位
移动 Uint 到 地图的中心。
  功能一样,但使用变量会多用到一个赋值语句,好像是多一步操作,但往往我们都需要多次调用某个单位来做判断或动作的话,使用变量就会带来很大的便利,就如例2,所有例2的后续操作只要没有涉及到赋值,Unit会一直代表着这个触发单位,而在有些没有办法判断触发单位来源的触发里也可以直接使用到。
  例3、
事件:时间经过50秒
条件:无
动作:创造一个单位类型 是 Unit 的单位 给 玩家1,创造在地图的中心点
  这个事件会随着Unit的赋值不同而产生不同的单位,特别是在某些刷兵的地图里,你给Unit赋哪一个单位,那么每过50秒就会创造出同类型的单位给玩家1。
  而变量组,就是给变量做编号,1号仓库、2号仓库、3号仓库……每个仓库的功能实际上是一样的,不同的在于每个变量名字后面会出现[1][2][3]的字样,同样,当我们给变量组每个变量赋值不同的单位的时候,我们可以随时调用自己设定好的想用的单位。
  例4、
在某一事件中,我们给Unit[1]赋值步兵,Unit[2]赋值骑兵,Unit[3]赋值女巫,再运行以下触发:
事件:时间经过50秒
条件:无
动作 循环 数值A 从 1 至 3 执行动作
  创造一个单位类型是 Unit[循环数A] 的单位 给玩家1,创造在地图的中心点
那么,这么触发将在你地图的中心点创造三个单位,分别是步兵、骑兵、女巫。
[ 本帖最后由 離離草 于 2008-9-1 12:06 编辑 ]
離離草 title=
 楼主| 发表于 2008-9-1 11:26:16

演示1,物品叠加

  以最简单的触发,制作最实用的事件,通用型物品叠加,可以将所有带有使用数次的物品进行重叠,实则居家旅行,杀人越货的必备触发。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
单位 - 任意单位 获得物品

条件
((被操作物品) 的使用次数) 大于 0
((被操作物品) 的类型) 等于 (((触发单位) 所持有的 ((被操作物品) 的类型)) 的类型)
(被操作物品) 不等于 ((触发单位) 所持有的 ((被操作物品) 的类型))

动作
物品 - 设置 ((触发单位) 所持有的 ((被操作物品) 的类型)) 的使用次数为 ((((触发单位) 所持有的 ((被操作物品) 的类型)) 的使用次数) + ((被操作物品) 的使用次数))
物品 - 删除 (被操作物品)





  修正声明:经过Froming朋友的提醒,修正了叠加的一个错误,就是最后的附加值1,修改成((被操作物品) 的使用次数)),这样当捡取已叠加物品(使用次数大于等于2)的时候,也会正常叠加数量。
  演示要点:实际上这个是利用系统的判断方式来进行检查的,当涉及到“触发单位所持有的指定物品类型”的时候,系统会自动检查触发单位身上1到6格的物品栏,也可以看成是一次循环判断。
  然后更新了一个配合的触发动作,该触发的作用是自动整理单位身上的可重叠物品。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
单位 - 任意单位 获得物品

条件
动作
For循环整数A从 1 到 5, 做动作
Loop - 动作
For循环整数B从 ((循环整数A) + 1) 到 6, 做动作
Loop - 动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
(((触发单位) 物品栏第 (循环整数A) 格的物品) 的使用次数) 大于 0
(((触发单位) 物品栏第 (循环整数A) 格的物品) 的类型) 等于 (((触发单位) 物品栏第 (循环整数B) 格的物品) 的类型)

Then - 动作
物品 - 设置 ((触发单位) 物品栏第 (循环整数A) 格的物品) 的使用次数为 ((((触发单位) 物品栏第 (循环整数A) 格的物品) 的使用次数) + (((触发单位) 物品栏第 (循环整数B) 格的物品) 的使用次数))
物品 - 删除 ((触发单位) 物品栏第 (循环整数B) 格的物品)

Else - 动作
无动作








  演示要点:这里使用了一个循环的嵌套,循环A从1到5,循环B从循环A+1开始到6,作用就是当循环A=1的时候,循环B就是2,于是单位身上这两个位置相比较的话,就是第1格和第2格的比较了,这个嵌套的作用就是不管在单位物品栏的第几格都会和其它格子相比较,而如果物品相同的话就会判断出来了。

物品叠加.w3x

17.73 KB, 下载次数: 194

離離草 title=
 楼主| 发表于 2008-9-1 11:27:31

演示2,排行榜

这个也是大家需求比较高的演示,不过有区别于“多面版”,排行榜的功能限定于只能显示玩家名字和一个数值。因此排行榜的使用其实也很简单。
  要做一个排行榜,先是排行榜显示的时间问题,一般来说,大家都习惯在进入地图以后就出现排行榜,所以我们也可以这样做,那么事件就可以写成:

');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
地图初始化





 
  地图初始化就是在地图刚开始的时候就打开排行榜,而排行榜一般不需要环境(条件),所以我们就忽略,接下来就是动作。先要确定这个排行榜显示的是什么,如果是两边对战的时候就需要分组显示排行榜了,而大部分时候我们只对大家使用一个排行榜,所以我们可以这样建:

');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
动作
等待 2.00 秒
排行榜 - 对 (所有玩家) 创建排行榜,使用标题: - ...
玩家组 - 选取 (所有玩家) 内所有玩家 (排行榜 - 添加 (选取玩家) 到 (最后创建的排行榜) ,使用名字: ((选取玩家) 的名字) 设置分数: 0)
排行榜 - 将 (最后创建的排行榜) 按 分数 使用 降序 排列
排行榜 - 显示 (最后创建的排行榜)




 
  使用等待的原因是如果没有等待时间在初始化的情况下不会显示排行榜), 而签后面的 杀敌数量 为排行榜的名字,下面句是最重要的,就是排行榜上显示的玩家,常用的就是使用玩家组的精选,因为需要把所有玩家都选入,那么就精选所有的玩家,然后在的动作是把精选的玩家名字填入排行榜,而标签就是下面显示的分栏,一般是把玩家的名字作为标签,所以采用的是 精选的玩家 的名字 ,而数值 需要你自己定义,最多采用的是 总采木量, 因为在RPG或一般对抗地图中,是不会进行伐木的,所以木头不会有收入,总采木量就是木头的总收入,不会显示出来的,因此可以做为变量使用来记录单位的杀敌数量等等,然后就是排行榜的排序,最后一步就是显示出排行榜。如果要将某些玩家排除在外,比方在对战的时候有几个电脑的玩家需要排除,常用的是第6和第12个,下列句可以加在排序和显示前面:
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
动作
排行榜 - 把 玩家6(橙色) 从 (最后创建的排行榜) 移除





  对于创造排行榜已经解说完了,然后是使用排行榜,不能让排行榜就这样晾着吧,这次的使用方式是记录杀敌数量,先是事件,既然是记录杀敌数量,所以要先判断敌人是否死亡,(本方玩家1,敌人是玩家2):
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
单位 - 玩家2(蓝色)单位 死亡






  已经判断是玩家2的单位死亡了,一般状态下环境不需要,所以跳过,直接到动作部分(也可以用一个单位死亡的事件来做)。因为玩家2单位的死亡,所以我们的排行榜的数值要加1,因为我们使用 总采木量 来记录这个数值,而杀死玩家2的并不一定就是玩家1,为了方便,使用((凶手单位) 的 所有者),所以下面的动作就是:
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
动作
玩家 - 设置 ((凶手单位) 的所有者) 的 现有木材 为 ((((凶手单位) 的所有者) 现有木材) + 1)




 
  因为这里可以用变量代替,所以采用这种方式增加数值,如果你直接使用木材量的话,可以用增加属性来执行动作。数值已经增加了,但是并不会直接在排行榜上显示,所以我们要更改排行榜的数值,将数值改成总采木量:
         
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
动作
排行榜 - 设置 ((凶手单位) 的所有者) 在 (最后创建的排行榜) 中的分数为: (((凶手单位) 的所有者) 总木材采集量)




  现在已经把排行榜上的数值更改了,因为我们有时要排名次和显示,所以还需要排序,再增加以下语句:
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
动作
排行榜 - 将 (最后创建的排行榜) 按 分数 使用 降序 排列
排行榜 - 显示 (最后创建的排行榜)




  然后这个排行榜就可以正式投入使用了,创造一个排行榜容易,主要就是对排行榜的数值的控制才是排行榜真正的核心。一般都是采用变量,比如将木材数用变量替换就可以,如果是多人的话,尽量采用变量组来控制会比较好,附演示图。

排行榜.w3x

15.34 KB, 下载次数: 199

離離草 title=
 楼主| 发表于 2008-9-1 11:29:04

演示3,装备升级

 装备升级的方式有很多很多,其实综合起来和物品合成只有稍稍区别,也就是检查身上携带的物品以及通过条件来判断删除源物品创建新物品。装备升级可以用一个触发完成,但相对的改动起来会比较麻烦,因为是直接指定物品的,也可以用变量来进行设定,这样改动起来非常方便,先来看一下变量设定:
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
地图初始化

条件
动作
可见度 - 禁用战争迷雾
可见度 - 禁用黑色阴影
设置 TYPE[1] = 攻击之爪 +3
设置 TYPE[2] = 攻击之爪 +6
设置 TYPE[3] = 攻击之爪 +9
设置 TYPE[4] = 攻击之爪 +12
设置 TYPE[5] = 攻击之爪 +15
设置 TYPE_Up[1] = Lv 1 up
设置 TYPE_Up[2] = Lv 2 up
设置 TYPE_Up[3] = Lv 3 up
设置 TYPE_Up[4] = Lv 4 up





  演示要点:这里所有的变量组类型都是“物品类型”,TYPE[?]就是装备,TYPE Up[?]是配合物品,还有一个物品是用来升级装备的“武器升级”,在另一个触发里:
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
单位 - 任意单位 获得物品

条件
((被操作物品) 的类型) 等于 武器升级

动作
For N 从 1 到 4, 做动作
Loop - 动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
(((触发单位) 所持有的 TYPE[N]) 的类型) 等于 TYPE[N]
(((触发单位) 所持有的 TYPE_Up[N]) 的类型) 等于 TYPE_Up[N]

Then - 动作
物品 - 删除 ((触发单位) 所持有的 TYPE[N])
物品 - 删除 ((触发单位) 所持有的 TYPE_Up[N])
英雄 - 创建 TYPE[(N + 1)] 给 (触发单位)
如果所有条件成立则做动作1,否则做动作2
If - 条件
TYPE[(N + 1)] 等于 TYPE[5]

Then - 动作
游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: 装备已经升级到顶!

Else - 动作
无动作

设置 N = 4

Else - 动作
无动作







  演示要点:可以看到,这里的升级是先获得“武器升级”这个物品,然后再进行判断,一般来说,像用来升级的物品,尽量用书本或者神符等可以在物品携带满的情况下获得的物品来制作,这样就不会因为物品数量限制而无法获得。
  接下来是循环判断,在这里用了一个自定义数循环变量,然后看下面的动作,TYPE[?]和TYPE Up[?]在这里充当了一个相互配合的作用,在[?]下标相同的情况下合成才会实现,而这个下标的定义在前面一个触发里已经设定好了,只要修改前面触发里对等的两个变量就可以对升级产生不同的合成方式。
  在条件成立的情况下,将这两个物品删除,然后再赋于一个新的高一等级的物品,这个就是装备升级的特色,不同于物品合成的地方。然后看下面有一个N=4,其作用就是跳出这个循环,因为再执行下去N会自然变成N+1,也就是5。如果不跳出这个循环,将会出现装备一升到顶的情况:比如你拿着攻击之爪+3,再携带升级物品1到4级,会直接升级成攻击之爪+15。

装备升级1+1.w3x

15.34 KB, 下载次数: 198

離離草 title=
 楼主| 发表于 2008-9-1 11:30:49

演示4,物品初始化-物品生命的运用

大家都有过设定物品变量的经历,一般情况下,我们采用直接在T中对变量进行赋值,一次次的选择物品,不但繁琐,而且很慢。这里是利用物品的生命值来进行物品初始化也就是物品定义的操作,方便,快捷,可扩展性强。首先我们需要对物品的生命值进行定义,考虑到赋值的需要,每一个物品的生命值必须区别开来(在以后的演示中,还会有更精细的要求)。如图:


  演示要点:这里可以看到,对41种物品每一个都设定了独立的生命值,从1到41,然后我们需要做第二步,将物品放在一个区域内:


  演示要点:这个区域没有什么限制,也不需要考虑这里是否会有玩家操作英雄拾取物品,因为我们的触发在会解决这些问题:
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
时间 - 游戏开始 1.00 秒

条件
动作
物品 - 选取 (可用地图区域) 内所有物品做动作
Loop - 动作
设置 TP[(转换 ((选取物品) 的当前生命值) 为整数)] = ((选取物品) 的类型)
游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: ((TP[ + (转换 (转换 ((选取物品) 的当前生命值) 为整数) 为字符串)) + (]= + ((选取物品) 的名字)))
物品 - 删除 (选取物品)






  演示要点:这里的TP变量组是物品类型,简单的说,就是将TP[1]到TP[41]分别对应了41种我们放置在指定区域中的物品类型,当然我们可以设定更多,也可以利用不同的区域对不同的变量组进行设定,至此,物品初始化完成。另外,动作第二条是输出文字,有没有都没关系。

物品初始化.w3x

15.34 KB, 下载次数: 131

離離草 title=
 楼主| 发表于 2008-9-1 11:31:48

演示5,练功房

练功房其实和刷小怪没什么区别,重点就在于控制刷兵的开和关,一般地图中练功房都是独立存在的区域,所以我们需要有两个触发控制进出,一个触发控制刷怪。

');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
单位 - 单位进入 矩形区域 000 <预设>

条件
(((触发单位) 所持有的 太阳钥匙) 的类型) 等于 太阳钥匙
((矩形区域 001 <预设> 内的所有单位) 中的单位数量) 等于 0

动作
单位 - 立即移动 (触发单位) 到 (矩形区域 001 <预设> 的中心点)
等待 2.00 秒
For循环整数A从 1 到 12, 做动作
Loop - 动作
单位 - 创建 1 个 步兵 给 中立敌对 在 (矩形区域 001 <预设> 内的随机点) ,面向角度为 默认建筑朝向 度
设置 MM = (MM + 1)






  演示要点: 其中MM是整数变量,用来记录里面小怪的数量,默认值为0,单位携带指定物品是为了做限制。利用循环来创建单位会比直接创建指定数量的单位更容易控制。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
单位 - 任意单位 死亡

条件
(矩形区域 001 <预设> 内存在 (触发单位)) 等于 TRUE
((触发单位) 是 英雄) 等于 FALSE

动作
设置 MM = (MM - 1)
如果所有条件成立则做动作1,否则做动作2
If - 条件
MM 等于 0

Then - 动作
For循环整数A从 1 到 12, 做动作
Loop - 动作
单位 - 创建 1 个 步兵 给 中立敌对 在 (矩形区域 001 <预设> 内的随机点) ,面向角度为 默认建筑朝向 度
设置 MM = (MM + 1)


Else - 动作
无动作






  演示要点: 利用单位死亡来进行判断是否刷新,条件就是判断死亡事件是发生在练功房区域而不是其它什么地方,而当单位死亡的时候,就减去MM值,当MM的值为0的时候,就再次刷兵。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
单位 - 单位进入 矩形区域 002 <预设>

条件
((触发单位) 是 英雄) 等于 TRUE

动作
单位 - 立即移动 (触发单位) 到 (((触发单位) 的所有者) 的游戏开始位置)
单位组 - 选取 (矩形区域 001 <预设> 内的所有单位) 内所有单位做动作
Loop - 动作
单位 - 删除 (选取单位)

设置 MM = 0





  演示要点: 当你的英雄离开练功房以后,为了避免因为练功房区域还存在其它单位,而其它英雄无法进入,需要清除该区域内的单位。同时,必须将MM的值清零,否则同样因为MM不等于0而无法开启练功房。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
单位 - 任意单位 死亡

条件
((触发单位) 是 英雄) 等于 TRUE
(矩形区域 001 <预设> 内存在 (触发单位)) 等于 TRUE

动作
触发器 - 运行 Leave <预设> (无视条件)





  演示要点:类似于英雄死亡的特殊事件尽管发生的机率比较小,但也不表示不会发生,有时需要添加一些动作来避免因为特殊事件造成的问题,英雄死亡时可以移动尸体的,和单位进入出口区域(Leave触发器)性质一样。

练功房.w3x

15.34 KB, 下载次数: 167

離離草 title=
 楼主| 发表于 2008-9-1 11:33:11

演示6,通用物品合成

这个其实就是类似于物品合成,不过应用范围相对更广一些,当然也不可能面面俱到啦~不过只需要适当调整一下就可以应用到任何(源+源)+卷=合的合成中了。这个触发也需要另一个物品类型的定义配合,比如:
  物品类型变量[1]=原材料1  物品类型变量[2]=原材料2 物品类型变量[3]=合成物 物品类型变量[4]=合成卷
  而第一个FOR循环的10就是你的组数,上面四个变量为一组,类推……在这里需要说明的是,如果利用前面的物品初始化的话,可以很方便的对大量物品在进行定义和修正。
  通告:本演示发现重大BUG,其中原来的“购买者”系原地图上设定,因为是购买物品升级,未及时更改,现修正为“触发单位”!
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
单位 - 任意单位 获得物品

条件
动作
For循环整数A从 1 到 10, 做动作
Loop - 动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
((被操作物品) 的类型) 等于 TYPE[((循环整数A) x 4)]

Then - 动作
设置 A = TYPE[(((循环整数A) x 4) - 3)]
设置 B = TYPE[(((循环整数A) x 4) - 2)]
设置 C = TYPE[(((循环整数A) x 4) - 1)]

Else - 动作
无动作


For循环整数A从 1 到 6, 做动作
Loop - 动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
A 不等于 (没有物品 的类型)
(((触发单位) 物品栏第 (循环整数A) 格的物品) 的类型) 等于 A

Then - 动作
For循环整数B从 1 到 6, 做动作
Loop - 动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
(((触发单位) 物品栏第 (循环整数B) 格的物品) 的类型) 等于 B

Then - 动作
物品 - 删除 ((触发单位) 所持有的 A)
物品 - 删除 ((触发单位) 所持有的 B)
英雄 - 创建 C 给 (触发单位)

Else - 动作
无动作



Else - 动作
无动作


设置 A = (没有物品 的类型)
设置 B = (没有物品 的类型)
设置 C = (没有物品 的类型)





这个演示稍稍修改一下都可以做成附合任何独立配方的触发器,附演示。

通用物品合成.w3x

15.34 KB, 下载次数: 208

離離草 title=
 楼主| 发表于 2008-9-1 11:35:17

基础多面版-英雄技能展示,附新随机选择英雄

先说随机选择英雄,不同于我的防守图演示,这里利用了一个循环跳出的方式简化了很多的操作。除了定义单位类型的触发,就是执行选择的部分了,可以看到我这里定义了一个玩家组变量Player_group,然后用来取代下面的(所有 用户 控制的玩家)这个组值,值得一提的是,中间有一个语句无法取得,原来就是我在疑难区发的帖子,不能在枚举中获取组中单位数量。
  然后就是Un,一个整数型变量,用来获取随机数,因为我设定的英雄一共六个,所以是1到6,再接下来就是重点了,N_FOR是整数型变量,这一句是自定义数循环,使用这个的好处下面就可以看到了。这个循环的作用就是下面的判断语句: (Hero[N_FOR] 的类型) 等于 Set_Hero_Type[Un],这一句的效果就是每一个玩家在创建英雄的时候,都会把单位组变量Hero[?]的类型和单位类型变量Set_Hero_Type[?]进行对比,因为是循环嘛,所以如果已经选择过的英雄会因为下面的Hero[?]赋值动作被赋值,所以当比较出已经被选择过的单位,就会再次对随机数进行赋值,而把N_FOR 赋值为0就可以再一次重复进行循环比较,直到选出不相同的单位为止。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
时间 - 游戏开始 1.00 秒

条件
动作
设置 Player_group = (所有 用户 控制的玩家)
玩家组 - 选取 Player_group 内所有玩家做动作
Loop - 动作
设置 Un = (随机整数,最小值: 1 最大值: 6)
-------- 因为涉及到枚举过程中无法获取玩家组数值,因此这里不做修改 --------
For N_FOR 从 1 到 ((所有 用户 控制的玩家) 中的玩家数量), 做动作
Loop - 动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
(Hero[N_FOR] 的类型) 等于 Set_Hero_Type[Un]

Then - 动作
设置 Un = (随机整数,最小值: 1 最大值: 6)
设置 N_FOR = 0

Else - 动作
无动作


单位 - 创建 1 个 Set_Hero_Type[Un] 给 (选取玩家) 在 ((选取玩家) 的游戏开始位置) ,面向角度为 默认建筑朝向 度
设置 Hero[((选取玩家) 的玩家索引号)] = (最后创建的单位)






  然后就是多面版的基本设置,多面版就是二元格子,以行和列组合来定位,一般来说,我们创建的多面版需要先做一个标题和分类,分类都是做在第一行:
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
时间 - 游戏开始 1.00 秒

条件
动作
可见度 - 禁用战争迷雾
可见度 - 禁用战争迷雾
-------- 列数固定,行数为基础面版的1行 --------
多面板 - 创建一个列数为 5 行数为 1 标题为 技能一览表 的多面板
设置 Mulirboard = (最后创建的多面板)
多面板 - 设置 Mulirboard 第 1 列,第 1 行的项目文本为 英雄名字
多面板 - 设置 Mulirboard 第 2 列,第 1 行的项目文本为 技能1
多面板 - 设置 Mulirboard 第 3 列,第 1 行的项目文本为 技能2
多面板 - 设置 Mulirboard 第 4 列,第 1 行的项目文本为 技能3
多面板 - 设置 Mulirboard 第 5 列,第 1 行的项目文本为 技能4





  另外就是添加的部分,因为做的是英雄技能展示的演示,所以需要指定显示一些英雄的数据,在前面已经定义好英雄的数值和技能以后,对选定的英雄进行添加到多面版的操作(接前面选择英雄以后):
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
多面板 - 设置 Mulirboard 的行数为 ((Mulirboard 的行数) + 1)
设置 Hero_name_s[(((选取玩家) 的玩家索引号) + 1)] = (转换 (Hero[((选取玩家) 的玩家索引号)] 的类型) 为字符串)
多面板 - 设置 Mulirboard 第 1 列,第 (((选取玩家) 的玩家索引号) + 1) 行的项目文本为 (Hero[((选取玩家) 的玩家索引号)] 的名字)
多面板 - 设置 Mulirboard 第 2 列,第 (((选取玩家) 的玩家索引号) + 1) 行的项目文本为 ((Set_Hero_ability[((Un x 4) - 3)] 的名称) + ((转换 (Set_Hero_ability[((Un x 4) - 3)] 的等级对 (触发单位)) 为字符串) + 级))
多面板 - 设置 Mulirboard 第 3 列,第 (((选取玩家) 的玩家索引号) + 1) 行的项目文本为 ((Set_Hero_ability[((Un x 4) - 2)] 的名称) + ((转换 (Set_Hero_ability[((Un x 4) - 2)] 的等级对 (触发单位)) 为字符串) + 级))
多面板 - 设置 Mulirboard 第 4 列,第 (((选取玩家) 的玩家索引号) + 1) 行的项目文本为 ((Set_Hero_ability[((Un x 4) - 1)] 的名称) + ((转换 (Set_Hero_ability[((Un x 4) - 1)] 的等级对 (触发单位)) 为字符串) + 级))
多面板 - 设置 Mulirboard 第 5 列,第 (((选取玩家) 的玩家索引号) + 1) 行的项目文本为 ((Set_Hero_ability[((Un x 4) - 0)] 的名称) + ((转换 (Set_Hero_ability[((Un x 4) - 0)] 的等级对 (触发单位)) 为字符串) + 级))





  这样已经把随机选到的英雄都添加进了多面版,然后再进一步操作多面版,因为默认格子比较小,所以需要做放大处理,最后还需要显示出来:
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
For循环整数A从 1 到 5, 做动作
Loop - 动作
For循环整数B从 1 到 ((Player_group 中的玩家数量) + 1), 做动作
Loop - 动作
多面板 - 设置 Mulirboard 第 (循环整数A) 列,第 (循环整数B) 行的项目宽度为屏幕的 5.00%


多面板 - 设置 Mulirboard 第 0 列,第 0 行项目的显示风格: 显示 文字 隐藏 图标
多面板 - 显示 Mulirboard





  到这里,多面版的基本设定完成了,最后就需要做多面版的更新,因为这里是展示技能,所以当技能提升等级以后,就进行更新操作,这里用到了一个循环的嵌套:
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
单位 - 任意单位 学习技能

条件
动作
-------- 这里循环的2是多面版起始行 --------
For N_FOR 从 2 到 ((Player_group 中的玩家数量) + 1), 做动作
Loop - 动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
((触发单位) 的类型) 等于 (转换 Hero_name_s[N_FOR] 为单位类型)

Then - 动作
-------- 这里循环的1到6就是设定的英雄类型数量,进行二次判断比较 --------
For N_FOR2 从 1 到 6, 做动作
Loop - 动作
-------- 当触发单位和多面版上单位名称相对应的时候,再次判断触发单位对应的单位类型并调用技能 --------
如果所有条件成立则做动作1,否则做动作2
If - 条件
((触发单位) 的类型) 等于 Set_Hero_Type[N_FOR2]

Then - 动作
游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: Hero_name_s[N_FOR]
多面板 - 设置 Mulirboard 第 2 列,第 N_FOR 行的项目文本为 ((Set_Hero_ability[((N_FOR2 x 4) - 3)] 的名称) + ((转换 (Set_Hero_ability[((N_FOR2 x 4) - 3)] 的等级对 (触发单位)) 为字符串) + 级))
多面板 - 设置 Mulirboard 第 3 列,第 N_FOR 行的项目文本为 ((Set_Hero_ability[((N_FOR2 x 4) - 2)] 的名称) + ((转换 (Set_Hero_ability[((N_FOR2 x 4) - 2)] 的等级对 (触发单位)) 为字符串) + 级))
多面板 - 设置 Mulirboard 第 4 列,第 N_FOR 行的项目文本为 ((Set_Hero_ability[((N_FOR2 x 4) - 1)] 的名称) + ((转换 (Set_Hero_ability[((N_FOR2 x 4) - 1)] 的等级对 (触发单位)) 为字符串) + 级))
多面板 - 设置 Mulirboard 第 5 列,第 N_FOR 行的项目文本为 ((Set_Hero_ability[((N_FOR2 x 4) - 0)] 的名称) + ((转换 (Set_Hero_ability[((N_FOR2 x 4) - 0)] 的等级对 (触发单位)) 为字符串) + 级))

Else - 动作


Else - 动作
无动作

多面版-英雄技能表.w3x

15.34 KB, 下载次数: 163

離離草 title=
 楼主| 发表于 2008-9-1 11:37:30

演示8,装备限制

利用物品的生命值和等级来限制装备,演示中一共三个职业,每个职业各三个武器和防具,不同职业的装备不能混装,同职业同类装备限制一个,每个装备都有等级限制,只需要设定物品的生命值和物品等级就可以达到效果了。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
单位 - 任意单位 获得物品

条件
((触发单位) 是 英雄) 等于 TRUE
(((被操作物品) 的当前生命值) 大于或等于 1.00) and (((被操作物品) 的当前生命值) 小于或等于 9.00)

动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
((触发单位) 的类型) 等于 修补匠

Then - 动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
((触发单位) 的英雄等级) 大于或等于 ((被操作物品) 的物品等级)

Then - 动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
((转换 ((被操作物品) 的当前生命值) 为整数) mod 3) 等于 1

Then - 动作
For循环整数A从 1 到 6, 做动作
Loop - 动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
((触发单位) 物品栏第 (循环整数A) 格的物品) 不等于 (被操作物品)
((((触发单位) 物品栏第 (循环整数A) 格的物品) 的当前生命值) 大于或等于 1.00) and ((((触发单位) 物品栏第 (循环整数A) 格的物品) 的当前生命值) 小于或等于 9.00)

Then - 动作
游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: 你不可以同时...
英雄 - 丢弃 (被操作物品) ,从 (触发单位) 身上

Else - 动作
无动作



Else - 动作
英雄 - 丢弃 (被操作物品) ,从 (触发单位) 身上
游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: (((被操作物品) 的名字) + 不是你的装备!)


Else - 动作
游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: 你的等级还不...
英雄 - 丢弃 (被操作物品) ,从 (触发单位) 身上


Else - 动作
无动作






  演示要点:利用多个IF判断语句进行装备的限制,顺序是|触发单位类型>>单位等级>>物品所属>>物品分类|,其中单位等级直接利用物品的等级,当然也可以利用物品生命值,不过就需要另一种计算方式了。物品所属和物品分类就是利用物品生命值来进行运算获得需要的结果。另外,特殊情况是物品被攻击过,所以在获得物品的时候可以先设定物品的生命值,只要超过上限就可以避免意外了。

装备限制.w3x

15.34 KB, 下载次数: 160

離離草 title=
 楼主| 发表于 2008-9-1 11:38:58

演示9,通用自定义属性分配

 这个演示,是我自己最满意的Trigger演示,此演示可添加在任何数量玩家控制的任何数量英雄的地图中,虽然称不上完美,但实用性也是满好的哦。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
单位 - 任意单位 提升等级

条件
((触发单位) 是 英雄) 等于 TRUE

动作
单位 - 设置 (触发单位) 的自定义值为 (((触发单位) 的自定义值) + 2)
游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: (((触发单位) 的称谓) + 增加了2个属性点!)





  在这个触发中,我们设定了单位属性点的来源,该单位的自定义数,每提升一级增加2点,当然你也可以利用其它方式进行奖励,而具体的加点就是围绕单位自定义数来进行的。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
单位 - 任意单位 开始施放技能

条件
(施放技能) 等于 属性增强 (修正版)

动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
((触发单位) 的自定义值) 大于 0

Then - 动作
设置 HERO[(((触发单位) 的所有者) 的玩家索引号)] = (触发单位)
对话框 - 清空 UU
对话框 - 设置 UU 的标题为 (你需要添加 + (((触发单位) 的称谓) + (的属性吗? + ([ + ((转换 ((触发单位) 的自定义值) 为字符串) + ])))))
对话框 - 为 UU 添加按钮,按钮标题为: 力量
设置 UD[1] = (最后创建的对话框按钮)
对话框 - 为 UU 添加按钮,按钮标题为: 敏捷
设置 UD[2] = (最后创建的对话框按钮)
对话框 - 为 UU 添加按钮,按钮标题为: 智慧
设置 UD[3] = (最后创建的对话框按钮)
对话框 - 为 UU 添加按钮,按钮标题为: 放弃
设置 UD[4] = (最后创建的对话框按钮)
对话框 - 显示 UU 对 ((触发单位) 的所有者)

Else - 动作
游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: (((触发单位) 的称谓) + 没有多余的属性点!)






  在这个触发2中,是利用技能来运行属性加点的,然后通过判断该单位是否还有自定义数来决定是否执行加点动作。然后利用对话框显示该单位的名字以及剩余点数,并提供选择框。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件
对话框 - UU 被点击

条件
动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
(点击的对话框按钮) 等于 UD[1]

Then - 动作
英雄 - 修改 力量 对 HERO[((触发玩家) 的玩家索引号)] : 添加 10 点
单位 - 设置 HERO[((触发玩家) 的玩家索引号)] 的自定义值为 ((HERO[((触发玩家) 的玩家索引号)] 的自定义值) - 1)
游戏 - 对 (触发玩家) 在屏幕位移(0.00,0.00)处显示文本: ((HERO[((触发玩家) 的玩家索引号)] 的称谓) + 消耗1点属性点!力量被增强了!)

Else - 动作
无动作

如果所有条件成立则做动作1,否则做动作2
If - 条件
(点击的对话框按钮) 等于 UD[2]

Then - 动作
英雄 - 修改 敏捷 对 HERO[((触发玩家) 的玩家索引号)] : 添加 10 点
单位 - 设置 HERO[((触发玩家) 的玩家索引号)] 的自定义值为 ((HERO[((触发玩家) 的玩家索引号)] 的自定义值) - 1)
游戏 - 对 (触发玩家) 在屏幕位移(0.00,0.00)处显示文本: ((HERO[((触发玩家) 的玩家索引号)] 的称谓) + 消耗1点属性点!敏捷被增强了!)

Else - 动作
无动作

如果所有条件成立则做动作1,否则做动作2
If - 条件
(点击的对话框按钮) 等于 UD[3]

Then - 动作
英雄 - 修改 智力 对 HERO[((触发玩家) 的玩家索引号)] : 添加 10 点
单位 - 设置 HERO[((触发玩家) 的玩家索引号)] 的自定义值为 ((HERO[((触发玩家) 的玩家索引号)] 的自定义值) - 1)
游戏 - 对 (触发玩家) 在屏幕位移(0.00,0.00)处显示文本: ((HERO[((触发玩家) 的玩家索引号)] 的称谓) + 消耗1点属性点!智慧被增强了!)

Else - 动作
无动作

如果所有条件成立则做动作1,否则做动作2
If - 条件
(点击的对话框按钮) 等于 UD[4]

Then - 动作
游戏 - 对 (触发玩家) 在屏幕位移(0.00,0.00)处显示文本: (((触发玩家) 的名字) + 放弃了增强单位!)

Else - 动作
无动作






  触发3就是具体的对应不同的按钮点击来执行添加属性的动作了,这里我设定的是点击以后添加10,具体可以跟据自己的需要更改。
  在这个演示中,变量组hero[?]的应用是重点,大家可以看到,在触发2中,有赋值语句HERO[(((触发单位) 的所有者) 的玩家索引号)] = (触发单位),这个语句就是将使用了技能的触发单位进行变量保存,而在触发3中,使用了语句英雄 - 修改 力量 对 HERO[((触发玩家) 的玩家索引号)] : 添加 10 点对该变量保存的单位增加属性,这里分别使用了“触发单位的所有者”和“触发玩家”,区别在于,触发2中是因为单位引发的事件,所以我们需要使用“触发单位的所有者”的索引号来进行变量组的设定,因为每一个玩家的索引号是独立的,而对话框产生的情况下,一个玩家不可能控制第二个英雄引发触发器的,所以这个变量正常保留到了触发3执行的时候,因为触发3点击按钮的“触发玩家”实际上就是前一个引发对话框触发的单位所属玩家,因此这个变量值还是不变,而对这个变量值进行属性增加也就是正确的了。

自定义属性.w3x

15.34 KB, 下载次数: 163

快速回复 返回顶部 返回列表