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)); }
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)); }
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 }); } }
public UserInfo() { AddedScoreBalance = new ScoreBalance(); NotSyncedScoreBalances = new Dictionary <string, ScoreBalance>(); Balance = (Balance)FortInfo.Instance.StartupBalance.Clone(); }