请选择 进入手机版 | 继续访问电脑版

GA地精研究院

 找回密码
 立即注册
查看: 60933|回复: 188

[展示] 551155 演示集锦 -☆- 添加《新合成演示》- 160楼

[复制链接]
发表于 2008-3-29 19:31:30 | 显示全部楼层 |阅读模式
  依然是本着为人民服务的原则而制作,有区别于我集成式的演示《防守图演示》,这里是单位的很多自己原创的演示。也许还是有些人看不懂,但并不妨碍你在后面跟帖提问。在这里的第一章节里,我还是引用自己以前写的一篇关于变量的豆腐文,帖在一楼。因为演示中很多都是利用了变量的,另外考虑到UI问题,这次直接采用中文解说,以便交流理解,有问题请跟帖,谢谢大家。附指向表格和下载。 WE Study 2.5.rar (1.83 MB, 下载次数: 5107)

评分

参与人数 1威望 +200 收起 理由
hare613 + 200 神(形容词+名词)一样的 ..

查看全部评分

 楼主| 发表于 2008-3-29 19:32:01 | 显示全部楼层

551155关于变量的说明

  变量是什么,我一直说变量就是仓库,不同类型的变量可存储的东西是不同的,而变量组也就是将同一类型的仓库编号而已。
  变量的类型包括所有可控的元素:
  技能、攻击类型、布尔型、魔法效果、镜头物体、战斗声音、可破坏物、数值、物品、命令、单位、玩家等等。
  例如单位:大法师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-3-29 19:32:06 | 显示全部楼层

演示1,物品叠加

  以最简单的触发,制作最实用的事件,通用型物品叠加,可以将所有带有使用数次的物品进行重叠,实则居家旅行,杀人越货的必备触发。
[trigger]
    事件
        单位 - 任意单位 获得物品
    条件
        ((被操作物品) 的使用次数) 大于 0
        ((被操作物品) 的类型) 等于 (((触发单位) 所持有的 ((被操作物品) 的类型)) 的类型)
        (被操作物品) 不等于 ((触发单位) 所持有的 ((被操作物品) 的类型))
    动作
        物品 - 设置 ((触发单位) 所持有的 ((被操作物品) 的类型)) 的使用次数为 ((((触发单位) 所持有的 ((被操作物品) 的类型)) 的使用次数) + ((被操作物品) 的使用次数))
        物品 - 删除 (被操作物品)
[/trigger]
  修正声明:经过Froming朋友的提醒,修正了叠加的一个错误,就是最后的附加值1,修改成((被操作物品) 的使用次数)),这样当捡取已叠加物品(使用次数大于等于2)的时候,也会正常叠加数量。
  演示要点:实际上这个是利用系统的判断方式来进行检查的,当涉及到“触发单位所持有的指定物品类型”的时候,系统会自动检查触发单位身上1到6格的物品栏,也可以看成是一次循环判断。
  然后更新了一个配合的触发动作,该触发的作用是自动整理单位身上的可重叠物品。
[trigger]
    事件
        单位 - 任意单位 获得物品
    条件
    动作
        For循环整数A从 1 到 5, 做动作
            Loop - 动作
                For循环整数B从 ((循环整数A) + 1) 到 6, 做动作
                    Loop - 动作
                        如果所有条件成立则做动作1,否则做动作2
                            If - 条件
                                (((触发单位) 物品栏第 (循环整数A) 格的物品) 的使用次数) 大于 0
                                (((触发单位) 物品栏第 (循环整数A) 格的物品) 的类型) 等于 (((触发单位) 物品栏第 (循环整数B) 格的物品) 的类型)
                            Then - 动作
                                物品 - 设置 ((触发单位) 物品栏第 (循环整数A) 格的物品) 的使用次数为 ((((触发单位) 物品栏第 (循环整数A) 格的物品) 的使用次数) + (((触发单位) 物品栏第 (循环整数B) 格的物品) 的使用次数))
                                物品 - 删除 ((触发单位) 物品栏第 (循环整数B) 格的物品)
                            Else - 动作
                                无动作

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

物品叠加.w3x

18 KB, 下载次数: 555

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-29 19:32:21 | 显示全部楼层

演示2,排行榜

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

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

[trigger]
动作
        等待 2.00 秒
        排行榜 - 对 (所有玩家) 创建排行榜,使用标题: - ...
        玩家组 - 选取 (所有玩家) 内所有玩家 (排行榜 - 添加 (选取玩家) 到 (最后创建的排行榜) ,使用名字: ((选取玩家) 的名字) 设置分数: 0)
        排行榜 - 将 (最后创建的排行榜) 按 分数 使用 降序 排列
        排行榜 - 显示 (最后创建的排行榜)[/trigger] 
  使用等待的原因是如果没有等待时间在初始化的情况下不会显示排行榜), 而签后面的 杀敌数量 为排行榜的名字,下面句是最重要的,就是排行榜上显示的玩家,常用的就是使用玩家组的精选,因为需要把所有玩家都选入,那么就精选所有的玩家,然后在的动作是把精选的玩家名字填入排行榜,而标签就是下面显示的分栏,一般是把玩家的名字作为标签,所以采用的是 精选的玩家 的名字 ,而数值 需要你自己定义,最多采用的是 总采木量, 因为在RPG或一般对抗地图中,是不会进行伐木的,所以木头不会有收入,总采木量就是木头的总收入,不会显示出来的,因此可以做为变量使用来记录单位的杀敌数量等等,然后就是排行榜的排序,最后一步就是显示出排行榜。如果要将某些玩家排除在外,比方在对战的时候有几个电脑的玩家需要排除,常用的是第6和第12个,下列句可以加在排序和显示前面:
