Add bindpoint support and WMO snap fix

This commit is contained in:
Kelsi 2026-02-08 03:32:00 -08:00
parent 132a6ea3c9
commit 189f4a0a58
7 changed files with 94 additions and 0 deletions

View file

@ -373,6 +373,8 @@ public:
void unstuck();
void setUnstuckGyCallback(UnstuckCallback cb) { unstuckGyCallback_ = std::move(cb); }
void unstuckGy();
using BindPointCallback = std::function<void(uint32_t mapId, float x, float y, float z)>;
void setBindPointCallback(BindPointCallback cb) { bindPointCallback_ = std::move(cb); }
// Creature spawn callback (online mode - triggered when creature enters view)
// Parameters: guid, displayId, x, y, z (canonical), orientation
@ -837,6 +839,7 @@ private:
WorldEntryCallback worldEntryCallback_;
UnstuckCallback unstuckCallback_;
UnstuckCallback unstuckGyCallback_;
BindPointCallback bindPointCallback_;
CreatureSpawnCallback creatureSpawnCallback_;
CreatureDespawnCallback creatureDespawnCallback_;
CreatureMoveCallback creatureMoveCallback_;

View file

@ -126,6 +126,7 @@ enum class Opcode : uint16_t {
CMSG_GAMEOBJECT_QUERY = 0x05E,
SMSG_GAMEOBJECT_QUERY_RESPONSE = 0x05F,
CMSG_SET_ACTIVE_MOVER = 0x26A,
CMSG_BINDER_ACTIVATE = 0x1B2,
// ---- XP ----
SMSG_LOG_XPGAIN = 0x1D0,
@ -272,6 +273,7 @@ enum class Opcode : uint16_t {
// ---- Battleground ----
SMSG_BATTLEFIELD_PORT_DENIED = 0x014B,
SMSG_REMOVED_FROM_PVP_QUEUE = 0x0170,
SMSG_BINDPOINTUPDATE = 0x01B3,
CMSG_BATTLEFIELD_LIST = 0x023C,
SMSG_BATTLEFIELD_LIST = 0x023D,
CMSG_BATTLEFIELD_JOIN = 0x023E,

View file

@ -1558,6 +1558,30 @@ public:
static bool parse(network::Packet& packet, GossipMessageData& data);
};
// ============================================================
// Bind Point (Hearthstone)
// ============================================================
struct BindPointUpdateData {
float x = 0.0f;
float y = 0.0f;
float z = 0.0f;
uint32_t mapId = 0;
uint32_t zoneId = 0;
};
/** CMSG_BINDER_ACTIVATE packet builder */
class BinderActivatePacket {
public:
static network::Packet build(uint64_t npcGuid);
};
/** SMSG_BINDPOINTUPDATE parser */
class BindPointUpdateParser {
public:
static bool parse(network::Packet& packet, BindPointUpdateData& data);
};
/** CMSG_QUESTGIVER_QUERY_QUEST packet builder */
class QuestgiverQueryQuestPacket {
public: