diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 1c73567..a57f0ca 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -20227,14 +20227,15 @@ bool Player::QuestObjectiveActiveInPlayerByObject(uint32 objectId) continue; for (QuestObjective const& obj : quest->GetObjectives()) - { if ((uint32)obj.ObjectID == objectId) - { return true; - break; - } - } } + + // SylvaniaCore : sans ce return, sortir de la boucle etait un comportement + // indefini -- GCC en deduisait que la boucle ne pouvait pas se terminer et + // supprimait le test q < MAX_QUEST_LOG_SIZE. Le slot grimpait au-dela de 25 + // jusqu a sortir du tableau de valeurs du joueur (ASSERT dans GetUInt32Value). + return false; } PlayerPetData* Player::GetPlayerPetDataById(uint32 petId) diff --git a/src/server/scripts/World/PetBattleTrainer.cpp b/src/server/scripts/World/PetBattleTrainer.cpp index 372657c..632d1d7 100644 --- a/src/server/scripts/World/PetBattleTrainer.cpp +++ b/src/server/scripts/World/PetBattleTrainer.cpp @@ -38,24 +38,17 @@ class npc_TrainerBattlePet : public CreatureScript public: npc_TrainerBattlePet() : CreatureScript("npc_TrainerBattlePet") { } - uint32 ObjectId = 0; - bool isTrainer = false; + // SylvaniaCore : un CreatureScript est un singleton partage par tous les + // joueurs et tous les PNJ qui portent le script -- l etat du dernier + // interlocuteur ne doit pas conditionner ce que fait le suivant. bool OnGossipHello(Player* player, Creature* creature) override { if (sBattlePetDataStore->GetPetBattleTrainerTeam(creature->GetEntry()).empty()) return false; - ObjectId = creature->GetEntry(); - if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); - if (player->QuestObjectiveActiveInPlayerByObject(ObjectId)) - { - isTrainer = true; - - } - AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Let`s Go", GOSSIP_SENDER_MAIN, 0); SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); @@ -66,7 +59,7 @@ public: { player->PlayerTalkClass->ClearMenus(); - if (isTrainer) + if (player->QuestObjectiveActiveInPlayerByObject(creature->GetEntry())) { if (uiAction == 0) {