Passe de warnings sur tout le core : 12 bugs reels corriges

Scan de -fsyntax-only avec les vrais flags sur les 1767 fichiers du
serveur (compile_commands.json), warnings de logique actives. 3277
warnings, tries a la main. Le bruit (Wreorder, Wswitch) est ecarte ;
voici ce qui etait un vrai defaut.

Memoire morte et comportement indefini :
- ObjectMgr::GetGarrssionMissionReward rendait l adresse d un vecteur
  local ; Garrison melangeait puis parcourait cet objet detruit.
- BattlePayDataStoreMgr::GetProduct faisait "return{}" sur une fonction
  qui rend une reference : huit appelants lisaient un temporaire mort.
- Garrison::RewardMission reaffectait une initializer_list, ce qui ne
  prolonge pas la duree de vie du tableau sous-jacent.
- WorldSession avait un destructeur non virtuel alors que
  PlayerBotSession en derive : chaque delete d une session de bot ne
  detruisait que la moitie de l objet. Idem FieldActing.
- boss_levantus lisait Waypointspawn[6] dans un tableau de 6 entrees,
  a chaque declenchement de l evenement.
- boss_hyrja_tov modifiait expelLightSwitch deux fois sans point de
  sequence, et replanifiait son evenement toutes les 20 ms au lieu de
  20 secondes (IN_MILLISECONDS manquant).

Code jamais appele :
- cinq hooks OnRemoveTarget d areatrigger (Klaxxi, Blackfuse, Siege
  d Orgrimmar, Ordos) : le hook du core s appelle OnUnitExit, ces
  methodes n etaient rattachees a rien et les auras restaient sur le
  joueur apres sa sortie de zone. Trois d entre elles n avaient meme
  pas de return.
- boss_admiral_svirax declarait un membre bool du meme nom que
  SetDungeonEncounterID, qui masquait la methode de BossAI ; l appel
  avait ete "repare" par une virgule et ne faisait donc rien.
- WorldSession::HasSocket comparait l adresse d un tableau a NULL,
  donc rendait toujours true.

Conditions toujours vraies :
- zone_vault_of_wardens : "== QUEST_STOP_GULDAN_H || QUEST_STOP_GULDAN_A"
  jouait la scene de Gul dan pour n importe quelle quete acceptee.
- boss_vizaduum : "type == POINT_MOTION_TYPE || WAYPOINT_MOTION_TYPE".
- boss_council_of_elders : parenthese fermee au mauvais endroit,
  "HasAura(SPELL_DISCHARGE || HasAura(SPELL_OVERLOAD))".

Valeurs tronquees :
- InstanceScript::m_ScenarioStep etait un uint8 alors qu il recoit des
  ID de ScenarioStep (3195, 3207...), tronques a 135 ou 136.
- PetBattleTrainer passait 3000000000000000 a SetRespawnTime(uint32).

Nettoyage sans effet de bord : memcpy sur PetBattleRequest remplace par
une copie, et suppression d un getThreatList()/empty() sans effet dans
boss_wise_mari.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Sylvania
2026-09-03 12:59:16 +02:00
parent 5205a9b5f0
commit 37796803c7
22 changed files with 134 additions and 57 deletions
+11 -8
View File
@@ -642,11 +642,11 @@ void Garrison::AddMission(uint32 garrMissionId)
reward.FollowerXP = 0;
reward.BonusAbilityID = 0;
reward.Unknown = 1118739;
std::vector<GarrssionMissionReward>* fRewards = sObjectMgr->GetGarrssionMissionReward(garrMissionId);
if (fRewards)
std::vector<GarrssionMissionReward> fRewards = sObjectMgr->GetGarrssionMissionReward(garrMissionId);
if (!fRewards.empty())
{
Trinity::Containers::RandomShuffle(*fRewards);
for (auto _reward : *fRewards)
Trinity::Containers::RandomShuffle(fRewards);
for (auto _reward : fRewards)
{
// if (_reward.RewardType == GarrisonMission::MissionRewardType::Item)
{
@@ -1086,13 +1086,16 @@ void Garrison::CalculateMissonBonusRoll(uint32 garrMissionId)
void Garrison::RewardMission(Mission* mission, bool withOvermaxReward)
{
auto rewardLists = { mission->Rewards };
// SylvaniaCore : reaffecter une initializer_list ne prolonge pas la duree de
// vie du tableau sous-jacent -- la boucle parcourait un temporaire detruit.
std::vector<decltype(&mission->Rewards)> rewardLists;
rewardLists.push_back(&mission->Rewards);
if (withOvermaxReward)
rewardLists = { mission->Rewards, mission->BonusRewards };
rewardLists.push_back(&mission->BonusRewards);
for (auto rewards : rewardLists)
for (auto const* rewards : rewardLists)
{
for (WorldPackets::Garrison::GarrisonMissionReward reward : rewards)
for (WorldPackets::Garrison::GarrisonMissionReward reward : *rewards)
{
if (reward.ItemID)
GetOwner()->AddItem(reward.ItemID, reward.ItemQuantity);