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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user