include "TriggerLibs/NativeLib"
include "TriggerLibs/HeroesLib"
include "TriggerLibs/GameLib"
include "TriggerLibs/UILib"
include "LibHMEI_h"
//--------------------------------------------------------------------------------------------------
// Library: MeiOW
//--------------------------------------------------------------------------------------------------
// External Library Initialization
void libHMEI_InitLibraries () {
libNtve_InitVariables();
libCore_InitVariables();
libGame_InitVariables();
libUIUI_InitVariables();
}
// Variable Initialization
bool libHMEI_InitVariables_completed = false;
void libHMEI_InitVariables () {
if (libHMEI_InitVariables_completed) {
return;
}
libHMEI_InitVariables_completed = true;
}
// Functions
void libHMEI_gf_HeroMeiOWIncrementHeroCountFunction () {
// Automatic Variable Declarations
// Implementation
libHMEI_gv_heroMeiOWTriggerRegistrationVariable += 1;
if ((libHMEI_gv_heroMeiOWTriggerRegistrationVariable == 1)) {
TriggerEnable(libHMEI_gt_HeroMeiOWCryoFreezeOverlayOn, true);
TriggerEnable(libHMEI_gt_HeroMeiOWCryoFreezeOverlayOff, true);
TriggerEnable(libHMEI_gt_HeroMeiOWAvalanchePathingChecks, true);
TriggerEnable(libHMEI_gt_HeroMeiOWAvalancheCameraLock, true);
}
}
void libHMEI_gf_HeroMeiOWDecrementHeroCountFunction () {
// Automatic Variable Declarations
// Implementation
libHMEI_gv_heroMeiOWTriggerRegistrationVariable -= 1;
if ((libHMEI_gv_heroMeiOWTriggerRegistrationVariable < 0)) {
libHMEI_gv_heroMeiOWTriggerRegistrationVariable = 0;
}
if ((libHMEI_gv_heroMeiOWTriggerRegistrationVariable == 0)) {
TriggerEnable(libHMEI_gt_HeroMeiOWCryoFreezeOverlayOn, false);
TriggerEnable(libHMEI_gt_HeroMeiOWCryoFreezeOverlayOff, false);
TriggerEnable(libHMEI_gt_HeroMeiOWAvalanchePathingChecks, false);
TriggerEnable(libHMEI_gt_HeroMeiOWAvalancheCameraLock, false);
}
}
// Triggers
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - MeiOW - Cryo-Freeze - Overlay On
//--------------------------------------------------------------------------------------------------
bool libHMEI_gt_HeroMeiOWCryoFreezeOverlayOn_Func (bool testConds, bool runActions) {
// Variable Declarations
unit lv_meiOWUnit;
// Automatic Variable Declarations
// Variable Initialization
lv_meiOWUnit = EventUnit();
// Actions
if (!runActions) {
return true;
}
if ((UnitIsAlive(lv_meiOWUnit) == true) && (UnitTestState(lv_meiOWUnit, c_unitStateHallucination) == false) && (UnitHasBehavior2(lv_meiOWUnit, "HeroGenericIgnoreFullscreenOverlay") == false)) {
libUIUI_gf_FullscreenOverlayAddItemForPlayer(EventPlayer(), libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_StasisOverlay.StormCutscene", EventUnitBehavior());
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHMEI_gt_HeroMeiOWCryoFreezeOverlayOn_Init () {
libHMEI_gt_HeroMeiOWCryoFreezeOverlayOn = TriggerCreate("libHMEI_gt_HeroMeiOWCryoFreezeOverlayOn_Func");
TriggerEnable(libHMEI_gt_HeroMeiOWCryoFreezeOverlayOn, false);
TriggerAddEventUnitBehaviorChange(libHMEI_gt_HeroMeiOWCryoFreezeOverlayOn, null, "MeiOWCryoFreezeShieldBuff", c_unitBehaviorChangeActivate);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - MeiOW - Cryo-Freeze - Overlay Off
//--------------------------------------------------------------------------------------------------
bool libHMEI_gt_HeroMeiOWCryoFreezeOverlayOff_Func (bool testConds, bool runActions) {
// Automatic Variable Declarations
// Actions
if (!runActions) {
return true;
}
if ((UnitHasBehavior2(EventUnit(), "HeroGenericIgnoreFullscreenOverlay") == false)) {
libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(EventPlayer(), "Cutscenes\\GameUI_StasisOverlay.StormCutscene", EventUnitBehavior());
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHMEI_gt_HeroMeiOWCryoFreezeOverlayOff_Init () {
libHMEI_gt_HeroMeiOWCryoFreezeOverlayOff = TriggerCreate("libHMEI_gt_HeroMeiOWCryoFreezeOverlayOff_Func");
TriggerEnable(libHMEI_gt_HeroMeiOWCryoFreezeOverlayOff, false);
TriggerAddEventUnitBehaviorChange(libHMEI_gt_HeroMeiOWCryoFreezeOverlayOff, null, "MeiOWCryoFreezeShieldBuff", c_unitBehaviorChangeDestroy);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - MeiOW - Avalanche - Camera Lock
//--------------------------------------------------------------------------------------------------
bool libHMEI_gt_HeroMeiOWAvalancheCameraLock_Func (bool testConds, bool runActions) {
// Variable Declarations
unit lv_targetUnit;
int lv_targetPlayer;
unit lv_avalancheMissileUnit;
// Automatic Variable Declarations
// Variable Initialization
lv_targetUnit = EventUnit();
lv_targetPlayer = UnitGetOwner(lv_targetUnit);
lv_avalancheMissileUnit = UnitBehaviorEffectUnit(lv_targetUnit, "MeiOWAvalancheStasis", c_effectUnitSource, 0);
// Conditions
if (testConds) {
if (!((UnitHasBehavior2(lv_targetUnit, "MeiOWAvalancheStasis") == true))) {
return false;
}
if (!((lv_targetPlayer > 0))) {
return false;
}
if (!((lv_targetPlayer <= libCore_gv_bALMaxEnginePlayerCount))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
if ((lv_targetUnit == libGame_gv_players[lv_targetPlayer].lv_heroUnit)) {
libGame_gf_PlayerHeroDisplacementCameraLock(lv_targetUnit, "MeiOWAvalancheStasis");
}
while ((UnitIsAlive(lv_avalancheMissileUnit) == true) && (UnitHasBehavior2(lv_targetUnit, "MeiOWAvalancheStasis") == true)) {
UnitSetPosition(lv_targetUnit, UnitGetPosition(lv_avalancheMissileUnit), true);
Wait(0.0625, c_timeGame);
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHMEI_gt_HeroMeiOWAvalancheCameraLock_Init () {
libHMEI_gt_HeroMeiOWAvalancheCameraLock = TriggerCreate("libHMEI_gt_HeroMeiOWAvalancheCameraLock_Func");
TriggerEnable(libHMEI_gt_HeroMeiOWAvalancheCameraLock, false);
TriggerAddEventUnitBehaviorChange(libHMEI_gt_HeroMeiOWAvalancheCameraLock, null, "MeiOWAvalancheStasis", c_unitBehaviorChangeActivate);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - MeiOW - Avalanche Pathing Checks
//--------------------------------------------------------------------------------------------------
bool libHMEI_gt_HeroMeiOWAvalanchePathingChecks_Func (bool testConds, bool runActions) {
// Variable Declarations
int lv_totalDistanceMods;
unit lv_muradin;
int lv_meiPlayer;
fixed lv_abilityRange;
point lv_targetPoint;
point lv_actualTargetPoint;
fixed lv_modifiedDistance;
// Automatic Variable Declarations
// Variable Initialization
lv_muradin = EventPlayerEffectUsedUnit(c_effectUnitCaster);
lv_meiPlayer = UnitGetOwner(lv_muradin);
lv_abilityRange = CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "MeiOWAvalancheLaunchMissile", "ImpactLocation.ProjectionDistanceScale", 0);
lv_targetPoint = EventPlayerEffectUsedPoint(c_effectLocationTargetPoint);
// Actions
if (!runActions) {
return true;
}
CatalogFieldValueSet(c_gameCatalogEffect, "MeiOWAvalancheLaunchMissile", "ImpactLocation.ProjectionDistanceScale", lv_meiPlayer, CatalogFieldValueGet(c_gameCatalogEffect, "MeiOWAvalancheLaunchMissile", "ImpactLocation.ProjectionDistanceScale", 0));
lv_modifiedDistance = (lv_abilityRange + 0.0);
lv_actualTargetPoint = lv_targetPoint;
while ((PointPathingPassable(lv_actualTargetPoint) == false)) {
lv_modifiedDistance -= 0.125;
lv_totalDistanceMods += 1;
lv_actualTargetPoint = libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_muradin), lv_modifiedDistance, lv_targetPoint);
}
CatalogFieldValueSet(c_gameCatalogEffect, "MeiOWAvalancheLaunchMissile", "ImpactLocation.ProjectionDistanceScale", lv_meiPlayer, FixedToString(lv_modifiedDistance, 3));
UnitCreateEffectPoint(lv_muradin, "MeiOWAvalancheLaunchMissile", lv_actualTargetPoint);
return true;
}
//--------------------------------------------------------------------------------------------------
void libHMEI_gt_HeroMeiOWAvalanchePathingChecks_Init () {
libHMEI_gt_HeroMeiOWAvalanchePathingChecks = TriggerCreate("libHMEI_gt_HeroMeiOWAvalanchePathingChecks_Func");
TriggerEnable(libHMEI_gt_HeroMeiOWAvalanchePathingChecks, false);
TriggerAddEventPlayerEffectUsed(libHMEI_gt_HeroMeiOWAvalanchePathingChecks, c_playerAny, "MeiOWAvalancheInitialOffsetPersistent");
}
void libHMEI_InitTriggers () {
libHMEI_gt_HeroMeiOWCryoFreezeOverlayOn_Init();
libHMEI_gt_HeroMeiOWCryoFreezeOverlayOff_Init();
libHMEI_gt_HeroMeiOWAvalancheCameraLock_Init();
libHMEI_gt_HeroMeiOWAvalanchePathingChecks_Init();
}
//--------------------------------------------------------------------------------------------------
// Library Initialization
//--------------------------------------------------------------------------------------------------
bool libHMEI_InitLib_completed = false;
void libHMEI_InitLib () {
if (libHMEI_InitLib_completed) {
return;
}
libHMEI_InitLib_completed = true;
libHMEI_InitLibraries();
libHMEI_InitVariables();
libHMEI_InitTriggers();
}