kingkingyyk3
Visitor (Welcome to the Jungle, Baby!)
- Reaction score
- 216
Smart Damage Tracker
Required Systems :
AIDS
Damage
JASS:
============================================================
_______ ______ _______
/ _____\ | ___ \ |___ ___| SMART
| |_____ | | \ \ | | DAMAGE
\_____ \ | | | | | | TRACKER
_____| | | |___/ / | |
\_______/ |______/ |_| BY : kingking
============================================================
FUNCTIONS PROVIDED :
function GetTotalDamageDealt takes unit whichunit returns real
function GetTotalDamageTaken takes unit whichunit returns real
function GetU2UDamage takes unit targ, unit source returns real
function GetDamageDealt takes unit whichunit, damagetype whichtype returns real
function GetDamageTaken takes unit whichunit, damagetype whichtype returns real
function GetLastPhysicalDamage takes unit whichunit returns real
function GetLastAttackDamage takes unit whichunit returns real
function GetLastSpellDamage takes unit whichunit returns real
function GetLastPureDamage takes unit whichunit returns real
Requires :
AIDS [thehelper.net/forums/showthread.php?t=130752]
Damage [thehelper.net/forums/showthread.php?t=131287]
NewGen
Wc3 1.24b
JASS:
library SDT initializer Init requires AIDS, Damage
globals
private hashtable DamageTargetTracker
private hashtable DamageDealt
private hashtable DamageTaken
endglobals
private struct Data
real dmgtaken
real dmgdealt
real lastspldmg
real lastatkdmg
real lastphydmg
real lastpuredmg
method AIDS_onDestroy takes nothing returns nothing
call FlushChildHashtable(DamageTargetTracker,GetUnitId(this.unit))
call FlushChildHashtable(DamageDealt,GetUnitId(this.unit))
call FlushChildHashtable(DamageTaken,GetUnitId(this.unit))
set this.dmgtaken = 0.
set this.dmgdealt = 0.
set this.lastspldmg = 0.
set this.lastatkdmg = 0.
set this.lastphydmg = 0.
set this.lastpuredmg = 0.
endmethod
//! runtextmacro AIDS()
endstruct
function GetTotalDamageDealt takes unit whichunit returns real
return Data[whichunit].dmgdealt
endfunction
function GetTotalDamageTaken takes unit whichunit returns real
return Data[whichunit].dmgtaken
endfunction
function GetU2UDamage takes unit source, unit targ returns real
return LoadReal(DamageTargetTracker,GetUnitId(source),GetUnitId(targ))
endfunction
function GetDamageDealt takes unit whichunit, damagetype whichtype returns real
return LoadReal(DamageDealt,GetUnitId(whichunit),GetHandleId(whichtype))
endfunction
function GetDamageTaken takes unit whichunit, damagetype whichtype returns real
return LoadReal(DamageTaken,GetUnitId(whichunit),GetHandleId(whichtype))
endfunction
function GetLastPhysicalDamage takes unit whichunit returns real
return Data[whichunit].lastphydmg
endfunction
function GetLastSpellDamage takes unit whichunit returns real
return Data[whichunit].lastspldmg
endfunction
function GetLastAttackDamage takes unit whichunit returns real
return Data[whichunit].lastatkdmg
endfunction
function GetLastPureDamage takes unit whichunit returns real
return Data[whichunit].lastpuredmg
endfunction
globals
private unit damager
private unit damaged
private real amount
private integer id
private integer id2
private integer dmgid
private Data temp
endglobals
private function Record takes nothing returns boolean
set damager = GetEventDamageSource()
set damaged = GetTriggerUnit()
set amount = GetEventDamage()
set id = GetUnitId(damager)
set id2 = GetUnitId(damaged)
set dmgid = GetHandleId(Damage_GetType())
set Data[damager].dmgdealt = Data[damager].dmgdealt + amount
call SaveReal(DamageDealt,id,dmgid,LoadReal(DamageDealt,id,dmgid)+amount)
set Data[damaged].dmgtaken = Data[damaged].dmgtaken + amount
call SaveReal(DamageTaken,id2,dmgid,LoadReal(DamageTaken,id2,dmgid)+amount)
call SaveReal(DamageTargetTracker,id,id2,LoadReal(DamageTargetTracker,id,id2) + amount)
if Damage_IsAttack() then
set Data[damaged].lastatkdmg = amount
endif
if Damage_IsPhysical() then
set Data[damaged].lastphydmg = amount
elseif Damage_IsSpell() then
set Data[damaged].lastspldmg = amount
elseif Damage_IsPure() then
set Data[damaged].lastpuredmg = amount
endif
return false
endfunction
private function Init takes nothing returns nothing
local trigger t
set DamageTargetTracker = InitHashtable()
set DamageDealt = InitHashtable()
set DamageTaken = InitHashtable()
set t = CreateTrigger()
call Damage_RegisterEvent(t)
call TriggerAddCondition(t,Condition(function Record))
endfunction
endlibrary
Required Systems :
AIDS
Damage