Aura.Channel.Skills.Base.CreationSkill.FinishItem C# (CSharp) Method

FinishItem() protected method

Sets appropriete flags, bonuses, and signatures, and sends notices about quality and bonuses.
protected FinishItem ( Creature creature, Skill skill, ManualData manualData, int finishId, Item item, int quality ) : void
creature Aura.Channel.World.Entities.Creature
skill Skill
manualData ManualData
finishId int /// The id of the finish to use, make sure to get the actual /// finish id, which in Blacksmithing comes from the Prepare /// that switches to the mini-game. ///
item Item
quality int
return void
		protected void FinishItem(Creature creature, Skill skill, ManualData manualData, int finishId, Item item, int quality)
		{
			var finish = manualData.GetFinish(finishId);
			if (finish == null)
			{
				Log.Error("CreationSkill.FinishItem: Finish '{0}' not found.", finishId);
				Send.ServerMessage(creature, Localization.Get("Unknown finish recipe, please report."));
				return;
			}

			// Monday: Increase in quality of output for productions.
			// +5, unofficial.
			if (ErinnTime.Now.Month == ErinnMonth.AlbanEiler)
				quality = Math.Min(100, quality + 5);

			// Update item
			item.OptionInfo.Flags &= ~ItemFlags.Incomplete;
			item.OptionInfo.Flags |= ItemFlags.Reproduction;
			item.MetaData1.Remove(ProgressVar);
			item.MetaData1.Remove(StclmtVar);
			item.MetaData1.SetInt(QualityVar, quality);

			if (finish.Color1 != null) item.Info.Color1 = (uint)finish.Color1;
			if (finish.Color2 != null) item.Info.Color2 = (uint)finish.Color2;
			if (finish.Color3 != null) item.Info.Color3 = (uint)finish.Color3;

			// Signature
			if (skill.Info.Rank >= SkillRank.R9 && manualData.Rank >= SkillRank.RA && quality >= 80)
			{
				item.MetaData1.SetString(SignNameVar, creature.Name);
				item.MetaData1.SetByte(SignRankVar, (byte)skill.Info.Rank);
			}

			// Get quality based msg
			var msg = "";
			if (quality == 100) // god
			{
				msg = Localization.Get("You created a godly {0}! Excellent work!");
			}
			else if (quality >= 80) // best
			{
				msg = Localization.Get("Your hard work produced a very nice {0}!");
			}
			else if (quality >= 50) // better
			{
				msg = Localization.Get("Your efforts created an above-average {0}!");
			}
			else if (quality >= 20) // reasonable
			{
				msg = Localization.Get("Your creation is far superior to anything you can get from a store.");
			}
			else if (quality >= -20) // normal
			{
				msg = Localization.Get("Your creation is just as good as anything you can get from a store.");
			}
			else if (quality >= -50) // worse
			{
				msg = Localization.Get("Your creation could be nice with a few repairs.");
			}
			else if (quality >= -80) // worst
			{
				msg = Localization.Get("You managed to finish the {0}, but it's pretty low quality.");
			}
			else
			{
				msg = Localization.Get("Your {0} isn't really fit for use. Maybe you could get some decent scrap wood out of it.");
			}

			// Apply bonuses and append msgs
			var bonuses = this.GetBonusesFor(item, quality);
			if (bonuses.Count != 0)
			{
				msg += "\n";
				foreach (var bonus in bonuses)
				{
					var bonusName = "?";
					switch (bonus.Key)
					{
						case Bonus.Defense:
							item.OptionInfo.Defense += bonus.Value;
							bonusName = "Defense";
							break;

						case Bonus.Protection:
							item.OptionInfo.Protection += (short)bonus.Value;
							bonusName = "Protection";
							break;

						case Bonus.Durability:
							item.OptionInfo.Durability += bonus.Value * 1000;
							bonusName = "Durability";
							break;

						case Bonus.DurabilityMax:
							item.OptionInfo.DurabilityMax += bonus.Value * 1000;
							bonusName = "Max Durability";
							break;

						case Bonus.AttackMin:
							item.OptionInfo.AttackMin += (ushort)bonus.Value;
							bonusName = "Min Attack";
							break;

						case Bonus.AttackMax:
							item.OptionInfo.AttackMax += (ushort)bonus.Value;
							bonusName = "Max Attack";
							break;

						case Bonus.Critical:
							item.OptionInfo.Critical += (sbyte)bonus.Value;
							bonusName = "Critical";
							break;

						case Bonus.Balance:
							item.OptionInfo.Balance += (byte)bonus.Value;
							bonusName = "Balance";
							break;
					}

					if (bonus.Value > 0)
						msg += string.Format("{0} Increase {1}, ", bonusName, bonus.Value);
					else
						msg += string.Format("{0} Decrease {1}, ", bonusName, bonus.Value);
				}
				msg = msg.TrimEnd(',', ' ');

				// Check attack
				if (item.OptionInfo.AttackMin > item.OptionInfo.AttackMax)
					item.OptionInfo.AttackMin = item.OptionInfo.AttackMax;

				// Check durability
				if (item.OptionInfo.Durability > item.OptionInfo.DurabilityMax)
					item.OptionInfo.Durability = item.OptionInfo.DurabilityMax;
			}

			// Send notice
			Send.Notice(creature, msg, item.Data.Name);
		}