public static void Serialize(GenericWriter writer, MLQuest quest) { MLQuestSystem.WriteQuestRef(writer, quest); writer.Write(quest.Version); }
public void ClaimRewards() { if (m_Quest == null || m_Player == null || m_Player.Deleted || !ClaimReward || Removed) { return; } List <Item> rewards = new List <Item>(); foreach (BaseReward reward in m_Quest.Rewards) { reward.AddRewardItems(m_Player, rewards); } if (rewards.Count != 0) { // On OSI a more naive method of checking is used. // For containers, only the actual container item counts. bool canFit = true; foreach (Item rewardItem in rewards) { if (!m_Player.AddToBackpack(rewardItem)) { canFit = false; break; } } if (!canFit) { foreach (Item rewardItem in rewards) { rewardItem.Delete(); } m_Player.SendLocalizedMessage(1078524); // Your backpack is full. You cannot complete the quest and receive your reward. return; } foreach (Item rewardItem in rewards) { string rewardName = (rewardItem.Name != null) ? rewardItem.Name : String.Concat("#", rewardItem.LabelNumber); if (rewardItem.Stackable) { m_Player.SendLocalizedMessage(1115917, String.Concat(rewardItem.Amount, "\t", rewardName)); // You receive a reward: ~1_QUANTITY~ ~2_ITEM~ } else { m_Player.SendLocalizedMessage(1074360, rewardName); // You receive a reward: ~1_REWARD~ } } } foreach (BaseObjectiveInstance objective in m_ObjectiveInstances) { objective.OnRewardClaimed(); } m_Quest.OnRewardClaimed(this); MLQuestContext context = PlayerContext; if (m_Quest.RecordCompletion && !m_Quest.HasRestartDelay) // Quests with restart delays are logged earlier as per OSI { context.SetDoneQuest(m_Quest); } if (m_Quest.IsChainTriggered) { context.ChainOffers.Remove(m_Quest); } Type nextQuestType = m_Quest.NextQuest; if (nextQuestType != null) { MLQuest nextQuest = MLQuestSystem.FindQuest(nextQuestType); if (nextQuest != null && !context.ChainOffers.Contains(nextQuest)) { context.ChainOffers.Add(nextQuest); } } Remove(); }
public virtual bool CanOffer(IQuestGiver quester, PlayerMobile pm, MLQuestContext context, bool message) { if (!m_Activated || quester.Deleted) { return(false); } if (context != null) { if (context.IsFull) { if (message) { MLQuestSystem.Tell(quester, pm, 1080107); // I'm sorry, I have nothing for you at this time. } return(false); } MLQuest checkQuest = this; while (checkQuest != null) { DateTime nextAvailable; if (context.HasDoneQuest(checkQuest, out nextAvailable)) { if (checkQuest.OneTimeOnly) { if (message) { MLQuestSystem.Tell(quester, pm, 1075454); // I cannot offer you the quest again. } return(false); } else if (nextAvailable > DateTime.UtcNow) { if (message) { MLQuestSystem.Tell(quester, pm, 1075575); // I'm sorry, but I don't have anything else for you right now. Could you check back with me in a few minutes? } return(false); } } if (checkQuest.NextQuest == null) { break; } checkQuest = MLQuestSystem.FindQuest(checkQuest.NextQuest); } } foreach (BaseObjective obj in m_Objectives) { if (!obj.CanOffer(quester, pm, message)) { return(false); } } return(true); }
public bool CanOffer(IQuestGiver quester, PlayerMobile pm, bool message) { return(CanOffer(quester, pm, MLQuestSystem.GetContext(pm), message)); }
public void Serialize(GenericWriter writer) { MLQuestSystem.WriteQuestRef(writer, m_Quest); writer.Write(m_NextAvailable); }
public bool IsDoingQuest(Type questType) { MLQuest quest = MLQuestSystem.FindQuest(questType); return(quest != null && IsDoingQuest(quest)); }
public bool HasDoneQuest(Type questType) { MLQuest quest = MLQuestSystem.FindQuest(questType); return(quest != null && HasDoneQuest(quest)); }