diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Creature/GossipDef.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Creature/GossipDef.h | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 48 | ||||
| -rw-r--r-- | src/server/game/Quests/QuestDef.h | 5 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 2 |
6 files changed, 32 insertions, 33 deletions
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index d04fde46713..9a6dce7d9f0 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -297,7 +297,7 @@ void QuestMenu::ClearMenu() _questMenuItems.clear(); } -void PlayerMenu::SendQuestGiverQuestList(QEmote eEmote, const std::string& Title, uint64 npcGUID) +void PlayerMenu::SendQuestGiverQuestList(QEmote const& eEmote, const std::string& Title, uint64 npcGUID) { WorldPacket data(SMSG_QUESTGIVER_QUEST_LIST, 100); // guess size data << uint64(npcGUID); diff --git a/src/server/game/Entities/Creature/GossipDef.h b/src/server/game/Entities/Creature/GossipDef.h index b43ab8ec332..0c5b7e8c9eb 100644 --- a/src/server/game/Entities/Creature/GossipDef.h +++ b/src/server/game/Entities/Creature/GossipDef.h @@ -273,7 +273,7 @@ class PlayerMenu /*********************************************************/ void SendQuestGiverStatus(uint8 questStatus, uint64 npcGUID) const; - void SendQuestGiverQuestList(QEmote eEmote, const std::string& Title, uint64 npcGUID); + void SendQuestGiverQuestList(QEmote const& eEmote, const std::string& Title, uint64 npcGUID); void SendQuestQueryResponse(Quest const* quest) const; void SendQuestGiverQuestDetails(Quest const* quest, uint64 npcGUID, bool activateAccept) const; diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index a84d8e33812..c73a4c845bb 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -36,8 +36,7 @@ void WorldSession::HandleQuestgiverStatusQueryOpcode(WorldPacket& recvData) { uint64 guid; recvData >> guid; - uint8 questStatus = DIALOG_STATUS_NONE; - uint8 defstatus = DIALOG_STATUS_NONE; + uint32 questStatus = DIALOG_STATUS_NONE; Object* questgiver = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT); if (!questgiver) @@ -50,23 +49,23 @@ void WorldSession::HandleQuestgiverStatusQueryOpcode(WorldPacket& recvData) { case TYPEID_UNIT: { - TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for npc, guid = %u", uint32(GUID_LOPART(guid))); - Creature* cr_questgiver=questgiver->ToCreature(); + TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for npc, guid = %u", questgiver->GetGUIDLow()); + Creature* cr_questgiver = questgiver->ToCreature(); if (!cr_questgiver->IsHostileTo(_player)) // do not show quest status to enemies { questStatus = sScriptMgr->GetDialogStatus(_player, cr_questgiver); - if (questStatus > 6) - questStatus = getDialogStatus(_player, cr_questgiver, defstatus); + if (questStatus == DIALOG_STATUS_SCRIPTED_NO_STATUS) + questStatus = getDialogStatus(_player, cr_questgiver); } break; } case TYPEID_GAMEOBJECT: { - TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for GameObject guid = %u", uint32(GUID_LOPART(guid))); - GameObject* go_questgiver=(GameObject*)questgiver; + TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for GameObject guid = %u", questgiver->GetGUIDLow()); + GameObject* go_questgiver = questgiver->ToGameObject(); questStatus = sScriptMgr->GetDialogStatus(_player, go_questgiver); - if (questStatus > 6) - questStatus = getDialogStatus(_player, go_questgiver, defstatus); + if (questStatus == DIALOG_STATUS_SCRIPTED_NO_STATUS) + questStatus = getDialogStatus(_player, go_questgiver); break; } default: @@ -75,7 +74,7 @@ void WorldSession::HandleQuestgiverStatusQueryOpcode(WorldPacket& recvData) } //inform client about status of quest - _player->PlayerTalkClass->SendQuestGiverStatus(questStatus, guid); + _player->PlayerTalkClass->SendQuestGiverStatus(uint8(questStatus), guid); } void WorldSession::HandleQuestgiverHelloOpcode(WorldPacket& recvData) @@ -639,9 +638,9 @@ void WorldSession::HandleQuestPushResult(WorldPacket& recvPacket) } } -uint32 WorldSession::getDialogStatus(Player* player, Object* questgiver, uint32 defstatus) +uint32 WorldSession::getDialogStatus(Player* player, Object* questgiver) { - uint32 result = defstatus; + uint32 result = DIALOG_STATUS_NONE; QuestRelationBounds qr; QuestRelationBounds qir; @@ -682,7 +681,7 @@ uint32 WorldSession::getDialogStatus(Player* player, Object* questgiver, uint32 if ((status == QUEST_STATUS_COMPLETE && !player->GetQuestRewardStatus(quest_id)) || (quest->IsAutoComplete() && player->CanTakeQuest(quest, false))) { - if (quest->IsAutoComplete() && quest->IsRepeatable()) + if (quest->IsAutoComplete() && quest->IsRepeatable() && !quest->IsDailyOrWeekly()) result2 = DIALOG_STATUS_REWARD_REP; else result2 = DIALOG_STATUS_REWARD; @@ -713,11 +712,11 @@ uint32 WorldSession::getDialogStatus(Player* player, Object* questgiver, uint32 { if (player->SatisfyQuestLevel(quest, false)) { - if (quest->IsAutoComplete() || (quest->IsRepeatable() && player->IsQuestRewarded(quest_id))) + if (quest->IsAutoComplete()) result2 = DIALOG_STATUS_REWARD_REP; else if (player->getLevel() <= ((player->GetQuestLevel(quest) == -1) ? player->getLevel() : player->GetQuestLevel(quest) + sWorld->getIntConfig(CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF))) { - if (quest->HasFlag(QUEST_FLAGS_DAILY) || quest->HasFlag(QUEST_FLAGS_WEEKLY)) + if (quest->IsDaily()) result2 = DIALOG_STATUS_AVAILABLE_REP; else result2 = DIALOG_STATUS_AVAILABLE; @@ -748,8 +747,7 @@ void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket for (Player::ClientGUIDs::const_iterator itr = _player->m_clientGUIDs.begin(); itr != _player->m_clientGUIDs.end(); ++itr) { - uint8 questStatus = DIALOG_STATUS_NONE; - uint8 defstatus = DIALOG_STATUS_NONE; + uint32 questStatus = DIALOG_STATUS_NONE; if (IS_CRE_OR_VEH_OR_PET_GUID(*itr)) { @@ -759,9 +757,10 @@ void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket continue; if (!questgiver->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER)) continue; + questStatus = sScriptMgr->GetDialogStatus(_player, questgiver); - if (questStatus > 6) - questStatus = getDialogStatus(_player, questgiver, defstatus); + if (questStatus == DIALOG_STATUS_SCRIPTED_NO_STATUS) + questStatus = getDialogStatus(_player, questgiver); data << uint64(questgiver->GetGUID()); data << uint8(questStatus); @@ -770,13 +769,12 @@ void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket else if (IS_GAMEOBJECT_GUID(*itr)) { GameObject* questgiver = GetPlayer()->GetMap()->GetGameObject(*itr); - if (!questgiver) - continue; - if (questgiver->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER) + if (!questgiver || questgiver->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER) continue; + questStatus = sScriptMgr->GetDialogStatus(_player, questgiver); - if (questStatus > 6) - questStatus = getDialogStatus(_player, questgiver, defstatus); + if (questStatus == DIALOG_STATUS_SCRIPTED_NO_STATUS) + questStatus = getDialogStatus(_player, questgiver); data << uint64(questgiver->GetGUID()); data << uint8(questStatus); diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index 88a4ddfcad9..f763777fe15 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -118,7 +118,10 @@ enum QuestGiverStatus DIALOG_STATUS_AVAILABLE_REP = 7, DIALOG_STATUS_AVAILABLE = 8, DIALOG_STATUS_REWARD2 = 9, // no yellow dot on minimap - DIALOG_STATUS_REWARD = 10 // yellow dot on minimap + DIALOG_STATUS_REWARD = 10, // yellow dot on minimap + + // Custom value meaning that script call did not return any valid quest status + DIALOG_STATUS_SCRIPTED_NO_STATUS = 0x1000, }; enum QuestFlags diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 3674f8fe15e..6a1ab28efed 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -778,8 +778,7 @@ uint32 ScriptMgr::GetDialogStatus(Player* player, Creature* creature) ASSERT(player); ASSERT(creature); - /// @todo 100 is a funny magic number to have hanging around here... - GET_SCRIPT_RET(CreatureScript, creature->GetScriptId(), tmpscript, 100); + GET_SCRIPT_RET(CreatureScript, creature->GetScriptId(), tmpscript, DIALOG_STATUS_SCRIPTED_NO_STATUS); player->PlayerTalkClass->ClearMenus(); return tmpscript->GetDialogStatus(player, creature); } @@ -864,8 +863,7 @@ uint32 ScriptMgr::GetDialogStatus(Player* player, GameObject* go) ASSERT(player); ASSERT(go); - /// @todo 100 is a funny magic number to have hanging around here... - GET_SCRIPT_RET(GameObjectScript, go->GetScriptId(), tmpscript, 100); + GET_SCRIPT_RET(GameObjectScript, go->GetScriptId(), tmpscript, DIALOG_STATUS_SCRIPTED_NO_STATUS); player->PlayerTalkClass->ClearMenus(); return tmpscript->GetDialogStatus(player, go); } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 2d7ec9c68c6..4aef02206c4 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -357,7 +357,7 @@ class WorldSession uint32 GetLatency() const { return m_latency; } void SetLatency(uint32 latency) { m_latency = latency; } void ResetClientTimeDelay() { m_clientTimeDelay = 0; } - uint32 getDialogStatus(Player* player, Object* questgiver, uint32 defstatus); + uint32 getDialogStatus(Player* player, Object* questgiver); ACE_Atomic_Op<ACE_Thread_Mutex, time_t> m_timeOutTime; void UpdateTimeOutTime(uint32 diff) |
