魔兽地图编辑器吧 关注:64,428贴子:3,828,877
  • 29回复贴,共1

【求助】循环计时器摧毁失败

只看楼主收藏回复

我的地图里近期出现不少于1个关于循环计时器的Bug。这几个Bug都属于偶发Bug,原因不明,极少出现,也无法主动引发。现在实在是想不出来了,于是只好来论坛求教经验丰富的各位。
问题如下:
使用技能A00D触发lG,然后启动循环计时器CmF2,触发里出现的物品是一个用于显示某冷却时间的图标,无法丢弃,这些地方都没有问题。
问题出现在计时器上,lG3中的暂停CmF2摧毁CmF2的语句偶尔会失效,Bug的具体体现就是,当触发中那个物品数量为0时,屏幕上开始不断地刷出“123”。
整个地图触发里只有这里有关于CmF2计时器的相关语句,别的地方都没有涉及,除了lG也没有其他地方对CmF2赋值,所以我实在想不出出现问题的原因。
下面是触发麻烦大家帮忙看看
//////////////////////////////////////////////////////////////////////////////
function lG3 takes nothing returns nothing
call SetItemCharges(UnitItemInSlotBJ((O[GetPlayerId((GetOwningPlayer(I)))+13]),3),GetItemCharges(UnitItemInSlotBJ((O[GetPlayerId((GetOwningPlayer(I)))+13]),3))-1)
if GetItemCharges(UnitItemInSlotBJ((O[GetPlayerId((GetOwningPlayer(I)))+13]),3))==0 then
call SetPlayerAbilityAvailable(GetOwningPlayer(I),'A00D',true)
call DisplayTextToPlayer(GetOwningPlayer(I),0,0,"123")
call PauseTimer(CmF2)
call DestroyTimer(CmF2)

endif
endfunction
///////////////////////////////////////////////////////////////////////////////
function lG takes nothing returns nothing
local unit u=GetTriggerUnit()
call SetPlayerAbilityAvailable(GetOwningPlayer(I),'A00D',false)
call SetItemCharges(UnitItemInSlotBJ(O[((1+GetPlayerId(GetOwningPlayer(GetTriggerUnit())))+12)],3),CmF)
call TimerStart(CmF2,1,true,function lG3)
set CmF=CmF+20
set u=null
endfunction
//////////////////////////////////////////////////////////////////////////////
最后,谁知道关于有什么循环计时器可能存在的问题、容易引发的Bug,或是一些需要注意的地方也请告诉我一下,我对这方面的知识比较匮乏。
谢谢了


IP属地:四川本楼含有高级字体1楼2013-08-18 15:48回复
    第二个触发里漏了一句set CmF2=CreateTimer(),发帖的时候少写了


    IP属地:四川2楼2013-08-18 15:50
    收起回复
      最好发截图,有高亮和格式看起来清晰一些


      IP属地:上海来自手机贴吧3楼2013-08-18 15:52
      收起回复
        起码有缩进吧…


        IP属地:上海来自手机贴吧4楼2013-08-18 16:02
        收起回复
          下面是触发的截图@最萌小汐


          IP属地:四川5楼2013-08-18 16:03
          回复
            用电脑了给你看MARK


            IP属地:上海来自手机贴吧6楼2013-08-18 16:11
            收起回复
              要沉了吗~。~


              IP属地:四川8楼2013-08-18 18:07
              回复
                这失效……完全是自己逻辑问题啊。cmf2如果压根就不指向第一次创建的计时器了,那个计时器自然就停不下来了(即使你的回调函数中的条件对了)。


                IP属地:北京来自手机贴吧9楼2013-08-18 18:17
                回复
                  归根结底依然是:多计时器并发时,没处理好托管函数内部的逻辑。下面是重点:还有就是 建议用 GetExpiredTimer() 在回调函数中捕获到期的计时器(Cmf2),这样就铁定没问题了。


                  IP属地:北京来自手机贴吧10楼2013-08-18 18:32
                  收起回复