• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • 🏆 Hive's 6th HD Modeling Contest: Mechanical is now open! Design and model a mechanical creature, mechanized animal, a futuristic robotic being, or anything else your imagination can tinker with! 📅 Submissions close on June 30, 2024. Don't miss this opportunity to let your creativity shine! Enter now and show us your mechanical masterpiece! 🔗 Click here to enter!

[Crash] Where did I do wrong in my damage detection jass code that is causing the game to crash in about 15 minutes?

Status
Not open for further replies.
I cannot recreate the crash, but at a certain point after 15 minutes it will crash. The game runs okay with this code turned off.

There was no lag at all before it crashes the game, so it's very strange.

The crash message says the crash is related to "instance.cpp".
JASS:
//麣鼶爨矲韠龖龘纛灪麤麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤 SHARED FUNCTIONS 麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤                  麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣
function U_DD_randstr takes integer num returns string
  local integer i
  local string output
  local string randchars
  local integer randint
  set output = ""
  set randchars = "ABCDSE!d2!D12d131dd1d2d1!@DQWD@!d12sd12"
  set i = 0
  loop
    exitwhen i == num
    set randint = GetRandomInt(1,StringLength(randchars))
    set output = output + SubStringBJ(randchars, randint, randint)
    set i = i + 1
  endloop
  return output
endfunction

function U_DD_pr takes string msg returns nothing
  call DisplayTextToForce( GetPlayersAll(), U_DD_randstr(3)+" - "+msg )
endfunction
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
function U_DD_RE_conds takes integer condset,unit ua, unit ub, boolean bool returns boolean
  if condset == 1 then//is attacker melee giant and is attacked not flying unit?
    if GetUnitAbilityLevelSwapped('A04M', ua) == 1 then
      if IsUnitType(ua, UNIT_TYPE_MELEE_ATTACKER) and not(IsUnitType(ub, UNIT_TYPE_FLYING)) then
        return bool
      endif
    endif
  endif
  if condset == 2 then//dmgar - dmgu
    if ua!=udg_U_DD_dmgar_atkr and IsUnitAliveBJ(ua) and IsUnitEnemy(ua,udg_U_DD_dmgar_atkrplyr) and IsUnitVisible(ua,udg_U_DD_dmgar_atkrplyr) and ua!=null then
      return bool
    endif
  endif
  return not(bool)
endfunction
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
function U_DD_dmgu takes nothing returns nothing
  local unit dmgar_atkd
  set dmgar_atkd  = GetEnumUnit()
  if U_DD_RE_conds(2,dmgar_atkd ,null,true)then
    call UnitDamageTargetBJ( udg_U_DD_dmgar_atkr, dmgar_atkd , udg_U_DD_dmgar_amount, udg_U_DD_dmgar_atktype, udg_U_DD_dmgar_dmgtype)
  endif
  set dmgar_atkd  = null
endfunction

function U_DD_dmgar takes unit atkr, unit atkd, real radius, real amount, attacktype atktype, damagetype dmgtype returns nothing
  local location atkdp
  local group gr
  set udg_U_DD_dmgar_atkr = atkr
  set udg_U_DD_dmgar_atkd = atkd
  set udg_U_DD_dmgar_atkrplyr = GetOwningPlayer(atkr)
  set udg_U_DD_dmgar_amount = amount
  set udg_U_DD_dmgar_atktype = atktype
  set udg_U_DD_dmgar_dmgtype = dmgtype
  set atkdp = GetUnitLoc(atkd)
  set gr = GetUnitsInRangeOfLocAll(radius,atkdp)
  call ForGroup(gr, function U_DD_dmgu)
  call RemoveLocation(atkdp)
  set atkdp = null
  call DestroyGroup(gr)
  set gr = null
endfunction

function U_DD_se takes location p, real dur, string addr returns nothing
  set udg_GSP_Location = p
  set udg_GSP_Duration = dur
  set udg_GSP_ModelAddress = addr
  call TriggerExecute( gg_trg_Generate_Special_Effect_At_Location )
endfunction
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
function U_DD_getatkrs takes unit atkd returns group
  return LoadGroupHandleBJ(0,GetHandleIdBJ(atkd), udg_U_DD_Temp)
