private static void ServerFactionMemberAccessRightsChangedHandler( ILogicObject faction, string characterName, FactionMemberAccessRights accessRights) { ServerRefreshFactionClaimAccess(faction); }
public FactionLogEntryRoleAccessRightsChanged( ICharacter byOfficer, FactionOfficerRoleTitle roleTitle, FactionMemberAccessRights newAccessRights) : base(byOfficer) { this.RoleTitle = roleTitle; this.NewAccessRights = newAccessRights; }
private void ServerRemote_LeaderSetRoleAccessRights( FactionMemberRole role, FactionMemberAccessRights accessRights) { if (role == FactionMemberRole.Member || role == FactionMemberRole.Leader || !SharedIsValidRole(role)) { throw new Exception("Invalid role: " + role); } var officer = ServerRemoteContext.Character; ServerValidateHasAccessRights(officer, FactionMemberAccessRights.Leader, out var faction); ServerValidateRoleAccessRights(accessRights); var currentAccessRights = SharedGetRoleAccessRights(faction, role); if (currentAccessRights == accessRights) { // no change required return; } var accessRightsBinding = Faction.GetPrivateState(faction).AccessRightsBinding; accessRightsBinding[role] = accessRights; Logger.Important($"Changed faction role access rights - {role}: {accessRights}"); var roleTitle = ServerGetOfficerRoleTitle(faction, role) ?? FactionOfficerRoleTitle.Deputy; // the null should be impossible but still ServerAddLogEntry(faction, new FactionLogEntryRoleAccessRightsChanged(byOfficer: officer, roleTitle, accessRights)); // process all faction members of this role foreach (var entry in ServerGetFactionMembersReadOnly(faction)) { if (entry.Role == role) { ServerOnFactionMemberAccessRightsChanged(faction, entry.Name, SharedGetRoleAccessRights(faction, role)); } } }
private static bool SharedHasFactionAccessRights( ICharacter who, FactionMemberAccessRights accessRights, string clanTag) { Api.Assert(!string.IsNullOrEmpty(clanTag), "Clan tag is null or empty"); if (clanTag != FactionSystem.SharedGetClanTag(who)) { // player has no faction or a member of a different faction return(false); } return(FactionSystem.SharedHasAccessRight(who, accessRights)); }
private static void ServerValidateRoleAccessRights(FactionMemberAccessRights originalAccessRights) { var allEnumValues = EnumExtensions.GetValues <FactionMemberAccessRights>(); var t = originalAccessRights; foreach (var value in allEnumValues) { if (value != FactionMemberAccessRights.Leader) { t &= ~value; } } if (t != FactionMemberAccessRights.None) { // there are some unknown flags defined in the provided access rights throw new Exception("Incorrect role access rights: " + originalAccessRights); } }
public ViewModelWorldObjectFactionAccessEditorControl(IWorldObject worldObject) { this.worldObject = worldObject; this.accessRight = WorldObjectAccessModeSystem.SharedGetFactionAccessRightRequirementForObject(worldObject); if (worldObject.ProtoGameObject is not IProtoObjectWithAccessMode protoObjectWithAccessMode) { throw new Exception("This world object doesn't have an access mode"); } this.isClosedModeAvailable = protoObjectWithAccessMode.IsClosedAccessModeAvailable; this.isEveryoneModeAvailable = protoObjectWithAccessMode.IsEveryoneAccessModeAvailable; this.privateState = worldObject.GetPrivateState <IObjectWithAccessModePrivateState>(); this.privateState.ClientSubscribe(_ => _.FactionAccessMode, _ => this.RefreshCheckboxes(), this); FactionSystem.ClientCurrentFactionAccessRightsChanged += this.CurrentFactionAccessRightsChanged; this.RecreateViewModelAccessModes(); }
private static void ServerOnFactionMemberAccessRightsChanged( ILogicObject faction, string memberName, FactionMemberAccessRights accessRights) { var member = Server.Characters.GetPlayerCharacter(memberName); if (member is null || !member.ServerIsOnline) { return; } // ensure the server will re-sync the faction-related data // after changing the character's access rights ServerPlayerOnlineStateChangedHandler(member, isOnline: false); ServerPlayerOnlineStateChangedHandler(member, isOnline: true); Api.SafeInvoke( () => ServerFactionMemberAccessRightsChanged?.Invoke(faction, memberName, accessRights)); }
public static void ClientLeaderSetMemberRoleAccessRight( FactionMemberRole role, FactionMemberAccessRights accessRights, bool isAssigned) { ClientValidateHasAccessRights(FactionMemberAccessRights.Leader); var currentAccessRights = SharedGetRoleAccessRights(ClientCurrentFaction, role); FactionMemberAccessRights newAccessRights; if (isAssigned) { if (currentAccessRights.HasFlag(accessRights)) { return; } newAccessRights = currentAccessRights | accessRights; } else // remove { if (!currentAccessRights.HasFlag(accessRights)) { return; } newAccessRights = currentAccessRights & ~accessRights; } Instance.CallServer( _ => _.ServerRemote_LeaderSetRoleAccessRights(role, newAccessRights)); Logger.Important(string.Format("Changed member role access right: {0} {1} {2}{3}New rights: {4}", role, isAssigned ? "assigned" : "removed", accessRights, Environment.NewLine, newAccessRights)); }