include "TriggerLibs/HeroesLib_h"

include "TriggerLibs/GameLib_h"



//--------------------------------------------------------------------------------------------------

// Library: Support

//--------------------------------------------------------------------------------------------------

// Constants

const string libSprt_gv_performanceTestFPSLogFile = "FPS_Log";

const int libSprt_gv_dataMiningNumberOfManaBuckets = 10;

const int libSprt_gv_dataMiningMaxNumberOfDifferentManaRegenSources = 14;

const fixed libSprt_gv_dataMiningPeriodicSendPeriod = 60.0;

const fixed libSprt_gv_gPU2021ExtendedDurationXPGlobesDuration = 45.0;

const fixed libSprt_gv_gPU2021ExtendedDurationXPGlobesXPMod = 0.25;



// Structures

struct libSprt_gs_DataMiningPlayerData {

    fixed lv_lastManaValue;

    int[libSprt_gv_dataMiningNumberOfManaBuckets + 1] lv_timeSpentInEachManaBucket;

    fixed[libSprt_gv_dataMiningMaxNumberOfDifferentManaRegenSources + 1] lv_manaRegenAmounts;

};



struct libSprt_gs_QACheatsControlsPanel {

    int lv_mainDialog;

    int lv_behaviorApplyButton;

    int lv_behaviorRemoveButton;

    int lv_behaviorCleanseButton;

    int lv_behaviorListPulldown;

    int lv_alliedControlCheckbox;

    int lv_cooldownsCheckbox;

    int lv_showMapCheckbox;

    int lv_visionCheckbox;

    int lv_gridCheckbox;

    int lv_tVECheckbox;

    int lv_freeCheckbox;

    int lv_toggleSelectionCheckbox;

    int lv_toggleWeaponsCheckbox;

    int lv_speedCountEditbox;

    int lv_executeSpeedButton;

    int lv_spawnUnitListPulldown;

    int lv_orderCheckbox;

    int lv_chaosCheckbox;

    int lv_neutralCheckbox;

    int lv_spawnUnitButton;

    int lv_closeButton;

    int lv_debugKillButton;

    int lv_refreshUnitButton;

    int lv_moveUnitButton;

    int lv_refreshCooldownsButton;

    int lv_cameraAngleEditbox;

    int lv_toggleDebugCameraCheckbox;

    int lv_setCameraAngleButton;

    int lv_debugRespawnButton;

    int lv_spawnItemListPulldown;

    int lv_itemCountEditbox;

    int lv_spawnItemButton;

    int lv_respawnStructuresButton;

    int lv_killStructuresButton;

};



struct libSprt_gs_RS_Structure {

    point lv_buildingPosition;

    string lv_buildingType;

    fixed lv_buildingFacing;

};



struct libSprt_gs_RS_Town {

    libSprt_gs_RS_Structure[libGame_gv_townMaxStructureCount + 1] lv_structureArray;

};



// Variable Declarations

bool libSprt_gv_performanceTestPerformanceTestRunning;

bool[libCore_gv_bALMaxPlayers + 1] libSprt_gv_statTrackingOn;

fixed[libCore_gv_bALMaxPlayers + 1] libSprt_gv_statTrackingStartTime;

int libSprt_gv_statTrackingPlayers;

fixed libSprt_gv_dataMiningTimeStampofLastPeriodicTransmit;

timer libSprt_gv_dataMiningPeriodicTimer;

string[libSprt_gv_dataMiningMaxNumberOfDifferentManaRegenSources + 1] libSprt_gv_dataMiningManaRegenSourceNames;

libSprt_gs_DataMiningPlayerData[libCore_gv_bALMaxPlayers + 1] libSprt_gv_dataMining_PlayerData;

int libSprt_gv_heroMasteryRingsMaxRank;

unit libSprt_gv_qACheatsSelectedUnit;

bool libSprt_gv_qACheatsSeekingApplyTarget;

bool libSprt_gv_qACheatsSeekingRemoveTarget;

int libSprt_gv_qACheatsSelectedTeam;

unitgroup libSprt_gv_qACheatsSpawnedUnitsGroup;

int libSprt_gv_qACheatsSelectedBehavior;

