From 94c1847bbc300940d62e024391e15dca0e03ab1e Mon Sep 17 00:00:00 2001 From: SylvaniaCore deploy Date: Wed, 17 Jun 2026 21:55:13 +0000 Subject: [PATCH] fix(quest): Quest::XPValue ne crashe plus si niveau joueur > cap GameTable XP (GetRow nullptr -> segfault au dialogue donneur de quete). Null-check des lignes GameTable. --- src/server/game/Quests/QuestDef.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 4f1c8da..00c82c1 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -266,7 +266,13 @@ uint32 Quest::XPValue(uint32 playerLevel) const float multiplier = 1.0f; if (questLevel != playerLevel) - multiplier = sXpGameTable.GetRow(std::min(playerLevel, questLevel))->Divisor / sXpGameTable.GetRow(playerLevel)->Divisor; + { + // SylvaniaCore: GetRow() rend nullptr hors-borne (ex. perso niveau > cap GameTable XP, ~110) -> evite le crash (segfault dans Quest::XPValue au dialogue d un donneur de quete) + GtXpEntry const* questXpRow = sXpGameTable.GetRow(std::min(playerLevel, questLevel)); + GtXpEntry const* playerXpRow = sXpGameTable.GetRow(playerLevel); + if (questXpRow && playerXpRow && playerXpRow->Divisor) + multiplier = questXpRow->Divisor / playerXpRow->Divisor; + } int32 diffFactor = 2 * (questLevel - playerLevel) + 20; if (diffFactor < 1)