找回密码
 点一下
查看: 877|回复: 13

帮忙解决下这个触发存在的问题

[复制链接]
发表于 2012-1-6 14:05:29 | 显示全部楼层 |阅读模式
最近在琢磨实现“有时限的技能”
1.某单位使用物品a,获得技能A,等待20秒,删除技能A
2.在该单位拥有临时技能(如A)的时候,使用物品b,删除A,获得技能B

但是这个思路在实际中会出现几种问题:
1.单位获得技能A后,第17秒,使用物品b,删除技能A,获得技能B,结果3秒后,B技能也被删了……


在论坛搜索了老半天,发现大家都说“等待”这个功能并不好,但我感觉很简洁啊。
主要考虑到多玩家共用一个触发,所有非常棘手啊,水平实在有限,请大侠指点!
 楼主| 发表于 2012-1-6 14:06:32 | 显示全部楼层
[trigger]do 复制
    事件
        单位 - 任意单位 获得物品
    条件
        ((被操作物品) 的分类) 等于 战役
    动作
        循环动作[循环整数A]从 1 到 PillNO, 运行 (Loop - 动作)
            Loop - 动作
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        ((被操作物品) 的类型) 等于 PillItem[循环整数A [R]]
                    Then - 动作
                        单位组 - 选取 (属于 ((触发单位) 的所有者) 并满足 (((匹配单位) 是 英雄) 等于 TRUE) 的所有单位) 内所有单位做动作
                            Loop - 动作
                                单位 - 为 (选取单位) 删除 Pillbook2[(((触发单位) 的所有者) 的玩家索引号)]
                        设置 Pillbook2[(((触发单位) 的所有者) 的玩家索引号)] = Pillbook[循环整数A [R]]
                        设置 Pilllong2[(((触发单位) 的所有者) 的玩家索引号)] = Pilllong[循环整数A [R]]
                        设置 PillMode2[(((触发单位) 的所有者) 的玩家索引号)] = PillMode[循环整数A [R]]
                    Else - 动作
        单位组 - 选取 (属于 ((触发单位) 的所有者) 并满足 (((((匹配单位) 是 英雄) 等于 TRUE) 且 (((匹配单位) 是存活的) 等于 TRUE)) 且 (((匹配单位) 是 被变形的) 等于 FALSE)) 的所有单位) 内所有单位做动作
            Loop - 动作
                单位 - 为 (选取单位) 添加 Pillbook2[(((触发单位) 的所有者) 的玩家索引号)]
                玩家 - 设置 ((触发单位) 的所有者) 的 Pillbook2[(((触发单位) 的所有者) 的玩家索引号)] 为 禁用
                英雄 - 创建 PillMode2[(((触发单位) 的所有者) 的玩家索引号)] 给 (选取单位)
        游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示 10.00 秒的文本信息: ((你现在拥有了 + (Pillbook2[(((触发单位) 的所有者) 的玩家索引号)] 的名称)) + ((技能,效果将在 + (转换 Pilllong2[(((触发单位) 的所有者) 的玩家索引号)] 为字符串)) + 秒后自动消失!))
        等待 Pilllong2[(((触发单位) 的所有者) 的玩家索引号)] 秒(游戏时间)
        单位组 - 选取 (属于 ((触发单位) 的所有者) 并满足 (((匹配单位) 是 英雄) 等于 TRUE) 的所有单位) 内所有单位做动作
            Loop - 动作
                单位 - 为 (选取单位) 删除 Pillbook2[(((触发单位) 的所有者) 的玩家索引号)]
[/trigger]
回复

使用道具 举报

 楼主| 发表于 2012-1-6 14:07:19 | 显示全部楼层
[trigger]first
    事件
        地图初始化
    条件
    动作
        设置 PillNO = 11
        -------- 定义物品ID --------
        设置 PillItem[1] = 致命一击
        设置 PillItem[2] = 醉拳
        设置 PillItem[3] = 重击
        设置 PillItem[4] = 闪避
        设置 PillItem[5] = 践踏
        设置 PillItem[6] = 艾鲁尼之优雅
        设置 PillItem[7] = 粉碎
        设置 PillItem[8] = 燃灰
        设置 PillItem[9] = 月刃
        设置 PillItem[10] = 弹幕攻击
        设置 PillItem[11] = 分裂攻击
        -------- 定义魔法书技能ID --------
        设置 Pillbook[1] = 致命一击 魔法书
        设置 Pillbook[2] = 醉拳 魔法书
        设置 Pillbook[3] = 重击 魔法书
        设置 Pillbook[4] = 闪避 魔法书
        设置 Pillbook[5] = 践踏 魔法书
        设置 Pillbook[6] = 艾鲁尼之优雅 魔法书
        设置 Pillbook[7] = 粉碎 魔法书
        设置 Pillbook[8] = 燃灰 魔法书
        设置 Pillbook[9] = 月刃 魔法书
        设置 Pillbook[10] = 弹幕攻击 魔法书
        设置 Pillbook[11] = 分裂攻击 魔法书
        -------- 定义技能持续时间(秒) --------
        设置 Pilllong[1] = 20.00
        设置 Pilllong[2] = 20.00
        设置 Pilllong[3] = 20.00
        设置 Pilllong[4] = 20.00
        设置 Pilllong[5] = 20.00
        设置 Pilllong[6] = 20.00
        设置 Pilllong[7] = 20.00
        设置 Pilllong[8] = 20.00
        设置 Pilllong[9] = 20.00
        设置 Pilllong[10] = 20.00
        设置 Pilllong[11] = 20.00
        -------- 定义技能buff效果 --------
        设置 PillMode[1] = 致命一击
        设置 PillMode[2] = 醉拳
        设置 PillMode[3] = 重击
        设置 PillMode[4] = 闪避
        设置 PillMode[5] = 践踏
        设置 PillMode[6] = 艾鲁尼之优雅
        设置 PillMode[7] = 粉碎
        设置 PillMode[8] = 燃灰
        设置 PillMode[9] = 月刃
        设置 PillMode[10] = 弹幕攻击
        设置 PillMode[11] = 分裂攻击
