#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 "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 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 KologarnNatureResistanceAction : public Action { public: KologarnNatureResistanceAction(PlayerbotAI* botAI) : Action(botAI, "kologarn nature resistance 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; }; class FreyaMoveAwayNatureBombAction : public MovementAction { public: FreyaMoveAwayNatureBombAction(PlayerbotAI* botAI) : MovementAction(botAI, "freya move away nature bomb") {} bool Execute(Event event) override; bool isUseful() override; }; class FreyaMarkEonarsGiftAction : public MovementAction { public: FreyaMarkEonarsGiftAction(PlayerbotAI* botAI) : MovementAction(botAI, "freya mark eonars gift") {} bool Execute(Event event) override; bool isUseful() override; }; #endif