找回密码
 点一下
查看: 1291|回复: 17

计时器到期怎么捕捉不到啊

[复制链接]
 楼主| 发表于 2009-8-21 16:50:10 | 显示全部楼层

计时器到期后 怎么不执行后面动作了

[codes=jass]
function SGS takes nothing  returns nothing
    local integer i
    local unit u
    if(udg_shuaguaishu<120) then
        set i=ModuloInteger(udg_boshu-1,5)*5
        set u= CreateUnitAtLoc(Player(6),udg_A_UT[i+GetRandomInt(0,4)],udg_A_P[11],180)
        call TriggerRegisterUnitEvent( gg_trg_GD, u, EVENT_UNIT_DEATH )
        call SetUnitAbilityLevel(u, 'A03U', udg_boshu )
        call SetUnitAbilityLevel(u, 'A03S', udg_boshu )
        call SetUnitAbilityLevel(u, 'A03V', udg_boshu )
        call GroupAddUnit( udg_guai, u )
        set u= CreateUnitAtLoc(Player(6),udg_A_UT[i+GetRandomInt(0,4)],udg_A_P[12],180)
        call TriggerRegisterUnitEvent( gg_trg_GD, u, EVENT_UNIT_DEATH )
        call SetUnitAbilityLevel(u, 'A03U', udg_boshu )
        call SetUnitAbilityLevel(u, 'A03S', udg_boshu )
        call SetUnitAbilityLevel(u, 'A03V', udg_boshu )
        call GroupAddUnit( udg_guai, u )
        set u= CreateUnitAtLoc(Player(6),udg_A_UT[i+GetRandomInt(0,4)],udg_A_P[13],180)
        call TriggerRegisterUnitEvent( gg_trg_GD, u, EVENT_UNIT_DEATH )
        call SetUnitAbilityLevel(u, 'A03U', udg_boshu )
        call SetUnitAbilityLevel(u, 'A03S', udg_boshu )
        call SetUnitAbilityLevel(u, 'A03V', udg_boshu )
        call GroupAddUnit( udg_guai, u )
        set u=null
        set udg_shuaguaishu=udg_shuaguaishu+1
    elseif(udg_shuaguaishu<180) then
        set udg_shuaguaishu=udg_shuaguaishu+1
    else
        call TimerStart(udg_A_T[6],120,false,null)
        call EnableTrigger( gg_trg_SG )
        set udg_A_TW[6]=CreateTimerDialogBJ(udg_A_T[6],"|C00FF0000鬼魂出现|r")
    endif
endfunction
function SG takes nothing returns boolean
    call DisableTrigger( GetTriggeringTrigger() )
    call DestroyTimerDialog(udg_A_TW[6])
    set udg_boshu=udg_boshu+1
    set udg_shuaguaishu=0
    call TimerStart(udg_A_T[6],1.5,true,function SGS)
    return false
endfunction
function InitTrig_SG takes nothing returns nothing
    set gg_trg_SG = CreateTrigger(  )
    call TriggerRegisterTimerExpireEvent( gg_trg_SG, udg_A_T[6] )
    call TriggerAddCondition( gg_trg_SG, Condition( function SG ) )
endfunction
[/codes]
回复

使用道具 举报

发表于 2009-8-21 17:01:57 | 显示全部楼层
你是说那个code为null的timer吗?
回复

使用道具 举报

发表于 2009-8-21 17:52:02 | 显示全部楼层
额,你的code是null唉,你要它执行什么……
回复

使用道具 举报

 楼主| 发表于 2009-8-21 21:51:07 | 显示全部楼层

回 2楼(zhuzeitou) 的帖子

开启计时
捕捉计时到期
再刷怪
回复

使用道具 举报

 楼主| 发表于 2009-8-21 21:52:19 | 显示全部楼层

回 1楼(light) 的帖子


是的

怎么老是捕捉不到它到期的事件
回复

使用道具 举报

发表于 2009-8-22 09:13:27 | 显示全部楼层
你直接把要做的动作写在code这个参数里不就好了么
回复

使用道具 举报

 楼主| 发表于 2009-8-22 14:32:20 | 显示全部楼层

回 5楼(zhuzeitou) 的帖子

函数SG中要调用了SGS 来刷怪 所以SGS 得在SG之前定义
call TimerStart(udg_A_T[6],1.5,true,function SGS)

如果再在SGS中调用SG的话 报错啊
回复

使用道具 举报

发表于 2009-8-22 14:36:17 | 显示全部楼层
无参的话你可以用ExecuteFunc来调用啊
回复

使用道具 举报

