コード例 #1
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task AddExperienceAsync(KaosUser user, int amount)
        {
            var multiplier = await GetExperienceMultiplierAsync(user);

            var newXp = (int)(user.Experience + (amount * multiplier));

            try
            {
                var newRank = await GetKaosRankAsync(user.Rank + 1);

                if (newXp < newRank.RequiredExperience)
                {
                    await SetExperienceAsync(user, newXp);

                    return;
                }
                if (newXp >= newRank.RequiredExperience)
                {
                    await SetExperienceAsync(user, newXp - newRank.RequiredExperience);
                    await RankUpAsync(user);
                    await AddExperienceAsync(user, 0);

                    return;
                }
            }
            catch (EntityNotFoundException)
            {
                return;
            }
        }
コード例 #2
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task <List <KaosTribe> > GetTribesAsync(KaosUser user)
        {
            var tribes = new List <KaosTribe>();
            var sql    = $"SELECT TribeList FROM pvpve_players WHERE SteamId = @SteamId";

            using (IDbConnection connection = new MySqlConnection(ConnectionString))
            {
                var tribeString = await connection.QueryFirstOrDefaultAsync <string>(sql, new { SteamId = user.SteamId });

                if (tribeString == null)
                {
                    return(tribes);
                }

                var tribeIdList = tribeString.Split(',').Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
                foreach (string tribeId in tribeIdList)
                {
                    var sql2  = $"SELECT * FROM pvpve_tribes WHERE ID = @Id";
                    var tribe = await connection.QueryFirstOrDefaultAsync <KaosTribe>(sql2, new { Id = tribeId });

                    if (tribe == null)
                    {
                        Console.WriteLine("Tribe from tribe list could not be found in tribes database");
                        continue;
                    }
                    tribe.Client = this;
                    tribes.Add(tribe);
                }

                return(tribes);
            }
        }
コード例 #3
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task SetTribeRankAsync(KaosUser user, int size)
        {
            try
            {
                var rank = await GetTribeRankFromSize(size);

                var perms = await GetPermissionGroupsAsync(user);

                var ranks = Config.TribeRanks;

                if (perms.Contains(rank.PermissionGroup))
                {
                    return;
                }

                foreach (KaosTribeRank element in ranks)
                {
                    if (perms.Contains(element.PermissionGroup))
                    {
                        await RemovePermissionGroupAsync(user, element.PermissionGroup);
                    }
                }

                await AddPermissionGroupAsync(user, rank.PermissionGroup);
            }
            catch (EntityNotFoundException)
            {
                return;
            }
        }
コード例 #4
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task RemoveExperienceMultiplierAsync(KaosUser user, string type)
        {
            var sql = $"DELETE FROM experienceboosts WHERE SteamId = @SteamId AND Type = @Type";

            using (IDbConnection connection = new MySqlConnection(ConnectionString))
            {
                var query = await connection.QueryAsync <ExperienceBoost>(sql, new { SteamId = user.SteamId, Type = type });
            }
        }
コード例 #5
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task SetTribeListAsync(KaosUser user, string list)
        {
            var sql = $"UPDATE pvpve_players SET TribeList = @TribeList WHERE SteamId = @SteamId";

            using (IDbConnection connection = new MySqlConnection(ConnectionString))
            {
                await connection.ExecuteAsync(sql, new { TribeList = list, SteamId = user.SteamId });
            }
        }
コード例 #6
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        private async Task SetPointsAsync(KaosUser user, int amount)
        {
            var sql = $"UPDATE arkshopplayers SET Points = @Amount WHERE SteamId = @SteamId";

            using (IDbConnection connection = new MySqlConnection(ConnectionString))
            {
                await connection.ExecuteAsync(sql, new { Amount = amount, SteamId = user.SteamId });
            }
        }
コード例 #7
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        private async Task SetExperienceAsync(KaosUser user, int value)
        {
            user.Experience = value;
            var sql = $"UPDATE players SET Experience = @Value WHERE SteamId = @SteamId";

            using (IDbConnection connection = new MySqlConnection(ConnectionString))
            {
                await connection.ExecuteAsync(sql, new { Value = value, SteamId = user.SteamId });
            }
        }
コード例 #8
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
 internal async Task RemoveExperienceAsync(KaosUser user, int amount)
 {
     if (user.Experience < amount)
     {
         await SetExperienceAsync(user, 0);
     }
     else
     {
         await SetExperienceAsync(user, user.Experience - amount);
     }
 }
コード例 #9
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task <int> GetPointsAsync(KaosUser user)
        {
            var sql = $"SELECT Points FROM arkshopplayers WHERE SteamId = @SteamId";

            using (IDbConnection connection = new MySqlConnection(ConnectionString))
            {
                var points = await connection.QueryFirstOrDefaultAsync <int>(sql, new { SteamId = user.SteamId });

                return(points);
            }
        }
