library AttackCalc initializer Init
globals
private real Damage
private real array Bug
// Bug[1] means: Attack = Bug, TargetType = 1 = Normal
private real array Dark
private real array Dragon
private real array Elec
private real array Fight
private real array Fire
private real array Fly
private real array Ghost
private real array Grass
private real array Ground
private real array Ice
private real array Normal
private real array Poison
private real array Psych
private real array Rock
private real array Steel
private real array Water
private integer array TargetType
private real STAB
private integer array BUFF
private real FACTOR
private string array s
endglobals
function Init takes nothing returns nothing
local integer i = 1
loop
exitwhen i > 17
set Bug[i] = SquareRoot(2)
set Dark[i] = SquareRoot(2)
set Dragon[i] = SquareRoot(2)
set Elec[i] = SquareRoot(2)
set Fight[i] = SquareRoot(2)
set Fire[i] = SquareRoot(2)
set Fly[i] = SquareRoot(2)
set Ghost[i] = SquareRoot(2)
set Grass[i] = SquareRoot(2)
set Ground[i] = SquareRoot(2)
set Ice[i] = SquareRoot(2)
set Normal[i] = SquareRoot(2)
set Poison[i] = SquareRoot(2)
set Psych[i] = SquareRoot(2)
set Rock[i] = SquareRoot(2)
set Steel[i] = SquareRoot(2)
set Water[i] = SquareRoot(2)
set i = i + 1
endloop
set Normal[13] = 1
set Normal[14] = 0
set Normal[17] = 1
set Fire[2] = 1
set Fire[3] = 1
set Fire[5] = 2
set Fire[6] = 2
set Fire[12] = 2
set Fire[13] = 1
set Fire[15] = 1
set Fire[17] = 2
set Water[2] = 2
set Water[3] = 1
set Water[5] = 1
set Water[9] = 2
set Water[13] = 2
set Water[15] = 1
set Elec[3] = 2
set Elec[4] = 1
set Elec[5] = 1
set Elec[9] = 0
set Elec[10] = 2
set Elec[15] = 1
set Grass[2] = 1
set Grass[3] = 2
set Grass[5] = 1
set Grass[8] = 1
set Grass[9] = 2
set Grass[10] = 1
set Grass[11] = 1
set Grass[13] = 2
set Grass[15] = 1
set Grass[17] = 1
set Ice[2] = 1
set Ice[3] = 1
set Ice[5] = 2
set Ice[6] = 1
set Ice[9] = 2
set Ice[10] = 2
set Ice[15] = 2
set Ice[17] = 1
set Fight[1] = 2
set Fight[6] = 2
set Fight[8] = 1
set Fight[10] = 1
set Fight[11] = 1
set Fight[12] = 1
set Fight[13] = 2
set Fight[14] = 0
set Fight[16] = 2
set Fight[17] = 2
set Poison[5] = 2
set Poison[8] = 1
set Poison[9] = 1
set Poison[13] = 1
set Poison[14] = 1
set Poison[17] = 0
set Ground[2] = 2
set Ground[4] = 2
set Ground[5] = 1
set Ground[8] = 2
set Ground[10] = 0
set Ground[12] = 1
set Ground[13] = 2
set Ground[17] = 2
set Fly[4] = 1
set Fly[5] = 2
set Fly[7] = 2
set Fly[12] = 2
set Fly[13] = 1
set Fly[17] = 1
set Psych[7] = 2
set Psych[8] = 2
set Psych[11] = 1
set Psych[16] = 0
set Psych[17] = 1
set Bug[2] = 1
set Bug[5] = 2
set Bug[7] = 1
set Bug[8] = 1
set Bug[10] = 1
set Bug[11] = 2
set Bug[14] = 1
set Bug[16] = 2
set Bug[17] = 1
set Rock[2] = 2
set Rock[6] = 2
set Rock[7] = 1
set Rock[9] = 1
set Rock[10] = 2
set Rock[12] = 2
set Rock[17] = 1
set Ghost[1] = 0
set Ghost[11] = 2
set Ghost[14] = 2
set Ghost[16] = 1
set Ghost[17] = 1
set Dragon[15] = 2
set Dragon[17] = 1
set Dark[7] = 1
set Dark[11] = 2
set Dark[14] = 2
set Dark[16] = 1
set Dark[17] = 1
set Steel[2] = 1
set Steel[3] = 1
set Steel[4] = 1
set Steel[6] = 2
set Steel[13] = 2
set Steel[17] = 1
set BUFF[1] = 'B001'
set BUFF[2] = 'B000'
set BUFF[3] = 'B004'
set BUFF[4] = 'B005'
set BUFF[5] = 'B002'
set BUFF[6] = 'B007'
set BUFF[7] = 'B009'
set BUFF[8] = 'B006'
set BUFF[9] = 'B00A'
set BUFF[10] = 'B00B'
set BUFF[11] = 'B00C'
set BUFF[12] = 'B003'
set BUFF[13] = 'B008'
set BUFF[14] = 'B00D'
set BUFF[15] = 'B00E'
set BUFF[16] = 'B00F'
set BUFF[17] = 'B00G'
//set s[1] = Normal
//set s[2] = Fire
// set s[3] = Water
//set s[4] = Electric
//set s[5] = Grass
// set s[6] = Ice
// set s[7] = Fight
// set s[8] = Poison
// set s[9] = Ground
// set s[10] = Flying
// set s[11] = Psychic
// set s[12] = Bug
// set s[13] = Rock
// set s[14] = Ghost
// set s[15] = Dragon
// set s[16] = Dark
// set s[17] = Steel
endfunction
function FACTORCALC takes integer AttackType returns real
local integer i = 1
set TargetType[1] = 0
set TargetType[2] = 0
loop
exitwhen i > 17
if UnitHasBuffBJ(udg_AT_Target, BUFF[i]) == true then
set TargetType[1] = i
endif
set i = i + 1
endloop
set i = 1
loop
exitwhen i > 17
if UnitHasBuffBJ(udg_AT_Target, BUFF[i]) == true and i != TargetType[1] then
set TargetType[2] = i
endif
set i = i + 1
endloop
set FACTOR = 1.00
set i = 1
loop
exitwhen i > 2
if TargetType[i] > 0 then
if AttackType == 1 then
set FACTOR = FACTOR * ( Pow(Normal[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 2 then
set FACTOR = FACTOR * ( Pow(Fire[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 3 then
set FACTOR = FACTOR * ( Pow(Water[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 4 then
set FACTOR = FACTOR * ( Pow(Elec[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 5 then
set FACTOR = FACTOR * ( Pow(Grass[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 6 then
set FACTOR = FACTOR * ( Pow(Ice[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 7 then
set FACTOR = FACTOR * ( Pow(Fight[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 8 then
set FACTOR = FACTOR * ( Pow(Poison[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 9 then
set FACTOR = FACTOR * ( Pow(Ground[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 10 then
set FACTOR = FACTOR * ( Pow(Fly[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 11 then
set FACTOR = FACTOR * ( Pow(Psych[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 12 then
set FACTOR = FACTOR * ( Pow(Bug[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 13 then
set FACTOR = FACTOR * ( Pow(Rock[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 14 then
set FACTOR = FACTOR * ( Pow(Ghost[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 15 then
set FACTOR = FACTOR * ( Pow(Dragon[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 16 then
set FACTOR = FACTOR * ( Pow(Dark[TargetType[i]], 2.00) / 2.00 )
endif
if AttackType == 17 then
set FACTOR = FACTOR * ( Pow(Steel[TargetType[i]], 2.00) / 2.00 )
endif
endif
set i = i + 1
endloop
return FACTOR
endfunction
function STABCALC takes unit u returns real
local integer i = 1
loop
exitwhen i > 17
if UnitHasBuffBJ(u, BUFF[i]) then
return 1.50
endif
set i = i + 1
endloop
return 1.00
endfunction
function DAMAGECALC takes unit uu, real rr, integer i returns nothing
local real array r
set r[1] = I2R(GetHeroLevel(uu))
set r[2] = I2R(GetHeroStr(uu, true))
set r[3] = rr
set r[4] = I2R(GetHeroInt(uu, true))
set r[5] = STABCALC(uu)
set r[6] = FACTORCALC(i)
set r[7] = I2R(GetRandomInt(85, 100))
set udg_AT_Damage = ((((2.00 * r[1] / 5.00 + 2) * r[2] * r[3] / r[4] ) / 50.00) + 2) * r[5] * r[6] * r[7] / 100
call DisplayTextToForce( GetPlayersAll(), R2S(udg_AT_Damage) )
endfunction
endlibrary