Array
(
[scriptVersion] => 7
[oeValues] => Array
(
[auto] => Array
(
)
[Art] => ReplaceableTextures\CommandButtons\BTNDarkPortal.blp
[dmgplus1] => 599
[bldtm] => 1
[goldcost] => 800
[sides1] => 1
[acquire] => 800
[upgrades] => Array
(
)
[Upgrade] => Array
(
)
[Name] => Portal to Swine Purgatory
[weapTp1] => missile
[MissileHoming] => 1
[file] => buildings\other\SacrificialAltar\SacrificialAltar.mdl
[uberSplat] => OSMA
[Missileart] => none.mdl
[Missilespeed] => 10000
[dice1] => 1
[RngBuff1] => 250
[modelScale] => 0.6
[rangeN1] => 950
[atkType1] => pierce
[cool1] => 2.5
[Ubertip] => Attacks with a rampage of exploding pigs straight from the Swine Purgatory.
[abilList] => Array
(
)
[buildingShadow] => Array
(
)
[targs1] => Array
(
)
[weapsOn] => 1
)
[settings] => Array
(
[balanceTip] => |cffFFFF00+20% |rdmg to air
[abil_factor] => 0.255
[author] => Deemzul
[alpha] => 255
[authorDisplay] => Deemzul
[version] => 1.0
[element] => fire
[rarity] => rare
)
[effects] => Array
(
[0] => Array
(
[x] => -32.7589
[y] => -15.2853
[z] => 0
[scale] => 0.6
[rot] => 2.37666
[file] => Doodads\Outland\Props\Stake\Stake1.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => -0.6
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[1] => Array
(
[x] => 38.0072
[y] => 13.7364
[z] => 0
[scale] => 0.54
[rot] => 0.0997925
[file] => Doodads\Outland\Props\Stake\Stake1.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => -0.6
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[2] => Array
(
[x] => 10.188
[y] => 39.934
[z] => 6.4
[scale] => 0.66
[rot] => 0.801878
[file] => Doodads\Outland\Props\Stake\Stake1.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => -0.6
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[3] => Array
(
[x] => -36.9877
[y] => 26.3507
[z] => 0
[scale] => 0.63
[rot] => 1.95539
[file] => Doodads\Outland\Props\Stake\Stake1.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => -0.6
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[4] => Array
(
[x] => 29.7571
[y] => 54.9169
[z] => 0
[scale] => 0.6
[rot] => 0.197979
[file] => Doodads\Outland\Props\Stake\Stake1.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => -0.6
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[5] => Array
(
[x] => -12.0371
[y] => 16.6721
[z] => 134.4
[scale] => 1.2
[rot] => 5.46474
[file] => units\critters\Pig\Pig.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => 0
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
)
[dmgTable] => Array
(
[0] => Array
(
[id] => MOD_DMG_TO_AIR
[base] => 0.2
[add] => 0
)
)
[triggers] => Array
(
[0] => Array
(
[name] => On Attack
[code] => call PigNuggetOnAttack(tower,Event.getTarget(),0,2,275+tower.getLevel()*2,0.15 + 0.004*tower.getLevel(),380 + 2)
[values] => Array
(
[visible] => true
[icon] => ReplaceableTextures\CommandButtons\BTNPig.blp
[name] => Angry Pigs
[short_explain] => Attacks with a rampage of |cffFFFF802|r exploding pigs that deal attack damage to a single target and spell damage in AoE.
[ONATTACK_chance] => 1.0
[ONATTACK_chanceLevelAdd] => 0.0
[long_explain] => Attacks with a rampage of |cffFFFF802|r pigs from hell. Pigs will home in on creeps and explode upon contact, dealing the tower's attack damage to the main target and splashing an extra |cffFFFF8015%|r of the tower's attack damage in |cffFFFF80375|r AoE as spell damage, divided by the number of creeps hit.|n|nPigs move at |cffFFFF80380|r speed and home in on targets from |cffFFFF80275|r range.|n|n|cffFF8000Level Bonus:|r|n|cffFFFF80+2|r homing range|n|cffFFFF80+0.4%|r splash damage|n|cffFFFF80+1|r pig at levels |cffFFFF805|r and |cffFFFF8015|r|n|cffFFFF80+2|r pig speed
)
)
[1] => Array
(
[name] => Header
[code] => globals
ProjectileType deem_BoarPT
ProjectileType deem_AirBoarPT
integer array autopigsSizeFactorArray
endglobals
struct pignugget //gets attached to timer
Tower tower = 0
Unit target = 0
integer targetUID = 0
real angle = 0
real homerange = 0
integer pigs = 0
integer model = 0
real splash = 0
boolean Air = false
real x = 0
real y = 0
real z = 0
endstruct
struct nuggetpig //gets attached to projectile
real dmg = 0
real crit = 0
real scrit = 0
real splash = 0
boolean Air = false
endstruct
function pignuggetlauncher takes nothing returns nothing
local timer t = GetExpiredTimer()
local pignugget n = GetTimerData(t)
local Projectile p
local nuggetpig np = nuggetpig.create() //used to attach damage & crit information to projectile
//target-type differences
if n.Air then
set np.Air = true
if n.targetUID != n.target.getUID() then
set p = Projectile.createLinearInterpolationFromPointToPoint(deem_AirBoarPT,n.tower,0,0,n.tower.getX() + GetRandomInt(-25,25),n.tower.getY() + GetRandomInt(-25,25),0,n.x+ GetRandomInt(-50,50),n.y+ GetRandomInt(-50,50),n.z+ GetRandomInt(-35,35),GetRandomReal(0,0.30))
else
set n.x = n.target.getX()
set n.y = n.target.getY()
set n.z = n.target.getZ()
set p = Projectile.createLinearInterpolationFromPointToUnit(deem_AirBoarPT,n.tower,0,0,n.tower.getX() + GetRandomInt(-25,25),n.tower.getY() + GetRandomInt(-25,25),0,n.target,GetRandomReal(0,0.20),true)
endif
call p.color(255,105,105,255)
else
set p = Projectile.create(deem_BoarPT, n.tower, 0.00, 0, n.tower.getX() + GetRandomInt(-25,25), n.tower.getY() + GetRandomInt(-25,25), 5.00, n.angle + GetRandomReal(-1,1)*16)
if n.target.getSize() >= SIZE_BOSS then
call p.setCollisionParameters(n.homerange + 75,TARGET_CREEPS)
else
call p.setCollisionParameters(n.homerange,TARGET_CREEPS)
endif
set p.speed = 380 + n.tower.getLevel()*2
endif
//projectile setup
if n.model == 0 then
call p.setModel("units\\critters\\Pig\\Pig.mdl")
elseif n.model == 1 then
call p.setModel("units\\creeps\\SpiritPig\\SpiritPig.mdl")
call p.setScale(0.57)
elseif n.model == 2 then
call p.setModel("units\\critters\\Felboar\\Felboar.mdl")
endif
if GetRandomInt(0,1) == 1 then //swerving, wee
set p.rotation = 1
else
set p.rotation = -1
endif
set np.dmg = n.tower.getCurrentAttackDamageWithBonus()
set np.crit = n.tower.calcAttackMulticrit(0,0,0)
set np.scrit = n.tower.calcSpellCritNoBonus()
set np.splash = n.splash
set p.userInt = np //attach damage info to projectile
//pig-queue
set n.pigs = n.pigs-1 //remove pig from pig-queue
if n.pigs <= 0 then //release timer if pig-queue is empty
call ReleaseTimer(t)
call n.destroy()
else
call TimerStart(t, 0.25, true, function pignuggetlauncher)
endif
endfunction
//@export
function PigNuggetOnAttack takes Tower tower, Unit target, integer model, integer pigs, real homerange, real splash, integer speed returns nothing
local pignugget nugget = pignugget.create()
local timer t = NewTimer()
if tower.getLevel() >= 5 then
set pigs = pigs +1
if tower.getLevel() >= 15 then
set pigs = pigs +1
// if tower.getLevel() >= 25 then
// set pigs = pigs +1
// endif
endif
endif
set nugget.tower = tower
set nugget.target = target
set nugget.angle = Atan2(target.getY() - tower.getY(), target.getX() - tower.getX())* bj_RADTODEG
set nugget.homerange = homerange
set nugget.model = model //0 first member, 1 second member, 2 third member
set nugget.splash = splash
set nugget.pigs = pigs
if nugget.target.getSize() == SIZE_AIR then
set nugget.Air = true
set nugget.targetUID = target.getUID()
set nugget.x = target.getX()
set nugget.y = target.getY()
set nugget.z = target.getZ()
endif
call SetTimerData(t,nugget)
call TimerStart(t, 0.0, true, function pignuggetlauncher)
endfunction
function deem_BoarHit takes Projectile p, Unit target returns nothing
local Tower tower = p.getCaster()
local Iterate I
local integer count = 0
local Unit u
local nuggetpig np = p.userInt //carries damage & critical information from the time the pig was shot
if target != 0 or np.Air then
if target != 0 then
call tower.doAttackDamage(target,np.dmg,np.crit)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\DemolisherFireMissile\\DemolisherFireMissile.mdl", target.getUnit(), "origin"))
else
endif
set I = Iterate.overUnitsInRange(tower,TARGET_CREEPS,p.x,p.y,375)
// target count for AoE, immune sensitive
loop
set u = I.next()
exitwhen u == 0
if u != 0 then
if u.isImmune() == false then
set count = count +1
endif
endif
endloop
//splash damage
if count != 0 then
set np.splash = np.splash / count //split damage to target count
call tower.doSpellDamageAoE(p.x,p.y,375,np.dmg*np.splash,np.scrit,0)
endif
//random fix
set p.explode = false
else
call p.avertDestruction()
call p.setCollisionEnabled(true)
set p.accelerate = 0
set p.rotation = 1
set p.speed = 400
call p.color(255,255,255,255)
call p.enablePeriodic(1)
endif
endfunction
function deem_BoarPeriodic takes Projectile p returns nothing
set p.direction = p.direction + GetRandomReal(-1,1)*12
set p.rotation = p.rotation * -1.1
endfunction
function deem_BoarHome takes Projectile p, Unit target returns nothing
local Tower tower = p.getCaster()
if target.getSize() != SIZE_AIR then
call p.setCollisionEnabled(false)
call p.setHomingTarget(target)
set p.accelerate = 24
call p.color(255,95,95,255)
call p.disablePeriodic()
endif
endfunction
//@export
function autopigs takes Tower tower, Unit target, integer model, integer pigs, real homerange, real splash, integer speed, integer size returns nothing
set tower.userInt = tower.userInt + autopigsSizeFactorArray[size]
loop
exitwhen tower.userInt < 48
set tower.userInt = tower.userInt - 48
call PigNuggetOnAttack(tower,target,model,pigs,homerange,splash,speed)
endloop
endfunction
function deem_BoarClean takes Projectile p returns nothing
call nuggetpig(p.userInt).destroy()
endfunction
private function init takes nothing returns nothing
set deem_BoarPT = ProjectileType.createRanged("", 1500.0, 380)
call deem_BoarPT.enableCollision( deem_BoarHome, 0.00, TARGET_CREEPS, false )
call deem_BoarPT.enableHoming(deem_BoarHit, 20 )
call deem_BoarPT.enablePeriodic(deem_BoarPeriodic,1.00)
call deem_BoarPT.disableExplodeOnExpiration()
call deem_BoarPT.setEventOnCleanup(deem_BoarClean)
set deem_AirBoarPT = ProjectileType.createInterpolate("", 880)
call deem_AirBoarPT.setEventOnInterpolationFinished(ProjectileTargetEvent.deem_BoarHit)
call deem_AirBoarPT.disableExplodeOnExpiration()
call deem_AirBoarPT.setEventOnCleanup(deem_BoarClean)
set autopigsSizeFactorArray[SIZE_MASS] = 3
set autopigsSizeFactorArray[SIZE_MASS_CHALLENGE] = 4
set autopigsSizeFactorArray[SIZE_NORMAL] = 6
set autopigsSizeFactorArray[SIZE_CHAMPION] = 10
set autopigsSizeFactorArray[SIZE_AIR] = 10
set autopigsSizeFactorArray[SIZE_BOSS] = 25
set autopigsSizeFactorArray[SIZE_CHALLENGE] = 25
endfunction
[values] => Array
(
[visible] => false
[icon] =>
[name] =>
[short_explain] =>
[long_explain] =>
)
)
[2] => Array
(
[name] => On Kill
[code] => local Unit target = Event.getTarget()
call autopigs(tower,target,0,2,275+tower.getLevel()*2,0.15 + 0.004*tower.getLevel(),380 + 2,target.getSize())
[values] => Array
(
[visible] => false
[icon] =>
[name] =>
[short_explain] =>
[long_explain] =>
)
)
[3] => Array
(
[name] => On Damage
[code] => set Event.damage = 0
[values] => Array
(
[ONDAMAGE_chance] => 1.0
[visible] => false
[icon] =>
[name] =>
[short_explain] =>
[ONDAMAGE_chanceLevelAdd] => 0.0
[long_explain] =>
)
)
[4] => Array
(
[name] => On Unit Comes In Range
[code] => local Unit target = Event.getTarget()
call autopigs(tower,target,0,2,275+tower.getLevel()*2,0.15 + 0.004*tower.getLevel(),380 + 2,target.getSize())
[values] => Array
(
[UNITINRANGE_targetType] => TARGET_TYPE_CREEPS
[visible] => true
[icon] => ReplaceableTextures\CommandButtons\BTNFelBoar.blp
[name] => Initiative
[short_explain] => Every |cffFFFF8016th|r time a creep comes within |cffFFFF80900|r range of this tower, a rampage of pigs will be released at it.|n|nLarger than mass creeps cause pigs to release more often.
[UNITINRANGE_range] => 900
[long_explain] => Every |cffFFFF8016th|r time a creep comes within |cffFFFF80900|r range of this tower, a rampage of pigs will be released at it.|nWhen this tower kills a creep, the kill counts towards this counter as if the creep had come into the range.|n|nLarger than mass creeps cause pigs to release more often.
)
)
)
[abilities] => Array
(
)
[buffs] => Array
(
)
[units] => Array
(
)
[references] => Array
(
)
)