コード例 #10
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        private async Task SetPermissionGroupsAsync(KaosUser user, List <string> groups)
        {
            var perms = $"{string.Join(',', groups)},";

            var sql = $"UPDATE players SET PermissionGroups = @Groups WHERE SteamId = @SteamID";

            using (IDbConnection connection = new MySqlConnection(ConnectionString))
            {
                await connection.ExecuteAsync(sql, new { Groups = perms, SteamId = user.SteamId });
            }
        }
コード例 #11
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task <List <string> > GetPermissionGroupsAsync(KaosUser user)
        {
            var sql = $"SELECT PermissionGroups FROM players WHERE SteamId = @SteamID";

            using (IDbConnection connection = new MySqlConnection(ConnectionString))
            {
                var query = await connection.QueryFirstOrDefaultAsync <string>(sql, new { SteamId = user.SteamId });

                var perms = query.Split(',').Where(s => !string.IsNullOrWhiteSpace(s));
                return(perms.ToList());
            }
        }
コード例 #12
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task RemovePermissionGroupAsync(KaosUser user, string group)
        {
            var perms = await GetPermissionGroupsAsync(user);

            if (perms.Contains(group) == false)
            {
                return;
            }

            perms.Remove(group);
            await SetPermissionGroupsAsync(user, perms);
        }
コード例 #13
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
 protected virtual void OnUserRankUp(KaosUser user, KaosPlayerRank rank)
 {
     if (UserRankedUp == null)
     {
         return;
     }
     UserRankedUp(this, new UserRankUpEventArgs()
     {
         Rank = rank,
         User = user
     });
 }
コード例 #14
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task RemovePointsAsync(KaosUser user, int amount)
        {
            var points = await GetPointsAsync(user);

            if (points < amount)
            {
                await SetPointsAsync(user, 0);
            }
            else
            {
                await SetPointsAsync(user, points - amount);
            }
        }
コード例 #15
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task SetRankAsync(KaosUser user, KaosPlayerRank rank)
        {
            var oldRank = await GetKaosRankAsync(user.Rank);

            await RemovePermissionGroupAsync(user, oldRank.PermissionGroup);
            await AddPermissionGroupAsync(user, rank.PermissionGroup);

            var sql = $"UPDATE players SET Rank = @Rank WHERE SteamId = @SteamId";

            using (IDbConnection connection = new MySqlConnection(ConnectionString))
            {
                await connection.ExecuteAsync(sql, new { Rank = rank.Id, SteamId = user.SteamId });
            }
        }
コード例 #16
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task <int> GetMaxTribeSizeAsync(KaosUser user)
        {
            var sizes = new List <int> {
                1
            };
            var tribes = await GetTribesAsync(user);

            foreach (KaosTribe tribe in tribes)
            {
                var size = await tribe.GetTribeSizeAsync();

                sizes.Add(size);
            }
            return(sizes.Max());
        }
コード例 #17
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task AddPermissionGroupAsync(KaosUser user, string group)
        {
            var perms = await GetPermissionGroupsAsync(user);

            if (perms.Contains(group))
            {
                return;
            }
            if (string.IsNullOrWhiteSpace(group))
            {
                return;
            }

            perms.Add(group);
            await SetPermissionGroupsAsync(user, perms);
        }
コード例 #18
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task <KaosPlayerRank> GetRankPermissionGroupAsync(KaosUser user)
        {
            var perms = await GetPermissionGroupsAsync(user);

            var ranks = Config.PlayerRanks;

            ranks.Reverse();
            foreach (KaosPlayerRank rank in ranks)
            {
                if (perms.Contains(rank.PermissionGroup))
                {
                    return(rank);
                }
            }
            throw new EntityNotFoundException("User has no permission group of any rank");
        }
コード例 #19
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task DeRankAsync(KaosUser user)
        {
            try
            {
                var oldRank = await GetKaosRankAsync(user.Rank);

                var newRank = await GetKaosRankAsync(user.Rank - 1);

                await SetRankAsync(user, newRank);
                await RemovePermissionGroupAsync(user, oldRank.PermissionGroup);
                await AddPermissionGroupAsync(user, newRank.PermissionGroup);
            }
            catch (EntityNotFoundException)
            {
                return;
            }
        }
コード例 #20
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task <double> GetExperienceMultiplierAsync(KaosUser user)
        {
            double multiplier = 1;

            var sql = $"SELECT * FROM experienceboosts WHERE SteamId = @SteamId";

            using (IDbConnection connection = new MySqlConnection(ConnectionString))
            {
                var query = await connection.QueryAsync <ExperienceBoost>(sql, new { SteamId = user.SteamId });


                foreach (ExperienceBoost boost in query)
                {
                    multiplier = multiplier * boost.Multiplier;
                }
            }

            return(multiplier);
        }
