예제 #1
0
        public void ClaimAchievement(Type levelBaseType, int achivementLevelIndex)
        {
            AchievementInfo achievementinfo      = InfoResolver.Resolve <FortInfo>().Achievement.AchievementTypes[levelBaseType];
            Array           achivementLevelInfos =
                (Array)achievementinfo.GetType().GetProperty("LevelInfoes").GetValue(achievementinfo, new object[0]);

            if (achivementLevelIndex >= achivementLevelInfos.Length)
            {
                throw new Exception("Claim Achievement AchievementLevelInfoes out of index");
            }
            //AchivementLevelInfo achivementLevelInfo = (AchivementLevelInfo)achivementLevelInfos.GetValue(achivementLevelIndex);
            string achievementId = achievementinfo.Id;
            AchievementStoredData achievementStoredData =
                ServiceLocator.Resolve <IStorageService>().ResolveData <AchievementStoredData>();

            if (achievementStoredData == null)
            {
                achievementStoredData = new AchievementStoredData();
            }
            if (achievementStoredData.Achievements.ContainsKey(achievementId) &&
                achievementStoredData.Achievements[achievementId] <= achivementLevelIndex)
            {
                return; //throw new Exception("Achievement Already Claimed");
            }
            achievementStoredData.Achievements[achievementId] = achivementLevelIndex;
            ServiceLocator.Resolve <IStorageService>().UpdateData(achievementStoredData);

            string[] possibleAchievementIds =
                achivementLevelInfos.Cast <AchievementLevelInfo>()
                .Take(achivementLevelIndex + 1)
                .Select(info => info.Id)
                .ToArray();
            AchievementCache achievementCache =
                ServiceLocator.Resolve <IStorageService>().ResolveData <AchievementCache>();

            if (achievementCache == null)
            {
                achievementCache = new AchievementCache();
            }
            foreach (string possibleAchievementId in possibleAchievementIds)
            {
                if (!achievementCache.ServerAchievementIds.ContainsKey(possibleAchievementId))
                {
                    achievementCache.ServerAchievementIds.Add(possibleAchievementId, false);
                }
            }
            ServiceLocator.Resolve <IStorageService>().UpdateData(achievementCache);
            AchievementLevelInfo achievementLevelInfo =
                (AchievementLevelInfo)achivementLevelInfos.GetValue(achivementLevelIndex);
            ScoreBalance scoreBalance = ResolveAchievementScoreBalance(achievementLevelInfo.Id);

            ServiceLocator.Resolve <IUserManagementService>()
            .AddScoreAndBalance(scoreBalance.Score, scoreBalance.Balance);
            ServiceLocator.Resolve <IAnalyticsService>().StatAchievementClaimed(achievementLevelInfo.Id, scoreBalance);
            ServiceLocator.Resolve <IEventAggregatorService>().GetEvent <AchievementClaimedEvent>().Publish(new LevelBaseAchievementClaimedEventArgs((LevelBaseAchievementInfo)achievementinfo, achivementLevelIndex));
        }
예제 #2
0
        public void ClaimAchievement(Type noneLevelBaseType)
        {
            NoneLevelBaseAchievementInfo noneLevelBaseAchievementInfo =
                (NoneLevelBaseAchievementInfo)InfoResolver.Resolve <FortInfo>().Achievement.AchievementTypes[noneLevelBaseType];
            string achievementId = noneLevelBaseAchievementInfo.Id;
            AchievementStoredData achievementStoredData =
                ServiceLocator.Resolve <IStorageService>().ResolveData <AchievementStoredData>();

            if (achievementStoredData == null)
            {
                achievementStoredData = new AchievementStoredData();
            }
            if (achievementStoredData.Achievements.ContainsKey(achievementId))
            {
                return; //throw new Exception("Achievement Already Claimed");
            }
            achievementStoredData.Achievements.Add(achievementId, 0);
            ServiceLocator.Resolve <IStorageService>().UpdateData(achievementStoredData);
            //Add to Server cashe
            AchievementCache achievementCache =
                ServiceLocator.Resolve <IStorageService>().ResolveData <AchievementCache>();

            if (achievementCache == null)
            {
                achievementCache = new AchievementCache();
            }
            if (!achievementCache.ServerAchievementIds.ContainsKey(achievementId))
            {
                achievementCache.ServerAchievementIds.Add(achievementId, false);
            }
            ServiceLocator.Resolve <IStorageService>().UpdateData(achievementCache);
            ScoreBalance scoreBalance = ResolveAchievementScoreBalance(noneLevelBaseAchievementInfo.Id);

            ServiceLocator.Resolve <IUserManagementService>()
            .AddScoreAndBalance(scoreBalance.Score, scoreBalance.Balance);
            ServiceLocator.Resolve <IAnalyticsService>().StatAchievementClaimed(noneLevelBaseAchievementInfo.Id, scoreBalance);
            ServiceLocator.Resolve <IEventAggregatorService>().GetEvent <AchievementClaimedEvent>().Publish(new NoneLeveBaseAchievementClaimedEventArgs(noneLevelBaseAchievementInfo));
        }
예제 #3
0
        public void StatAchievementClaimed(string achievementId, ScoreBalance award)
        {
            if (InfoResolver.Resolve <FortInfo>().Analytic.AnalyticsProvider == null)
            {
                return;
            }

            if (!InfoResolver.Resolve <FortInfo>().Analytic.StatAchievementClaimed)
            {
                return;
            }
            AchievementToken achievementToken = InfoResolver.Resolve <FortInfo>().Achievement.AchievementTokens[achievementId];

            if (achievementToken.NoneLevelBase)
            {
                InfoResolver.Resolve <FortInfo>().Analytic.AnalyticsProvider.StateEvent(achievementToken.AchievementInfo.Name,
                                                                                        achievementToken.AchievementInfo.DisplayName, "AchievementClaimed",
                                                                                        new AchievementClaimedAnalyticStat
                {
                    AchievementId   = achievementId,
                    AchievementName = achievementToken.AchievementInfo.Name,
                    Award           = award
                });
            }
            else
            {
                InfoResolver.Resolve <FortInfo>().Analytic.AnalyticsProvider.StateEvent(achievementToken.AchievementInfo.Name,
                                                                                        achievementToken.AchievementInfo.DisplayName, "AchievementClaimed",
                                                                                        new AchievementClaimedAnalyticStat
                {
                    AchievementId   = achievementId,
                    AchievementName = achievementToken.AchievementInfo.Name,
                    Level           = achievementToken.Index,
                    Award           = award
                });
            }
        }
예제 #4
0
 public UserInfo()
 {
     AddedScoreBalance      = new ScoreBalance();
     NotSyncedScoreBalances = new Dictionary <string, ScoreBalance>();
     Balance = (Balance)FortInfo.Instance.StartupBalance.Clone();
 }