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 ); } } }
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); } }