static void HandleWhisper(Player p, string target, string message) { Player who = PlayerInfo.FindMatches(p, target); if (who == null) { return; } if (who == p) { Player.Message(p, "Trying to talk to yourself, huh?"); return; } if (who.Ignores.All) { DoFakePM(p, who, message); } else if (p != null && who.Ignores.Names.CaselessContains(p.name)) { DoFakePM(p, who, message); } else { DoPM(p, who, message); } if (p != null) { p.CheckForMessageSpam(); } }
/// <summary> Sends a chat message from the given player (e.g. regular player chat or /me) </summary> /// <remarks> Chat messages will increase player's total messages sent in /info, /// and count towards triggering automute for chat spamming </remarks> /// <remarks> Only players not ignoring the given player will see this message. </remarks> public static void MessageChat(ChatScope scope, Player source, string msg, object arg, ChatMessageFilter filter, bool relay = false) { Player[] players = PlayerInfo.Online.Items; ChatMessageFilter scopeFilter = scopeFilters[(int)scope]; bool counted = false; // Filter out bad words if (Server.Config.ProfanityFiltering) { msg = ProfanityFilter.Parse(msg); } OnChatEvent.Call(scope, source, msg, arg, ref filter, relay); foreach (Player pl in players) { if (Ignoring(pl, source)) { continue; } // Always show message to self too (unless ignoring self) if (pl != source) { if (!scopeFilter(pl, arg)) { continue; } if (filter != null && !filter(pl, arg)) { continue; } if (!counted) { source.TotalMessagesSent++; counted = true; } } else { // don't send PM back to self if (scope == ChatScope.PM) { continue; } } pl.Message(UnescapeMessage(pl, source, msg)); } source.CheckForMessageSpam(); }
static void DoConsolePM(Player p, string message) { if (message.Length < 1) { Player.Message(p, "No message entered"); return; } Player.Message(p, "[<] Console: &f" + message); string name = p == null ? "(console)" : p.name; Logger.Log(LogType.PrivateChat, "{0} @(console): {1}", name, message); if (p != null) { p.CheckForMessageSpam(); } }
public static void MessageChat(ChatScope scope, Player source, string msg, object arg, ChatMessageFilter filter, bool irc = false) { Player[] players = PlayerInfo.Online.Items; ChatMessageFilter scopeFilter = scopeFilters[(int)scope]; OnChatEvent.Call(scope, source, msg, arg, ref filter, irc); foreach (Player pl in players) { if (Ignoring(pl, source)) { continue; } // Always show message to self too (unless ignoring self) if (pl != source) { if (!scopeFilter(pl, arg)) { continue; } if (filter != null && !filter(pl, arg)) { continue; } } else { // don't send PM back to self if (scope == ChatScope.PM) { continue; } } pl.Message(UnescapeMessage(pl, source, msg)); } source.CheckForMessageSpam(); }
public static void MessageStaff(Player p, string message, LevelPermission perm, string group) { string displayName = p == null ? "(console)" : p.ColoredName; string name = p == null ? "(console)" : p.name; string format = "To " + group + " &f-{0}&f- {1}"; if (message.Length == 0) { Player.Message(p, "No message to send."); return; } Chat.MessageWhere(format, pl => (p == pl || pl.Rank >= perm) && Chat.NotIgnoring(pl, p), displayName, message); if (p != null) { p.CheckForMessageSpam(); } Logger.Log(LogType.StaffChat, "({0}): {1}: {2}", group, name, message); Server.IRC.Say(displayName + "%S: " + message, true); }