using System; namespace MCDzienny { public class CmdZombiechat : Command { public override string name { get { return "zombiechat"; } } public override string shortcut { get { return "zchat"; } } public override string type { get { return "other"; } } public override bool museumUsable { get { return false; } } public override LevelPermission defaultRank { get { return LevelPermission.Banned; } } public override bool ConsoleAccess { get { return true; } } public override void Init() { Player.ChatOther += new EventHandler(ChatOE); Player.Joined += new EventHandler(PlayerJE); Player.PlayerChatEvent += AddStuff; Player.players.ForEach(delegate(Player pl) { AddVars(pl); }); } void AddStuff(Player p, ref string message, ref bool stopIt) { if (message[0] == '-' || message[2] == '-') //take in mind color chat people :) { SendZombie(p, null, message); stopIt = true; } } void SendZombie(Player p, Player who, string message) { if (who == null) { message = message.Substring(message.IndexOf('-') + 1); Player.players.ForEach(delegate(Player pl) { if (pl.isZombie) pl.SendMessage("%eTo Zombies %f-" + p.color + p.PublicName + "%f- " + message); }); } else { who.SendMessage("%eTo Zombies %f-" + p.color + p.PublicName + "%f- " + message); } } string zombie() { string builder = "zombie: "; Player.players.ForEach(delegate(Player pl) { if (pl.isZombie) builder += pl.PublicName + ", "; }); return builder; } public override void Use(Player p, string message) { switch (message) { case "zombie": Player.SendMessage(p, zombie()); break; case "remove": Player.ChatOther -= ChatOE; Player.Joined -= PlayerJE; Player.PlayerChatEvent -= AddStuff; Player.SendMessage(p, "Events removed"); break; default: p.ExtraData["zchat"] = !(bool)p.ExtraData["zchat"]; Player.SendMessage(p, "Zombie chat has been set to " + p.ExtraData["zchat"].ToString() + "."); break; } } public override void Help(Player p) { Player.SendMessage(p, "/%azombiechat" + Server.DefaultColor + " -- turns zombie chat on/off"); Player.SendMessage(p, "Shortcut: /zchat or use - as first letter in message"); } public void AddVars(Player p) { if (!p.ExtraData.ContainsKey("zchat")) p.ExtraData.Add("zchat", false); } public void PlayerJE(object sender, PlayerEventArgs e) { AddVars(e.Player); } public void ChatOE(object sender, ChatOtherEventArgs e) { if ((bool)e.From.ExtraData["zchat"] == true) { Player.players.ForEach(delegate(Player pl) { if (pl.isZombie) { string message = e.Message.Substring(e.Message.IndexOf(':') + 1); SendZombie(e.From, e.To, message); } }); e.Handled = true; } } } }