int libSprt_gv_qACheatsSelectedSpawnUnit;

bool libSprt_gv_qACheatsWeaponsDisabled;

libSprt_gs_QACheatsControlsPanel libSprt_gv_qACheatsControlsPanel;

string[31] libSprt_gv_compiledBehaviorList;

string[31] libSprt_gv_qACheatsCompiledSpawnUnitsList;

string[6] libSprt_gv_qACheatsCompiledSpawnItemsList;

timer libSprt_gv_dEBUGBalanceProbeTimer;

fixed libSprt_gv_dEBUGBalanceProbeTimerDuration;

bool libSprt_gv_dEBUGDesignCamEnabled;

fixed libSprt_gv_soundRepeatDelay;

bool libSprt_gv_soundRepeatActive;

string libSprt_gv_soundRepeatCurrentAbility;

unit libSprt_gv_soundRepeatCasterUnit;

point libSprt_gv_soundRepeatTargetPoint;

unit libSprt_gv_soundRepeatTargetUnit;

int libSprt_gv_dEBUGXPPassiveBalancerTeam1Player;

int libSprt_gv_dEBUGXPPassiveBalancerTeam2Player;

bool libSprt_gv_dEBUGXPPassiveBalancerEnable;

bool libSprt_gv_dEBUGXPBoostEnable;

fixed libSprt_gv_dEBUGXPBoostMultiplier;

fixed libSprt_gv_dEBUGXPPassiveBoostMultiplier;

int libSprt_gv_dEBUGXPPassiveBoostTeam;

int libSprt_gv_dEBUGXPBoostTeam;

bool libSprt_gv_dEBUGXPTrickleOnly;

bool libSprt_gv_dEBUGXPSourceHero;

bool libSprt_gv_dEBUGXPSourceMinion;

bool libSprt_gv_dEBUGXPSourceStructure;

bool libSprt_gv_dEBUGXPSourceCreep;

bool libSprt_gv_dEBUGSelectionEnabled;

bool libSprt_gv_dEBUGTalentDebugEnabled;

bool libSprt_gv_dEBUGCombatTextEnabled;

bool libSprt_gv_dEBUGXPTextEnabled;

bool libSprt_gv_dEBUGHeroSelectWait;

bool libSprt_gv_dEBUGHeroMimic;

bool libSprt_gv_dEBUG60SecondPauseOnOff;

bool libSprt_gv_dEBUGDebugMessagesEnabled;

bool libSprt_gv_dEBUGCinematicsModeEnabled;

bool libSprt_gv_dEBUGMapTextEnabled;

bool libSprt_gv_dEBUGBonusMinionXP;

bool libSprt_gv_dEBUGNoRegen;

libSprt_gs_RS_Town[libGame_gv_townMaxTownCount + 1] libSprt_gv_rS_Towns;

fixed libSprt_gv_debug_GameTimeDelta;

unitgroup libSprt_gv_dEBUGDPSTrackerGroup;

fixed libSprt_gv_dEBUGDPSTrackerTotalDamage;

fixed libSprt_gv_dEBUGDPSTrackerTrackingInterval;

timer libSprt_gv_dEBUGDPSTrackerTimer;

fixed libSprt_gv_dEBUGDPSTrackerTime;

bool libSprt_gv_dEBUGSapperMinionsEnabled;

fixed libSprt_gv_dEBUGBaselineArmorValue;

fixed libSprt_gv_dEBUGBaselineSpellPowerValue;

bool libSprt_gv_gPU2021ExtendedDurationXPGlobesEnabled;



// Function Declarations

void libSprt_gf_PerformanceTestStartPerformanceTest (string lp_name);

void libSprt_gf_PerformanceTestStopPerformanceTest ();

void libSprt_gf_PerformanceTestHeroSelectScreen ();

void libSprt_gf_PerformanceTestHeroesIdleBeforeGame ();

void libSprt_gf_PerformanceTestHeroesIdleGameStart ();

void libSprt_gf_PerformanceTestHeroesIdleMinionsFighting ();

void libSprt_gf_PerformanceTestTwoHeroesActiveStart ();

void libSprt_gf_PerformanceTestTwoHeroesActiveInLane ();

