Aura.Channel.World.Inventory.CreatureInventory.ApplyUpgradeEffects C# (CSharp) Method

ApplyUpgradeEffects() private method

Applies upgrade effects from item.
private ApplyUpgradeEffects ( Item item ) : void
item Item
return void
		private void ApplyUpgradeEffects(Item item)
		{
			foreach (var effect in item.GetUpgradeEffects())
			{
				var stat = effect.Stat.ToStat();
				var value = effect.Value;

				// Check stat
				if (stat == Stat.None)
				{
					Log.Warning("ApplyUpgradeEffects: Unknown/unhandled stat '{0}'.", effect.Stat);
					continue;
				}

				// Check requirements
				var fulfilled = false;

				// None
				if (effect.CheckType == UpgradeCheckType.None)
				{
					fulfilled = true;
				}
				// Stat ==, >, >=, <, <=
				else if (effect.CheckType >= UpgradeCheckType.GreaterThan && effect.CheckType <= UpgradeCheckType.Equal)
				{
					// Check upgrade stat and get value
					var valueToCheck = 0;
					switch (effect.CheckStat)
					{
						case UpgradeStat.Level: valueToCheck = _creature.Level; break;
						case UpgradeStat.TotalLevel: valueToCheck = _creature.TotalLevel; break;
						case UpgradeStat.ExplorationLevel: valueToCheck = 0; break; // TODO: Set once we have exploration levels.
						case UpgradeStat.Age: valueToCheck = _creature.Age; break;

						default:
							Log.Warning("ApplyUpgradeEffects: Unknown/unhandled check stat '{0}'.", effect.CheckStat);
							continue;
					}

					// Check value
					switch (effect.CheckType)
					{
						case UpgradeCheckType.Equal: fulfilled = (valueToCheck == effect.CheckValue); break;
						case UpgradeCheckType.GreaterThan: fulfilled = (valueToCheck > effect.CheckValue); break;
						case UpgradeCheckType.GreaterEqualThan: fulfilled = (valueToCheck >= effect.CheckValue); break;
						case UpgradeCheckType.LowerThan: fulfilled = (valueToCheck < effect.CheckValue); break;
						case UpgradeCheckType.LowerEqualThan: fulfilled = (valueToCheck <= effect.CheckValue); break;
					}
				}
				// Skill rank >, <, ==
				else if (effect.CheckType >= UpgradeCheckType.SkillRankEqual && effect.CheckType <= UpgradeCheckType.SkillRankLowerThan)
				{
					var skillId = effect.CheckSkillId;
					var skillRank = effect.CheckSkillRank;

					var skill = _creature.Skills.Get(effect.CheckSkillId);
					if (skill != null)
					{
						switch (effect.CheckType)
						{
							case UpgradeCheckType.SkillRankEqual: fulfilled = (skill.Info.Rank == effect.CheckSkillRank); break;
							case UpgradeCheckType.SkillRankGreaterThan: fulfilled = (skill.Info.Rank >= effect.CheckSkillRank); break;
							case UpgradeCheckType.SkillRankLowerThan: fulfilled = (skill.Info.Rank < effect.CheckSkillRank); break;
						}
					}
				}
				// Broken
				else if (effect.CheckType == UpgradeCheckType.WhenBroken)
				{
					fulfilled = (effect.CheckBroken && item.Durability == 0) || (!effect.CheckBroken && item.Durability != 0);
				}
				// Title
				else if (effect.CheckType == UpgradeCheckType.HoldingTitle)
				{
					fulfilled = (_creature.Titles.SelectedTitle == effect.CheckTitleId);
				}
				// Condition
				else if (effect.CheckType == UpgradeCheckType.InAStateOf)
				{
					fulfilled = _creature.Conditions.Has(effect.CheckCondition);
				}
				// PTJ
				else if (effect.CheckType == UpgradeCheckType.IfPtjCompletedMoreThan)
				{
					var trackRecord = _creature.Quests.GetPtjTrackRecord(effect.CheckPtj);
					fulfilled = (trackRecord.Done >= effect.CheckValue);
				}
				// Month
				else if (effect.CheckType == UpgradeCheckType.WhileBeing)
				{
					fulfilled = (ErinnTime.Now.Month == (int)effect.CheckMonth);
				}
				// Summon
				else if (effect.CheckType == UpgradeCheckType.WhileSummoned)
				{
					switch (effect.CheckStat)
					{
						case UpgradeStat.Pet: fulfilled = (_creature.Pet != null); break;
						case UpgradeStat.Golem: fulfilled = false; break; // TODO: Set once we have golems.
						case UpgradeStat.BarrierSpikes: fulfilled = false; break; // TODO: Set once we have barrier spikes.

						default:
							Log.Warning("ApplyUpgradeEffects: Unknown/unhandled check summon '{0}'.", effect.CheckStat);
							continue;
					}
				}
				else
				{
					Log.Warning("ApplyUpgradeEffects: Unknown/unhandled check type '{0}'.", effect.CheckType);
					continue;
				}

				// Apply if requirements are fulfilled
				if (fulfilled)
					_creature.StatMods.Add(stat, value, StatModSource.Equipment, item.EntityId);
			}
		}