Array
(
[scriptVersion] => 7
[oeValues] => Array
(
[RngBuff1] => 250
[scaleBull] => 0
[MissileHoming] => 1
[Upgrade] => Array
(
)
[targs1] => Array
(
)
[goldcost] => 1984
[weapsOn] => 1
[dice1] => 1
[Missilespeed] => 1500
[moveHeight] => -11
[file] => buildings\orc\Beastiary\Beastiary.mdl
[atkType1] => siege
[modelScale] => 0.4
[weapTp1] => missile
[acquire] => 1200
[rangeN1] => 1200
[upgrades] => Array
(
)
[cool1] => 1.8
[Ubertip] => Empowers you against the alien menace. Model credits: SirCoqaLot plus mOck and MasterCassim.
[abilList] => Array
(
)
[Name] => Xeno Research Facility
[Missileart] => Abilities\Spells\Orc\Ensnare\EnsnareMissile.mdl
[Art] => ReplaceableTextures\CommandButtons\BTNBeastiary.blp
[buildingShadow] => Array
(
)
[sides1] => 1
[auto] => Array
(
)
[dmgplus1] => 1811
[bldtm] => 1
)
[settings] => Array
(
[author] => Palandu
[element] => iron
[authorDisplay] => |cffbdb76bPalandu|r
[alpha] => 255
[balanceTip] => Array
(
)
[rarity] => unique
[version] => 1.0
[abil_factor] => 0.5
)
[effects] => Array
(
[0] => Array
(
[x] => 27.8724
[y] => 5.1421
[z] => 0
[scale] => 0.138
[rot] => 0.429381
[file] => Doodads\Ruins\Props\DalaranRuinTower2\DalaranRuinTower2.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => 0
[advanced] => true
[animation] => Array
(
)
[aniSpeed] => 50
)
[1] => Array
(
[x] => 21.8273
[y] => -23.0744
[z] => 19.2
[scale] => 0.36
[rot] => 5.54543
[file] => Doodads\Dungeon\Props\SewerVent\SewerVent3.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => 0
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[2] => Array
(
[x] => 26.7202
[y] => 4.6366
[z] => 76.8
[scale] => 0.135
[rot] => 3.10669
[file] => Doodads\LordaeronSummer\Props\SmokeSmudge\SmokeSmudge2.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => 0
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[3] => Array
(
[x] => 34.5105
[y] => -16.2183
[z] => 32
[scale] => 0.28
[rot] => 5.12541
[file] => Doodads\Dungeon\Props\SewerVent\SewerVent3.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => 0
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[4] => Array
(
[x] => 41.8778
[y] => -43.173
[z] => 0
[scale] => 0.1495
[rot] => 2.84419
[file] => Doodads\Ruins\Props\DalaranRuinTowerBase\DalaranRuinTowerBase.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => 0
[advanced] => true
[animation] => Array
(
)
[aniSpeed] => 50
)
[5] => Array
(
[x] => -17.8918
[y] => -27.3525
[z] => 19.2
[scale] => 0.1725
[rot] => 1.91523
[file] => Abilities\Spells\NightElf\MoonWell\MoonWellTarget.mdl
[red] => 255
[green] => 255
[blue] => 1
[alpha] => 255
[pitch] => 0
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[6] => Array
(
[x] => 4.42688
[y] => -23.1842
[z] => 0
[scale] => 0.28
[rot] => 4.89986
[file] => Doodads\LordaeronSummer\Props\CageEmpty\CageEmpty.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => 0
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[7] => Array
(
[x] => -45.0839
[y] => 2.19916
[z] => 0
[scale] => 0.138
[rot] => 6.04216
[file] => Doodads\Ruins\Props\DalaranRuinTower2\DalaranRuinTower2.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => 0
[advanced] => true
[animation] => Array
(
)
[aniSpeed] => 50
)
[8] => Array
(
[x] => 45.0221
[y] => -3.15212
[z] => 0
[scale] => 0.138
[rot] => 4.99776
[file] => Doodads\Ruins\Props\DalaranRuinTower2\DalaranRuinTower2.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => 0
[advanced] => true
[animation] => Array
(
)
[aniSpeed] => 50
)
[9] => Array
(
[x] => -23.69
[y] => 0.584216
[z] => 6.4
[scale] => 0.375
[rot] => 3.09918
[file] => Doodads\Dungeon\Props\SewerVent\SewerVent0.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => 0
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[10] => Array
(
[x] => -42.5388
[y] => -36.5634
[z] => 0
[scale] => 0.28
[rot] => 3.73235
[file] => Doodads\LordaeronSummer\Props\CageEmpty\CageEmpty.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => 0
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[11] => Array
(
[x] => -17.8517
[y] => -28.2215
[z] => 19.2
[scale] => 0.1725
[rot] => 1.91523
[file] => Abilities\Spells\NightElf\MoonWell\MoonWellTarget.mdl
[red] => 255
[green] => 255
[blue] => 1
[alpha] => 255
[pitch] => 0
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[12] => Array
(
[x] => 42.8308
[y] => -40.3684
[z] => 19.2
[scale] => 0.2
[rot] => 4.69494
[file] => Abilities\Spells\NightElf\MoonWell\MoonWellTarget.mdl
[red] => 255
[green] => 255
[blue] => 1
[alpha] => 255
[pitch] => 0
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[13] => Array
(
[x] => -7.93119
[y] => -19.3766
[z] => 0
[scale] => 0.0675
[rot] => 3.45575
[file] => Abilities\Spells\NightElf\MoonWell\MoonWellTarget.mdl
[red] => 255
[green] => 255
[blue] => 1
[alpha] => 255
[pitch] => 0
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[14] => Array
(
[x] => -7.93119
[y] => -19.3766
[z] => 0
[scale] => 0.0675
[rot] => 3.45575
[file] => Abilities\Spells\NightElf\MoonWell\MoonWellTarget.mdl
[red] => 255
[green] => 255
[blue] => 1
[alpha] => 255
[pitch] => 0
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[15] => Array
(
[x] => 43.0507
[y] => -40.3666
[z] => 19.2
[scale] => 0.2
[rot] => 4.69494
[file] => Abilities\Spells\NightElf\MoonWell\MoonWellTarget.mdl
[red] => 255
[green] => 255
[blue] => 1
[alpha] => 255
[pitch] => 0
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[16] => Array
(
[x] => -31.1252
[y] => -0.323646
[z] => 25.6
[scale] => 0.44
[rot] => 5.22122
[file] => Doodads\Dungeon\Props\SewerVent\SewerVent1.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => 0
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[17] => Array
(
[x] => -45.5316
[y] => -0.378107
[z] => 96
[scale] => 0.135
[rot] => 4.15388
[file] => Doodads\LordaeronSummer\Props\SmokeSmudge\SmokeSmudge2.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => 0
[advanced] => false
[animation] => Array
(
)
[aniSpeed] => 50
)
[18] => Array
(
[x] => 39.0257
[y] => -14.6265
[z] => 0
[scale] => 0.0585
[rot] => 0.616627
[file] => Doodads\Ruins\Props\DalaranRuinTowerBase\DalaranRuinTowerBase.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => 0
[advanced] => true
[animation] => Array
(
)
[aniSpeed] => 50
)
[19] => Array
(
[x] => -18.1057
[y] => -25.5405
[z] => 0
[scale] => 0.1495
[rot] => 6.27272
[file] => Doodads\Ruins\Props\DalaranRuinTowerBase\DalaranRuinTowerBase.mdl
[red] => 255
[green] => 255
[blue] => 255
[alpha] => 255
[pitch] => 0
[advanced] => true
[animation] => Array
(
)
[aniSpeed] => 50
)
)
[dmgTable] => Array
(
)
[triggers] => Array
(
[0] => Array
(
[name] => On Tower Creation
[code] => local integer uid = tower.getUID()
set tower.userInt = CATEGORY_OTHERS //which creep type i attacked - that's the type i'll buff next
set tower.userInt2 = CATEGORY_OTHERS //memory of prev. attacked creep type
set tower.userInt3 = 250 //bonus limit
set tower.userReal = 101 //on-off switch. Tower should not work in bonus level. +ve = tower is on
set tower.userReal3 = -101 //flag to show the research message. +ve = message is on.
call SaveInteger(xeno_raceBonusTable, uid, CATEGORY_UNDEAD, 0) //undead
call SaveInteger(xeno_raceBonusTable, uid, CATEGORY_MAGIC, 0) //magic
call SaveInteger(xeno_raceBonusTable, uid, CATEGORY_NATURE, 0) //nature
call SaveInteger(xeno_raceBonusTable, uid, CATEGORY_ORC, 0) //orc
call SaveInteger(xeno_raceBonusTable, uid, CATEGORY_HUMANOID, 0) //humanoid
call SaveInteger(xeno_raceBonusTable, uid, CATEGORY_OTHERS, 0) //just to prevent a hashkey error
[values] => Array
(
[icon] =>
[visible] => false
[name] =>
[short_explain] =>
[long_explain] =>
)
)
[1] => Array
(
[name] => On Damage
[code] => local Creep enemy
local integer i
local integer index
local integer uid
if tower.userReal < 0 then
return
endif
if not Event.isMainTarget() or Event.isSpellDamage() then
return
endif
set uid = tower.getUID()
set enemy = Event.getTarget()
set index = enemy.getCategory() //can technically use the onattack userInt....
set i = LoadInteger(xeno_raceBonusTable, uid, index)
if i < tower.userInt3 then
call tower.getOwner().displaySmallFloatingText("Sample Collected", enemy, 200, 200, 200, 40.0)
set i = IMinBJ(tower.userInt3, i + 50)
call SaveInteger(xeno_raceBonusTable, uid, index, i)
set tower.userReal3 = 101 //flag to show the research message
endif
[values] => Array
(
[ONDAMAGE_chance] => 0.25
[icon] => ReplaceableTextures\CommandButtons\BTNEnsnare.blp
[visible] => true
[name] => Sample Collection
[short_explain] => Has a chance to collect a tissue sample whenever it damages a creep.
[ONDAMAGE_chanceLevelAdd] => 0.01
[long_explain] => Has a |cffFFFF8025%|r chance to collect a tissue sample from a damaged creep. Once researched, it will provide a |cffFFFF805%|r bonus vs the race of that creep, through the Xeno Vulnerability Research aura. Maximum bonus per race is |cffFFFF8025%|r. Whenever a different race is attacked, half of the research bonuses against all other races are lost.|n|n|cffFF8000Level Bonus:|r|n|cffFFFF80+1%|r chance to collect sample|n|cffFFFF80+1%|r maximum bonus per race
)
)
[2] => Array
(
[name] => Header
[code] => globals
BuffType xeno_dummyAura
BuffType xeno_undead
BuffType xeno_magic
BuffType xeno_nature
BuffType xeno_orc
BuffType xeno_humanoid
hashtable xeno_raceBonusTable = InitHashtable()
endglobals
//halving and setting of all modifiers on base tower
function xeno_ManageBonuses takes Tower tower, boolean isTypeChange, integer uid, integer currentCategory, integer currentBonus returns nothing
local real currentRaceBonus
local real idealBonus
if isTypeChange then
call SaveInteger(xeno_raceBonusTable, uid, CATEGORY_UNDEAD, LoadInteger(xeno_raceBonusTable, uid, CATEGORY_UNDEAD)/2)
call SaveInteger(xeno_raceBonusTable, uid, CATEGORY_MAGIC, LoadInteger(xeno_raceBonusTable, uid, CATEGORY_MAGIC)/2)
call SaveInteger(xeno_raceBonusTable, uid, CATEGORY_NATURE, LoadInteger(xeno_raceBonusTable, uid, CATEGORY_NATURE)/2)
call SaveInteger(xeno_raceBonusTable, uid, CATEGORY_ORC, LoadInteger(xeno_raceBonusTable, uid, CATEGORY_ORC)/2)
call SaveInteger(xeno_raceBonusTable, uid, CATEGORY_HUMANOID, LoadInteger(xeno_raceBonusTable, uid, CATEGORY_HUMANOID)/2)
//now restore the correct one :P
call SaveInteger(xeno_raceBonusTable, uid, currentCategory, currentBonus)
endif
//now set the correct race bonuses for this tower
set idealBonus = 1.0 + (I2R(LoadInteger(xeno_raceBonusTable, uid, CATEGORY_UNDEAD))/1000)
set currentRaceBonus = tower.getDamageToCategory(CATEGORY_UNDEAD)
if idealBonus != currentRaceBonus then
call tower.modifyProperty(MOD_DMG_TO_UNDEAD, idealBonus - currentRaceBonus) //add the delta
endif
set idealBonus = 1.0 + (I2R(LoadInteger(xeno_raceBonusTable, uid, CATEGORY_MAGIC))/1000)
set currentRaceBonus = tower.getDamageToCategory(CATEGORY_MAGIC)
if idealBonus != currentRaceBonus then
call tower.modifyProperty(MOD_DMG_TO_MAGIC, idealBonus - currentRaceBonus) //add the delta
endif
set idealBonus = 1.0 + (I2R(LoadInteger(xeno_raceBonusTable, uid, CATEGORY_NATURE))/1000)
set currentRaceBonus = tower.getDamageToCategory(CATEGORY_NATURE)
if idealBonus != currentRaceBonus then
call tower.modifyProperty(MOD_DMG_TO_NATURE, idealBonus - currentRaceBonus) //add the delta
endif
set idealBonus = 1.0 + (I2R(LoadInteger(xeno_raceBonusTable, uid, CATEGORY_ORC))/1000)
set currentRaceBonus = tower.getDamageToCategory(CATEGORY_ORC)
if idealBonus != currentRaceBonus then
call tower.modifyProperty(MOD_DMG_TO_ORC, idealBonus - currentRaceBonus) //add the delta
endif
set idealBonus = 1.0 + (I2R(LoadInteger(xeno_raceBonusTable, uid, CATEGORY_HUMANOID))/1000)
set currentRaceBonus = tower.getDamageToCategory(CATEGORY_HUMANOID)
if idealBonus != currentRaceBonus then
call tower.modifyProperty(MOD_DMG_TO_HUMANOID, idealBonus - currentRaceBonus) //add the delta
endif
endfunction
//this is where all the magic or rather research happens :P
function xeno_BuffTowers takes Tower tower, boolean isTypeChange returns nothing
local BuffType selectedBuff
local integer powerLevel
local integer uid = tower.getUID()
local Iterate towersInAura
local Unit nextTower
set powerLevel = LoadInteger(xeno_raceBonusTable, uid, tower.userInt)
set tower.userInt2 = tower.userInt //save the race type of new buff
if tower.userInt == CATEGORY_UNDEAD then
set selectedBuff = xeno_undead
if (isTypeChange and powerLevel > 0) or tower.userReal3 > 0 then
call tower.getOwner().displaySmallFloatingText("Undead Research Published", tower, 50, 50, 50, 0)
endif
elseif tower.userInt == CATEGORY_MAGIC then
set selectedBuff = xeno_magic
if (isTypeChange and powerLevel > 0) or tower.userReal3 > 0 then
call tower.getOwner().displaySmallFloatingText("Magic Research Published", tower, 0, 155, 0, 0)
endif
elseif tower.userInt == CATEGORY_NATURE then
set selectedBuff = xeno_nature
if (isTypeChange and powerLevel > 0) or tower.userReal3 > 0 then
call tower.getOwner().displaySmallFloatingText("Nature Research Published", tower, 0, 155, 0, 0)
endif
elseif tower.userInt == CATEGORY_ORC then
set selectedBuff = xeno_orc
if (isTypeChange and powerLevel > 0) or tower.userReal3 > 0 then
call tower.getOwner().displaySmallFloatingText("Orc Research Published", tower, 155, 0, 155, 0)
endif
elseif tower.userInt == CATEGORY_HUMANOID then
set selectedBuff = xeno_humanoid
if (isTypeChange and powerLevel > 0) or tower.userReal3 > 0 then
call tower.getOwner().displaySmallFloatingText("Humanoid Research Published", tower, 0, 155, 155, 0)
endif
else
//Probs a champ wave. Exit early.
return
endif
set tower.userReal3 = -101 //reset the message display flag
call xeno_ManageBonuses(tower, isTypeChange, uid, tower.userInt, powerLevel)
//re-apply buffs / refresh aura
if powerLevel > 0 then
set towersInAura = Iterate.overUnitsInRangeOfCaster(tower, TARGET_TOWERS, 315.0) //larger AoE needed as aura centre seems to be diff + collision problems
loop
set nextTower = towersInAura.next()
exitwhen nextTower == 0
if nextTower.getBuffOfType(xeno_dummyAura) != 0 and nextTower.getUID() != uid then //do not buff self
call selectedBuff.applyAdvanced(tower, nextTower, powerLevel, powerLevel, (6.5 / tower.getProp_BuffDuration())) //always 8.5 secs
endif
endloop
endif
endfunction
//Do not remove or rename this function!
//Put your initialization tasks here, this function will be called on map init
private function init takes nothing returns nothing
local Modifier m
set xeno_undead = BuffType.create(1, 0, true)
set m = Modifier.create()
call m.addModification(MOD_DMG_TO_UNDEAD, 0.0, 0.001)
call xeno_undead.setBuffModifier(m)
set xeno_magic = BuffType.create(1, 0, true)
set m = Modifier.create()
call m.addModification(MOD_DMG_TO_MAGIC, 0.0, 0.001)
call xeno_magic.setBuffModifier(m)
set xeno_nature = BuffType.create(1, 0, true)
set m = Modifier.create()
call m.addModification(MOD_DMG_TO_NATURE, 0.0, 0.001)
call xeno_nature.setBuffModifier(m)
set xeno_orc = BuffType.create(1, 0, true)
set m = Modifier.create()
call m.addModification(MOD_DMG_TO_ORC, 0.0, 0.001)
call xeno_orc.setBuffModifier(m)
set xeno_humanoid = BuffType.create(1, 0, true)
set m = Modifier.create()
call m.addModification(MOD_DMG_TO_HUMANOID, 0.0, 0.001)
call xeno_humanoid.setBuffModifier(m)
set xeno_dummyAura = BuffType.createAuraEffectType(true)
call xeno_dummyAura.setBuffIcon('@@0@@')
endfunction
[values] => Array
(
[icon] =>
[visible] => false
[name] =>
[short_explain] =>
[long_explain] =>
)
)
[3] => Array
(
[name] => Periodic
[code] => if tower.userReal > 0 then
call xeno_BuffTowers(tower, tower.userInt != tower.userInt2)
endif
[values] => Array
(
[icon] =>
[visible] => false
[PERIODIC_period] => 6
[name] =>
[short_explain] =>
[long_explain] =>
)
)
[4] => Array
(
[name] => On Tower Destruction
[code] => call FlushChildHashtable(xeno_raceBonusTable, tower.getUID())
[values] => Array
(
[icon] =>
[visible] => false
[name] =>
[short_explain] =>
[long_explain] =>
)
)
[5] => Array
(
[name] => On Attack
[code] => local Creep enemy
if tower.userReal < 0 then
return
endif
set enemy = Event.getTarget()
if enemy.getSpawnLevel() > Game.getMaxLevel() then
set tower.userReal = -101 //off switch
set tower.userInt3 = 0
endif
set tower.userInt = enemy.getCategory() //setting the last attacked type
if tower.userInt != tower.userInt2 then //last attacked is diff from the prev. last attacked, halve bonuses and change buffs
call xeno_BuffTowers(tower, true)
endif
[values] => Array
(
[icon] =>
[visible] => false
[name] =>
[short_explain] =>
[ONATTACK_chance] => 1.0
[ONATTACK_chanceLevelAdd] => 0.0
[long_explain] =>
)
)
[6] => Array
(
[name] => Tower Aura
[code] => Array
(
)
[values] => Array
(
[icon] => ReplaceableTextures\CommandButtons\BTNDoom.blp
[visible] => true
[AURA_auraEffect] => xeno_dummyAura
[AURA_power] => 1
[long_explain] => Improves damage vs various creep races for all towers in |cffFFFF80280|r range. Improvement amount depends on the Sample Collection. Research results are published every |cffFFFF806|r seconds and whenever a different race is attacked. Stops working in the Bonus Level.|n|n|cffffff80Note:|r For this tower, research overrides any and all other race modifications. So the race bonuses of this tower reflect the bonuses given by this aura.
[AURA_level] => 1
[AURA_auraRange] => 280.0
[AURA_targetType] => TARGET_TYPE_TOWERS
[AURA_levelAdd] => 1
[AURA_powerAdd] => 1
[name] => Xeno Vulnerability Research
[AURA_targetSelf] => true
[short_explain] => Gives a damage bonus vs different races.
)
)
[7] => Array
(
[name] => On Level Up
[code] => set tower.userInt3 = 250 + tower.getLevel()*10 //bonus limit
[values] => Array
(
[icon] =>
[visible] => false
[name] =>
[short_explain] =>
[long_explain] =>
)
)
)
[abilities] => Array
(
)
[buffs] => Array
(
[0] => Array
(
[id] => @@0@@
[derivedFrom] => BEar
[oeValues] => Array
(
[Bufftip] => Xeno Vulnerability Research
[Buffubertip] => This tower is privy to the weaknesses of its alien enemies.
[Buffart] => ReplaceableTextures\CommandButtons\BTNDoom.blp
[EditorName] => Xeno Vulnerability Research
)
)
)
[units] => Array
(
)
[references] => Array
(
)
)