[trigger]动作
        排行榜 - 把 玩家6(橙色) 从 (最后创建的排行榜) 移除 [/trigger]
  对于创造排行榜已经解说完了,然后是使用排行榜,不能让排行榜就这样晾着吧,这次的使用方式是记录杀敌数量,先是事件,既然是记录杀敌数量,所以要先判断敌人是否死亡,(本方玩家1,敌人是玩家2):
[trigger]
事件
        单位 - 玩家2(蓝色)单位 死亡[/trigger]

  已经判断是玩家2的单位死亡了,一般状态下环境不需要,所以跳过,直接到动作部分(也可以用一个单位死亡的事件来做)。因为玩家2单位的死亡,所以我们的排行榜的数值要加1,因为我们使用 总采木量 来记录这个数值,而杀死玩家2的并不一定就是玩家1,为了方便,使用((凶手单位) 的 所有者),所以下面的动作就是:
[trigger]
动作
        玩家 - 设置 ((凶手单位) 的所有者) 的 现有木材 为 ((((凶手单位) 的所有者) 现有木材) + 1)[/trigger] 
  因为这里可以用变量代替,所以采用这种方式增加数值,如果你直接使用木材量的话,可以用增加属性来执行动作。数值已经增加了,但是并不会直接在排行榜上显示,所以我们要更改排行榜的数值,将数值改成总采木量:
         
[trigger]
动作
        排行榜 - 设置 ((凶手单位) 的所有者) 在 (最后创建的排行榜) 中的分数为: (((凶手单位) 的所有者) 总木材采集量)
[/trigger]  现在已经把排行榜上的数值更改了,因为我们有时要排名次和显示,所以还需要排序,再增加以下语句:
[trigger]
动作
        排行榜 - 将 (最后创建的排行榜) 按 分数 使用 降序 排列
        排行榜 - 显示 (最后创建的排行榜)[/trigger]  然后这个排行榜就可以正式投入使用了,创造一个排行榜容易,主要就是对排行榜的数值的控制才是排行榜真正的核心。一般都是采用变量,比如将木材数用变量替换就可以,如果是多人的话,尽量采用变量组来控制会比较好,附演示图。

排行榜.w3x

15 KB, 下载次数: 465

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-29 19:32:31 | 显示全部楼层

演示3,装备升级

  装备升级的方式有很多很多,其实综合起来和物品合成只有稍稍区别,也就是检查身上携带的物品以及通过条件来判断删除源物品创建新物品。装备升级可以用一个触发完成,但相对的改动起来会比较麻烦,因为是直接指定物品的,也可以用变量来进行设定,这样改动起来非常方便,先来看一下变量设定:
[trigger]
    事件
        地图初始化
    条件
    动作
        可见度 - 禁用战争迷雾
        可见度 - 禁用黑色阴影
        设置 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
[/trigger]
  演示要点:这里所有的变量组类型都是“物品类型”,TYPE[?]就是装备,TYPE Up[?]是配合物品,还有一个物品是用来升级装备的“武器升级”,在另一个触发里:
[trigger]
    事件
        单位 - 任意单位 获得物品
    条件
        ((被操作物品) 的类型) 等于 武器升级
    动作
        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 - 动作
                        无动作
[/trigger]
  演示要点:可以看到,这里的升级是先获得“武器升级”这个物品,然后再进行判断,一般来说,像用来升级的物品,尽量用书本或者神符等可以在物品携带满的情况下获得的物品来制作,这样就不会因为物品数量限制而无法获得。
  接下来是循环判断,在这里用了一个自定义数循环变量,然后看下面的动作,TYPE[?]和TYPE Up[?]在这里充当了一个相互配合的作用,在[?]下标相同的情况下合成才会实现,而这个下标的定义在前面一个触发里已经设定好了,只要修改前面触发里对等的两个变量就可以对升级产生不同的合成方式。
  在条件成立的情况下,将这两个物品删除,然后再赋于一个新的高一等级的物品,这个就是装备升级的特色,不同于物品合成的地方。然后看下面有一个N=4,其作用就是跳出这个循环,因为再执行下去N会自然变成N+1,也就是5。如果不跳出这个循环,将会出现装备一升到顶的情况:比如你拿着攻击之爪+3,再携带升级物品1到4级,会直接升级成攻击之爪+15。

装备升级1+1.w3x

23 KB, 下载次数: 505

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-29 19:32:36 | 显示全部楼层

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

  大家都有过设定物品变量的经历,一般情况下,我们采用直接在T中对变量进行赋值,一次次的选择物品,不但繁琐,而且很慢。这里是利用物品的生命值来进行物品初始化也就是物品定义的操作,方便,快捷,可扩展性强。首先我们需要对物品的生命值进行定义,考虑到赋值的需要,每一个物品的生命值必须区别开来(在以后的演示中,还会有更精细的要求)。如图:
YS1.JPG
  演示要点:这里可以看到,对41种物品每一个都设定了独立的生命值,从1到41,然后我们需要做第二步,将物品放在一个区域内:
YS2.JPG
  演示要点:这个区域没有什么限制,也不需要考虑这里是否会有玩家操作英雄拾取物品,因为我们的触发在会解决这些问题:
