mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-01-17 18:55:41 +00:00
Merge remote-tracking branch 'upstream/master' into karazhan
This commit is contained in:
@@ -215,7 +215,7 @@ bool MalygosTargetAction::Execute(Event event)
|
||||
|
||||
// if (!spark->IsInWorld() || spark->GetMapId() != bot->GetMapId())
|
||||
// return false;
|
||||
|
||||
|
||||
// return bot->GetDistance2d(MALYGOS_STACK_POSITION.first, MALYGOS_STACK_POSITION.second) < 3.0f;
|
||||
// }
|
||||
|
||||
|
||||
@@ -76,6 +76,6 @@ float MalygosMultiplier::GetValue(Action* action)
|
||||
return 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
@@ -48,6 +48,6 @@ bool PowerSparkTrigger::IsActive()
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ enum EyeOfEternityIDs
|
||||
NPC_NEXUS_LORD = 30245,
|
||||
NPC_SCION_OF_ETERNITY = 30249,
|
||||
NPC_WYRMREST_SKYTALON = 30161,
|
||||
|
||||
|
||||
SPELL_POWER_SPARK_VISUAL = 55845,
|
||||
SPELL_POWER_SPARK_GROUND_BUFF = 55852,
|
||||
SPELL_POWER_SPARK_MALYGOS_BUFF = 56152,
|
||||
|
||||
@@ -10,7 +10,7 @@ class RaidIccActionContext : public NamedObjectContext<Action>
|
||||
public:
|
||||
RaidIccActionContext()
|
||||
{
|
||||
creators["icc lm tank position"] = &RaidIccActionContext::icc_lm_tank_position;
|
||||
creators["icc lm tank position"] = &RaidIccActionContext::icc_lm_tank_position;
|
||||
creators["icc spike"] = &RaidIccActionContext::icc_spike;
|
||||
|
||||
creators["icc dark reckoning"] = &RaidIccActionContext::icc_dark_reckoning;
|
||||
@@ -62,7 +62,7 @@ public:
|
||||
creators["icc sindragosa blistering cold"] = &RaidIccActionContext::icc_sindragosa_blistering_cold;
|
||||
creators["icc sindragosa unchained magic"] = &RaidIccActionContext::icc_sindragosa_unchained_magic;
|
||||
creators["icc sindragosa chilled to the bone"] = &RaidIccActionContext::icc_sindragosa_chilled_to_the_bone;
|
||||
creators["icc sindragosa mystic buffet"] = &RaidIccActionContext::icc_sindragosa_mystic_buffet;
|
||||
creators["icc sindragosa mystic buffet"] = &RaidIccActionContext::icc_sindragosa_mystic_buffet;
|
||||
creators["icc sindragosa frost bomb"] = &RaidIccActionContext::icc_sindragosa_frost_bomb;
|
||||
creators["icc sindragosa tank swap position"] = &RaidIccActionContext::icc_sindragosa_tank_swap_position;
|
||||
|
||||
@@ -121,11 +121,11 @@ private:
|
||||
static Action* icc_valithria_dream_cloud(PlayerbotAI* ai) { return new IccValithriaDreamCloudAction(ai); }
|
||||
|
||||
static Action* icc_sindragosa_group_position(PlayerbotAI* ai) { return new IccSindragosaGroupPositionAction(ai); }
|
||||
static Action* icc_sindragosa_frost_beacon(PlayerbotAI* ai) { return new IccSindragosaFrostBeaconAction(ai); }
|
||||
static Action* icc_sindragosa_frost_beacon(PlayerbotAI* ai) { return new IccSindragosaFrostBeaconAction(ai); }
|
||||
static Action* icc_sindragosa_blistering_cold(PlayerbotAI* ai) { return new IccSindragosaBlisteringColdAction(ai); }
|
||||
static Action* icc_sindragosa_unchained_magic(PlayerbotAI* ai) { return new IccSindragosaUnchainedMagicAction(ai); }
|
||||
static Action* icc_sindragosa_chilled_to_the_bone(PlayerbotAI* ai) { return new IccSindragosaChilledToTheBoneAction(ai); }
|
||||
static Action* icc_sindragosa_mystic_buffet(PlayerbotAI* ai) { return new IccSindragosaMysticBuffetAction(ai); }
|
||||
static Action* icc_sindragosa_mystic_buffet(PlayerbotAI* ai) { return new IccSindragosaMysticBuffetAction(ai); }
|
||||
static Action* icc_sindragosa_frost_bomb(PlayerbotAI* ai) { return new IccSindragosaFrostBombAction(ai); }
|
||||
static Action* icc_sindragosa_tank_swap_position(PlayerbotAI* ai) { return new IccSindragosaTankSwapPositionAction(ai); }
|
||||
|
||||
|
||||
@@ -1690,7 +1690,7 @@ bool IccRotfaceTankPositionAction::PositionMainTankAndMelee(Unit* boss)
|
||||
if (!isBossCasting && (bot->GetExactDist2d(ICC_ROTFACE_CENTER_POSITION) < 2.0f || bot->GetExactDist2d(ICC_ROTFACE_CENTER_POSITION) > 7.0f) && !botAI->IsTank(bot))
|
||||
{
|
||||
MoveTo(bot->GetMapId(), ICC_ROTFACE_CENTER_POSITION.GetPositionX(), ICC_ROTFACE_CENTER_POSITION.GetPositionY(),
|
||||
bot->GetPositionZ(), false, false, false, true, MovementPriority::MOVEMENT_COMBAT);
|
||||
bot->GetPositionZ(), false, false, false, true, MovementPriority::MOVEMENT_COMBAT);
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -2047,7 +2047,7 @@ bool IccRotfaceGroupPositionAction::PositionRangedAndHealers(Unit* boss,Unit *sm
|
||||
bot->GetExactDist2d(boss->GetPositionX(), boss->GetPositionY()) > 5.0f))
|
||||
{
|
||||
MoveTo(bot->GetMapId(), boss->GetPositionX(), boss->GetPositionY(),
|
||||
bot->GetPositionZ(), false, false, false, true, MovementPriority::MOVEMENT_COMBAT);
|
||||
bot->GetPositionZ(), false, false, false, true, MovementPriority::MOVEMENT_COMBAT);
|
||||
}
|
||||
|
||||
if (!isHeroic)
|
||||
@@ -5168,7 +5168,7 @@ bool IccValithriaGroupAction::Handle25ManGroupLogic()
|
||||
if (botAI->IsTank(bot) || botAI->IsDps(bot))
|
||||
HandleMarkingLogic(inGroup1, inGroup2, group1Pos, group2Pos);
|
||||
|
||||
|
||||
|
||||
// Movement logic for non-healers
|
||||
if (!botAI->IsHeal(bot))
|
||||
{
|
||||
@@ -5190,7 +5190,7 @@ bool IccValithriaGroupAction::Handle25ManGroupLogic()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -5615,7 +5615,7 @@ bool IccValithriaDreamCloudAction::Execute(Event event)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// All stacked: leader (lowest guid) moves to next cloud, others follow and stack at leader's new position
|
||||
// Find all dream and nightmare clouds
|
||||
GuidVector npcs = AI_VALUE(GuidVector, "nearest hostile npcs");
|
||||
@@ -6104,7 +6104,7 @@ bool IccSindragosaTankSwapPositionAction::Execute(Event event)
|
||||
return false;
|
||||
|
||||
float distToTankPos = bot->GetExactDist2d(ICC_SINDRAGOSA_TANK_POSITION);
|
||||
|
||||
|
||||
// Move to tank position
|
||||
if (distToTankPos > 3.0f) // Tighter tolerance for tank swap
|
||||
{
|
||||
@@ -6305,7 +6305,7 @@ bool IccSindragosaFrostBeaconAction::HandleNonBeaconedPlayer(const Unit* boss)
|
||||
const bool isRanged = botAI->IsRanged(bot) || (bot->GetExactDist2d(ICC_SINDRAGOSA_RANGED_POSITION.GetPositionX(),ICC_SINDRAGOSA_RANGED_POSITION.GetPositionY()) <
|
||||
bot->GetExactDist2d(ICC_SINDRAGOSA_MELEE_POSITION.GetPositionX(),ICC_SINDRAGOSA_MELEE_POSITION.GetPositionY()));
|
||||
|
||||
const Position& targetPosition = isRanged ? ICC_SINDRAGOSA_RANGED_POSITION : ICC_SINDRAGOSA_MELEE_POSITION;
|
||||
const Position& targetPosition = isRanged ? ICC_SINDRAGOSA_RANGED_POSITION : ICC_SINDRAGOSA_MELEE_POSITION;
|
||||
|
||||
const float deltaX = std::abs(targetPosition.GetPositionX() - bot->GetPositionX());
|
||||
const float deltaY = std::abs(targetPosition.GetPositionY() - bot->GetPositionY());
|
||||
@@ -6374,7 +6374,7 @@ bool IccSindragosaBlisteringColdAction::Execute(Event event)
|
||||
|
||||
float const STEP_SIZE = 15.0f;
|
||||
float distToTarget = bot->GetDistance2d(targetPos.GetPositionX(), targetPos.GetPositionY());
|
||||
|
||||
|
||||
if (distToTarget > 0.1f) // Avoid division by zero
|
||||
{
|
||||
if (!bot->HasAura(SPELL_NITRO_BOOSTS))
|
||||
@@ -6382,12 +6382,12 @@ bool IccSindragosaBlisteringColdAction::Execute(Event event)
|
||||
// Calculate direction vector
|
||||
float dirX = targetPos.GetPositionX() - bot->GetPositionX();
|
||||
float dirY = targetPos.GetPositionY() - bot->GetPositionY();
|
||||
|
||||
|
||||
// Normalize direction vector
|
||||
float length = sqrt(dirX * dirX + dirY * dirY);
|
||||
dirX /= length;
|
||||
dirY /= length;
|
||||
|
||||
|
||||
// Move STEP_SIZE yards in that direction
|
||||
float moveX = bot->GetPositionX() + dirX * STEP_SIZE;
|
||||
float moveY = bot->GetPositionY() + dirY * STEP_SIZE;
|
||||
@@ -6441,7 +6441,7 @@ bool IccSindragosaChilledToTheBoneAction::Execute(Event event)
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IccSindragosaMysticBuffetAction::Execute(Event event)
|
||||
@@ -6517,7 +6517,7 @@ bool IccSindragosaMysticBuffetAction::Execute(Event event)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
botAI->Reset();
|
||||
// Move to LOS2 position
|
||||
@@ -7874,7 +7874,7 @@ bool IccLichKingAddsAction::Execute(Event event)
|
||||
}
|
||||
}
|
||||
//-----------Valkyr bot suicide if group fails to kill Valkyr in time------------- comment out if you dont want it
|
||||
|
||||
|
||||
// Handle teleportation fixes
|
||||
HandleTeleportationFixes(diff, terenasMenethilHC);
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ const Position ICC_SINDRAGOSA_UNCHAINEDMAGIC2_POSITION = Position(4461.3945f, 24
|
||||
const Position ICC_SINDRAGOSA_UNCHAINEDMAGIC3_POSITION = Position(4473.6616f, 2484.8489f, 203.38258f);
|
||||
const Position ICC_SINDRAGOSA_UNCHAINEDMAGIC4_POSITION = Position(4459.9336f, 2507.409f, 203.38606f);
|
||||
const Position ICC_SINDRAGOSA_UNCHAINEDMAGIC5_POSITION = Position(4442.3096f, 2512.4688f, 203.38647f);
|
||||
const Position ICC_SINDRAGOSA_CENTER_POSITION = Position(4408.0464f, 2484.478f, 203.37529f);
|
||||
const Position ICC_SINDRAGOSA_CENTER_POSITION = Position(4408.0464f, 2484.478f, 203.37529f);
|
||||
const Position ICC_SINDRAGOSA_THOMBMB2_POSITION = Position(4436.895f, 2498.1401f, 203.38133f);
|
||||
const Position ICC_SINDRAGOSA_FBOMB_POSITION = Position(4449.3647f, 2486.4524f, 203.379f);
|
||||
const Position ICC_SINDRAGOSA_FBOMB10_POSITION = Position(4449.3647f, 2486.4524f, 203.379f);
|
||||
@@ -77,11 +77,11 @@ const Position ICC_LICH_KING_ADDS_POSITION = Position(476.7332f, -2095.3894f, 84
|
||||
const Position ICC_LICH_KING_MELEE_POSITION = Position(503.5546f, -2106.8213f, 840.857f);
|
||||
const Position ICC_LICH_KING_RANGED_POSITION = Position(501.3563f, -2085.1816f, 840.857f);
|
||||
const Position ICC_LICH_KING_ASSISTHC_POSITION = Position(517.2145f, -2125.0674f, 840.857f);
|
||||
const Position ICC_LK_FROST1_POSITION = Position(503.96548f, -2183.216f, 840.857f);
|
||||
const Position ICC_LK_FROST2_POSITION = Position(563.07166f, -2125.7578f, 840.857f);
|
||||
const Position ICC_LK_FROST3_POSITION = Position(503.40182f, -2067.3435f, 840.857f);
|
||||
const Position ICC_LK_FROSTR1_POSITION = Position(481.168f, -2177.8723f, 840.857f);
|
||||
const Position ICC_LK_FROSTR2_POSITION = Position(562.20807f, -2100.2393f, 840.857f);
|
||||
const Position ICC_LK_FROST1_POSITION = Position(503.96548f, -2183.216f, 840.857f);
|
||||
const Position ICC_LK_FROST2_POSITION = Position(563.07166f, -2125.7578f, 840.857f);
|
||||
const Position ICC_LK_FROST3_POSITION = Position(503.40182f, -2067.3435f, 840.857f);
|
||||
const Position ICC_LK_FROSTR1_POSITION = Position(481.168f, -2177.8723f, 840.857f);
|
||||
const Position ICC_LK_FROSTR2_POSITION = Position(562.20807f, -2100.2393f, 840.857f);
|
||||
const Position ICC_LK_FROSTR3_POSITION = Position(526.35297f, -2071.0317f, 840.857f);
|
||||
|
||||
//Lord Marrogwar
|
||||
@@ -95,7 +95,7 @@ public:
|
||||
bool MoveTowardPosition(const Position& position, float incrementSize);
|
||||
};
|
||||
|
||||
class IccSpikeAction : public AttackAction
|
||||
class IccSpikeAction : public AttackAction
|
||||
{
|
||||
public:
|
||||
IccSpikeAction(PlayerbotAI* botAI) : AttackAction(botAI, "icc spike") {}
|
||||
@@ -289,10 +289,10 @@ public:
|
||||
bool FindAndMoveFromClosestMember(Unit* boss, Unit* smallOoze);
|
||||
};
|
||||
|
||||
class IccRotfaceMoveAwayFromExplosionAction : public MovementAction
|
||||
class IccRotfaceMoveAwayFromExplosionAction : public MovementAction
|
||||
{
|
||||
public:
|
||||
IccRotfaceMoveAwayFromExplosionAction(PlayerbotAI* botAI, std::string const name = "icc rotface move away from explosion")
|
||||
IccRotfaceMoveAwayFromExplosionAction(PlayerbotAI* botAI, std::string const name = "icc rotface move away from explosion")
|
||||
: MovementAction(botAI, name) {}
|
||||
bool Execute(Event event) override;
|
||||
|
||||
@@ -362,7 +362,7 @@ public:
|
||||
class IccBpcKelesethTankAction : public AttackAction
|
||||
{
|
||||
public:
|
||||
IccBpcKelesethTankAction(PlayerbotAI* botAI)
|
||||
IccBpcKelesethTankAction(PlayerbotAI* botAI)
|
||||
: AttackAction(botAI, "icc bpc keleseth tank") {}
|
||||
bool Execute(Event event) override;
|
||||
};
|
||||
@@ -370,7 +370,7 @@ public:
|
||||
class IccBpcMainTankAction : public AttackAction
|
||||
{
|
||||
public:
|
||||
IccBpcMainTankAction(PlayerbotAI* botAI)
|
||||
IccBpcMainTankAction(PlayerbotAI* botAI)
|
||||
: AttackAction(botAI, "icc bpc main tank") {}
|
||||
bool Execute(Event event) override;
|
||||
|
||||
@@ -380,7 +380,7 @@ public:
|
||||
class IccBpcEmpoweredVortexAction : public MovementAction
|
||||
{
|
||||
public:
|
||||
IccBpcEmpoweredVortexAction(PlayerbotAI* botAI)
|
||||
IccBpcEmpoweredVortexAction(PlayerbotAI* botAI)
|
||||
: MovementAction(botAI, "icc bpc empowered vortex") {}
|
||||
bool Execute(Event event) override;
|
||||
|
||||
@@ -391,7 +391,7 @@ public:
|
||||
class IccBpcKineticBombAction : public AttackAction
|
||||
{
|
||||
public:
|
||||
IccBpcKineticBombAction(PlayerbotAI* botAI)
|
||||
IccBpcKineticBombAction(PlayerbotAI* botAI)
|
||||
: AttackAction(botAI, "icc bpc kinetic bomb") {}
|
||||
bool Execute(Event event) override;
|
||||
|
||||
@@ -411,7 +411,7 @@ public:
|
||||
class IccBqlGroupPositionAction : public AttackAction
|
||||
{
|
||||
public:
|
||||
IccBqlGroupPositionAction(PlayerbotAI* botAI)
|
||||
IccBqlGroupPositionAction(PlayerbotAI* botAI)
|
||||
: AttackAction(botAI, "icc group tank position") {}
|
||||
bool Execute(Event event) override;
|
||||
|
||||
@@ -429,16 +429,16 @@ private:
|
||||
int curveIdx = 0;
|
||||
bool foundSafe = false;
|
||||
float minDist = 0.0f;
|
||||
float score = 0.0f;
|
||||
float score = 0.0f;
|
||||
Position closestPoint;
|
||||
float t_closest = 0.0f;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class IccBqlPactOfDarkfallenAction : public MovementAction
|
||||
{
|
||||
public:
|
||||
IccBqlPactOfDarkfallenAction(PlayerbotAI* botAI)
|
||||
IccBqlPactOfDarkfallenAction(PlayerbotAI* botAI)
|
||||
: MovementAction(botAI, "icc bql pact of darkfallen") {}
|
||||
bool Execute(Event event) override;
|
||||
|
||||
@@ -449,7 +449,7 @@ public:
|
||||
class IccBqlVampiricBiteAction : public AttackAction
|
||||
{
|
||||
public:
|
||||
IccBqlVampiricBiteAction(PlayerbotAI* botAI)
|
||||
IccBqlVampiricBiteAction(PlayerbotAI* botAI)
|
||||
: AttackAction(botAI, "icc bql vampiric bite") {}
|
||||
bool Execute(Event event) override;
|
||||
|
||||
@@ -463,15 +463,15 @@ public:
|
||||
class IccValkyreSpearAction : public AttackAction
|
||||
{
|
||||
public:
|
||||
IccValkyreSpearAction(PlayerbotAI* botAI)
|
||||
IccValkyreSpearAction(PlayerbotAI* botAI)
|
||||
: AttackAction(botAI, "icc valkyre spear") {}
|
||||
bool Execute(Event event) override;
|
||||
};
|
||||
|
||||
|
||||
class IccSisterSvalnaAction : public AttackAction
|
||||
{
|
||||
public:
|
||||
IccSisterSvalnaAction(PlayerbotAI* botAI)
|
||||
IccSisterSvalnaAction(PlayerbotAI* botAI)
|
||||
: AttackAction(botAI, "icc sister svalna") {}
|
||||
bool Execute(Event event) override;
|
||||
};
|
||||
@@ -494,7 +494,7 @@ public:
|
||||
class IccValithriaPortalAction : public MovementAction
|
||||
{
|
||||
public:
|
||||
IccValithriaPortalAction(PlayerbotAI* botAI)
|
||||
IccValithriaPortalAction(PlayerbotAI* botAI)
|
||||
: MovementAction(botAI, "icc valithria portal") {}
|
||||
bool Execute(Event event) override;
|
||||
};
|
||||
@@ -502,7 +502,7 @@ public:
|
||||
class IccValithriaHealAction : public AttackAction
|
||||
{
|
||||
public:
|
||||
IccValithriaHealAction(PlayerbotAI* botAI)
|
||||
IccValithriaHealAction(PlayerbotAI* botAI)
|
||||
: AttackAction(botAI, "icc valithria heal") {}
|
||||
bool Execute(Event event) override;
|
||||
};
|
||||
@@ -510,7 +510,7 @@ public:
|
||||
class IccValithriaDreamCloudAction : public MovementAction
|
||||
{
|
||||
public:
|
||||
IccValithriaDreamCloudAction(PlayerbotAI* botAI)
|
||||
IccValithriaDreamCloudAction(PlayerbotAI* botAI)
|
||||
: MovementAction(botAI, "icc valithria dream cloud") {}
|
||||
bool Execute(Event event) override;
|
||||
};
|
||||
@@ -519,7 +519,7 @@ public:
|
||||
class IccSindragosaGroupPositionAction : public AttackAction
|
||||
{
|
||||
public:
|
||||
IccSindragosaGroupPositionAction(PlayerbotAI* botAI)
|
||||
IccSindragosaGroupPositionAction(PlayerbotAI* botAI)
|
||||
: AttackAction(botAI, "icc sindragosa group position") {}
|
||||
bool Execute(Event event) override;
|
||||
|
||||
@@ -531,7 +531,7 @@ public:
|
||||
class IccSindragosaFrostBeaconAction : public MovementAction
|
||||
{
|
||||
public:
|
||||
IccSindragosaFrostBeaconAction(PlayerbotAI* botAI)
|
||||
IccSindragosaFrostBeaconAction(PlayerbotAI* botAI)
|
||||
: MovementAction(botAI, "icc sindragosa frost beacon") {}
|
||||
bool Execute(Event event) override;
|
||||
|
||||
@@ -554,7 +554,7 @@ public:
|
||||
class IccSindragosaBlisteringColdAction : public MovementAction
|
||||
{
|
||||
public:
|
||||
IccSindragosaBlisteringColdAction(PlayerbotAI* botAI)
|
||||
IccSindragosaBlisteringColdAction(PlayerbotAI* botAI)
|
||||
: MovementAction(botAI, "icc sindragosa blistering cold") {}
|
||||
bool Execute(Event event) override;
|
||||
};
|
||||
@@ -562,7 +562,7 @@ public:
|
||||
class IccSindragosaUnchainedMagicAction : public AttackAction
|
||||
{
|
||||
public:
|
||||
IccSindragosaUnchainedMagicAction(PlayerbotAI* botAI)
|
||||
IccSindragosaUnchainedMagicAction(PlayerbotAI* botAI)
|
||||
: AttackAction(botAI, "icc sindragosa unchained magic") {}
|
||||
bool Execute(Event event) override;
|
||||
};
|
||||
@@ -570,15 +570,15 @@ public:
|
||||
class IccSindragosaChilledToTheBoneAction : public AttackAction
|
||||
{
|
||||
public:
|
||||
IccSindragosaChilledToTheBoneAction(PlayerbotAI* botAI)
|
||||
IccSindragosaChilledToTheBoneAction(PlayerbotAI* botAI)
|
||||
: AttackAction(botAI, "icc sindragosa chilled to the bone") {}
|
||||
bool Execute(Event event) override;
|
||||
};
|
||||
};
|
||||
|
||||
class IccSindragosaMysticBuffetAction : public MovementAction
|
||||
{
|
||||
public:
|
||||
IccSindragosaMysticBuffetAction(PlayerbotAI* botAI)
|
||||
IccSindragosaMysticBuffetAction(PlayerbotAI* botAI)
|
||||
: MovementAction(botAI, "icc sindragosa mystic buffet") {}
|
||||
bool Execute(Event event) override;
|
||||
};
|
||||
@@ -586,15 +586,15 @@ public:
|
||||
class IccSindragosaFrostBombAction : public MovementAction
|
||||
{
|
||||
public:
|
||||
IccSindragosaFrostBombAction(PlayerbotAI* botAI)
|
||||
IccSindragosaFrostBombAction(PlayerbotAI* botAI)
|
||||
: MovementAction(botAI, "icc sindragosa frost bomb") {}
|
||||
bool Execute(Event event) override;
|
||||
};
|
||||
|
||||
class IccSindragosaTankSwapPositionAction : public AttackAction
|
||||
class IccSindragosaTankSwapPositionAction : public AttackAction
|
||||
{
|
||||
public:
|
||||
IccSindragosaTankSwapPositionAction(PlayerbotAI* botAI)
|
||||
IccSindragosaTankSwapPositionAction(PlayerbotAI* botAI)
|
||||
: AttackAction(botAI, "sindragosa tank swap position") {}
|
||||
bool Execute(Event event) override;
|
||||
};
|
||||
@@ -604,7 +604,7 @@ class IccSindragosaTankSwapPositionAction : public AttackAction
|
||||
class IccLichKingShadowTrapAction : public MovementAction
|
||||
{
|
||||
public:
|
||||
IccLichKingShadowTrapAction(PlayerbotAI* botAI)
|
||||
IccLichKingShadowTrapAction(PlayerbotAI* botAI)
|
||||
: MovementAction(botAI, "icc lich king shadow trap") {}
|
||||
bool Execute(Event event) override;
|
||||
};
|
||||
@@ -612,7 +612,7 @@ class IccLichKingShadowTrapAction : public MovementAction
|
||||
class IccLichKingNecroticPlagueAction : public MovementAction
|
||||
{
|
||||
public:
|
||||
IccLichKingNecroticPlagueAction(PlayerbotAI* botAI)
|
||||
IccLichKingNecroticPlagueAction(PlayerbotAI* botAI)
|
||||
: MovementAction(botAI, "icc lich king necrotic plague") {}
|
||||
bool Execute(Event event) override;
|
||||
};
|
||||
@@ -620,7 +620,7 @@ class IccLichKingNecroticPlagueAction : public MovementAction
|
||||
class IccLichKingWinterAction : public AttackAction
|
||||
{
|
||||
public:
|
||||
IccLichKingWinterAction(PlayerbotAI* botAI)
|
||||
IccLichKingWinterAction(PlayerbotAI* botAI)
|
||||
: AttackAction(botAI, "icc lich king winter") {}
|
||||
bool Execute(Event event) override;
|
||||
|
||||
@@ -643,7 +643,7 @@ class IccLichKingWinterAction : public AttackAction
|
||||
class IccLichKingAddsAction : public AttackAction
|
||||
{
|
||||
public:
|
||||
IccLichKingAddsAction(PlayerbotAI* botAI)
|
||||
IccLichKingAddsAction(PlayerbotAI* botAI)
|
||||
: AttackAction(botAI, "icc lich king adds") {}
|
||||
bool Execute(Event event) override;
|
||||
|
||||
|
||||
@@ -176,8 +176,8 @@ float IccRotfaceMultiplier::GetValue(Action* action)
|
||||
if (dynamic_cast<CastBlinkBackAction*>(action))
|
||||
return 0.0f;
|
||||
|
||||
if (botAI->IsAssistTank(bot) && (dynamic_cast<AttackRtiTargetAction*>(action) || dynamic_cast<TankAssistAction*>(action)))
|
||||
return 0.0f;
|
||||
if (botAI->IsAssistTank(bot) && (dynamic_cast<AttackRtiTargetAction*>(action) || dynamic_cast<TankAssistAction*>(action)))
|
||||
return 0.0f;
|
||||
|
||||
Unit* boss = AI_VALUE2(Unit*, "find target", "big ooze");
|
||||
if (!boss)
|
||||
@@ -185,7 +185,7 @@ float IccRotfaceMultiplier::GetValue(Action* action)
|
||||
|
||||
static std::map<ObjectGuid, uint32> lastExplosionTimes;
|
||||
static std::map<ObjectGuid, bool> hasMoved;
|
||||
|
||||
|
||||
ObjectGuid botGuid = bot->GetGUID();
|
||||
|
||||
// When cast starts, record the time
|
||||
@@ -313,7 +313,7 @@ float IccBpcAssistMultiplier::GetValue(Action* action)
|
||||
return 0.0f;
|
||||
|
||||
Aura* aura = botAI->GetAura("Shadow Prison", bot, false, true);
|
||||
if (aura)
|
||||
if (aura)
|
||||
{
|
||||
if (aura->GetStackAmount() > 18 && botAI->IsTank(bot))
|
||||
{
|
||||
@@ -642,8 +642,8 @@ float IccSindragosaMultiplier::GetValue(Action* action)
|
||||
return 1.0f;
|
||||
|
||||
if (dynamic_cast<FollowAction*>(action) || dynamic_cast<IccSindragosaBlisteringColdAction*>(action) ||
|
||||
dynamic_cast<IccSindragosaChilledToTheBoneAction*>(action) || dynamic_cast<IccSindragosaMysticBuffetAction*>(action) ||
|
||||
dynamic_cast<IccSindragosaFrostBeaconAction*>(action) || dynamic_cast<IccSindragosaUnchainedMagicAction*>(action) ||
|
||||
dynamic_cast<IccSindragosaChilledToTheBoneAction*>(action) || dynamic_cast<IccSindragosaMysticBuffetAction*>(action) ||
|
||||
dynamic_cast<IccSindragosaFrostBeaconAction*>(action) || dynamic_cast<IccSindragosaUnchainedMagicAction*>(action) ||
|
||||
dynamic_cast<FleeAction*>(action) || dynamic_cast<CastDisengageAction*>(action) || dynamic_cast<PetAttackAction*>(action) ||
|
||||
dynamic_cast<IccSindragosaGroupPositionAction*>(action) || dynamic_cast<TankAssistAction*>(action) ||
|
||||
dynamic_cast<DpsAoeAction*>(action) || dynamic_cast<CastHurricaneAction*>(action) ||
|
||||
|
||||
@@ -71,7 +71,7 @@ public:
|
||||
class IccBqlMultiplier : public Multiplier
|
||||
{
|
||||
public:
|
||||
IccBqlMultiplier(PlayerbotAI* botAI) : Multiplier(botAI, "icc bql multiplier") {}
|
||||
IccBqlMultiplier(PlayerbotAI* botAI) : Multiplier(botAI, "icc bql multiplier") {}
|
||||
virtual float GetValue(Action* action) override;
|
||||
};
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ void RaidIccStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
triggers.push_back(new TriggerNode("icc dark reckoning",
|
||||
NextAction::array(0, new NextAction("icc dark reckoning", ACTION_MOVE + 5), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode("icc lady deathwhisper",
|
||||
triggers.push_back(new TriggerNode("icc lady deathwhisper",
|
||||
NextAction::array(0, new NextAction("icc ranged position lady deathwhisper", ACTION_MOVE + 2),
|
||||
new NextAction("icc adds lady deathwhisper", ACTION_RAID + 3),
|
||||
new NextAction("icc shade lady deathwhisper", ACTION_RAID + 4), nullptr)));
|
||||
@@ -30,7 +30,7 @@ void RaidIccStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
|
||||
triggers.push_back(new TriggerNode("icc gunship teleport ally",
|
||||
NextAction::array(0, new NextAction("icc gunship teleport ally", ACTION_RAID + 4), nullptr)));
|
||||
|
||||
|
||||
triggers.push_back(new TriggerNode("icc gunship teleport horde",
|
||||
NextAction::array(0, new NextAction("icc gunship teleport horde", ACTION_RAID + 4), nullptr)));
|
||||
|
||||
@@ -38,24 +38,24 @@ void RaidIccStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
triggers.push_back(new TriggerNode("icc dbs",
|
||||
NextAction::array(0, new NextAction("icc dbs tank position", ACTION_RAID + 3),
|
||||
new NextAction("icc adds dbs", ACTION_RAID + 5), nullptr)));
|
||||
|
||||
|
||||
triggers.push_back(new TriggerNode("icc dbs main tank rune of blood",
|
||||
NextAction::array(0, new NextAction("taunt spell", ACTION_EMERGENCY + 4), nullptr)));
|
||||
|
||||
|
||||
//DOGS
|
||||
triggers.push_back(new TriggerNode("icc stinky precious main tank mortal wound",
|
||||
NextAction::array(0, new NextAction("taunt spell", ACTION_EMERGENCY + 4), nullptr)));
|
||||
|
||||
|
||||
//FESTERGUT
|
||||
triggers.push_back(new TriggerNode("icc festergut group position",
|
||||
NextAction::array(0, new NextAction("icc festergut group position", ACTION_MOVE + 4), nullptr)));
|
||||
|
||||
|
||||
triggers.push_back(new TriggerNode("icc festergut main tank gastric bloat",
|
||||
NextAction::array(0, new NextAction("taunt spell", ACTION_EMERGENCY + 6), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode("icc festergut spore",
|
||||
NextAction::array(0, new NextAction("icc festergut spore", ACTION_MOVE + 5), nullptr)));
|
||||
|
||||
|
||||
//ROTFACE
|
||||
triggers.push_back(new TriggerNode("icc rotface tank position",
|
||||
NextAction::array(0, new NextAction("icc rotface tank position", ACTION_RAID + 5), nullptr)));
|
||||
@@ -97,7 +97,7 @@ void RaidIccStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
|
||||
triggers.push_back(new TriggerNode("icc bpc ball of flame",
|
||||
NextAction::array(0, new NextAction("icc bpc ball of flame", ACTION_RAID + 7), nullptr)));
|
||||
|
||||
|
||||
//BQL
|
||||
triggers.push_back(new TriggerNode("icc bql group position",
|
||||
NextAction::array(0, new NextAction("icc bql group position", ACTION_RAID), nullptr)));
|
||||
@@ -123,7 +123,7 @@ void RaidIccStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
triggers.push_back(new TriggerNode("icc valithria portal",
|
||||
NextAction::array(0, new NextAction("icc valithria portal", ACTION_RAID + 5), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode("icc valithria heal",
|
||||
triggers.push_back(new TriggerNode("icc valithria heal",
|
||||
NextAction::array(0, new NextAction("icc valithria heal", ACTION_RAID+2), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode("icc valithria dream cloud",
|
||||
@@ -131,19 +131,19 @@ void RaidIccStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
|
||||
//SINDRAGOSA
|
||||
triggers.push_back(new TriggerNode("icc sindragosa group position",
|
||||
NextAction::array(0, new NextAction("icc sindragosa group position", ACTION_RAID + 1), nullptr)));
|
||||
NextAction::array(0, new NextAction("icc sindragosa group position", ACTION_RAID + 1), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode("icc sindragosa frost beacon",
|
||||
NextAction::array(0, new NextAction("icc sindragosa frost beacon", ACTION_RAID + 5), nullptr)));
|
||||
NextAction::array(0, new NextAction("icc sindragosa frost beacon", ACTION_RAID + 5), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode("icc sindragosa blistering cold",
|
||||
NextAction::array(0, new NextAction("icc sindragosa blistering cold", ACTION_EMERGENCY + 4), nullptr)));
|
||||
NextAction::array(0, new NextAction("icc sindragosa blistering cold", ACTION_EMERGENCY + 4), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode("icc sindragosa unchained magic",
|
||||
NextAction::array(0, new NextAction("icc sindragosa unchained magic", ACTION_RAID + 2), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode("icc sindragosa chilled to the bone",
|
||||
NextAction::array(0, new NextAction("icc sindragosa chilled to the bone", ACTION_RAID + 2), nullptr)));
|
||||
NextAction::array(0, new NextAction("icc sindragosa chilled to the bone", ACTION_RAID + 2), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode("icc sindragosa mystic buffet",
|
||||
NextAction::array(0, new NextAction("icc sindragosa mystic buffet", ACTION_RAID + 3), nullptr)));
|
||||
|
||||
@@ -58,9 +58,9 @@ public:
|
||||
creators["icc valithria heal"] = &RaidIccTriggerContext::icc_valithria_heal;
|
||||
creators["icc valithria dream cloud"] = &RaidIccTriggerContext::icc_valithria_dream_cloud;
|
||||
|
||||
creators["icc sindragosa group position"] = &RaidIccTriggerContext::icc_sindragosa_group_position;
|
||||
creators["icc sindragosa group position"] = &RaidIccTriggerContext::icc_sindragosa_group_position;
|
||||
creators["icc sindragosa frost beacon"] = &RaidIccTriggerContext::icc_sindragosa_frost_beacon;
|
||||
creators["icc sindragosa blistering cold"] = &RaidIccTriggerContext::icc_sindragosa_blistering_cold;
|
||||
creators["icc sindragosa blistering cold"] = &RaidIccTriggerContext::icc_sindragosa_blistering_cold;
|
||||
creators["icc sindragosa unchained magic"] = &RaidIccTriggerContext::icc_sindragosa_unchained_magic;
|
||||
creators["icc sindragosa chilled to the bone"] = &RaidIccTriggerContext::icc_sindragosa_chilled_to_the_bone;
|
||||
creators["icc sindragosa mystic buffet"] = &RaidIccTriggerContext::icc_sindragosa_mystic_buffet;
|
||||
@@ -99,7 +99,7 @@ private:
|
||||
static Trigger* icc_rotface_group_position(PlayerbotAI* ai) { return new IccRotfaceGroupPositionTrigger(ai); }
|
||||
static Trigger* icc_rotface_move_away_from_explosion(PlayerbotAI* ai) { return new IccRotfaceMoveAwayFromExplosionTrigger(ai); }
|
||||
|
||||
static Trigger* icc_putricide_volatile_ooze(PlayerbotAI* ai) { return new IccPutricideVolatileOozeTrigger(ai); }
|
||||
static Trigger* icc_putricide_volatile_ooze(PlayerbotAI* ai) { return new IccPutricideVolatileOozeTrigger(ai); }
|
||||
static Trigger* icc_putricide_gas_cloud(PlayerbotAI* ai) { return new IccPutricideGasCloudTrigger(ai); }
|
||||
static Trigger* icc_putricide_growing_ooze_puddle(PlayerbotAI* ai) { return new IccPutricideGrowingOozePuddleTrigger(ai); }
|
||||
static Trigger* icc_putricide_main_tank_mutated_plague(PlayerbotAI* ai) { return new IccPutricideMainTankMutatedPlagueTrigger(ai); }
|
||||
@@ -123,9 +123,9 @@ private:
|
||||
static Trigger* icc_valithria_heal(PlayerbotAI* ai) { return new IccValithriaHealTrigger(ai); }
|
||||
static Trigger* icc_valithria_dream_cloud(PlayerbotAI* ai) { return new IccValithriaDreamCloudTrigger(ai); }
|
||||
|
||||
static Trigger* icc_sindragosa_group_position(PlayerbotAI* ai) { return new IccSindragosaGroupPositionTrigger(ai); }
|
||||
static Trigger* icc_sindragosa_frost_beacon(PlayerbotAI* ai) { return new IccSindragosaFrostBeaconTrigger(ai); }
|
||||
static Trigger* icc_sindragosa_blistering_cold(PlayerbotAI* ai) { return new IccSindragosaBlisteringColdTrigger(ai); }
|
||||
static Trigger* icc_sindragosa_group_position(PlayerbotAI* ai) { return new IccSindragosaGroupPositionTrigger(ai); }
|
||||
static Trigger* icc_sindragosa_frost_beacon(PlayerbotAI* ai) { return new IccSindragosaFrostBeaconTrigger(ai); }
|
||||
static Trigger* icc_sindragosa_blistering_cold(PlayerbotAI* ai) { return new IccSindragosaBlisteringColdTrigger(ai); }
|
||||
static Trigger* icc_sindragosa_unchained_magic(PlayerbotAI* ai) { return new IccSindragosaUnchainedMagicTrigger(ai); }
|
||||
static Trigger* icc_sindragosa_chilled_to_the_bone(PlayerbotAI* ai) { return new IccSindragosaChilledToTheBoneTrigger(ai); }
|
||||
static Trigger* icc_sindragosa_mystic_buffet(PlayerbotAI* ai) { return new IccSindragosaMysticBuffetTrigger(ai); }
|
||||
@@ -137,7 +137,7 @@ private:
|
||||
static Trigger* icc_lich_king_necrotic_plague(PlayerbotAI* ai) { return new IccLichKingNecroticPlagueTrigger(ai); }
|
||||
static Trigger* icc_lich_king_winter(PlayerbotAI* ai) { return new IccLichKingWinterTrigger(ai); }
|
||||
static Trigger* icc_lich_king_adds(PlayerbotAI* ai) { return new IccLichKingAddsTrigger(ai); }
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -30,7 +30,7 @@ bool IccLmTrigger::IsActive()
|
||||
//Lady Deathwhisper
|
||||
bool IccDarkReckoningTrigger::IsActive()
|
||||
{
|
||||
if (bot->HasAura(SPELL_DARK_RECKONING))
|
||||
if (bot->HasAura(SPELL_DARK_RECKONING))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
@@ -39,7 +39,7 @@ bool IccDarkReckoningTrigger::IsActive()
|
||||
bool IccLadyDeathwhisperTrigger::IsActive()
|
||||
{
|
||||
Unit* boss = AI_VALUE2(Unit*, "find target", "lady deathwhisper");
|
||||
if (!boss)
|
||||
if (!boss)
|
||||
return false;
|
||||
|
||||
if (bot->HasAura(SPELL_EXPERIENCED))
|
||||
@@ -89,7 +89,7 @@ bool IccGunshipCannonNearTrigger::IsActive()
|
||||
// Player* master = botAI->GetMaster();
|
||||
// if (!master)
|
||||
// return false;
|
||||
|
||||
|
||||
// if (!master->GetVehicle())
|
||||
// return false;
|
||||
|
||||
@@ -137,20 +137,20 @@ bool IccDbsMainTankRuneOfBloodTrigger::IsActive()
|
||||
{
|
||||
Unit* boss = AI_VALUE2(Unit*, "find target", "deathbringer saurfang");
|
||||
|
||||
if (!boss)
|
||||
if (!boss)
|
||||
return false;
|
||||
|
||||
if (!botAI->IsAssistTankOfIndex(bot, 0))
|
||||
|
||||
if (!botAI->IsAssistTankOfIndex(bot, 0))
|
||||
return false;
|
||||
|
||||
Unit* mt = AI_VALUE(Unit*, "main tank");
|
||||
if (!mt)
|
||||
return false;
|
||||
|
||||
Aura* aura = botAI->GetAura("rune of blood", mt);
|
||||
if (!aura)
|
||||
if (!mt)
|
||||
return false;
|
||||
|
||||
|
||||
Aura* aura = botAI->GetAura("rune of blood", mt);
|
||||
if (!aura)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -182,7 +182,7 @@ bool IccStinkyPreciousMainTankMortalWoundTrigger::IsActive()
|
||||
bool IccFestergutGroupPositionTrigger::IsActive()
|
||||
{
|
||||
Unit* boss = AI_VALUE2(Unit*, "find target", "festergut");
|
||||
if (!boss)
|
||||
if (!boss)
|
||||
return false;
|
||||
|
||||
if (bot->HasAura(SPELL_EXPERIENCED))
|
||||
@@ -194,7 +194,7 @@ bool IccFestergutGroupPositionTrigger::IsActive()
|
||||
bool IccFestergutMainTankGastricBloatTrigger::IsActive()
|
||||
{
|
||||
Unit* boss = AI_VALUE2(Unit*, "find target", "festergut");
|
||||
if (!boss)
|
||||
if (!boss)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -218,7 +218,7 @@ bool IccFestergutMainTankGastricBloatTrigger::IsActive()
|
||||
bool IccFestergutSporeTrigger::IsActive()
|
||||
{
|
||||
Unit* boss = AI_VALUE2(Unit*, "find target", "festergut");
|
||||
if (!boss || botAI->IsTank(bot))
|
||||
if (!boss || botAI->IsTank(bot))
|
||||
return false;
|
||||
|
||||
// Check for spore aura (ID: 69279) on any bot in the group
|
||||
@@ -243,7 +243,7 @@ bool IccFestergutSporeTrigger::IsActive()
|
||||
bool IccRotfaceTankPositionTrigger::IsActive()
|
||||
{
|
||||
Unit* boss = AI_VALUE2(Unit*, "find target", "rotface");
|
||||
if (!boss || !(botAI->IsTank(bot) || botAI->IsMelee(bot)))
|
||||
if (!boss || !(botAI->IsTank(bot) || botAI->IsMelee(bot)))
|
||||
return false;
|
||||
|
||||
if (bot->HasAura(SPELL_EXPERIENCED))
|
||||
@@ -372,18 +372,18 @@ bool IccPutricideMainTankMutatedPlagueTrigger::IsActive()
|
||||
bool IccPutricideMalleableGooTrigger::IsActive()
|
||||
{
|
||||
Unit* boss = AI_VALUE2(Unit*, "find target", "professor putricide");
|
||||
if (!boss)
|
||||
if (!boss)
|
||||
return false;
|
||||
|
||||
if (botAI->IsTank(bot))
|
||||
return true;
|
||||
|
||||
Unit* boss1 = AI_VALUE2(Unit*, "find target", "volatile ooze");
|
||||
if (boss1)
|
||||
if (boss1)
|
||||
return false;
|
||||
|
||||
Unit* boss2 = AI_VALUE2(Unit*, "find target", "gas cloud");
|
||||
if (boss2)
|
||||
if (boss2)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@@ -393,7 +393,7 @@ bool IccPutricideMalleableGooTrigger::IsActive()
|
||||
bool IccBpcKelesethTankTrigger::IsActive()
|
||||
{
|
||||
Unit* boss = AI_VALUE2(Unit*, "find target", "prince keleseth");
|
||||
if (!boss)
|
||||
if (!boss)
|
||||
return false;
|
||||
|
||||
if (bot->HasAura(SPELL_EXPERIENCED))
|
||||
@@ -403,7 +403,7 @@ bool IccBpcKelesethTankTrigger::IsActive()
|
||||
return false;
|
||||
|
||||
Aura* aura = botAI->GetAura("Shadow Prison", bot, false, true);
|
||||
if (aura)
|
||||
if (aura)
|
||||
if (aura->GetStackAmount() > 18)
|
||||
return false;
|
||||
|
||||
@@ -519,7 +519,7 @@ bool IccBpcBallOfFlameTrigger::IsActive()
|
||||
bool IccBqlGroupPositionTrigger::IsActive()
|
||||
{
|
||||
Unit* boss = AI_VALUE2(Unit*, "find target", "blood-queen lana'thel");
|
||||
if (!boss)
|
||||
if (!boss)
|
||||
return false;
|
||||
|
||||
if (bot->HasAura(SPELL_EXPERIENCED))
|
||||
@@ -535,7 +535,7 @@ bool IccBqlPactOfDarkfallenTrigger::IsActive()
|
||||
return false;
|
||||
|
||||
Aura* aura = botAI->GetAura("Pact of the Darkfallen", bot);
|
||||
if (!aura)
|
||||
if (!aura)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@@ -544,7 +544,7 @@ bool IccBqlPactOfDarkfallenTrigger::IsActive()
|
||||
bool IccBqlVampiricBiteTrigger::IsActive()
|
||||
{
|
||||
Unit* boss = AI_VALUE2(Unit*, "find target", "blood-queen lana'thel");
|
||||
if (!boss)
|
||||
if (!boss)
|
||||
return false;
|
||||
|
||||
Aura* aura = botAI->GetAura("Frenzied Bloodthirst", bot);
|
||||
@@ -567,7 +567,7 @@ bool IccValkyreSpearTrigger::IsActive()
|
||||
bool IccSisterSvalnaTrigger::IsActive()
|
||||
{
|
||||
Unit* boss = AI_VALUE2(Unit*, "find target", "sister svalna");
|
||||
if (!boss)
|
||||
if (!boss)
|
||||
return false;
|
||||
|
||||
if (bot->GetExactDist2d(boss) > 30.0f)
|
||||
@@ -893,7 +893,7 @@ bool IccSindragosaBlisteringColdTrigger::IsActive()
|
||||
return false;
|
||||
|
||||
float dist = bot->GetExactDist2d(boss->GetPositionX(), boss->GetPositionY());
|
||||
|
||||
|
||||
if (dist >= 33.0f)
|
||||
return false;
|
||||
|
||||
@@ -907,7 +907,7 @@ bool IccSindragosaBlisteringColdTrigger::IsActive()
|
||||
boss->FindCurrentSpellBySpellId(SPELL_BLISTERING_COLD3) ||
|
||||
boss->FindCurrentSpellBySpellId(SPELL_BLISTERING_COLD4)))
|
||||
isBlisteringCold = true;
|
||||
|
||||
|
||||
return isCasting && isBlisteringCold;
|
||||
}
|
||||
|
||||
@@ -962,7 +962,7 @@ bool IccSindragosaMysticBuffetTrigger::IsActive()
|
||||
Unit* boss = AI_VALUE2(Unit*, "find target", "sindragosa");
|
||||
if (!boss)
|
||||
return false;
|
||||
|
||||
|
||||
if (boss->GetVictim() == bot)
|
||||
return false;
|
||||
|
||||
@@ -1046,7 +1046,7 @@ bool IccSindragosaTankSwapPositionTrigger::IsActive()
|
||||
|
||||
// Check if main tank has high stacks
|
||||
Unit* mt = AI_VALUE(Unit*, "main tank");
|
||||
if (!mt)
|
||||
if (!mt)
|
||||
return false;
|
||||
|
||||
Aura* mtAura = botAI->GetAura("mystic buffet", mt, false, true);
|
||||
@@ -1126,9 +1126,9 @@ bool IccLichKingNecroticPlagueTrigger::IsActive()
|
||||
bool IccLichKingWinterTrigger::IsActive()
|
||||
{
|
||||
Unit* boss = AI_VALUE2(Unit*, "find target", "the lich king");
|
||||
if (!boss)
|
||||
if (!boss)
|
||||
return false;
|
||||
|
||||
|
||||
// Check for either Remorseless Winter
|
||||
bool hasWinterAura = false;
|
||||
if (boss && (boss->HasAura(SPELL_REMORSELESS_WINTER1) || boss->HasAura(SPELL_REMORSELESS_WINTER2) ||
|
||||
@@ -1156,7 +1156,7 @@ bool IccLichKingWinterTrigger::IsActive()
|
||||
isWinter = true;
|
||||
|
||||
if (hasWinterAura || hasWinter2Aura)
|
||||
return true;
|
||||
return true;
|
||||
|
||||
if (isCasting && isWinter)
|
||||
return true;
|
||||
@@ -1174,14 +1174,14 @@ bool IccLichKingAddsTrigger::IsActive()
|
||||
|
||||
Unit* terenasMenethilHC = bot->FindNearestCreature(NPC_TERENAS_MENETHIL_HC, 55.0f);
|
||||
Unit* terenasMenethil = bot->FindNearestCreature(NPC_TERENAS_MENETHIL, 55.0f);
|
||||
|
||||
|
||||
if (terenasMenethilHC)
|
||||
return true;
|
||||
|
||||
if (terenasMenethil)
|
||||
return true;
|
||||
|
||||
if (!boss)
|
||||
if (!boss)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
||||
@@ -135,7 +135,7 @@ enum SpellIdsICC
|
||||
SPELL_NITRO_BOOSTS = 54861, //Speed
|
||||
SPELL_PAIN_SUPPRESION = 69910, //40% dmg reduction
|
||||
SPELL_AGEIS_OF_DALARAN = 71638, //268 all ress
|
||||
SPELL_CYCLONE = 33786,
|
||||
SPELL_CYCLONE = 33786,
|
||||
SPELL_HAMMER_OF_JUSTICE = 10308, //stun
|
||||
|
||||
// Lady Deathwhisper
|
||||
@@ -374,7 +374,7 @@ public:
|
||||
bool IsActive() override;
|
||||
};
|
||||
|
||||
class IccPutricideMalleableGooTrigger : public Trigger
|
||||
class IccPutricideMalleableGooTrigger : public Trigger
|
||||
{
|
||||
public:
|
||||
IccPutricideMalleableGooTrigger(PlayerbotAI* ai) : Trigger(ai, "icc putricide malleable goo") {}
|
||||
@@ -382,7 +382,7 @@ public:
|
||||
};
|
||||
|
||||
//BPC
|
||||
class IccBpcKelesethTankTrigger : public Trigger
|
||||
class IccBpcKelesethTankTrigger : public Trigger
|
||||
{
|
||||
public:
|
||||
IccBpcKelesethTankTrigger(PlayerbotAI* botAI) : Trigger(botAI, "icc bpc keleseth tank") {}
|
||||
@@ -445,7 +445,7 @@ class IccValkyreSpearTrigger : public Trigger
|
||||
public:
|
||||
IccValkyreSpearTrigger(PlayerbotAI* botAI) : Trigger(botAI, "icc valkyre spear") {}
|
||||
bool IsActive() override;
|
||||
};
|
||||
};
|
||||
|
||||
class IccSisterSvalnaTrigger : public Trigger
|
||||
{
|
||||
@@ -508,7 +508,7 @@ public:
|
||||
bool IsActive() override;
|
||||
};
|
||||
|
||||
class IccSindragosaUnchainedMagicTrigger : public Trigger
|
||||
class IccSindragosaUnchainedMagicTrigger : public Trigger
|
||||
{
|
||||
public:
|
||||
IccSindragosaUnchainedMagicTrigger(PlayerbotAI* botAI) : Trigger(botAI, "icc sindragosa unchained magic") {}
|
||||
@@ -559,7 +559,7 @@ public:
|
||||
bool IsActive() override;
|
||||
};
|
||||
|
||||
class IccLichKingNecroticPlagueTrigger : public Trigger
|
||||
class IccLichKingNecroticPlagueTrigger : public Trigger
|
||||
{
|
||||
public:
|
||||
IccLichKingNecroticPlagueTrigger(PlayerbotAI* botAI) : Trigger(botAI, "icc lich king necrotic plague") {}
|
||||
|
||||
@@ -36,7 +36,7 @@ bool McMoveFromBaronGeddonAction::Execute(Event event)
|
||||
{
|
||||
// float angle = bot->GetAngle(boss) + M_PI;
|
||||
// return Move(angle, distToTravel);
|
||||
return MoveAway(boss, distToTravel);
|
||||
return MoveAway(boss, distToTravel);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -143,13 +143,13 @@ float ThaddiusGenericMultiplier::GetValue(Action* action)
|
||||
// // if (curr_phase == 2 && bot->GetPositionZ() > 312.5f && dynamic_cast<MovementAction*>(action)) {
|
||||
// if (curr_phase == 2 && (curr_timer % 20000 >= 18000 || curr_timer % 20000 <= 2000) &&
|
||||
// dynamic_cast<MovementAction*>(action)) {
|
||||
// // MotionMaster *mm = bot->GetMotionMaster();
|
||||
// // mm->Clear();
|
||||
// return 0.0f;
|
||||
// // MotionMaster *mm = bot->GetMotionMaster();
|
||||
// // mm->Clear();
|
||||
// return 0.0f;
|
||||
// }
|
||||
// thaddius phase
|
||||
// if (curr_phase == 8 && dynamic_cast<FleeAction*>(action)) {
|
||||
// return 0.0f;
|
||||
// return 0.0f;
|
||||
// }
|
||||
return 1.0f;
|
||||
}
|
||||
@@ -262,23 +262,23 @@ float FourhorsemanGenericMultiplier::GetValue(Action* action)
|
||||
|
||||
// float GothikGenericMultiplier::GetValue(Action* action)
|
||||
// {
|
||||
// Unit* boss = AI_VALUE2(Unit*, "find target", "gothik the harvester");
|
||||
// if (!boss) {
|
||||
// Unit* boss = AI_VALUE2(Unit*, "find target", "gothik the harvester");
|
||||
// if (!boss) {
|
||||
// return 1.0f;
|
||||
// }
|
||||
// BossAI* boss_ai = dynamic_cast<BossAI*>(boss->GetAI());
|
||||
// EventMap* eventMap = boss_botAI->GetEvents();
|
||||
// BossAI* boss_ai = dynamic_cast<BossAI*>(boss->GetAI());
|
||||
// EventMap* eventMap = boss_botAI->GetEvents();
|
||||
// uint32 curr_phase = eventMap->GetPhaseMask();
|
||||
// if (curr_phase == 1 && (dynamic_cast<FollowAction*>(action))) {
|
||||
// return 0.0f;
|
||||
// }
|
||||
// if (curr_phase == 1 && (dynamic_cast<AttackAction*>(action))) {
|
||||
// Unit* target = action->GetTarget();
|
||||
// if (target == boss) {
|
||||
// return 0.0f;
|
||||
// }
|
||||
// }
|
||||
// return 1.0f;
|
||||
// if (curr_phase == 1 && (dynamic_cast<FollowAction*>(action))) {
|
||||
// return 0.0f;
|
||||
// }
|
||||
// if (curr_phase == 1 && (dynamic_cast<AttackAction*>(action))) {
|
||||
// Unit* target = action->GetTarget();
|
||||
// if (target == boss) {
|
||||
// return 0.0f;
|
||||
// }
|
||||
// }
|
||||
// return 1.0f;
|
||||
// }
|
||||
|
||||
float GluthGenericMultiplier::GetValue(Action* action)
|
||||
|
||||
@@ -19,7 +19,7 @@ void RaidOsStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
// Flank dragon positioning
|
||||
triggers.push_back(new TriggerNode("sartharion melee positioning",
|
||||
NextAction::array(0, new NextAction("rear flank", ACTION_MOVE + 4), nullptr)));
|
||||
|
||||
|
||||
triggers.push_back(new TriggerNode("twilight portal enter",
|
||||
NextAction::array(0, new NextAction("enter twilight portal", ACTION_RAID + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode("twilight portal exit",
|
||||
|
||||
@@ -6,7 +6,7 @@ bool SartharionTankTrigger::IsActive()
|
||||
{
|
||||
Unit* boss = AI_VALUE2(Unit*, "find target", "sartharion");
|
||||
if (!boss) { return false; }
|
||||
|
||||
|
||||
return botAI->IsTank(bot);
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ bool TwilightPortalEnterTrigger::IsActive()
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// Don't enter portal until drakes are dead
|
||||
if (bot->HasAura(SPELL_POWER_OF_SHADRON) ||
|
||||
|
||||
@@ -3150,7 +3150,7 @@ bool YoggSaronIllusionRoomAction::SetBrainRtiTarget(YoggSaronTrigger yoggSaronTr
|
||||
group->SetTargetIcon(RtiTargetValue::squareIndex, bot->GetGUID(), brain->GetGUID());
|
||||
|
||||
Position entrancePosition = yoggSaronTrigger.GetIllusionRoomEntrancePosition();
|
||||
|
||||
|
||||
if (botAI->HasCheat(BotCheatMask::raid))
|
||||
{
|
||||
if (Unit const* master = botAI->GetMaster())
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
std::unordered_map<ObjectGuid, time_t> RazorscaleBossHelper::_harpoonCooldowns;
|
||||
// Prevent role assignment spam
|
||||
std::unordered_map<ObjectGuid, std::time_t> RazorscaleBossHelper::_lastRoleSwapTime;
|
||||
const std::time_t RazorscaleBossHelper::_roleSwapCooldown;
|
||||
const std::time_t RazorscaleBossHelper::_roleSwapCooldown;
|
||||
|
||||
bool RazorscaleBossHelper::UpdateBossAI()
|
||||
{
|
||||
|
||||
@@ -62,7 +62,7 @@ public:
|
||||
static constexpr float RAZORSCALE_ARENA_RADIUS = 30.0f;
|
||||
|
||||
// Harpoon cooldown (seconds)
|
||||
static constexpr time_t HARPOON_COOLDOWN_DURATION = 5;
|
||||
static constexpr time_t HARPOON_COOLDOWN_DURATION = 5;
|
||||
|
||||
// Structure for harpoon data
|
||||
struct HarpoonData
|
||||
@@ -71,7 +71,7 @@ public:
|
||||
uint32 chainSpellId;
|
||||
};
|
||||
|
||||
explicit RazorscaleBossHelper(PlayerbotAI* botAI)
|
||||
explicit RazorscaleBossHelper(PlayerbotAI* botAI)
|
||||
: AiObject(botAI), _boss(nullptr) {}
|
||||
|
||||
bool UpdateBossAI();
|
||||
@@ -96,7 +96,7 @@ private:
|
||||
|
||||
// A map to track the last role swap *per bot* by their GUID
|
||||
static std::unordered_map<ObjectGuid, std::time_t> _lastRoleSwapTime;
|
||||
|
||||
|
||||
// The cooldown that applies to every bot
|
||||
static const std::time_t _roleSwapCooldown = 10;
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ void RaidUlduarStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
triggers.push_back(new TriggerNode(
|
||||
"razorscale avoid sentinel",
|
||||
NextAction::array(0, new NextAction("razorscale avoid sentinel", ACTION_RAID + 2), nullptr)));
|
||||
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"razorscale flying alone",
|
||||
NextAction::array(0, new NextAction("razorscale ignore flying alone", ACTION_MOVE + 5), nullptr)));
|
||||
|
||||
@@ -1560,7 +1560,7 @@ bool MimironCheatTrigger::IsActive()
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!botAI->IsMainTank(bot))
|
||||
if (!botAI->IsMainTank(bot))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -129,7 +129,7 @@ enum UlduarIDs
|
||||
SPELL_INDUCE_MADNESS = 64059,
|
||||
SPELL_LUNATIC_GAZE_YS = 64163,
|
||||
GO_FLEE_TO_THE_SURFACE_PORTAL = 194625,
|
||||
|
||||
|
||||
// Buffs
|
||||
SPELL_FROST_TRAP = 13809
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user