public bool HasPermissionToCreateProjectile(TSPlayer ply) { if (ply == null) return false; if (ply.HasPermission(Permissions.canusebannedprojectiles)) return true; PermissionHookResult hookResult = PlayerHooks.OnPlayerProjbanPermission(ply, this); if (hookResult != PermissionHookResult.Unhandled) return hookResult == PermissionHookResult.Granted; var cur = ply.Group; var traversed = new List<Group>(); while (cur != null) { if (AllowedGroups.Contains(cur.Name)) { return true; } if (traversed.Contains(cur)) { throw new InvalidOperationException("Infinite group parenting ({0})".SFormat(cur.Name)); } traversed.Add(cur); cur = cur.Parent; } return false; // could add in the other permissions in this class instead of a giant if switch. }
/// <summary> /// Initializes a new instance of the PlayerTilebanPermissionEventArgs class. /// </summary> /// <param name="player">The player who fired the event.</param> /// <param name="checkedTile">The banned tile being checked.</param> public PlayerTilebanPermissionEventArgs(TSPlayer player, TileBan checkedTile) { Player = player; BannedTile = checkedTile; Result = PermissionHookResult.Unhandled; }
/// <summary> /// Initializes a new instance of the PlayerProjbanPermissionEventArgs class. /// </summary> /// <param name="player">The player who fired the event.</param> /// <param name="checkedProjectile">The banned projectile being checked.</param> public PlayerProjbanPermissionEventArgs(TSPlayer player, ProjectileBan checkedProjectile) { Player = player; BannedProjectile = checkedProjectile; Result = PermissionHookResult.Unhandled; }
/// <summary> /// Initializes a new instance of the PlayerItembanPermissionEventArgs class. /// </summary> /// <param name="player">The player who fired the event.</param> /// <param name="bannedItem">The banned item being checked.</param> public PlayerItembanPermissionEventArgs(TSPlayer player, ItemBan bannedItem) { Player = player; BannedItem = bannedItem; Result = PermissionHookResult.Unhandled; }
/// <summary> /// Initializes a new instance of the PlayerPermissionEventArgs class. /// </summary> /// <param name="player">The player who fired the event.</param> /// <param name="permission">The permission being checked.</param> public PlayerPermissionEventArgs(TSPlayer player, string permission) { Player = player; Permission = permission; Result = PermissionHookResult.Unhandled; }