Example #1
0
		/// <summary>
		/// Checks if the player can ever complete the given achievement.
		/// </summary>
		/// <param name="achievementCriteriaEntry"></param>
		/// <returns></returns>
		private bool IsAchieveable(AchievementCriteriaEntry achievementCriteriaEntry)
		{
			// Skip achievements we have completed
			if (HasCompleted(achievementCriteriaEntry.AchievementEntryId))
				return false;

			// Skip achievements that have different faction requirement then the player faction.
			if (achievementCriteriaEntry.AchievementEntry.FactionFlag == (int)AchievementFactionGroup.Alliance && Owner.FactionGroup != FactionGroup.Alliance)
				return false;
			if (achievementCriteriaEntry.AchievementEntry.FactionFlag == (int)AchievementFactionGroup.Horde && Owner.FactionGroup != FactionGroup.Horde)
				return false;

			// Skip achievements that require to be groupfree and 
			if (achievementCriteriaEntry.GroupFlag.HasFlag(AchievementCriteriaGroupFlags.AchievementCriteriaGroupNotInGroup) && Owner.IsInGroup)
				return false;

			return true;
		}
Example #2
0
		/// <summary>
		/// Sets the progress with a given Criteria entry.
		/// </summary>
		/// <param name="entry"></param>
		/// <param name="newValue"></param>
		/// <param name="progressType"></param>
		internal void SetCriteriaProgress(AchievementCriteriaEntry entry, uint newValue, ProgressType progressType = ProgressType.ProgressSet)
		{
			// not create record for 0 counter
			if (newValue == 0)
				return;

			var achievementProgressRecord = GetOrCreateProgressRecord(entry.AchievementCriteriaId);
			uint updateValue;

			switch (progressType)
			{
				case ProgressType.ProgressAccumulate:
					updateValue = newValue + achievementProgressRecord.Counter;
					break;
				case ProgressType.ProgressHighest:
					updateValue = achievementProgressRecord.Counter < newValue ? newValue : achievementProgressRecord.Counter;
					break;
				default:
					updateValue = newValue;
					break;
			}

			if (updateValue == achievementProgressRecord.Counter)
				return;

			achievementProgressRecord.Counter = updateValue;


			if (entry.TimeLimit > 0)
			{
				DateTime now = DateTime.Now;
				if (achievementProgressRecord.StartOrUpdateTime.AddSeconds(entry.TimeLimit) < now)
				{
					achievementProgressRecord.Counter = 1;
				}
				achievementProgressRecord.StartOrUpdateTime = now;
			}

		    AchievementHandler.SendAchievmentStatus(achievementProgressRecord, Owner);



			if (IsAchievementCompletable(entry.AchievementEntry))
			{
				EarnAchievement(entry.AchievementEntry);
			}
		}
Example #3
0
		/// <summary>
		/// Checks if the given criteria is completable
		/// </summary>
		/// <param name="achievementCriteriaEntry"></param>
		/// <returns></returns>
		public bool IsCriteriaCompletable(AchievementCriteriaEntry achievementCriteriaEntry)
		{
			AchievementEntry achievementEntry = achievementCriteriaEntry.AchievementEntry;

			// Counter achievement were never meant to be completed.
			if (achievementEntry.Flags.HasFlag(AchievementFlags.Counter))
				return false;

			//TODO: Add support for realm first.

			// We never completed the criteria befoer.
			AchievementProgressRecord achievementProgressRecord =
				m_owner.Achievements.GetAchievementCriteriaProgress(achievementCriteriaEntry.AchievementCriteriaId);
			if (achievementProgressRecord == null)
				return false;
			return achievementCriteriaEntry.IsAchieved(achievementProgressRecord);

		}