aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/TicketHandler.cpp
diff options
context:
space:
mode:
authorSubv <s.v.h21@hotmail.com>2012-10-16 21:55:01 -0500
committerSubv <s.v.h21@hotmail.com>2012-10-16 21:55:01 -0500
commit705873091b470a5d0cd361bd7f295ec724141df2 (patch)
tree2b557293395baaf88d66a1fbac55b3919569c0fc /src/server/game/Handlers/TicketHandler.cpp
parentb49891e348c01ae7f240ef07c05e09bc361f4c58 (diff)
parent27f091806a6f52f406837d188dd4171019bfa59b (diff)
Merge branch 'master' of https://github.com/TrinityCore/TrinityCore into 4.3.4
Conflicts: src/server/game/Entities/Player/Player.cpp src/server/game/Handlers/TicketHandler.cpp src/server/game/Tickets/TicketMgr.cpp src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
Diffstat (limited to 'src/server/game/Handlers/TicketHandler.cpp')
-rw-r--r--[-rwxr-xr-x]src/server/game/Handlers/TicketHandler.cpp42
1 files changed, 41 insertions, 1 deletions
diff --git a/src/server/game/Handlers/TicketHandler.cpp b/src/server/game/Handlers/TicketHandler.cpp
index e5618420ac5..5213dff2f56 100755..100644
--- a/src/server/game/Handlers/TicketHandler.cpp
+++ b/src/server/game/Handlers/TicketHandler.cpp
@@ -16,6 +16,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "zlib.h"
#include "Language.h"
#include "WorldPacket.h"
#include "Common.h"
@@ -26,7 +27,7 @@
#include "WorldSession.h"
#include "Util.h"
-void WorldSession::HandleGMTicketCreateOpcode(WorldPacket & recvData)
+void WorldSession::HandleGMTicketCreateOpcode(WorldPacket& recvData)
{
// Don't accept tickets if the ticket queue is disabled. (Ticket UI is greyed out but not fully dependable)
if (sTicketMgr->GetStatus() == GMTICKET_QUEUE_STATUS_DISABLED)
@@ -43,6 +44,45 @@ void WorldSession::HandleGMTicketCreateOpcode(WorldPacket & recvData)
if (!sTicketMgr->GetTicketByPlayer(GetPlayer()->GetGUID()))
{
GmTicket* ticket = new GmTicket(GetPlayer(), recvData);
+
+ uint32 count;
+ std::list<uint32> times;
+ uint32 decompressedSize;
+ std::string chatLog;
+
+ recvData >> count;
+
+ for (uint32 i = 0; i < count; i++)
+ {
+ uint32 time;
+ recvData >> time;
+ times.push_back(time);
+ }
+
+ recvData >> decompressedSize;
+
+ if (count && decompressedSize && decompressedSize < 0xFFFF)
+ {
+ uint32 pos = recvData.rpos();
+ ByteBuffer dest;
+ dest.resize(decompressedSize);
+
+ uLongf realSize = decompressedSize;
+ if (uncompress(const_cast<uint8*>(dest.contents()), &realSize, const_cast<uint8*>(recvData.contents() + pos), recvData.size() - pos) == Z_OK)
+ {
+ dest >> chatLog;
+ ticket->SetChatLog(times, chatLog);
+ }
+ else
+ {
+ sLog->outError(LOG_FILTER_NETWORKIO, "CMSG_GMTICKET_CREATE possibly corrupt. Uncompression failed.");
+ recvData.rfinish();
+ return;
+ }
+
+ recvData.rfinish(); // Will still have compressed data in buffer.
+ }
+
sTicketMgr->AddTicket(ticket);
sTicketMgr->UpdateLastChange();