diff options
| author | Intel <chemicstry@gmail.com> | 2014-12-29 22:36:02 +0200 |
|---|---|---|
| committer | Intel <chemicstry@gmail.com> | 2014-12-29 22:36:02 +0200 |
| commit | 8be25ce908912a1431a15a022503911e2afa5fe2 (patch) | |
| tree | f31aaf9682b85ab02e6e1997e654285118dc9e3a /src/server/game/Server | |
| parent | 6b10271891d2cbafbad1446051fcf3866ea728e3 (diff) | |
Core/Quests: Added SMSG_QUESTGIVER_REQUEST_ITEMS
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/QuestPackets.cpp | 39 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/QuestPackets.h | 37 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.h | 2 |
4 files changed, 78 insertions, 2 deletions
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index fd7320eac7e..5003b49dc2f 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -374,3 +374,42 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestDetails::Write() return &_worldPacket; } + +WorldPacket const* WorldPackets::Quest::QuestGiverRequestItems::Write() +{ + _worldPacket << QuestGiverGUID; + _worldPacket << QuestGiverCreatureID; + _worldPacket << QuestID; + _worldPacket << CompEmoteDelay; + _worldPacket << CompEmoteType; + _worldPacket << QuestFlags[0]; + _worldPacket << QuestFlags[1]; + _worldPacket << SuggestPartyMembers; + _worldPacket << MoneyToGet; + _worldPacket << int32(Collect.size()); + _worldPacket << int32(Currency.size()); + _worldPacket << StatusFlags; + + for (QuestObjectiveCollect const& obj : Collect) + { + _worldPacket << obj.ObjectID; + _worldPacket << obj.Amount; + } + + for (QuestCurrency const& cur : Currency) + { + _worldPacket << cur.CurrencyID; + _worldPacket << cur.Amount; + } + + _worldPacket.WriteBit(AutoLaunched); + _worldPacket.FlushBits(); + + _worldPacket.WriteBits(QuestTitle.size(), 9); + _worldPacket.WriteBits(CompletionText.size(), 12); + + _worldPacket.WriteString(QuestTitle); + _worldPacket.WriteString(CompletionText); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 66f97dcfc30..2d42d5990f7 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -345,6 +345,43 @@ namespace WorldPackets bool StartCheat = false; bool AutoLaunched = false; }; + + struct QuestObjectiveCollect + { + QuestObjectiveCollect(int32 objectID = 0, int32 amount = 0) : ObjectID(objectID), Amount(amount) { } + int32 ObjectID; + int32 Amount; + }; + + struct QuestCurrency + { + QuestCurrency(int32 currencyID = 0, int32 amount = 0) : CurrencyID(currencyID), Amount(amount) { } + int32 CurrencyID; + int32 Amount; + }; + + class QuestGiverRequestItems final : public ServerPacket + { + public: + QuestGiverRequestItems() : ServerPacket(SMSG_QUESTGIVER_REQUEST_ITEMS, 300) { } + + WorldPacket const* Write() override; + + ObjectGuid QuestGiverGUID; + int32 QuestGiverCreatureID = 0; + int32 QuestID = 0; + int32 CompEmoteDelay = 0; + int32 CompEmoteType = 0; + bool AutoLaunched = false; + int32 SuggestPartyMembers = 0; + int32 MoneyToGet = 0; + std::vector<QuestObjectiveCollect> Collect; + std::vector<QuestCurrency> Currency; + int32 StatusFlags = 0; + uint32 QuestFlags[2] = {}; + std::string QuestTitle; + std::string CompletionText; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 6919d457ecb..cbc98dbef3c 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1232,7 +1232,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_QUEST_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_QUEST_INVALID, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_QUEST_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_REQUEST_ITEMS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_REQUEST_ITEMS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_STATUS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_STATUS_MULTIPLE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTLOG_FULL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 0c8f0569da8..4c84d7b47f4 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -1237,7 +1237,7 @@ enum OpcodeServer : uint32 SMSG_QUESTGIVER_QUEST_FAILED = 0xBADD, SMSG_QUESTGIVER_QUEST_INVALID = 0xBADD, SMSG_QUESTGIVER_QUEST_LIST = 0xBADD, - SMSG_QUESTGIVER_REQUEST_ITEMS = 0xBADD, + SMSG_QUESTGIVER_REQUEST_ITEMS = 0x17B8, SMSG_QUESTGIVER_STATUS = 0x1567, SMSG_QUESTGIVER_STATUS_MULTIPLE = 0x17C6, SMSG_QUESTLOG_FULL = 0xBADD, |
