Don't let you use /infoswap on same or higher ranked players.

This commit is contained in:
UnknownShadow200 2016-08-17 16:22:47 +10:00
parent b583e80d27
commit e402a9f15b
2 changed files with 20 additions and 16 deletions

View File

@ -32,12 +32,10 @@ namespace MCGalaxy.Commands {
string[] parts = message.SplitSpaces(2); string[] parts = message.SplitSpaces(2);
if (message == "" || parts.Length == 1) { Help(p); return; } if (message == "" || parts.Length == 1) { Help(p); return; }
Player who = PlayerInfo.Find(parts[0]); Player receiver = PlayerInfo.Find(parts[0]);
string whoTo = who == null ? parts[0] : who.name; string receiverName = receiver == null ? parts[0] : receiver.name;
string fromname = p == null ? "(console)" : p.name; string senderName = p == null ? "(console)" : p.name;
if (!Player.ValidName(whoTo)) { if (!ValidName(p, receiverName, "player")) return;
Player.Message(p, "%cIllegal name!"); return;
}
message = parts[1]; message = parts[1];
//DB //DB
@ -47,13 +45,13 @@ namespace MCGalaxy.Commands {
message = message.Substring(0, 255); message = message.Substring(0, 255);
} }
//safe against SQL injections because whoTo is checked for illegal characters //safe against SQL injections because whoTo is checked for illegal characters
Database.Execute("CREATE TABLE if not exists `Inbox" + whoTo + Database.Execute("CREATE TABLE if not exists `Inbox" + receiverName +
"` (PlayerFrom CHAR(20), TimeSent DATETIME, Contents VARCHAR(255));"); "` (PlayerFrom CHAR(20), TimeSent DATETIME, Contents VARCHAR(255));");
Database.Execute("INSERT INTO `Inbox" + whoTo + "` (PlayerFrom, TimeSent, Contents) VALUES (@0, @1, @2)", Database.Execute("INSERT INTO `Inbox" + receiverName + "` (PlayerFrom, TimeSent, Contents) VALUES (@0, @1, @2)",
fromname, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), message); senderName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), message);
Player.Message(p, "Message sent to &5" + whoTo + "."); Player.Message(p, "Message sent to &5" + receiverName + ".");
if (who != null) who.SendMessage("Message recieved from &5" + fromname + "%S."); if (receiver != null) receiver.SendMessage("Message recieved from &5" + senderName + "%S.");
} }
public override void Help(Player p) { public override void Help(Player p) {

View File

@ -49,9 +49,18 @@ namespace MCGalaxy.Commands {
if (dst == null) { if (dst == null) {
Player.Message(p, "\"{0}\" was not found in the database.", args[1]); return; Player.Message(p, "\"{0}\" was not found in the database.", args[1]); return;
} }
Group srcGroup = Group.findPlayerGroup(src.Name);
Group dstGroup = Group.findPlayerGroup(dst.Name);
if (p != null && srcGroup.Permission > p.Rank) {
Player.Message(p, "Cannot /infoswap for a player ranked equal or higher to yours."); return;
}
if (p != null && dstGroup.Permission > p.Rank) {
Player.Message(p, "Cannot /infoswap for a player ranked equal or higher to yours."); return;
}
Swap(src, dst); Swap(dst, src); Swap(src, dst); Swap(dst, src);
SwapGroups(src, dst); SwapGroups(src, dst, srcGroup, dstGroup);
} }
const string format = "yyyy-MM-dd HH:mm:ss"; const string format = "yyyy-MM-dd HH:mm:ss";
@ -69,10 +78,7 @@ namespace MCGalaxy.Commands {
src.Money, src.Title, src.TitleColor, src.TotalTime, dst.Name); src.Money, src.Title, src.TitleColor, src.TotalTime, dst.Name);
} }
void SwapGroups(PlayerData src, PlayerData dst) { void SwapGroups(PlayerData src, PlayerData dst, Group srcGroup, Group dstGroup) {
Group srcGroup = Group.findPlayerGroup(src.Name);
Group dstGroup = Group.findPlayerGroup(dst.Name);
srcGroup.playerList.Remove(src.Name); srcGroup.playerList.Remove(src.Name);
srcGroup.playerList.Add(dst.Name); srcGroup.playerList.Add(dst.Name);
srcGroup.playerList.Save(); srcGroup.playerList.Save();