private static void UndoPlayerHandler2( Player player, PlayerInfo[] target )
{
BlockDBUndoArgs args = new BlockDBUndoArgs() { Player = player, World = player.World, CountLimit = 50000, Not = false, Targets = target };
bool allPlayers = ( args.Targets.Length == 0 );
string cmdName = ( args.Not ? "UndoPlayerNot" : "UndoPlayer" );
// prepare to look up
string targetList;
if ( allPlayers ) {
targetList = "EVERYONE";
} else if ( args.Not ) {
targetList = "EVERYONE except " + args.Targets.JoinToClassyString();
} else {
targetList = args.Targets.JoinToClassyString();
}
BlockDBEntry[] changes;
if ( args.CountLimit > 0 ) {
// count-limited lookup
if ( args.Targets.Length == 0 ) {
changes = args.World.BlockDB.Lookup( args.CountLimit );
} else {
changes = args.World.BlockDB.Lookup( args.CountLimit, args.Targets, args.Not );
}
if ( changes.Length > 0 ) {
Logger.Log( LogType.UserActivity,
"{0}: Asked {1} to confirm undo on world {2}",
cmdName, args.Player.Name, args.World.Name );
args.Player.Confirm( BlockDBUndoConfirmCallback, args,
"Undo last {0} changes made by {1}&S?",
changes.Length, targetList );
}
} else {
// time-limited lookup
if ( args.Targets.Length == 0 ) {
changes = args.World.BlockDB.Lookup( Int32.MaxValue, args.AgeLimit );
} else {
changes = args.World.BlockDB.Lookup( Int32.MaxValue, args.Targets, args.Not, args.AgeLimit );
}
if ( changes.Length > 0 ) {
Logger.Log( LogType.UserActivity,
"{0}: Asked {1} to confirm undo on world {2}",
cmdName, args.Player.Name, args.World.Name );
args.Player.Confirm( BlockDBUndoConfirmCallback, args,
"Undo changes ({0}) made by {1}&S in the last {2}?",
changes.Length, targetList, args.AgeLimit.ToMiniString() );
}
}
// stop if there's nothing to undo
if ( changes.Length == 0 ) {
args.Player.Message( "{0}: Found nothing to undo.", cmdName );
} else {
args.Entries = changes;
}
}