aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorIntel <chemicstry@gmail.com>2014-12-29 22:36:02 +0200
committerIntel <chemicstry@gmail.com>2014-12-29 22:36:02 +0200
commit8be25ce908912a1431a15a022503911e2afa5fe2 (patch)
treef31aaf9682b85ab02e6e1997e654285118dc9e3a /src/server/game/Server
parent6b10271891d2cbafbad1446051fcf3866ea728e3 (diff)
Core/Quests: Added SMSG_QUESTGIVER_REQUEST_ITEMS
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp39
-rw-r--r--src/server/game/Server/Packets/QuestPackets.h37
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h2
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,