发表于 2009-8-22 14:36:50 | 显示全部楼层 |阅读模式
捕捉计时器到期事件
第一次到期后做动作
后面再到期就不做动作了
高手说下为什么呢
是不是我写的不对啊
[codes=jass]
function SGS takes nothing  returns nothing
    local integer i
    local unit u
    if(udg_shuaguaishu<60) then
        set i=ModuloInteger(udg_boshu-1,5)*5
        set u= CreateUnitAtLoc(Player(6),udg_A_UT[i+GetRandomInt(0,4)],udg_A_P[11],180)
        call TriggerRegisterUnitEvent( gg_trg_GD, u, EVENT_UNIT_DEATH )
        call SetUnitAbilityLevel(u, 'A03U', udg_boshu )
        call SetUnitAbilityLevel(u, 'A03S', udg_boshu )
        call SetUnitAbilityLevel(u, 'A03V', udg_boshu )
        call UnitRemoveAbility(u, 'A03V')
        call GroupAddUnit( udg_guai, u )
        call IssuePointOrderLoc(u, "attack", udg_A_P[10] )
        set u= CreateUnitAtLoc(Player(6),udg_A_UT[i+GetRandomInt(0,4)],udg_A_P[12],180)
        call TriggerRegisterUnitEvent( gg_trg_GD, u, EVENT_UNIT_DEATH )
        call SetUnitAbilityLevel(u, 'A03U', udg_boshu )
        call SetUnitAbilityLevel(u, 'A03S', udg_boshu )
        call SetUnitAbilityLevel(u, 'A03V', udg_boshu )
        call UnitRemoveAbility(u, 'A03V')
        call GroupAddUnit( udg_guai, u )
        call IssuePointOrderLoc(u, "attack", udg_A_P[10] )
        set u= CreateUnitAtLoc(Player(6),udg_A_UT[i+GetRandomInt(0,4)],udg_A_P[13],180)
        call TriggerRegisterUnitEvent( gg_trg_GD, u, EVENT_UNIT_DEATH )
        call SetUnitAbilityLevel(u, 'A03U', udg_boshu )
        call SetUnitAbilityLevel(u, 'A03S', udg_boshu )
        call SetUnitAbilityLevel(u, 'A03V', udg_boshu )
        call UnitRemoveAbility(u, 'A03V')
        call GroupAddUnit( udg_guai, u )
        call IssuePointOrderLoc(u, "attack", udg_A_P[10] )
        set u=null
    elseif(udg_shuaguaishu==80) then
        call DestroyTimer(GetExpiredTimer())
        call TimerStart(udg_A_T[6],36,false,null)
        set udg_A_TW[6]=CreateTimerDialogBJ(udg_A_T[6],"|C00FF0000鬼魂出现|r")
    endif
    set udg_shuaguaishu=udg_shuaguaishu+1
endfunction
[/codes]
[codes=jass]
function SG takes nothing returns boolean
    local timer tm=CreateTimer()
    call DestroyTimerDialog(udg_A_TW[6])
    set udg_boshu=udg_boshu+1
    set udg_shuaguaishu=0
    call TimerStart(tm,1.8,true,function SGS)
    return false
endfunction
[/codes]
[codes=jass]
function InitTrig_SG takes nothing returns nothing
    set gg_trg_SG = CreateTrigger(  )
    call TriggerRegisterTimerExpireEvent( gg_trg_SG, udg_A_T[6] )
    call TriggerAddCondition( gg_trg_SG, Condition( function SG ) )
endfunction
[/codes]
发表于 2009-8-22 14:36:56 | 显示全部楼层
那你第二次定义,不就把原来的覆盖了吗?
回复

使用道具 举报

 楼主| 发表于 2009-8-22 14:55:52 | 显示全部楼层

回 8楼(zhuzeitou) 的帖子

ExecuteFunc怎么用的啊
不会。。
回复

使用道具 举报

发表于 2009-8-22 15:12:44 | 显示全部楼层
参数是函数名,可以调用后定义的函数
native ExecuteFunc          takes string funcName returns nothing
回复

使用道具 举报

发表于 2009-8-22 15:13:31 | 显示全部楼层
DisableTrigger·是这个吗?
回复

使用道具 举报

 楼主| 发表于 2009-8-22 15:15:03 | 显示全部楼层
call TimerStart(udg_A_T[6],120,false,ExecuteFunc("SG"))
这样写对吗
回复

使用道具 举报

发表于 2009-8-22 15:17:32 | 显示全部楼层
不是……
你可以再写一个函数,内容是
call ExecuteFunc("SG")
回复

使用道具 举报

发表于 2009-8-22 18:21:25 | 显示全部楼层

Re:回 5楼(zhuzeitou) 的帖子

引用第7楼jurozn于2009-08-22 14:32发表的 回 5楼(zhuzeitou) 的帖子 :
函数SG中要调用了SGS 来刷怪 所以SGS 得在SG之前定义
call TimerStart(udg_A_T[6],1.5,true,function SGS)

如果再在SGS中调用SG的话 报错啊

报错... 你SG 是不是申明在SGS下面啊...
回复

使用道具 举报

发表于 2009-8-22 20:18:10 | 显示全部楼层
lz要的效果是调用后声明的函数,因为两个函数要循环调用

所以说要使用ExecuteFunc函数
回复

使用道具 举报

发表于 2009-8-23 11:37:36 | 显示全部楼层
可以把两个函数整合成一个,用一个判断语句分成两部分,调用自身是可以的。随便用一个变量或者缓存存储一个数据来记录下一个应该执行哪一部分
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 19:39 , Processed in 0.146625 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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