Ejemplo n.º 1
0
 void IgnoreCommand(CommandArgs args)
 {
     try
     {
         var player = PlayerList[args.Player.Index];
         if (player != null)
         {
             if (args.Parameters.Count > 0)
             {
                 string plyName      = string.Join(" ", args.Parameters.GetRange(0, args.Parameters.Count));
                 var    ignorePlayer = CAPlayer.GetPlayerByName(plyName);
                 if (ignorePlayer != null)
                 {
                     if (ignorePlayer.TSPlayer.Name == player.TSPlayer.Name)
                     {
                         args.Player.SendMessage("You cannot ignore yourself..", Color.Red);
                     }
                     else if (ignorePlayer.TSPlayer.Group.HasPermission("CA.ignore.bypass"))
                     {
                         args.Player.SendMessage(String.Format("Player {0} cannot be ignored", ignorePlayer.TSPlayer.Name), Color.Red);
                     }
                     else if (player.Ignores.Remove(ignorePlayer.Index))
                     {
                         args.Player.SendMessage(String.Format("Player {0} removed from your Ignore list", ignorePlayer.TSPlayer.Name), Color.DarkGreen);
                     }
                     else
                     {
                         player.Ignores.Add(ignorePlayer.Index);
                         args.Player.SendMessage(String.Format("Player {0} added to your Ignore list", ignorePlayer.TSPlayer.Name), Color.DarkGreen);
                     }
                 }
                 else
                 {
                     args.Player.SendMessage(String.Format("Player {0} is not on this server", plyName), Color.Red);
                 }
             }
             else
             {
                 args.Player.SendMessage("Syntax: /ignore <player name> - toggle ignore player messages", Color.Red);
             }
         }
     }
     catch (Exception ex)
     {
         Log.ConsoleError(ex.ToString());
     }
 }