void libSprt_gf_PerformanceTestSixHeroesActiveStart ();

void libSprt_gf_PerformanceTestSixHeroesActiveInLane ();

void libSprt_gf_PerformanceTestTenHeroesActiveStart ();

void libSprt_gf_PerformanceTestTenHeroesActiveInLane ();

void libSprt_gf_PerformanceTestChaosTeamDisabled ();

void libSprt_gf_PerformanceTestOrderTeamPushingUnopposed ();

int libSprt_gf_StatTrackingGetTrackedPlayerFromString (string lp_chatString);

void libSprt_gf_StatTrackingStartTrackingforPlayer (int lp_player);

void libSprt_gf_StatTrackingBreakTrackingforPlayer (int lp_player);

void libSprt_gf_StatTrackingStopTrackingforPlayer (int lp_player);

void libSprt_gf_StatTrackingReportStats (int lp_reportPlayer);

int libSprt_gf_DataMiningGetManaRegenSourceIndex (string lp_name);

void libSprt_gf_DataMiningPeriodicDataSend ();

void libSprt_gf_DataMiningLogManaRegenForPlayer (int lp_player, string lp_regenSourceName, fixed lp_amount);

void libSprt_gf_DataMiningTurnDataMiningTriggersOnOff (bool lp_onOff);

void libSprt_gf_DataMiningSendStartGameEvents ();

void libSprt_gf_DataMiningSendEndOfGameDigests (int lp_team);

void libSprt_gf_SetHeroMasteryRingLevel (int lp_player);

void libSprt_gf_ChoGallHeroMasteryRing (int lp_player);

void libSprt_gf_QACheatsUIInit ();

void libSprt_gf_QACheatsPopulateBehaviorPulldown ();

void libSprt_gf_QACheatsAddBehaviorButtons ();

void libSprt_gf_QACheatsAddToggleCheckboxes ();

void libSprt_gf_QACheatsAddSpeedControls ();

void libSprt_gf_QACheatsPopulateSpawnUnitsPulldown ();

void libSprt_gf_QACheatsAddTeamCheckboxes ();

void libSprt_gf_QACheatsAddUnitControlButtons ();

void libSprt_gf_QACheatsAddCameraControls ();

void libSprt_gf_QACheatsPopulateSpawnItemsPulldown ();

void libSprt_gf_QACheatsAddSpawnItemButton ();

void libSprt_gf_QACheatsAddStructureControlsButtons ();

void libSprt_gf_QACheatsAddDebugRespawnButton ();

void libSprt_gf_QACheatsCompileBehaviors ();

void libSprt_gf_QACheatsCompileSpawnUnits ();

void libSprt_gf_QACheatsCompileSpawnItems ();

void libSprt_gf_QACheatsCleanseAllEffects ();

void libSprt_gf_DEBUGSoundRepeatRepeatSound ();

void libSprt_gf_DEBUGStartGame ();

void libSprt_gf_DEBUGSpawnCreepCamps ();

void libSprt_gf_DEBUGToggleSelection ();

void libSprt_gf_DEBUGToggleSpawnatCameraorBaseSelection ();

void libSprt_gf_DEBUGToggleMinionSpawning ();

void libSprt_gf_DEBUGToggleTrickleXP ();

void libSprt_gf_DEBUGToggleCombatText ();

void libSprt_gf_DEBUGToggleAllCombatText ();

void libSprt_gf_DEBUGToggleSavedHeroCheckbox ();

void libSprt_gf_DEBUGRefreshCooldownsforUnit (int lp_player, unit lp_unit);

void libSprt_gf_DEBUGToggleUpdateDeathUIElements ();

void libSprt_gf_DEBUGIncrementAllQuests (int lp_player, int lp_count);

fixed libSprt_gf_DebugGameTimeDelta ();

void libSprt_gf_DEBUGTalentsRespec (int lp_player, int lp_tier);

void libSprt_gf_DEBUGAddDynamicStacksofBehaviortoUnit (fixed lp_rate, string lp_behavior, int lp_player, unit lp_unit);



// Trigger Declarations

trigger libSprt_gt_IncludeSupport;

trigger libSprt_gt_AISpawningTest;

trigger libSprt_gt_AutomatedBuildTest;

