/// <summary> /// Handles the message packet. /// </summary> /// <param name="client">The client.</param> /// <param name="packet">The packet.</param> public static void Handle(Entities.GameClient client, DataPacket packet) { using (var message = new MessagePacket(packet)) { if (message.Message.StartsWith("/") && !message.Message.StartsWith("//") || message.Message.StartsWith("@") && !message.Message.StartsWith("@@")) { Packets.Message.Commands.Handle(client, message.Message, message.Message.Split(' ')); } else { if (message.ChatType != Enums.ChatType.Team && !client.Alive && message.ChatType != Enums.ChatType.Ghost) return; if (message.From != client.Name) { client.NetworkClient.Disconnect("INVALID_CHAT_NAME"); return; } switch (message.ChatType) { #region Whisper case Enums.ChatType.Whisper: { if (message.To == client.Name) return; Entities.GameClient toclient; if (Core.Kernel.Clients.TrySelect(message.To, out toclient)) { message.FromMesh = client.Mesh; message.ToMesh = toclient.Mesh; toclient.Send(message); } else { if (Database.CharacterDatabase.CharacterExists(message.To))//(System.IO.File.Exists(Database.ServerDatabase.DatabaseLocation + "\\UsedNames\\" + message.To + ".nm")) { using (var fmsg = Packets.Message.MessageCore.CreateSystem( client.Name, string.Format(Core.MessageConst.PLAYER_OFFLINE_WHISPER, message.To))) client.Send(fmsg); ProjectX_V3_Lib.IO.IniFile whisper = new ProjectX_V3_Lib.IO.IniFile( Database.ServerDatabase.DatabaseLocation + "\\MessageQuery\\" + message.To + ".ini", "Whisper"); int count = whisper.ReadInt32("Count", 0); count++; whisper.Write<int>("Count", count); whisper.SetSection(count.ToString()); whisper.WriteString("From", client.Name); whisper.WriteString("Message", message.Message); whisper.Write<uint>("Mesh", client.Mesh); } else { using (var fmsg = Packets.Message.MessageCore.CreateSystem( client.Name, string.Format(Core.MessageConst.PLAYER_OFFLINE_WHISPER2, message.To))) client.Send(fmsg); } } break; } #endregion #region Talk + Ghost case Enums.ChatType.Talk: case Enums.ChatType.Ghost: { client.SendToScreen(message, false, message.ChatType == Enums.ChatType.Ghost); break; } #endregion #region World case Enums.ChatType.World: { if (client.Level < 70) { using (var fmsg = Packets.Message.MessageCore.CreateSystem( client.Name, Core.MessageConst.WORLD_CHAT_NO_PERMISSION)) client.Send(fmsg); return; } int required = 60000; if (client.Level >= 100) required = 45000; if (client.Level >= 110) required = 30000; if (client.Level >= 120) required = 15000; if (DateTime.Now >= client.WorldChatSend.AddMilliseconds(required)) { client.WorldChatSend = DateTime.Now; foreach (Entities.GameClient sclient in Core.Kernel.Clients.selectorCollection1.Values) { if (sclient.EntityUID != client.EntityUID) sclient.Send(message); } } else { using (var fmsg = Packets.Message.MessageCore.CreateSystem( client.Name, string.Format(Core.MessageConst.WORLD_CHAT_WAIT, required))) client.Send(fmsg); } break; } #endregion #region Guild case Enums.ChatType.Guild: { if (client.Guild != null) { client.Guild.BroadcastMessage(message); } break; } #endregion #region Hawk case Enums.ChatType.HawkMessage: { if (client.Booth == null) return; client.Booth.HawkMessage = message.Message; break; } #endregion #region Team case Enums.ChatType.Team: { if (client.TournamentTeam != null) { foreach (Entities.GameClient teamMember in client.TournamentTeam.TeamMembers.ToDictionary().Values) { teamMember.Send(message); } } else if (client.Team != null) { foreach (Entities.GameClient teamMember in client.Team.Members.Values) { teamMember.Send(message); } } break; } #endregion } } } }
/// <summary> /// Handles the message packet. /// </summary> /// <param name="client">The client.</param> /// <param name="packet">The packet.</param> public static void Handle(Entities.GameClient client, DataPacket packet) { using (var message = new MessagePacket(packet)) { if (message.Message.StartsWith("/") && !message.Message.StartsWith("//") || message.Message.StartsWith("@") && !message.Message.StartsWith("@@")) { Packets.Message.Commands.Handle(client, message.Message, message.Message.Split(' ')); } else { if (message.ChatType != Enums.ChatType.Team && !client.Alive && message.ChatType != Enums.ChatType.Ghost) { return; } if (message.From != client.Name) { client.NetworkClient.Disconnect("INVALID_CHAT_NAME"); return; } switch (message.ChatType) { #region Whisper case Enums.ChatType.Whisper: { if (message.To == client.Name) { return; } Entities.GameClient toclient; if (Core.Kernel.Clients.TrySelect(message.To, out toclient)) { message.FromMesh = client.Mesh; message.ToMesh = toclient.Mesh; toclient.Send(message); } else { if (Database.CharacterDatabase.CharacterExists(message.To)) //(System.IO.File.Exists(Database.ServerDatabase.DatabaseLocation + "\\UsedNames\\" + message.To + ".nm")) { using (var fmsg = Packets.Message.MessageCore.CreateSystem( client.Name, string.Format(Core.MessageConst.PLAYER_OFFLINE_WHISPER, message.To))) client.Send(fmsg); ProjectX_V3_Lib.IO.IniFile whisper = new ProjectX_V3_Lib.IO.IniFile( Database.ServerDatabase.DatabaseLocation + "\\MessageQuery\\" + message.To + ".ini", "Whisper"); int count = whisper.ReadInt32("Count", 0); count++; whisper.Write <int>("Count", count); whisper.SetSection(count.ToString()); whisper.WriteString("From", client.Name); whisper.WriteString("Message", message.Message); whisper.Write <uint>("Mesh", client.Mesh); } else { using (var fmsg = Packets.Message.MessageCore.CreateSystem( client.Name, string.Format(Core.MessageConst.PLAYER_OFFLINE_WHISPER2, message.To))) client.Send(fmsg); } } break; } #endregion #region Talk + Ghost case Enums.ChatType.Talk: case Enums.ChatType.Ghost: { client.SendToScreen(message, false, message.ChatType == Enums.ChatType.Ghost); break; } #endregion #region World case Enums.ChatType.World: { if (client.Level < 70) { using (var fmsg = Packets.Message.MessageCore.CreateSystem( client.Name, Core.MessageConst.WORLD_CHAT_NO_PERMISSION)) client.Send(fmsg); return; } int required = 60000; if (client.Level >= 100) { required = 45000; } if (client.Level >= 110) { required = 30000; } if (client.Level >= 120) { required = 15000; } if (DateTime.Now >= client.WorldChatSend.AddMilliseconds(required)) { client.WorldChatSend = DateTime.Now; foreach (Entities.GameClient sclient in Core.Kernel.Clients.selectorCollection1.Values) { if (sclient.EntityUID != client.EntityUID) { sclient.Send(message); } } } else { using (var fmsg = Packets.Message.MessageCore.CreateSystem( client.Name, string.Format(Core.MessageConst.WORLD_CHAT_WAIT, required))) client.Send(fmsg); } break; } #endregion #region Guild case Enums.ChatType.Guild: { if (client.Guild != null) { client.Guild.BroadcastMessage(message); } break; } #endregion #region Hawk case Enums.ChatType.HawkMessage: { if (client.Booth == null) { return; } client.Booth.HawkMessage = message.Message; break; } #endregion #region Team case Enums.ChatType.Team: { if (client.TournamentTeam != null) { foreach (Entities.GameClient teamMember in client.TournamentTeam.TeamMembers.ToDictionary().Values) { teamMember.Send(message); } } else if (client.Team != null) { foreach (Entities.GameClient teamMember in client.Team.Members.Values) { teamMember.Send(message); } } break; } #endregion } } } }