[trigger]
    事件
        时间 - 游戏开始 1.00 秒
    条件
    动作
        物品 - 选取 (可用地图区域) 内所有物品做动作
            Loop - 动作
                设置 TP[(转换 ((选取物品) 的当前生命值) 为整数)] = ((选取物品) 的类型)
                游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: ((TP[ + (转换 (转换 ((选取物品) 的当前生命值) 为整数) 为字符串)) + (]= + ((选取物品) 的名字)))
                物品 - 删除 (选取物品)[/trigger]
  演示要点:这里的TP变量组是物品类型,简单的说,就是将TP[1]到TP[41]分别对应了41种我们放置在指定区域中的物品类型,当然我们可以设定更多,也可以利用不同的区域对不同的变量组进行设定,至此,物品初始化完成。另外,动作第二条是输出文字,有没有都没关系。

物品初始化.w3x

23 KB, 下载次数: 397

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-29 19:32:53 | 显示全部楼层

演示5,练功房

  练功房其实和刷小怪没什么区别,重点就在于控制刷兵的开和关,一般地图中练功房都是独立存在的区域,所以我们需要有两个触发控制进出,一个触发控制刷怪。
[trigger]
    事件
        单位 - 单位进入 矩形区域 000 <预设>
    条件
        (((触发单位) 所持有的 太阳钥匙) 的类型) 等于 太阳钥匙
        ((矩形区域 001 <预设> 内的所有单位) 中的单位数量) 等于 0
    动作
        单位 - 立即移动 (触发单位) 到 (矩形区域 001 <预设> 的中心点)
        等待 2.00 秒
        For循环整数A从 1 到 12, 做动作
            Loop - 动作
                单位 - 创建 1 个 步兵 给 中立敌对 在 (矩形区域 001 <预设> 内的随机点) ,面向角度为 默认建筑朝向 度
                设置 MM = (MM + 1)

[/trigger]
  演示要点: 其中MM是整数变量,用来记录里面小怪的数量,默认值为0,单位携带指定物品是为了做限制。利用循环来创建单位会比直接创建指定数量的单位更容易控制。
[trigger]
    事件
        单位 - 任意单位 死亡
    条件
        (矩形区域 001 <预设> 内存在 (触发单位)) 等于 TRUE
        ((触发单位) 是 英雄) 等于 FALSE
    动作
        设置 MM = (MM - 1)
        如果所有条件成立则做动作1,否则做动作2
            If - 条件
                MM 等于 0
            Then - 动作
                For循环整数A从 1 到 12, 做动作
                    Loop - 动作
                        单位 - 创建 1 个 步兵 给 中立敌对 在 (矩形区域 001 <预设> 内的随机点) ,面向角度为 默认建筑朝向 度
                        设置 MM = (MM + 1)
            Else - 动作
                无动作[/trigger]
  演示要点: 利用单位死亡来进行判断是否刷新,条件就是判断死亡事件是发生在练功房区域而不是其它什么地方,而当单位死亡的时候,就减去MM值,当MM的值为0的时候,就再次刷兵。
[trigger]
    事件
        单位 - 单位进入 矩形区域 002 <预设>
    条件
        ((触发单位) 是 英雄) 等于 TRUE
    动作
        单位 - 立即移动 (触发单位) 到 (((触发单位) 的所有者) 的游戏开始位置)
        单位组 - 选取 (矩形区域 001 <预设> 内的所有单位) 内所有单位做动作
            Loop - 动作
                单位 - 删除 (选取单位)
        设置 MM = 0
[/trigger]
  演示要点: 当你的英雄离开练功房以后,为了避免因为练功房区域还存在其它单位,而其它英雄无法进入,需要清除该区域内的单位。同时,必须将MM的值清零,否则同样因为MM不等于0而无法开启练功房。
[trigger]
    事件
        单位 - 任意单位 死亡
    条件
        ((触发单位) 是 英雄) 等于 TRUE
        (矩形区域 001 <预设> 内存在 (触发单位)) 等于 TRUE
    动作
        触发器 - 运行 Leave <预设> (无视条件)
[/trigger]
  演示要点:类似于英雄死亡的特殊事件尽管发生的机率比较小,但也不表示不会发生,有时需要添加一些动作来避免因为特殊事件造成的问题,英雄死亡时可以移动尸体的,和单位进入出口区域(Leave触发器)性质一样。

练功房.w3x

15 KB, 下载次数: 475

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-29 19:33:04 | 显示全部楼层

演示6,通用物品合成

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

通用物品合成.w3x

20 KB, 下载次数: 502

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-29 19:33:18 | 显示全部楼层

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

  先说随机选择英雄,不同于我的防守图演示,这里利用了一个循环跳出的方式简化了很多的操作。除了定义单位类型的触发,就是执行选择的部分了,可以看到我这里定义了一个玩家组变量Player_group,然后用来取代下面的(所有 用户 控制的玩家)这个组值,值得一提的是,中间有一个语句无法取得,原来就是我在疑难区发的帖子,不能在枚举中获取组中单位数量。
  然后就是Un,一个整数型变量,用来获取随机数,因为我设定的英雄一共六个,所以是1到6,再接下来就是重点了,N_FOR是整数型变量,这一句是自定义数循环,使用这个的好处下面就可以看到了。这个循环的作用就是下面的判断语句: (Hero[N_FOR] 的类型) 等于 Set_Hero_Type[Un],这一句的效果就是每一个玩家在创建英雄的时候,都会把单位组变量Hero[?]的类型和单位类型变量Set_Hero_Type[?]进行对比,因为是循环嘛,所以如果已经选择过的英雄会因为下面的Hero[?]赋值动作被赋值,所以当比较出已经被选择过的单位,就会再次对随机数进行赋值,而把N_FOR 赋值为0就可以再一次重复进行循环比较,直到选出不相同的单位为止。
