Modularise PlayerInfo more.

This commit is contained in:
UnknownShadow200 2016-06-11 22:14:33 +10:00
parent 535d89d14b
commit bb5670ad5d
89 changed files with 199 additions and 190 deletions

View File

@ -468,10 +468,10 @@ namespace MCGalaxy {
return matches == 1 ? match : null;
}
public static PlayerBot FindOrShowMatches(Player pl, string name) {
public static PlayerBot FindMatches(Player pl, string name) {
int matches = 0;
return Extensions.FindOrShowMatches(pl, name, out matches, Bots.Items, b => true,
b => b.name, "bots");
return Extensions.FindMatches<PlayerBot>(pl, name, out matches, Bots.Items,
b => true, b => b.name, "bots");
}
#endregion

View File

@ -34,7 +34,7 @@ namespace MCGalaxy.Commands {
PlayerBot.RemoveAllFromLevel(p.level); return;
}
PlayerBot who = PlayerBot.FindOrShowMatches(p, message);
PlayerBot who = PlayerBot.FindMatches(p, message);
if (who == null) return;
if (!p.level.name.CaselessEq(who.level.name)) {
Player.Message(p, who.name + " is in a different level."); return;

View File

@ -33,7 +33,7 @@ namespace MCGalaxy.Commands {
public override void Use(Player p, string message) {
if (message == "") { Help(p); return; }
string[] args = message.Split(' ');
PlayerBot bot = PlayerBot.FindOrShowMatches(p, args[0]);
PlayerBot bot = PlayerBot.FindMatches(p, args[0]);
if (bot == null) return;
if (args.Length == 1) {

View File

@ -30,7 +30,7 @@ namespace MCGalaxy.Commands
if (message == "") { Help(p); return; }
if (p == null) { MessageInGameOnly(p); return; }
PlayerBot who = PlayerBot.FindOrShowMatches(p, message);
PlayerBot who = PlayerBot.FindMatches(p, message);
if (who == null) return;
if (!p.level.name.CaselessEq(who.level.name)) {
Player.Message(p, who.name + " is in a different level."); return;

View File

@ -52,12 +52,12 @@ namespace MCGalaxy.Commands.CPE {
}
if (isBot && args.Length > 2) {
pBot = PlayerBot.FindOrShowMatches(p, args[1]);
pBot = PlayerBot.FindMatches(p, args[1]);
if (pBot == null) return;
model = args[2];
} else if (args.Length > 1) {
isBot = false;
who = PlayerInfo.FindOrShowMatches(p, args[0]);
who = PlayerInfo.FindMatches(p, args[0]);
if (who == null) return;
model = args.Length >= 2 ? args[1] : "humanoid";
} else {

View File

@ -40,12 +40,12 @@ namespace MCGalaxy.Commands.CPE {
string skin = null;
if (isBot && args.Length > 2) {
pBot = PlayerBot.FindOrShowMatches(p, args[1]);
pBot = PlayerBot.FindMatches(p, args[1]);
if (pBot == null) return;
skin = args[2];
} else if (args.Length >= 2) {
isBot = false;
who = PlayerInfo.FindOrShowMatches(p, args[0]);
who = PlayerInfo.FindMatches(p, args[0]);
if (who == null) return;
skin = args.Length >= 2 ? args[1] : who.truename;
} else {

View File

@ -201,7 +201,7 @@ namespace MCGalaxy.Commands {
}
string name = parts[1], room = parts[2];
Player pl = PlayerInfo.FindOrShowMatches(p, name);
Player pl = PlayerInfo.FindMatches(p, name);
if (pl == null) return;
if (!Server.Chatrooms.Contains(room)) {
Player.Message(p, "There is no chatroom with the name '" + room + "'");
@ -230,7 +230,7 @@ namespace MCGalaxy.Commands {
}
string name = parts[1];
Player pl = PlayerInfo.FindOrShowMatches(p, name);
Player pl = PlayerInfo.FindMatches(p, name);
if (pl == null) return;
if (pl.group.Permission >= p.group.Permission) {
MessageTooHighRank(p, "kick from a chatroom", false); return;

View File

@ -39,7 +39,7 @@ namespace MCGalaxy.Commands {
args[0] = p.name;
}
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Player who = PlayerInfo.FindMatches(p, args[0]);
if (who == null) return;
if (p != null && who.group.Permission > p.group.Permission) {
MessageTooHighRank(p, "change the color of", true); return;

View File

@ -30,7 +30,7 @@ namespace MCGalaxy.Commands
public override void Use(Player p, string message) {
if (message == "") { Help(p); return; }
Player who = PlayerInfo.FindOrShowMatches(p, message);
Player who = PlayerInfo.FindMatches(p, message);
if (who == null) return;
if (p != null && p.muted) { Player.Message(p, "Cannot use /high5 while muted."); return; }

View File

@ -29,7 +29,7 @@ namespace MCGalaxy.Commands {
public override void Use(Player p, string message) {
if (message == "") { Help(p); return; }
string[] args = message.Split(' ');
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Player who = PlayerInfo.FindMatches(p, args[0]);
if (who == null) return;
if (p != null && who.name == p.name) {
Player.Message(p, "You cannot hug yourself, silly!"); return;

View File

@ -70,7 +70,7 @@ namespace MCGalaxy.Commands {
Player.Message(p, "&aNo longer ignoring {0}", unignore);
} else {
int matches = 0;
Player who = PlayerInfo.FindOrShowMatches(p, action);
Player who = PlayerInfo.FindMatches(p, action);
if (who == null) {
if (matches == 0)
Player.SendMessage(p, "You must use the full name when unignoring offline players.");

View File

@ -42,7 +42,7 @@ namespace MCGalaxy.Commands {
args[0] = p.name;
}
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Player who = PlayerInfo.FindMatches(p, args[0]);
if (who == null) return;
if (p != null && who.group.Permission > p.group.Permission) {
MessageTooHighRank(p, "change the nick of", true); return;

View File

@ -39,7 +39,7 @@ namespace MCGalaxy.Commands {
args[0] = p.name;
}
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Player who = PlayerInfo.FindMatches(p, args[0]);
if (who == null) return;
if (p != null && who.group.Permission > p.group.Permission) {
MessageTooHighRank(p, "change the title color of", true); return;

View File

@ -41,7 +41,7 @@ namespace MCGalaxy.Commands {
args[0] = p.name;
}
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Player who = PlayerInfo.FindMatches(p, args[0]);
if (who == null) return;
if (p != null && who.group.Permission > p.group.Permission) {
MessageTooHighRank(p, "change the title of", true); return;

View File

@ -36,7 +36,7 @@ namespace MCGalaxy.Commands
}
else
{
Player who = PlayerInfo.FindOrShowMatches(p, message);
Player who = PlayerInfo.FindMatches(p, message);
if (who == null) { p.whisperTo = ""; p.whisper = false; return; }
p.whisper = true;

View File

@ -87,7 +87,7 @@ namespace MCGalaxy.Commands
} else if (cmd == "KICK") {
if (arg == "") { p.SendMessage("You must specify a player to kick."); return; }
Player pl = PlayerInfo.FindOrShowMatches(p, arg);
Player pl = PlayerInfo.FindMatches(p, arg);
if (pl != null) {
if (pl.level.name == p.level.name)
PlayerActions.ChangeMap(pl, Server.mainLevel.name);

View File

@ -33,10 +33,10 @@ namespace MCGalaxy.Commands {
if (CheckSuper(p, message, "player name")) return;
int matches = 1;
Player who = message == "" ? p : PlayerInfo.FindOrShowMatches(p, message, out matches);
Player who = message == "" ? p : PlayerInfo.FindMatches(p, message, out matches);
if (matches > 1) return;
if (matches == 0) {
OfflinePlayer off = PlayerInfo.FindOfflineOrShowMatches(p, message);
OfflinePlayer off = PlayerInfo.FindOfflineMatches(p, message);
if (off == null) return;
ecos = Economy.RetrieveEcoStats(off.name);
Player.Message(p, "%3===Economy stats for: %f" + ecos.playerName + "%7(offline)%3===");

View File

@ -30,7 +30,7 @@ namespace MCGalaxy.Commands {
if (message == "") { Help(p); return; }
string[] args = message.Split(' ');
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Player who = PlayerInfo.FindMatches(p, args[0]);
if (who == null) return;
int amount = 0;

View File

@ -43,13 +43,13 @@ namespace MCGalaxy.Commands
if (amount < 0) { Player.Message(p, "Cannot give negative %3" + Server.moneys); return; }
int matches = 1;
Player who = PlayerInfo.FindOrShowMatches(p, args[0], out matches);
Player who = PlayerInfo.FindMatches(p, args[0], out matches);
if (matches > 1) return;
if (p != null && p == who) { Player.Message(p, "You cannot give yourself %3" + Server.moneys); return; }
Economy.EcoStats ecos;
if (who == null) {
OfflinePlayer off = PlayerInfo.FindOfflineOrShowMatches(p, args[0]);
OfflinePlayer off = PlayerInfo.FindOfflineMatches(p, args[0]);
if (off == null) return;
ecos = Economy.RetrieveEcoStats(off.name);
if (ReachedMax(p, ecos.money, amount)) return;

View File

@ -37,14 +37,14 @@ namespace MCGalaxy.Commands
if (amount < 0) { Player.Message(p, "Cannot pay negative %3" + Server.moneys); return; }
int matches = 1;
Player who = PlayerInfo.FindOrShowMatches(p, args[0], out matches);
Player who = PlayerInfo.FindMatches(p, args[0], out matches);
if (matches > 1) return;
if (p != null && p == who) { Player.Message(p, "You cannot pay yourself %3" + Server.moneys); return; }
string target = null;
Economy.EcoStats payer, receiver;
if (who == null) {
OfflinePlayer off = PlayerInfo.FindOfflineOrShowMatches(p, args[0]);
OfflinePlayer off = PlayerInfo.FindOfflineMatches(p, args[0]);
if (off == null) return;
payer = Economy.RetrieveEcoStats(p.name);
receiver = Economy.RetrieveEcoStats(off.name);

View File

@ -45,13 +45,13 @@ namespace MCGalaxy.Commands
if (amount < 0) { Player.Message(p, "%cYou can't take negative %3" + Server.moneys); return; }
int matches = 1;
Player who = PlayerInfo.FindOrShowMatches(p, args[0], out matches);
Player who = PlayerInfo.FindMatches(p, args[0], out matches);
if (matches > 1) return;
if (p != null && p == who) { Player.Message(p, "%cYou can't take %3" + Server.moneys + "%c from yourself"); return; }
Economy.EcoStats ecos;
if (who == null) {
OfflinePlayer off = PlayerInfo.FindOfflineOrShowMatches(p, args[0]);
OfflinePlayer off = PlayerInfo.FindOfflineMatches(p, args[0]);
if (off == null) return;
ecos = Economy.RetrieveEcoStats(off.name);
Take(all, ref ecos, ref amount);

View File

@ -201,7 +201,7 @@ namespace MCGalaxy.Commands {
return;
}
Player who = PlayerInfo.FindOrShowMatches(p, target);
Player who = PlayerInfo.FindMatches(p, target);
if (who == null) return;
if (p.group.Permission < who.group.Permission) {
MessageTooHighRank(p, "send countdown rules", true); return;

View File

@ -106,7 +106,7 @@ namespace MCGalaxy.Commands
if (s[1] == "map")
{
if (s.Length < 3) { SetupHelp(p, "map"); return; }
Level foundLevel = LevelInfo.FindOrShowMatches(p, s[2]);
Level foundLevel = LevelInfo.FindMatches(p, s[2]);
if (foundLevel == null) {
return;
}

View File

@ -28,7 +28,7 @@ namespace MCGalaxy.Commands {
public override void Use(Player p, string message) {
if (message == "") { Help(p); return; }
int matches;
Player who = PlayerInfo.FindOrShowMatches(p, message, out matches);
Player who = PlayerInfo.FindMatches(p, message, out matches);
if (matches > 1) return;
if (who == null) {

View File

@ -69,7 +69,7 @@ namespace MCGalaxy.Commands {
Player.Message(p, "The current owner of the team is: " + team.Owner); return;
}
Player who = PlayerInfo.FindOrShowMatches(p, args[1]);
Player who = PlayerInfo.FindMatches(p, args[1]);
if (who == null) return;
team.Owner = who.name;
team.Action(who, "set the team owner to " + who.ColoredName);
@ -157,7 +157,7 @@ namespace MCGalaxy.Commands {
if (args.Length == 1) {
Player.Message(p, "You need to provide the name of the person to invite."); return;
}
Player who = PlayerInfo.FindOrShowMatches(p, args[1]);
Player who = PlayerInfo.FindMatches(p, args[1]);
if (who == null) return;
Player.Message(p, "Invited " + who.ColoredName + " %Sto join your team.");

View File

@ -115,7 +115,7 @@ namespace MCGalaxy.Commands {
Player.Message(p, "TNT Wars Error: There isn't a game on your current level!"); return;
}
} else {
Level lvl = LevelInfo.FindOrShowMatches(p, text[1]);
Level lvl = LevelInfo.FindMatches(p, text[1]);
if (lvl == null) return;
it = TntWarsGame.Find(lvl);
@ -230,7 +230,7 @@ namespace MCGalaxy.Commands {
return;
default:
Player who = PlayerInfo.FindOrShowMatches(p, text[1]);
Player who = PlayerInfo.FindMatches(p, text[1]);
if (who == null) return;
Player.Message(who, "TNT Wars Rules: (sent to you by " + p.ColoredName + " %S)");
@ -486,7 +486,7 @@ namespace MCGalaxy.Commands {
if (text[2] == "") {
it.lvl = p.level;
} else {
it.lvl = LevelInfo.FindOrShowMatches(p, text[2]);
it.lvl = LevelInfo.FindMatches(p, text[2]);
if (it.lvl == null) return;
}
Player.Message(p, "TNT Wars: Level is now '" + it.lvl.name + "'");

View File

@ -32,7 +32,7 @@ namespace MCGalaxy.Commands {
string[] args = message.Split(' ');
if (args.Length < 2) { Help(p); return; }
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Player who = PlayerInfo.FindMatches(p, args[0]);
if (who == null) return;
byte amount = 0;
if (!byte.TryParse(args[1], out amount)) {

View File

@ -28,7 +28,7 @@ namespace MCGalaxy.Commands {
public CmdDisInfect() { }
public override void Use(Player p, string message) {
Player who = message == "" ? p : PlayerInfo.FindOrShowMatches(p, message);
Player who = message == "" ? p : PlayerInfo.FindMatches(p, message);
if (who == null) return;
if (!who.Game.Infected || !Server.zombie.RoundInProgress) {

View File

@ -28,7 +28,7 @@ namespace MCGalaxy.Commands {
public CmdInfect() { }
public override void Use(Player p, string message) {
Player who = message == "" ? p : PlayerInfo.FindOrShowMatches(p, message);
Player who = message == "" ? p : PlayerInfo.FindMatches(p, message);
if (who == null) return;
if (who.Game.Infected || !Server.zombie.RoundInProgress) {

View File

@ -34,7 +34,7 @@ namespace MCGalaxy.Commands
string value = args[1];
if (args[0].CaselessEq("zombie")) {
Player who = PlayerInfo.FindOrShowMatches(p, value);
Player who = PlayerInfo.FindMatches(p, value);
if (who == null) return;
Player.Message(p, value + " was queued.");
@ -42,7 +42,7 @@ namespace MCGalaxy.Commands
if (Server.zombie.CurLevel != null)
Server.zombie.CurLevel.ChatLevel(who.ColoredName + " %Swas queued as the next zombie.");
} else if (args[0].CaselessEq("level")) {
string map = LevelInfo.FindMapOrShowMatches(p, value);
string map = LevelInfo.FindMapMatches(p, value);
if (map == null) return;
Player.Message(p, map + " was queued.");

View File

@ -70,7 +70,7 @@ namespace MCGalaxy.Commands
}
else
{
Player player = PlayerInfo.FindOrShowMatches(p, split[0]);
Player player = PlayerInfo.FindMatches(p, split[0]);
if (player == null) return;
Player.Message(player, "Changelog:");

View File

@ -36,11 +36,11 @@ namespace MCGalaxy.Commands {
string name = null;
int matches = 0;
Player who = PlayerInfo.FindOrShowMatches(p, message, out matches);
Player who = PlayerInfo.FindMatches(p, message, out matches);
if (matches > 1) return;
if (who == null) {
Player.Message(p, "Could not find player. Searching Player DB.");
OfflinePlayer target = PlayerInfo.FindOfflineOrShowMatches(p, message);
OfflinePlayer target = PlayerInfo.FindOfflineMatches(p, message);
if (target == null) return;
message = target.ip; name = target.name;
} else {

View File

@ -39,7 +39,7 @@ namespace MCGalaxy.Commands {
Player who = p;
if (message != "") {
if (!CheckExtraPerm(p)) { MessageNeedPerms(p, "can send the FAQ to a player."); return; }
who = PlayerInfo.FindOrShowMatches(p, message);
who = PlayerInfo.FindMatches(p, message);
if (who == null) return;
}

View File

@ -33,7 +33,7 @@ namespace MCGalaxy.Commands {
ShowLastCommand(p, pl);
}
} else {
Player who = PlayerInfo.FindOrShowMatches(p, message);
Player who = PlayerInfo.FindMatches(p, message);
if (who != null)
ShowLastCommand(p, who);
}

View File

@ -44,7 +44,7 @@ namespace MCGalaxy.Commands {
if (lvl != null) {
data.FromOnlineLevel(lvl);
} else {
string map = LevelInfo.FindMapOrShowMatches(p, level);
string map = LevelInfo.FindMapMatches(p, level);
if (map == null) return;
Server.s.Log(map);
data.FromOfflineLevel(map);

View File

@ -52,7 +52,7 @@ namespace MCGalaxy.Commands
return;
}
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Player who = PlayerInfo.FindMatches(p, args[0]);
if (who == null) return;
foreach (string line in lines)
Player.Message(who, line);

View File

@ -37,7 +37,7 @@ namespace MCGalaxy.Commands
Player who = p;
if (message != "") {
who = PlayerInfo.FindOrShowMatches(p, message);
who = PlayerInfo.FindMatches(p, message);
if (who == null) return;
if (p != null && p.group.Permission < who.group.Permission) {
MessageTooHighRank(p, "send /oprules", false); return;

View File

@ -40,7 +40,7 @@ namespace MCGalaxy.Commands
Player who = p;
if (message != "") {
if (!CheckExtraPerm(p)) { MessageNeedPerms(p, "can send the rules to a player."); return; }
who = PlayerInfo.FindOrShowMatches(p, message);
who = PlayerInfo.FindMatches(p, message);
if (who == null) return;
}

View File

@ -31,14 +31,14 @@ namespace MCGalaxy.Commands
if (message == "") { Help(p); return; }
int matches;
Player pl = PlayerInfo.FindOrShowMatches(p, message, out matches);
Player pl = PlayerInfo.FindMatches(p, message, out matches);
if (matches > 1) return;
if (matches == 1) {
Player.Message(p, pl.name + " was first seen: " + pl.firstLogin);
Player.Message(p, pl.color + pl.name + " %Sis currently online."); return;
}
OfflinePlayer target = PlayerInfo.FindOfflineOrShowMatches(p, message);
OfflinePlayer target = PlayerInfo.FindOfflineMatches(p, message);
if (target == null) return;
Player.Message(p, message + " was first seen: " + target.firstLogin);
Player.Message(p, message + " was last seen: " + target.lastLogin);

View File

@ -29,7 +29,7 @@ namespace MCGalaxy.Commands {
public override void Use(Player p, string message) {
if (message == "") message = p.name;
int matches;
Player pl = PlayerInfo.FindOrShowMatches(p, message, out matches);
Player pl = PlayerInfo.FindMatches(p, message, out matches);
if (pl == null) return;
if (pl.level.CurrentGame() != null && !(p == null || p.Game.Referee)) {
Player.Message(p, "You can only use /where on people in games when you are in referee mode."); return;

View File

@ -37,7 +37,7 @@ namespace MCGalaxy.Commands {
public override void Use(Player p, string message) {
if (message == "") message = p.name;
int matches;
Player pl = PlayerInfo.FindOrShowMatches(p, message, out matches);
Player pl = PlayerInfo.FindMatches(p, message, out matches);
if (matches > 1) return;
WhoInfo info;
@ -48,7 +48,7 @@ namespace MCGalaxy.Commands {
Player.Message(p, "\"" + message + "\" is not a valid player name."); return;
}
Player.Message(p, "Searching database for the player..");
OfflinePlayer target = PlayerInfo.FindOfflineOrShowMatches(p, message);
OfflinePlayer target = PlayerInfo.FindOfflineMatches(p, message);
if (target == null) return;
info = FromOffline(target, message);
}

View File

@ -33,7 +33,7 @@ namespace MCGalaxy.Commands {
if (CheckSuper(p, message, "level name")) return;
Level lvl = p.level;
if (message != "") {
lvl = LevelInfo.FindOrShowMatches(p, message);
lvl = LevelInfo.FindMatches(p, message);
if (lvl == null) return;
}

View File

@ -38,7 +38,7 @@ namespace MCGalaxy.Commands.Moderation {
Player who = PlayerInfo.Find(message);
if (who == null) {
OfflinePlayer target = PlayerInfo.FindOfflineOrShowMatches(p, message);
OfflinePlayer target = PlayerInfo.FindOfflineMatches(p, message);
if (target == null) return;
message = target.ip;
} else {

View File

@ -37,7 +37,7 @@ namespace MCGalaxy.Commands
ushort x, y, z;
if (args.Length == 1) {
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Player who = PlayerInfo.FindMatches(p, args[0]);
if (who == null) return;
if (who.level.physics < 3 || who.level.physics == 5) {
Player.Message(p, "The physics on the player's level are not sufficient for exploding."); return;

View File

@ -28,7 +28,7 @@ namespace MCGalaxy.Commands
public override void Use(Player p, string message) {
if (message == "") { Help(p); return; }
Player who = PlayerInfo.FindOrShowMatches(p, message);
Player who = PlayerInfo.FindMatches(p, message);
if (who == null) return;
if (p == who) { Player.Message(p, "Cannot freeze yourself."); return; }
if (p != null && who.group.Permission >= p.group.Permission) {

View File

@ -35,7 +35,7 @@ namespace MCGalaxy.Commands
Player.Message(p, "Set Jail point.");
return;
}
Player who = PlayerInfo.FindOrShowMatches(p, message);
Player who = PlayerInfo.FindMatches(p, message);
if (who == null) return;
if (!who.jailed) {

View File

@ -35,7 +35,7 @@ namespace MCGalaxy.Commands {
Server.s.Log("Stealth joker attempted");
}
Player who = PlayerInfo.FindOrShowMatches(p, message);
Player who = PlayerInfo.FindMatches(p, message);
if (who == null) return;
if (p != null && who.group.Permission > p.group.Permission) {
MessageTooHighRank(p, "joker", true); return;

View File

@ -32,7 +32,7 @@ namespace MCGalaxy.Commands {
if (message == "") { Help(p); return; }
string[] args = message.Split(trimChars, 2);
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Player who = PlayerInfo.FindMatches(p, args[0]);
if (who == null) return;
if (args.Length > 1) message = args[1];
else if (p == null) message = "You were kicked by the console.";

View File

@ -37,7 +37,7 @@ namespace MCGalaxy.Commands {
Player who = PlayerInfo.Find(message);
if (who == null) {
Player.Message(p, "&eNo online player \"" + message + "\", searching database..");
OfflinePlayer target = PlayerInfo.FindOfflineOrShowMatches(p, message);
OfflinePlayer target = PlayerInfo.FindOfflineMatches(p, message);
if (target == null) return;
ip = target.ip;
} else {

View File

@ -24,7 +24,7 @@ namespace MCGalaxy.Commands {
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
public override void Use(Player p, string message) {
Level level = LevelInfo.FindOrShowMatches(p, message);
Level level = LevelInfo.FindMatches(p, message);
if (level == null) return;
Player[] players = PlayerInfo.Online.Items;

View File

@ -29,7 +29,7 @@ namespace MCGalaxy.Commands.Moderation {
public override void Use(Player p, string message) {
if (message == "" || message.Split(' ').Length > 2) { Help(p); return; }
Player who = PlayerInfo.FindOrShowMatches(p, message);
Player who = PlayerInfo.FindMatches(p, message);
if (who == null) {
if (Server.muted.Contains(message)) {
Server.muted.Remove(message);

View File

@ -35,7 +35,7 @@ namespace MCGalaxy.Commands {
if (message == "") message = p.name;
int matches = 1;
Player who = message == "" ? p : PlayerInfo.FindOrShowMatches(p, message, out matches);
Player who = message == "" ? p : PlayerInfo.FindMatches(p, message, out matches);
if (matches > 1) return;
if (who != null) message = who.name;

View File

@ -31,7 +31,7 @@ namespace MCGalaxy.Commands
if (message == "") { Help(p); return; }
string[] args = message.Split(' ');
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Player who = PlayerInfo.FindMatches(p, args[0]);
if (who == null) return;
if (who.group.Permission >= p.group.Permission) {
MessageTooHighRank(p, "hide", false); return;

View File

@ -32,8 +32,8 @@ namespace MCGalaxy.Commands {
string[] args = message.Split(' ');
if (args.Length > 2) { Help(p); return; }
if (args.Length == 1) { Player.Message(p, "You did not specify the target player."); return; }
Player source = PlayerInfo.FindOrShowMatches(p, args[0]);
Player target = PlayerInfo.FindOrShowMatches(p, args[1]);
Player source = PlayerInfo.FindMatches(p, args[0]);
Player target = PlayerInfo.FindMatches(p, args[1]);
if (source == null || target == null) return;
if (p.group.Permission < source.group.Permission) {

View File

@ -54,7 +54,7 @@ namespace MCGalaxy.Commands {
Command.all.Find("hide").Use(p, "");
Player.Message(p, "Stopped possessing " + who.color + who.name + "%S.");
} else {
Player who = PlayerInfo.FindOrShowMatches(p, message);
Player who = PlayerInfo.FindMatches(p, message);
if (who == null) return;
if (who.group.Permission >= p.group.Permission) {
MessageTooHighRank(p, "possess", false); return;

View File

@ -29,7 +29,7 @@ namespace MCGalaxy.Commands
public override void Use(Player p, string message) {
if (message == "" || message.IndexOf(' ') != -1) { Help(p); return; }
Player who = PlayerInfo.FindOrShowMatches(p, message);
Player who = PlayerInfo.FindMatches(p, message);
if (who == null) return;
who.ignoreGrief = !who.ignoreGrief;
Player.Message(p, who.ColoredName + "%S's trust status: " + who.ignoreGrief);

View File

@ -26,7 +26,7 @@ namespace MCGalaxy.Commands {
public override void Use(Player p, string message) {
if (message == "" && p == null) { Help(p); return; }
Player who = message == "" ? p : PlayerInfo.FindOrShowMatches(p, message);
Player who = message == "" ? p : PlayerInfo.FindMatches(p, message);
if (who == null) return;
if (p != null && who.group.Permission > p.group.Permission) {
MessageTooHighRank(p, "voice", true); return;

View File

@ -34,7 +34,7 @@ namespace MCGalaxy.Commands
if (Server.voteKickInProgress) { Player.Message(p, "Please wait for the current vote to finish!"); return; }
Player who = PlayerInfo.FindOrShowMatches(p, message);
Player who = PlayerInfo.FindMatches(p, message);
if (who == null) return;
if (who.group.Permission >= p.group.Permission) {

View File

@ -27,7 +27,8 @@ namespace MCGalaxy.Commands.Moderation {
public override void Use(Player p, string message) {
if (message == "") { Help(p); return; }
string[] args = message.Split(trimChars, 2);
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Player who = PlayerInfo.FindMatches(p, args[0]);
string reason = args.Length == 1 ? "you know why." : args[1];
if (who == null) return;
if (who == p) { Player.Message(p, "you can't warn yourself"); return; }
@ -35,7 +36,6 @@ namespace MCGalaxy.Commands.Moderation {
MessageTooHighRank(p, "warn", false); return;
}
string reason = args.Length == 1 ? "you know why." : args[1];
string warnedby = (p == null) ? "(console)" : p.ColoredName;
Player.GlobalMessage(warnedby + " %ewarned " + who.ColoredName + " %ebecause:");
Player.GlobalMessage("&c" + reason);
@ -56,6 +56,13 @@ namespace MCGalaxy.Commands.Moderation {
else Player.AddNote(who.name, p, "W", args[1]);
}
static void WarnOffline(Player p, string[] args) {
if (!Server.LogNotes) {
Player.Message(p, "Notes logging must be enabled to warn offline players."); return;
}
Player.SendMessage(p, "Searching PlayerDB..");
}
public override void Help(Player p) {
Player.Message(p, "/warn <player> <reason> - Warns a player.");
Player.Message(p, "Player will get kicked after 3 warnings.");

View File

@ -35,7 +35,7 @@ namespace MCGalaxy.Commands {
}
string[] args = message.Split(' ');
Player muter = PlayerInfo.FindOrShowMatches(p, args[0]);
Player muter = PlayerInfo.FindMatches(p, args[0]);
if (muter == null) return;
if (p != null && muter.group.Permission > p.group.Permission) {

View File

@ -36,7 +36,7 @@ namespace MCGalaxy.Commands.World {
Level lvl = p == null ? null : p.level;
if (args.Length > 1) {
lvl = LevelInfo.FindOrShowMatches(p, args[1]);
lvl = LevelInfo.FindMatches(p, args[1]);
if (lvl == null) return;
}

View File

@ -39,7 +39,7 @@ namespace MCGalaxy.Commands.World {
if (!p.group.CanExecute("newlvl")) {
Player.Message(p, "You cannot use /copylvl as you cannot use /newlvl."); return;
}
src = LevelInfo.FindMapOrShowMatches(p, src);
src = LevelInfo.FindMapMatches(p, src);
if (src == null) return;
if (!Player.ValidName(dst)) { Player.Message(p, "\"" + dst + "\" is not a valid level name."); return; }
if (LevelInfo.ExistsOffline(dst)) { Player.Message(p, "The level \"" + dst + "\" already exists."); return; }

View File

@ -41,7 +41,7 @@ namespace MCGalaxy.Commands.World {
if (!Player.ValidName(message)) { Player.Message(p, "\"" + message + "\" is not a valid level name."); return; }
if (lvl == Server.mainLevel) { Player.Message(p, "Cannot delete the main level."); return; }
string map = LevelInfo.FindMapOrShowMatches(p, message);
string map = LevelInfo.FindMapMatches(p, message);
if (map == null) return;
LevelPermission perbuild = GetPerBuildPermission(map);
if (p != null && perbuild > p.group.Permission) {

View File

@ -69,7 +69,7 @@ namespace MCGalaxy.Commands.World {
lvl = LevelInfo.Find(message);
if (lvl != null) return GoToLevel(p, lvl, message);
string map = LevelInfo.FindMapOrShowMatches(p, message);
string map = LevelInfo.FindMapMatches(p, message);
if (map == null) return false;
return GotoOfflineLevel(p, map);
} else {

View File

@ -54,7 +54,7 @@ namespace MCGalaxy.Commands {
Chat.GlobalMessageOps("Unlocked by: " + ((p == null) ? "Console" : p.name));
}
} else {
Player who = PlayerInfo.FindOrShowMatches(p, args[1]);
Player who = PlayerInfo.FindMatches(p, args[1]);
if (who == null) return;
if (!who.jailed) {

View File

@ -40,7 +40,7 @@ namespace MCGalaxy.Commands.World {
Player.Message(p, "\"{0}\" is not a valid level name.", message); return;
}
string map = LevelInfo.FindMapOrShowMatches(p, message);
string map = LevelInfo.FindMapMatches(p, message);
if (map == null) return;
Server.level = map;

View File

@ -35,14 +35,14 @@ namespace MCGalaxy.Commands
if (parts.Length == 1) {
if (!int.TryParse(parts[0], out seconds)) {
seconds = 30;
lvl = LevelInfo.FindOrShowMatches(p, parts[0]);
lvl = LevelInfo.FindMatches(p, parts[0]);
if (lvl == null) return;
}
} else {
if (!int.TryParse(parts[0], out seconds)) {
Player.Message(p, "You must specify pause time in seconds"); return;
}
lvl = LevelInfo.FindOrShowMatches(p, parts[1]);
lvl = LevelInfo.FindMatches(p, parts[1]);
if (lvl == null) return;
}
}

View File

@ -41,7 +41,7 @@ namespace MCGalaxy.Commands {
}
if (args.Length == 2) {
level = LevelInfo.FindOrShowMatches(p, args[0]);
level = LevelInfo.FindMatches(p, args[0]);
if (level == null) return;
}
SetPhysics(level, state);

View File

@ -31,7 +31,7 @@ namespace MCGalaxy.Commands.World {
public override void Use(Player p, string message) {
if (message == "" || message.IndexOf(' ') == -1) { Help(p); return; }
string[] args = message.Split(' ');
Level lvl = LevelInfo.FindOrShowMatches(p, args[0]);
Level lvl = LevelInfo.FindMatches(p, args[0]);
if (lvl == null) return;
string newName = args[1];
if (!Player.ValidName(newName)) {

View File

@ -34,7 +34,7 @@ namespace MCGalaxy.Commands {
Level lvl;
string[] args = message.Split(' ');
if (args.Length >= 2) {
lvl = LevelInfo.FindOrShowMatches(p, args[1]);
lvl = LevelInfo.FindMatches(p, args[1]);
if (lvl == null) return;
} else {
if (p != null && p.level != null) {

View File

@ -52,7 +52,7 @@ namespace MCGalaxy.Commands {
ReloadMap(p, who, true);
}
} else {
Player who = PlayerInfo.FindOrShowMatches(p, parts[0]);
Player who = PlayerInfo.FindMatches(p, parts[0]);
if (who == null) {
return;
} else if (who.group.Permission > p.group.Permission && p != who) {

View File

@ -28,7 +28,7 @@ namespace MCGalaxy.Commands
public override void Use(Player p, string message) {
string[] args = message.Split(' ');
if (message == "" || args.Length < 2) { Help(p); return; }
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Player who = PlayerInfo.FindMatches(p, args[0]);
Group grp = Group.FindOrShowMatches(p, args[1]);
if (who == null || grp == null) return;

View File

@ -29,7 +29,7 @@ namespace MCGalaxy.Commands {
public override void Use(Player p, string message) {
if (!message.Contains(" ")) { Help(p); return; }
string[] args = message.Split(trimChars, 2);
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Player who = PlayerInfo.FindMatches(p, args[0]);
if (who == null || message == "") {Help(p); return; }
if (who.muted) { Player.Message(p, "Cannot impersonate a muted player"); return; }

View File

@ -26,7 +26,7 @@ namespace MCGalaxy.Commands {
public CmdInvincible() { }
public override void Use(Player p, string message) {
Player who = message == "" ? p : PlayerInfo.FindOrShowMatches(p, message);
Player who = message == "" ? p : PlayerInfo.FindMatches(p, message);
if (who == null) return;
if (p != null && who.group.Permission > p.group.Permission) {

View File

@ -34,7 +34,7 @@ namespace MCGalaxy.Commands
string killer = p == null ? "(console)" : p.ColoredName;
string[] args = message.Split(trimChars, 2);
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Player who = PlayerInfo.FindMatches(p, args[0]);
if (args.Length >= 2) {
if(args[1].ToLower() == "explode") {
deathMessage = " was exploded by " + killer;

View File

@ -44,8 +44,8 @@ namespace MCGalaxy.Commands
}
if (args.Length == 2) { // /move name map
Player who = PlayerInfo.FindOrShowMatches(p, args[0]);
Level where = LevelInfo.FindOrShowMatches(p, args[1]);
Player who = PlayerInfo.FindMatches(p, args[0]);
Level where = LevelInfo.FindMatches(p, args[1]);
if (who == null || where == null) return;
if (p != null && who.group.Permission > p.group.Permission) {
MessageTooHighRank(p, "move", true); return;
@ -63,7 +63,7 @@ namespace MCGalaxy.Commands
Player who;
int offset = 0;
if (args.Length == 4) {
who = PlayerInfo.FindOrShowMatches(p, args[0]);
who = PlayerInfo.FindMatches(p, args[0]);
if (who == null) return;
if (p != null && who.group.Permission > p.group.Permission) {
MessageTooHighRank(p, "move", true); return;

View File

@ -34,7 +34,7 @@ namespace MCGalaxy.Commands {
public override void Use(Player p, string message) {
if (message == "") { Help(p); return; }
Player who = PlayerInfo.FindOrShowMatches(p, message);
Player who = PlayerInfo.FindMatches(p, message);
if (who == null) return;
if (p != null && (Server.server_owner == "Notch" || Server.server_owner == "")) {

View File

@ -30,7 +30,7 @@ namespace MCGalaxy.Commands {
public override void Use(Player p, string message) {
string[] parts = message.Split(trimChars, 3);
Player target = PlayerInfo.FindOrShowMatches(p, parts[0]);
Player target = PlayerInfo.FindMatches(p, parts[0]);
if (target == null) return;
if (p != null && p.group.Permission < target.group.Permission) {
MessageTooHighRank(p, "send commands for", true); return;

View File

@ -48,7 +48,7 @@ namespace MCGalaxy.Commands
return;
}
Player who = PlayerInfo.FindOrShowMatches(p, message);
Player who = PlayerInfo.FindMatches(p, message);
if (who == null) return;
if (p.group.Permission < who.group.Permission) {
MessageTooHighRank(p, "summon", true); return;

View File

@ -31,7 +31,7 @@ namespace MCGalaxy.Commands {
string[] args = message.Split(' ');
if (args.Length > 1) { Help(p); return; }
Player target = PlayerInfo.FindOrShowMatches(p, message);
Player target = PlayerInfo.FindMatches(p, message);
if (target == null) return;
if (target.level.IsMuseum) {
Player.Message(p, "Player \"" + message + "\" is in a museum!"); return;

View File

@ -19,7 +19,7 @@ namespace MCGalaxy.Commands {
int number = message.Split(' ').Length;
if (number > 1) { Help(p); return; }
Player who = PlayerInfo.FindOrShowMatches(p, message);
Player who = PlayerInfo.FindMatches(p, message);
if (who == p) { Player.Message(p, "&cError:%S You cannot send yourself a request!"); return; }
if (who == null) return;
if (who.listignored.Contains(p.name))

View File

@ -46,7 +46,7 @@ namespace MCGalaxy.Commands {
Player who = p;
string[] args = message.Split(' ');
if (args.Length > 1) {
who = PlayerInfo.FindOrShowMatches(p, args[1]);
who = PlayerInfo.FindMatches(p, args[1]);
if (who == null) return;
}
args[0] = Path.GetFileName(args[0]);

View File

@ -43,7 +43,7 @@ namespace MCGalaxy.Commands {
return;
}
Player pl = PlayerInfo.FindOrShowMatches(p, message);
Player pl = PlayerInfo.FindMatches(p, message);
if (pl == null) return;
Command spawn = Command.all.Find("spawn");

View File

@ -64,7 +64,7 @@ namespace MCGalaxy.Eco {
if (Server.zombie.QueuedLevel != null) {
Player.Message(p, "Someone else has already queued a level."); return;
}
string map = LevelInfo.FindMapOrShowMatches(p, message);
string map = LevelInfo.FindMapMatches(p, message);
if (map == null) return;
Command.all.Find("queue").Use(p, "level " + map);

View File

@ -41,27 +41,27 @@ namespace MCGalaxy {
return matches == 1 ? match : null;
}
public static Level FindOrShowMatches(Player pl, string name) {
int matches = 0; return FindOrShowMatches(pl, name, out matches);
public static Level FindMatches(Player pl, string name) {
int matches = 0; return FindMatches(pl, name, out matches);
}
public static Level FindOrShowMatches(Player pl, string name, out int matches) {
return Extensions.FindOrShowMatches(pl, name, out matches, LevelInfo.Loaded.Items,
public static Level FindMatches(Player pl, string name, out int matches) {
return Extensions.FindMatches<Level>(pl, name, out matches, LevelInfo.Loaded.Items,
l => true, l => l.name, "loaded levels");
}
public static string FindMapOrShowMatches(Player pl, string name) {
int matches = 0; return FindMapOrShowMatches(pl, name, out matches);
public static string FindMapMatches(Player pl, string name) {
int matches = 0; return FindMapMatches(pl, name, out matches);
}
public static string FindMapOrShowMatches(Player pl, string name, out int matches) {
public static string FindMapMatches(Player pl, string name, out int matches) {
matches = 0;
if (!Player.ValidName(name)) {
Player.Message(pl, "\"{0}\" is not a valid level name.", name); return null;
}
var files = Directory.EnumerateFiles("levels", "*.lvl");
string map = Extensions.FindOrShowMatches(pl, name, out matches, files,
string map = Extensions.FindMatches<string>(pl, name, out matches, files,
l => true, l => Path.GetFileNameWithoutExtension(l), "levels");
if (map != null)
map = Path.GetFileNameWithoutExtension(map);

View File

@ -225,7 +225,7 @@ namespace MCGalaxy {
}
static void HandleWhisper(Player p, string target, string message) {
Player who = PlayerInfo.FindOrShowMatches(p, target);
Player who = PlayerInfo.FindMatches(p, target);
if (who == null) return;
if (who == p) { Player.Message(p, "Trying to talk to yourself, huh?"); return; }

View File

@ -166,15 +166,16 @@ namespace MCGalaxy
}
/// <summary> Find the group(s) which contain the given name. </summary>
public static Group FindOrShowMatches(Player p, string name, out int matches) {
public static Group FindMatches(Player p, string name, out int matches) {
name = name.ToLower();
MapName(ref name);
return Extensions.FindOrShowMatches(p, name, out matches, GroupList, g => true, g => g.name, "ranks");
return Extensions.FindMatches<Group>(p, name, out matches,
GroupList, g => true, g => g.name, "ranks");
}
/// <summary> Find the group(s) which contain the given name. </summary>
public static Group FindOrShowMatches(Player p, string name) {
int matches = 0; return FindOrShowMatches(p, name, out matches);
int matches = 0; return FindMatches(p, name, out matches);
}
static void MapName(ref string name) {

View File

@ -48,17 +48,17 @@ namespace MCGalaxy {
return matches == 1 ? match : null;
}
public static Player FindOrShowMatches(Player pl, string name, bool onlyCanSee = true) {
int matches = 0; return FindOrShowMatches(pl, name, out matches, onlyCanSee);
public static Player FindMatches(Player pl, string name, bool onlyCanSee = true) {
int matches = 0; return FindMatches(pl, name, out matches, onlyCanSee);
}
public static Player FindOrShowMatches(Player pl, string name, out int matches, bool onlyCanSee = true) {
public static Player FindMatches(Player pl, string name, out int matches, bool onlyCanSee = true) {
matches = 0;
if (!Player.ValidName(name)) {
Player.Message(pl, "\"{0}\" is not a valid player name.", name); return null;
}
return Extensions.FindOrShowMatches(pl, name, out matches, Online.Items,
return Extensions.FindMatches<Player>(pl, name, out matches, Online.Items,
p => Entities.CanSee(pl, p) || !onlyCanSee,
p => p.name, "online players");
}
@ -180,6 +180,24 @@ namespace MCGalaxy {
return alts;
}
public static string FindOfflineNameMatches(Player p, string name) {
using (DataTable results = QueryMulti(name, "Name")) {
int matches = 0;
DataRow row = Extensions.FindMatches<DataRow>(p, name, out matches, results.Rows,
r => true, r => r["Name"].ToString(), "players", 20);
return row == null ? null : row["Name"].ToString();
}
}
public static OfflinePlayer FindOfflineMatches(Player p, string name) {
using (DataTable results = QueryMulti(name, "*")) {
int matches = 0;
DataRow row = Extensions.FindMatches<DataRow>(p, name, out matches, results.Rows,
r => true, r => r["Name"].ToString(), "players", 20);
return row == null ? null : FillInfo(row, true);
}
}
static DataTable Query(string name, string selector) {
ParameterisedQuery query = ParameterisedQuery.Create();
@ -190,31 +208,13 @@ namespace MCGalaxy {
return Database.fillData(query, syntax);
}
public static OfflinePlayer FindOfflineOrShowMatches(Player p, string name) {
static DataTable QueryMulti(string name, string selector) {
ParameterisedQuery query = ParameterisedQuery.Create();
query.AddParam("@Name", "%" + name + "%");
string syntax = Server.useMySQL ?
"SELECT * FROM Players WHERE Name LIKE @Name LIMIT 20" :
"SELECT * FROM Players WHERE Name LIKE @Name LIMIT 20 COLLATE NOCASE";
using (DataTable results = Database.fillData(query, syntax)) {
if (results.Rows.Count == 0) {
Player.Message(p, "No players found matching \"{0}\".", name); return null;
}
if (results.Rows.Count == 1)
return FillInfo(results.Rows[0], true);
List<string> matches = new List<string>();
foreach (DataRow row in results.Rows) {
string entry = row["Name"].ToString().Trim();
if (entry.CaselessEq(name)) return FillInfo(row, true);
matches.Add(entry);
}
string count = matches.Count == 20 ? "20+" : matches.Count.ToString();
Player.Message(p, "{0} players found matching \"{1}\": {2}",
count, name, String.Join(", ", matches));
return null;
}
"SELECT " + selector + " FROM Players WHERE Name LIKE @Name LIMIT 21" :
"SELECT " + selector + " FROM Players WHERE Name LIKE @Name LIMIT 21 COLLATE NOCASE";
return Database.fillData(query, syntax);
}
static OfflinePlayer FillInfo(DataRow row, bool fullStats) {

View File

@ -18,6 +18,7 @@
permissions and limitations under the Licenses.
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
@ -145,8 +146,8 @@ namespace MCGalaxy {
}
}
public static T FindOrShowMatches<T>(Player pl, string name, out int matches, IEnumerable<T> items,
Predicate<T> filter, Func<T, string> nameGetter, string type) {
public static T FindMatches<T>(Player pl, string name, out int matches, IEnumerable items,
Predicate<T> filter, Func<T, string> nameGetter, string type, int limit = 5) {
T match = default(T); matches = 0;
name = name.ToLower();
StringBuilder matchNames = new StringBuilder();
@ -158,9 +159,9 @@ namespace MCGalaxy {
if (itemName.IndexOf(name, comp) < 0) continue;
match = item; matches++;
if (matches <= 5)
if (matches <= limit)
matchNames.Append(itemName).Append(", ");
else if (matches == 6)
else if (matches == limit + 1)
matchNames.Append("(and more)").Append(", ");
}