include "TriggerLibs/NativeLib"
include "TriggerLibs/HeroesLib"
include "TriggerLibs/GameLib"
include "TriggerLibs/MapMechanicsLib"
include "TriggerLibs/StartingExperienceLib"
include "TriggerLibs/SoundLib"
include "LibMLHH_h"
//--------------------------------------------------------------------------------------------------
// Library: Heaven & Hell
//--------------------------------------------------------------------------------------------------
// External Library Initialization
void libMLHH_InitLibraries () {
libNtve_InitVariables();
libCore_InitVariables();
libGame_InitVariables();
libMapM_InitVariables();
libStEx_InitVariables();
libSond_InitVariables();
}
// Variable Initialization
bool libMLHH_InitVariables_completed = false;
void libMLHH_InitVariables () {
int init_i;
if (libMLHH_InitVariables_completed) {
return;
}
libMLHH_InitVariables_completed = true;
for (init_i = 0; init_i <= libCore_gv_bALMaxEnginePlayerCount; init_i += 1) {
libMLHH_gv_hHRackTextTags[init_i] = c_textTagNone;
}
for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {
libMLHH_gv_heroVO_LegendaryFlippedVOTimers[init_i] = TimerCreate();
}
libMLHH_gv_hHLootLoopCount_C = 15;
}
// Functions
fixed libMLHH_gf_HHDetermineAngle (int lp_playerNumber, int lp_numberOfPoints) {
// Automatic Variable Declarations
// Implementation
return ((lp_playerNumber * 360.0) / lp_numberOfPoints);
}
// Triggers
//--------------------------------------------------------------------------------------------------
// Trigger: Debug - Giant Demons
//--------------------------------------------------------------------------------------------------
bool libMLHH_gt_DebugGiantDemons_Func (bool testConds, bool runActions) {
// Variable Declarations
unit lv_itUnit;
// Automatic Variable Declarations
unitgroup autoB0024A7B_g;
int autoB0024A7B_u;
unitgroup autoE76B01CE_g;
int autoE76B01CE_u;
// Variable Initialization
// Conditions
if (testConds) {
if (!((libCore_gv_dEBUGDebuggingEnabled == true))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
autoB0024A7B_g = UnitGroup("Hell_GiantDemon_Base", c_playerAny, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);
autoB0024A7B_u = UnitGroupCount(autoB0024A7B_g, c_unitCountAll);
for (;; autoB0024A7B_u -= 1) {
lv_itUnit = UnitGroupUnitFromEnd(autoB0024A7B_g, autoB0024A7B_u);
if (lv_itUnit == null) { break; }
ActorSend(libNtve_gf_MainActorofUnit(lv_itUnit), "AnimGroupApply Alternate");
Wait(5.0, c_timeGame);
ActorSend(libNtve_gf_MainActorofUnit(lv_itUnit), "AnimGroupRemove Alternate");
}
autoE76B01CE_g = UnitGroup("Hell_GiantDemon_Chains", c_playerAny, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);
autoE76B01CE_u = UnitGroupCount(autoE76B01CE_g, c_unitCountAll);
for (;; autoE76B01CE_u -= 1) {
lv_itUnit = UnitGroupUnitFromEnd(autoE76B01CE_g, autoE76B01CE_u);
if (lv_itUnit == null) { break; }
ActorSend(libNtve_gf_MainActorofUnit(lv_itUnit), "AnimGroupApply Alternate");
Wait(5.0, c_timeGame);
ActorSend(libNtve_gf_MainActorofUnit(lv_itUnit), "AnimGroupRemove Alternate");
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libMLHH_gt_DebugGiantDemons_Init () {
libMLHH_gt_DebugGiantDemons = TriggerCreate("libMLHH_gt_DebugGiantDemons_Func");
TriggerAddEventChatMessage(libMLHH_gt_DebugGiantDemons, c_playerAny, "ccc", true);
}
//--------------------------------------------------------------------------------------------------
// Trigger: #Include HH
//--------------------------------------------------------------------------------------------------
bool libMLHH_gt_IncludeHH_Func (bool testConds, bool runActions) {
// Automatic Variable Declarations
// Actions
if (!runActions) {
return true;
}
libMapM_gf_InitializeSiegeTrooperMercType(libMapM_ge_JungleCampMercTypes_SiegeCamp1, StringExternal("Param/Value/lib_MLHH_6A2136A0"));
libMapM_gf_InitializeSummonerMercType(libMapM_ge_JungleCampMercTypes_BruiserCamp1, StringExternal("Param/Value/lib_MLHH_BEEB4194"), StringExternal("Param/Value/lib_MLHH_D450C33E"));
return true;
}
//--------------------------------------------------------------------------------------------------
void libMLHH_gt_IncludeHH_Init () {
libMLHH_gt_IncludeHH = TriggerCreate("libMLHH_gt_IncludeHH_Func");
}
//--------------------------------------------------------------------------------------------------
// Trigger: MMHH Init
//--------------------------------------------------------------------------------------------------
bool libMLHH_gt_MMHHInit_Func (bool testConds, bool runActions) {
// Automatic Variable Declarations
// Actions
if (!runActions) {
return true;
}
TechTreeUpgradeAddLevel(libStEx_gv_pLAYER_11_ORDER, "IsHeaven", 1);
TechTreeUpgradeAddLevel(libStEx_gv_pLAYER_12_CHAOS, "IsHeaven", 1);
return true;
}
//--------------------------------------------------------------------------------------------------
void libMLHH_gt_MMHHInit_Init () {
libMLHH_gt_MMHHInit = TriggerCreate("libMLHH_gt_MMHHInit_Func");
libGame_gf_GameOpenTimerStarted(libMLHH_gt_MMHHInit);
}
//--------------------------------------------------------------------------------------------------
// Trigger: HH Weapon Rack Broken
//--------------------------------------------------------------------------------------------------
bool libMLHH_gt_HHWeaponRackBroken_Func (bool testConds, bool runActions) {
// Automatic Variable Declarations
// Actions
if (!runActions) {
return true;
}
libMLHH_gv_hHWeaponRackBroken = true;
TriggerEnable(TriggerGetCurrent(), false);
return true;
}
//--------------------------------------------------------------------------------------------------
void libMLHH_gt_HHWeaponRackBroken_Init () {
libMLHH_gt_HHWeaponRackBroken = TriggerCreate("libMLHH_gt_HHWeaponRackBroken_Func");
TriggerAddEventPlayerEffectUsed(libMLHH_gt_HHWeaponRackBroken, c_playerAny, "WeaponRackClickApplyFlippableBehavior");
}
//--------------------------------------------------------------------------------------------------
// Trigger: HH Weapon Flipped
//--------------------------------------------------------------------------------------------------
bool libMLHH_gt_HHWeaponFlipped_Func (bool testConds, bool runActions) {
// Automatic Variable Declarations
// Conditions
if (testConds) {
if (!(((UnitGetType(EventUnit()) == "WeaponRackSpecialHeaven") || (UnitGetType(EventUnit()) == "WeaponRackSpecialHell")))) {
return false;
}
if (!((UnitHasBehavior2(EventUnit(), "WeaponRackFlippableBehavior") == true))) {
return false;
}
if (!((UnitHasBehavior2(EventUnit(), "WeaponRackPreventTextBehavior") == false))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
if ((libMLHH_gv_hHRackTextTags[EventPlayer()] != c_textTagNone)) {
TextTagDestroy(libMLHH_gv_hHRackTextTags[EventPlayer()]);
}
TextTagCreate(StringExternal("Param/Value/lib_MLHH_232BD0E2"), 15, PointWithOffset(UnitGetPosition(EventUnit()), 0.0, -2.0), 2.0, true, false, PlayerGroupSingle(EventPlayer()));
TextTagSetTime(TextTagLastCreated(), c_textTagTimeDuration, 2.0);
TextTagSetTime(TextTagLastCreated(), c_textTagTimeFadeOut, 1.75);
TextTagSetTime(TextTagLastCreated(), c_textTagTimeFadeDuration, 0.25);
libMLHH_gv_hHRackTextTags[EventPlayer()] = TextTagLastCreated();
if ((TimerGetRemaining(libMLHH_gv_heroVO_LegendaryFlippedVOTimers[EventPlayer()]) == 0.0)) {
TimerStart(libMLHH_gv_heroVO_LegendaryFlippedVOTimers[EventPlayer()], libMLHH_gv_heroVO_LegendaryFlippedVOTimerCooldown_C, false, c_timeGame);
Wait(0.5, c_timeGame);
libSond_gf_HeroVOPlayHeroLine(libCore_ge_HeroVOEvents_No, EventPlayer(), libCore_gv_playerGroupFromPlayer[EventPlayer()]);
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libMLHH_gt_HHWeaponFlipped_Init () {
libMLHH_gt_HHWeaponFlipped = TriggerCreate("libMLHH_gt_HHWeaponFlipped_Func");
TriggerAddEventUnitClick(libMLHH_gt_HHWeaponFlipped, null, c_playerAny);
}
//--------------------------------------------------------------------------------------------------
// Trigger: HH Core Dies
//--------------------------------------------------------------------------------------------------
bool libMLHH_gt_HHCoreDies_Func (bool testConds, bool runActions) {
// Variable Declarations
int lv_itCount;
point lv_deadCorePosition;
unit lv_livingCore;
int lv_remainingWeaponDrops;
int lv_legendaryDrops;
int lv_setDrops;
int lv_randomWeapon;
playergroup lv_lootRingPlayerGroup;
int lv_lootRingSize;
int lv_lootRingSizeIncrement;
fixed lv_angleOffset;
fixed lv_angleOffsetIncrement;
fixed lv_distance;
fixed lv_distanceIncrement;
int lv_randomLootRingPlayer;
int lv_itPlayer;
fixed lv_treasureDelay;
bool lv_easterEgg;
fixed lv_easterEggDelay;
// Automatic Variable Declarations
int auto2A4549F6_ae;
const int auto2A4549F6_ai = 1;
int auto31ABD6CD_ae;
const int auto31ABD6CD_ai = 1;
int auto04098EA8_ae;
const int auto04098EA8_ai = 1;
int autoD720B40D_ae;
const int autoD720B40D_ai = 1;
int auto80D413D1_ae;
const int auto80D413D1_ai = 1;
// Variable Initialization
lv_deadCorePosition = UnitGetPosition(EventUnit());
lv_livingCore = libGame_gv_teams[libGame_gf_EnemyTeamNumberOfPlayer(EventPlayer())].lv_core;
lv_remainingWeaponDrops = libMLHH_gv_hHLootLoopCount_C;
lv_legendaryDrops = RandomInt(1, 3);
lv_setDrops = RandomInt(1, 2);
lv_lootRingPlayerGroup = PlayerGroupEmpty();
lv_lootRingSize = 15;
lv_angleOffsetIncrement = 12.0;
lv_distance = 5.0;
lv_distanceIncrement = 1.75;
lv_treasureDelay = 0.0625;
// Actions
if (!runActions) {
return true;
}
auto2A4549F6_ae = lv_lootRingSize;
lv_itPlayer = 1;
for ( ; ( (auto2A4549F6_ai >= 0 && lv_itPlayer <= auto2A4549F6_ae) || (auto2A4549F6_ai < 0 && lv_itPlayer >= auto2A4549F6_ae) ) ; lv_itPlayer += auto2A4549F6_ai ) {
PlayerGroupAdd(lv_lootRingPlayerGroup, lv_itPlayer);
}
Wait(2.75, c_timeGame);
auto31ABD6CD_ae = libMLHH_gv_hHLootLoopCount_C;
lv_itCount = 1;
for ( ; ( (auto31ABD6CD_ai >= 0 && lv_itCount <= auto31ABD6CD_ae) || (auto31ABD6CD_ai < 0 && lv_itCount >= auto31ABD6CD_ae) ) ; lv_itCount += auto31ABD6CD_ai ) {
if ((PlayerGroupCount(lv_lootRingPlayerGroup) == 0)) {
lv_lootRingSize += lv_lootRingSizeIncrement;
lv_distance += lv_distanceIncrement;
lv_angleOffset += lv_angleOffsetIncrement;
auto04098EA8_ae = lv_lootRingSize;
lv_itPlayer = 1;
for ( ; ( (auto04098EA8_ai >= 0 && lv_itPlayer <= auto04098EA8_ae) || (auto04098EA8_ai < 0 && lv_itPlayer >= auto04098EA8_ae) ) ; lv_itPlayer += auto04098EA8_ai ) {
PlayerGroupAdd(lv_lootRingPlayerGroup, lv_itPlayer);
}
}
if ((libMLHH_gv_hHWeaponRackBroken == true)) {
if ((lv_livingCore == libGame_gv_teams[libGame_gv_teamOrderIndex_C].lv_core)) {
lv_randomLootRingPlayer = 13;
}
else {
lv_randomLootRingPlayer = 10;
}
PlayerGroupRemove(lv_lootRingPlayerGroup, lv_randomLootRingPlayer);
UnitCreateEffectPoint(lv_livingCore, "LootExplosionTreasureGoblinSet", PointWithOffsetPolar(lv_deadCorePosition, lv_distance, libMLHH_gf_HHDetermineAngle(lv_randomLootRingPlayer, lv_lootRingSize)));
libMLHH_gv_hHWeaponRackBroken = false;
lv_easterEgg = true;
}
else {
lv_randomLootRingPlayer = PlayerGroupPlayer(lv_lootRingPlayerGroup, RandomInt(1, PlayerGroupCount(lv_lootRingPlayerGroup)));
PlayerGroupRemove(lv_lootRingPlayerGroup, lv_randomLootRingPlayer);
UnitCreateEffectPoint(lv_livingCore, "LootExplosionGoldPileSet", PointWithOffsetPolar(lv_deadCorePosition, (lv_distance + RandomFixed(0.0, 0.5)), (libMLHH_gf_HHDetermineAngle(lv_randomLootRingPlayer, lv_lootRingSize) + (lv_angleOffset + RandomFixed(-5.0, 5.0)))));
}
if ((lv_easterEgg == false)) {
Wait(lv_treasureDelay, c_timeGame);
}
if ((PlayerGroupCount(lv_lootRingPlayerGroup) == 0)) {
lv_lootRingSize += lv_lootRingSizeIncrement;
lv_distance += lv_distanceIncrement;
lv_angleOffset += lv_angleOffsetIncrement;
autoD720B40D_ae = lv_lootRingSize;
lv_itPlayer = 1;
for ( ; ( (autoD720B40D_ai >= 0 && lv_itPlayer <= autoD720B40D_ae) || (autoD720B40D_ai < 0 && lv_itPlayer >= autoD720B40D_ae) ) ; lv_itPlayer += autoD720B40D_ai ) {
PlayerGroupAdd(lv_lootRingPlayerGroup, lv_itPlayer);
}
}
lv_randomLootRingPlayer = PlayerGroupPlayer(lv_lootRingPlayerGroup, RandomInt(1, PlayerGroupCount(lv_lootRingPlayerGroup)));
PlayerGroupRemove(lv_lootRingPlayerGroup, lv_randomLootRingPlayer);
lv_randomWeapon = RandomInt(1, lv_remainingWeaponDrops);
if ((lv_randomWeapon <= lv_legendaryDrops)) {
UnitCreateEffectPoint(lv_livingCore, "LootExplosionOrangeWeaponSet", PointWithOffsetPolar(lv_deadCorePosition, (lv_distance + RandomFixed(0.0, 0.5)), (libMLHH_gf_HHDetermineAngle(lv_randomLootRingPlayer, lv_lootRingSize) + (lv_angleOffset + RandomFixed(-5.0, 5.0)))));
lv_legendaryDrops -= 1;
}
else if ((lv_randomWeapon <= (lv_legendaryDrops + lv_setDrops))) {
UnitCreateEffectPoint(lv_livingCore, "LootExplosionGreenWeaponSet", PointWithOffsetPolar(lv_deadCorePosition, (lv_distance + RandomFixed(0.0, 0.5)), (libMLHH_gf_HHDetermineAngle(lv_randomLootRingPlayer, lv_lootRingSize) + (lv_angleOffset + RandomFixed(-5.0, 5.0)))));
lv_setDrops -= 1;
}
else if ((lv_randomWeapon <= lv_remainingWeaponDrops)) {
UnitCreateEffectPoint(lv_livingCore, "LootExplosionBlueWeaponSet", PointWithOffsetPolar(lv_deadCorePosition, (lv_distance + RandomFixed(0.0, 0.5)), (libMLHH_gf_HHDetermineAngle(lv_randomLootRingPlayer, lv_lootRingSize) + (lv_angleOffset + RandomFixed(-5.0, 5.0)))));
}
lv_remainingWeaponDrops -= 1;
if ((lv_easterEgg == false)) {
Wait(lv_treasureDelay, c_timeGame);
}
if ((PlayerGroupCount(lv_lootRingPlayerGroup) == 0)) {
lv_lootRingSize += lv_lootRingSizeIncrement;
lv_distance += lv_distanceIncrement;
lv_angleOffset += lv_angleOffsetIncrement;
auto80D413D1_ae = lv_lootRingSize;
lv_itPlayer = 1;
for ( ; ( (auto80D413D1_ai >= 0 && lv_itPlayer <= auto80D413D1_ae) || (auto80D413D1_ai < 0 && lv_itPlayer >= auto80D413D1_ae) ) ; lv_itPlayer += auto80D413D1_ai ) {
PlayerGroupAdd(lv_lootRingPlayerGroup, lv_itPlayer);
}
}
lv_randomLootRingPlayer = PlayerGroupPlayer(lv_lootRingPlayerGroup, RandomInt(1, PlayerGroupCount(lv_lootRingPlayerGroup)));
PlayerGroupRemove(lv_lootRingPlayerGroup, lv_randomLootRingPlayer);
UnitCreateEffectPoint(lv_livingCore, "LootExplosionGoldPileSet", PointWithOffsetPolar(lv_deadCorePosition, (lv_distance + RandomFixed(0.0, 0.5)), (libMLHH_gf_HHDetermineAngle(lv_randomLootRingPlayer, lv_lootRingSize) + (lv_angleOffset + RandomFixed(-5.0, 5.0)))));
if ((lv_easterEgg == false)) {
Wait(lv_treasureDelay, c_timeGame);
}
else {
if ((lv_easterEggDelay == 0.0)) {
lv_easterEggDelay = 0.0625;
}
else {
Wait(lv_easterEggDelay, c_timeGame);
lv_easterEggDelay = 0.0;
}
}
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libMLHH_gt_HHCoreDies_Init () {
libMLHH_gt_HHCoreDies = TriggerCreate("libMLHH_gt_HHCoreDies_Func");
TriggerAddEventUnitDied(libMLHH_gt_HHCoreDies, UnitRefFromVariable("libGame_gv_teams[libGame_gv_teamOrderIndex_C].lv_core"));
TriggerAddEventUnitDied(libMLHH_gt_HHCoreDies, UnitRefFromVariable("libGame_gv_teams[libGame_gv_teamChaosIndex_C].lv_core"));
}
void libMLHH_InitTriggers () {
libMLHH_gt_DebugGiantDemons_Init();
libMLHH_gt_IncludeHH_Init();
libMLHH_gt_MMHHInit_Init();
libMLHH_gt_HHWeaponRackBroken_Init();
libMLHH_gt_HHWeaponFlipped_Init();
libMLHH_gt_HHCoreDies_Init();
}
//--------------------------------------------------------------------------------------------------
// Library Initialization
//--------------------------------------------------------------------------------------------------
bool libMLHH_InitLib_completed = false;
void libMLHH_InitLib () {
if (libMLHH_InitLib_completed) {
return;
}
libMLHH_InitLib_completed = true;
libMLHH_InitLibraries();
libMLHH_InitVariables();
libMLHH_InitTriggers();
}