include "TriggerLibs/NativeLib"
include "TriggerLibs/HeroesLib"
include "TriggerLibs/GameLib"
include "TriggerLibs/UILib"
include "LibHGUL_h"
//--------------------------------------------------------------------------------------------------
// Library: Gul'dan
//--------------------------------------------------------------------------------------------------
// External Library Initialization
void libHGUL_InitLibraries () {
libNtve_InitVariables();
libCore_InitVariables();
libGame_InitVariables();
libUIUI_InitVariables();
}
// Variable Initialization
bool libHGUL_InitVariables_completed = false;
void libHGUL_InitVariables () {
if (libHGUL_InitVariables_completed) {
return;
}
libHGUL_InitVariables_completed = true;
libHGUL_gv_heroGuldanDarknessWithinDamageTrackerScoreforTooltip = "GenericHeroRealScoreValue1";
}
// Functions
void libHGUL_gf_HeroGuldanIncrementHeroCountFunction () {
// Automatic Variable Declarations
// Implementation
libHGUL_gv_heroGuldanTriggerRegistrationCount += 1;
if ((libHGUL_gv_heroGuldanTriggerRegistrationCount == 1)) {
TriggerEnable(libHGUL_gt_HeroGuldanDarkBargainDeathRegister, true);
TriggerEnable(libHGUL_gt_HeroGuldanDarkBargainStartRespawnTimer, true);
TriggerEnable(libHGUL_gt_HeroGuldanDrainLifeTurningControl, true);
TriggerEnable(libHGUL_gt_HeroGuldanFearCameraLock, true);
TriggerEnable(libHGUL_gt_HeroGuldanDemonicCircleRemovePreviousPortal, true);
TriggerEnable(libHGUL_gt_HeroGuldanDemonicCircleTalentReset, true);
TriggerEnable(libHGUL_gt_HeroGuldanRegisterDeathRecapSpecialDamageEffect, true);
TriggerEnable(libHGUL_gt_HeroGuldanDarknessWithinDamageTracking, true);
TriggerEnable(libHGUL_gt_HeroGuldanDarknessWithinTrackerReset, true);
TriggerExecute(libHGUL_gt_HeroGuldanRegisterDeathRecapSpecialDamageEffect, false, false);
}
}
void libHGUL_gf_HeroGuldanDecrementHeroCountFunction () {
// Automatic Variable Declarations
// Implementation
libHGUL_gv_heroGuldanTriggerRegistrationCount -= 1;
if ((libHGUL_gv_heroGuldanTriggerRegistrationCount < 0)) {
libHGUL_gv_heroGuldanTriggerRegistrationCount = 0;
}
if ((libHGUL_gv_heroGuldanTriggerRegistrationCount == 0)) {
TriggerEnable(libHGUL_gt_HeroGuldanDarkBargainDeathRegister, false);
TriggerEnable(libHGUL_gt_HeroGuldanDarkBargainStartRespawnTimer, false);
TriggerEnable(libHGUL_gt_HeroGuldanDrainLifeTurningControl, false);
TriggerEnable(libHGUL_gt_HeroGuldanFearCameraLock, false);
TriggerEnable(libHGUL_gt_HeroGuldanDemonicCircleRemovePreviousPortal, false);
TriggerEnable(libHGUL_gt_HeroGuldanDemonicCircleTalentReset, false);
TriggerEnable(libHGUL_gt_HeroGuldanRegisterDeathRecapSpecialDamageEffect, false);
TriggerEnable(libHGUL_gt_HeroGuldanDarknessWithinDamageTracking, false);
TriggerEnable(libHGUL_gt_HeroGuldanDarknessWithinTrackerReset, false);
}
}
// Triggers
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Gul'dan - Register Death Recap Special Damage Effect
//--------------------------------------------------------------------------------------------------
bool libHGUL_gt_HeroGuldanRegisterDeathRecapSpecialDamageEffect_Func (bool testConds, bool runActions) {
// Automatic Variable Declarations
// Actions
if (!runActions) {
return true;
}
libGame_gf_DeathRecapAddSpecialDamageEffect("GuldanLifeTapManaRestoreModifyUnit");
return true;
}
//--------------------------------------------------------------------------------------------------
void libHGUL_gt_HeroGuldanRegisterDeathRecapSpecialDamageEffect_Init () {
libHGUL_gt_HeroGuldanRegisterDeathRecapSpecialDamageEffect = TriggerCreate("libHGUL_gt_HeroGuldanRegisterDeathRecapSpecialDamageEffect_Func");
TriggerEnable(libHGUL_gt_HeroGuldanRegisterDeathRecapSpecialDamageEffect, false);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Gul'dan - Fear - Camera Lock
//--------------------------------------------------------------------------------------------------
bool libHGUL_gt_HeroGuldanFearCameraLock_Func (bool testConds, bool runActions) {
// Variable Declarations
int lv_targetPlayer;
int lv_itPlayer;
fixed lv_vertOffset;
fixed lv_horizOffset;
// Automatic Variable Declarations
const int auto17613DD0_ae = libCore_gv_bALMaxPlayers;
const int auto17613DD0_ai = 1;
// Variable Initialization
lv_targetPlayer = UnitGetOwner(EventUnit());
// Conditions
if (testConds) {
if (!(((UnitGetOwner(EventUnit()) >= 1) && (UnitGetOwner(EventUnit()) <= 10) && (EventUnit() == libGame_gv_players[lv_targetPlayer].lv_heroUnit) && (UnitIsAlive(EventUnit()) == true)))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
libGame_gf_PlayerHeroDisplacementCameraLock(EventUnit(), EventUnitBehavior());
lv_itPlayer = 1;
for ( ; ( (auto17613DD0_ai >= 0 && lv_itPlayer <= auto17613DD0_ae) || (auto17613DD0_ai < 0 && lv_itPlayer >= auto17613DD0_ae) ) ; lv_itPlayer += auto17613DD0_ai ) {
lv_vertOffset = 1.5;
lv_horizOffset = RandomFixed(-0.4, -0.6);
libUIUI_gf_UIFloatingCombatTextCreateTextTag(lv_itPlayer, 2.0, StringExternal("Param/Value/lib_HGUL_38B8C9B2"), EventUnit(), 0.0, 0.0, libCore_ge_FloatingTextType_InsaneDamage, true);
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHGUL_gt_HeroGuldanFearCameraLock_Init () {
libHGUL_gt_HeroGuldanFearCameraLock = TriggerCreate("libHGUL_gt_HeroGuldanFearCameraLock_Func");
TriggerEnable(libHGUL_gt_HeroGuldanFearCameraLock, false);
TriggerAddEventUnitBehaviorChange(libHGUL_gt_HeroGuldanFearCameraLock, null, "GuldanHorrifyFearDuration", c_unitBehaviorChangeActivate);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Gul'dan - Drain Life - Turning Control
//--------------------------------------------------------------------------------------------------
bool libHGUL_gt_HeroGuldanDrainLifeTurningControl_Func (bool testConds, bool runActions) {
// Variable Declarations
fixed lv_facingAngle;
fixed lv_nextFacingAngle;
unit lv_localTriggeringUnit;
// Automatic Variable Declarations
// Variable Initialization
lv_localTriggeringUnit = EventUnit();
// Actions
if (!runActions) {
return true;
}
while ((UnitHasBehavior2(lv_localTriggeringUnit, "GuldanDrainLifeChannel") == true)) {
lv_facingAngle = UnitGetFacing(lv_localTriggeringUnit);
Wait(0.0625, c_timeGame);
lv_nextFacingAngle = UnitGetFacing(lv_localTriggeringUnit);
if ((lv_facingAngle > lv_nextFacingAngle)) {
libNtve_gf_SendActorMessageToUnit(lv_localTriggeringUnit, "Signal ShuffleRight");
}
else {
if ((lv_facingAngle < lv_nextFacingAngle)) {
libNtve_gf_SendActorMessageToUnit(lv_localTriggeringUnit, "Signal ShuffleLeft");
}
else {
libNtve_gf_SendActorMessageToUnit(EventUnit(), "AnimClear Walk 0.000000");
}
}
}
libNtve_gf_SendActorMessageToUnit(EventUnit(), "AnimClear Walk");
return true;
}
//--------------------------------------------------------------------------------------------------
void libHGUL_gt_HeroGuldanDrainLifeTurningControl_Init () {
libHGUL_gt_HeroGuldanDrainLifeTurningControl = TriggerCreate("libHGUL_gt_HeroGuldanDrainLifeTurningControl_Func");
TriggerEnable(libHGUL_gt_HeroGuldanDrainLifeTurningControl, false);
TriggerAddEventUnitBehaviorChange(libHGUL_gt_HeroGuldanDrainLifeTurningControl, null, "GuldanDrainLifeChannel", c_unitBehaviorChangeActivate);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Gul'dan - Darkness Within - Damage Tracking
//--------------------------------------------------------------------------------------------------
bool libHGUL_gt_HeroGuldanDarknessWithinDamageTracking_Func (bool testConds, bool runActions) {
// Variable Declarations
fixed lv_damageDealt;
// Automatic Variable Declarations
// Variable Initialization
lv_damageDealt = (EventUnitDamageAmount() + EventUnitDamageBehaviorShield());
// Conditions
if (testConds) {
if (!((UnitTypeTestAttribute(UnitGetType(EventUnit()), c_unitAttributeHeroic) == true))) {
return false;
}
if (!((UnitGetType(EventUnitDamageSourceUnit()) == "HeroGuldan"))) {
return false;
}
if (!((PlayerHasTalent(EventUnitDamageSourcePlayer(), "GuldanLifeTapDarknessWithin") == true))) {
return false;
}
if (!((UnitHasBehavior2(EventUnitDamageSourceUnit(), "GuldanLifeTapDarknessWithinReady") != true))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
libHGUL_gv_heroGuldanDarknessWithinDamageTracker[EventUnitDamageSourcePlayer()] = (libHGUL_gv_heroGuldanDarknessWithinDamageTracker[EventUnitDamageSourcePlayer()] + lv_damageDealt);
PlayerScoreValueSetFromFixed(EventUnitDamageSourcePlayer(), "GenericHeroRealScoreValue1", MinF(libHGUL_gv_heroGuldanDarknessWithinDamageTracker[EventUnitDamageSourcePlayer()], CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "GuldanLifeTapDarknessWithinDamageThreshold", "Amount", EventUnitDamageSourcePlayer())));
if ((libHGUL_gv_heroGuldanDarknessWithinDamageTracker[EventUnitDamageSourcePlayer()] >= CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "GuldanLifeTapDarknessWithinDamageThreshold", "Amount", EventUnitDamageSourcePlayer()))) {
UnitBehaviorAdd(EventUnitDamageSourceUnit(), "GuldanLifeTapDarknessWithinReady", EventUnitDamageSourceUnit(), 1);
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHGUL_gt_HeroGuldanDarknessWithinDamageTracking_Init () {
libHGUL_gt_HeroGuldanDarknessWithinDamageTracking = TriggerCreate("libHGUL_gt_HeroGuldanDarknessWithinDamageTracking_Func");
TriggerEnable(libHGUL_gt_HeroGuldanDarknessWithinDamageTracking, false);
TriggerAddEventUnitDealsDamage(libHGUL_gt_HeroGuldanDarknessWithinDamageTracking, null, c_unitDamageTypeAny, c_unitDamageEither, null);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Gul'dan - Darkness Within - Tracker Reset
//--------------------------------------------------------------------------------------------------
bool libHGUL_gt_HeroGuldanDarknessWithinTrackerReset_Func (bool testConds, bool runActions) {
// Automatic Variable Declarations
// Actions
if (!runActions) {
return true;
}
libHGUL_gv_heroGuldanDarknessWithinDamageTracker[EventPlayer()] = 0.0;
PlayerScoreValueSetFromFixed(EventPlayer(), "GenericHeroRealScoreValue1", 0.0);
return true;
}
//--------------------------------------------------------------------------------------------------
void libHGUL_gt_HeroGuldanDarknessWithinTrackerReset_Init () {
libHGUL_gt_HeroGuldanDarknessWithinTrackerReset = TriggerCreate("libHGUL_gt_HeroGuldanDarknessWithinTrackerReset_Func");
TriggerEnable(libHGUL_gt_HeroGuldanDarknessWithinTrackerReset, false);
TriggerAddEventUnitBehaviorChange(libHGUL_gt_HeroGuldanDarknessWithinTrackerReset, null, "GuldanLifeTapDarknessWithinReady", c_unitBehaviorChangeDecrease);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Gul'dan - Demonic Circle - Remove Previous Portal
//--------------------------------------------------------------------------------------------------
bool libHGUL_gt_HeroGuldanDemonicCircleRemovePreviousPortal_Func (bool testConds, bool runActions) {
// Variable Declarations
int lv_itPlayer;
// Automatic Variable Declarations
// Variable Initialization
lv_itPlayer = UnitGetOwner(EventUnitCreatedUnit());
// Actions
if (!runActions) {
return true;
}
if ((libHGUL_gv_heroGuldanDemonicCircleUnit[lv_itPlayer] != null)) {
UnitBehaviorRemove(libHGUL_gv_heroGuldanDemonicCircleUnit[lv_itPlayer], "GuldanDemonicCircleActive", 1);
}
libHGUL_gv_heroGuldanDemonicCircleUnit[lv_itPlayer] = EventUnitCreatedUnit();
return true;
}
//--------------------------------------------------------------------------------------------------
void libHGUL_gt_HeroGuldanDemonicCircleRemovePreviousPortal_Init () {
libHGUL_gt_HeroGuldanDemonicCircleRemovePreviousPortal = TriggerCreate("libHGUL_gt_HeroGuldanDemonicCircleRemovePreviousPortal_Func");
TriggerEnable(libHGUL_gt_HeroGuldanDemonicCircleRemovePreviousPortal, false);
TriggerAddEventUnitCreated(libHGUL_gt_HeroGuldanDemonicCircleRemovePreviousPortal, null, "GuldanDemonicCircleSummon", null);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Gul'dan - Demonic Circle - Talent Reset
//--------------------------------------------------------------------------------------------------
bool libHGUL_gt_HeroGuldanDemonicCircleTalentReset_Func (bool testConds, bool runActions) {
// Variable Declarations
int lv_itPlayer;
// Automatic Variable Declarations
// Variable Initialization
lv_itPlayer = libGame_gf_HeroRespecsTalentsPlayer();
// Conditions
if (testConds) {
if (!((UnitGetType(libGame_gv_players[lv_itPlayer].lv_heroUnit) == "HeroGuldan"))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
libHGUL_gv_heroGuldanDemonicCircleUnit[lv_itPlayer] = null;
return true;
}
//--------------------------------------------------------------------------------------------------
void libHGUL_gt_HeroGuldanDemonicCircleTalentReset_Init () {
libHGUL_gt_HeroGuldanDemonicCircleTalentReset = TriggerCreate("libHGUL_gt_HeroGuldanDemonicCircleTalentReset_Func");
TriggerEnable(libHGUL_gt_HeroGuldanDemonicCircleTalentReset, false);
libGame_gf_HeroRespecsTalents(libHGUL_gt_HeroGuldanDemonicCircleTalentReset);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Gul'dan - Dark Bargain - Death Register
//--------------------------------------------------------------------------------------------------
bool libHGUL_gt_HeroGuldanDarkBargainDeathRegister_Func (bool testConds, bool runActions) {
// Variable Declarations
unit lv_deadUnit;
int lv_deadPlayer;
int lv_killingPlayer;
int lv_respawnDuration;
point lv_deadUnitsOriginalLocation;
fixed lv_respawnTime;
// Automatic Variable Declarations
// Variable Initialization
lv_deadUnitsOriginalLocation = UnitGetPosition(EventUnit());
// Conditions
if (testConds) {
if (!((libGame_gv_gameOver == false))) {
return false;
}
if (!((EventPlayer() >= 1))) {
return false;
}
if (!((EventPlayer() <= libCore_gv_bALMaxPlayers))) {
return false;
}
if (!((EventUnit() == libGame_gv_players[EventPlayer()].lv_heroUnit))) {
return false;
}
if (!((UnitTestState(EventUnit(), c_unitStateHallucination) == false))) {
return false;
}
if (!((UnitGetType(EventUnit()) == "HeroGuldan"))) {
return false;
}
if (!((UnitHasBehavior2(EventUnit(), "GuldanDarkBargainMaxHealthBehavior") == true))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
lv_deadUnit = EventUnit();
lv_deadPlayer = EventPlayer();
lv_killingPlayer = libNtve_gf_KillingPlayer();
libGame_gv_players[lv_deadPlayer].lv_isDead = true;
libNtve_gf_CreateUnitsWithDefaultFacing(1, "DeadUnitCameraTarget", 0, lv_deadPlayer, UnitGetPosition(lv_deadUnit), lv_deadUnit);
libGame_gv_players[lv_deadPlayer].lv_cameraDeadUnitCameraTarget = UnitLastCreated();
libGame_gv_players[lv_deadPlayer].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(libGame_gv_players[lv_deadPlayer].lv_cameraDeadUnitCameraTarget);
libGame_gf_CameraUpdateCameraForPlayer(lv_deadPlayer);
libGame_gf_SendEventHeroKilled(lv_killingPlayer, lv_deadUnit);
UnitBehaviorAdd(lv_deadUnit, "GuldanDarkBargainDuration", lv_deadUnit, 1);
UnitBehaviorSetDuration(lv_deadUnit, "GuldanDarkBargainDuration", 10.0);
lv_respawnTime = libCore_gf_HeroDeathTime(lv_deadPlayer, UnitLevel(libGame_gv_players[lv_deadPlayer].lv_heroUnit));
lv_respawnTime = (lv_respawnTime + 10.0);
libGame_gf_HeroDeathStartRespawnTimer(lv_deadPlayer, lv_respawnTime);
libGame_gf_HeroDeathUpdateUIElementsForDeath(true, true, true, lv_deadPlayer, lv_killingPlayer);
libGame_gf_HeroDeathEnableDisableDeadSoundStateForPlayer(true, lv_deadPlayer);
libGame_gf_HeroDeathPortHeroBackAndSetDeathState(lv_deadPlayer, libGame_gv_players[lv_deadPlayer].lv_spawnPoint);
return true;
}
//--------------------------------------------------------------------------------------------------
void libHGUL_gt_HeroGuldanDarkBargainDeathRegister_Init () {
libHGUL_gt_HeroGuldanDarkBargainDeathRegister = TriggerCreate("libHGUL_gt_HeroGuldanDarkBargainDeathRegister_Func");
TriggerEnable(libHGUL_gt_HeroGuldanDarkBargainDeathRegister, false);
TriggerAddEventUnitDied(libHGUL_gt_HeroGuldanDarkBargainDeathRegister, null);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Gul'dan - Dark Bargain - Start Respawn Timer
//--------------------------------------------------------------------------------------------------
bool libHGUL_gt_HeroGuldanDarkBargainStartRespawnTimer_Func (bool testConds, bool runActions) {
// Variable Declarations
unit lv_deadUnit;
int lv_deadPlayer;
// Automatic Variable Declarations
// Variable Initialization
// Conditions
if (testConds) {
if (!((libGame_gv_gameOver == false))) {
return false;
}
if (!((EventPlayer() >= 1))) {
return false;
}
if (!((EventPlayer() <= libCore_gv_bALMaxPlayers))) {
return false;
}
if (!((EventUnit() == libGame_gv_players[EventPlayer()].lv_heroUnit))) {
return false;
}
if (!((UnitTestState(EventUnit(), c_unitStateHallucination) == false))) {
return false;
}
if (!((UnitGetType(EventUnit()) == "HeroGuldan"))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
lv_deadUnit = EventUnit();
lv_deadPlayer = EventPlayer();
UnitBehaviorSetDuration(lv_deadUnit, "Dead", UnitBehaviorDuration(lv_deadUnit, "Dead"));
libUIUI_gf_HeroConsoleUnitStatusBarsUpdateStunDeathBar("Dead", lv_deadPlayer);
return true;
}
//--------------------------------------------------------------------------------------------------
void libHGUL_gt_HeroGuldanDarkBargainStartRespawnTimer_Init () {
libHGUL_gt_HeroGuldanDarkBargainStartRespawnTimer = TriggerCreate("libHGUL_gt_HeroGuldanDarkBargainStartRespawnTimer_Func");
TriggerEnable(libHGUL_gt_HeroGuldanDarkBargainStartRespawnTimer, false);
TriggerAddEventUnitBehaviorChange(libHGUL_gt_HeroGuldanDarkBargainStartRespawnTimer, null, "GuldanDarkBargainDuration", c_unitBehaviorChangeDestroy);
}
void libHGUL_InitTriggers () {
libHGUL_gt_HeroGuldanRegisterDeathRecapSpecialDamageEffect_Init();
libHGUL_gt_HeroGuldanFearCameraLock_Init();
libHGUL_gt_HeroGuldanDrainLifeTurningControl_Init();
libHGUL_gt_HeroGuldanDarknessWithinDamageTracking_Init();
libHGUL_gt_HeroGuldanDarknessWithinTrackerReset_Init();
libHGUL_gt_HeroGuldanDemonicCircleRemovePreviousPortal_Init();
libHGUL_gt_HeroGuldanDemonicCircleTalentReset_Init();
libHGUL_gt_HeroGuldanDarkBargainDeathRegister_Init();
libHGUL_gt_HeroGuldanDarkBargainStartRespawnTimer_Init();
}
//--------------------------------------------------------------------------------------------------
// Library Initialization
//--------------------------------------------------------------------------------------------------
bool libHGUL_InitLib_completed = false;
void libHGUL_InitLib () {
if (libHGUL_InitLib_completed) {
return;
}
libHGUL_InitLib_completed = true;
libHGUL_InitLibraries();
libHGUL_InitVariables();
libHGUL_InitTriggers();
}