Ejemplo n.º 1
0
        protected override async Task OnExecuteAsync()
        {
            var actor = Context.Actor;

            var target = await Context.Parameters.GetAsync <string>(0);

            var unbans = await m_GlobalBanRepository.UnbanAutoFindAsync(target, BanSearchMode.All);

            var pData = await m_PlayerInfoRepository.FindPlayerAsync(target, UserSearchMode.FindByNameOrId);

            if (unbans.Count == 0)
            {
                if (pData == null)
                {
                    await actor.PrintMessageAsync(m_StringLocalizer["commands:global:playernotfound",
                                                                    new { Input = target }]);

                    return;
                }

                unbans = await m_GlobalBanRepository.UnbanAutoFindAsync(pData.Id.ToString(), BanSearchMode.Id);

                if (unbans.Count == 0)
                {
                    await actor.PrintMessageAsync(m_StringLocalizer["commands:unban:no_bans", new { Target = target }]);

                    return;
                }
            }

            var playerId = unbans.First().PlayerId;

            if (unbans.Any(x => x.PlayerId != playerId))
            {
                await actor.PrintMessageAsync(m_StringLocalizer["commands:unban:unbanned",
                                                                new { Target = target, BanCount = unbans.Count }]);

                return;
            }

            var data = await m_PlayerInfoRepository.FindPlayerAsync(playerId.ToString(), UserSearchMode.FindById);

            var charName   = data?.CharacterName ?? playerId.ToString();
            var translated =
                m_StringLocalizer["commands:unban:unbanned", new { Target = charName, BanCount = unbans.Count }];

            await m_UserManager.BroadcastAsync(translated);

            await actor.PrintMessageAsync(translated);

            if (m_Plugin.Instance != null)
            {
                await m_Plugin.Instance.SendWebhookAsync(WebhookType.Unban, charName, actor.DisplayName, "",
                                                         playerId.ToString(), 0);
            }
        }
