diff --git a/Commands/Moderation/CmdBan.cs b/Commands/Moderation/CmdBan.cs
index 586fa07ee..d6547fbf6 100644
--- a/Commands/Moderation/CmdBan.cs
+++ b/Commands/Moderation/CmdBan.cs
@@ -60,18 +60,12 @@ namespace MCGalaxy.Commands.Moderation {
banMsg = who.ColoredName + " %Swas &8banned %Sby " + banner + "%S." + banReason;
Player.GlobalMessage(banMsg);
}
-
- Entities.DespawnEntities(who, false);
- who.group = Group.findPerm(LevelPermission.Banned);
- who.color = who.group.color;
- Entities.SpawnEntities(who, false);
+ who.color = "";
}
- Ban.DeleteBan(target.ToLower());
- string oldgroup = group.name;
- Group.findPerm(LevelPermission.Banned).playerList.Add(target);
- Ban.BanPlayer(p, target, reason, stealth, oldgroup);
- Group.findPerm(LevelPermission.Banned).playerList.Save();
+ Ban.DeleteBan(target);
+ Ban.BanPlayer(p, target, reason, stealth, group.name);
+ RankCmd.ChangeRank(target, group, Group.findPerm(LevelPermission.Banned), who);
if (args.Length == 1) Player.AddNote(target, p, "B");
else Player.AddNote(target, p, "B", args[1]);
@@ -86,9 +80,6 @@ namespace MCGalaxy.Commands.Moderation {
if (p != null && group.Permission >= p.Rank) {
MessageTooHighRank(p, "ban", false); return false;
}
-
- group.playerList.Remove(name);
- group.playerList.Save();
return true;
}
diff --git a/Commands/Moderation/CmdSetRank.cs b/Commands/Moderation/CmdSetRank.cs
index ec27a0266..fde2653ae 100644
--- a/Commands/Moderation/CmdSetRank.cs
+++ b/Commands/Moderation/CmdSetRank.cs
@@ -42,71 +42,53 @@ namespace MCGalaxy.Commands.Moderation {
string reason = args.Length > 2 ? args[2] : null, rankMsg = null;
Player who = PlayerInfo.Find(name);
+ if (who == p && who != null) { Player.Message(p, "Cannot change your own rank."); return; }
+ if (who != null) name = who.name;
+
+ Group curRank = who != null ? who.group : PlayerInfo.GetGroup(name);
+ Group newRank = TargetRank(p, rank.ToLower(), curRank);
+ if (newRank == null) return;
+ if (!ChangeRank(name, curRank, newRank, who, p, ref reason)) return;
+
if (who == null) {
- Group group = Group.findPlayerGroup(name);
- Group newRank = TargetRank(p, rank.ToLower(), group);
- if (newRank == null) return;
-
- if (!ChangeRank(name, group, newRank, null, p, ref reason)) return;
rankMsg = name + " &f(offline)%S's rank was set to " + newRank.ColoredName + "%S. (" + reason + "%S)";
Player.GlobalMessage(rankMsg);
- } else if (who == p) {
- Player.Message(p, "Cannot change your own rank."); return;
} else {
- Group newRank = TargetRank(p, rank.ToLower(), who.group);
- if (newRank == null) return;
-
- if (!ChangeRank(who.name, who.group, newRank, who, p, ref reason)) return;
rankMsg = who.ColoredName + "%S's rank was set to " + newRank.ColoredName + "%S. (" + reason + "%S)";
Player.GlobalMessage(rankMsg);
- Entities.DespawnEntities(who, false);
-
- if (who.color == "" || who.color == who.group.color)
- who.color = newRank.color;
- who.group = newRank;
- who.SetPrefix();
-
who.SendMessage("You are now ranked " + newRank.ColoredName + "%S, type /help for your new set of commands.");
- who.SendUserType(Block.canPlace(who.Rank, Block.blackrock));
- Entities.SpawnEntities(who, false);
}
+
+ RankCmd.ChangeRank(name, curRank, newRank, who);
+ WriteRankInfo(p, name, newRank, curRank, reason);
Server.IRC.Say(rankMsg);
}
- bool ChangeRank(string name, Group group, Group newRank, Player who, Player p, ref string reason) {
+ bool ChangeRank(string name, Group curRank, Group newRank,
+ Player who, Player p, ref string reason) {
Group banned = Group.findPerm(LevelPermission.Banned);
if (reason == null) {
- reason = newRank.Permission >= group.Permission ?
+ reason = newRank.Permission >= curRank.Permission ?
Server.defaultPromoteMessage : Server.defaultDemoteMessage;
}
- if (group == banned || newRank == banned) {
- Player.Message(p, "Cannot change the rank to or from \"" + banned.name + "\"."); return false;
+ if (curRank == banned || newRank == banned) {
+ Player.Message(p, "Cannot change the rank to or from \"{0}\".", banned.name); return false;
}
- if (p != null && (group.Permission >= p.Rank || newRank.Permission >= p.Rank)) {
+ if (p != null && (curRank.Permission >= p.Rank || newRank.Permission >= p.Rank)) {
MessageTooHighRank(p, "change the rank of", false); return false;
}
- if (p != null && (newRank.Permission >= p.Rank)) {
+ if (p != null && newRank.Permission >= p.Rank) {
Player.Message(p, "Cannot change the rank of a player to a rank equal or higher to yours."); return false;
}
- if (who != null) {
- Group.because(who, newRank);
- if (Group.cancelrank) {
- Group.cancelrank = false; return false;
- }
- }
-
- Server.reviewlist.Remove(name);
- group.playerList.Remove(name);
- group.playerList.Save();
- newRank.playerList.Add(name);
- newRank.playerList.Save();
- WriteRankInfo(p, name, newRank, group, reason);
+ if (who == null) return true;
+ Group.because(who, newRank);
+ if (Group.cancelrank) { Group.cancelrank = false; return false; }
return true;
}
- static void WriteRankInfo(Player p, string name, Group newRank, Group group, string reason) {
+ static void WriteRankInfo(Player p, string name, Group newRank, Group oldRank, string reason) {
string year = DateTime.Now.Year.ToString();
string month = DateTime.Now.Month.ToString();
string day = DateTime.Now.Day.ToString();
@@ -115,18 +97,18 @@ namespace MCGalaxy.Commands.Moderation {
string assigner = p == null ? "(console)" : p.name;
string line = name + " " + assigner + " " + minute + " " + hour + " " + day + " " + month
- + " " + year + " " + newRank.name + " " + group.name + " " + reason.Replace(" ", "%20");
+ + " " + year + " " + newRank.name + " " + oldRank.name + " " + reason.Replace(" ", "%20");
Server.RankInfo.Append(line);
}
- static Group TargetRank(Player p, string name, Group curGroup) {
- if (name == "+up") return NextRankUp(p, curGroup);
- if (name == "-down") return NextRankDown(p, curGroup);
+ static Group TargetRank(Player p, string name, Group curRank) {
+ if (name == "+up") return NextRankUp(p, curRank);
+ if (name == "-down") return NextRankDown(p, curRank);
return Group.FindMatches(p, name);
}
- static Group NextRankDown(Player p, Group curGroup) {
- int index = Group.GroupList.IndexOf(curGroup);
+ static Group NextRankDown(Player p, Group curRank) {
+ int index = Group.GroupList.IndexOf(curRank);
if (index > 0) {
Group next = Group.GroupList[index - 1];
if (next.Permission > LevelPermission.Banned) return next;
@@ -134,8 +116,8 @@ namespace MCGalaxy.Commands.Moderation {
Player.Message(p, "No lower ranks exist"); return null;
}
- static Group NextRankUp(Player p, Group curGroup) {
- int index = Group.GroupList.IndexOf(curGroup);
+ static Group NextRankUp(Player p, Group curRank) {
+ int index = Group.GroupList.IndexOf(curRank);
if (index < Group.GroupList.Count - 1) {
Group next = Group.GroupList[index + 1];
if (next.Permission < LevelPermission.Nobody) return next;
diff --git a/Commands/Moderation/CmdUnban.cs b/Commands/Moderation/CmdUnban.cs
index 03a57c879..5b18c6ecc 100644
--- a/Commands/Moderation/CmdUnban.cs
+++ b/Commands/Moderation/CmdUnban.cs
@@ -1,7 +1,7 @@
/*
Copyright 2010 MCSharp team (Modified for use with MCZall/MCLawl/MCGalaxy)
- Dual-licensed under the Educational Community License, Version 2.0 and
+ Dual-licensed under the Educational Community License, Version 2.0 and
the GNU General Public License, Version 3 (the "Licenses"); you may
not use this file except in compliance with the Licenses. You may
obtain a copy of the Licenses at
@@ -15,7 +15,7 @@
or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses.
*/
-namespace MCGalaxy.Commands {
+namespace MCGalaxy.Commands.Moderation {
public sealed class CmdUnban : Command {
public override string name { get { return "unban"; } }
public override string shortcut { get { return ""; } }
@@ -65,15 +65,9 @@ namespace MCGalaxy.Commands {
Server.IRC.Say(name + " was unbanned by " + src + ".");
Ban.UnbanPlayer(p, name, reason);
- Group.findPerm(LevelPermission.Banned).playerList.Remove(name);
- Group.findPerm(LevelPermission.Banned).playerList.Save();
-
+ Group banned = Group.findPerm(LevelPermission.Banned);
Player who = PlayerInfo.Find(name);
- if (who != null) {
- who.group = Group.standard; who.color = who.group.color;
- Entities.GlobalDespawn(who, true);
- Entities.GlobalSpawn(who, true);
- }
+ RankCmd.ChangeRank(name, banned, Group.standard, who, false);
string ip = PlayerInfo.FindIP(name);
if (ip != null && Server.bannedIP.Contains(ip))
diff --git a/Commands/Moderation/RankCmd.cs b/Commands/Moderation/RankCmd.cs
new file mode 100644
index 000000000..6723d33e7
--- /dev/null
+++ b/Commands/Moderation/RankCmd.cs
@@ -0,0 +1,46 @@
+/*
+ Copyright 2015 MCGalaxy team
+
+ Dual-licensed under the Educational Community License, Version 2.0 and
+ the GNU General Public License, Version 3 (the "Licenses"); you may
+ not use this file except in compliance with the Licenses. You may
+ obtain a copy of the Licenses at
+
+ http://www.opensource.org/licenses/ecl2.php
+ http://www.gnu.org/licenses/gpl-3.0.html
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the Licenses are distributed on an "AS IS"
+ BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ or implied. See the Licenses for the specific language governing
+ permissions and limitations under the Licenses.
+ */
+using System;
+using System.IO;
+
+namespace MCGalaxy.Commands.Moderation {
+ internal static class RankCmd {
+
+ internal static void ChangeRank(string name, Group oldRank, Group newRank,
+ Player who, bool saveToNewRank = true) {
+ Server.reviewlist.Remove(name);
+ oldRank.playerList.Remove(name);
+ oldRank.playerList.Save();
+
+ if (saveToNewRank) {
+ newRank.playerList.Add(name);
+ newRank.playerList.Save();
+ }
+ if (who == null) return;
+
+ Entities.DespawnEntities(who, false);
+ if (who.color == "" || who.color == who.group.color)
+ who.color = newRank.color;
+ who.group = newRank;
+
+ who.SetPrefix();
+ who.SendUserType(Block.canPlace(who.Rank, Block.blackrock));
+ Entities.SpawnEntities(who, false);
+ }
+ }
+}
diff --git a/MCGalaxy_.csproj b/MCGalaxy_.csproj
index 441d5d728..f12a43714 100644
--- a/MCGalaxy_.csproj
+++ b/MCGalaxy_.csproj
@@ -331,6 +331,7 @@
+