endfunction
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
function U_DD_getatkds takes unit atkr returns group
  return LoadGroupHandleBJ(4,GetHandleIdBJ(atkr), udg_U_DD_Temp)
endfunction
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
function U_DD_add takes unit atkr, unit atkd, boolean report returns nothing
  local integer utid
  if LoadGroupHandleBJ(0,GetHandleIdBJ(atkd), udg_U_DD_Temp)==null then
    call SaveGroupHandleBJ(CreateGroup(), 0,GetHandleIdBJ(atkd), udg_U_DD_Temp)
  endif
  if not(IsUnitInGroup(atkr, LoadGroupHandleBJ(0,GetHandleIdBJ(atkd), udg_U_DD_Temp))) then
    call GroupAddUnitSimple(atkr, LoadGroupHandleBJ(0,GetHandleIdBJ(atkd), udg_U_DD_Temp))
  endif

  if LoadGroupHandleBJ(4,GetHandleIdBJ(atkr), udg_U_DD_Temp)==null then
    call SaveGroupHandleBJ(CreateGroup(), 4,GetHandleIdBJ(atkr), udg_U_DD_Temp)
  endif
  if not(IsUnitInGroup(atkd, LoadGroupHandleBJ(4,GetHandleIdBJ(atkr), udg_U_DD_Temp))) then
    call GroupAddUnitSimple(atkd, LoadGroupHandleBJ(4,GetHandleIdBJ(atkr), udg_U_DD_Temp))
  endif

  call SaveUnitHandleBJ(atkr, 1, GetHandleIdBJ(atkd), udg_U_DD_Temp)
  call GroupAddUnitSimple(atkd, udg_U_DD_Registered)
  set utid = GetUnitTypeId(atkd)
  if LoadIntegerBJ(GetHandleIdBJ(atkd), 0, udg_U_DD_Temp) == udg_U_DD_I then
    //call U_DD_pr( "already recognized target - "+GetUnitName(atkd) )
  else
    if report then
      //call U_DD_pr( "recognized target - "+GetUnitName(atkd) )
    endif
    call SaveIntegerBJ(udg_U_DD_I, GetHandleIdBJ(atkd), 0, udg_U_DD_Temp)
    call TriggerRegisterUnitEvent( gg_trg_Damage_Detection_Detect, atkd, EVENT_UNIT_DAMAGED )
  endif
endfunction
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
function U_DD_OPD takes unit dsrc, unit dmged, string ordstr returns nothing
  local player plyr
  local location tp
  local unit d
  set plyr = GetOwningPlayer(dsrc)
  set tp = GetUnitLoc(dmged)
  if IsPlayerAlly(plyr, Player(0)) then
    set d = gg_unit_e000_0178
    call SetUnitPositionLocFacingBJ( d, tp, 0 )
    call IssueImmediateOrderBJ( d, ordstr)
  else
    set d = gg_unit_e000_0168
    call SetUnitPositionLocFacingBJ( d, tp, 0 )
    call IssueImmediateOrderBJ( d, ordstr)
  endif
  set plyr = null
  call RemoveLocation(tp)
  set tp = null
  set d = null
endfunction
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
function U_DD_GS takes unit dsrc, unit dmged, string ordstr returns nothing
  local integer uid
  local player plyr
  set uid = GetHandleIdBJ(dmged)
  set plyr = GetOwningPlayer(dsrc)
  if IsPlayerAlly(plyr, Player(0)) then
    call IssueTargetOrderBJ( gg_unit_e01T_0474, ordstr, dmged )
  else
    call IssueTargetOrderBJ( gg_unit_e01T_1230, ordstr, dmged )
  endif
  set plyr = null