[trigger]    事件
        时间 - 游戏开始 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]
  然后就是多面版的基本设置,多面版就是二元格子,以行和列组合来定位,一般来说,我们创建的多面版需要先做一个标题和分类,分类都是做在第一行:
[trigger]    事件
        时间 - 游戏开始 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]
  另外就是添加的部分,因为做的是英雄技能展示的演示,所以需要指定显示一些英雄的数据,在前面已经定义好英雄的数值和技能以后,对选定的英雄进行添加到多面版的操作(接前面选择英雄以后):
[trigger]                多面板 - 设置 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]
  这样已经把随机选到的英雄都添加进了多面版,然后再进一步操作多面版,因为默认格子比较小,所以需要做放大处理,最后还需要显示出来:
[trigger]        For循环整数A从 1 到 5, 做动作
            Loop - 动作
                For循环整数B从 1 到 ((Player_group 中的玩家数量) + 1), 做动作
                    Loop - 动作
                        多面板 - 设置 Mulirboard 第 (循环整数A) 列,第 (循环整数B) 行的项目宽度为屏幕的 5.00%
        多面板 - 设置 Mulirboard 第 0 列,第 0 行项目的显示风格: 显示 文字 隐藏 图标
        多面板 - 显示 Mulirboard[/trigger]
  到这里,多面版的基本设定完成了,最后就需要做多面版的更新,因为这里是展示技能,所以当技能提升等级以后,就进行更新操作,这里用到了一个循环的嵌套:
[trigger]    事件
        单位 - 任意单位 学习技能
    条件
    动作
        -------- 这里循环的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 - 动作
                        无动作

[/trigger]

多面版-英雄技能表&随机选择英雄.w3x

18 KB, 下载次数: 494

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-29 19:33:27 | 显示全部楼层

演示8,装备限制

  利用物品的生命值和等级来限制装备,演示中一共三个职业,每个职业各三个武器和防具,不同职业的装备不能混装,同职业同类装备限制一个,每个装备都有等级限制,只需要设定物品的生命值和物品等级就可以达到效果了。
[trigger]
    事件
        单位 - 任意单位 获得物品
    条件
        ((触发单位) 是 英雄) 等于 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 - 动作
                无动作

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

装备限制.w3x

18 KB, 下载次数: 403

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-29 19:35:00 | 显示全部楼层

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

  这个演示,是我自己最满意的Trigger演示,此演示可添加在任何数量玩家控制的任何数量英雄的地图中,虽然称不上完美,但实用性也是满好的哦。
[trigger]
事件
        单位 - 任意单位 提升等级
条件
        ((触发单位) 是 英雄) 等于 TRUE
动作
        单位 - 设置 (触发单位) 的自定义值为 (((触发单位) 的自定义值) + 2)
        游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: (((触发单位) 的称谓) + 增加了2个属性点!)
[/trigger]
  在这个触发中,我们设定了单位属性点的来源,该单位的自定义数,每提升一级增加2点,当然你也可以利用其它方式进行奖励,而具体的加点就是围绕单位自定义数来进行的。
[trigger]
    事件
        单位 - 任意单位 开始施放技能
    条件
        (施放技能) 等于 属性增强 (修正版)
    动作
        如果所有条件成立则做动作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)处显示文本: (((触发单位) 的称谓) + 没有多余的属性点!)
[/trigger]
  在这个触发2中,是利用技能来运行属性加点的,然后通过判断该单位是否还有自定义数来决定是否执行加点动作。然后利用对话框显示该单位的名字以及剩余点数,并提供选择框。
[trigger]
    事件
        对话框 - 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 - 动作
                无动作[/trigger]
  触发3就是具体的对应不同的按钮点击来执行添加属性的动作了,这里我设定的是点击以后添加10,具体可以跟据自己的需要更改。
  在这个演示中,变量组hero[?]的应用是重点,大家可以看到,在触发2中,有赋值语句HERO[(((触发单位) 的所有者) 的玩家索引号)] = (触发单位),这个语句就是将使用了技能的触发单位进行变量保存,而在触发3中,使用了语句英雄 - 修改 力量 对 HERO[((触发玩家) 的玩家索引号)] : 添加 10 点对该变量保存的单位增加属性,这里分别使用了“触发单位的所有者”和“触发玩家”,区别在于,触发2中是因为单位引发的事件,所以我们需要使用“触发单位的所有者”的索引号来进行变量组的设定,因为每一个玩家的索引号是独立的,而对话框产生的情况下,一个玩家不可能控制第二个英雄引发触发器的,所以这个变量正常保留到了触发3执行的时候,因为触发3点击按钮的“触发玩家”实际上就是前一个引发对话框触发的单位所属玩家,因此这个变量值还是不变,而对这个变量值进行属性增加也就是正确的了。

自定义属性.w3x

14 KB, 下载次数: 351

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-29 19:35:57 | 显示全部楼层

演示10,决斗

