public void CheckAchievemtCondition(AchieveData attackData, AchieveData targetData, KillType killtype = KillType.Normal) { EAchievementType conditionResult = this.GetConditionResult(attackData, targetData, killtype); string promptId = this.GetPromptId(attackData, targetData, killtype, conditionResult); if (conditionResult != EAchievementType.None) { if (LevelManager.Instance.IsPvpBattleType) { AchieveHelper.BrocastMsg(promptId, this.HeroName, targetData.HeroName, attackData._heroTeam, targetData._heroTeam, this.SummerName, targetData.SummerName); } else { AchieveHelper.BrocastMsg(promptId, this.HeroName, targetData.HeroName, attackData._heroTeam, targetData._heroTeam, string.Empty, string.Empty); } } else { Debug.LogError(string.Concat(new object[] { "Achievement is none, 连杀:", this.ContinusKillWithTime, " 累积杀:", this.ContinusKillNoTime })); } if ((targetData._heroTeam == TeamType.LM && MapManager.Instance.IsHeroAllDead(TeamType.LM) && GameManager.Instance.Spawner.GetPlayerNum(TeamType.LM) >= AchieveManager.TuanmieTotalCount) || (targetData._heroTeam == TeamType.BL && MapManager.Instance.IsHeroAllDead(TeamType.BL) && GameManager.Instance.Spawner.GetPlayerNum(TeamType.BL) >= AchieveManager.TuanmieTotalCount)) { promptId = this.GetPromptId(attackData, targetData, killtype, EAchievementType.TuanMie); if (LevelManager.Instance.IsPvpBattleType) { AchieveHelper.BrocastMsg(promptId, this.HeroName, targetData.HeroName, attackData._heroTeam, targetData._heroTeam, this.SummerName, targetData.SummerName); } else { AchieveHelper.BrocastMsg(promptId, this.HeroName, targetData.HeroName, attackData._heroTeam, targetData._heroTeam, string.Empty, string.Empty); } } }
/// <summary> /// Instantiate an achievement object. /// </summary> /// <param name="userId">The user identifier whom to match this achievement with.</param> /// <param name="id">The achievement identifier.</param> /// <param name="title">The achievement title.</param> /// <param name="description">The description or flavour text of the achievement.</param> /// <param name="score">The score granted by the achievement.</param> /// <param name="goal">The goal the achievement counter has to reach to be achieved. If it's set to less than 1, the achievement will be treated as triggerable.</param> /// <param name="counter">The current progress of the achievement.</param> /// <param name="isCompleted">Whether or not the achievement has been completed.</param> private UserAchievement(IAchievementProgressionDAL achievementProgressionDAL, string userId, string id, string title, string description, int score, int goal, int counter = 0, bool isCompleted = false) { this._achievementProgressionDAL = achievementProgressionDAL; this.UserId = userId; this.Id = id; this.Title = title; this.Description = description; this.Score = score; if (goal < 1) { this.AchievementType = EAchievementType.Trigger; } else { this.Goal = goal; this.AchievementType = EAchievementType.Score; } this.Counter = counter; this.IsCompleted = isCompleted; }
private string GetPromptId(AchieveData attackData, AchieveData targetData, KillType killtype = KillType.Normal, EAchievementType arcType = EAchievementType.None) { Units player = PlayerControlMgr.Instance.GetPlayer(); if (null == player) { return(string.Empty); } bool flag = targetData._heroTeam != (TeamType)player.teamType; string result = string.Empty; if (arcType == EAchievementType.TuanMie) { result = ((!flag) ? "1100" : "1099"); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1103" : "1102") : "1101"); } return(result); } if (arcType == EAchievementType.KilledByMonster) { result = ((!flag) ? "1089" : "1088"); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1092" : "1091") : "1090"); } return(result); } if (killtype == KillType.StopKill) { result = ((!flag) ? "1094" : "1093"); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1097" : "1096") : "1095"); } return(result); } if (killtype == KillType.FirstBoold) { result = ((!flag) ? "1017" : "1016"); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1020" : "1019") : "1018"); } return(result); } if (!LevelManager.Instance.IsPvpBattleType && GameManager.Instance.AchieveManager.AllHeroDeathNum == 1 && this.ContinusKillNoTime == 1) { result = ((!flag) ? "1017" : "1016"); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1020" : "1019") : "1018"); } } else if (attackData.ContinusKillWithTime >= AchieveManager.DoubleKillCount && attackData.ContinusKillWithTime <= AchieveManager.HexaKillCount) { if (attackData.ContinusKillWithTime == AchieveManager.DoubleKillCount) { result = ((!flag) ? "1026" : "1021"); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1041" : "1036") : "1031"); } } else if (attackData.ContinusKillWithTime == AchieveManager.TripleKillCount) { result = ((!flag) ? "1027" : "1022"); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1042" : "1037") : "1032"); } } else if (attackData.ContinusKillWithTime == AchieveManager.FourthKillCount) { result = ((!flag) ? "1028" : "1023"); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1043" : "1038") : "1033"); } } else if (attackData.ContinusKillWithTime == AchieveManager.FifthKillCount) { result = ((!flag) ? "1029" : "1024"); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1044" : "1039") : "1034"); } } else if (attackData.ContinusKillWithTime == AchieveManager.HexaKillCount) { result = ((!flag) ? "1030" : "1025"); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1045" : "1040") : "1035"); } } } else if (targetData.ContinusKillNoTime >= AchieveManager.ZhongjieCount) { result = ((!flag) ? "1094" : "1093"); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1097" : "1096") : "1095"); } } else if (attackData.ContinusKillNoTime >= AchieveManager.DashaKillCount) { if (attackData.ContinusKillNoTime < AchieveManager.BaozouKillCount) { result = ((!flag) ? "1052" : ((!attackData.HeroName.Equals(player.npc_id)) ? "1046" : "1058")); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1076" : "1070") : "1064"); } } else if (attackData.ContinusKillNoTime < AchieveManager.WurenKillCount) { result = ((!flag) ? "1053" : ((!attackData.HeroName.Equals(player.npc_id)) ? "1047" : "1059")); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1077" : "1071") : "1065"); } } else if (attackData.ContinusKillNoTime < AchieveManager.ZhuzaiKillCount) { result = ((!flag) ? "1054" : ((!attackData.HeroName.Equals(player.npc_id)) ? "1048" : "1060")); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1078" : "1072") : "1066"); } } else if (attackData.ContinusKillNoTime < AchieveManager.GodlikeKillCount) { result = ((!flag) ? "1055" : ((!attackData.HeroName.Equals(player.npc_id)) ? "1049" : "1061")); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1079" : "1073") : "1067"); } } else if (attackData.ContinusKillNoTime < AchieveManager.LegendaryKillCount) { result = ((!flag) ? "1056" : ((!attackData.HeroName.Equals(player.npc_id)) ? "1050" : "1062")); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1080" : "1074") : "1068"); } } else { result = ((!flag) ? "1057" : ((!attackData.HeroName.Equals(player.npc_id)) ? "1051" : "1063")); if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1081" : "1075") : "1069"); } } } else if (attackData.ContinusKillNoTime < AchieveManager.DashaKillCount) { result = ((!flag) ? ((!targetData.HeroName.Equals(player.npc_id)) ? "1083" : "1098") : ((!attackData.HeroName.Equals(player.npc_id)) ? "1084" : "1082")); if (targetData.unittype.Equals("Building") || targetData.unittype.Equals("Monster")) { result = ((!flag) ? "1089" : "1088"); } if (Singleton <PvpManager> .Instance.IsObserver) { result = ((targetData._heroTeam != TeamType.BL) ? ((targetData._heroTeam != TeamType.LM) ? "1087" : "1086") : "1085"); } } targetData.UpdateKillingHeroData(targetData); return(result); }
private EAchievementType GetConditionResult(AchieveData attackData, AchieveData targetData, KillType killtype = KillType.Normal) { if (LevelManager.CurBattleType == 6) { return(EAchievementType.NormalKill); } EAchievementType result = EAchievementType.None; if (killtype == KillType.StopKill) { return(EAchievementType.ZhongJie); } if (killtype == KillType.FirstBoold) { return(EAchievementType.FirstBlood); } if (!LevelManager.Instance.IsPvpBattleType && GameManager.Instance.AchieveManager.AllHeroDeathNum == 1 && this.ContinusKillNoTime == 1) { result = EAchievementType.FirstBlood; } else if (attackData.ContinusKillWithTime >= AchieveManager.DoubleKillCount && attackData.ContinusKillWithTime <= AchieveManager.HexaKillCount) { if (attackData.ContinusKillWithTime == AchieveManager.DoubleKillCount) { result = EAchievementType.DoubleKill; } else if (attackData.ContinusKillWithTime == AchieveManager.TripleKillCount) { result = EAchievementType.TribleKill; } else if (attackData.ContinusKillWithTime == AchieveManager.FourthKillCount) { result = EAchievementType.FourKill; } else if (attackData.ContinusKillWithTime == AchieveManager.FifthKillCount) { result = EAchievementType.FiveKill; } else if (attackData.ContinusKillWithTime == AchieveManager.HexaKillCount) { result = EAchievementType.HexaKill; } } else if (targetData.ContinusKillNoTime >= AchieveManager.ZhongjieCount) { result = EAchievementType.ZhongJie; } else if (attackData.ContinusKillNoTime >= AchieveManager.DashaKillCount) { if (attackData.ContinusKillNoTime < AchieveManager.BaozouKillCount) { result = EAchievementType.DaShaTeSha; } else if (attackData.ContinusKillNoTime < AchieveManager.WurenKillCount) { result = EAchievementType.BaoZou; } else if (attackData.ContinusKillNoTime < AchieveManager.ZhuzaiKillCount) { result = EAchievementType.WuRenNengDang; } else if (attackData.ContinusKillNoTime < AchieveManager.GodlikeKillCount) { result = EAchievementType.ZhuZaiBiSai; } else if (attackData.ContinusKillNoTime < AchieveManager.LegendaryKillCount) { result = EAchievementType.GodLike; } else { result = EAchievementType.Legendary; } } else if (attackData.ContinusKillNoTime < AchieveManager.DashaKillCount) { result = EAchievementType.NormalKill; } targetData.UpdateKillingHeroData(targetData); return(result); }
/// <summary> /// Gets the type of the achievement. /// </summary> /// <returns>The achievement by type.</returns> /// <param name="achDatabase">Ach database.</param> /// <param name="achievementType">Achievement type.</param> /// <created>Stef</created> private Achievement GetAchievementByType(List<Achievement> achDatabase, EAchievementType achievementType) { foreach (var item in achDatabase) { if (item.achievementType == achievementType) { return item; } } return null; }
/// <summary> /// Checks if type exist. /// </summary> /// <returns><c>true</c>, if if type exist was checked, <c>false</c> otherwise.</returns> /// <param name="achievementList">Achievement list.</param> /// <param name="type">Type.</param> /// <created>Stef</created> private bool CheckIfTypeExist(List<Achievement> achievementList, EAchievementType type) { foreach (var item in achievementList) { if (item.achievementType == type) { return true; } } return false; }
/// <summary> /// Increments the countToUnlock /// </summary> /// <param name="type">Type.</param> /// <created>Stef</created> public void RegisterEvent(EAchievementType type, int score) { List<Achievement> achievementList = achievementDatabase.SelectAll<Achievement>(); Achievement achDatabase = null; if (!CheckIfTypeExist(achievementList, type)) { return; } switch (type) { case EAchievementType.Score1000: achDatabase = GetAchievementByType(achievementList, EAchievementType.Score1000); achDatabase.count += score; achievementDatabase.Update(achDatabase); break; case EAchievementType.Start: achDatabase = GetAchievementByType(achievementList, EAchievementType.Start); achDatabase.count++; achievementDatabase.Update(achDatabase); break; case EAchievementType.Score10000: achDatabase = GetAchievementByType(achievementList, EAchievementType.Score10000); achDatabase.count += score; achievementDatabase.Update(achDatabase); break; case EAchievementType.FirstLevelCompleted: achDatabase = GetAchievementByType(achievementList, EAchievementType.FirstLevelCompleted); achDatabase.count++; achievementDatabase.Update(achDatabase); break; case EAchievementType.StartPascal: achDatabase = GetAchievementByType(achievementList, EAchievementType.StartPascal); achDatabase.count++; achievementDatabase.Update(achDatabase); break; case EAchievementType.StartPython: achDatabase = GetAchievementByType(achievementList, EAchievementType.StartPython); achDatabase.count++; achievementDatabase.Update(achDatabase); break; } ParseAchievements(type, achDatabase); }
/// <summary> /// Checks if the achievement has to be thrown /// </summary> /// <param name="type">Type.</param> /// <param name="achDatabase">Ach database.</param> /// <created>Stef</created> public void ParseAchievements(EAchievementType type, Achievement achDatabase) { if (type == EAchievementType.Score1000) { if (achDatabase.count >= achDatabase.countToUnlock) RaiseAchievementUnlocked(achDatabase); } else if (type == EAchievementType.Score10000) { if (achDatabase.count >= achDatabase.countToUnlock) RaiseAchievementUnlocked(achDatabase); } else if (achDatabase.count == achDatabase.countToUnlock) { RaiseAchievementUnlocked(achDatabase); } }