static public void SendChat(string chat) { CS_Chat c = new CS_Chat(); c.chatType = Helpers.Chat_Type.Normal; c.bong = 0; c.message = chat; c.recipient = ""; _conn._client.send(c); }
public void sendChat(string message, string recipient, InfServer.Protocol.Helpers.Chat_Type type) { CS_Chat chat = new CS_Chat(); chat.chatType = type; chat.bong = 0; chat.message = message; chat.recipient = recipient; _conn._client.send(chat); _wGame.updateChat(message, _player._alias, type, ""); }
{ /// <summary> /// Handles chat packets sent from the client /// </summary> static public void Handle_CS_Chat(CS_Chat pkt, Player player) { if (player == null) { Log.write(TLog.Error, "Handle_CS_Chat(): Called with null player."); return; } if (player._arena == null) { Log.write(TLog.Error, "Handle_CS_Chat(): Called with null arena."); return; } //Ignore blank messages if (pkt.message == "") { return; } //Is it a server command? if (pkt.message[0] == '?' && pkt.message.Length > 1) { //Obtain the command and payload int spcIdx = pkt.message.IndexOf(' '); string command; string payload = ""; if (spcIdx == -1) { command = pkt.message.Substring(1); } else { command = pkt.message.Substring(1, spcIdx - 1); payload = pkt.message.Substring(spcIdx + 1); } //Do we have a recipient? Player recipient = null; if (pkt.chatType == Helpers.Chat_Type.Whisper) { if ((recipient = player._server.getPlayer(pkt.recipient)) == null) { return; } } //Route it to our arena! player._arena.handleEvent(delegate(Arena arena) { arena.playerChatCommand(player, recipient, command, payload, pkt.bong); } ); return; } //Is it a Communication Command? else if (pkt.message[0] == '%' && pkt.message.Length > 1) { //Obtain the command and payload int spcIdx = pkt.message.IndexOf(' '); string command; string payload = ""; if (spcIdx == -1) { command = pkt.message.Substring(1); } else { command = pkt.message.Substring(1, spcIdx - 1); payload = pkt.message.Substring(spcIdx + 1); } //Do we have a recipient? Player recipient = null; if (pkt.chatType == Helpers.Chat_Type.Whisper) { if ((recipient = player._server.getPlayer(pkt.recipient)) == null) { return; } } //Route it to our arena! player._arena.handleEvent(delegate(Arena arena) { arena.playerCommCommand(player, recipient, command, payload, pkt.bong); } ); return; } //Is it a Mod Command? else if (pkt.message[0] == '*' && pkt.message.Length > 1) { //Obtain the command and payload int spcIdx = pkt.message.IndexOf(' '); string command; string payload = ""; if (spcIdx == -1) { command = pkt.message.Substring(1); } else { command = pkt.message.Substring(1, spcIdx - 1); payload = pkt.message.Substring(spcIdx + 1); } //Do we have a recipient? Player recipient = null; if (pkt.chatType == Helpers.Chat_Type.Whisper) { if ((recipient = player._server.getPlayer(pkt.recipient)) == null) { return; } } //Route it to our arena! player._arena.handleEvent(delegate(Arena arena) { player._arena.playerModCommand(player, recipient, command, payload, pkt.bong); } ); return; } else //Must be a regular chat, lets see if they are allowed first { //Ignore messages from the silent if (player._bSilenced) { player.sendMessage(-1, "You can't speak."); return; } //Lets do some spam checking.. bool change = false; player._msgTimeStamps.Add(DateTime.Now); foreach (DateTime msg in player._msgTimeStamps) { TimeSpan diff = DateTime.Now - msg; if (diff.Seconds > 5) { change = true; } } //Remove messages that are older than 5 seconds. //Clear player spam list, restart over if (player._msgTimeStamps != null && change) { player._msgTimeStamps = new List <DateTime>(); } //More than 5 messages in 5 seconds? if (player._msgTimeStamps.Count == 5) { //Warn him player.sendMessage(-1, "WARNING! You will be auto-silenced for spamming."); } //More than 10 messages in 5 seconds? if (player._msgTimeStamps.Count >= 10) { //Autosilence int duration = 5; //5 mins player.sendMessage(-1, String.Format("You are being auto-silenced for {0} minutes for spamming.", duration)); player._bSilenced = true; player._lengthOfSilence = duration; player._timeOfSilence = DateTime.Now; if (!player._arena._silencedPlayers.ContainsKey(player._alias)) { player._arena._silencedPlayers.Add(player._alias, duration); } return; } //For league matches bool Allowed = true; if (player._arena._isMatch && player.PermissionLevelLocal < Data.PlayerPermission.ArenaMod && player.IsSpectator) { Allowed = false; } //What sort of chat has occured? switch (pkt.chatType) { case Helpers.Chat_Type.Normal: //For leagues, dont allow them to talk to the teams if (!Allowed) { pkt.chatType = Helpers.Chat_Type.Team; Handle_CS_Chat(pkt, player); break; } if ((player._arena._specQuiet || player._specQuiet) && player.PermissionLevelLocal < Data.PlayerPermission.ArenaMod && player.IsSpectator) { pkt.chatType = Helpers.Chat_Type.Team; Handle_CS_Chat(pkt, player); break; } //Send it to our arena! player._arena.handleEvent(delegate(Arena arena) { pkt.bong = 0; player._arena.playerArenaChat(player, pkt); } ); break; case Helpers.Chat_Type.Macro: if (!Allowed) { //Arent allowed pkt.chatType = Helpers.Chat_Type.Team; Handle_CS_Chat(pkt, player); break; } if ((player._arena._specQuiet || player._specQuiet) && player.PermissionLevelLocal < Data.PlayerPermission.ArenaMod && player.IsSpectator) { pkt.chatType = Helpers.Chat_Type.Team; Handle_CS_Chat(pkt, player); break; } pkt.chatType = Helpers.Chat_Type.Normal; Handle_CS_Chat(pkt, player); break; case Helpers.Chat_Type.Team: //Send it to the player's team player._team.playerTeamChat(player, pkt); if (player.IsSpectator) { player._server.ircClient.SendMessage( Meebey.SmartIrc4net.SendType.Message, player._arena.IrcName, String.Format("[{0}][S]: {1}", player._alias, pkt.message)); } break; case Helpers.Chat_Type.EnemyTeam: //Send it to the players team and enemy's team player._team.playerTeamChat(player, pkt); if (!Allowed) { break; } if ((player._arena._specQuiet || player._specQuiet) && player.PermissionLevelLocal < Data.PlayerPermission.ArenaMod && player.IsSpectator) { break; } if (!pkt.recipient.Equals(player._alias, StringComparison.OrdinalIgnoreCase)) { Player recipient = player._arena.getPlayerByName(pkt.recipient); if (recipient != null) { pkt.message = String.Format("[Enemy] {0}", pkt.message); recipient._team.playerTeamChat(player, pkt); } } break; case Helpers.Chat_Type.PrivateChat: if (!player._server.IsStandalone) { CS_PrivateChat <Data.Database> pchat = new CS_PrivateChat <Data.Database>(); pchat.chat = pkt.recipient; pchat.message = pkt.message; pchat.from = player._alias; player._server._db.send(pchat); } break; case Helpers.Chat_Type.Whisper: { // Redirect to IRC. if (pkt.recipient.StartsWith("[IRC]")) { var ircName = pkt.recipient.Replace("[IRC]", ""); player._server.ircClient.SendMessage( Meebey.SmartIrc4net.SendType.Message, ircName, String.Format("[{0}]: {1}", player._alias, pkt.message)); break; } //Find our recipient Player recipient = player._server.getPlayer(pkt.recipient); //For league and spec quiet toggles if ((recipient != null) && !recipient.IsSpectator) { if (!Allowed) { break; } if (player._arena._specQuiet || player._specQuiet) { if (player.PermissionLevelLocal < Data.PlayerPermission.ArenaMod && player.IsSpectator) { break; } } } //Are we connected to a database? if (!player._server.IsStandalone) { //Yeah, lets route it through the DB so we can pm globally! CS_Whisper <Data.Database> whisper = new CS_Whisper <Data.Database>(); whisper.bong = pkt.bong; whisper.recipient = pkt.recipient; whisper.message = pkt.message; whisper.from = player._alias; player._server._db.send(whisper); } else { //Send it to the target player if (recipient != null) { recipient.sendPlayerChat(player, pkt); } } } break; case Helpers.Chat_Type.Squad: //Since squads are only zone-wide, we don't need to route it to the database, //instead we route it to every player in every arena in the zone foreach (Arena a in player._server._arenas.Values) { foreach (Player p in a.Players) { if (p == player) { continue; } if (String.IsNullOrWhiteSpace(pkt.recipient)) { continue; } if (!p._squad.Equals(pkt.recipient, StringComparison.OrdinalIgnoreCase)) { continue; } if (!player._squad.Equals(p._squad, StringComparison.OrdinalIgnoreCase)) { continue; } p.sendPlayerChat(player, pkt); } } break; } } }
/// <summary> /// Triggered when a player has sent chat to the entire arena /// </summary> public void playerArenaChat(Player from, CS_Chat chat) { //Route it to our entire player list! Helpers.Player_RouteChat(this, from, chat); }
/// <summary> /// Triggered when a player has sent chat to the entire arena /// </summary> public void playerArenaChat(Player from, CS_Chat chat) { //Route it to our entire player list! Helpers.Player_RouteChat(this, from, chat); this._server.ircClient.SendMessage(SendType.Message, IrcName, String.Format("[{0}]: {1}", from._alias, chat.message)); }
/// <summary> /// Triggered when a player has sent chat to an enemy team /// </summary> public void playerEnemyTeamChat(Player from, CS_Chat chat) { //Route it to both the enemy team and our team }