예제 #1
0
        private void PlayerRelatedData()
        {
            Player[] players = GetPlayers();

            foreach (var player in players.Select((value, index) => new { value, index }))
            {
                if (player.value == null)
                {
                    continue;
                }

                ReplayAllHotsPlayer hotsPlayer = new ReplayAllHotsPlayer
                {
                    BattleTagName     = HeroesHelpers.BattleTags.GetBattleTagName(player.value.Name, player.value.BattleTag),
                    BattleNetId       = player.value.BattleNetId,
                    BattleNetRegionId = player.value.BattleNetRegionId,
                    BattleNetSubId    = player.value.BattleNetSubId,
                    BattleNetTId      = player.value.BattleNetTId,
                    AccountLevel      = player.value.AccountLevel,
                    LastSeen          = Replay.Timestamp,
                    LastSeenBefore    = null,
                    Seen = 1,
                };

                long playerId;

                // check if player is already in the database, update if found, otherwise add a new record
                if (ReplaysDb.HotsPlayer.IsExistingRecord(ReplaysContext, hotsPlayer))
                {
                    playerId = ReplaysDb.HotsPlayer.UpdateRecord(ReplaysContext, hotsPlayer);
                }
                else
                {
                    playerId = ReplaysDb.HotsPlayer.CreateRecord(ReplaysContext, hotsPlayer);
                }

                if (player.value.Character == null && Replay.GameMode == Heroes.ReplayParser.GameMode.Custom)
                {
                    player.value.Team      = 4;
                    player.value.Character = "None";

                    ReplayMatchPlayer replayPlayer = new ReplayMatchPlayer
                    {
                        ReplayId          = ReplayId,
                        PlayerId          = playerId,
                        Character         = player.value.Character,
                        CharacterLevel    = player.value.CharacterLevel,
                        Difficulty        = player.value.Difficulty.ToString(),
                        Handicap          = player.value.Handicap,
                        IsAutoSelect      = player.value.IsAutoSelect,
                        IsSilenced        = player.value.IsSilenced,
                        IsWinner          = player.value.IsWinner,
                        MountAndMountTint = player.value.MountAndMountTint,
                        PartyValue        = player.value.PartyValue,
                        PlayerNumber      = -1,
                        SkinAndSkinTint   = player.value.SkinAndSkinTint,
                        Team         = player.value.Team,
                        AccountLevel = player.value.AccountLevel,
                    };

                    ReplaysDb.MatchPlayer.CreateRecord(ReplaysContext, replayPlayer);
                }
                else
                {
                    string character = HeroesIcons.HeroBuilds().GetRealHeroNameFromHeroUnitName(player.value.HeroUnits.FirstOrDefault().Name);
                    if (string.IsNullOrEmpty(character))
                    {
                        throw new TranslationException(RetrieveAllMapAndHeroNames());
                    }

                    ReplayMatchPlayer replayPlayer = new ReplayMatchPlayer
                    {
                        ReplayId          = ReplayId,
                        PlayerId          = playerId,
                        Character         = character,
                        CharacterLevel    = player.value.CharacterLevel,
                        Difficulty        = player.value.Difficulty.ToString(),
                        Handicap          = player.value.Handicap,
                        IsAutoSelect      = player.value.IsAutoSelect,
                        IsSilenced        = player.value.IsSilenced,
                        IsWinner          = player.value.IsWinner,
                        MountAndMountTint = player.value.MountAndMountTint,
                        PartyValue        = player.value.PartyValue,
                        PlayerNumber      = player.index,
                        SkinAndSkinTint   = player.value.SkinAndSkinTint,
                        Team         = player.value.Team,
                        AccountLevel = player.value.AccountLevel,
                    };

                    ReplaysDb.MatchPlayer.CreateRecord(ReplaysContext, replayPlayer);

                    AddScoreResults(player.value.ScoreResult, playerId);
                    AddPlayerTalents(player.value.Talents, playerId, character);
                    AddMatchAwards(player.value.ScoreResult.MatchAwards, playerId);
                }

                AddPlayerHeroes(player.value.PlayerCollectionDictionary, playerId);
            } // end foreach loop for players
        }
