找回密码
 点一下
查看: 2416|回复: 8

判断技能被打断的方法

[复制链接]
发表于 2008-5-3 11:55:20 | 显示全部楼层 |阅读模式
判断技能被打断的方法

很多人喜欢用计时器给自己的技能加上持续的效果,这时有个问题就是,用什么方法可以判断技能被打断呢?

对于一般技能,如地震,我们有个很简单的方法,就是判断施法者的当前命令。请看下面的代码:

[codes=jass]
globals
timer udg_earthquaketimer = CreateTimer()
integer udg_order
unit udg_caster
endglobals

function Trig_Earthquake_Effect takes nothing returns nothing
if GetUnitCurrentOrder( udg_caster ) != udg_order then
call PauseTimer( udg_earthquaketimer )
else
call DoSomething()
endif
endfunction

function Trig_Earthquake_Actions takes nothing returns nothing
set udg_order = GetUnitCurrentOrder( GetTriggerUnit())
set udg_caster = GetTriggerUnit()
call TimerStart( udg_earthquaketimer, 1.0, true, function Trig_Earthquake_Effect )
endfunction
[/codes]

在上面的代码中,我们用udg_order把施法者一开始的施法命令存起来,然后每1秒比较一次,当二者不同时,停下计时器。

对于用“通魔”['ANcl']模版做的技能,则需要分两种情况看:
对于“使其他技能无效”选项为 FALSE的技能,可以用上面的方法。
ga.JPG
但是对于该选项为 TRUE的技能,我们需要做出另外的判断,请看以下函数:

[codes=jass]
function UnitJump_Buff takes unit caster returns boolean
//! textmacro unitjumpbuffboolean takes aId
if GetUnitAbilityLevel( caster, $aId$ ) > 0 then
return false
endif
//! endtextmacro
//! runtextmacro unitjumpbuffboolean( "'Beng'" )
//! runtextmacro unitjumpbuffboolean( "'Bena'" )
//! runtextmacro unitjumpbuffboolean( "'Bens'" )
//! runtextmacro unitjumpbuffboolean( "'Bmlt'" )
//! runtextmacro unitjumpbuffboolean( "'BPSE'" )
//! runtextmacro unitjumpbuffboolean( "'Bfrz'" )
//! runtextmacro unitjumpbuffboolean( "'BSTN'" )
//! runtextmacro unitjumpbuffboolean( "'BNdo'" )
return true
endfunction

function Trig_Earthquake_Effect takes nothing returns nothing
if GetUnitCurrentOrder( udg_caster ) != udg_order or not(UnitJump_Buff(udg_caster)) then
call PauseTimer( udg_earthquaketimer )
else
call DoSomething()
endif
endfunction
[/codes]

我们现在假设地震技能是用通魔为模版做的,而且“使其他技能无效”选项为 TRUE,这时我们需要判断单位是否被打晕,function UnitJump_Buff起的就是这个作用。当施法者身上有被打晕的BUFF时,停下计时器。
traxex 该用户已被删除
发表于 2008-5-3 12:28:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2008-5-3 13:03:16 | 显示全部楼层
不是有某某停止施放技能就=被打断吗 不过我弄错了也是很可能的 我回去看看~
回复

使用道具 举报

发表于 2008-5-3 13:06:15 | 显示全部楼层
你没弄错~~不过停止释放技能也会在技能正常结束后触发~~因此如果出现停止事件却没出现结束事件才可以判定位打断~~

鉴于楼主其实是希望触发效果跟壳技能一起停止~~因此其实正常停止和被打断也没啥区别~~


不过其实也存在一些不会产生结束事件的技能~~不过这些技能本身也无法被打断~~所以无所谓了~~
回复

使用道具 举报

 楼主| 发表于 2008-5-5 11:24:02 | 显示全部楼层
我这里说的是在使用计时器的情况下. 我发这个帖子是为我将来的另一个帖子做铺垫, 就是如何让技能支持多人.
回复

使用道具 举报

发表于 2008-5-5 13:37:47 | 显示全部楼层
为何说channel使其他技能无效时就不能用命令判断呢,虽然看起来是被pause的样子,但单位当前命令仍是设定的id

只使用命令判断有个问题,如果一个持续技能cd好了接着放一个,虽然触发停止释放事件,由于是同一个命令,前面timer维持的效果将不会消失。
回复

使用道具 举报

 楼主| 发表于 2008-5-5 18:43:08 | 显示全部楼层
第一个问题无解,Blz设定是这样。

第二个问题如果继续接着放则效果持续,因为计时器只是机械地处理数据,不需要关心是第几次使用技能。
回复

使用道具 举报

发表于 2008-5-5 18:58:20 | 显示全部楼层
引用第4楼狡猾的兔子于2008-05-05 11:24发表的  :
我这里说的是在使用计时器的情况下. 我发这个帖子是为我将来的另一个帖子做铺垫, 就是如何让技能支持多人.

我倒没觉得技能停止事件跟计时器之间会有什么不相容的~~

而且channel这技能我向来不提倡使用~~
回复

使用道具 举报

发表于 2008-5-10 22:22:20 | 显示全部楼层
检测到有新教程 放入TXT放入学习机了 然后  》顶《
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 18:45 , Processed in 0.119935 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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