private static void ZoneEditHandler( Player player, Command cmd )
{
bool changesWereMade = false;
string zoneName = cmd.Next();
if ( zoneName == null ) {
player.Message( "No zone name specified. See &H/Help ZEdit" );
return;
}
Zone zone = player.WorldMap.Zones.Find( zoneName );
if ( zone == null ) {
player.MessageNoZone( zoneName );
return;
}
string name;
while ( ( name = cmd.Next() ) != null ) {
if ( name.StartsWith( "+" ) ) {
if ( name.Length == 1 ) {
CdZoneEdit.PrintUsage( player );
break;
}
PlayerInfo info = PlayerDB.FindPlayerInfoOrPrintMatches( player, name.Substring( 1 ) );
if ( info == null )
return;
// prevent players from whitelisting themselves to bypass protection
if ( !player.Info.Rank.AllowSecurityCircumvention && player.Info == info ) {
if ( !zone.Controller.Check( info ) ) {
player.Message( "You must be {0}+&S to add yourself to this zone's whitelist.",
zone.Controller.MinRank.ClassyName );
continue;
}
}
switch ( zone.Controller.Include( info ) ) {
case PermissionOverride.Deny:
player.Message( "{0}&S is no longer excluded from zone {1}",
info.ClassyName, zone.ClassyName );
changesWereMade = true;
break;
case PermissionOverride.None:
player.Message( "{0}&S is now included in zone {1}",
info.ClassyName, zone.ClassyName );
changesWereMade = true;
break;
case PermissionOverride.Allow:
player.Message( "{0}&S is already included in zone {1}",
info.ClassyName, zone.ClassyName );
break;
}
} else if ( name.StartsWith( "-" ) ) {
if ( name.Length == 1 ) {
CdZoneEdit.PrintUsage( player );
break;
}
PlayerInfo info = PlayerDB.FindPlayerInfoOrPrintMatches( player, name.Substring( 1 ) );
if ( info == null )
return;
switch ( zone.Controller.Exclude( info ) ) {
case PermissionOverride.Deny:
player.Message( "{0}&S is already excluded from zone {1}",
info.ClassyName, zone.ClassyName );
break;
case PermissionOverride.None:
player.Message( "{0}&S is now excluded from zone {1}",
info.ClassyName, zone.ClassyName );
changesWereMade = true;
break;
case PermissionOverride.Allow:
player.Message( "{0}&S is no longer included in zone {1}",
info.ClassyName, zone.ClassyName );
changesWereMade = true;
break;
}
} else if ( name.ToLower().StartsWith( "msg=" ) ) {
zone.Message = name.Substring( 4 ) + " " + ( cmd.NextAll() ?? "" );
changesWereMade = true;
player.Message( "Zedit: Custom denied messaged changed to '" + zone.Message + "'" );
break;
} else {
Rank minRank = RankManager.FindRank( name );
if ( minRank != null ) {
// prevent players from lowering rank so bypass protection
if ( !player.Info.Rank.AllowSecurityCircumvention &&
zone.Controller.MinRank > player.Info.Rank && minRank <= player.Info.Rank ) {
player.Message( "You are not allowed to lower the zone's rank." );
continue;
}
if ( zone.Controller.MinRank != minRank ) {
zone.Controller.MinRank = minRank;
player.Message( "Permission for zone \"{0}\" changed to {1}+",
zone.Name,
minRank.ClassyName );
changesWereMade = true;
}
} else {
player.MessageNoRank( name );
}
}
}
if ( changesWereMade )
zone.Edit( player.Info );
else
player.Message( "No changes were made to the zone." );
}