include "TriggerLibs/HeroesLib"
//--------------------------------------------------------------------------------------------------
// Library: Alterac Pass
//--------------------------------------------------------------------------------------------------
// Preset Declarations
const int libMMAP_ge_AVLanes_Null = 0;
const int libMMAP_ge_AVLanes_Top = 1;
const int libMMAP_ge_AVLanes_Mid = 2;
const int libMMAP_ge_AVLanes_Bot = 3;
const int libMMAP_ge_VictoryProgressCheckpoints__50Percent = 0;
const int libMMAP_ge_VictoryProgressCheckpoints__75Percent = 1;
const int libMMAP_ge_AVUIProgressBars_null = 0;
const int libMMAP_ge_AVUIProgressBars_Top = 1;
const int libMMAP_ge_AVUIProgressBars_Bottom = 2;
// Constants
const int libMMAP_gv_eventTimerDurationStartDuration_C = 180;
const int libMMAP_gv_eventRespawnDurationMin_C = 110;
const int libMMAP_gv_eventRespawnDurationMax_C = 150;
const int libMMAP_gv_eventTimerWarningDuration_C = 30;
const int libMMAP_gv_eventObectivePreviewDuration_C = 30;
const string libMMAP_gv_allianceCavalryUnitType_C = "AllianceCavalry";
const string libMMAP_gv_hordeCavalryUnitType_C = "HordeCavalry";
const string libMMAP_gv_capturedAllianceSoldierBirthActorType_C = "Storm_FX_WCAV_Alliance_Cavalry_Birth";
const string libMMAP_gv_capturedHordeSoldierBirthActorType_C = "Storm_FX_WCAV_Horde_Cavalry_Birth";
const string libMMAP_gv_allianceCavalryBirthActor_C = "Storm_FX_WCAV_Alliance_Cavalry02_Birth";
const string libMMAP_gv_hordeCavalryBirthActor_C = "Storm_FX_WCAV_Horde_Cavalry02_Birth";
const int libMMAP_gv_aVLaneCount_C = 3;
const int libMMAP_gv_cavalryCountMaxPerLane_C = 1;
const int libMMAP_gv_defenderIncrementCount_C = 1;
const int libMMAP_gv_defenderCountStart_C = 1;
const int libMMAP_gv_defenderCountMaximum_C = 4;
const fixed libMMAP_gv_defenderRespawnTime_C = 5.0;
const fixed libMMAP_gv_defenderAIUpdateRate_C = 0.25;
const int libMMAP_gv_defenderAIPercentChanceToWander_C = 20;
const fixed libMMAP_gv_defenderAIFlagCapturedLeashTimerDuration_C = 5.0;
const int libMMAP_gv_minionTimeToCap_C = 10;
const int libMMAP_gv_heroTimeToCap_C = 3;
const int libMMAP_gv_captureFlagMaxCountForTeam_C = 2;
const fixed libMMAP_gv_captureFlagVictoryTimeGoalStart_C = 25.0;
const fixed libMMAP_gv_captureFlagVictoryTimeGoalMax_C = 55.0;
const fixed libMMAP_gv_captureFlagVictoryTimeGoalTimeIncrement_C = 10.0;
const fixed libMMAP_gv_captureFlagCheckPeriod_C = 0.0625;
const fixed libMMAP_gv_captureFlagGoalValue_C = 100.0;
const int libMMAP_gv_mapMechanicSpawnDelay_C = 15;
const int libMMAP_gv_notificationCountMax_C = 2;
// Structures
struct libMMAP_gs_AVMechanics {
region lv_bossAggroRegion;
region lv_bossLeashRegion;
unit[libMMAP_gv_aVLaneCount_C + 1] lv_keep;
string lv_cavalryUnitType;
string lv_cavalryBirthActorType;
actor[libMMAP_gv_aVLaneCount_C + 1] lv_cavalryBirthActor;
point[libMMAP_gv_aVLaneCount_C + 1] lv_cavalrySpawnPoint;
timer lv_cavalrySpawnTimer;
unit[libMMAP_gv_aVLaneCount_C + 1] lv_cavalryUnit;
unitgroup lv_cavalryUnitGroup;
trigger lv_cavalrySpawnTrigger;
trigger lv_cavalryDeathTracker;
fixed lv_victoryProgress;
fixed lv_victoryProgressPercent;
bool[3] lv_victoryProgressCheckpoints;
timer[libMMAP_gv_defenderCountMaximum_C + 1] lv_defenderSpawnTimer;
shuffler lv_defenderSpawnShuffler;
region[libMMAP_gv_captureFlagMaxCountForTeam_C + 1] lv_defenderLeashRegion;
int[libMMAP_gv_defenderCountMaximum_C + 1] lv_defenderNextSpawnPointIndex;
bool[libMMAP_gv_defenderCountMaximum_C + 1] lv_defenderSpawnPointInUse;
point[libMMAP_gv_captureFlagMaxCountForTeam_C + 1][libMMAP_gv_defenderCountMaximum_C + 1] lv_defenderSpawnPoints;
unit[libMMAP_gv_defenderCountMaximum_C + 1] lv_defenderUnit;
actor[libMMAP_gv_captureFlagMaxCountForTeam_C + 1][libMMAP_gv_defenderCountMaximum_C + 1] lv_defenderSpawnDoodadActor;
bool lv_respawnDefenders;
trigger lv_defenderDeathTracker;
trigger lv_defenderSpawnTracker;
unit lv_flagWarningUnit;
unit[libMMAP_gv_captureFlagMaxCountForTeam_C + 1] lv_cageUnit;
unit[libMMAP_gv_captureFlagMaxCountForTeam_C + 1] lv_cageBannerSconceUnit;
actor lv_flagBirthActor;
string lv_flagBirthActorType;
unit lv_flagBeingCapturedUnit;
unit lv_flag;
unit lv_flagMinimapIcon;
point[libMMAP_gv_captureFlagMaxCountForTeam_C + 1] lv_flagDummyLockUnitSpawnPoint;
unit lv_flagDummyLockUnit;
actor[libMMAP_gv_captureFlagMaxCountForTeam_C + 1] lv_flagCaptureDoodadActor;
region[libMMAP_gv_captureFlagMaxCountForTeam_C + 1] lv_region;
point[libMMAP_gv_captureFlagMaxCountForTeam_C + 1] lv_flagSpawnPoint;
bool lv_flagIsCaptured;
unitgroup lv_flagEnemiesCapturingUnitGroup;
unitgroup lv_flagEnemyHeroesCapturingUnitGroup;
unitgroup lv_eventUnitGroup;
int lv_eventsWon;
};
struct libMMAP_gs_AVUI {
int lv_mainPanel;
int[libMMAP_gv_notificationCountMax_C + 1] lv_notificationFrame;
int[libMMAP_gv_notificationCountMax_C + 1] lv_notificationLabel;
int lv_notificationCount;
int lv_mMContainer;
int lv_mechanicLabel;
int[libCore_gv_bALMaxTeams + 1] lv_teamWinningIcon;
int[libCore_gv_bALMaxTeams + 1] lv_teamWinningIcon_Glow;
int[libCore_gv_bALMaxTeams + 1] lv_progressBarLabel;
int[libCore_gv_bALMaxTeams + 1] lv_victoryProgressBar;
int[libCore_gv_bALMaxTeams + 1] lv_progressBarIconImage;
int[libMMAP_gv_aVLaneCount_C + 1] lv_mapMechanicHealthBar;
int[libCore_gv_bALMaxTeams + 1][libCore_gv_bALMaxTeams + 1] lv_cageTextTag;
};
struct libMMAP_gs_AVTeamSpecificSounds {
soundlink lv_cavalrySpawnWarning;
soundlink lv_cavalrySpawn;
soundlink lv_coreGetHitSmall;
soundlink lv_coreGetHitLarge;
};
struct libMMAP_gs_AVSounds {
libMMAP_gs_AVTeamSpecificSounds[libCore_gv_bALMaxTeams + 1] lv_aVTeamSpecificSounds;
sound[libCore_gv_bALMaxGamePlayers + 1][6] lv_snowSound;
};
struct libMMAP_gs_AVTransmissions {
bool[libCore_gv_bALMaxTeams + 1] lv_hasPlayedCampCapturedVO;
bool[libCore_gv_bALMaxTeams + 1] lv_hasPlayedCampRetakenVO;
timer lv_campTransmissionCDTimer;
};
// Variable Declarations
bool libMMAP_gv_dEBUG_AlliedFlagTargetable;
bool libMMAP_gv_dEBUG_CampDefendersOn;
timer libMMAP_gv_eventTimer;
timer libMMAP_gv_eventWarningTimer;
timer libMMAP_gv_eventObjectivePreviewTimer;
int libMMAP_gv_currentCPIndex;
int libMMAP_gv_currentTeamLeader;
bool libMMAP_gv_firstEventHasHappened;
libMMAP_gs_AVMechanics[libCore_gv_bALMaxTeams + 1] libMMAP_gv_aVMechanics;
int libMMAP_gv_defenderCount;
unit libMMAP_gv_dEBUG_WatchedDefender;
fixed libMMAP_gv_captureFlagVictoryTimeGoal;
int[libCore_gv_bALMaxPlayers + 1] libMMAP_gv_cageUnlockInterrupts;
int[libCore_gv_bALMaxTeams + 1] libMMAP_gv_capturingPlayerID;
bool libMMAP_gv_mapMechanicRewardActive;
libMMAP_gs_AVUI libMMAP_gv_aVUI;
libMMAP_gs_AVSounds libMMAP_gv_aVSounds;
libMMAP_gs_AVTransmissions libMMAP_gv_aVTransmissions;
int libMMAP_gv_transmissionCDTimerDuration_C;
// Function Declarations
void libMMAP_gf_InitializeMapMVPAnnouncerSounds ();
void libMMAP_gf_OverrideMinionWaveComposition ();
void libMMAP_gf_InitializeFlagData (int lp_team, int lp_flagIndex, region lp_region, region lp_defenderLeashRegion, unit lp_cageUnit, unit lp_cageBannerSconce, point lp_flagSpawnPoint, point lp_flagDummyLockSpawnPoint, point lp_defenderSpawnPoint1, point lp_defenderSpawnPoint2, point lp_defenderSpawnPoint3, point lp_defenderSpawnPoint4, doodad lp_defenderSpawnDoodad1, doodad lp_defenderSpawnDoodad2, doodad lp_defenderSpawnDoodad3, doodad lp_defenderSpawnDoodad4);
void libMMAP_gf_InitializeMapData (int lp_team, region lp_bossAggroRegion, region lp_bossLeashRegion, unit lp_keepTop, unit lp_keepMid, unit lp_keepBot, point lp_cavalrySpawnPointTop, point lp_cavalrySpawnPointMid, point lp_cavalrySpawnPointBot);
int libMMAP_gf_TeamNumberOfUnit (unit lp_unit);
int libMMAP_gf_NoVisionComputerPlayerInTeam (int lp_team);
int libMMAP_gf_EventWarningTimerDuration (int lp_eventTimerDuration);
void libMMAP_gf_RestartEventTimers ();
void libMMAP_gf_DefenderSpawnTimerExpires (int lp_team, timer lp_timer);
void libMMAP_gf_FlagDefenderDies (unit lp_unit, int lp_team);
int libMMAP_gf_GetDefenderSpawnPointIndex (int lp_team);
void libMMAP_gf_SpawnDefenderForTeamAtCapturePoint (int lp_team, int lp_unitIndex);
void libMMAP_gf_TrickleSpawnFlagDefenders (int lp_team);
void libMMAP_gf_SpawnAllDefendersImmediately (int lp_team);
void libMMAP_gf_DefenderMainAILoop (unit lp_defenderUnit);
void libMMAP_gf_DEBUG_WatchedDefenderLog (unit lp_defenderUnit, text lp_logText);
bool libMMAP_gf_UnitIsCaptureFlag (unit lp_unit);
void libMMAP_gf_EnableDisableCaptureFlag (int lp_team, bool lp_enableOrDisable);
void libMMAP_gf_TeamCapturesFlag (int lp_teamCapturingFlag, int lp_teamOfCapturedFlag);
void libMMAP_gf_TeamCompletesCaptureofFlag (int lp_winningTeam, int lp_losingTeam);
void libMMAP_gf_FlagVictorySequence (int lp_winningTeam, int lp_losingTeam);
void libMMAP_gf_UnitNotTargetableForTeam (unit lp_unit, int lp_team);
void libMMAP_gf_TeamsRewardUnitDies (int lp_team);
void libMMAP_gf_PreparetoSpawnCavalry (int lp_team);
void libMMAP_gf_SpawnCavalryForTeam (int lp_team);
void libMMAP_gf_EventRewardFinishedAllEventUnitsDied (int lp_team);
void libMMAP_gf_HookUpUI ();
void libMMAP_gf_UpdateCaptureProgressBarUIForTeam (int lp_team, int lp_enemyTeam);
void libMMAP_gf_UpdateTeamIconForTeamCurrentlyWinning (int lp_team);
void libMMAP_gf_UpdateVictoriousTeamIcon (int lp_team);
void libMMAP_gf_TeamDoesDoesNotCaptureFlag (int lp_team, int lp_enemyTeam, bool lp_isCapturing, bool lp_isContested);
void libMMAP_gf_ShowHideNotificationFrame (fixed lp_duration, int lp_teamOfCaptor, int lp_teamOfCapturedFlag);
void libMMAP_gf_UpdateNotificationCountdownLabel (text lp_alliedText, text lp_enemyText, int lp_alliedTeam, timer lp_timer);
void libMMAP_gf_AttachHelpButtonToUnit (unit lp_attachedUnit, int lp_team, text lp_helpText, text lp_helpText2);
void libMMAP_gf_UpdateFlagUI (int lp_teamCapturingFlag, int lp_teamOfCapturedFlag);
void libMMAP_gf_HookUpTeamSpecificSounds ();
void libMMAP_gf_CoreTakesDamagePlayGetHitSound (int lp_team, fixed lp_damage);
void libMMAP_gf_CampSoon ();
void libMMAP_gf_CampActive ();
void libMMAP_gf_AllianceCapturesHordeCamp ();
void libMMAP_gf_HordeCapturesAllianceCamp ();
void libMMAP_gf_AllianceRetakesAllianceCamp ();
void libMMAP_gf_HordeRetakesHordeCamp ();
void libMMAP_gf_AllianceWinsObjective ();
void libMMAP_gf_HordeWinsObjective ();
void libMMAP_gf_AllianceCavalryCharges ();
void libMMAP_gf_HordeCavalryCharges ();
void libMMAP_gf_AllianceCavalrySlain ();
void libMMAP_gf_HordeCavalrySlain ();
// Trigger Declarations
trigger libMMAP_gt_IncludeModInit;
trigger libMMAP_gt_DEBUG_Help;
trigger libMMAP_gt_DEBUG_SendEnemyMapMechanicReward;
trigger libMMAP_gt_DEBUG_ToggleDefenders;
trigger libMMAP_gt_DEBUG_EventStart;
trigger libMMAP_gt_DEBUG_EventStartFast;
trigger libMMAP_gt_DEBUG_MakeAlliedFlagsTargetable;
trigger libMMAP_gt_GameOpenTimerStarted;
trigger libMMAP_gt_OpenTheGatesTimerExpires;
trigger libMMAP_gt_EventObjectivePreviewTimerExpires;
trigger libMMAP_gt_EventWarningTimerExpires;
trigger libMMAP_gt_EventTimerExpires;
trigger libMMAP_gt_GameOver;
trigger libMMAP_gt_TownStructureDiesRemoveBossArmor;
trigger libMMAP_gt_OrderDefenderSpawnTimerExpires;
trigger libMMAP_gt_ChaosDefenderSpawnTimerExpires;
trigger libMMAP_gt_OrderDefenderDies;
trigger libMMAP_gt_ChaosDefenderDies;
trigger libMMAP_gt_DEBUG_WatchDefenderAi;
trigger libMMAP_gt_PlayerStartsChannelMacguffin;
trigger libMMAP_gt_PlayerCompletesChannelMacguffin;
trigger libMMAP_gt_PlayerInterruptsChannelMacguffin;
trigger libMMAP_gt_OrderCavalrySpawnTimerExpires;
trigger libMMAP_gt_ChaosCavalrySpawnTimerExpires;
trigger libMMAP_gt_ChaosRewardDeathTracker;
trigger libMMAP_gt_OrderRewardDeathTracker;
trigger libMMAP_gt_OrderCoreTakesDamageGetHitSounds;
trigger libMMAP_gt_ChaosCoreTakesDamageGetHitSounds;
trigger libMMAP_gt_PlayerGainsSlowFromSnow;
trigger libMMAP_gt_PlayerLosesSlowFromSnow;
// Library Initialization
void libMMAP_InitVariables ();