public virtual void GiveRewards() { // give rewards for (int i = 0; i < m_Rewards.Count; i++) { Type type = m_Rewards[i].Type; m_Rewards[i].GiveReward(); if (type == null) { continue; } Item reward; try { reward = Activator.CreateInstance(type) as Item; } catch (Exception e) { Server.Diagnostics.ExceptionLogging.LogException(e); reward = null; } if (reward != null) { if (reward.Stackable) { reward.Amount = m_Rewards[i].Amount; m_Rewards[i].Amount = 1; } for (int j = 0; j < m_Rewards[i].Amount; j++) { if (!m_Owner.PlaceInBackpack(reward)) { reward.MoveToWorld(m_Owner.Location, m_Owner.Map); } if (m_Rewards[i].Name is int) { m_Owner.SendLocalizedMessage(1074360, "#" + (int)m_Rewards[i].Name); // You receive a reward: ~1_REWARD~ } else if (m_Rewards[i].Name is string) { m_Owner.SendLocalizedMessage(1074360, (string)m_Rewards[i].Name); // You receive a reward: ~1_REWARD~ } // already marked, we need to see if this gives progress to another quest. if (reward.QuestItem) { QuestHelper.CheckRewardItem(Owner, reward); } } } } // remove quest if (NextQuest == null) { RemoveQuest(true); } else { RemoveQuest(); } // offer next quest if present if (NextQuest != null) { BaseQuest quest = QuestHelper.RandomQuest(m_Owner, new Type[] { NextQuest }, StartingMobile); if (quest != null && quest.ChainID == ChainID) { m_Owner.SendGump(new MondainQuestGump(quest)); } } if (this is ITierQuest) { TierQuestInfo.CompleteQuest(Owner, (ITierQuest)this); } EventSink.InvokeQuestComplete(new QuestCompleteEventArgs(Owner, GetType())); }