Exemplo n.º 1
0
        void OnChat(ref HookContext ctx, ref HookArgs.PlayerChat args)
        {
            if (args.Message.Length > 0 && args.Message.Substring(0, 1).Equals("/"))
            {
                ProgramLog.Log(ctx.Player.Name + " sent command: " + args.Message);
                ctx.SetResult(HookResult.IGNORE);

                UserInput.CommandParser.ParsePlayerCommand(ctx.Player, args.Message);
            }
        }
        void OnChat(ref HookContext ctx, ref HookArgs.PlayerChat args)
        {
            if (ctx.Player.AuthenticatedAs != null)
            {
                User usr;
                if (Permissions.users.TryGetValue(ctx.Player.Name, out usr))
                {
                    Color col;
                    if (Chat.TryGetChatColor(usr, out col))
                    {
                        args.Color = col;
                    }

                    string prefix;
                    if (Chat.TryGetChatPrefix(usr, out prefix))
                    {
                        usr.prefix = prefix;
                    }

                    string suffix;
                    if (Chat.TryGetChatSuffix(usr, out suffix))
                    {
                        usr.suffix = suffix;
                    }

                    string seperator;
                    Chat.TryGetChatSeperator(usr, out seperator);

                    ctx.SetResult(HookResult.IGNORE);
                    Server.notifyAll(
                        String.Concat(usr.prefix, ctx.Player.Name, seperator, args.Message, usr.suffix)
                        , args.Color
                        );
                }
            }
            else if (ctx.Player.AuthenticatedAs == null)
            {
                Group dGrp = Permissions.GetDefaultGroup();
                if (dGrp != null)
                {
                    if (Chat.IsValidColor(dGrp.GroupInfo.color))
                    {
                        args.Color = dGrp.GroupInfo.color;
                    }

                    ctx.SetResult(HookResult.IGNORE);
                    Server.notifyAll(
                        String.Concat(dGrp.GroupInfo.Prefix, ctx.Player.Name,
                                      dGrp.GroupInfo.Seperator, args.Message,
                                      dGrp.GroupInfo.Suffix)
                        , args.Color
                        );
                }
            }
        }