trigger libSprt_gt_PerformanceTestSpawnHeroesForHeroesPerformanceTestMap;

trigger libSprt_gt_PerformanceTestRunPerformanceTest;

trigger libSprt_gt_PerformanceTestSetHeroChoices;

trigger libSprt_gt_PerformanceTestGetFPS;

trigger libSprt_gt_PerformanceTestOutputFPSToFile;

trigger libSprt_gt_PerformanceTestMaintainHeroHealth;

trigger libSprt_gt_DEBUGStatTrackingStartforPlayer;

trigger libSprt_gt_DEBUGStatTrackingLogBreak;

trigger libSprt_gt_DEBUGStatTrackingStop;

trigger libSprt_gt_DEBUGStatTrackingStartTrackingforAllPlayers;

trigger libSprt_gt_DEBUGStatTrackingStopTrackingforAllPlayers;

trigger libSprt_gt_StatTrackingDamageTracking;

trigger libSprt_gt_StatTrackingHealingTracking;

trigger libSprt_gt_StatTrackingGameOver;

trigger libSprt_gt_DataMiningListenForRegenGlobes;

trigger libSprt_gt_DataMiningPeriodicDataSendPeriodicEventTrigger;

trigger libSprt_gt_DEBUGForceHeroMasteryRing0;

trigger libSprt_gt_DEBUGForceHeroMasteryRing1;

trigger libSprt_gt_DEBUGForceHeroMasteryRing2;

trigger libSprt_gt_DEBUGForceHeroMasteryRing3;

trigger libSprt_gt_DEBUGForceHeroMasteryRingRando;

trigger libSprt_gt_QACheatsInit;

trigger libSprt_gt_ToggleCheatsDialog;

trigger libSprt_gt_QACheatsCloseButtonClicked;

trigger libSprt_gt_QACheatsAlliedControlCheckboxClicked;

trigger libSprt_gt_QACheatsShowMapCheckboxClicked;

trigger libSprt_gt_QACheatsVisionCheckboxClicked;

trigger libSprt_gt_QACheatsCooldownsCheckboxClicked;

trigger libSprt_gt_QACheatsGridCheckboxClicked;

trigger libSprt_gt_QACheatsVisualizeEffectsCheckboxClicked;

trigger libSprt_gt_QACheatsToggleFreeCheckboxClicked;

trigger libSprt_gt_QACheatsToggleSelectionCheckboxClicked;

trigger libSprt_gt_QACheatsToggleDisableWeaponsCheckboxChecked;

trigger libSprt_gt_QACheatsDisableWeaponsOnSpawn;

trigger libSprt_gt_QACheatsDisableWeaponsOnChenUlt;

trigger libSprt_gt_QACheatsUnitSelected;

trigger libSprt_gt_QACheatsBehaviorDropdownSelectionChange;

trigger libSprt_gt_QACheatsBehaviorApplyButtonClicked;

trigger libSprt_gt_QACheatsBehaviorRemoveButtonClicked;

trigger libSprt_gt_QACheatsBehaviorCleanseButtonClicked;

trigger libSprt_gt_QACheatsExecuteSpeedButtonClicked;

trigger libSprt_gt_QACheatsSpawnUnitsDropdownSelectionChange;

trigger libSprt_gt_QACheatsTeamCheckboxesClicked;

trigger libSprt_gt_QACheatsSpawnUnitsButtonClicked;

trigger libSprt_gt_QACheatsDebugKillUnitButtonClicked;

trigger libSprt_gt_QACheatsRefreshUnitButtonClicked;

trigger libSprt_gt_QACheatsMoveUnitButtonClicked;

trigger libSprt_gt_QACheatsRefreshCooldownsButtonClicked;

trigger libSprt_gt_QACheatsSetCameraAngleButtonClicked;

trigger libSprt_gt_QACheatsToggleDebugCameraCheckboxChecked;

trigger libSprt_gt_QACheatsSpawnItemButtonClicked;

trigger libSprt_gt_QACheatsRespawnStructuresButtonClicked;

trigger libSprt_gt_QACheatsKillStructuresButtonClicked;

trigger libSprt_gt_QACheatsDebugRespawnButtonClicked;

