Bots de groupe : rehabillage a chaque montee de niveau

Seuls les talents et les sorts suivaient la montee de niveau d un bot
(OnLevelupToBotAI : ReupdateTalents + LearnSpells). L equipement, lui, n etait
pose qu une fois, au re-level initial : un mercenaire embauche au niveau 20 et
monte a 25 gardait son stuff de niveau 20 pour tout le contrat et devenait de
plus en plus fragile.

Nouvelle methode PlayerBotSetting::RefreshEquipment() : reprend le seul bloc
equipement du re-level complet -- UnequipFromAll, CheckInventroy,
AddEquipFromAll, UpequipFromAll, SupplementOtherItems -- puis UpdateAllStats
et SaveToDB. On ne repasse volontairement ni par ResetTalents ni par
ActivateSpecialization : la reattribution de specialisation en cours de partie
est le chemin des crashs connus dans Unit::GetAPMultiplier.

ProcessDelayLevelup renvoie desormais false tant que le bot est en combat : le
schedule reste en tete de file et sera retente au tick suivant, plutot que de
desarmer le bot en pleine bagarre. RefreshEquipment reverifie de son cote.

Ce commit emporte aussi ActivateSpecialization (PlayerBotSetting), ecrit lors
d une session precedente, deployé depuis le 15/08 mais jamais commité.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
SylvaniaCore deploy
2026-08-16 13:20:01 +02:00
parent 0dbbb73a24
commit 8a46e5b08d
4 changed files with 74 additions and 1 deletions
@@ -704,6 +704,11 @@ bool PlayerBotSession::ProcessDelayLevelup(BotGlobleSchedule& schedule)
ClearAllSchedule();
return false;
}
// Le rehabillage retire puis rend tout l equipement : hors de question de
// desarmer le bot en pleine bagarre. Renvoyer false laisse le schedule en
// tete de file, il sera retente au tick suivant.
if (player->IsInCombat())
return false;
player->OnLevelupToBotAI();
return true;
}