diff options
| author | Subv <s.v.h21@hotmail.com> | 2012-10-16 21:55:01 -0500 |
|---|---|---|
| committer | Subv <s.v.h21@hotmail.com> | 2012-10-16 21:55:01 -0500 |
| commit | 705873091b470a5d0cd361bd7f295ec724141df2 (patch) | |
| tree | 2b557293395baaf88d66a1fbac55b3919569c0fc /src/server/game/Handlers/TicketHandler.cpp | |
| parent | b49891e348c01ae7f240ef07c05e09bc361f4c58 (diff) | |
| parent | 27f091806a6f52f406837d188dd4171019bfa59b (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.cpp | 42 |
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(); |
