Fix guild roster, /who, /inspect, and character preview bugs

Guild O tab: fallback to character guildId when guildName_ not yet
queried, re-query guild info on roster open. /who: add missing
stringCount field and fix maxLevel default (0→100). /inspect: add
SMSG_INSPECT_TALENT opcode (0x3F4) and rewrite parser for WotLK
PackedGUID+talent format. Character preview: reset all tracking
variables in setAssetManager() to force model reload on login.
This commit is contained in:
Kelsi 2026-02-14 15:05:18 -08:00
parent be425c94dc
commit a90c130d6e
12 changed files with 108 additions and 65 deletions

View file

@ -330,7 +330,11 @@ public:
void queryGuildInfo(uint32_t guildId);
// Guild state accessors
bool isInGuild() const { return !guildName_.empty(); }
bool isInGuild() const {
if (!guildName_.empty()) return true;
const Character* ch = getActiveCharacter();
return ch && ch->hasGuild();
}
const std::string& getGuildName() const { return guildName_; }
const GuildRosterData& getGuildRoster() const { return guildRoster_; }
bool hasGuildRoster() const { return hasGuildRoster_; }

View file

@ -279,6 +279,7 @@ enum class LogicalOpcode : uint16_t {
SMSG_INVENTORY_CHANGE_FAILURE,
CMSG_INSPECT,
SMSG_INSPECT_RESULTS,
SMSG_INSPECT_TALENT,
// ---- Death/Respawn ----
CMSG_REPOP_REQUEST,

View file

@ -823,7 +823,7 @@ public:
/** CMSG_WHO packet builder */
class WhoPacket {
public:
static network::Packet build(uint32_t minLevel = 0, uint32_t maxLevel = 0,
static network::Packet build(uint32_t minLevel = 0, uint32_t maxLevel = 100,
const std::string& playerName = "",
const std::string& guildName = "",
uint32_t raceMask = 0xFFFFFFFF,

View file

@ -29,6 +29,11 @@ public:
void setAssetManager(pipeline::AssetManager* am) {
assetManager_ = am;
previewInitialized_ = false;
previewGuid_ = 0;
previewAppearanceBytes_ = 0;
previewFacialFeatures_ = 0;
previewUseFemaleModel_ = false;
previewEquipHash_ = 0;
}
/**