/adminchat or /achat allows you to only talk to the admins in game.
It has the same feel as opchat.
I had some stuff in there for debugging purposes like /achat admins or /achat remove, so just ignore them. I left them in there in case you wanted to see who is considered admin easily.
- Code: Select all
using System;
namespace MCDzienny
{
public class CmdAdminchat : Command
{
public override string name { get { return "adminchat"; } }
public override string shortcut { get { return "achat"; } }
public override string type { get { return "mod"; } }
public override bool museumUsable { get { return false; } }
public override LevelPermission defaultRank { get { return LevelPermission.Admin; } }
public override bool ConsoleAccess { get { return false; } }
public override void Init()
{
Player.ChatOther += new EventHandler<ChatOtherEventArgs>(ChatOE);
Player.Joined += new EventHandler<PlayerEventArgs>(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 :)
{
SendAdmins(p, null, message);
stopIt = true;
}
}
void SendAdmins(Player p, Player who, string message)
{
if (who == null)
{
message = message.Substring(message.IndexOf('^') + 1);
Player.players.ForEach(delegate(Player pl)
{
if (pl.group.Permission >= LevelPermission.Admin || pl == p)
pl.SendMessage("%eTo Admins %f-" + p.color + p.PublicName + "%f- " + message);
});
}
else
{
who.SendMessage("%eTo Admins %f-" + p.color + p.PublicName + "%f- " + message);
}
}
string admins()
{
string builder = "Admins: ";
Player.players.ForEach(delegate(Player pl)
{
if (pl.group.Permission >= LevelPermission.Admin)
builder += pl.PublicName + ", ";
});
return builder;
}
public override void Use(Player p, string message)
{
switch (message)
{
case "admins":
Player.SendMessage(p, admins());
break;
case "remove":
Player.ChatOther -= ChatOE;
Player.Joined -= PlayerJE;
Player.PlayerChatEvent -= AddStuff;
Player.SendMessage(p, "Events removed");
break;
default:
p.ExtraData["achat"] = !(bool)p.ExtraData["achat"];
Player.SendMessage(p, "Admin chat has been set to " + p.ExtraData["achat"].ToString() + ".");
break;
}
}
public override void Help(Player p)
{
Player.SendMessage(p, "/%aadminchat" + Server.DefaultColor + " -- turns admin chat on/off");
Player.SendMessage(p, "Shortcut: /achat or use ^ as first letter in message");
}
public void AddVars(Player p)
{
if (!p.ExtraData.ContainsKey("achat"))
p.ExtraData.Add("achat", false);
}
public void PlayerJE(object sender, PlayerEventArgs e)
{
AddVars(e.Player);
}
public void ChatOE(object sender, ChatOtherEventArgs e)
{
if ((bool)e.From.ExtraData["achat"] == true)
{
if (e.To.group.Permission >= LevelPermission.Admin)
{
string message = e.Message.Substring(e.Message.IndexOf(':') + 1);
SendAdmins(e.From, e.To, message);
}
e.Handled = true;
}
}
}
}