trigger libSprt_gt_DEBUGIntroVOInteractorItemintrovotest;

trigger libSprt_gt_DEBUGIntroVOInteractorUsage;

trigger libSprt_gt_DEBUGInspectTheBalanceProbebalanceprobe;

trigger libSprt_gt_DEBUGResetTheBalanceProbebalancereset;

trigger libSprt_gt_DEBUGTimedBalanceProbebalancetimer;

trigger libSprt_gt_DEBUGBalanceProbeTimerExpires;

trigger libSprt_gt_DEBUGEnableSoundRepeat;

trigger libSprt_gt_DEBUGSoundRepeatAdjustDelay;

trigger libSprt_gt_DEBUGSoundRepeatAbilityUsed;

trigger libSprt_gt_DEBUGPassiveExpBalancerpassivebalance;

trigger libSprt_gt_DEBUGWhichplayersareAIwhoisai;

trigger libSprt_gt_DEBUGEqualizeExperienceeqxp;

trigger libSprt_gt_DEBUGBoostExperienceeqexpboost;

trigger libSprt_gt_DEBUGXPTrickleOnlyxptrickleonly;

trigger libSprt_gt_DEBUGSuppressDebugMessages;

trigger libSprt_gt_DEBUGXPHeroxphero;

trigger libSprt_gt_DEBUGXPMinionxpminion;

trigger libSprt_gt_DEBUGXPStructurexpstructure;

trigger libSprt_gt_DEBUGXPCreepxpcreep;

trigger libSprt_gt_DEBUGHelphelp;

trigger libSprt_gt_DEBUGPlayerNumberplayernum;

trigger libSprt_gt_DEBUGToggleSelectiontogselection;

trigger libSprt_gt_DEBUGToggleShowXPValuestogshowxpvalues;

trigger libSprt_gt_DEBUGStartGamestartgame;

trigger libSprt_gt_DEBUGDisablePingLimitfreepings;

trigger libSprt_gt_DEBUGPauseGameStartTimerpausestart;

trigger libSprt_gt_DEBUGTurnOnNormalCreepCampscreepcamp;

trigger libSprt_gt_DEBUGRespawnCreepCampsrespawncamps;

trigger libSprt_gt_DEBUGSpawnHerospawnhero;

trigger libSprt_gt_DEBUGRespawnHerodebugrespawn;

trigger libSprt_gt_DEBUGSelectHerodebugselect;

trigger libSprt_gt_DEBUGKillHerodebugkill;

trigger libSprt_gt_DEBUGAIHeroMimicheromimic;

trigger libSprt_gt_DEBUGAISetHerosethero;

trigger libSprt_gt_DEBUGAISetAllHerosetallheroes;

trigger libSprt_gt_DEBUGLogRandomHeroesForPlayer;

trigger libSprt_gt_DEBUGLevelAIHerosheroxp;

trigger libSprt_gt_DEBUGToggleFloatingCombatTexttogcombattext;

trigger libSprt_gt_DEBUGToggleMinionSpawningtogminionspawn;

trigger libSprt_gt_DEBUGToggleMinionSystemPausedtogminionpause;

trigger libSprt_gt_DEBUGToggleMinionSystemOnOfftogminionsystem;

trigger libSprt_gt_DEBUGToggleMinionBonusXPOnOff;

trigger libSprt_gt_DEBUGToggleTowerSystemOnOfftogtowersystem;

trigger libSprt_gt_DEBUGTowerSystemOntowerson;

trigger libSprt_gt_DEBUGTowerSystemOfftowersoff;

trigger libSprt_gt_DEBUGToggleXPTrickletogtrickle;

trigger libSprt_gt_DEBUGScalecatchupXPBonuscatchupxpbonus;

trigger libSprt_gt_DEBUGScalecatchupXPPenaltycatchupxppenalty;

trigger libSprt_gt_DEBUGToggleSoloXPtogsoloxp;

trigger libSprt_gt_DEBUGScaleCampscampscale;

trigger libSprt_gt_DEBUGHaveAITakeOverAI;

trigger libSprt_gt_DEBUGHaveAITakeOverAIAll;

