diff options
Diffstat (limited to 'src/game/QuestHandler.cpp')
-rw-r--r-- | src/game/QuestHandler.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/game/QuestHandler.cpp b/src/game/QuestHandler.cpp index 74839bac1c3..1efbc859198 100644 --- a/src/game/QuestHandler.cpp +++ b/src/game/QuestHandler.cpp @@ -114,16 +114,17 @@ void WorldSession::HandleQuestgiverHelloOpcode( WorldPacket & recv_data ) void WorldSession::HandleQuestgiverAcceptQuestOpcode( WorldPacket & recv_data ) { - CHECK_PACKET_SIZE(recv_data, 8+4); + CHECK_PACKET_SIZE(recv_data, 8+4+4); uint64 guid; uint32 quest; - recv_data >> guid >> quest; + uint32 unk1; + recv_data >> guid >> quest >> unk1; if(!GetPlayer()->isAlive()) return; - sLog.outDebug( "WORLD: Received CMSG_QUESTGIVER_ACCEPT_QUEST npc = %u, quest = %u", uint32(GUID_LOPART(guid)), quest ); + sLog.outDebug( "WORLD: Received CMSG_QUESTGIVER_ACCEPT_QUEST npc = %u, quest = %u, unk1 = %u", uint32(GUID_LOPART(guid)), quest, unk1 ); Object* pObject = ObjectAccessor::GetObjectByTypeMask(*_player, guid,TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT|TYPEMASK_ITEM|TYPEMASK_PLAYER); @@ -210,12 +211,13 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode( WorldPacket & recv_data ) void WorldSession::HandleQuestgiverQueryQuestOpcode( WorldPacket & recv_data ) { - CHECK_PACKET_SIZE(recv_data, 8+4); + CHECK_PACKET_SIZE(recv_data, 8+4+1); uint64 guid; uint32 quest; - recv_data >> guid >> quest; - sLog.outDebug( "WORLD: Received CMSG_QUESTGIVER_QUERY_QUEST npc = %u, quest = %u", uint32(GUID_LOPART(guid)), quest ); + uint8 unk1; + recv_data >> guid >> quest >> unk1; + sLog.outDebug( "WORLD: Received CMSG_QUESTGIVER_QUERY_QUEST npc = %u, quest = %u, unk1 = %u", uint32(GUID_LOPART(guid)), quest, unk1 ); // Verify that the guid is valid and is a questgiver or involved in the requested quest Object* pObject = ObjectAccessor::GetObjectByTypeMask(*_player, guid,TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT|TYPEMASK_ITEM); @@ -234,7 +236,7 @@ void WorldSession::HandleQuestgiverQueryQuestOpcode( WorldPacket & recv_data ) void WorldSession::HandleQuestQueryOpcode( WorldPacket & recv_data ) { - CHECK_PACKET_SIZE(recv_data,4); + CHECK_PACKET_SIZE(recv_data, 4); uint32 quest; recv_data >> quest; @@ -419,7 +421,12 @@ void WorldSession::HandleQuestgiverCompleteQuest(WorldPacket& recv_data) _player->PlayerTalkClass->SendQuestGiverRequestItems(pQuest, guid, _player->CanRewardQuest(pQuest,false), false); } else - _player->PlayerTalkClass->SendQuestGiverRequestItems(pQuest, guid, _player->CanRewardQuest(pQuest,false), false); + { + if(pQuest->GetReqItemsCount()) // some items required + _player->PlayerTalkClass->SendQuestGiverRequestItems(pQuest, guid, _player->CanRewardQuest(pQuest,false), false); + else // no items required + _player->PlayerTalkClass->SendQuestGiverOfferReward(pQuest, guid, true); + } } } |