コード例 #1
0
        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");
        }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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));
        }