Ejemplo n.º 2
0
        public Task HandleEventAsync(object sender, UnturnedPlayerConnectedEvent @event)
        {
            var joinTime = DateTime.Now;

            AsyncHelper.Schedule("PlayerInfoLib_PlayerConnected", async() =>
            {
                var player    = @event.Player;
                var playerId  = player.SteamPlayer.playerID;
                var steamId   = player.SteamId;
                var pfpHash   = await GetProfilePictureHashAsync(steamId);
                var groupName = await GetSteamGroupNameAsync(playerId.group);
                var hwid      = string.Join("", playerId.hwid);
                if (!player.SteamPlayer.transportConnection.TryGetIPv4Address(out var ip))
                {
                    ip = uint.MinValue;
                }
                var questGroupId = player.Player.quests.groupID.m_SteamID;

                var pData  = await m_PlayerInfoRepository.FindPlayerAsync(steamId.ToString(), UserSearchMode.FindById);
                var server = await m_PlayerInfoRepository.GetCurrentServerAsync() ??
                             await m_PlayerInfoRepository.CheckAndRegisterCurrentServerAsync();

                if (pData == null)
                {
                    pData = BuildPlayerData(steamId.m_SteamID, player.SteamPlayer.playerID.characterName,
                                            playerId.playerName, hwid, ip,
                                            pfpHash, questGroupId, playerId.group.m_SteamID, groupName, 0,
                                            joinTime, server);

                    await m_PlayerInfoRepository.AddPlayerDataAsync(pData);
                }
                else
                {
                    pData.ProfilePictureHash = pfpHash;
                    pData.CharacterName      = player.SteamPlayer.playerID.characterName;
                    pData.Hwid            = hwid;
                    pData.Ip              = ip;
                    pData.LastLoginGlobal = joinTime;

                    if (questGroupId != 0)
                    {
                        pData.LastQuestGroupId = questGroupId;
                    }

                    pData.SteamGroup     = playerId.group.m_SteamID;
                    pData.SteamGroupName = groupName;
                    pData.SteamName      = playerId.playerName;
                    pData.Server         = server;
                    pData.ServerId       = server.Id;

                    await m_PlayerInfoRepository.UpdatePlayerDataAsync(pData);
                }
            });
Ejemplo n.º 3
0
        protected override async Task OnExecuteAsync()
        {
            var actor = Context.Actor;

            // Get target player
            if (!Context.Parameters.TryGet <string>(0, out var target))
            {
                if (!(actor is UnturnedUser actorUser))
                {
                    throw new CommandWrongUsageException(Context);
                }

                var bans = await m_GlobalBanRepository.FindBansAsync(actorUser.SteamId.ToString(), BanSearchMode.Id);

                var latestBans = bans.OrderByDescending(k => k.TimeOfBan).Take(4);
                foreach (var ban in latestBans)
                {
                    await actor.PrintMessageAsync(m_StringLocalizer["commands:banhistory:format",
                                                                    new { Ban = ban, Player = actorUser.DisplayName }]);
                }
                return;
            }

            var user = await m_UserManager.FindUserAsync(KnownActorTypes.Player, target, UserSearchMode.FindByNameOrId);

            var pData = await m_PlayerInfoRepository.FindPlayerAsync(target, UserSearchMode.FindByNameOrId);

            if (!(user is UnturnedUser) && pData == null)
            {
                if (!(actor is UnturnedUser actorUser))
                {
                    throw new CommandWrongUsageException(Context);
                }

                var bans = await m_GlobalBanRepository.FindBansAsync(actorUser.SteamId.ToString(), BanSearchMode.Id);

                var latestBans = bans.OrderByDescending(k => k.TimeOfBan).Take(4);
                foreach (var ban in latestBans)
                {
                    await actor.PrintMessageAsync(m_StringLocalizer["commands:banhistory:format",
                                                                    new { Ban = ban, Player = actorUser.DisplayName }]);
                }
                return;
            }

            if (await CheckPermissionAsync("other") != PermissionGrantResult.Grant)
            {
                throw new NotEnoughPermissionException(Context, "other");
            }

            UnturnedUser player = null;

            if (user is UnturnedUser unturnedUser)
            {
                player = unturnedUser;
            }

            var steamId       = player?.SteamId ?? (CSteamID)pData.Id;
            var characterName = player?.DisplayName ?? pData.CharacterName;

            var allBans = await m_GlobalBanRepository.FindBansAsync(steamId.ToString(), BanSearchMode.Id);

            var lastBans = allBans.OrderByDescending(k => k.TimeOfBan).Take(4);

            foreach (var ban in lastBans)
            {
                await actor.PrintMessageAsync(m_StringLocalizer["commands:banhistory:format",
                                                                new { Ban = ban, Player = characterName }]);
            }
        }
Ejemplo n.º 4
0
        protected override async Task OnExecuteAsync()
        {
            var actor = Context.Actor;

            if (!Context.Parameters.TryGet <string>(0, out var target))
            {
                var totalBans = await m_DbContext.PlayerBans.CountAsync();

                var inEffect = await m_DbContext.PlayerBans.Where(k => !k.IsUnbanned).ToListAsync();

                var totalBansInEffect =
                    inEffect.Count(k => DateTime.Now.Subtract(k.TimeOfBan).TotalSeconds <= k.Duration);

                await actor.PrintMessageAsync(m_StringLocalizer["commands:bans:global",
                                                                new { Total = totalBans, InEffect = totalBansInEffect }]);

                return;
            }

            var user = await m_UserManager.FindUserAsync(KnownActorTypes.Player, target, UserSearchMode.FindByNameOrId);

            var pData = await m_PlayerInfoRepository.FindPlayerAsync(target, UserSearchMode.FindByNameOrId);

            if (user is UnturnedUser || pData != null)
            {
                var player = user as UnturnedUser;

                var steamId       = player?.SteamId ?? (CSteamID)pData.Id;
                var characterName = player?.DisplayName ?? pData.CharacterName;
                var hwid          = player != null?string.Join("", player.Player.SteamPlayer.playerID.hwid) : pData.Hwid;

                uint ip;
                if (player != null)
                {
                    SteamGameServerNetworking.GetP2PSessionState(player.SteamId, out var sessionState);
                    ip = sessionState.m_nRemoteIP == 0 ? 0 : sessionState.m_nRemoteIP;
                }
                else
                {
                    ip = (uint)pData.Ip;
                }

                var idBans = await m_GlobalBanRepository.FindBansInEffectAsync(steamId.ToString(), BanSearchMode.Id);

                var ipBans = await m_GlobalBanRepository.FindBansInEffectAsync(ip.ToString(), BanSearchMode.Ip);

                var hwidBans = await m_GlobalBanRepository.FindBansInEffectAsync(hwid, BanSearchMode.Hwid);

                var bansInEffect = idBans.Concat(ipBans).Concat(hwidBans).DistinctBy(k => k.Id).ToList();

                var lastBan = bansInEffect.LastOrDefault();

                idBans = await m_GlobalBanRepository.FindBansAsync(steamId.ToString(), BanSearchMode.Id);

                ipBans = await m_GlobalBanRepository.FindBansAsync(ip.ToString(), BanSearchMode.Ip);

                hwidBans = await m_GlobalBanRepository.FindBansAsync(hwid, BanSearchMode.Hwid);

                var bans = idBans.Concat(ipBans).Concat(hwidBans).DistinctBy(k => k.Id).Count();

                await actor.PrintMessageAsync(m_StringLocalizer["commands:bans:count",
                                                                new { Player = characterName, Total = bans, InEffect = bansInEffect.Count }]);

                if (lastBan != null)
                {
                    await actor.PrintMessageAsync(m_StringLocalizer["commands:bans:last_ban", new { Ban = lastBan }]);
                }
            }
        }
Ejemplo n.º 5
0
        protected override async Task OnExecuteAsync()
        {
            var actor = Context.Actor;

            // Parse arguments
            var target = await Context.Parameters.GetAsync <string>(0);

            var reason = m_StringLocalizer["commands:global:no_reason_specified"].Value;

            if (Context.Parameters.Count >= 2)
            {
                reason = Context.Parameters.GetArgumentLine(1);
            }

            // Try to find user to ban
            var user = await m_UserManager.FindUserAsync(KnownActorTypes.Player, target, UserSearchMode.FindByNameOrId);

            var pData = await m_PlayerInfoRepository.FindPlayerAsync(target, UserSearchMode.FindByNameOrId);

            var isId = ulong.TryParse(target, out var pId) && pId >= 76561197960265728 && pId <= 103582791429521408;

            if (!(user is UnturnedUser) && pData == null && !isId)
            {
                await actor.PrintMessageAsync(m_StringLocalizer["commands:global:playernotfound",
                                                                new { Input = target }]);

                return;
            }

            var      adminId = ulong.TryParse(actor.Id, out var id) ? id : 0ul;
            CSteamID steamId;
            string   characterName;
            string   hwid;
            uint     ip;

            if (user is UnturnedUser player)
            {
                steamId       = player.SteamId;
                characterName = player.DisplayName;
                SteamGameServerNetworking.GetP2PSessionState(steamId, out var sessionState);
                ip   = sessionState.m_nRemoteIP == 0 ? 0 : sessionState.m_nRemoteIP;
                hwid = string.Join("", player.Player.SteamPlayer.playerID.hwid);

                await UniTask.SwitchToMainThread();

                player.Player.Player.life.askDamage(101, Vector3.up * 101f, EDeathCause.KILL, ELimb.SKULL, (CSteamID)adminId,
                                                    out _);
                await UniTask.SwitchToThreadPool();
            }
            else if (pData != null)
            {
                steamId       = (CSteamID)pData.Id;
                characterName = pData.CharacterName;
                ip            = (uint)pData.Ip;
                hwid          = pData.Hwid;
            }
            else
            {
                steamId       = (CSteamID)pId;
                characterName = pId.ToString();
                ip            = 0;
                hwid          = "";
            }

            var server = await m_PlayerInfoRepository.GetCurrentServerAsync();

            await m_GlobalBanRepository.BanPlayerAsync(server?.Id ?? 0, steamId.m_SteamID, ip, hwid, uint.MaxValue,
                                                       adminId, reason);

            if (user is UnturnedUser)
            {
                await UniTask.SwitchToMainThread();

                Provider.ban(steamId, reason, uint.MaxValue);
                await UniTask.SwitchToThreadPool();
            }

            var translated = m_StringLocalizer["commands:ban:banned", new { Player = characterName, Reason = reason }];
            await m_UserManager.BroadcastAsync(translated);

            await actor.PrintMessageAsync(translated);

            if (!(actor is ConsoleActor))
            {
                m_Logger.LogInformation(translated);
            }

            if (m_Plugin.Instance != null)
            {
                await m_Plugin.Instance.SendWebhookAsync(WebhookType.Ban, characterName, actor.DisplayName, reason,
                                                         steamId.ToString(), uint.MaxValue);
            }
        }