public string Execute( [CustomSuggestions(nameof(GetClanTagSuggestions))] string clanTag) { var faction = FactionSystem.ServerGetFactionByClanTag(clanTag); var bannedCount = 0; foreach (var playerName in FactionSystem.ServerGetFactionMemberNames(faction)) { var character = Server.Characters.GetPlayerCharacter(playerName); if (character == this.ExecutionContextCurrentCharacter) { continue; } if (ServerPlayerAccessSystem.SetBlackListEntry(playerName, isEnabled: true)) { bannedCount++; } } if (bannedCount == 0) { return($"No need to add anyone from the faction [{clanTag}] to the blacklist (already added)"); } return($"{bannedCount} player(s) of the faction [{clanTag}] were added to the blacklist"); }
public override IEnumerable <ICharacter> ServerEnumerateMessageRecepients(ICharacter forPlayer) { var members = FactionSystem.ServerGetFactionMemberNames(this.Faction); foreach (var member in members) { var character = CharactersServerService.GetPlayerCharacter(member); if (character is not null) { yield return(character); } } }
public IEnumerable <string> ServerGetLandOwners() { var area = (ILogicObject)this.GameObject; var areasGroup = LandClaimSystem.SharedGetLandClaimAreasGroup(area); if (areasGroup is null) { // perhaps a new area return(this.DirectLandOwners); } var faction = LandClaimAreasGroup.GetPublicState(areasGroup).ServerFaction; return(faction is null ? this.DirectLandOwners : FactionSystem.ServerGetFactionMemberNames(faction)); }
public string Execute( [CustomSuggestions(nameof(GetClanTagSuggestions))] string clanTag, int minutes = 30, string kickMessageInQuotes = null) { var faction = FactionSystem.ServerGetFactionByClanTag(clanTag); if (minutes < 1 || minutes > 10000) { throw new Exception("Minutes must be in 1-10000 range"); } var kickedCount = 0; foreach (var playerName in FactionSystem.ServerGetFactionMemberNames(faction)) { var character = Server.Characters.GetPlayerCharacter(playerName); if (character == this.ExecutionContextCurrentCharacter) { continue; } ServerPlayerAccessSystem.Kick(character, minutes, kickMessageInQuotes); kickedCount++; } if (kickedCount == 0) { return($"Cannot kick anyone from the faction [{clanTag}]"); } var result = $"{kickedCount} player(s) of the faction [{clanTag}] successfully kicked from the server for {minutes} minutes"; if (!string.IsNullOrEmpty(kickMessageInQuotes)) { result += " with a following message:" + Environment.NewLine + kickMessageInQuotes; } return(result); }
public static IReadOnlyList <string> SharedGetOwners(IWorldObject worldObject, out bool isFactionAccess) { isFactionAccess = false; switch (worldObject) { case IStaticWorldObject staticWorldObject: { var areasGroup = LandClaimSystem.SharedGetLandClaimAreasGroup(staticWorldObject); if (areasGroup is null || LandClaimAreasGroup.GetPublicState(areasGroup).FactionClanTag is not { } clanTag || string.IsNullOrEmpty(clanTag)) { break; } // the static object is inside the faction-owned land claim, var faction = FactionSystem.ServerGetFactionByClanTag(clanTag); return(FactionSystem.ServerGetFactionMemberNames(faction).ToList()); } case IDynamicWorldObject when worldObject.ProtoGameObject is IProtoVehicle: { var clanTag = worldObject.GetPublicState <VehiclePublicState>().ClanTag; if (string.IsNullOrEmpty(clanTag)) { break; } // the vehicle is owned by faction var faction = FactionSystem.ServerGetFactionByClanTag(clanTag); return(FactionSystem.ServerGetFactionMemberNames(faction).ToList()); } } return(SharedGetDirectOwners(worldObject)); }