trigger libSprt_gt_DEBUGHaveAITakeOverAIAllOff;

trigger libSprt_gt_DEBUGHaveAITakeOverAIAllOn;

trigger libSprt_gt_DEBUGAIShowTalentBuildaishowtalentbuild;

trigger libSprt_gt_DEBUGAICycleThroughAllHeroesailoadeveryhero;

trigger libSprt_gt_DEBUGDisplayHeroAIDebugInfoaidebug;

trigger libSprt_gt_DEBUGDisplayDefenderAIDebugInfodefenderdebug;

trigger libSprt_gt_DEBUGVictorydebugvictory;

trigger libSprt_gt_DEBUGStructures1ShotMinionskillerstructures;

trigger libSprt_gt_DEBUGIncreasedMinionDamagekillerminions;

trigger libSprt_gt_DEBUGRefreshCooldownscdr;

trigger libSprt_gt_DEBUGDefeatdebugdefeat;

trigger libSprt_gt_DEBUGUpvotedebugupvote;

trigger libSprt_gt_DEBUGTiedebugtie;

trigger libSprt_gt_DEBUGToggleHeroAItogheroai;

trigger libSprt_gt_DEBUGStopAIThinkTree;

trigger libSprt_gt_DEBUGStartAIThinkTree;

trigger libSprt_gt_DEBUGStopRegenstopregen;

trigger libSprt_gt_DEBUGStopHealthRegenForAllPlayersnoregen;

trigger libSprt_gt_DEBUGToggleCoreShieldMechanictogcoreshield;

trigger libSprt_gt_DEBUGToggleDebugOutputtogdebug;

trigger libSprt_gt_DEBUGToggleForCinematicstogcine;

trigger libSprt_gt_DEBUGToggleForMapTexttogmaptext;

trigger libSprt_gt_DEBUGTurnOffWeather;

trigger libSprt_gt_DEBUGTurnOnMinionSpellResist;

trigger libSprt_gt_DEBUGCompleteAllQuests;

trigger libSprt_gt_DEBUGProgressAllQuests;

trigger libSprt_gt_DEBUGTeamFightPerfTest;

trigger libSprt_gt_DEBUGToggleJungleCampDebugtogcampdebug;

trigger libSprt_gt_DEBUGTargetJungleCreepState;

trigger libSprt_gt_DEBUG60SecondPause;

trigger libSprt_gt_DEBUGTriggerASave;

trigger libSprt_gt_DEBUGHeroIsAlive;

trigger libSprt_gt_DEBUGShortHeroDeath;

trigger libSprt_gt_DEBUGInvulnerableStructures;

trigger libSprt_gt_DEBUGRespawnStructures;

trigger libSprt_gt_DEBUGKillStructures;

trigger libSprt_gt_DEBUGCollectStructureData;

trigger libSprt_gt_DEBUGGameTime;

trigger libSprt_gt_DEBUGChooseTalent;

trigger libSprt_gt_DEBUGXPRange;

trigger libSprt_gt_DEBUGAfkSystem;

trigger libSprt_gt_DEBUGStartDPSTracker;

trigger libSprt_gt_DEBUGDPSTracker;

trigger libSprt_gt_DEBUGClearDPSTrackerStats;

trigger libSprt_gt_DEBUGDPSTrackerTimerExpires;

trigger libSprt_gt_DEBUGTemp;

trigger libSprt_gt_DEBUGDontStart;

trigger libSprt_gt_DEBUGEnableBuildingScaling;

trigger libSprt_gt_DEBUGEnabletownhalldetection;

trigger libSprt_gt_DEBUGToggleEUPTLogging;

trigger libSprt_gt_DEBUGGetBaseUnitStats;

trigger libSprt_gt_DEBUGWizardtoSappers;

trigger libSprt_gt_DEBUGSapperHealthGlobes;

trigger libSprt_gt_DEBUGSapperSuicideDamage;

trigger libSprt_gt_DEBUGSapperAttackDamage;

trigger libSprt_gt_DEBUGSapperHealth;

trigger libSprt_gt_DEBUGApplyArmorValueChange;

trigger libSprt_gt_DEBUGApplySpellPowerValueChange;



// Library Initialization

void libSprt_InitVariables ();