Quatre hooks morts OnCompleteQuestChoice + quete 40373 injouable
Signale en jeu : choisir entre Kayn et Altruis ne declenche rien.
1) HOOK MORT, 4 occurrences. OnCompleteQuestChoice est declare dans
ScriptMgr mais appele DE NULLE PART ; le seul hook invoque a la reception
dun choix est OnPlayerChoiceResponse (QuestHandler.cpp). Corrige dans :
zone_vault_of_wardens.cpp choix Kayn / Altruis
zone_legion_dalaran_legion.cpp Dalaran
class_hall_dh.cpp fief chasseur de demons
class_hall_hunter.cpp fief chasseur
Meme defaut que celui corrige a Mardum (commit 81b37487). Dautres fichiers
(class_hall_monk, class_hall_artifact_choices) utilisaient deja le bon nom,
ce qui confirme le diagnostic.
2) CREDIT MANQUANT. Le handler ne lancait quun sort : lobjectif 99278
(choisir entre Kayn et Altruis) de la quete 40373 netait accorde par rien.
3) QUETE SANS DONNEUR. 40373 a un recepteur et deux objectifs coherents
mais aucune ligne creature_queststarter. Attribuee a Korvas 97644 : elle en
est deja la receptrice, cest son propre script qui ouvre la fenetre de
choix, elle recoit aussi la quete precedente 39686, et elle porte npcflag=3.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -117,7 +117,11 @@ class PlayerScript_DH_artifact_choice : public PlayerScript
|
||||
public:
|
||||
PlayerScript_DH_artifact_choice() : PlayerScript("PlayerScript_DH_artifact_choice") {}
|
||||
|
||||
void OnCompleteQuestChoice(Player* player, uint32 choiceID, uint32 responseID)
|
||||
// Hook renomme : OnCompleteQuestChoice est declare dans ScriptMgr mais
|
||||
// appele DE NULLE PART. Le seul hook que le core invoque a la reception
|
||||
// dun choix est OnPlayerChoiceResponse (QuestHandler.cpp). Cette methode
|
||||
// etait donc du code mort.
|
||||
void OnPlayerChoiceResponse(Player* player, uint32 choiceID, uint32 responseID) override
|
||||
{
|
||||
if (choiceID != PLAYER_CHOICE_DH_ARTIFACT_SELECTION)
|
||||
return;
|
||||
|
||||
@@ -138,7 +138,11 @@ class PlayerScript_hunter_artifact_choice : public PlayerScript
|
||||
public:
|
||||
PlayerScript_hunter_artifact_choice() : PlayerScript("PlayerScript_hunter_artifact_choice") {}
|
||||
|
||||
void OnCompleteQuestChoice(Player* player, uint32 choiceID, uint32 responseID)
|
||||
// Hook renomme : OnCompleteQuestChoice est declare dans ScriptMgr mais
|
||||
// appele DE NULLE PART. Le seul hook que le core invoque a la reception
|
||||
// dun choix est OnPlayerChoiceResponse (QuestHandler.cpp). Cette methode
|
||||
// etait donc du code mort.
|
||||
void OnPlayerChoiceResponse(Player* player, uint32 choiceID, uint32 responseID) override
|
||||
{
|
||||
if (choiceID != PLAYER_CHOICE_HUNTER_ARTIFACT_SELECTION)
|
||||
return;
|
||||
|
||||
@@ -1419,6 +1419,7 @@ enum eChoices
|
||||
SPELL_NEW_DIRECTION_CHOICE_KAYN_OR_ALTRUIS = 196650,
|
||||
SPELL_NEW_DIRECTION_CHOSE_ALTRUIS = 196662,
|
||||
SPELL_NEW_DIRECTION_CHOSE_KAYN = 196661,
|
||||
NPC_CREDIT_FOLLOWER_CHOSEN = 99278,
|
||||
};
|
||||
|
||||
class npc_korvas_bloodthorn : public CreatureScript
|
||||
@@ -1438,7 +1439,11 @@ class PlayerScript_follower_choice : public PlayerScript
|
||||
public:
|
||||
PlayerScript_follower_choice() : PlayerScript("PlayerScript_follower_choice") {}
|
||||
|
||||
void OnCompleteQuestChoice(Player* player, uint32 choiceID, uint32 responseID)
|
||||
// Hook renomme : OnCompleteQuestChoice est declare dans ScriptMgr mais
|
||||
// appele DE NULLE PART. Le seul hook que le core invoque a la reception
|
||||
// dun choix est OnPlayerChoiceResponse (QuestHandler.cpp). Cette methode
|
||||
// etait donc du code mort.
|
||||
void OnPlayerChoiceResponse(Player* player, uint32 choiceID, uint32 responseID) override
|
||||
{
|
||||
if (choiceID != PLAYER_CHOICE_DH_FOLLOWER_SELECTION)
|
||||
return;
|
||||
@@ -1452,8 +1457,15 @@ public:
|
||||
player->CastSpell(player, SPELL_NEW_DIRECTION_CHOSE_ALTRUIS, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
return;
|
||||
}
|
||||
|
||||
// Objectif « Choose between Kayn and Altruis » de la quete 40373
|
||||
// (Une nouvelle direction). Aucune source ne laccordait : ni ligne
|
||||
// smart_scripts, ni code. La quete restait donc bloquee meme une fois
|
||||
// le choix effectue.
|
||||
if (player->GetQuestStatus(QUEST_A_NEW_DIRECTION) == QUEST_STATUS_INCOMPLETE)
|
||||
player->KilledMonsterCredit(NPC_CREDIT_FOLLOWER_CHOSEN);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -342,7 +342,11 @@ class player_artifact_choice : public PlayerScript
|
||||
public:
|
||||
player_artifact_choice() : PlayerScript("player_artifact_choice") { }
|
||||
|
||||
void OnCompleteQuestChoice(Player* player, uint32 choiceId, uint32 /*responseId*/)
|
||||
// Hook renomme : OnCompleteQuestChoice est declare dans ScriptMgr mais
|
||||
// appele DE NULLE PART. Le seul hook que le core invoque a la reception
|
||||
// dun choix est OnPlayerChoiceResponse (QuestHandler.cpp). Cette methode
|
||||
// etait donc du code mort.
|
||||
void OnPlayerChoiceResponse(Player* player, uint32 choiceId, uint32 /*responseId*/) override
|
||||
{
|
||||
switch (choiceId)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user