魔兽地图编辑器吧 关注:65,702贴子:3,845,980

回复:set null会导致WAR3崩溃?

只看楼主收藏回复

本来就是在什么新图里写的 就这一个触发
算了 不在乎这点内存 不set null了


16楼2011-06-22 09:55
回复
    每0.00秒泄漏一个单位也没有感觉的说。。


    来自手机贴吧17楼2011-06-22 09:58
    回复
      2026-02-09 06:07:52
      广告
      不感兴趣
      开通SVIP免广告
      死循环了


      IP属地:天津18楼2011-06-22 10:36
      回复
        另外楼主发下触发吧,有时候就是不经意的小错误.


        IP属地:天津19楼2011-06-22 10:36
        回复
          function ST_DQ takes nothing returns nothing
          local timer t=GetExpiredTimer()
          local trigger tg=LoadTriggerHandle(udg_hs,GetHandleId(t),0)
          local triggeraction ta=LoadTriggerActionHandle(udg_hs,GetHandleId(t),1)
          call DestroyLightning(LoadLightningHandle(udg_hs,GetHandleId(tg),3))
          call DestroyLightning(LoadLightningHandle(udg_hs,GetHandleId(tg),4))
          call DestroyLightning(LoadLightningHandle(udg_hs,GetHandleId(tg),5))
          call FlushChildHashtable(udg_hs,GetHandleId(tg))
          call TriggerRemoveAction(tg,ta)
          call DestroyTrigger(tg)
          call PauseTimer(t)
          call FlushChildHashtable(udg_hs,GetHandleId(t))
          call DestroyTimer(t)
          set t=null
          set tg=null
          set ta=null
          endfunction
          function ST_Damage takes unit u,real damage,unit tu returns real
          local real sm=GetUnitState(tu,UNIT_STATE_LIFE)
          if IsUnitAliveBJ(tu) then
          call UnitDamageTarget(u,tu,damage,true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_MAGIC,WEAPON_TYPE_WHOKNOWS)
          return damage-sm
          endif
          return damage
          endfunction
          function ST_XS takes nothing returns nothing
          local trigger tg=GetTriggeringTrigger()
          local unit u=GetTriggerUnit()
          local unit lu=GetEventDamageSource()
          local real sh=GetEventDamage()
          local real lx=LoadReal(udg_hs,GetHandleId(tg),6)
          local real rx=LoadReal(udg_hs,GetHandleId(tg),7)
          local real y=LoadReal(udg_hs,GetHandleId(tg),8)
          local timer t
          local unit array mj
          if GetUnitX(u)>lx and GetUnitX(u)<rx and GetUnitY(u)>y and GetUnitY(u)<y+SquareRoot(3)*(GetUnitX(u)-lx) and GetUnitY(u)<y+SquareRoot(3)*(rx-GetUnitX(u)) then
          set mj[0]=LoadUnitHandle(udg_hs,GetHandleId(tg),0)
          set mj[1]=LoadUnitHandle(udg_hs,GetHandleId(tg),1)
          set mj[2]=LoadUnitHandle(udg_hs,GetHandleId(tg),2)
          call SetUnitLifeBJ(u,GetUnitState(u,UNIT_STATE_LIFE)+sh)
          set sh=ST_Damage(lu,sh,mj[0])
          if sh>0 then
          set sh=ST_Damage(lu,sh,mj[1])
          if sh>0 then
          set sh=ST_Damage(lu,sh,mj[2])
          if sh>0 then
          call DestroyLightning(LoadLightningHandle(udg_hs,GetHandleId(tg),3))
          call DestroyLightning(LoadLightningHandle(udg_hs,GetHandleId(tg),4))
          call DestroyLightning(LoadLightningHandle(udg_hs,GetHandleId(tg),5))
          set t=LoadTimerHandle(udg_hs,GetHandleId(tg),9)
          call FlushChildHashtable(udg_hs,GetHandleId(t))
          call PauseTimer(t)
          call DestroyTimer(t)
          call FlushChildHashtable(udg_hs,GetHandleId(tg))
          call TriggerClearActions(tg)
          call DestroyTrigger(tg)
          endif
          endif
          endif
          endif
          set tg=null
          set u=null
          set lu=null
          set t=null
          endfunction
          function ST_A takes nothing returns boolean
          local unit array mj
          local unit u=GetTriggerUnit()
          local integer i
          local integer j
          local trigger tg=CreateTrigger()
          local triggeraction ta=TriggerAddAction(tg,function ST_XS)
          local lightning array l
          local timer t=CreateTimer()
          if GetSpellAbilityId() == 'A000' then
          set mj[0]=CreateUnit(GetOwningPlayer(u),'e000',GetUnitX(u),GetUnitY(u)+800/SquareRoot(3),0)
          set mj[1]=CreateUnit(GetOwningPlayer(u),'e000',GetUnitX(u)-400,GetUnitY(u)-400/SquareRoot(3),0)
          


          20楼2011-06-22 11:46
          回复
            set mj[2]=CreateUnit(GetOwningPlayer(u),'e000',GetUnitX(u)+400,GetUnitY(u)-400/SquareRoot(3),0)
            set i=0
            loop
            exitwhen i>2
            set j=GetUnitAbilityLevel(u,'A000')
            loop
            exitwhen j<2
            call UnitAddAbility(mj[i],'A001')
            call SetUnitAbilityLevel(mj[i],'A001',2)
            call UnitRemoveAbility(mj[i],'A001')
            set j=j-1
            endloop
            call UnitApplyTimedLife(mj[i],'BHwe',GetUnitAbilityLevel(u,'A000')*2+3)
            set i=i+1
            endloop
            call TriggerRegisterUnitEvent(tg,u,EVENT_UNIT_DAMAGED)
            set l[0]=AddLightning("CLPB",false,GetUnitX(mj[0]),GetUnitY(mj[0]),GetUnitX(mj[1]),GetUnitY(mj[1]))
            set l[1]=AddLightning("CLPB",false,GetUnitX(mj[0]),GetUnitY(mj[0]),GetUnitX(mj[2]),GetUnitY(mj[2]))
            set l[2]=AddLightning("CLPB",false,GetUnitX(mj[1]),GetUnitY(mj[1]),GetUnitX(mj[2]),GetUnitY(mj[2]))
            call SaveUnitHandle(udg_hs,GetHandleId(tg),0,mj[0])
            call SaveUnitHandle(udg_hs,GetHandleId(tg),1,mj[1])
            call SaveUnitHandle(udg_hs,GetHandleId(tg),2,mj[2])
            call SaveLightningHandle(udg_hs,GetHandleId(tg),3,l[0])
            call SaveLightningHandle(udg_hs,GetHandleId(tg),4,l[1])
            call SaveLightningHandle(udg_hs,GetHandleId(tg),5,l[2])
            call SaveReal(udg_hs,GetHandleId(tg),6,GetUnitX(mj[1]))
            call SaveReal(udg_hs,GetHandleId(tg),7,GetUnitX(mj[2]))
            call SaveReal(udg_hs,GetHandleId(tg),8,GetUnitY(mj[1]))
            call SaveTimerHandle(udg_hs,GetHandleId(tg),9,t)
            call SaveTriggerHandle(udg_hs,GetHandleId(t),0,tg)
            call SaveTriggerActionHandle(udg_hs,GetHandleId(t),1,ta)
            call TimerStart(t,GetUnitAbilityLevel(u,'A000')*2+3,false,function ST_DQ)
            endif
            set mj[0]=null
            set mj[1]=null
            set mj[2]=null
            set u=null
            set tg=null
            set ta=null
            set t=null
            set l[0]=null
            set l[1]=null
            set l[2]=null
            return false
            endfunction
            function InitTrig_ST takes nothing returns nothing
                 set gg_trg_ST = CreateTrigger(   )
                 call TriggerRegisterAnyUnitEventBJ( gg_trg_ST, EVENT_PLAYER_UNIT_SPELL_EFFECT )
                 call TriggerAddCondition( gg_trg_ST, Condition(function ST_A) )
            endfunction
            


            21楼2011-06-22 11:46
            回复
              很长啊
              应该是崩在ST_XS这个函数


              22楼2011-06-22 11:47
              回复
                很有可能再调用了。每句后加个Debug看看实际怎么运行的吧


                来自手机贴吧23楼2011-06-22 11:49
                回复
                  2026-02-09 06:01:52
                  广告
                  不感兴趣
                  开通SVIP免广告
                  最后一次执行ST_XS
                  也就是删触发之前 崩
                  DestroyLightning没有执行到


                  24楼2011-06-22 11:57
                  回复
                    等待100秒再排泄呢?


                    来自手机贴吧25楼2011-06-22 11:58
                    回复
                      pollwait(5)之后set null
                      没问题


                      26楼2011-06-22 12:01
                      回复
                        看来还是有调用


                        来自手机贴吧27楼2011-06-22 12:01
                        回复
                          真心看不出来


                          28楼2011-06-22 12:06
                          回复
                            等待游戏时间没有泄漏吧。。


                            来自手机贴吧29楼2011-06-22 12:07
                            回复