因为是单人模式,所以游戏中输入dd 的话,其它英雄会对你的英雄施放决斗(多人情况下可以免这一步),
当你拒绝决斗并不会有什么效果,只是出现提示,要是你答应决斗,那你身上所有物品都会被移空(无装备决斗),
决斗胜利者奖励2000块钱,失败不会失去什么,当然这些都可以自己添加……这个演示就为了好玩~

[trigger]
    事件
        单位 - 任意单位 发动技能效果
    条件
        (施放技能) 等于 决斗(正)
    动作
        设置 ds[1] = (触发单位)
        设置 ds[2] = (技能施放目标)
        设置 P[1] = ((触发单位) 的位置)
        设置 P[2] = ((技能施放目标) 的位置)
        对话框 - 清空 PK
        对话框 - 为 PK 添加按钮,按钮标题为: (来自 + (((触发单位) 的称谓) + 的决斗是否同意?))
        对话框 - 为 PK 添加按钮,按钮标题为: 同意
        设置 PK_N[1] = (最后创建的对话框按钮)
        对话框 - 为 PK 添加按钮,按钮标题为: 拒绝
        设置 PK_N[2] = (最后创建的对话框按钮)
        对话框 - 显示 PK 对 ((技能施放目标) 的所有者)
        玩家组 - 选取 (所有玩家) 内所有玩家 (玩家 - 禁用 决斗(正) 对 (选取玩家))
[/trigger]
  演示要点:需要清楚触发单位和技能施放目标的作用,因为会在不同的触发中运用到这些单位,所以需要用变量来保存,另外,禁用技能是最有效的限制重复决斗BUG的动作。
[trigger]
     事件
        对话框 - PK 被点击
    条件
    动作
        如果所有条件成立则做动作1,否则做动作2
            If - 条件
                (点击的对话框按钮) 等于 PK_N[1]
            Then - 动作
                单位 - 设置 ds[1] 的生命值为 100.00%
                单位 - 立即移动 ds[1] 到 (矩形区域 000 <预设> 的中心点)
                镜头 - 平移 (ds[1] 的所有者) 的镜头到 (矩形区域 003 <预设> 的中心点) ,使用时间 0.20 秒
                单位 - 设置 ds[2] 的魔法值为 100.00%
                单位 - 立即移动 ds[2] 到 (矩形区域 001 <预设> 的中心点)
                镜头 - 平移 (ds[2] 的所有者) 的镜头到 (矩形区域 003 <预设> 的中心点) ,使用时间 0.20 秒
                For循环整数A从 1 到 6, 做动作
                    Loop - 动作
                        设置 Tt[(循环整数A)] = (ds[1] 物品栏第 (循环整数A) 格的物品)
                        设置 Tt[((循环整数A) + 6)] = (ds[2] 物品栏第 (循环整数A) 格的物品)
                        物品 - 移动 Tt[(循环整数A)] 到 (矩形区域 002 <预设> 的中心点)
                        物品 - 移动 Tt[((循环整数A) + 6)] 到 (矩形区域 002 <预设> 的中心点)
                玩家 - 命令 (ds[1] 的所有者) 设置对 (ds[2] 的所有者) 的联盟状态为 敌对但共享视野
                玩家 - 命令 (ds[2] 的所有者) 设置对 (ds[1] 的所有者) 的联盟状态为 敌对但共享视野
            Else - 动作
                无动作
        如果所有条件成立则做动作1,否则做动作2
            If - 条件
                (点击的对话框按钮) 等于 PK_N[2]
            Then - 动作
                任务 - 对 (所有玩家) 发送 提示 信息: ((ds[2] 的称谓) + (拒绝了来自 + ((ds[1] 的称谓) + 的决斗要求!)))
                玩家组 - 选取 (所有玩家) 内所有玩家 (玩家 - 允许 决斗(正) 对 (选取玩家))
            Else - 动作
                无动作
[/trigger]
  演示要点:对不同的对话按钮进行点击会产生不一样的动作,其中FOR循环的物品清理动作就是将单位身上的物品通过变量来进行转移,而在决斗结束以后也可以通过变量转移回来,如果在循环中加入条件,也可以单独限制某些物品,比如不充许携带药水等。
[trigger]
    事件
        单位 - 任意单位 死亡
    条件
        (矩形区域 003 <预设> 内存在 (触发单位)) 等于 TRUE
    动作
        如果所有条件成立则做动作1,否则做动作2
            If - 条件
                (触发单位) 等于 ds[1]
            Then - 动作
                任务 - 对 (所有玩家) 发送 提示 信息: ((ds[2] 的称谓) + 赢得了胜利!奖励2000块钱!)
                玩家 - 增加 2000 (ds[2] 的所有者) 的 现有黄金
                英雄 - 立即复活 (触发单位) 在 P[1] , 隐藏 复活动画
                单位 - 立即移动 (凶手单位) 到 P[2]
                单位 - 设置 (凶手单位) 的生命值为 100.00%
                单位 - 设置 (触发单位) 的魔法值为 100.00%
            Else - 动作
                任务 - 对 (所有玩家) 发送 提示 信息: ((ds[1] 的称谓) + 赢得了胜利!奖励2000块钱!)
                玩家 - 增加 2000 (ds[1] 的所有者) 的 现有黄金
                英雄 - 立即复活 (触发单位) 在 P[2] , 隐藏 复活动画
                单位 - 立即移动 (凶手单位) 到 P[1]
                单位 - 设置 (凶手单位) 的生命值为 100.00%
                单位 - 设置 (触发单位) 的魔法值为 100.00%
        玩家 - 命令 (ds[1] 的所有者) 设置对 (ds[2] 的所有者) 的联盟状态为 结盟并共享视野
        镜头 - 平移 (ds[1] 的所有者) 的镜头到 P[1] ,使用时间 0.20 秒
        玩家 - 命令 (ds[2] 的所有者) 设置对 (ds[1] 的所有者) 的联盟状态为 结盟并共享视野
        镜头 - 平移 (ds[2] 的所有者) 的镜头到 P[2] ,使用时间 0.20 秒
        玩家组 - 选取 (所有玩家) 内所有玩家 (玩家 - 允许 决斗(正) 对 (选取玩家))
        For循环整数A从 1 到 6, 做动作
            Loop - 动作
                英雄 - 把 Tt[(循环整数A)] 给 ds[1]
                英雄 - 把 Tt[((循环整数A) + 6)] 给 ds[2]
