mirror of
https://github.com/mod-playerbots/mod-playerbots
synced 2025-11-29 15:58:20 +08:00
Update RaidUlduarBossHelper.h
This commit is contained in:
@@ -2,6 +2,11 @@
|
|||||||
#define _PLAYERBOT_RAIDULDUARBOSSHELPER_H
|
#define _PLAYERBOT_RAIDULDUARBOSSHELPER_H
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <unordered_map>
|
||||||
|
#include <vector>
|
||||||
|
#include <cmath>
|
||||||
|
#include <ctime>
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
#include "AiObject.h"
|
#include "AiObject.h"
|
||||||
#include "AiObjectContext.h"
|
#include "AiObjectContext.h"
|
||||||
@@ -16,6 +21,84 @@
|
|||||||
|
|
||||||
const uint32 ULDUAR_MAP_ID = 603;
|
const uint32 ULDUAR_MAP_ID = 603;
|
||||||
|
|
||||||
|
class RazorscaleBossHelper : public AiObject
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Enums and constants specific to Razorscale
|
||||||
|
enum RazorscaleUnits : uint32
|
||||||
|
{
|
||||||
|
UNIT_RAZORSCALE = 33186,
|
||||||
|
UNIT_DARK_RUNE_SENTINEL = 33846,
|
||||||
|
UNIT_DARK_RUNE_WATCHER = 33453,
|
||||||
|
UNIT_DARK_RUNE_GUARDIAN = 33388,
|
||||||
|
UNIT_DEVOURING_FLAME = 34188,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum RazorscaleGameObjects : uint32
|
||||||
|
{
|
||||||
|
GO_RAZORSCALE_HARPOON_1 = 194519,
|
||||||
|
GO_RAZORSCALE_HARPOON_2 = 194541,
|
||||||
|
GO_RAZORSCALE_HARPOON_3 = 194542,
|
||||||
|
GO_RAZORSCALE_HARPOON_4 = 194543,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum RazorscaleSpells : uint32
|
||||||
|
{
|
||||||
|
SPELL_CHAIN_1 = 49679,
|
||||||
|
SPELL_CHAIN_2 = 49682,
|
||||||
|
SPELL_CHAIN_3 = 49683,
|
||||||
|
SPELL_CHAIN_4 = 49684,
|
||||||
|
SPELL_SENTINEL_WHIRLWIND = 63806,
|
||||||
|
SPELL_STUN_AURA = 62794,
|
||||||
|
SPELL_FUSEARMOR = 64771
|
||||||
|
};
|
||||||
|
|
||||||
|
static constexpr uint32 FUSEARMOR_THRESHOLD = 2;
|
||||||
|
|
||||||
|
// Constants for arena parameters
|
||||||
|
static constexpr float RAZORSCALE_FLYING_Z_THRESHOLD = 440.0f;
|
||||||
|
static constexpr float RAZORSCALE_ARENA_CENTER_X = 587.54f;
|
||||||
|
static constexpr float RAZORSCALE_ARENA_CENTER_Y = -175.04f;
|
||||||
|
static constexpr float RAZORSCALE_ARENA_RADIUS = 30.0f;
|
||||||
|
|
||||||
|
// Harpoon cooldown (seconds)
|
||||||
|
static constexpr time_t HARPOON_COOLDOWN_DURATION = 5;
|
||||||
|
|
||||||
|
// Structure for harpoon data
|
||||||
|
struct HarpoonData
|
||||||
|
{
|
||||||
|
uint32 gameObjectEntry;
|
||||||
|
uint32 chainSpellId;
|
||||||
|
};
|
||||||
|
|
||||||
|
explicit RazorscaleBossHelper(PlayerbotAI* botAI)
|
||||||
|
: AiObject(botAI), _boss(nullptr), _lastRoleSwapTime(0), _roleSwapCooldown(10) {}
|
||||||
|
|
||||||
|
bool UpdateBossAI();
|
||||||
|
Unit* GetBoss() const;
|
||||||
|
|
||||||
|
bool IsGroundPhase() const;
|
||||||
|
bool IsFlyingPhase() const;
|
||||||
|
|
||||||
|
bool IsHarpoonFired(uint32 chainSpellId) const;
|
||||||
|
static bool IsHarpoonReady(GameObject* harpoonGO);
|
||||||
|
static void SetHarpoonOnCooldown(GameObject* harpoonGO);
|
||||||
|
GameObject* FindNearestHarpoon(float x, float y, float z) const;
|
||||||
|
|
||||||
|
static const std::vector<HarpoonData>& GetHarpoonData();
|
||||||
|
|
||||||
|
void AssignRolesBasedOnHealth();
|
||||||
|
bool AreRolesAssigned() const;
|
||||||
|
bool CanSwapRoles() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Unit* _boss;
|
||||||
|
std::time_t _lastRoleSwapTime;
|
||||||
|
const std::time_t _roleSwapCooldown;
|
||||||
|
|
||||||
|
static std::unordered_map<ObjectGuid, time_t> _harpoonCooldowns;
|
||||||
|
};
|
||||||
|
|
||||||
// template <class BossAiType>
|
// template <class BossAiType>
|
||||||
// class GenericBossHelper : public AiObject
|
// class GenericBossHelper : public AiObject
|
||||||
// {
|
// {
|
||||||
|
|||||||
Reference in New Issue
Block a user