[/trigger]
回复

使用道具 举报

发表于 2012-1-6 14:11:28 | 显示全部楼层
这明明是“获得物品”嘛,哪里是“使用物品”了。
回复

使用道具 举报

 楼主| 发表于 2012-1-6 14:15:57 | 显示全部楼层

回 3楼(杀戮机器) 的帖子

杀戮机器:这明明是“获得物品”嘛,哪里是“使用物品”了。 (2012-01-06 14:11)
这个物品是获得自动使用的。。。
回复

使用道具 举报

发表于 2012-1-6 18:27:09 | 显示全部楼层
....这个我没想到用触发解决,用Jass声明局部变量应该可以解决这个问题
  ,这个问题在于等待17秒后,读取两次,导致删除两个技能,
  你可以用计时器到时(另外做个专门删技能的触发)
用触发器 添加计时器到时到另一个触发
相应的 计时器到时,删除相应的技能
回复

使用道具 举报

发表于 2012-1-6 18:55:47 | 显示全部楼层
我很费解。
楼主要删除的是技能A还是技能B?
回复

使用道具 举报

 楼主| 发表于 2012-1-6 19:56:09 | 显示全部楼层

回 5楼(lia77593) 的帖子

我也想到用计时器了,所以也弄个了运用计时器的触发,但也遇到了问题:

1.首先某单位获得技能A,开启计时器20s
2.第17秒,该单位获得技能B,根据规则,要删除技能A,添加技能B,但这时候计时器怎么办?

我看了关于计时器的触发,貌似没有重置计时器的功能吧。。。如果有重置计时器,那么一切就好办了
回复

使用道具 举报

 楼主| 发表于 2012-1-6 19:57:47 | 显示全部楼层

回 6楼(『四裤全输』) 的帖子

按事先预定的规则,不论技能ABCD,只能同时拥有一个,第二个自动取代第一个。
回复

使用道具 举报

发表于 2012-1-6 20:03:30 | 显示全部楼层
...===,你在获得物品A时,开启
设置变量XX=获得的技能
[trigger]
动作
       计时器- 开启-JXXXX【玩家索引号】
       触发-  添加 计时器到时 JXXX【玩家索引号】到事件2
[/trigger]
事件2

[trigger]
事件2

事件
条件
动作
       for  1 to 11 do
       if 到时的计时器 = JXXX【A】
       删除技能
[/trigger]
[trigger]
事件
       任意单位使用技能
条件
      使用的是物品B的技能
动作
       删除XX
[/trigger]
回复

使用道具 举报

 楼主| 发表于 2012-1-6 21:08:51 | 显示全部楼层

回 9楼(lia77593) 的帖子

请问最后删除的XX指代什么呢?
活动B技能,删除A技能,但计时器还在走啊!

而且,多人游戏时,A技能必然要用数组变量指代,脱离循环的话,是要用另外的变量指代选中变量的吧?那么变量中,B势必要替换掉A啊
回复

使用道具 举报

发表于 2012-1-7 18:03:19 | 显示全部楼层

回 10楼(redcn) 的帖子

redcn:请问最后删除的XX指代什么呢?
活动B技能,删除A技能,但计时器还在走啊!

....... (2012-01-06 21:08) 
....XX是个变量,记录当前单位拥有的技能!!!
计时器在走也没问题,因为到时后,为单位删除一个不存在的技能是没有问题的
  .........
  我都不知道你想干什么了
  ..我写的这个触发只能作用于一人........
...作用于多人其实也很简单的
你把XX做成数组,下标用玩家索引,
把单位记录下来
  计时器多高几个玩家索引号*10 + 对应技能下标
  删除技能时,删除对应玩家英雄的技能
  ...你好好想吧
  ...我也没说太清...
  你要用数组,并且需要多个触发
  至于多英雄的话...你还是求高手给你写Jass吧
    如果,你要得不急的话,过几天我给个演示给你
回复

使用道具 举报

发表于 2012-1-9 02:11:46 | 显示全部楼层
实在不行你可以用辅助单位或辅助技能链接/相关技能控制。

当使用一个物品添加一技能,创建一个单位给玩家并设置20秒后消失。
然后每秒判断类型单位是否存在来控制技能的删除,当添加了另一个技能时删除所有辅助单位再添加技能。
这样虽然复杂点,但不是可以了吗?
回复

使用道具 举报

发表于 2012-1-9 02:57:55 | 显示全部楼层
  [s:166]

没看懂在说什么,不过我想如果你需要模拟计时器的话,我是有办法的
用整数来代替计时器就行了
而且这个整数能直接运用在你所讲述的重置计时器问题上

思路为
事件是:时间是每1秒
整数A=整数A+1就OK了
你得到物品的时候重置整数A为0就行了
到20的时候你就删除对应的单位身上的技能就行了
对应使用的单位是单位(整数A)这个形式就OK了。
以上既简单又不创建单位

PS:这就是模拟计时器
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

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

GMT+8, 2024-12-26 01:34 , Processed in 0.125083 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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