fix(player): ne pas desequiper le stuff sous le niveau de specialisation (10)

Bug (signalement #8, perso draenei): sous le niveau 10, chaque montee de
niveau vidait tout l'equipement vers les sacs, obligeant a tout rehabiller.

Cause racine: InitTalentForLevel() appelle ResetTalentSpecialization() a
chaque montee de niveau tant que level < MIN_SPECIALIZATION_LEVEL (10), ce
qui declenche RemoveEquipedSpecializationItems(). Cette derniere desequipe
tout objet dont les bits de specialisation ne matchent pas la spe (ou qui
echoue CanUseItem). Or sous 10 un perso n'a pas de vraie spe -> desequipement
indu, non-blizzlike.

Fix durable a la racine: early-return dans RemoveEquipedSpecializationItems()
si getLevel() < MIN_SPECIALIZATION_LEVEL. Couvre les 2 appelants sans
regression: la voie level-up sous 10 (ResetTalentSpecialization) est
neutralisee; la voie ActivateTalentGroup (changement de spe) est de toute
facon impossible sous 10. MIN_SPECIALIZATION_LEVEL deja en scope (Player.cpp).

Diagnostic produit en autonomie par le pipeline de triage de bugs, verifie
puis deploye manuellement.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
SylvaniaCore deploy
2026-07-08 22:07:09 +00:00
parent 86f07c3366
commit 7582be8b0a
@@ -30771,6 +30771,13 @@ void Player::RemoveSpecializationSpells()
void Player::RemoveEquipedSpecializationItems()
{
// Sous le niveau de specialisation (MIN_SPECIALIZATION_LEVEL=10), un perso n'a pas
// de vraie spe : ne pas desequiper. InitTalentForLevel() rappelle
// ResetTalentSpecialization() a CHAQUE montee de niveau sous 10, ce qui deshabillait
// tout le stuff vers les sacs (non-blizzlike ; cf. signalement #8 "draeneï").
if (getLevel() < MIN_SPECIALIZATION_LEVEL)
return;
for (uint8 i = EQUIPMENT_SLOT_START; i < EQUIPMENT_SLOT_END; i++)
if (Item* item = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
if (!item->GetTemplate()->IsUsableBySpecialization(GetSpecializationId(), getLevel(), false) || CanUseItem(item) != EQUIP_ERR_OK)