[/trigger]
  演示要点:简单的单位死亡事件,如果是两个单位进行决斗,通过判断其中一个单位的死亡,就可以取值另一个单位的死亡了,决斗结束记得把限制重新开启,收取的物品归还单位,同时,因为精确定位到决斗的单位,所以也可以针对单位做一些奖罚系统。

决斗(对话框).w3x

21 KB, 下载次数: 394

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-29 19:54:32 | 显示全部楼层

演示11 - 选择英雄的常用四种方式

  现在各类地图中,比较常用的有四种选英雄的方式,小精灵选择,双击选择,随机选择,酒馆选择以及由这四种衍生出的其它方式,这里介绍的就是这四种,等你学会以后,自然会创造适合自己的方式了。
  本演示初始化设置了hero_type变量组来保存24个英雄类型,设置了24个区域(一大一小重叠),Region用来保存大区域12个,设置对话框1个,对话框按钮4个来选择方式,具体触发将不再重复说明。

  一、精灵选择英雄(两个触发)
[trigger]
create fairy
    事件
        地图初始化
    条件
    动作
        等待 0.50 秒
        玩家组 - 选取 (所有符合 ((((匹配玩家) 的控制者) 等于 用户) and (((匹配玩家) 的游戏状态) 等于 正在游戏)) 的玩家) 内所有玩家做动作
            Loop - 动作
                单位 - 创建 1 个 小精灵 给 (选取玩家) 在 ((选取玩家) 的游戏开始位置) ,面向角度为 默认建筑朝向 度
                单位 - 设置 (最后创建的单位) 关闭 碰撞

[/trigger]
[trigger]
fairy choice
    事件
        单位 - 单位进入 s 001 <预设>
        单位 - 单位进入 s 002 <预设>
        单位 - 单位进入 s 003 <预设>
        单位 - 单位进入 s 004 <预设>
        单位 - 单位进入 s 005 <预设>
        单位 - 单位进入 s 006 <预设>
        单位 - 单位进入 s 007 <预设>
        单位 - 单位进入 s 008 <预设>
        单位 - 单位进入 s 009 <预设>
        单位 - 单位进入 s 010 <预设>
        单位 - 单位进入 s 011 <预设>
        单位 - 单位进入 s 012 <预设>
    条件
        ((触发单位) 的类型) 等于 小精灵
        player_hero[(((触发单位) 的所有者) 的玩家索引号)] 等于 没有单位
    动作
        For循环整数A从 1 到 12, 做动作
            Loop - 动作
                如果所有条件成立则做动作1,否则做动作2
                    If - 条件
                        (Region[(循环整数A)] 内存在 (触发单位)) 等于 TRUE
                    Then - 动作
                        单位组 - 选取 (Region[(循环整数A)] 内满足 ((((匹配单位) 是 英雄) 等于 TRUE) and (((匹配单位) 的所有者) 等于 中立被动)) 的所有单位) 内所有单位做动作
                            Loop - 动作
                                单位 - 改变 (选取单位) 所属为 ((触发单位) 的所有者) 并 改变颜色
                                设置 player_hero[(((触发单位) 的所有者) 的玩家索引号)] = (选取单位)
                                任务 - 对 (所有玩家) 发送 提示 信息: ((((触发单位) 的所有者) 的名字) + (选择了 + (((选取单位) 的名字) + !)))
                        单位 - 使 (触发单位) 爆炸而死
                    Else - 动作
                        无动作
[/trigger]
  演示要点:前面已经提到有一大一小两个区域组合成一个触发点,因为区域判断本身的BUG,所以设定为当单位进入小区域的时候,判断大区域中是否存在触发单位。这里是利用循环判断单位存在于12个区域中的哪一个,然后对区域内的英雄执行转换所属操作(把多个触发合成为一个)。

  二、双击选择英雄(两种模式)