endfunction
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
function U_DD_remove_attackers_atkd takes nothing returns nothing
  local unit atkd
  set atkd = GetEnumUnit()
  //call U_DD_pr(GetUnitName(atkd)+"?! removed!!!")
  call GroupRemoveUnitSimple( udg_U_DD_R_atkr, U_DD_getatkrs(atkd) )
  if CountUnitsInGroup(U_DD_getatkrs(atkd))==0 then
    //call U_DD_pr(GetUnitName(atkd)+" has no more attackers!!! cleared!!!")
    set udg_U_DD_R_atkr = atkd
    call ForGroup(U_DD_getatkds(atkd),function U_DD_remove_attackers_atkd)
    call DestroyGroup(U_DD_getatkds(atkd))
    call DestroyGroup(U_DD_getatkrs(atkd))
    call FlushChildHashtableBJ(GetHandleIdBJ(atkd),udg_U_DD_Temp )
  endif
  set atkd = null
endfunction
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
function U_DD_remove_attackers_atkr takes unit atkr returns nothing
  set udg_U_DD_R_atkr = atkr
  call ForGroup(U_DD_getatkds(atkr),function U_DD_remove_attackers_atkd)
endfunction
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
function U_DD_removefromsystem takes unit u returns nothing
  local integer befa
  local integer befb
  set befa = GetHandleIdBJ(U_DD_getatkds(u))
  set befb = GetHandleIdBJ(U_DD_getatkrs(u))
  set udg_U_DD_R_atkr = u
  call ForGroup(U_DD_getatkds(u),function U_DD_remove_attackers_atkd)
  call DestroyGroup(U_DD_getatkds(u))
  call DestroyGroup(U_DD_getatkrs(u))
  call FlushChildHashtableBJ(GetHandleIdBJ(u),udg_U_DD_Temp )
  //call U_DD_pr(I2S(befb)+"/"+I2S(GetHandleIdBJ(U_DD_getatkds(u)))+"/"+I2S(befb)+"/"+I2S(GetHandleIdBJ(U_DD_getatkrs(u)))+GetUnitName(u)+" removed from system!!!")
endfunction
//麣鼶爨矲韠龖龘纛灪麤                  麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣
//麣鼶爨矲韠龖龘纛灪麤 SHARED FUNCTIONS 麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤 REBUILD 韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤         麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖
function U_DD_on_damage takes nothing returns nothing
  local unit dsrc
  local unit dmged
  local location dmgedp
  local integer dsrctid
  local real dmg
  set dsrc = GetEventDamageSource()
  set dmged = GetTriggerUnit()
  set dmgedp = GetUnitLoc(dmged)
  set dsrctid = GetUnitTypeId(dsrc)
  set dmg = GetEventDamage()
  if GetUnitAbilityLevelSwapped('A04E', dsrc) > 0 and dmg > 100 then
    call U_DD_GS(dsrc, dmged,"frostnova")
  endif
  if dmg > 50 and U_DD_RE_conds(1,dsrc,dmged,true) then
    if udg_Cam_Shakiness + 4 < 8.5 then
      set udg_Cam_Shakiness = udg_Cam_Shakiness + 4
    else
      set udg_Cam_Shakiness = 8.5
    endif
    call CameraSetEQNoiseForPlayer( Player(0), udg_Cam_Shakiness )
    //call U_DD_OPD(dsrc, dmged, "stomp")
    call U_DD_se(dmgedp, 2, "Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl")
    call U_DD_dmgar (dsrc, dmged, 250, 50, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL)
  endif
  set dsrc = null
  set dmged = null
  call RemoveLocation(dmgedp)
  set dmgedp = null
endfunction
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
function U_DD_R_grpxtion takes nothing returns nothing
  local unit atkd
  local unit atkr
  local integer ord
  set atkd = GetEnumUnit()
  set atkr = LoadUnitHandleBJ(1, GetHandleIdBJ(atkd), udg_U_DD_Temp)
  set ord = GetUnitCurrentOrder(atkr)
  if CountUnitsInGroup(U_DD_getatkrs(atkd)) == 0 or IsUnitDeadBJ(atkd)then
    //call U_DD_pr("no related attackers left - " +GetUnitName(atkd))
    call GroupRemoveUnitSimple( atkd, udg_U_DD_Registered )
  else
    //call U_DD_pr("\"" +I2S(CountUnitsInGroup(U_DD_getatkrs(atkd)))+ "\"" + "followed up - " +GetUnitName(atkd))
    call TriggerRegisterUnitEvent( gg_trg_Damage_Detection_Detect, atkd, EVENT_UNIT_DAMAGED )
  endif
  set atkd = null
  set atkr = null
