bool DefineClass(XElement el) { PlayerClass playerClass = new PlayerClass(); // read required attributes XAttribute attr = el.Attribute("name"); if (attr == null) { Log("Config.DefineClass: Class definition with no name was ignored.", LogType.Warning); return(false); } if (!PlayerClass.IsValidClassName(attr.Value.Trim())) { Log("Config.DefineClass: Invalid name specified for class \"{0}\". Class name can only contain letters, digits, and underscores.", LogType.Warning, playerClass.name); return(false); } playerClass.name = attr.Value.Trim(); if (classes.classes.ContainsKey(playerClass.name)) { Log("Config.DefineClass: Duplicate class definition for \"{0}\" was ignored.", LogType.Warning, playerClass.name); return(true); } if ((attr = el.Attribute("rank")) == null) { Log("Config.DefineClass: No rank specified for {0}. Class definition was ignored.", LogType.Warning, playerClass.name); return(false); } if (!Byte.TryParse(attr.Value, out playerClass.rank)) { Log("Config.DefineClass: Cannot parse rank for {0}. Class definition was ignored.", LogType.Warning, playerClass.name); return(false); } attr = el.Attribute("color"); if (attr == null || Color.Parse(attr.Value) == null) { playerClass.color = ""; } else { playerClass.color = Color.Parse(attr.Value); } // read optional attributes if ((attr = el.Attribute("prefix")) != null) { if (PlayerClass.IsValidPrefix(attr.Value)) { playerClass.prefix = attr.Value; } else { Log("Config.DefineClass: Invalid prefix specified for {0}.", LogType.Warning, playerClass.name); playerClass.prefix = ""; } } if ((attr = el.Attribute("spamKickAt")) != null) { if (!Int32.TryParse(attr.Value, out playerClass.spamKickThreshold)) { Log("Config.DefineClass: Could not parse the value for spamKickAt for {0}. Assuming 0 (never).", LogType.Warning, playerClass.name); playerClass.spamKickThreshold = 0; } } else { playerClass.spamKickThreshold = 0; } if ((attr = el.Attribute("spamBanAt")) != null) { if (!Int32.TryParse(attr.Value, out playerClass.spamBanThreshold)) { Log("Config.DefineClass: Could not parse the value for spamBanAt for {0}. Assuming 0 (never).", LogType.Warning, playerClass.name); playerClass.spamBanThreshold = 0; } } else { playerClass.spamBanThreshold = 0; } if ((attr = el.Attribute("idleKickAfter")) != null) { if (!Int32.TryParse(attr.Value, out playerClass.idleKickTimer)) { Log("Config.DefineClass: Could not parse the value for idleKickAfter for {0}. Assuming 0 (never).", LogType.Warning, playerClass.name); playerClass.idleKickTimer = 0; } } else { playerClass.idleKickTimer = 0; } if ((attr = el.Attribute("reserveSlot")) != null) { if (!Boolean.TryParse(attr.Value, out playerClass.reservedSlot)) { Log("Config.DefineClass: Could not parse the value for reserveSlot for {0}. Assuming \"false\".", LogType.Warning, playerClass.name); playerClass.reservedSlot = false; } } else { playerClass.reservedSlot = false; } // read permissions XElement temp; for (int i = 0; i < Enum.GetValues(typeof(Permissions)).Length; i++) { string permission = ((Permissions)i).ToString(); if ((temp = el.Element(permission)) != null) { playerClass.permissions[i] = true; if (i == (int)Permissions.Promote) { if ((attr = temp.Attribute("max")) != null) { playerClass.maxPromoteVal = attr.Value; } else { playerClass.maxPromoteVal = ""; } } else if (i == (int)Permissions.Demote) { if ((attr = temp.Attribute("max")) != null) { playerClass.maxDemoteVal = attr.Value; } else { playerClass.maxDemoteVal = ""; } } else if (i == (int)Permissions.Kick) { if ((attr = temp.Attribute("max")) != null) { playerClass.maxKickVal = attr.Value; } else { playerClass.maxKickVal = ""; } } else if (i == (int)Permissions.Ban) { if ((attr = temp.Attribute("max")) != null) { playerClass.maxBanVal = attr.Value; } else { playerClass.maxBanVal = ""; } } } } // check for consistency in ban permissions if (!playerClass.Can(Permissions.Ban) && (playerClass.Can(Permissions.BanAll) || playerClass.Can(Permissions.BanIP))) { Log("Class \"{0}\" is allowed to BanIP and/or BanAll but not allowed to Ban.\n" + "Assuming that all ban permissions were ment to be off.", LogType.Warning, playerClass.name); playerClass.permissions[(int)Permissions.BanIP] = false; playerClass.permissions[(int)Permissions.BanAll] = false; } classes.AddClass(playerClass); return(true); }
void SelectClass( PlayerClass pc ) { if( pc == null ) { DisableClassOptions(); return; } selectedClass = pc; tClassName.Text = pc.name; nRank.Value = pc.rank; ApplyColor( bColorClass, fCraft.Color.ParseToIndex( pc.color ) ); tPrefix.Text = pc.prefix; cKickLimit.SelectedIndex = pc.GetMaxKickIndex(); cBanLimit.SelectedIndex = pc.GetMaxBanIndex(); cPromoteLimit.SelectedIndex = pc.GetMaxPromoteIndex(); cDemoteLimit.SelectedIndex = pc.GetMaxDemoteIndex(); xReserveSlot.Checked = pc.reservedSlot; xIdleKick.Checked = pc.idleKickTimer > 0; nKickIdle.Value = pc.idleKickTimer; nKickIdle.Enabled = xIdleKick.Checked; xKickOn.Checked = pc.spamKickThreshold > 0; nKickOn.Value = pc.spamKickThreshold; nKickOn.Enabled = xKickOn.Checked; xBanOn.Checked = pc.spamBanThreshold > 0; nBanOn.Value = pc.spamBanThreshold; nBanOn.Enabled = xBanOn.Checked; foreach( ListViewItem item in vPermissions.Items ) { item.Checked = pc.permissions[item.Index]; if( item.Checked ) { item.Font = bold; } else { item.Font = vPermissions.Font; } } cKickLimit.Enabled = pc.Can( Permissions.Kick ); cBanLimit.Enabled = pc.Can( Permissions.Ban ); cPromoteLimit.Enabled = pc.Can( Permissions.Promote ); cDemoteLimit.Enabled = pc.Can( Permissions.Demote ); gClassOptions.Enabled = true; lPermissions.Enabled = true; vPermissions.Enabled = true; }
static bool DefineClass( XElement el ) { PlayerClass playerClass = new PlayerClass(); // read required attributes XAttribute attr = el.Attribute( "name" ); if( attr == null ) { Log( "Config.DefineClass: Class definition with no name was ignored.", LogType.Warning ); return false; } if( !PlayerClass.IsValidClassName( attr.Value.Trim() ) ) { Log( "Config.DefineClass: Invalid name specified for class \"{0}\". Class name can only contain letters, digits, and underscores.", LogType.Warning, playerClass.name ); return false; } playerClass.name = attr.Value.Trim(); if( ClassList.classes.ContainsKey( playerClass.name ) ) { Log( "Config.DefineClass: Duplicate class definition for \"{0}\" was ignored.", LogType.Warning, playerClass.name ); return true; } if( (attr = el.Attribute( "rank" )) == null ) { Log( "Config.DefineClass: No rank specified for {0}. Class definition was ignored.", LogType.Warning, playerClass.name ); return false; } if( !Byte.TryParse( attr.Value, out playerClass.rank ) ) { Log( "Config.DefineClass: Cannot parse rank for {0}. Class definition was ignored.", LogType.Warning, playerClass.name ); return false; } attr = el.Attribute( "color" ); if( attr == null || Color.Parse( attr.Value ) == null ) { playerClass.color = ""; } else { playerClass.color = Color.Parse( attr.Value ); } // read optional attributes if( (attr = el.Attribute( "prefix" )) != null ) { if( PlayerClass.IsValidPrefix( attr.Value ) ) { playerClass.prefix = attr.Value; } else { Log( "Config.DefineClass: Invalid prefix specified for {0}.", LogType.Warning, playerClass.name ); playerClass.prefix = ""; } } if( (attr = el.Attribute( "spamKickAt" )) != null ) { if( !Int32.TryParse( attr.Value, out playerClass.spamKickThreshold ) ) { Log( "Config.DefineClass: Could not parse the value for spamKickAt for {0}. Assuming 0 (never).", LogType.Warning, playerClass.name ); playerClass.spamKickThreshold = 0; } } else { playerClass.spamKickThreshold = 0; } if( (attr = el.Attribute( "spamBanAt" )) != null ) { if( !Int32.TryParse( attr.Value, out playerClass.spamBanThreshold ) ) { Log( "Config.DefineClass: Could not parse the value for spamBanAt for {0}. Assuming 0 (never).", LogType.Warning, playerClass.name ); playerClass.spamBanThreshold = 0; } } else { playerClass.spamBanThreshold = 0; } if( (attr = el.Attribute( "idleKickAfter" )) != null ) { if( !Int32.TryParse( attr.Value, out playerClass.idleKickTimer ) ) { Log( "Config.DefineClass: Could not parse the value for idleKickAfter for {0}. Assuming 0 (never).", LogType.Warning, playerClass.name ); playerClass.idleKickTimer = 0; } } else { playerClass.idleKickTimer = 0; } if( (attr = el.Attribute( "reserveSlot" )) != null ) { if( !Boolean.TryParse( attr.Value, out playerClass.reservedSlot ) ) { Log( "Config.DefineClass: Could not parse the value for reserveSlot for {0}. Assuming \"false\".", LogType.Warning, playerClass.name ); playerClass.reservedSlot = false; } } else { playerClass.reservedSlot = false; } // read permissions XElement temp; for( int i = 0; i < Enum.GetValues( typeof( Permissions ) ).Length; i++ ) { string permission = ((Permissions)i).ToString(); if( (temp = el.Element( permission )) != null ) { playerClass.permissions[i] = true; if( i == (int)Permissions.Promote ) { if( (attr = temp.Attribute( "max" )) != null ) { playerClass.maxPromoteVal = attr.Value; } else { playerClass.maxPromoteVal = ""; } } else if( i == (int)Permissions.Demote ) { if( (attr = temp.Attribute( "max" )) != null ) { playerClass.maxDemoteVal = attr.Value; } else { playerClass.maxDemoteVal = ""; } } else if( i == (int)Permissions.Kick ) { if( (attr = temp.Attribute( "max" )) != null ) { playerClass.maxKickVal = attr.Value; } else { playerClass.maxKickVal = ""; } } else if( i == (int)Permissions.Ban ) { if( (attr = temp.Attribute( "max" )) != null ) { playerClass.maxBanVal = attr.Value; } else { playerClass.maxBanVal = ""; } } } } // check for consistency in ban permissions if( !playerClass.Can( Permissions.Ban ) && (playerClass.Can( Permissions.BanAll ) || playerClass.Can( Permissions.BanIP )) ) { Log( "Class \"{0}\" is allowed to BanIP and/or BanAll but not allowed to Ban.\n" + "Assuming that all ban permissions were ment to be off.", LogType.Warning, playerClass.name ); playerClass.permissions[(int)Permissions.BanIP] = false; playerClass.permissions[(int)Permissions.BanAll] = false; } ClassList.AddClass( playerClass ); return true; }