Quete 40051 (Secrets gangrenes) : le choix de specialisation ne validait rien
Signale en jeu : le tome ouvre bien le choix, on selectionne Devastation ou Vengeance, mais la quete reste incomplete. Trois defauts : 1. Le script implementait OnCompleteQuestChoice, un hook declare dans ScriptMgr mais appele DE NULLE PART. Le seul hook invoque par le core est OnPlayerChoiceResponse (QuestHandler.cpp). La methode etait donc du code mort - preuve mesuree en base : le joueur navait pas appris le sort 200749 et son activeTalentGroup restait a 0. 2. Aucun credit de quete nulle part, alors que 40051 exige lentree 99071. 3. La branche Devastation nactivait pas la specialisation, contrairement a celle de Vengeance : asymetrie qui laissait le joueur sans spe. AssertEntry remplace par LookupEntry avec garde, pour ne pas abattre le serveur si un identifiant de specialisation manquait. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -91,6 +91,7 @@ enum MardumTexts
|
||||
enum MardumCreatures
|
||||
{
|
||||
NPC_POWER_QUEST_KILL_CREDIT = 105946,
|
||||
NPC_FEL_SECRETS_KILL_CREDIT = 99071,
|
||||
NPC_COLOSSAL_INFERNAL = 96159,
|
||||
NPC_LEGION_GATEWAY_KILL_CREDIT = 94406,
|
||||
NPC_FIRST_SUMMONED_GUARDIAN_QUEST_KILL_CREDIT = 97831,
|
||||
@@ -915,8 +916,11 @@ class PlayerScript_mardum_spec_choice : public PlayerScript
|
||||
public:
|
||||
PlayerScript_mardum_spec_choice() : PlayerScript("PlayerScript_mardum_spec_choice") {}
|
||||
|
||||
// OnPlayerChoiceResponse
|
||||
void OnCompleteQuestChoice(Player* player, uint32 choiceID, uint32 responseID)
|
||||
// Ce hook s'appelle OnPlayerChoiceResponse : c'est le seul que le core
|
||||
// invoque (QuestHandler.cpp, sur reception du choix). OnCompleteQuestChoice
|
||||
// existe dans ScriptMgr mais n'est appele de nulle part - la methode etait
|
||||
// donc du code mort, et choisir sa specialisation ne faisait rien.
|
||||
void OnPlayerChoiceResponse(Player* player, uint32 choiceID, uint32 responseID) override
|
||||
{
|
||||
if (choiceID != PLAYER_CHOICE_DH_SPEC_SELECTION)
|
||||
return;
|
||||
@@ -927,17 +931,25 @@ public:
|
||||
{
|
||||
case PLAYER_CHOICE_DH_SPEC_SELECTION_DEVASTATION:
|
||||
player->CastSpell(player, 194940, true);
|
||||
// La branche Devastation n'activait pas la specialisation, au
|
||||
// contraire de Vengeance : le joueur restait sans spe.
|
||||
if (ChrSpecializationEntry const* spec = sChrSpecializationStore.LookupEntry(577))
|
||||
player->ActivateTalentGroup(spec);
|
||||
break;
|
||||
case PLAYER_CHOICE_DH_SPEC_SELECTION_VENGEANCE:
|
||||
player->CastSpell(player, 194939, true);
|
||||
|
||||
if (ChrSpecializationEntry const* spec = sChrSpecializationStore.AssertEntry(581))
|
||||
if (ChrSpecializationEntry const* spec = sChrSpecializationStore.LookupEntry(581))
|
||||
player->ActivateTalentGroup(spec);
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
return;
|
||||
}
|
||||
|
||||
// Credit de la quete 40051 (Secrets gangrenes) : aucun code ne
|
||||
// l'accordait, la quete restait indefiniment incomplete.
|
||||
player->KilledMonsterCredit(NPC_FEL_SECRETS_KILL_CREDIT);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user