endfunction
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
function U_DD_on_iteration takes nothing returns nothing
  set udg_U_DD_I = udg_U_DD_I + 1
  call DestroyTrigger(gg_trg_Damage_Detection_Detect)
  set gg_trg_Damage_Detection_Detect = CreateTrigger(  )
  call ForGroup(udg_U_DD_Registered, function U_DD_R_grpxtion)
  call TriggerAddAction( gg_trg_Damage_Detection_Detect, function U_DD_on_damage )
endfunction
//麣鼶爨矲韠龖龘纛灪麤         麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤 REBUILD 韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤 ANY UNIT GETS ATTACKED  鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤                         麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪
function U_DD_AUGA takes nothing returns nothing
  local unit atkd
  local unit atkr
  local location atkdloc
  local location atkrloc
  local integer atkrcurord
  set atkd = GetAttackedUnitBJ()
  set atkr = GetAttacker()
  set atkrcurord = GetUnitCurrentOrder(atkr)
  call PauseUnitBJ( false, atkd )
  if U_DD_RE_conds(1,atkr,atkd,false)then
    set atkd = null
    set atkr = null
    set atkrloc = null
    set atkdloc = null
    return
  endif
  set atkdloc = GetUnitLoc(atkd)
  set atkrloc = GetUnitLoc(atkr)

 if atkrcurord == String2OrderIdBJ("attack") or atkrcurord == String2OrderIdBJ("") then
  call U_DD_add(atkr,atkd,false)
 endif

  set atkd = null
  set atkr = null
  call RemoveLocation(atkrloc)
  set atkrloc = null
  call RemoveLocation(atkdloc)
  set atkdloc = null
endfunction
//麣鼶爨矲韠龖龘纛灪麤                        麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨韠龖龘纛灪麤彠麣鼶爨矲龖龘纛灪麤彠
//麣鼶爨矲韠龖龘纛灪麤 ANY UNIT GETS ATTACKED 鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲矲
//麣鼶爨矲韠龖龘纛灪麤麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤 ANY UNIT DIES  鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠鼶爨鼶爨
//麣鼶爨矲韠龖龘纛灪麤                鼶爨鼶爨鼶爨麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠纛灪
function U_DD_AUD takes nothing returns nothing
  local unit d
  local unit k
  local integer dtid
  local integer ktid
  local integer did
  local integer kid
  set d = GetDyingUnit()
  set k = GetKillingUnit()
  set dtid = GetUnitTypeId(d)
  set ktid = GetUnitTypeId(k)
  set did = GetHandleIdBJ(d)
  set kid = GetHandleIdBJ(k)
  call U_DD_removefromsystem(d)
  set d = null
  set k = null
endfunction
//麣鼶爨矲韠龖龘纛灪麤                鼶鼶鼶鼶麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨韠龖龘纛灪麤彠麣鼶爨矲龖龘纛灪麤彠
//麣鼶爨矲韠龖龘纛灪麤 ANY UNIT DIES  鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠鼶爨鼶爨
//麣鼶爨矲韠龖龘纛灪麤麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲矲
//麣鼶爨矲韠龖龘纛灪麤麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤 ANY UNIT MOVES  鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠矲韠矲韠
//麣鼶爨矲韠龖龘纛灪麤                 矲韠矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪
function U_DD_AUM takes nothing returns nothing
  local unit atkr
  local string ord
  set atkr=  GetTriggerUnit()
  set ord = OrderId2StringBJ(GetIssuedOrderIdBJ())
  //if 1==1then
  if ord == "move" or ord =="AImove" then
   call U_DD_remove_attackers_atkr(atkr)
  endif
  set atkr = null
endfunction
//麣鼶爨矲韠龖龘纛灪麤                 麣鼶爨矲麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨韠龖龘纛灪麤彠麣鼶爨矲龖龘纛灪麤彠
//麣鼶爨矲韠龖龘纛灪麤 ANY UNIT MOVES  鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠矲韠矲韠
//麣鼶爨矲韠龖龘纛灪麤麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲矲
//麣鼶爨矲韠龖龘纛灪麤麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤 REGISTER 麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤          麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠
function U_DD_checkbyt takes integer utid, integer tid, integer samplerange returns boolean
  if utid == tid then
    set udg_U_DD_R_CondsMet = true
    set udg_U_DD_SampleRange = samplerange
    return true
  else
    return false
  endif
