When a player asks for it, every m admin / operator get's a message, than they need to apply it with /acceptclear <player>... or just decline it.
And, thanks to the awesome Dzienny for helping me with sending a message to every admin / operator!
NOTE: not yet tested.
THINGS TO-DO:
- /acceptclear even when a player isn't online(don't know how)
- improve reset system(?)
- bake cake
Code:
Spoiler:
- Code: Select all
using System;
using System.Linq;
namespace MCDzienny
{
public class CmdClearall : Command
{
public override string name { get { return "clearall"; } }
public override string shortcut { get { return ""; } }
public override string type { get { return "other"; } }
public override bool museumUsable { get { return false; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
public override void Use(Player p, string message)
{
if (message.Trim().Split(' ').Length < 2)
{
p.SendMessage("Are you sure you want to delete all your stuff?");
p.SendMessage("If you are, enter \"/clearall sure\".");
}
else if (message.Trim().Split(' ')[1] == "sure")
{
p.ExtraData.Add("reset", false);
p.SendMessage("Request send to the moderators!");
p.SendMessage("If you want to keep your progress, message one of them!");
sendAll(LevelPermission.Nobody, p);
sendAll(LevelPermission.Admin, p);
sendAll(LevelPermission.Operator, p);
}
if (p.ExtraData.ContainsKey("reset"))
{
if ((bool)p.ExtraData["reset"])
{
p.welcomeMessage = null;
p.waterBlocks = 0;
p.WarnedForHacksTimes = 0;
p.totalScore = 0;
p.TotalMinutesPlayed = 0;
p.tier = 0;
p.LavaTier = 0;
p.lives = 3;
p.IronChallenge = 0;
p.doorBlocks = 0;
p.money = 0;
Command.all.Find("setrank").Use(null, p.PublicName + " " + Server.defaultRank.ToString());
p.timesWon = 0;
p.title = null;
p.titlecolor = null;
p.spongeBlocks = 0;
p.RoundsOnZombie = 0;
p.timesWon = 0;
p.WonAsHumanTimes = 0;
p.WonAsZombieTimes = 0;
p.totalKicked = 0;
p.totalLogins = 0;
p.score = 0;
p.color = null;
p.ExtraData.Remove("reset");
p.SendMessage("Succesfully erased all your data!");
}
else
{
p.SendMessage("Your request for deleting your values is still pending!");
}
}
}
void send(Player p, string to)
{
Command.all.Find("send").Use(p, to + " I want my player data to be cleared! Please use: /acceptclear " + p.PublicName + "!" + System.Environment.NewLine +
"Or, to decline, use /acceptclear " + p.PublicName + " decline!");
}
void sendAll(LevelPermission per, Player player)
{
var perGroup = Group.groupList.Where(g => g.Permission == per).First();
var people = perGroup.playerList.All();
foreach (var p in people)
{
var pOnline = Player.Find(p);
if (pOnline == null)
{
send(player, p);
continue;
}
// Else state ment not needed thanks to our special "continue"! :D
send(player, pOnline.PublicName);
Player.SendMessage(pOnline, player.PublicName + " is asking for a data clear! See your inbox for further instructions.");
}
}
public override void Help(Player p)
{
Player.SendMessage(p, "/clearall - Removes ALL of your progress.");
}
}
public class CmdAcceptclear : Command
{
public override string name { get { return "acceptclear"; } }
public override string shortcut { get { return ""; } }
public override string type { get { return "other"; } }
public override bool museumUsable { get { return false; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
public override void Use(Player p, string message)
{
string[] msg = message.Trim().Split(' ');
if (msg.Length < 2)
{
p.SendMessage("You must enter a name!");
return;
}
Player target = Player.Find(msg[1]);
if (target == null)
{
p.SendMessage("Player \"" + msg[1] + "\" not found!");
return;
}
if (target.ExtraData.ContainsKey("reset"))
{
if (msg.Length > 2)
{
if (msg[2].ToLower() == "decline")
{
target.ExtraData.Remove("reset");
Command.all.Find("send").Use(target, target + " Your reset request has been declined!");
}
}
else
{
target.ExtraData.Remove("reset");
target.ExtraData.Add("reset", true);
Command.all.Find("send").Use(target, target + " Your reset request has been approved!" + System.Environment.NewLine + "To clear your data, use /clearall!");
}
}
else
{
p.SendMessage("Player not requested reset!");
}
}
public override void Help(Player p)
{
Player.SendMessage(p, "/acceptclear <player> - accepts clearing progress.");
Player.SendMessage(p, "See also: /clearall");
}
}
}
Have fun declining people!