Name | Type | is_array | initial_value |
ActivatedSpikeTrap | boolean | No | |
ActivatingPlayer | integer | No | |
AfterDamageEvent | real | No | |
AreaChangeEvent | real | No | |
ArenaActive | boolean | No | |
ArenaBoss | unit | No | |
ArenaBossFighting | boolean | No | |
ArenaClear | boolean | No | |
ArenaPhase | integer | No | |
Atonement_Fight | boolean | No | |
Boss1Dead | boolean | No | |
Boss2AbilitiesRunning | boolean | No | |
Boss2ActivePhase | integer | No | |
Boss2BetweenPhases | boolean | No | |
Boss2Died | boolean | No | |
Boss2Phase1 | boolean | No | |
Boss2Phase2 | boolean | No | |
Boss2Phase3 | boolean | No | |
Boss2Phase4 | boolean | No | |
BuddyActive | boolean | No | |
BuddyDemonHunter | boolean | No | |
BuddyFighter | boolean | No | |
BuddyID | unit | No | |
BuddyRiddler | boolean | No | |
BuddyWarden | boolean | No | |
CargoEvent | real | No | |
CargoTransportGroup | group | Yes | |
CargoTransportUnit | unit | Yes | |
CatLeverA | destructable | No | |
CatLeverB | destructable | No | |
CatLeverNumber | integer | No | |
CatMatchesMade | integer | No | |
CatSecretGot | boolean | No | |
CatSecretGroup | group | No | |
CatUnitA | unit | No | |
CatUnitAType | unitcode | No | |
CatUnitB | unit | No | |
CatUnitBType | unitcode | No | |
CEvBlock | boolean | Yes | |
CEvNext | integer | Yes | |
CEvPrev | integer | Yes | |
CEvSpecial | boolean | Yes | |
CEvUnloadTimer | timer | No | |
Chose_Fight | boolean | No | |
Chose_Riddle | boolean | No | |
CinemaDialogueOff | boolean | No | |
ClassChangeChoiceActive | boolean | No | |
ClassChangeID | integer | No | |
ClearDamageEvent | trigger | No | |
Collision_Angle | real | Yes | |
Collision_Damage | real | Yes | |
Collision_Distance | real | Yes | |
Collision_EndOnHit | boolean | Yes | |
Collision_Group | group | No | |
Collision_GroupEnum | group | No | |
Collision_GroupTemp | group | No | |
Collision_MaxDistance | real | Yes | |
Collision_Missile | unit | No | |
Collision_MissileSource | unit | Yes | |
Collision_OriginX | real | Yes | |
Collision_OriginY | real | Yes | |
Collision_Radius | real | Yes | |
Collision_ScanTargetsEvent | real | No | |
Collision_Speed | real | Yes | |
Collision_TargetFilter | integer | Yes | |
Collision_UnitHit | unit | Yes | |
Crowmeister_Group | group | No | |
Crowmeister_Interval | integer | Yes | |
Crowmeister_Limit | integer | Yes | |
Crowmeister_Raven | unit | No | |
CurrentFootPad | destructable | No | |
Currently_Active_Vision_Mod | fogmodifier | No | |
CurrentPlayerVisibility1 | fogmodifier | Yes | |
CurrentRessurectionStone | unit | No | |
CurrentTeleportTarget | location | No | |
CurrentText | texttag | No | |
DamageBlockingAbility | abilcode | No | |
DamageEvent | real | No | |
DamageEventAmount | real | No | |
DamageEventOverride | boolean | No | |
DamageEventPrevAmt | real | No | |
DamageEventSource | unit | No | |
DamageEventsWasted | integer | No | |
DamageEventTarget | unit | No | |
DamageEventTrigger | trigger | No | |
DamageEventType | integer | No | |
DamageModifierEvent | real | No | |
DamageTypeBlocked | integer | No | |
DamageTypeCode | integer | No | |
DamageTypeCriticalStrike | integer | No | |
DamageTypeExplosive | integer | No | |
DamageTypeHeal | integer | No | |
DamageTypeReduced | integer | No | |
DeathEvent | real | No | |
DeathFlock_Dummy | unit | Yes | |
DeathFlock_Group | group | No | |
DeathFlock_GroupTemp | group | No | |
DeathFlock_Interval | integer | Yes | |
DeathFlock_MissileGroup | group | No | |
DeathFlock_MissileGroupTemp | group | No | |
DeathFlock_Source | unit | Yes | |
DeathFlock_SpellLevel | integer | Yes | |
DeathFlock_X | real | Yes | |
DeathFlock_Y | real | Yes | |
DenForceWallDead | boolean | No | |
DenRespawnTime | real | No | |
DenSpawnGroupy | group | No | |
DenSpike1 | destructable | No | |
DenSpike2 | destructable | No | |
DEvAbility | abilcode | No | |
DEvAbilityTemp | abilcode | No | |
DEvBlock | boolean | Yes | |
DEvList | integer | Yes | |
DEvRemoved | boolean | Yes | |
DEvTimer | timer | No | |
Dialog_Button | button | Yes | |
DmgEvLife | real | No | |
DmgEvPrevLife | real | No | |
DmgEvRecursionLevel | integer | No | |
DmgEvRecursionN | integer | No | |
DmgEvRunning | boolean | No | |
DmgEvStarted | boolean | No | |
DmgEvTimer | timer | No | |
DmgEvTrig | trigger | No | |
DmgEvUnit | unit | No | |
DoNotClearNext | boolean | No | |
DyingUnits | integer | Yes | |
EnemyUnits | integer | No | |
FBAtonement | unit | No | |
FBMercy | unit | No | |
FBMercyLife | unit | No | |
FBMercyMana | unit | No | |
FBMinionB | unit | No | |
FBMinionC | unit | No | |
FBMinonA | unit | No | |
FBTruth | unit | No | |
FBVenar | unit | No | |
FirstDenCreeps | group | No | |
FTextA | texttag | No | |
FTextB | texttag | No | |
Godsever_Bonus | real | Yes | |
Godsever_IsActive | boolean | Yes | |
HasSeenAtonementDia | boolean | No | |
HUBGates | integer | No | |
ID | integer | No | |
ID2 | integer | No | |
IllusionCollision | boolean | Yes | |
InfluenceLevel | integer | No | |
InfluenceTarget | unit | No | |
IsDamageSpell | boolean | No | |
IsUnitAlive | boolean | Yes | |
IsUnitReincarnating | boolean | Yes | |
Jack | unit | No | |
Jack_Minions | group | No | |
Knifestorm_Group | group | No | |
Knifestorm_GroupKnives | group | No | |
Knifestorm_GroupTemp | group | No | |
Knifestorm_Interval | integer | Yes | |
Knifestorm_TimerInterval | integer | Yes | |
LastDamageHP | real | No | |
LastDmgPrevAmount | real | Yes | |
LastDmgPrevType | integer | Yes | |
LastDmgSource | unit | Yes | |
LastDmgTarget | unit | Yes | |
LastDmgValue | real | Yes | |
LastDmgWasSpell | boolean | Yes | |
LoopA | integervar | No | |
LoopB | integervar | No | |
MasterOfIllusions | integer | Yes | |
Meltdowns | group | No | |
MockingLaughLevel | integer | No | |
NextDamageOverride | boolean | No | |
NextDamageType | integer | No | |
PainToPower_DmgCounter | real | Yes | |
PainToPower_Group | group | No | |
PainToPower_Threshold | real | Yes | |
Player11PointArray | location | Yes | |
PowerfulLich | unit | No | |
PrimordialsKilled | integer | No | |
Quest1 | quest | No | |
Quest2 | quest | No | |
Quest3 | quest | No | |
Quest4 | quest | No | |
Raven_Angle | real | Yes | |
Raven_Group | group | No | |
Raven_GroupTemp | group | No | |
Raven_Interval | integer | Yes | |
Raven_IntervalLimit | integer | Yes | |
Raven_IsModePassive | boolean | Yes | |
Raven_IsMoving | boolean | Yes | |
Raven_Raven | unit | Yes | |
Raven_Source | unit | Yes | |
Raven_X | real | Yes | |
Raven_Y | real | Yes | |
Raven_YoungRaven | unit | Yes | |
RavenDamage_Damage | real | Yes | |
RavenDamage_DamageFailsafe | real | Yes | |
RavenDamage_Hits | integer | Yes | |
RavenDamage_IntervalDPS | integer | Yes | |
RavenDamage_IsAttacking | boolean | Yes | |
RavenDamage_LastDamage | real | Yes | |
RavenDamage_Stack | real | Yes | |
Ressurect1Activated | boolean | No | |
Resurrect0Active | boolean | No | |
RiddleOrFight | dialog | No | |
RM4SkeleMageInt | integer | No | |
RM4SkeleMages | unit | Yes | |
Scenario_1_Choice | integer | No | |
Scenario_1_SpawnCount | integer | No | |
Scenario_1_SpawnInt | integer | No | |
Scenario_1_Text | texttag | Yes | |
Scenario_1_Unit | unit | No | |
Scenario_3_DemonHunter | unit | No | |
Scenario_3_HelpDemonHunter | boolean | No | |
Scenario_3_HelpWarden | boolean | No | |
Scenario_3_Text | texttag | Yes | |
Scenario_3_Warden | unit | No | |
Scenario_5_RitualSound | sound | No | |
Scenario_5_Text | texttag | Yes | |
Scenario_5_Timer | timer | No | |
Scenario_5_TimerWindow | timerdialog | No | |
Scenario_5_Units | unit | Yes | |
Scenario_8_Active | boolean | No | |
ScenarioActivated | boolean | Yes | |
ScenarioActivationTrigger | trigger | Yes | |
ScenarioNPCs | group | Yes | |
Shadowsouled_Group | group | No | |
Shadowsouled_Interval | integer | Yes | |
Shadowsouled_Limit | integer | Yes | |
ShurikenFlurry_Group | group | No | |
ShurikenFlurry_GroupTemp | group | No | |
SoulsootheCurrent | unit | No | |
SP_Angle | real | Yes | |
SP_Charge | integer | Yes | |
SP_ChargeFloatText | texttag | Yes | |
SP_ChargeLimit | integer | Yes | |
SP_ChargeString | StringExt | Yes | |
SP_Distance | real | Yes | |
SP_FloatTextSize | real | Yes | |
SP_Group | group | No | |
SP_GroupTemp | group | No | |
SP_Interval | integer | Yes | |
SP_IsLearned | boolean | Yes | |
SP_Level | integer | Yes | |
SP_Pyxis | unit | Yes | |
SP_Source | unit | Yes | |
SP_TextColour | string | Yes | |
SPCast_Dummy | unit | No | |
SPCast_Location | location | No | |
SPCast_Real | real | No | |
SPCast_Source | unit | No | |
SPCast_Target | unit | No | |
SPEC_FleshSpinner | boolean | Yes | |
SpellDamageAbility | abilcode | No | |
SpiderLordsSlain | integer | No | |
SpikeMazeFloatText | texttag | Yes | |
SpikeVictim1 | unit | No | |
SpikeVictim2 | unit | No | |
Swirl_amountALT | integer | No | |
TapLabScenarioOn | boolean | No | |
TAYL_Scenario_2 | boolean | No | |
TAYL_Scenario_2_Texts | integer | No | |
TAYL_Scenario_8 | boolean | No | |
TAYLGenericOn | boolean | No | true |
TAYLGenericRandom | integer | No | |
Temp_Int | integer | No | |
Temp_Real_ay | real | Yes | |
TempAbility | abilcode | No | |
TempCaster | unit | No | |
TempGroup | group | No | |
TempInteger | integer | No | |
TempPoint | location | No | |
TempPoint2 | location | No | |
TempUnit | unit | No | |
TempX | real | No | |
TempY | real | No | |
Text | texttag | Yes | |
Text_size | real | Yes | |
Text_sizeDirection | boolean | Yes | |
Text_sizeLimit | real | Yes | |
Text_sizeRate | real | Yes | |
Text_string | string | Yes | |
TextIndex | integer | No | |
TortureItem | item | No | |
TotemHealth | real | No | |
Troll_Fighters | group | No | |
Trolls_Survivors | integer | No | 12 |
TrollsChosen | boolean | No | |
Tuskarr_survivors | integer | No | 16 |
Tuskarr_Warriors | group | No | |
TuskarrChosen | boolean | No | |
TuskarrsOrTrolls | dialog | No | |
UDex | integer | No | |
UDexGen | integer | No | |
UDexNext | integer | Yes | |
UDexPrev | integer | Yes | |
UDexRecycle | integer | No | |
UDexUnits | unit | Yes | |
UDexWasted | integer | No | |
UMovNext | integer | Yes | |
UMovPrev | integer | Yes | |
Undergroun_Chamber_Visited | boolean | No | |
UnendingRampage_Bool | boolean | Yes | |
UnitDamageRegistered | boolean | Yes | |
UnitIndexerEnabled | boolean | No | |
UnitIndexEvent | real | No | |
UnitIndexLock | integer | Yes | |
UnitMoving | boolean | Yes | |
UnitMovingEvent | real | No | |
UnitMovingX | real | Yes | |
UnitMovingY | real | Yes | |
UnitTypeEvent | real | No | |
WardensDead | integer | No | |
WindShell_Damage | real | Yes | |
WindShell_Group | group | No | |
WindShell_Interval | integer | Yes | |
WindShell_Source | unit | Yes |
//TESH.scrollpos=39
//TESH.alwaysfold=0
function Trig_Sanguis_Pyxis_Learn_Conditions takes nothing returns boolean
if ( not ( GetLearnedSkillBJ() == 'A01E' ) ) then
return false
endif
return true
endfunction
function Trig_Sanguis_Pyxis_Learn_Actions takes nothing returns nothing
local unit caster = GetTriggerUnit()
local integer id = GetUnitUserData(caster)
local integer id2 = 0
local integer i = 0
local real x = GetUnitX(caster)
local real y = GetUnitY(caster)
local boolean b = false
if udg_SP_IsLearned[id] == false then
set udg_SP_IsLearned[id] = true
endif
if udg_SP_Pyxis[id] == null then
set x = x + Cos(0) * 60
set y = y + Sin(0) * 60
set udg_SP_Pyxis[id] = CreateUnit(GetOwningPlayer(caster), 'e001', x, y, 270)
call UnitAddAbility(udg_SP_Pyxis[id], 'A016')
call SetUnitFlyHeight(udg_SP_Pyxis[id], 60, 0)
call PauseUnit(udg_SP_Pyxis[id], true)
set id2 = GetUnitUserData(udg_SP_Pyxis[id])
set udg_SP_Angle[id2] = 0
set udg_SP_Distance[id2] = 60
set udg_SP_Source[id2] = caster
set udg_SP_FloatTextSize[id2] = 6 * 0.0023
set udg_SP_TextColour[id2] = "|cffff0000"
call GroupAddUnit(udg_SP_Group, udg_SP_Pyxis[id])
set udg_SP_ChargeFloatText[id2] = CreateTextTag()
call SetTextTagVisibility(udg_SP_ChargeFloatText[id2], true)
call SetTextTagPos(udg_SP_ChargeFloatText[id2], x, y, 80)
if udg_SP_ChargeString[id2] == null then
call SetTextTagText(udg_SP_ChargeFloatText[id2], "***", udg_SP_FloatTextSize[id2])
else
call SetTextTagText(udg_SP_ChargeFloatText[id2], udg_SP_ChargeString[id2], udg_SP_FloatTextSize[id2])
endif
if IsTriggerEnabled(gg_trg_Sanguis_Pyxis_Orbit) == false then
call EnableTrigger( gg_trg_Sanguis_Pyxis_Orbit )
endif
else
set id2 = GetUnitUserData(udg_SP_Pyxis[id])
set b = true
endif
set udg_SP_Level[id2] = GetUnitAbilityLevel(caster, GetLearnedSkill())
set udg_SP_ChargeLimit[id2] = 2 + udg_SP_Level[id2]
set udg_SP_ChargeString[id2] = "*"
loop
set i = i + 1
exitwhen i == udg_SP_ChargeLimit[id2]
set udg_SP_ChargeString[id2] = udg_SP_ChargeString[id2] + "*"
endloop
if b == true then
if udg_SP_Charge[id2] > 0 then
call SetTextTagText(udg_SP_ChargeFloatText[id2], udg_SP_TextColour[id2] + SubString(udg_SP_ChargeString[id2], 0, udg_SP_Charge[id2]) + "|r" + SubString(udg_SP_ChargeString[id2], udg_SP_Charge[id2], udg_SP_ChargeLimit[id2]), udg_SP_FloatTextSize[id2])
else
call SetTextTagText(udg_SP_ChargeFloatText[id2], udg_SP_ChargeString[id2], udg_SP_FloatTextSize[id2])
endif
endif
endfunction
//===========================================================================
function InitTrig_Sanguis_Pyxis_Learn takes nothing returns nothing
set gg_trg_Sanguis_Pyxis_Learn = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Sanguis_Pyxis_Learn, EVENT_PLAYER_HERO_SKILL )
call TriggerAddCondition( gg_trg_Sanguis_Pyxis_Learn, Condition( function Trig_Sanguis_Pyxis_Learn_Conditions ) )
call TriggerAddAction( gg_trg_Sanguis_Pyxis_Learn, function Trig_Sanguis_Pyxis_Learn_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_Sanguis_Pyxis_Revive_Actions takes nothing returns nothing
local unit caster = GetTriggerUnit()
local integer id = GetUnitUserData(caster)
local integer id2 = 0
local integer i = 0
local real x = GetUnitX(caster)
local real y = GetUnitY(caster)
if udg_SP_IsLearned[id] == true then
set x = x + Cos(0) * 60
set y = y + Sin(0) * 60
set udg_SP_Pyxis[id] = CreateUnit(GetOwningPlayer(caster), 'e001', x, y, 270)
call UnitAddAbility(udg_SP_Pyxis[id], 'A016')
call SetUnitFlyHeight(udg_SP_Pyxis[id], 60, 0)
call PauseUnit(udg_SP_Pyxis[id], true)
set id2 = GetUnitUserData(udg_SP_Pyxis[id])
set udg_SP_Angle[id2] = 0
set udg_SP_Distance[id2] = 60
set udg_SP_Source[id2] = caster
set udg_SP_FloatTextSize[id2] = 6 * 0.0023
set udg_SP_TextColour[id2] = "|cffff0000"
call GroupAddUnit(udg_SP_Group, udg_SP_Pyxis[id])
if IsTriggerEnabled(gg_trg_Sanguis_Pyxis_Orbit) == false then
call EnableTrigger( gg_trg_Sanguis_Pyxis_Orbit )
endif
set udg_SP_Level[id2] = GetUnitAbilityLevel(caster, 'A01E')
set udg_SP_ChargeLimit[id2] = 2 + udg_SP_Level[id2]
set udg_SP_ChargeString[id2] = "*"
loop
set i = i + 1
exitwhen i == udg_SP_ChargeLimit[id2]
set udg_SP_ChargeString[id2] = udg_SP_ChargeString[id2] + "*"
endloop
set udg_SP_ChargeFloatText[id2] = CreateTextTag()
call SetTextTagVisibility(udg_SP_ChargeFloatText[id2], true)
call SetTextTagPos(udg_SP_ChargeFloatText[id2], x, y, 80)
call SetTextTagText(udg_SP_ChargeFloatText[id2], udg_SP_ChargeString[id2], udg_SP_FloatTextSize[id2])
endif
endfunction
//===========================================================================
function InitTrig_Sanguis_Pyxis_Revive takes nothing returns nothing
set gg_trg_Sanguis_Pyxis_Revive = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Sanguis_Pyxis_Revive, EVENT_PLAYER_HERO_REVIVE_FINISH )
call TriggerAddAction( gg_trg_Sanguis_Pyxis_Revive, function Trig_Sanguis_Pyxis_Revive_Actions )
endfunction
//TESH.scrollpos=24
//TESH.alwaysfold=0
function Trig_Sanguis_Pyxis_Orbit_Actions takes nothing returns nothing
local real x = 0.00
local real y = 0.00
local real x2 = 0.00
local real y2 = 0.00
local real dx = 0.00
local real dy = 0.00
local real angle = 0.00
local real dist = 0.00
local integer id = 0
local integer id2 = 0
local integer IntervalThreshold = 0
local unit ThePyxis = null
if FirstOfGroup(udg_SP_Group) != null then
loop
set ThePyxis = FirstOfGroup(udg_SP_Group)
exitwhen ThePyxis == null
call GroupAddUnit(udg_SP_GroupTemp, ThePyxis)
call GroupRemoveUnit(udg_SP_Group, ThePyxis)
set id = GetUnitUserData(ThePyxis)
set id2 = GetUnitUserData(udg_SP_Source[id])
set IntervalThreshold = (50 - 10 * udg_SP_Level[id]) * 33
set udg_SP_Interval[id] = (udg_SP_Interval[id] + 1)
if udg_SP_Interval[id] >= IntervalThreshold then
set udg_SP_Interval[id] = 0
if udg_SP_Charge[id] < udg_SP_ChargeLimit[id] then
set udg_SP_Charge[id] = udg_SP_Charge[id] + 1
if udg_SP_Charge[id] == udg_SP_ChargeLimit[id] then
call SetTextTagText(udg_SP_ChargeFloatText[id], udg_SP_TextColour[id] + udg_SP_ChargeString[id] + "|r", udg_SP_FloatTextSize[id])
else
call SetTextTagText(udg_SP_ChargeFloatText[id], udg_SP_TextColour[id] + SubString(udg_SP_ChargeString[id], 0, udg_SP_Charge[id]) + "|r" + SubString(udg_SP_ChargeString[id], udg_SP_Charge[id], udg_SP_ChargeLimit[id]), udg_SP_FloatTextSize[id])
endif
endif
endif
if udg_SPEC_FleshSpinner[id2] == true then
if GetUnitTypeId(ThePyxis) == 'e001' then
call PauseUnit(ThePyxis, false)
call ShowUnit(ThePyxis, false)
call ShowUnit(ThePyxis, true)
call UnitRemoveAbility(ThePyxis, 'Aloc')
call UnitAddAbility(ThePyxis, 'A01D')
call UnitRemoveAbility(ThePyxis, 'A01D')
endif
set x = GetUnitX(ThePyxis)
set y = GetUnitY(ThePyxis)
set x2 = GetUnitX(udg_SP_Source[id])
set y2 = GetUnitY(udg_SP_Source[id])
set dx = x2 - x
set dy = y2 - y
set dist = SquareRoot(dx*dx+dy*dy)
if dist > 900 then
call SetUnitPosition(ThePyxis, x2, y2)
endif
else
set udg_SP_Angle[id] = udg_SP_Angle[id] + 3
set angle = udg_SP_Angle[id] * bj_DEGTORAD
set x = (GetUnitX(udg_SP_Source[id]) + Cos(angle) * udg_SP_Distance[id]) - 16
set y = GetUnitY(udg_SP_Source[id]) + Sin(angle) * udg_SP_Distance[id]
call SetUnitPosition(ThePyxis, x, y)
endif
call SetTextTagVisibility(udg_SP_ChargeFloatText[id], true)
call SetTextTagPos(udg_SP_ChargeFloatText[id], x, y, 80)
endloop
else
call DisableTrigger(GetTriggeringTrigger())
endif
loop
set ThePyxis = FirstOfGroup(udg_SP_GroupTemp)
exitwhen ThePyxis == null
call GroupRemoveUnit(udg_SP_GroupTemp, ThePyxis)
set id = GetUnitUserData(ThePyxis)
set id2 = GetUnitUserData(udg_SP_Source[id])
if GetUnitState(udg_SP_Source[id], UNIT_STATE_LIFE) > 0 or udg_IsUnitReincarnating[id2] == true then
call GroupAddUnit(udg_SP_Group, ThePyxis)
else
call PauseUnit(ThePyxis, false)
call UnitRemoveAbility(ThePyxis, 'A019')
call UnitApplyTimedLife(ThePyxis, 'BTLF', 2.00)
call DestroyTextTag(udg_SP_ChargeFloatText[id])
set udg_SP_Charge[id2] = 0
set udg_SP_Interval[id2] = 0
set udg_SP_Pyxis[id2] = null
endif
endloop
endfunction
//===========================================================================
function InitTrig_Sanguis_Pyxis_Orbit takes nothing returns nothing
set gg_trg_Sanguis_Pyxis_Orbit = CreateTrigger( )
call DisableTrigger( gg_trg_Sanguis_Pyxis_Orbit )
call TriggerRegisterTimerEvent( gg_trg_Sanguis_Pyxis_Orbit, ( 1 / 32.00 ), true )
call TriggerAddAction( gg_trg_Sanguis_Pyxis_Orbit, function Trig_Sanguis_Pyxis_Orbit_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_Sanguis_Pyxis_Nearby_Death_Conditions takes nothing returns boolean
if IsUnitType(GetTriggerUnit(), UNIT_TYPE_MECHANICAL) or GetUnitTypeId(GetTriggerUnit()) == 'e001' or GetUnitTypeId(GetTriggerUnit()) == 'uloc' or GetUnitTypeId(GetTriggerUnit()) == 'u006' or GetUnitTypeId(GetTriggerUnit()) == 'n00J' or GetUnitTypeId(GetTriggerUnit()) == 'n00K' or GetUnitTypeId(GetTriggerUnit()) == 'n00L' then
return false
endif
return true
endfunction
function Trig_Sanguis_Pyxis_Nearby_Death_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local integer id = 0
local integer id2 = 0
local real x = GetUnitX(u)
local real y = GetUnitY(u)
call GroupEnumUnitsInRange(udg_SP_GroupTemp, x, y, 600, null)
set u = null
loop
set u = FirstOfGroup(udg_SP_GroupTemp)
exitwhen u == null
call GroupRemoveUnit(udg_SP_GroupTemp, u)
set id = GetUnitUserData(u)
if udg_SP_Pyxis[id] != null then
set id2 = GetUnitUserData(udg_SP_Pyxis[id])
if udg_SP_IsLearned[id] == true and udg_SP_Charge[id2] < udg_SP_ChargeLimit[id2] then
set udg_SP_Charge[id2] = udg_SP_Charge[id2] + 1
if udg_SP_Charge[id2] == udg_SP_ChargeLimit[id2] then
call SetTextTagText(udg_SP_ChargeFloatText[id2], udg_SP_TextColour[id2] + udg_SP_ChargeString[id2] + "|r", udg_SP_FloatTextSize[id2])
else
call SetTextTagText(udg_SP_ChargeFloatText[id2], udg_SP_TextColour[id2] + SubString(udg_SP_ChargeString[id2], 0, udg_SP_Charge[id2]) + "|r" + SubString(udg_SP_ChargeString[id2], udg_SP_Charge[id2], udg_SP_ChargeLimit[id2]), udg_SP_FloatTextSize[id2])
endif
endif
endif
endloop
endfunction
//===========================================================================
function InitTrig_Sanguis_Pyxis_Nearby_Death takes nothing returns nothing
set gg_trg_Sanguis_Pyxis_Nearby_Death = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Sanguis_Pyxis_Nearby_Death, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddCondition( gg_trg_Sanguis_Pyxis_Nearby_Death, Condition( function Trig_Sanguis_Pyxis_Nearby_Death_Conditions ) )
call TriggerAddAction( gg_trg_Sanguis_Pyxis_Nearby_Death, function Trig_Sanguis_Pyxis_Nearby_Death_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_Knifestorm_Loop_Actions takes nothing returns nothing
local real x = 0.00
local real y = 0.00
local real x2 = 0.00
local real y2 = 0.00
local real dx = 0.00
local real dy = 0.00
local real scale = 1.00
local real angle = 0.00
local real distance = 0.00
local unit source = null
local unit missile = null
local integer id = 0
local integer id2 = 0
local boolean array b
if FirstOfGroup(udg_Knifestorm_Group) == null and FirstOfGroup(udg_Knifestorm_GroupKnives) == null then
call DisableTrigger(GetTriggeringTrigger())
else
loop
set source = FirstOfGroup(udg_Knifestorm_Group)
set id = GetUnitUserData(source)
exitwhen source == null
call GroupRemoveUnit(udg_Knifestorm_Group, source)
if GetUnitState(source, UNIT_STATE_LIFE) > 0 then
call GroupAddUnit(udg_Knifestorm_GroupTemp, source)
endif
set udg_Knifestorm_Interval[id] = udg_Knifestorm_Interval[id] + 1
set udg_Knifestorm_TimerInterval[id] = udg_Knifestorm_TimerInterval[id] + 1
if udg_Knifestorm_Interval[id] >= 3 then
set udg_Knifestorm_Interval[id] = 0
set x = GetUnitX(source)
set y = GetUnitY(source)
set angle = GetRandomReal(0,360)
set missile = CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE), 'e001', x, y, angle)
call UnitAddAbility(missile, 'A01Q')
call SetUnitFlyHeight(missile, GetRandomReal(30,70), 0)
call SetUnitScale(missile, scale, scale, scale)
call PauseUnit(missile, true)
set id2 = GetUnitUserData(missile)
set udg_Collision_MissileSource[id2] = source
set udg_Collision_Radius[id2] = 50
set udg_Collision_Angle[id2] = angle
set udg_Collision_Speed[id2] = GetRandomReal(10,15)
set udg_Collision_Distance[id2] = 0
set udg_Collision_Damage[id2] = 40
set udg_Collision_MaxDistance[id2] = GetRandomReal(570,610)
set udg_Collision_TargetFilter[id2] = 1
set udg_Collision_EndOnHit[id2] = true
set udg_Collision_OriginX[id2] = x
set udg_Collision_OriginY[id2] = y
call GroupAddUnit(udg_Knifestorm_GroupKnives, missile)
set missile = null
endif
if udg_Knifestorm_TimerInterval[id] >= 495 then
set udg_Knifestorm_TimerInterval[id] = 0
set b[id] = true
endif
endloop
loop //add the Grim Jester back into Knifestorm_Group
set source = FirstOfGroup(udg_Knifestorm_GroupTemp)
set id = GetUnitUserData(source)
exitwhen source == null
call GroupRemoveUnit(udg_Knifestorm_GroupTemp, source)
if b[id] == true then
set b[id] = false
else
call GroupAddUnit(udg_Knifestorm_Group, source)
endif
endloop
loop
set missile = FirstOfGroup(udg_Knifestorm_GroupKnives)
set id2 = GetUnitUserData(missile)
exitwhen missile == null
call GroupRemoveUnit(udg_Knifestorm_GroupKnives, missile)
if GetUnitState(missile, UNIT_STATE_LIFE) > 0 then
call GroupAddUnit(udg_Knifestorm_GroupTemp, missile)
else
set b[id2] = true
endif
//set x = GetUnitX(udg_Collision_MissileSource[id2])
//set y = GetUnitY(udg_Collision_MissileSource[id2])
set x2 = GetUnitX(missile)
set y2 = GetUnitY(missile)
set dx = x2 - udg_Collision_OriginX[id2]
set dy = y2 - udg_Collision_OriginY[id2]
set distance = SquareRoot(dx*dx + dy*dy)
if distance > udg_Collision_MaxDistance[id2] then
call PauseUnit(missile, false)
call UnitApplyTimedLife(missile, 'BTLF', 0.01)
else
set x = udg_Collision_OriginX[id2] + Cos(udg_Collision_Angle[id2]*bj_DEGTORAD) * udg_Collision_Distance[id2]
set y = udg_Collision_OriginY[id2] + Sin(udg_Collision_Angle[id2]*bj_DEGTORAD) * udg_Collision_Distance[id2]
call SetUnitPosition(missile, x, y)
call SetUnitFacing(missile, udg_Collision_Angle[id2] + 90)
set udg_Collision_Missile = missile
set udg_Collision_ScanTargetsEvent = 1.00
set udg_Collision_ScanTargetsEvent = 0.00
set udg_Collision_Missile = null
set udg_Collision_Angle[id2] = udg_Collision_Angle[id2] + 6
set udg_Collision_Distance[id2] = udg_Collision_Distance[id2] + udg_Collision_Speed[id2]
endif
endloop
loop //add the knives back into Knifestorm_GroupKnives
set missile = FirstOfGroup(udg_Knifestorm_GroupTemp)
set id2 = GetUnitUserData(missile)
exitwhen missile == null
call GroupRemoveUnit(udg_Knifestorm_GroupTemp, missile)
if b[id2] == true then
set b[id2] = false
set udg_Collision_UnitHit[id2] = null
else
call GroupAddUnit(udg_Knifestorm_GroupKnives, missile)
endif
endloop
endif
endfunction
//===========================================================================
function InitTrig_Knifestorm_Loop takes nothing returns nothing
set gg_trg_Knifestorm_Loop = CreateTrigger( )
call DisableTrigger( gg_trg_Knifestorm_Loop )
call TriggerRegisterTimerEvent( gg_trg_Knifestorm_Loop, 0.03125, true )
call TriggerAddAction( gg_trg_Knifestorm_Loop, function Trig_Knifestorm_Loop_Actions )
endfunction
//TESH.scrollpos=9
//TESH.alwaysfold=0
function Trig_Mocking_Laugh_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A01R' ) ) then
return false
endif
return true
endfunction
function Trig_Mocking_Laugh_Actions takes nothing returns nothing
local unit source = GetTriggerUnit()
local unit dummy = null
local unit u = null
local real x = GetUnitX(source)
local real y = GetUnitY(source)
local integer id = GetUnitUserData(source)
call SetUnitPathing(source, false)
set dummy = CreateUnit(GetOwningPlayer(source), 'e001', x, y, 270)
call UnitApplyTimedLife(dummy, 'BTLF', 2.00)
call UnitAddAbility(dummy, 'A01U')
call IssueTargetOrderById(dummy, 852069, source)
set dummy = null
set dummy = CreateUnit(GetOwningPlayer(source), 'e001', x, y, 270)
call UnitApplyTimedLife(dummy, 'BTLF', 2.00)
call UnitAddAbility(dummy, 'A01T')
call SetUnitAbilityLevel(dummy, 'A01T', udg_MasterOfIllusions[id] + 1)
call IssueTargetOrderById(dummy, 852274, source)
set dummy = null
call GroupEnumUnitsInRange(udg_TempGroup, x, y, 450, null)
loop
set u = FirstOfGroup(udg_TempGroup)
exitwhen u == null
call GroupRemoveUnit(udg_TempGroup, u)
if IsUnitEnemy(u, GetOwningPlayer(source)) and GetUnitState(u, UNIT_STATE_LIFE) > 0 and GetUnitAbilityLevel(u, 'Bvul') <= 0 and GetUnitAbilityLevel(u, 'Avul') <= 0 then
set dummy = CreateUnit(GetOwningPlayer(source), 'e001', x, y, 270)
call UnitApplyTimedLife(dummy, 'BTLF', 2.00)
call UnitAddAbility(dummy, 'A01V')
call IssueTargetOrderById(dummy, 852149, u)
set dummy = null
endif
endloop
call SetUnitPathing(source, true)
endfunction
//===========================================================================
function InitTrig_Mocking_Laugh takes nothing returns nothing
set gg_trg_Mocking_Laugh = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Mocking_Laugh, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Mocking_Laugh, Condition( function Trig_Mocking_Laugh_Conditions ) )
call TriggerAddAction( gg_trg_Mocking_Laugh, function Trig_Mocking_Laugh_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_Shadow_Servants_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A01W' ) ) then
return false
endif
return true
endfunction
function Trig_Shadow_Servants_Actions takes nothing returns nothing
local unit source = GetTriggerUnit()
local unit dummy = null
local unit u = null
local real x = GetUnitX(source)
local real y = GetUnitY(source)
local integer i = 0
local integer id = GetUnitUserData(source)
local integer SpellLvl = GetUnitAbilityLevel(source, 'A01W')
set udg_IllusionCollision[id] = true
loop
exitwhen i >= SpellLvl
set i = i + 1
set dummy = CreateUnit(GetOwningPlayer(source), 'e001', x, y, 270)
call UnitApplyTimedLife(dummy, 'BTLF', 2.00)
call UnitAddAbility(dummy, 'A01T')
call SetUnitAbilityLevel(dummy, 'A01T', udg_MasterOfIllusions[id] + 1)
call IssueTargetOrderById(dummy, 852274, source)
set dummy = null
endloop
set udg_IllusionCollision[id] = false
endfunction
//===========================================================================
function InitTrig_Shadow_Servants takes nothing returns nothing
set gg_trg_Shadow_Servants = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Shadow_Servants, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Shadow_Servants, Condition( function Trig_Shadow_Servants_Conditions ) )
call TriggerAddAction( gg_trg_Shadow_Servants, function Trig_Shadow_Servants_Actions )
endfunction
//TESH.scrollpos=12
//TESH.alwaysfold=0
function Trig_Shuriken_Flurry_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A01X' ) ) then
return false
endif
return true
endfunction
function Trig_Shuriken_Flurry_Actions takes nothing returns nothing
local unit source = GetTriggerUnit()
local unit missile = null
local real x = GetUnitX(source)
local real y = GetUnitY(source)
local real x2 = GetLocationX(GetSpellTargetLoc())
local real y2 = GetLocationY(GetSpellTargetLoc())
local real angle = 0.00
local real distance = 0.00
local real scale = .5
local integer i = 0
local integer iEnd = 0
local integer id2 = GetUnitUserData(source) //to remain consistent with my other triggers, id2 with be the custom value of the missile.
if GetUnitAbilityLevel(source, 'A01X') == 1 then
set iEnd = 4
elseif GetUnitAbilityLevel(source, 'A01X') == 2 then
set iEnd = 7
elseif GetUnitAbilityLevel(source, 'A01X') == 3 then
set iEnd = 11
endif
loop
exitwhen i >= iEnd
set i = i + 1
set angle = Atan2(y2-y,x2-x) + GetRandomReal(-20,20)*bj_DEGTORAD
set missile = CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE), 'e001', x, y, angle)
call SetUnitFlyHeight(missile, GetRandomReal(60,100), 0)
call SetUnitScale(missile, scale, scale, scale)
call UnitAddAbility(missile, 'A01Y')
call PauseUnit(missile, true)
set id2 = GetUnitUserData(missile)
set udg_Collision_MissileSource[id2] = source
set udg_Collision_Radius[id2] = 50
set udg_Collision_Angle[id2] = angle
set udg_Collision_Speed[id2] = GetRandomReal(20,25)
set udg_Collision_Distance[id2] = udg_Collision_Speed[id2]
set udg_Collision_Damage[id2] = 30
set udg_Collision_MaxDistance[id2] = GetRandomReal(690,750)
set udg_Collision_TargetFilter[id2] = 1
set udg_Collision_EndOnHit[id2] = true
set udg_Collision_OriginX[id2] = x
set udg_Collision_OriginY[id2] = y
call GroupAddUnit(udg_ShurikenFlurry_Group, missile)
if not IsTriggerEnabled(gg_trg_Shuriken_Flurry_Loop) then
call EnableTrigger(gg_trg_Shuriken_Flurry_Loop)
endif
set missile = null
endloop
endfunction
//===========================================================================
function InitTrig_Shuriken_Flurry takes nothing returns nothing
set gg_trg_Shuriken_Flurry = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Shuriken_Flurry, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Shuriken_Flurry, Condition( function Trig_Shuriken_Flurry_Conditions ) )
call TriggerAddAction( gg_trg_Shuriken_Flurry, function Trig_Shuriken_Flurry_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_Shuriken_Flurry_Loop_Actions takes nothing returns nothing
local unit missile = null
local real x = 0.00
local real y = 0.00
local real x2 = 0.00
local real y2 = 0.00
local real dx = 0.00
local real dy = 0.00
local real distance = 0.00
local integer id2 = 0
local boolean array b
if FirstOfGroup(udg_ShurikenFlurry_Group) == null then
call DisableTrigger(GetTriggeringTrigger())
endif
loop
set missile = FirstOfGroup(udg_ShurikenFlurry_Group)
set id2 = GetUnitUserData(missile)
exitwhen missile == null
call GroupRemoveUnit(udg_ShurikenFlurry_Group, missile)
if GetUnitState(missile, UNIT_STATE_LIFE) > 0 then
call GroupAddUnit(udg_ShurikenFlurry_GroupTemp, missile)
else
set b[id2] = true
endif
set x2 = GetUnitX(missile)
set y2 = GetUnitY(missile)
set dx = x2 - udg_Collision_OriginX[id2]
set dy = y2 - udg_Collision_OriginY[id2]
set distance = SquareRoot(dx*dx + dy*dy)
if distance > udg_Collision_MaxDistance[id2] then
call PauseUnit(missile, false)
call UnitApplyTimedLife(missile, 'BTLF', 0.01)
else
set x = udg_Collision_OriginX[id2] + Cos(udg_Collision_Angle[id2]) * udg_Collision_Distance[id2]
set y = udg_Collision_OriginY[id2] + Sin(udg_Collision_Angle[id2]) * udg_Collision_Distance[id2]
call SetUnitPosition(missile, x, y)
call SetUnitFacing(missile, udg_Collision_Angle[id2])
set udg_Collision_Missile = missile
set udg_Collision_ScanTargetsEvent = 1.00
set udg_Collision_ScanTargetsEvent = 0.00
set udg_Collision_Missile = null
set udg_Collision_Distance[id2] = udg_Collision_Distance[id2] + udg_Collision_Speed[id2]
endif
endloop
loop //add the knives back into Knifestorm_GroupKnives
set missile = FirstOfGroup(udg_ShurikenFlurry_GroupTemp)
set id2 = GetUnitUserData(missile)
exitwhen missile == null
call GroupRemoveUnit(udg_ShurikenFlurry_GroupTemp, missile)
if b[id2] == true then
set b[id2] = false
set udg_Collision_UnitHit[id2] = null
else
call GroupAddUnit(udg_ShurikenFlurry_Group, missile)
endif
endloop
endfunction
//===========================================================================
function InitTrig_Shuriken_Flurry_Loop takes nothing returns nothing
set gg_trg_Shuriken_Flurry_Loop = CreateTrigger( )
call DisableTrigger( gg_trg_Shuriken_Flurry_Loop )
call TriggerRegisterTimerEvent( gg_trg_Shuriken_Flurry_Loop, 0.03125, true )
call TriggerAddAction( gg_trg_Shuriken_Flurry_Loop, function Trig_Shuriken_Flurry_Loop_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_Godsever_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A01Z' ) ) then
return false
endif
return true
endfunction
function Trig_Godsever_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local integer id = GetUnitUserData(u)
set udg_Godsever_Bonus[id] = 400.00
set udg_Godsever_IsActive[id] = true
call UnitAddAbility( u, 'A020' )
call PolledWait( 30.00 )
set udg_Godsever_IsActive[id] = false
call UnitRemoveAbility( u, 'A020' )
endfunction
//===========================================================================
function InitTrig_Godsever takes nothing returns nothing
set gg_trg_Godsever = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Godsever, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Godsever, Condition( function Trig_Godsever_Conditions ) )
call TriggerAddAction( gg_trg_Godsever, function Trig_Godsever_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_Pain_to_Power_Actions takes nothing returns nothing
local effect fx = null
local real x = GetUnitX(udg_DamageEventTarget)
local real y = GetUnitY(udg_DamageEventTarget)
local unit target = null
local real damage = (50.00 + (50.00 * I2R(GetUnitAbilityLevel(udg_DamageEventTarget, 'A02K'))))
if GetUnitAbilityLevel(udg_DamageEventTarget, 'A02K') > 0 then
set udg_ID = GetUnitUserData(udg_DamageEventTarget)
set udg_PainToPower_Threshold[udg_ID] = (150.00 + (50.00 * I2R(GetUnitAbilityLevel(udg_DamageEventTarget, 'A02K'))))
set udg_PainToPower_DmgCounter[udg_ID] = ( udg_PainToPower_DmgCounter[udg_ID] + udg_DamageEventAmount )
if udg_PainToPower_DmgCounter[udg_ID] >= udg_PainToPower_Threshold[udg_ID] then
if udg_PainToPower_DmgCounter[udg_ID] > udg_PainToPower_Threshold[udg_ID] then
set udg_PainToPower_DmgCounter[udg_ID] = ( udg_PainToPower_DmgCounter[udg_ID] - udg_PainToPower_Threshold[udg_ID] )
else
set udg_PainToPower_DmgCounter[udg_ID] = 0.00
endif
set fx = AddSpecialEffect("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl",x,y)
call DestroyEffect(fx)
call GroupEnumUnitsInRange(udg_PainToPower_Group, x, y, 220, null)
loop
set target = FirstOfGroup(udg_PainToPower_Group)
exitwhen target == null
call GroupRemoveUnit(udg_PainToPower_Group, target)
if GetUnitState(target, UNIT_STATE_LIFE) > 0 and IsUnitEnemy(target, GetOwningPlayer(udg_DamageEventTarget)) and GetUnitAbilityLevel(target, 'Bvul') <= 0 and GetUnitAbilityLevel(target, 'Avul') <= 0 then
set udg_NextDamageType = udg_DamageTypeCode
call UnitDamageTarget(udg_DamageEventTarget, target, damage, true, true, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNIVERSAL, WEAPON_TYPE_WHOKNOWS)
call TriggerEvaluate( udg_ClearDamageEvent )
endif
endloop
endif
endif
endfunction
//===========================================================================
function InitTrig_Pain_to_Power takes nothing returns nothing
set gg_trg_Pain_to_Power = CreateTrigger( )
call TriggerRegisterVariableEvent( gg_trg_Pain_to_Power, "udg_DamageEvent", EQUAL, 1.00 )
call TriggerAddAction( gg_trg_Pain_to_Power, function Trig_Pain_to_Power_Actions )
endfunction
//TESH.scrollpos=87
//TESH.alwaysfold=0
function Trig_Raven_Wander_Actions takes nothing returns nothing
local real x = 0.00
local real y = 0.00
local real xR = 0.00
local real yR = 0.00
local real dx = 0.00
local real dy = 0.00
local real dist = 0.00
local real angle = 0.00
local real movedist = 0.00
local real movespeed = 0.00
local real dmgAvg = 0.00
local real hitspersec = 0
local integer id = 0 //index of the raven
local integer id2 = 0 //index of the caster
local unit caster = null
local unit raven = null
local effect fx = null
loop
set raven = FirstOfGroup(udg_Raven_Group)
exitwhen raven == null
call GroupAddUnit(udg_Raven_GroupTemp, raven)
call GroupRemoveUnit(udg_Raven_Group, raven)
set id = GetUnitUserData(raven)
set caster = udg_Raven_Source[id]
set id2 = GetUnitUserData(caster)
//DPS Averaging
set udg_RavenDamage_IntervalDPS[id2] = udg_RavenDamage_IntervalDPS[id2] + 1
if udg_RavenDamage_IntervalDPS[id2] >= 66 then
if udg_RavenDamage_Stack[id2] > 0.00 then
set dmgAvg = udg_RavenDamage_Stack[id2] / udg_RavenDamage_Hits[id2]
set hitspersec = 2.00 / I2R(udg_RavenDamage_Hits[id2])
set udg_RavenDamage_Damage[id] = dmgAvg / hitspersec
// set udg_RavenDamage_LastDamage[id2] = udg_RavenDamage_Damage[id]
//else
// set udg_RavenDamage_Damage[id] = udg_RavenDamage_LastDamage[id2]
endif
set udg_RavenDamage_IntervalDPS[id2] = 0
set udg_RavenDamage_Stack[id2] = 0.00
set udg_RavenDamage_Hits[id2] = 0
endif
set x = GetUnitX(caster)
set y = GetUnitY(caster)
set xR = GetUnitX(raven)
set yR = GetUnitY(raven)
set dx = xR - x
set dy = yR - y
set dist = SquareRoot(dx*dx+dy*dy)
set dx = udg_Raven_X[id] - xR
set dy = udg_Raven_Y[id] - yR
set movedist = SquareRoot(dx*dx+dy*dy)
if GetUnitTypeId(raven) == 'e006' then
set movespeed = 8.00
elseif GetUnitTypeId(raven) == 'e007' then
set movespeed = 11.00
endif
if udg_Raven_IsMoving[id] then
if movedist > movespeed then
set angle = Atan2(udg_Raven_Y[id] - yR, udg_Raven_X[id] - xR)
call SetUnitFacing(raven, angle * bj_RADTODEG)
set xR = xR + Cos(angle) * movespeed
set yR = yR + Sin(angle) * movespeed
call SetUnitX(raven, xR)
call SetUnitY(raven, yR)
set udg_Raven_Angle[id] = angle
else
call SetUnitX(raven, udg_Raven_X[id])
call SetUnitY(raven, udg_Raven_Y[id])
call SetUnitAnimation(raven,"stand")
set udg_Raven_IsMoving[id] = false
endif
endif
// if the distance b/w Hero and Raven is greater than 150, make Raven move closer. If greater than 600, teleprot Raven to Hero's vicinity.
if dist > 150 then
call IssueImmediateOrderById(raven, 851972)
if udg_RavenDamage_IsAttacking[id2] == true then
set udg_RavenDamage_IsAttacking[id2] = false
endif
if dist > 600 then
call SetUnitPosition(raven, x - GetRandomReal(20,60), y + GetRandomReal(20,60))
set fx = AddSpecialEffectTarget("Abilities\\Spells\\Undead\\OrbOfDeath\\AnnihilationMissile.mdl", raven, "origin")
call DestroyEffect(fx)
else
set udg_Raven_Interval[id] = 0
//set angle = GetRandomReal(0, 360) * bj_DEGTORAD
set udg_Raven_X[id] = x + Cos(udg_Raven_Angle[id]) * GetRandomReal(-50, 50)
set udg_Raven_Y[id] = y + Sin(udg_Raven_Angle[id]) * GetRandomReal(-50, 50)
//set udg_Raven_Angle[id] = Atan2(udg_Raven_Y[id] - yR, udg_Raven_X[id] - xR)//angle * bj_RADTODEG
//call IssuePointOrderById(raven, 851986, x, y)
set udg_Raven_IsMoving[id] = true
if not udg_Raven_IsMoving[id] then
call SetUnitAnimation(raven, "move")
endif
endif
// if the distance b/w Hero and Raven is less than or equal to 150, time for 5 seconds, after which the Raven moves to a different point within a 130 distance.
// if the Raven is attacking, disregard wandering.
else
set udg_Raven_Interval[id] = udg_Raven_Interval[id] + 1
if udg_Raven_Interval[id] >= udg_Raven_IntervalLimit[id] and not udg_RavenDamage_IsAttacking[id2] then
set udg_Raven_Interval[id] = 0
set dist = GetRandomReal(0, 130)
set angle = GetRandomReal(0, 360)
set udg_Raven_X[id] = x + Cos(angle * bj_DEGTORAD) * dist
set udg_Raven_Y[id] = y + Sin(angle * bj_DEGTORAD) * dist
//set udg_Raven_Angle[id] = angle
//call IssuePointOrderById(raven, 851986, x, y)
set udg_Raven_IsMoving[id] = true
call SetUnitAnimation(raven, "move")
endif
endif
endloop
loop
set raven = FirstOfGroup(udg_Raven_GroupTemp)
exitwhen raven == null
call GroupAddUnit(udg_Raven_Group, raven)
call GroupRemoveUnit(udg_Raven_GroupTemp, raven)
endloop
endfunction
//===========================================================================
function InitTrig_Raven_Wander takes nothing returns nothing
set gg_trg_Raven_Wander = CreateTrigger( )
call DisableTrigger( gg_trg_Raven_Wander )
call TriggerRegisterTimerEvent( gg_trg_Raven_Wander, 0.03, true )
call TriggerAddAction( gg_trg_Raven_Wander, function Trig_Raven_Wander_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_Raven_Index_Conditions takes nothing returns boolean
if ( not ( GetUnitTypeId(udg_UDexUnits[udg_UDex]) == 'H00G' ) ) then
return false
endif
return true
endfunction
function Trig_Raven_Index_Actions takes nothing returns nothing
local unit caster = udg_UDexUnits[udg_UDex]
local integer id = GetUnitUserData(caster)
local integer id2 = 0
local real x = GetUnitX(caster) - 50
local real y = GetUnitY(caster) + 50
if udg_UnitIndexEvent == 1.00 then
set udg_Raven_Raven[id] = CreateUnit(GetOwningPlayer(caster), 'e006', x, y, GetUnitFacing(caster))
set id2 = GetUnitUserData(udg_Raven_Raven[id])
set udg_Raven_Source[id2] = caster
set udg_Raven_IntervalLimit[id2] = 165
call GroupAddUnit(udg_Raven_Group, udg_Raven_Raven[id])
if IsTriggerEnabled(gg_trg_Raven_Wander) == false then
call EnableTrigger(gg_trg_Raven_Wander)
endif
elseif udg_UnitIndexEvent == 2.00 then
set id2 = GetUnitUserData(udg_Raven_Raven[id])
set udg_Raven_Raven[id] = null
set udg_Raven_Source[id2] = null
set udg_Raven_IntervalLimit[id2] = 0
call GroupRemoveUnit(udg_Raven_Group, udg_Raven_Raven[id])
if FirstOfGroup(udg_Raven_Group) == null then
if IsTriggerEnabled(gg_trg_Raven_Wander) == true then
call DisableTrigger(gg_trg_Raven_Wander)
endif
endif
endif
endfunction
//===========================================================================
function InitTrig_Raven_Index takes nothing returns nothing
set gg_trg_Raven_Index = CreateTrigger( )
call TriggerRegisterVariableEvent( gg_trg_Raven_Index, "udg_UnitIndexEvent", EQUAL, 1.00 )
call TriggerRegisterVariableEvent( gg_trg_Raven_Index, "udg_UnitIndexEvent", EQUAL, 2.00 )
call TriggerAddCondition( gg_trg_Raven_Index, Condition( function Trig_Raven_Index_Conditions ) )
call TriggerAddAction( gg_trg_Raven_Index, function Trig_Raven_Index_Actions )
endfunction
//TESH.scrollpos=28
//TESH.alwaysfold=0
function Trig_Death_Flock_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A02U' ) ) then
return false
endif
return true
endfunction
function Trig_Death_Flock_Actions takes nothing returns nothing
local unit caster = GetTriggerUnit()
//C is for Caster
local real xC = GetUnitX(caster)
local real yC = GetUnitY(caster)
//T is for Target (location)
local real xT = GetLocationX(GetSpellTargetLoc())
local real yT = GetLocationY(GetSpellTargetLoc())
local real angle = Atan2(yT - yC, xT -xC)
//D is for Dummy
local real xD = xC + Cos(angle) * -200
local real yD = yC + Sin(angle) * -200
local unit dummy = CreateUnit(GetOwningPlayer(caster), 'e001', xD, yD, angle * bj_RADTODEG)
local integer id = GetUnitUserData(dummy)
//set udg_DeathFlock_X[id] = xC + Cos(angle) * 700
//set udg_DeathFlock_Y[id] = yC + Sin(angle) * 700
call UnitApplyTimedLife(dummy, 'BTLF', 5.00)
set udg_DeathFlock_Source[id] = caster
set udg_DeathFlock_SpellLevel[id] = 2 + GetUnitAbilityLevel(caster, GetSpellAbilityId()) * 2
call GroupAddUnit(udg_DeathFlock_Group, dummy)
if not IsTriggerEnabled(gg_trg_Death_Flock_Loop) then
call EnableTrigger(gg_trg_Death_Flock_Loop)
endif
endfunction
//===========================================================================
function InitTrig_Death_Flock takes nothing returns nothing
set gg_trg_Death_Flock = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Death_Flock, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Death_Flock, Condition( function Trig_Death_Flock_Conditions ) )
call TriggerAddAction( gg_trg_Death_Flock, function Trig_Death_Flock_Actions )
endfunction
//TESH.scrollpos=102
//TESH.alwaysfold=0
function Trig_Death_Flock_Loop_Actions takes nothing returns nothing
local real x = 0.00
local real y = 0.00
local real dx = 0.00
local real dy = 0.00
local real angle = 0.00
local real dist = 0.00
local real scale = 1.20
local unit dummy = null
local unit missile = null
local integer spelllevel = 0
local integer id = 0
local integer id2 = 0
loop
set dummy = FirstOfGroup(udg_DeathFlock_Group)
exitwhen dummy == null
call GroupRemoveUnit(udg_DeathFlock_Group, dummy)
if GetUnitState(dummy, UNIT_STATE_LIFE) > 0 then
call GroupAddUnit(udg_DeathFlock_GroupTemp, dummy)
endif
set id = GetUnitUserData(dummy)
set angle = GetUnitFacing(dummy)
set spelllevel = 33 / udg_DeathFlock_SpellLevel[id]
set udg_DeathFlock_Interval[id] = udg_DeathFlock_Interval[id] + 1
if udg_DeathFlock_Interval[id] >= spelllevel then
set udg_DeathFlock_Interval[id] = 0
set x = GetUnitX(dummy) + GetRandomReal(-100,100)
set y = GetUnitY(dummy) + GetRandomReal(-100,100)
set missile = CreateUnit(GetOwningPlayer(udg_DeathFlock_Source[id]),'e001' , x, y, angle)
call SetUnitScale(missile, scale, scale, scale)
call SetUnitFlyHeight(missile, GetRandomReal(60,100), 0)
call UnitAddAbility(missile, 'A02V')
call PauseUnit(missile, true)
set id2 = GetUnitUserData(missile)
set udg_DeathFlock_Dummy[id2] = dummy
//set udg_DeathFlock_X[id2] = x + Cos(angle*bj_DEGTORAD) * 800
//set udg_DeathFlock_Y[id2] = y + Sin(angle*bj_DEGTORAD) * 800
set udg_Collision_MissileSource[id2] = udg_DeathFlock_Source[id]
set udg_Collision_Radius[id2] = 50
set udg_Collision_Angle[id2] = angle
set udg_Collision_Speed[id2] = GetRandomReal(20,25)
set udg_Collision_Distance[id2] = 0
set udg_Collision_Damage[id2] = 20.00
set udg_Collision_MaxDistance[id2] = GetRandomReal(800,840)
set udg_Collision_TargetFilter[id2] = 1
set udg_Collision_EndOnHit[id2] = false
set udg_Collision_OriginX[id2] = x
set udg_Collision_OriginY[id2] = y
call GroupAddUnit(udg_DeathFlock_MissileGroup, missile)
endif
endloop
loop
set dummy = FirstOfGroup(udg_DeathFlock_GroupTemp)
exitwhen dummy == null
call GroupRemoveUnit(udg_DeathFlock_GroupTemp, dummy)
call GroupAddUnit(udg_DeathFlock_Group, dummy)
endloop
loop
set missile = FirstOfGroup(udg_DeathFlock_MissileGroup)
exitwhen missile == null
call GroupRemoveUnit(udg_DeathFlock_MissileGroup, missile)
if GetUnitState(missile, UNIT_STATE_LIFE) > 0 then
call GroupAddUnit(udg_DeathFlock_MissileGroupTemp, missile)
endif
set id2 = GetUnitUserData(missile)
set x = GetUnitX(missile)
set y = GetUnitY(missile)
set dx = udg_Collision_OriginX[id2] - x
set dy = udg_Collision_OriginY[id2] - y
set dist = SquareRoot(dx * dx + dy * dy)
if dist >= udg_Collision_MaxDistance[id2] then
call PauseUnit(missile, false)
call UnitApplyTimedLife(missile, 'BTLF', 0.01)
else
set x = udg_Collision_OriginX[id2] + Cos(udg_Collision_Angle[id2] * bj_DEGTORAD) * udg_Collision_Distance[id2]
set y = udg_Collision_OriginY[id2] + Sin(udg_Collision_Angle[id2] * bj_DEGTORAD) * udg_Collision_Distance[id2]
call SetUnitPosition(missile, x, y)
set udg_Collision_Missile = missile
set udg_Collision_ScanTargetsEvent = 1.00
set udg_Collision_ScanTargetsEvent = 0.00
set udg_Collision_Missile = null
set udg_Collision_Distance[id2] = udg_Collision_Distance[id2] + udg_Collision_Speed[id2]
endif
endloop
loop
set missile = FirstOfGroup(udg_DeathFlock_MissileGroupTemp)
exitwhen missile == null
call GroupRemoveUnit(udg_DeathFlock_MissileGroupTemp, missile)
call GroupAddUnit(udg_DeathFlock_MissileGroup, missile)
endloop
if FirstOfGroup(udg_DeathFlock_Group) == null and FirstOfGroup(udg_DeathFlock_MissileGroup) == null then
call DisableTrigger(GetTriggeringTrigger())
endif
endfunction
//===========================================================================
function InitTrig_Death_Flock_Loop takes nothing returns nothing
set gg_trg_Death_Flock_Loop = CreateTrigger( )
call DisableTrigger( gg_trg_Death_Flock_Loop )
call TriggerRegisterTimerEvent( gg_trg_Death_Flock_Loop, 0.03, true )
call TriggerAddAction( gg_trg_Death_Flock_Loop, function Trig_Death_Flock_Loop_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function SB_Actions takes nothing returns nothing
local integer i = GetUnitAbilityLevel(udg_Jack, 'A021')
local integer HeroAgi = GetHeroAgi(udg_Jack, true)/10
if i == 1 then
call BJDebugMsg("Current |cff3399ffattack speed|r bonus is " + I2S(HeroAgi*10)+ " percent!")
elseif i == 2 then
call BJDebugMsg("Current |cff3399ffattack speed|r bonus is " + I2S(HeroAgi*15)+ " percent!")
else
call BJDebugMsg("Current |cff3399ffattack speed|r bonus is " + I2S(HeroAgi*20)+ " percent!")
endif
endfunction
//===========================================================================
function InitTrig_Swift_Bonus takes nothing returns nothing
set gg_trg_Swift_Bonus = CreateTrigger()
call TriggerRegisterPlayerChatEvent(gg_trg_Swift_Bonus, Player(0), "Swift Bonus", false)
call TriggerAddAction( gg_trg_Swift_Bonus, function SB_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function PB_Actions takes nothing returns nothing
local integer i = GetUnitAbilityLevel(udg_Jack, 'A02O')
local integer iBonus = GetHeroStr(udg_Jack, true)/10
if i == 1 then
call BJDebugMsg("Current |cffff0000max health|r bonus is " + I2S(iBonus*15)+ "!")
elseif i == 2 then
call BJDebugMsg("Current |cffff0000max health|r bonus is " + I2S(iBonus*30)+ "!")
else
call BJDebugMsg("Current |cffff0000max health|r bonus is " + I2S(iBonus*45)+ "!")
endif
endfunction
//===========================================================================
function InitTrig_Solid_Bonus takes nothing returns nothing
set gg_trg_Solid_Bonus = CreateTrigger()
call TriggerRegisterPlayerChatEvent(gg_trg_Solid_Bonus, Player(0), "Health Bonus", false)
call TriggerAddAction( gg_trg_Solid_Bonus, function PB_Actions )
endfunction
//TESH.scrollpos=27
//TESH.alwaysfold=0
function Trig_Collision_Engine_Actions takes nothing returns nothing
local unit missile = udg_Collision_Missile
local real x = GetUnitX(missile)
local real y = GetUnitY(missile)
local integer id = GetUnitUserData(missile)
local real r = udg_Collision_Radius[id]
local integer i = 0
//local integer id2 = 0
local unit target = null
local unit u = null
local unit array victims
call GroupEnumUnitsInRange(udg_Collision_GroupEnum, x, y, r, null)
if FirstOfGroup(udg_Collision_GroupEnum) != null then
loop
set target = FirstOfGroup(udg_Collision_GroupEnum)
exitwhen target == null
call GroupRemoveUnit(udg_Collision_GroupEnum, target)
if GetUnitState(target, UNIT_STATE_LIFE) > 0 and IsUnitEnemy(target, GetOwningPlayer(udg_Collision_MissileSource[id])) and GetUnitAbilityLevel(target, 'Bvul') <= 0 and GetUnitAbilityLevel(target, 'Avul') <= 0 and target != udg_Collision_UnitHit[id] then
if udg_Collision_TargetFilter[id] == 1 then
if IsUnitType(target, UNIT_TYPE_GROUND) then
set victims[i] = target
set i = 1 + 1
endif
elseif udg_Collision_TargetFilter[id] == 2 then
if IsUnitType(target, UNIT_TYPE_FLYING) then
set victims[i] = target
set i = 1 + 1
endif
elseif udg_Collision_TargetFilter[id] == 3 then
if IsUnitType(target, UNIT_TYPE_GROUND) or IsUnitType(target, UNIT_TYPE_FLYING) then
set victims[i] = target
set i = 1 + 1
endif
endif
endif
if i > 0 then
set u = victims[GetRandomInt(0, i - 1)]
set udg_NextDamageType = udg_DamageTypeCode
call UnitDamageTarget(udg_Collision_MissileSource[id], u, udg_Collision_Damage[id], true, true, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNIVERSAL, null)
call TriggerEvaluate(udg_ClearDamageEvent)
set udg_Collision_UnitHit[id] = u
set u = null
if udg_Collision_EndOnHit[id] == true then
call UnitApplyTimedLife(missile, 'BTLF', 0.01)
call PauseUnit(missile, false)
endif
endif
endloop
endif
endfunction
//===========================================================================
function InitTrig_Collision_Engine takes nothing returns nothing
set gg_trg_Collision_Engine = CreateTrigger( )
call TriggerRegisterVariableEvent( gg_trg_Collision_Engine, "udg_Collision_ScanTargetsEvent", EQUAL, 1.00 )
call TriggerAddAction( gg_trg_Collision_Engine, function Trig_Collision_Engine_Actions )
endfunction