Exemplo n.º 3
0
        void OnChat(ref HookContext ctx, ref HookArgs.PlayerChat args)
        {
            //Merely an example of HookAttribute (Above, 'Hook(...)') and Permissions

            if (IsRestrictedForUser(ctx.Player, ExampleChatNode))
            {
                //Player is not allowed
            }
            else
            {
                //Player is allowed
            }
        }
        public override void Process(ClientConnection conn, byte[] readBuffer, int length, int num)
        {
            string chat;

            if (!ParseString(readBuffer, num + 4, length - 5, out chat))
            {
                conn.Kick("Invalid characters in chat message.");
                return;
            }

            if (conn.State < SlotState.PLAYING)
            {
                if (chat != "/playing")
                {
                    ProgramLog.Debug.Log("{0}: sent message PLAYER_CHAT in state {1}.", conn.RemoteAddress, conn.State);
                    conn.Kick("Invalid operation at this state.");
                }
                else
                {
                    ProgramLog.Debug.Log("Replying to early online player query.");
                    var msg = NetMessage.PrepareThreadInstance();
                    msg.PlayerChat(255, string.Concat("Current players: ",
                                                      String.Join(", ", from p in Main.players where p.Active select p.Name), "."),
                                   255, 240, 20);
                    conn.Send(msg.Output);
                }
                return;
            }

            int whoAmI = conn.SlotIndex;
            var player = Main.players[whoAmI];

            if (chat.Length == 0)             //TODO: check for undetectable spam
            {
                return;
            }

            if (chat.Substring(0, 1).Equals("/"))
            {
                if (Main.players[whoAmI].Op)
                {
                    ProgramLog.Admin.Log(player.Name + " sent command: " + chat);
                }
                else
                {
                    ProgramLog.Users.Log(player.Name + " sent command: " + chat);
                }

                Program.commandParser.ParsePlayerCommand(player, chat);
                return;
            }

            Color color = ChatColor.White;

            if (player.Op)
            {
                color = ChatColor.DeepSkyBlue;
            }
            else if (player.Difficulty == 1)
            {
                color = ChatColor.Khaki;
            }
            else if (player.Difficulty == 2)
            {
                color = ChatColor.Tomato;
            }
            else if (player.team > 0 && player.team < Main.teamColor.Length)
            {
                color = Main.teamColor[player.team];
            }

            var ctx = new HookContext
            {
                Connection = player.Connection,
                Sender     = player,
                Player     = player,
            };

            var args = new HookArgs.PlayerChat
            {
                Message = chat,
                Color   = color,
            };

            HookPoints.PlayerChat.Invoke(ref ctx, ref args);

            if (ctx.CheckForKick() || ctx.Result == HookResult.IGNORE)
            {
                return;
            }

            NetMessage.SendData(Packet.PLAYER_CHAT, -1, -1, chat, whoAmI, args.Color.R, args.Color.G, args.Color.B);
            ProgramLog.Chat.Log("<" + player.Name + "> " + chat, SendingLogger.PLAYER);
        }
        private static void ProcessChat(int bufferId)
        {
            var buffer = NetMessage.buffer[bufferId];

            //Discard
            buffer.reader.ReadByte();
            buffer.reader.ReadRGB();

            var chatText = buffer.reader.ReadString();

            var player = Main.player[bufferId];
            var color  = Color.White;

            if (Main.netMode != 2)
            {
                return;
            }

            var lowered = chatText.ToLower();

            if (lowered == Lang.mp[6] || lowered == Lang.mp[21])
            {
                var players = "";
                for (int i = 0; i < 255; i++)
                {
                    if (Main.player[i].active)
                    {
                        if (players.Length > 0)
                        {
                            players += ", ";
                        }
                        players += Main.player[i].name;
                    }
                }
                NetMessage.SendData(25, bufferId, -1, Lang.mp[7] + " " + players + ".", 255, 255, 240, 20, 0, 0, 0);
                return;
            }
            else if (lowered.StartsWith("/me "))
            {
                NetMessage.SendData(25, -1, -1, "*" + Main.player[bufferId].name + " " + chatText.Substring(4), 255, 200, 100, 0, 0, 0, 0);
                return;
            }
            else if (lowered == Lang.mp[8])
            {
                NetMessage.SendData(25, -1, -1, string.Concat(new object[]
                {
                    "*",
                    Main.player[bufferId].name,
                    " ",
                    Lang.mp[9],
                    " ",
                    Main.rand.Next(1, 101)
                }), 255, 255, 240, 20, 0, 0, 0);
                return;
            }
            else if (lowered.StartsWith("/p "))
            {
                int team = Main.player[bufferId].team;
                color = Main.teamColor[team];
                if (team != 0)
                {
                    for (int num74 = 0; num74 < 255; num74++)
                    {
                        if (Main.player[num74].team == team)
                        {
                            NetMessage.SendData(25, num74, -1, chatText.Substring(3), bufferId, (float)color.R, (float)color.G, (float)color.B, 0, 0, 0);
                        }
                    }
                    return;
                }
                NetMessage.SendData(25, bufferId, -1, Lang.mp[10], 255, 255, 240, 20, 0, 0, 0);
                return;
            }
            else
            {
                if (Main.player[bufferId].difficulty == 2)
                {
                    color = Main.hcColor;
                }
                else if (Main.player[bufferId].difficulty == 1)
                {
                    color = Main.mcColor;
                }

                var ctx = new HookContext
                {
                    Connection = player.Connection,
                    Sender     = player,
                    Player     = player
                };

                var args = new HookArgs.PlayerChat
                {
                    Message = chatText,
                    Color   = color
                };

                HookPoints.PlayerChat.Invoke(ref ctx, ref args);

                if (ctx.CheckForKick() || ctx.Result == HookResult.IGNORE)
                {
                    return;
                }

                NetMessage.SendData(25, -1, -1, chatText, bufferId, (float)color.R, (float)color.G, (float)color.B, 0, 0, 0);
                if (Main.dedServ)
                {
                    Tools.WriteLine("<" + Main.player[bufferId].name + "> " + chatText);
                }
            }
        }
        void OnChat(ref HookContext ctx, ref HookArgs.PlayerChat args)
        {
            if (!IsEnabled)
            {
                return;
            }

            if (ctx.Player.AuthenticatedAs != null)
            {
                var name = ctx.Player.Name;
                if (XmlParser.HasUser(name))
                {
                    var user = XmlParser.GetUser(name);

                    string chatSeperator, prefix, suffix;
                    Color  chatColour;

                    GetChatSeperator(user, out chatSeperator);
                    GetColor(user, out chatColour);
                    GetPrefix(user, out prefix);
                    GetSuffix(user, out suffix);

                    args.Color = chatColour;                     //Might set this for next plugins.

                    ctx.SetResult(HookResult.IGNORE);
                    Server.notifyAll(
                        String.Concat(prefix, ctx.Player.Name, chatSeperator, args.Message, suffix)
                        , args.Color
                        );
                }
                else if (XmlParser.HasDefaultGroup())
                {
                    var defaultGroup = XmlParser.GetDefaultGroup();

                    ctx.SetResult(HookResult.IGNORE);
                    Server.notifyAll(
                        String.Concat
                        (
                            defaultGroup.Prefix,
                            ctx.Player.Name,
                            defaultGroup.ChatSeperator, args.Message,
                            defaultGroup.Suffix
                        )
                        , defaultGroup.Color
                        );
                }
            }
            else if (ctx.Player.AuthenticatedAs == null)
            {
                if (XmlParser.HasDefaultGroup())
                {
                    var defaultGroup = XmlParser.GetDefaultGroup();

                    ctx.SetResult(HookResult.IGNORE);
                    Server.notifyAll(
                        String.Concat
                        (
                            defaultGroup.Prefix,
                            ctx.Player.Name,
                            defaultGroup.ChatSeperator, args.Message,
                            defaultGroup.Suffix
                        )
                        , defaultGroup.Color
                        );
                }
            }
        }
        public override void Process(ClientConnection conn, byte[] readBuffer, int length, int num)
        {
            var whoAmI = conn.SlotIndex;

            ReadByte(readBuffer);
            ReadRGB(readBuffer);

            var color = Color.White;

            string text;

            if (!ReadString(readBuffer, out text))
            {
                return;
            }

            var lowered = text.ToLower();

            if (lowered == Lang.mp[6] || lowered == Lang.mp[21])
            {
                var players = String.Empty;
                for (int i = 0; i < 255; i++)
                {
                    if (Main.player[i].active)
                    {
                        if (players.Length > 0)
                        {
                            players += ", ";
                        }
                        players += Main.player[i].name;
                    }
                }
                NewNetMessage.SendData(25, whoAmI, -1, Lang.mp[7] + " " + players + ".", 255, 255f, 240f, 20f, 0);
                return;
            }
            if (lowered.StartsWith("/me "))
            {
                NewNetMessage.SendData(25, -1, -1, "*" + Main.player[whoAmI].name + " " + text.Substring(4), 255, 200f, 100f, 0f, 0);
                return;
            }
            if (lowered == Lang.mp[8])
            {
                NewNetMessage.SendData(25, -1, -1, "*" + Main.player[whoAmI].name + " " + Lang.mp[9] + " " + Main.rand.Next(1, 101), 255, 255f, 240f, 20f, 0);
                return;
            }
            if (lowered.StartsWith("/p "))
            {
                var team = Main.player[whoAmI].team;
                var msg  = text.Substring(3);

                if (team != 0)
                {
                    color = Main.teamColor[team];
                    for (int i = 0; i < 255; i++)
                    {
                        if (Main.player[i].team == team)
                        {
                            NewNetMessage.SendData(25, i, -1, msg, whoAmI, (float)color.R, (float)color.G, (float)color.B, 0);
                        }
                    }
                    return;
                }
                NewNetMessage.SendData(25, whoAmI, -1, Lang.mp[10], 255, 255f, 240f, 20f, 0);
                return;
            }
            else
            {
                var player = Main.player[whoAmI];
                color = Color.White;

                if (player.Op)
                {
                    color = Color.DeepSkyBlue;
                }
                else if (player.difficulty == 1)
                {
                    color = Main.mcColor;
                }
                else if (player.difficulty == 2)
                {
                    color = Main.hcColor;
                }
                else if (player.team > 0 && player.team < Main.teamColor.Length)
                {
                    color = Main.teamColor[player.team];
                }

                var ctx = new HookContext
                {
                    Connection = player.Connection,
                    Sender     = player,
                    Player     = player
                };

                var args = new HookArgs.PlayerChat
                {
                    Message = text,
                    Color   = color
                };

                HookPoints.PlayerChat.Invoke(ref ctx, ref args);

                if (ctx.CheckForKick() || ctx.Result == HookResult.IGNORE)
                {
                    return;
                }

                NewNetMessage.SendData(Packet.PLAYER_CHAT, -1, -1, text, whoAmI, args.Color.R, args.Color.G, args.Color.B);
                ProgramLog.Log("<" + Main.player[whoAmI].name + "> " + text);
            }
        }