/* * Copyright (C) 2012-2018 CypherCore * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ using Framework.Constants; using Framework.Dynamic; using Framework.GameMath; using Game.Entities; using System; using System.Collections.Generic; namespace Game.Network.Packets { public class GMTicketGetSystemStatus : ClientPacket { public GMTicketGetSystemStatus(WorldPacket packet) : base(packet) { } public override void Read() { } } public class GMTicketSystemStatusPkt : ServerPacket { public GMTicketSystemStatusPkt() : base(ServerOpcodes.GmTicketSystemStatus) { } public override void Write() { _worldPacket.WriteInt32(Status); } public int Status; } public class GMTicketGetCaseStatus : ClientPacket { public GMTicketGetCaseStatus(WorldPacket packet) : base(packet) { } public override void Read() { } } public class GMTicketCaseStatus : ServerPacket { public GMTicketCaseStatus() : base(ServerOpcodes.GmTicketCaseStatus) { } public override void Write() { _worldPacket.WriteInt32(Cases.Count); foreach (var c in Cases) { _worldPacket.WriteInt32(c.CaseID); _worldPacket.WriteInt32(c.CaseOpened); _worldPacket.WriteInt32(c.CaseStatus); _worldPacket.WriteInt16(c.CfgRealmID); _worldPacket.WriteInt64(c.CharacterID); _worldPacket.WriteInt32(c.WaitTimeOverrideMinutes); _worldPacket.WriteBits(c.Url.GetByteCount(), 11); _worldPacket.WriteBits(c.WaitTimeOverrideMessage.GetByteCount(), 10); _worldPacket.WriteString(c.Url); _worldPacket.WriteString(c.WaitTimeOverrideMessage); } } public List Cases = new List(); public struct GMTicketCase { public int CaseID; public int CaseOpened; public int CaseStatus; public short CfgRealmID; public long CharacterID; public int WaitTimeOverrideMinutes; public string Url; public string WaitTimeOverrideMessage; } } public class GMTicketAcknowledgeSurvey : ClientPacket { public GMTicketAcknowledgeSurvey(WorldPacket packet) : base(packet) { } public override void Read() { CaseID = _worldPacket.ReadInt32(); } int CaseID; } public class SupportTicketSubmitBug : ClientPacket { public SupportTicketHeader Header; public string Note; public SupportTicketSubmitBug(WorldPacket packet) : base(packet) { } public override void Read() { Header.Read(_worldPacket); Note = _worldPacket.ReadString(_worldPacket.ReadBits(10)); } } public class SupportTicketSubmitSuggestion : ClientPacket { public SupportTicketHeader Header; public string Note; public SupportTicketSubmitSuggestion(WorldPacket packet) : base(packet) { } public override void Read() { Header.Read(_worldPacket); Note = _worldPacket.ReadString(_worldPacket.ReadBits(10)); } } public class SupportTicketSubmitComplaint : ClientPacket { public SupportTicketSubmitComplaint(WorldPacket packet) : base(packet) { } public override void Read() { Header.Read(_worldPacket); TargetCharacterGUID = _worldPacket.ReadPackedGuid(); ChatLog.Read(_worldPacket); ComplaintType = _worldPacket.ReadBits(5); uint noteLength = _worldPacket.ReadBits(10); bool hasMailInfo = _worldPacket.HasBit(); bool hasCalendarInfo = _worldPacket.HasBit(); bool hasPetInfo = _worldPacket.HasBit(); bool hasGuildInfo = _worldPacket.HasBit(); bool hasLFGListSearchResult = _worldPacket.HasBit(); bool hasLFGListApplicant = _worldPacket.HasBit(); _worldPacket.ResetBitPos(); if (hasMailInfo) { MailInfo.HasValue = true; MailInfo.Value.Read(_worldPacket); } Note = _worldPacket.ReadString(noteLength); if (hasCalendarInfo) { CalenderInfo.HasValue = true; CalenderInfo.Value.Read(_worldPacket); } if (hasPetInfo) { PetInfo.HasValue = true; PetInfo.Value.Read(_worldPacket); } if (hasGuildInfo) { GuildInfo.HasValue = true; GuildInfo.Value.Read(_worldPacket); } if (hasLFGListSearchResult) { LFGListSearchResult.HasValue = true; LFGListSearchResult.Value.Read(_worldPacket); } if (hasLFGListApplicant) { LFGListApplicant.HasValue = true; LFGListApplicant.Value.Read(_worldPacket); } } public SupportTicketHeader Header; public SupportTicketChatLog ChatLog; public ObjectGuid TargetCharacterGUID; public byte ComplaintType; public string Note; public Optional MailInfo; public Optional CalenderInfo; public Optional PetInfo; public Optional GuildInfo; public Optional LFGListSearchResult; public Optional LFGListApplicant; public struct SupportTicketChatLine { public uint Timestamp; public string Text; public SupportTicketChatLine(WorldPacket data) { Timestamp = data.ReadUInt32(); Text = data.ReadString(data.ReadBits(12)); } public SupportTicketChatLine(uint timestamp, string text) { Timestamp = timestamp; Text = text; } public void Read(WorldPacket data) { Timestamp = data.ReadUInt32(); Text = data.ReadString(data.ReadBits(12)); } } public class SupportTicketChatLog { public void Read(WorldPacket data) { uint linesCount = data.ReadUInt32(); ReportLineIndex.HasValue = data.HasBit(); data.ResetBitPos(); for (uint i = 0; i < linesCount; i++) Lines.Add(new SupportTicketChatLine(data)); if (ReportLineIndex.HasValue) ReportLineIndex.Value = data.ReadUInt32(); } public List Lines = new List(); public Optional ReportLineIndex; } public struct SupportTicketMailInfo { public void Read(WorldPacket data) { MailID = data.ReadInt32(); uint bodyLength = data.ReadBits(13); uint subjectLength = data.ReadBits(9); MailBody = data.ReadString(bodyLength); MailSubject = data.ReadString(subjectLength); } int MailID; string MailSubject; string MailBody; } public struct SupportTicketCalendarEventInfo { public void Read(WorldPacket data) { EventID = data.ReadUInt64(); InviteID = data.ReadUInt64(); EventTitle = data.ReadString(data.ReadBits(8)); } ulong EventID; ulong InviteID; string EventTitle; } public struct SupportTicketPetInfo { public void Read(WorldPacket data) { PetID = data.ReadPackedGuid(); PetName = data.ReadString(data.ReadBits(8)); } ObjectGuid PetID; string PetName; } public struct SupportTicketGuildInfo { public void Read(WorldPacket data) { byte nameLength = data.ReadBits(8); GuildID = data.ReadPackedGuid(); GuildName = data.ReadString(nameLength); } ObjectGuid GuildID; string GuildName; } public struct SupportTicketLFGListSearchResult { public void Read(WorldPacket data) { RideTicket = new RideTicket(); RideTicket.Read(data); GroupFinderActivityID = data.ReadUInt32(); LastTitleAuthorGuid = data.ReadPackedGuid(); LastDescriptionAuthorGuid = data.ReadPackedGuid(); LastVoiceChatAuthorGuid = data.ReadPackedGuid(); ListingCreatorGuid = data.ReadPackedGuid(); Unknown735 = data.ReadPackedGuid(); byte titleLength = data.ReadBits(8); byte descriptionLength = data.ReadBits(11); byte voiceChatLength = data.ReadBits(8); Title = data.ReadString(titleLength); Description = data.ReadString(descriptionLength); VoiceChat = data.ReadString(voiceChatLength); } RideTicket RideTicket; uint GroupFinderActivityID; ObjectGuid LastTitleAuthorGuid; ObjectGuid LastDescriptionAuthorGuid; ObjectGuid LastVoiceChatAuthorGuid; ObjectGuid ListingCreatorGuid; ObjectGuid Unknown735; string Title; string Description; string VoiceChat; } public struct SupportTicketLFGListApplicant { public void Read(WorldPacket data) { RideTicket = new RideTicket(); RideTicket.Read(data); Comment = data.ReadString(data.ReadBits(9)); } RideTicket RideTicket; string Comment; } } class Complaint : ClientPacket { public Complaint(WorldPacket packet) : base(packet) { } public override void Read() { ComplaintType = (SupportSpamType)_worldPacket.ReadUInt8(); Offender.Read(_worldPacket); switch (ComplaintType) { case SupportSpamType.Mail: MailID = _worldPacket.ReadUInt32(); break; case SupportSpamType.Chat: Chat.Read(_worldPacket); break; case SupportSpamType.Calendar: EventGuid = _worldPacket.ReadUInt64(); InviteGuid = _worldPacket.ReadUInt64(); break; } } public SupportSpamType ComplaintType; ComplaintOffender Offender; uint MailID; ComplaintChat Chat; ulong EventGuid; ulong InviteGuid; struct ComplaintOffender { public void Read(WorldPacket data) { PlayerGuid = data.ReadPackedGuid(); RealmAddress = data.ReadUInt32(); TimeSinceOffence = data.ReadUInt32(); } public ObjectGuid PlayerGuid; public uint RealmAddress; public uint TimeSinceOffence; } struct ComplaintChat { public void Read(WorldPacket data) { Command = data.ReadUInt32(); ChannelID = data.ReadUInt32(); MessageLog = data.ReadString(data.ReadBits(12)); } public uint Command; public uint ChannelID; public string MessageLog; } } public class ComplaintResult : ServerPacket { public ComplaintResult() : base(ServerOpcodes.ComplaintResult) { } public override void Write() { _worldPacket.WriteUInt32(ComplaintType); _worldPacket.WriteUInt8(Result); } public SupportSpamType ComplaintType; public byte Result; } class BugReport : ClientPacket { public BugReport(WorldPacket packet) : base(packet) { } public override void Read() { Type = _worldPacket.ReadBit(); uint diagLen = _worldPacket.ReadBits(12); uint textLen = _worldPacket.ReadBits(10); DiagInfo = _worldPacket.ReadString(diagLen); Text = _worldPacket.ReadString(textLen); } public uint Type; public string Text; public string DiagInfo; } //Structs public struct SupportTicketHeader { public void Read(WorldPacket packet) { MapID = packet.ReadUInt32(); Position = packet.ReadVector3(); Facing = packet.ReadFloat(); } public uint MapID; public Vector3 Position; public float Facing; } }