Skip to content

Commit 0dad793

Browse files
committed
Core/Player: Fix MAX_TITLE_INDEX calculation for title mask
1 parent b9bee7e commit 0dad793

2 files changed

Lines changed: 8 additions & 3 deletions

File tree

src/server/game/Entities/Player/Player.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24916,7 +24916,9 @@ bool Player::isTotalImmune() const
2491624916

2491724917
bool Player::HasTitle(uint32 bitIndex) const
2491824918
{
24919-
if (bitIndex > MAX_TITLE_INDEX)
24919+
// bitIndex is zero-based inside PLAYER__FIELD_KNOWN_TITLES.
24920+
// MAX_TITLE_INDEX is the total number of available bits (valid range: [0, MAX_TITLE_INDEX)).
24921+
if (bitIndex >= MAX_TITLE_INDEX)
2492024922
return false;
2492124923

2492224924
uint32 fieldIndexOffset = bitIndex / 32;

src/server/game/Entities/Player/Player.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -479,8 +479,11 @@ static_assert((PLAYER_FIELD_BYTES_2_OFFSET_OVERRIDE_SPELLS_ID & 1) == 0, "PLAYER
479479

480480
constexpr uint8 PLAYER_BYTES_2_OVERRIDE_SPELLS_UINT16_OFFSET = PLAYER_FIELD_BYTES_2_OFFSET_OVERRIDE_SPELLS_ID / 2;
481481

482-
constexpr uint8 KNOWN_TITLES_SIZE = 4;
483-
constexpr uint32 MAX_TITLE_INDEX = KNOWN_TITLES_SIZE * sizeof(uint64); // 4 uint64 fields
482+
// PLAYER__FIELD_KNOWN_TITLES consists of 4 uint64 blocks (64 bits each).
483+
// Total available title bits = KNOWN_TITLES_SIZE * 64.
484+
constexpr uint32 KNOWN_TITLES_SIZE = 4;
485+
constexpr uint32 BITS_PER_TITLE_BLOCK = sizeof(uint64) * 8;
486+
constexpr uint32 MAX_TITLE_INDEX = KNOWN_TITLES_SIZE * BITS_PER_TITLE_BLOCK;
484487

485488
// used in PLAYER_FIELD_BYTES values
486489
enum PlayerFieldByteFlags

0 commit comments

Comments
 (0)