コード例 #21
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task <List <string> > GetTribeIdsAsync(KaosUser user)
        {
            var Ids = new List <string>();
            var sql = $"SELECT TribeList FROM pvpve_players WHERE SteamId = @SteamId";

            using (IDbConnection connection = new MySqlConnection(ConnectionString))
            {
                var tribeString = await connection.QueryFirstOrDefaultAsync <string>(sql, new { SteamId = user.SteamId });

                if (string.IsNullOrWhiteSpace(tribeString))
                {
                    return(Ids);
                }

                Ids = tribeString.Split(',').Where(s => !string.IsNullOrWhiteSpace(s)).ToList();

                return(Ids);
            }
        }
コード例 #22
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task <KaosPlayerRank> GetRankAsync(KaosUser user)
        {
            try
            {
                var sql = $"SELECT Rank FROM players WHERE SteamId = @SteamId";

                using (IDbConnection connection = new MySqlConnection(ConnectionString))
                {
                    var rankId = await connection.QueryFirstOrDefaultAsync <int>(sql, new { SteamId = user.SteamId });

                    var rank = await GetKaosRankAsync(rankId);

                    return(rank);
                }
            }
            catch (EntityNotFoundException)
            {
                throw new EntityNotFoundException("Rank of user was not found in Config");
            }
        }
コード例 #23
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task TebexRankCheckAsync(KaosUser user)
        {
            try
            {
                var permRank = await GetRankPermissionGroupAsync(user);

                var rank = await GetRankAsync(user);

                if (rank.Id >= permRank.Id)
                {
                    return;
                }

                await SetRankAsync(user, permRank);
                await SetExperienceAsync(user, 0);
            }
            catch (EntityNotFoundException)
            {
                return;
            }
        }
コード例 #24
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task <KaosStats> GetStatsAsync(KaosUser user)
        {
            var sql = $"SELECT * FROM advancedachievements_playerdata WHERE SteamId = @SteamId";

            using (IDbConnection connection = new MySqlConnection(ConnectionString))
            {
                var stats = await connection.QueryFirstOrDefaultAsync <KaosStats>(sql, new { SteamId = user.SteamId });

                if (stats == null)
                {
                    throw new EntityNotFoundException("The specified player has no stat entry");
                }
                double ratio = stats.PlayerKills;
                if (stats.DeathByPlayer != 0)
                {
                    ratio = Math.Round((double)stats.PlayerKills / (double)stats.DeathByPlayer, 2);
                }
                stats.KillDeathRatio = ratio;

                return(stats);
            }
        }
コード例 #25
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task <ulong> GetDiscordIdAsync(KaosUser user)
        {
            var sql = $"SELECT * FROM discordaddonplayers WHERE SteamId = @SteamId";

            using (IDbConnection connection = new MySqlConnection(ConnectionString))
            {
                var discordAddonPlayer = await connection.QueryFirstOrDefaultAsync <DiscordAddonPlayer>(sql, new { SteamId = user.SteamId });

                if (discordAddonPlayer == null)
                {
                    throw new EntityNotFoundException("User with specified Steam ID not found in database");
                }
                if (discordAddonPlayer.discid == null)
                {
                    throw new UserNotVerifiedException("User with specified Steam ID not verified with Discord");
                }
                else
                {
                    return((ulong)discordAddonPlayer.discid);
                }
            }
        }
コード例 #26
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task TribeMergeFixAsync(KaosUser user, string tribeName, string mapName)
        {
            try
            {
                var tribe = await GetTribeAsync(tribeName, mapName);

                var Ids = await GetTribeIdsAsync(user);

                if (Ids.Contains(tribe.Id.ToString()))
                {
                    return;
                }
                else
                {
                    Ids.Add(tribe.Id.ToString());
                    await SetTribeListAsync(user, string.Join(',', Ids));
                }
            }
            catch (EntityNotFoundException)
            {
                return;
            }
        }
コード例 #27
0
ファイル: KaosClient.cs プロジェクト: visualies/KaosControl
        internal async Task AddExperienceMultiplierAsync(KaosUser user, double multiplier, string type, int duration)
        {
            var date   = DateTime.Now.AddMinutes(duration);
            var query  = $"SELECT * FROM experienceboosts WHERE SteamId = @SteamId AND Type = @Type";
            var insert = $"INSERT INTO experienceboosts (SteamId, Multiplier, Type, ExpiryDate) Values (@SteamId, @Multiplier, @Type, @ExpiryDate)";
            var update = $"UPDATE experienceboosts SET ExpiryDate = @ExpiryDate, Multiplier = @Multiplier WHERE SteamId = @SteamId AND Type = @Type";

            using (IDbConnection connection = new MySqlConnection(ConnectionString))
            {
                var boost = await connection.QueryFirstOrDefaultAsync(query, new { SteamId = user.SteamId, Type = type });

                if (boost != null)
                {
                    //If boost type already present, refresh expiry date
                    await connection.ExecuteAsync(update, new { ExpiryDate = date, Multiplier = multiplier, SteamId = user.SteamId, Type = type });

                    return;
                }
                else
                {
                    await connection.ExecuteAsync(insert, new { SteamId = user.SteamId, Multiplier = multiplier, Type = type, ExpiryDate = date });
                }
            }
        }