[trigger]
dblclick choice no1
    事件
        玩家 - 玩家1(红色) 选择 一个单位
        玩家 - 玩家2(蓝色) 选择 一个单位
        玩家 - 玩家3(青色) 选择 一个单位
        玩家 - 玩家4(紫色) 选择 一个单位
        玩家 - 玩家5(黄色) 选择 一个单位
        玩家 - 玩家6(橙色) 选择 一个单位
    条件
        ((触发单位) 的所有者) 等于 中立被动
        ((触发单位) 是 英雄) 等于 TRUE
        player_hero[((触发玩家) 的玩家索引号)] 等于 没有单位
    动作
        如果所有条件成立则做动作1,否则做动作2
            If - 条件
                dblclick_unit[((触发玩家) 的玩家索引号)] 等于 (触发单位)
            Then - 动作
                单位 - 改变 (触发单位) 所属为 (触发玩家) 并 改变颜色
                设置 player_hero[((触发玩家) 的玩家索引号)] = (触发单位)
                任务 - 对 (所有玩家) 发送 提示 信息: (((触发玩家) 的名字) + (选择了 + (((触发单位) 的名字) + !)))
            Else - 动作
                设置 dblclick_unit[((触发玩家) 的玩家索引号)] = (触发单位)
[/trigger]
[trigger]
dblclick choice no2
    事件
        玩家 - 玩家1(红色) 选择 一个单位
        玩家 - 玩家2(蓝色) 选择 一个单位
        玩家 - 玩家3(青色) 选择 一个单位
        玩家 - 玩家4(紫色) 选择 一个单位
        玩家 - 玩家5(黄色) 选择 一个单位
        玩家 - 玩家6(橙色) 选择 一个单位
    条件
        ((触发单位) 的所有者) 等于 中立被动
        ((触发单位) 是 英雄) 等于 TRUE
        player_hero[((触发玩家) 的玩家索引号)] 等于 没有单位
    动作
        如果所有条件成立则做动作1,否则做动作2
            If - 条件
                ((触发单位) 的自定义值) 等于 ((触发玩家) 的玩家索引号)
            Then - 动作
                单位 - 改变 (触发单位) 所属为 (触发玩家) 并 改变颜色
                设置 player_hero[((触发玩家) 的玩家索引号)] = (触发单位)
                任务 - 对 (所有玩家) 发送 提示 信息: (((触发玩家) 的名字) + (选择了 + (((触发单位) 的名字) + !)))
            Else - 动作
                单位 - 设置 (触发单位) 的自定义值为 ((触发玩家) 的玩家索引号)
                等待 0.10 秒
                单位 - 设置 (触发单位) 的自定义值为 99
[/trigger]
  演示要点:两种方式从形式上基本相同,都是先判断玩家选择了单位,然后再执行动作,区别在于,第一种方式采用的是变量记录被选择的英雄,所以只需要连续两次点击在需要选择的英雄上就可以选择成功了,没有时间限制;第二种方式需要双速双击,也就是说必须要0.10秒内连续双击英雄才可以选择成功。条件中的“ player_hero[((触发玩家) 的玩家索引号)] 等于 没有单位”作用为是为了判断该玩家是否有选择过英雄,限制选择的英雄数量为1。

  三、随机选择英雄(两种模式)
[trigger]
random choice hide
    事件
    条件
    动作
        -------- 24为可选英雄类型的总数量 --------
        设置 Dialog_Button_n = 24
        -------- 因为采用数值转玩家索引的方式连续队列创建英雄,所以所有玩家必须是从1开始的连续编号 --------
        For循环整数A从 1 到 ((所有符合 ((((匹配玩家) 的控制者) 等于 用户) and (((匹配玩家) 的游戏状态) 等于 正在游戏)) 的玩家) 中的玩家数量), 做动作
            Loop - 动作
                等待 0.10 秒
                设置 Dialog_Button_s = (随机整数,最小值: 1 最大值: Dialog_Button_n)
                单位 - 创建 1 个 hero_type[Dialog_Button_s] 给 (玩家 (循环整数A)) 在 ((玩家 (循环整数A)) 的游戏开始位置) ,面向角度为 默认建筑朝向 度
                设置 player_hero[(循环整数A)] = (最后创建的单位)
                任务 - 对 (所有玩家) 发送 提示 信息: (((玩家 (循环整数A)) 的名字) + (选择了 + ((player_hero[(循环整数A)] 的名字) + !)))
                设置 hero_type[25] = hero_type[Dialog_Button_s]
                设置 hero_type[Dialog_Button_s] = hero_type[Dialog_Button_n]
                设置 hero_type[Dialog_Button_n] = hero_type[25]
                设置 Dialog_Button_n = (Dialog_Button_n - 1)
[/trigger]
[trigger]
random choice show
    事件
    条件
    动作
        单位组 - 选取 ((可用地图区域) 内满足 ((((匹配单位) 是 英雄) 等于 TRUE) and (((匹配单位) 的所有者) 等于 中立被动)) 的所有单位) 内所有单位做动作
            Loop - 动作
                单位组 - 添加 (选取单位) 到 random_choice_show
        For循环整数A从 1 到 ((所有符合 ((((匹配玩家) 的控制者) 等于 用户) and (((匹配玩家) 的游戏状态) 等于 正在游戏)) 的玩家) 中的玩家数量), 做动作
            Loop - 动作
                等待 0.10 秒
                设置 player_hero[(循环整数A)] = (random_choice_show 中随机选取的一个单位)
                单位 - 改变 player_hero[(循环整数A)] 所属为 (玩家 (循环整数A)) 并 改变颜色
                单位组 - 把 player_hero[(循环整数A)] 从 random_choice_show 移除
                任务 - 对 (所有玩家) 发送 提示 信息: (((玩家 (循环整数A)) 的名字) + (选择了 + ((player_hero[(循环整数A)] 的名字) + !)))
