mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-01-13 00:58:33 +00:00
* - wip * - Added Yogg-Saron strategy * - Added Yogg-Saron sanity strategy * - WIP * - WIP * - WIP * - WIP * - Added Yogg-Saron strategy * - code refactoring * - Code fix after pr
504 lines
14 KiB
C++
504 lines
14 KiB
C++
#ifndef _PLAYERBOT_RAIDULDUARACTIONS_H
|
|
#define _PLAYERBOT_RAIDULDUARACTIONS_H
|
|
|
|
#include "Action.h"
|
|
#include "AttackAction.h"
|
|
#include "GenericActions.h"
|
|
#include "GenericSpellActions.h"
|
|
#include "MovementActions.h"
|
|
#include "PlayerbotAI.h"
|
|
#include "Playerbots.h"
|
|
#include "RaidUlduarBossHelper.h"
|
|
#include "RaidUlduarTriggers.h"
|
|
#include "Vehicle.h"
|
|
|
|
//
|
|
// Flame Leviathan
|
|
//
|
|
|
|
class FlameLeviathanVehicleAction : public MovementAction
|
|
{
|
|
public:
|
|
FlameLeviathanVehicleAction(PlayerbotAI* botAI) : MovementAction(botAI, "flame leviathan vehicle") {}
|
|
bool Execute(Event event) override;
|
|
|
|
protected:
|
|
bool MoveAvoidChasing(Unit* target);
|
|
bool DemolisherAction(Unit* target);
|
|
bool DemolisherTurretAction(Unit* target);
|
|
bool SiegeEngineAction(Unit* target);
|
|
bool SiegeEngineTurretAction(Unit* target);
|
|
bool ChopperAction(Unit* target);
|
|
Unit* GetAttacker();
|
|
Unit* vehicleBase_;
|
|
Vehicle* vehicle_;
|
|
int avoidChaseIdx = -1;
|
|
};
|
|
|
|
class FlameLeviathanEnterVehicleAction : public MovementAction
|
|
{
|
|
public:
|
|
FlameLeviathanEnterVehicleAction(PlayerbotAI* botAI) : MovementAction(botAI, "flame leviathan enter vehicle") {}
|
|
bool Execute(Event event);
|
|
|
|
protected:
|
|
bool EnterVehicle(Unit* vehicleBase, bool moveIfFar);
|
|
bool ShouldEnter(Unit* vehicleBase);
|
|
bool AllMainVehiclesOnUse();
|
|
};
|
|
|
|
//
|
|
// Razorscale
|
|
//
|
|
|
|
class RazorscaleAvoidDevouringFlameAction : public MovementAction
|
|
{
|
|
public:
|
|
RazorscaleAvoidDevouringFlameAction(PlayerbotAI* botAI) : MovementAction(botAI, "razorscale avoid devouring flames") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class RazorscaleAvoidSentinelAction : public MovementAction
|
|
{
|
|
public:
|
|
RazorscaleAvoidSentinelAction(PlayerbotAI* botAI) : MovementAction(botAI, "razorscale avoid sentinel") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class RazorscaleIgnoreBossAction : public AttackAction
|
|
{
|
|
public:
|
|
RazorscaleIgnoreBossAction(PlayerbotAI* botAI) : AttackAction(botAI, "razorscale ignore flying alone") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class RazorscaleAvoidWhirlwindAction : public MovementAction
|
|
{
|
|
public:
|
|
RazorscaleAvoidWhirlwindAction(PlayerbotAI* botAI) : MovementAction(botAI, "razorscale avoid whirlwind") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class RazorscaleGroundedAction : public AttackAction
|
|
{
|
|
public:
|
|
RazorscaleGroundedAction(PlayerbotAI* botAI) : AttackAction(botAI, "razorscale grounded") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class RazorscaleHarpoonAction : public MovementAction
|
|
{
|
|
public:
|
|
RazorscaleHarpoonAction(PlayerbotAI* botAI) : MovementAction(botAI, "razorscale harpoon action") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class RazorscaleFuseArmorAction : public MovementAction
|
|
{
|
|
public:
|
|
RazorscaleFuseArmorAction(PlayerbotAI* botAI) : MovementAction(botAI, "razorscale fuse armor action") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class HodirMoveSnowpackedIcicleAction : public MovementAction
|
|
{
|
|
public:
|
|
HodirMoveSnowpackedIcicleAction(PlayerbotAI* botAI) : MovementAction(botAI, "hodir move snowpacked icicle") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class IronAssemblyLightningTendrilsAction : public MovementAction
|
|
{
|
|
public:
|
|
IronAssemblyLightningTendrilsAction(PlayerbotAI* botAI) : MovementAction(botAI, "iron assembly lightning tendrils action") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class IronAssemblyOverloadAction : public MovementAction
|
|
{
|
|
public:
|
|
IronAssemblyOverloadAction(PlayerbotAI* botAI) : MovementAction(botAI, "iron assembly overload action") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class IronAssemblyRuneOfPowerAction : public MovementAction
|
|
{
|
|
public:
|
|
IronAssemblyRuneOfPowerAction(PlayerbotAI* botAI) : MovementAction(botAI, "iron assembly rune of power action") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class KologarnMarkDpsTargetAction : public Action
|
|
{
|
|
public:
|
|
KologarnMarkDpsTargetAction(PlayerbotAI* botAI) : Action(botAI, "kologarn mark dps target action") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class KologarnFallFromFloorAction : public Action
|
|
{
|
|
public:
|
|
KologarnFallFromFloorAction(PlayerbotAI* botAI) : Action(botAI, "kologarn fall from floor action") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class KologarnRubbleSlowdownAction : public Action
|
|
{
|
|
public:
|
|
KologarnRubbleSlowdownAction(PlayerbotAI* botAI) : Action(botAI, "kologarn rubble slowdown action") {}
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class KologarnEyebeamAction : public MovementAction
|
|
{
|
|
public:
|
|
KologarnEyebeamAction(PlayerbotAI* botAI) : MovementAction(botAI, "kologarn eyebeam action") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class KologarnRtiTargetAction : public Action
|
|
{
|
|
public:
|
|
KologarnRtiTargetAction(PlayerbotAI* botAI) : Action(botAI, "kologarn rti target action") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class KologarnCrunchArmorAction : public Action
|
|
{
|
|
public:
|
|
KologarnCrunchArmorAction(PlayerbotAI* botAI) : Action(botAI, "kologarn crunch armor action") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class AuriayaFallFromFloorAction : public Action
|
|
{
|
|
public:
|
|
AuriayaFallFromFloorAction(PlayerbotAI* botAI) : Action(botAI, "auriaya fall from floor action") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class HodirBitingColdJumpAction : public MovementAction
|
|
{
|
|
public:
|
|
HodirBitingColdJumpAction(PlayerbotAI* ai) : MovementAction(ai, "hodir biting cold jump") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class FreyaMoveAwayNatureBombAction : public MovementAction
|
|
{
|
|
public:
|
|
FreyaMoveAwayNatureBombAction(PlayerbotAI* botAI) : MovementAction(botAI, "freya move away nature bomb") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class FreyaMarkDpsTargetAction : public MovementAction
|
|
{
|
|
public:
|
|
FreyaMarkDpsTargetAction(PlayerbotAI* botAI) : MovementAction(botAI, "freya mark dps target action") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class FreyaMoveToHealingSporeAction : public MovementAction
|
|
{
|
|
public:
|
|
FreyaMoveToHealingSporeAction(PlayerbotAI* ai) : MovementAction(ai, "freya move to healing spore action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class ThorimUnbalancingStrikeAction : public Action
|
|
{
|
|
public:
|
|
ThorimUnbalancingStrikeAction(PlayerbotAI* ai) : Action(ai, "thorim unbalancing strike action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class ThorimMarkDpsTargetAction : public Action
|
|
{
|
|
public:
|
|
ThorimMarkDpsTargetAction(PlayerbotAI* ai) : Action(ai, "thorim mark dps target action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class ThorimArenaPositioningAction : public MovementAction
|
|
{
|
|
public:
|
|
ThorimArenaPositioningAction(PlayerbotAI* ai) : MovementAction(ai, "thorim arena positioning action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class ThorimGauntletPositioningAction : public MovementAction
|
|
{
|
|
public:
|
|
ThorimGauntletPositioningAction(PlayerbotAI* ai) : MovementAction(ai, "thorim gauntlet positioning action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class ThorimFallFromFloorAction : public Action
|
|
{
|
|
public:
|
|
ThorimFallFromFloorAction(PlayerbotAI* botAI) : Action(botAI, "thorim fall from floor action") {}
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class ThorimPhase2PositioningAction : public MovementAction
|
|
{
|
|
public:
|
|
ThorimPhase2PositioningAction(PlayerbotAI* ai) : MovementAction(ai, "thorim phase 2 positioning action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class MimironShockBlastAction : public MovementAction
|
|
{
|
|
public:
|
|
MimironShockBlastAction(PlayerbotAI* ai) : MovementAction(ai, "mimiron shock blast action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class MimironPhase1PositioningAction : public MovementAction
|
|
{
|
|
public:
|
|
MimironPhase1PositioningAction(PlayerbotAI* ai) : MovementAction(ai, "mimiron phase 1 positioning action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class MimironP3Wx2LaserBarrageAction : public MovementAction
|
|
{
|
|
public:
|
|
MimironP3Wx2LaserBarrageAction(PlayerbotAI* ai, float distance = 24.0f, float delta_angle = M_PI / 8)
|
|
: MovementAction(ai, "mimiron p3wx2 laser barrage action")
|
|
{
|
|
this->distance = distance;
|
|
this->delta_angle = delta_angle;
|
|
}
|
|
virtual bool Execute(Event event);
|
|
|
|
protected:
|
|
float distance, delta_angle;
|
|
};
|
|
|
|
class MimironRapidBurstAction : public MovementAction
|
|
{
|
|
public:
|
|
MimironRapidBurstAction(PlayerbotAI* ai) : MovementAction(ai, "mimiron rapid burst action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class MimironAerialCommandUnitAction : public Action
|
|
{
|
|
public:
|
|
MimironAerialCommandUnitAction(PlayerbotAI* ai) : Action(ai, "mimiron aerial command unit action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class MimironRocketStrikeAction : public MovementAction
|
|
{
|
|
public:
|
|
MimironRocketStrikeAction(PlayerbotAI* ai) : MovementAction(ai, "mimiron rocket strike action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
bool isUseful() override;
|
|
};
|
|
|
|
class MimironPhase4MarkDpsAction : public Action
|
|
{
|
|
public:
|
|
MimironPhase4MarkDpsAction(PlayerbotAI* ai) : Action(ai, "mimiron phase 4 mark dps action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class MimironCheatAction : public Action
|
|
{
|
|
public:
|
|
MimironCheatAction(PlayerbotAI* ai) : Action(ai, "mimiron cheat action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class VezaxCheatAction : public Action
|
|
{
|
|
public:
|
|
VezaxCheatAction(PlayerbotAI* ai) : Action(ai, "vezax cheat action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class VezaxShadowCrashAction : public MovementAction
|
|
{
|
|
public:
|
|
VezaxShadowCrashAction(PlayerbotAI* ai) : MovementAction(ai, "vezax shadow crash action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class VezaxMarkOfTheFacelessAction : public MovementAction
|
|
{
|
|
public:
|
|
VezaxMarkOfTheFacelessAction(PlayerbotAI* ai) : MovementAction(ai, "vezax mark of the faceless action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class YoggSaronOminousCloudCheatAction : public Action
|
|
{
|
|
public:
|
|
YoggSaronOminousCloudCheatAction(PlayerbotAI* ai) : Action(ai, "yogg-saron ominous cloud cheat action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class YoggSaronGuardianPositioningAction : public MovementAction
|
|
{
|
|
public:
|
|
YoggSaronGuardianPositioningAction(PlayerbotAI* ai) : MovementAction(ai, "yogg-saron guardian positioning action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class YoggSaronSanityAction : public MovementAction
|
|
{
|
|
public:
|
|
YoggSaronSanityAction(PlayerbotAI* ai) : MovementAction(ai, "yogg-saron sanity action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class YoggSaronDeathOrbAction : public MoveAwayFromCreatureAction
|
|
{
|
|
public:
|
|
YoggSaronDeathOrbAction(PlayerbotAI* ai) : MoveAwayFromCreatureAction(ai, "yogg-saron death orb action", NPC_DEATH_ORB, 10.0f) {}
|
|
};
|
|
|
|
class YoggSaronMaladyOfTheMindAction : public MoveAwayFromPlayerWithDebuffAction
|
|
{
|
|
public:
|
|
YoggSaronMaladyOfTheMindAction(PlayerbotAI* ai) : MoveAwayFromPlayerWithDebuffAction(ai, "yogg-saron malady of the mind action", SPELL_MALADY_OF_THE_MIND, 15.0f) {}
|
|
};
|
|
|
|
class YoggSaronMarkTargetAction : public Action
|
|
{
|
|
public:
|
|
YoggSaronMarkTargetAction(PlayerbotAI* ai) : Action(ai, "yogg-saron mark target action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class YoggSaronBrainLinkAction : public MovementAction
|
|
{
|
|
public:
|
|
YoggSaronBrainLinkAction(PlayerbotAI* ai) : MovementAction(ai, "yogg-saron brain link action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class YoggSaronMoveToEnterPortalAction : public MovementAction
|
|
{
|
|
public:
|
|
YoggSaronMoveToEnterPortalAction(PlayerbotAI* ai) : MovementAction(ai, "yogg-saron move to enter portal action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class YoggSaronFallFromFloorAction : public MovementAction
|
|
{
|
|
public:
|
|
YoggSaronFallFromFloorAction(PlayerbotAI* ai) : MovementAction(ai, "yogg-saron fall from floor action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class YoggSaronBossRoomMovementCheatAction : public MovementAction
|
|
{
|
|
public:
|
|
YoggSaronBossRoomMovementCheatAction(PlayerbotAI* ai) : MovementAction(ai, "yogg-saron boss room movement cheat action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class YoggSaronUsePortalAction : public Action
|
|
{
|
|
public:
|
|
YoggSaronUsePortalAction(PlayerbotAI* ai) : Action(ai, "yogg-saron use portal action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class YoggSaronIllusionRoomAction : public MovementAction
|
|
{
|
|
public:
|
|
YoggSaronIllusionRoomAction(PlayerbotAI* ai) : MovementAction(ai, "yogg-saron illusion room action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
|
|
private:
|
|
bool SetRtiMark(YoggSaronTrigger yoggSaronTrigger);
|
|
bool SetIllusionRtiTarget(YoggSaronTrigger yoggSaronTrigger);
|
|
bool SetBrainRtiTarget(YoggSaronTrigger yoggSaronTrigger);
|
|
};
|
|
|
|
class YoggSaronMoveToExitPortalAction : public MovementAction
|
|
{
|
|
public:
|
|
YoggSaronMoveToExitPortalAction(PlayerbotAI* ai) : MovementAction(ai, "yogg-saron move to exit portal action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class YoggSaronLunaticGazeAction : public MovementAction
|
|
{
|
|
public:
|
|
YoggSaronLunaticGazeAction(PlayerbotAI* ai) : MovementAction(ai, "yogg-saron lunatic gaze action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
class YoggSaronPhase3PositioningAction : public MovementAction
|
|
{
|
|
public:
|
|
YoggSaronPhase3PositioningAction(PlayerbotAI* ai) : MovementAction(ai, "yogg-saron phase 3 positioning action") {}
|
|
|
|
bool Execute(Event event) override;
|
|
};
|
|
|
|
#endif
|