mod-playerbots/src/strategy/raids/ulduar/RaidUlduarActions.h
kadeshar 9c816b682a
Kologarn strategy (#1205)
* - Added triggers and action for kologarn fight

* - code refactoring

* - Added nature resistance aura for kologarn
2025-04-17 11:50:38 +08:00

181 lines
5.2 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 "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