예제 #2
0
        private void PlayerRelatedData()
        {
            Player[] players = GetPlayers();

            int playerNum = 0;

            foreach (Player player in players)
            {
                if (player == null)
                {
                    continue;
                }

                ReplayAllHotsPlayer hotsPlayer = new ReplayAllHotsPlayer
                {
                    BattleTagName     = HeroesHelpers.BattleTags.GetBattleTagName(player.Name, player.BattleTag),
                    BattleNetId       = player.BattleNetId,
                    BattleNetRegionId = player.BattleNetRegionId,
                    BattleNetSubId    = player.BattleNetSubId,
                    BattleNetTId      = player.BattleNetTId,
                    AccountLevel      = player.AccountLevel,
                    LastSeen          = Replay.Timestamp,
                    LastSeenBefore    = null,
                    Seen = 1,
                };

                long playerId;

                // check if player is already in the database, update if found, otherwise add a new record
                if (ReplaysDb.HotsPlayer.IsExistingRecord(ReplaysContext, hotsPlayer))
                {
                    playerId = ReplaysDb.HotsPlayer.UpdateRecord(ReplaysContext, hotsPlayer);
                }
                else
                {
                    playerId = ReplaysDb.HotsPlayer.CreateRecord(ReplaysContext, hotsPlayer);
                }

                if (player.Character == null && Replay.GameMode == Heroes.ReplayParser.GameMode.Custom)
                {
                    player.Team      = 4;
                    player.Character = "None";

                    ReplayMatchPlayer replayPlayer = new ReplayMatchPlayer
                    {
                        ReplayId          = ReplayId,
                        PlayerId          = playerId,
                        Character         = player.Character,
                        CharacterLevel    = player.CharacterLevel,
                        Difficulty        = player.Difficulty.ToString(),
                        Handicap          = player.Handicap,
                        IsAutoSelect      = player.IsAutoSelect,
                        IsSilenced        = player.IsSilenced,
                        IsVoiceSilenced   = player.IsVoiceSilence,
                        IsWinner          = player.IsWinner,
                        MountAndMountTint = player.MountAndMountTint,
                        PartyValue        = player.PartyValue,
                        PartySize         = 0,
                        PlayerNumber      = -1,
                        SkinAndSkinTint   = player.SkinAndSkinTint,
                        Team            = player.Team,
                        AccountLevel    = player.AccountLevel,
                        IsBlizzardStaff = player.IsBlizzardStaff,
                        HasActiveBoost  = player.HasActiveBoost,
                    };

                    ReplaysDb.MatchPlayer.CreateRecord(ReplaysContext, replayPlayer);
                }
                else
                {
                    string character = HeroesIcons.HeroesData(Replay.ReplayBuild).HeroNameFromUnitId(player.HeroUnits.FirstOrDefault().Name);
                    if (string.IsNullOrEmpty(character))
                    {
                        throw new TranslationException(RetrieveAllMapAndHeroNames());
                    }

                    ReplayMatchPlayer replayPlayer = new ReplayMatchPlayer
                    {
                        ReplayId          = ReplayId,
                        PlayerId          = playerId,
                        Character         = character,
                        CharacterLevel    = player.CharacterLevel,
                        Difficulty        = player.Difficulty.ToString(),
                        Handicap          = player.Handicap,
                        IsAutoSelect      = player.IsAutoSelect,
                        IsSilenced        = player.IsSilenced,
                        IsVoiceSilenced   = player.IsVoiceSilence,
                        IsWinner          = player.IsWinner,
                        MountAndMountTint = player.MountAndMountTint,
                        PartyValue        = player.PartyValue,
                        PartySize         = 0,
                        PlayerNumber      = playerNum,
                        SkinAndSkinTint   = player.SkinAndSkinTint,
                        Team            = player.Team,
                        AccountLevel    = player.AccountLevel,
                        IsBlizzardStaff = player.IsBlizzardStaff,
                        HasActiveBoost  = player.HasActiveBoost,
                    };

                    string attributeId = HeroesIcons.HeroesData(Replay.ReplayBuild).HeroData(character, false, false, false).AttributeId;
                    if (player.HeroMasteryTiers.ToDictionary(x => x.HeroAttributeId, x => x.TierLevel).TryGetValue(attributeId, out int tierLevel))
                    {
                        if (tierLevel == 2 && replayPlayer.CharacterLevel < 25)
                        {
                            replayPlayer.CharacterLevel = 25;
                        }
                        else if (tierLevel == 3 && replayPlayer.CharacterLevel < 50)
                        {
                            replayPlayer.CharacterLevel = 50;
                        }
                        else if (tierLevel == 4 && replayPlayer.CharacterLevel < 75)
                        {
                            replayPlayer.CharacterLevel = 75;
                        }
                        else if (tierLevel == 5 && replayPlayer.CharacterLevel < 100)
                        {
                            replayPlayer.CharacterLevel = 100;
                        }
                    }

                    ReplaysDb.MatchPlayer.CreateRecord(ReplaysContext, replayPlayer);

                    AddScoreResults(player.ScoreResult, playerId);
                    AddPlayerTalents(player.Talents, playerId, character);
                    AddMatchAwards(player.ScoreResult.MatchAwards, playerId);

                    playerNum++;
                }
            } // end foreach loop for players

            // set the players' party size count
            ReplaysDb.MatchPlayer.SetPlayerPartyCountsForMatch(ReplaysContext, ReplayId);
        }