using System; using System.Collections.Generic; using System.Linq; using System.Text; using NLog; using WCell.Core; using WCell.Core.Initialization; using WCell.Core.DBC; using WCell.Core.Network; using WCell.RealmServer.Entities; namespace WCell.RealmServer.Help { public static class TicketHandler { private static Logger log = LogManager.GetCurrentClassLogger(); public static bool SystemStatus = 1; public static Dictionary dic = new Dictionary(); [PacketHandler(RealmServerOpCode.CMSG_GMTICKET_CREATE)] public static void HandleCreateTicketPacket(RealmClient client, RealmPacketIn packet) { if (client.ActiveCharacter == null) { return; } uint Id = client.ActiveCharacter.EntityId.Low; uint Type = packet.ReadUInt32(); packet.ReadBytes(1); float Position_X = packet.ReadFloat(); float Position_Y = packet.ReadFloat(); float Position_Z = packet.ReadFloat(); string Message = packet.ReadString(); string Timestamp = DateTime.Now.ToLongTimeString(); dic[Id] = new Ticket(Id, Type, Position_X, Position_Y, Position_Z, Message, Timestamp); using (RealmPacketOut repPacket = new RealmPacketOut(RealmServerOpCode.SMSG_GMTICKET_CREATE)) { repPacket.WriteUInt(2); client.Send(repPacket); } } [PacketHandler(RealmServerOpCode.CMSG_GMTICKET_GETTICKET)] public static void HandleGetTicketPacket(RealmClient client, RealmPacketIn packet) { using (RealmPacketOut repPacket = new RealmPacketOut(RealmServerOpCode.SMSG_GMTICKET_GETTICKET)) { uint Id = client.ActiveCharacter.EntityId.Low; Ticket ticket; if (dic.TryGetValue(Id, out ticket)) { repPacket.WriteUInt(6); repPacket.WriteCString(ticket.Message); repPacket.WriteByte((byte)ticket.Type); client.Send(repPacket); } else { return; } } } [PacketHandler(RealmServerOpCode.CMSG_GMTICKET_SYSTEMSTATUS)] public static void HandleSystemStatusPacket(RealmClient client, RealmPacketIn packet) { using (RealmPacketOut repPacket = new RealmPacketOut(RealmServerOpCode.SMSG_GMTICKET_SYSTEMSTATUS)) { repPacket.WriteUInt((uint)SystemStatus); client.Send(repPacket); } } [PacketHandler(RealmServerOpCode.CMSG_GMTICKET_DELETETICKET)] public static void HandleDeleteTicketPacket(RealmClient client, RealmPacketIn packet) { uint Id = client.ActiveCharacter.EntityId.Low; using (RealmPacketOut repPacket = new RealmPacketOut(RealmServerOpCode.SMSG_GMTICKET_DELETETICKET)) { dic.Remove(Id); repPacket.WriteUInt(9); client.Send(repPacket); } } [PacketHandler(RealmServerOpCode.CMSG_GMTICKET_UPDATETEXT)] public static void HandleUpdateTicketPacket(RealmClient client, RealmPacketIn packet) { using (RealmPacketOut repPacket = new RealmPacketOut(RealmServerOpCode.SMSG_GMTICKET_UPDATETEXT)) { uint Id = client.ActiveCharacter.EntityId.Low; Ticket ticket; packet.ReadBytes(1); if (dic.TryGetValue(Id, out ticket)) { ticket.Message = packet.ReadString(); ticket.Timestamp = DateTime.Now.ToLongTimeString(); dic.Remove(Id); dic[Id] = ticket; repPacket.WriteUInt(2); client.Send(repPacket); } else { repPacket.WriteUInt(1); client.Send(repPacket); } } } } }