endfunction
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
function U_DD_check takes boolean cond,boolean bool returns boolean
  if cond then
    set udg_U_DD_R_CondsMet = bool
    return bool
  else
    return not(bool)
  endif
endfunction
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
function U_DD_register_attacker takes nothing returns nothing
  local unit u
  set u = GetEnumUnit()
  call TriggerRegisterUnitEvent( gg_trg_Damage_Detection_Detect, u, EVENT_UNIT_DAMAGED )
  set u = null
endfunction
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
//  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖  龖
function U_DD_R takes nothing returns nothing
  local unit atkd
  local unit atkr
  local integer atkrtid
  local location atkrp
  local group nearby
  local string ord
 
  set atkr = GetTriggerUnit()
  if atkr==null then//INIT
    call TriggerAddAction( gg_trg_Unit_Gets_Attacked, function U_DD_AUGA )
    call TriggerRegisterTimerEventPeriodic(gg_trg_Damage_Detection_Rebuild, 2.5 )
    call TriggerAddAction( gg_trg_Damage_Detection_Rebuild, function U_DD_on_iteration)
    call TriggerAddAction( gg_trg_Unit_Sends_Order_To_Point, function U_DD_AUM)
    call TriggerAddAction( gg_trg_Unit_Dies, function U_DD_AUD)
  endif
  set atkd = GetOrderTargetUnit()
  set ord = OrderId2StringBJ(GetIssuedOrderIdBJ())
  set udg_U_DD_R_CondsMet = false


  if atkd == null then//spell cast NOT IN USE CURRENTLY
    set udg_U_DD_R_atkr = atkr
    call U_DD_remove_attackers_atkr(atkr)
    set atkrtid = GetUnitTypeId(atkr)
    if LoadIntegerBJ(GetHandleIdBJ(atkr), 0, udg_U_DD_Temp) == udg_U_DD_I then
      set atkd = null
      set atkr = null
      call RemoveLocation(atkrp)
      set atkrp = null
      call DestroyGroup(nearby)
      set nearby = null
      return
    else
      call SaveIntegerBJ(udg_U_DD_I, GetHandleIdBJ(atkr), 0, udg_U_DD_Temp)
    endif
    call U_DD_check(GetUnitName(atkr)=="Dummy", false)
    call U_DD_checkbyt(atkrtid, 'u006',1500)
    call U_DD_checkbyt(atkrtid, 'N009', 1500)
    if udg_U_DD_R_CondsMet then
      call TriggerRegisterUnitEvent( gg_trg_Damage_Detection_Detect, atkr, EVENT_UNIT_DAMAGED )
      set atkrp = GetUnitLoc(atkr)
      set nearby = GetUnitsInRangeOfLocAll(udg_U_DD_SampleRange,atkrp)
      call ForGroup(nearby, function U_DD_register_attacker)
    endif


  elseif ord == "smart" or ord == "attack" then//physical attack
   if U_DD_RE_conds(1,atkr,atkd,true) then
    call U_DD_add(atkr,atkd,true)
   endif
  endif

  set atkd = null
  set atkr = null
  call RemoveLocation(atkrp)
  set atkrp = null
  call DestroyGroup(nearby)
  set nearby = null
endfunction
//麣鼶爨矲韠龖龘纛灪麤          麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤 REGISTER 龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠
//麣鼶爨矲韠龖龘纛灪麤麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠麣鼶爨矲韠龖龘纛灪麤彠麣鼶爨矲韠灪麤麣鼶爨矲韠



function InitTrig_Damage_Detection takes nothing returns nothing
    set gg_trg_Damage_Detection = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Damage_Detection, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Damage_Detection, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddAction( gg_trg_Damage_Detection, function U_DD_R )
endfunction
 
Last edited:
Status
Not open for further replies.
Top