Ejemplo n.º 2
0
        public static void SendData(SendDataEventArgs e)
        {
            if (e.Handled)
            {
                return;
            }
            try
            {
                if (e.MsgID == PacketTypes.ChatText)
                {
                    //   Log.ConsoleInfo(String.Format("ChatText> 1: {0}, 2: {4}, 3: {5}, 4: {6}, 5: {1}, remote: {2}, ignore: {3}", e.number, e.number5, e.remoteClient, e.ignoreClient, e.number2, e.number3, e.number4));
                    int sender = e.ignoreClient; // -1 = system
                    if (sender == -1 && TShock.Config.EnableChatAboveHeads)
                    {
                        sender = e.number;
                    }
                    if (e.remoteClient == -1) // message to all players
                    {
                        if (e.number5 == 0)   // Default message, needs processing
                        {
                            if (sender >= 0 && sender != 255)
                            {
                                var player = PlayerList[sender];
                                if (player != null && !player.InMenu && !player.TSPlayer.mute)
                                {
                                    //   Console.WriteLine("sender {0} in channel {1}", sender, player.Channel);
                                    var playerGroup = player.TSPlayer.Group;
                                    int number1     = 255;
                                    if (TShock.Config.EnableChatAboveHeads)
                                    {
                                        number1 = e.ignoreClient;
                                    }
                                    NetMessage.SendData((int)PacketTypes.ChatText, -1, sender, e.text, e.number, e.number2, e.number3, e.number4, player.Channel + 2);
                                }
                            }
                            else
                            {
                                NetMessage.SendData((int)PacketTypes.ChatText, -1, -1, e.text, e.number, e.number2, e.number3, e.number4, 1);
                            }
                        }
                        else
                        {
                            int     channel = e.number5 - 2;
                            MsgType msgType = MsgType.Global;
                            if (channel >= 0)
                            {
                                msgType = MsgType.Channel;
                                if (TShock.Config.EnableChatAboveHeads && sender != -1 && sender != 255)
                                {
                                    TSPlayer tsplr = TShock.Players[sender];
                                    string   msg   = String.Format(TShock.Config.ChatFormat, tsplr.Group.Name, tsplr.Group.Prefix, tsplr.Name, tsplr.Group.Suffix, e.text);
                                    Channels[channel].AddToLog(new ChatMessage(msg, new Color((byte)e.number2, (byte)e.number3, (byte)e.number4), msgType, sender)); // add to channel log
                                }
                                else
                                {
                                    Channels[channel].AddToLog(new ChatMessage(e.text, new Color((byte)e.number2, (byte)e.number3, (byte)e.number4), msgType, sender)); // add to channel log
                                }
                            }
                            else
                            {
                                AddLogItem(new ChatMessage(e.text, new Color((byte)e.number2, (byte)e.number3, (byte)e.number4), msgType, sender)); // add to global log
                                if (config.EnableDeathMsgFilter || config.EnableJoinQuitFilter)
                                {
                                    var plyName = StartsWithPlayerName(e.text);
                                    if (plyName != "")
                                    {
                                        if (config.EnableJoinQuitFilter && e.text == String.Format("{0} has joined.", plyName))
                                        {
                                            msgType = MsgType.Join;
                                        }
                                        else if (config.EnableJoinQuitFilter && e.text == String.Format("{0} left", plyName))
                                        {
                                            msgType = MsgType.Quit;
                                        }
                                        else if (config.EnableDeathMsgFilter && IsDeathMsg(e.text, plyName))
                                        {
                                            msgType = MsgType.Death;
                                        }
                                    }
                                }
                            }
                            for (int i = 0; i < PlayerList.Length; i++)
                            {
                                if (PlayerList[i] != null && !PlayerList[i].InMenu && !PlayerList[i].Ignores.Contains(sender) && (msgType == MsgType.Global || channel == PlayerList[i].Channel || (msgType == MsgType.Death && !PlayerList[i].Flags.HasFlag(PlayerSettings.HideDeathMsg)) || ((msgType == MsgType.Join || msgType == MsgType.Quit) && !PlayerList[i].Flags.HasFlag(PlayerSettings.HideJoinQuitMsg))))
                                {
                                    NetMessage.SendData((int)PacketTypes.ChatText, PlayerList[i].Index, sender, e.text, e.number, e.number2, e.number3, e.number4, 1); // custom message > e.number5 = 1, e.ignoreClient = sender
                                }
                            }

                            String logMessage = String.Format("[Chat][{1}]{2} {0}", e.text, msgType.ToString(), (msgType == MsgType.Channel && Channels[channel] != null) ? String.Format("[{0}]", Channels[channel].Name) : "");
                            Console.WriteLine(logMessage);
                            Log.Data(logMessage);
                        }
                        e.Handled = true;
                    }
                    else // message for player id = e.remoteClient
                    {
                        var player = PlayerList[e.remoteClient];
                        if (player == null)
                        {
                            return;
                        }
                        if (e.number5 == 0) // default message
                        {
                            if (e.text.StartsWith("(Whisper From)<"))
                            {
                                var senderName = e.text.Substring(15, e.text.IndexOf('>', 14) - 15);
                                var wPly       = CAPlayer.GetPlayerByName(senderName);
                                if (wPly != null && player.Ignores.Contains(wPly.Index))  //  Private message from ignored player
                                {
                                    e.Handled = true;
                                    return;
                                }
                            }
                            player.AddToLog(new ChatMessage(e.text, new Color((byte)e.number2, (byte)e.number3, (byte)e.number4), MsgType.Private, sender));
                            if (player.InMenu)
                            {
                                e.Handled = true;
                            }
                        }
                    }
                }
                else if (e.MsgID == PacketTypes.PlayerInfo)
                {
                    //  Console.WriteLine(String.Format("PlayerInfo> 1: {0}, 2: {4}, 3: {5}, 4: {6}, 5: {1}, remote: {2}, ignore: {3} text: {7}", e.number, e.number5, e.remoteClient, e.ignoreClient, e.number2, e.number3, e.number4, e.text));
                    if (TShock.Config.EnableChatAboveHeads && e.number5 == 0) //default message
                    {
                        var player = PlayerList[e.number];
                        if (player != null)
                        {
                            e.Handled = true;
                            NetMessage.SendData((int)PacketTypes.PlayerInfo, e.remoteClient, e.ignoreClient, String.Format(TShock.Config.ChatFormat, player.TSPlayer.Group.Name, player.TSPlayer.Group.Prefix, player.TSPlayer.Name, player.TSPlayer.Group.Suffix, ""), e.number, e.number2, e.number3, e.number4, 1);
                        }
                    }
                }
            }
            catch (Exception ex) { Log.ConsoleError(ex.ToString()); }
        }