[/trigger]

  演示要点:随机选择英雄重点当然在随机上,第一种方式是隐藏式随机,就是地图上没有出现任何英雄,直接在变量组中调用一个英雄;这里制作了一个新的模式,数据递减,就是一共24个英雄类型,利用变量Dialog_Button_n来记录未被选择的英雄数量,当选择了其中一个以后,将已被选择过的英雄类型通过替换移动到最末位,同时将Dialog_Button_n减少1,这样当选择了一个英雄后可选择的就是23个而且不会重复选择到已经选过的英雄类型。而第二种方式是读取地图上存在的英雄并添加到单位组,然后随机选择一个变量组中的英雄改变所属并将该单位移出单位组,也不会被重复选择。这两个触发都没有事件,直接通过对话框按钮调用,当然自己制作的时候可以添加需要的事件。

  四、酒馆选择英雄(两个触发)

[trigger]
create tavern
    事件
    条件
    动作
        等待 0.50 秒
        玩家组 - 选取 (所有符合 ((((匹配玩家) 的控制者) 等于 用户) and (((匹配玩家) 的游戏状态) 等于 正在游戏)) 的玩家) 内所有玩家做动作
            Loop - 动作
                单位 - 创建 1 个 小精灵 给 (选取玩家) 在 ((选取玩家) 的游戏开始位置) ,面向角度为 默认建筑朝向 度
                玩家 - 增加 4500 (选取玩家) 的 现有黄金
                玩家 - 增加 1000 (选取玩家) 的 现有木材
                玩家 - 设置 (选取玩家) 的 可用人口数 为 80
                玩家 - 限制英雄数量为 1 对 (选取玩家)
        单位 - 创建 1 个 小酒馆 给 中立被动 在 ((触发玩家) 的游戏开始位置) ,面向角度为 默认建筑朝向 度
        设置 tavern = (最后创建的单位)
        等待 2.00 秒
        设置 Dialog_Button_n = 24
        -------- 给小酒馆随机放置10个英雄 --------
        For循环整数A从 1 到 10, 做动作
            Loop - 动作
                等待 0.02 秒
                设置 Dialog_Button_s = (随机整数,最小值: 1 最大值: Dialog_Button_n)
                中立建筑 - 添加 hero_type[Dialog_Button_s] 到 tavern 并设置库存量: 1 最大库存量: 1
                设置 hero_type[25] = hero_type[Dialog_Button_s]
                设置 hero_type[Dialog_Button_s] = hero_type[Dialog_Button_n]
                设置 hero_type[Dialog_Button_n] = hero_type[25]
                设置 Dialog_Button_n = (Dialog_Button_n - 1)
[/trigger]
[trigger]
tavern choice
    事件
        单位 - 任意单位 出售单位
    条件
        ((被贩卖单位) 是 英雄) 等于 TRUE
        ((购买者) 的类型) 等于 小精灵
    动作
        任务 - 对 (所有玩家) 发送 提示 信息: ((((购买者) 的所有者) 的名字) + (选择了 + (((被贩卖单位) 的名字) + !)))
        设置 player_hero[(((购买者) 的所有者) 的玩家索引号)] = (被贩卖单位)
        -------- 禁止所有玩家再次购买同一类型的英雄 --------
        玩家组 - 选取 (所有玩家) 内所有玩家做动作
            Loop - 动作
                玩家 - 设置 ((被贩卖单位) 的类型) 不可取得的 对 (选取玩家)
        -------- 确保不再使用的前题下,直接KILL掉购买用的小精灵 --------
        单位 - 杀死 (购买者)
[/trigger]
  演示要点:酒馆选择,都需要一个购买单位,触发1里面创建的小精灵已经取消了所有技能和移动速度,所以不需要担心会影响到什么,同时,限定了可选择英雄数量为1,当购买了英雄以后,酒馆对购买者将不再开放;这里需要提醒一下的是,如果是自定义英雄,需要在“游戏平衡常数”中的”科技树-从属等价物-英雄“中添加自定义英雄,否则数量限制无效。在触发2中,当玩家购买了一个英雄以后,通过这个触发,其它玩家也将不可以再购得这个英雄。另外,在触发1中还设定了随机添加英雄到酒馆的动作,有兴趣的可以看一下,不过需要给酒馆添加”出售单位“的技能才可以咯。

                                      GA 551155 2008.4.20

选择英雄的N种方式.w3x

27 KB, 下载次数: 603

回复 支持 反对

使用道具 举报

发表于 2008-3-29 20:32:53 | 显示全部楼层
恩恩,演示集呀~~
支持支持~~
回复 支持 反对

使用道具 举报

发表于 2008-3-29 20:45:42 | 显示全部楼层
支持
回复 支持 反对

使用道具 举报

发表于 2008-3-29 20:56:45 | 显示全部楼层
551155先生终于又开始另一项高楼工程. 恭喜恭喜
回复 支持 反对

使用道具 举报

发表于 2008-3-29 21:33:25 | 显示全部楼层


先收藏了
回复 支持 反对

使用道具 举报

发表于 2008-3-29 22:28:35 | 显示全部楼层
  [s:124] 厉害
回复 支持 反对

使用道具 举报

发表于 2008-3-30 00:45:51 | 显示全部楼层
不错呢。支持呀。
回复 支持 反对

使用道具 举报

发表于 2008-3-30 10:36:12 | 显示全部楼层
这可是潜力帖啊~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2021-7-27 00:08 , Processed in 4.321539 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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