public static bool CanOffer( PlayerMobile from, BaseQuest quest, bool message ) { if ( !quest.CanOffer() ) return false; // if a player wants to start quest chain (already started) again (not osi) if ( quest.ChainID != QuestChain.None && FirstChainQuest( quest, quest.Quester ) && from.Chains.ContainsKey( quest.ChainID ) ) return false; if ( !Delayed( from, quest, message ) ) return false; for ( int i = quest.Objectives.Count - 1; i >= 0; i -- ) { Type type = quest.Objectives[ i ].Type(); if ( type == null ) continue; for ( int j = from.Quests.Count - 1; j >= 0; j -- ) { BaseQuest pQuest = from.Quests[ j ]; for ( int k = pQuest.Objectives.Count - 1; k >= 0; k -- ) { BaseObjective obj = pQuest.Objectives[ k ]; if ( type == obj.Type() ) return false; } } } return true; }
// Use this for initialization void Start() { originalScale = transform.localScale; quest = GetComponent<BaseQuest>(); MasterOfKnowledge.OnActivateQuest += MasterOfKnowledge_OnActivateQuest; MasterOfKnowledge.OnDeliverQuest += MasterOfKnowledge_OnDeliverQuest; }
public MLQuestFinishGump( PlayerMobile pm, BaseQuest quest, MondainQuester quester ) : base(75, 25) { m_Quest = quest; m_From = pm; m_Quester = quester; if ( m_Quest.Complete == null ) { if ( QuestHelper.TryDeleteItems( m_Quest ) ) { if ( QuestHelper.AnyRewards( m_Quest ) ) { m_From.CloseGump( this.GetType() ); m_From.SendGump( new MLQuestRewardGump( m_Quest ) ); } else m_Quest.GiveRewards(); } return; } Intern( "" ); AddPage( 1 ); Closable = false; AddImageTiled( 50, 20, 400, 400, 0x1404 ); AddImageTiled( 50, 29, 30, 390, 0x28DC ); AddImageTiled( 34, 140, 17, 279, 0x242F ); AddImage( 48, 135, 0x28AB ); AddImage( -16, 285, 0x28A2 ); AddImage( 0, 10, 0x28B5 ); AddImage( 25, 0, 0x28B4 ); AddImageTiled( 83, 15, 350, 15, 0x280A ); AddImage( 34, 419, 0x2842 ); AddImage( 442, 419, 0x2840 ); AddImageTiled( 51, 419, 392, 17, 0x2775 ); AddImageTiled( 415, 29, 44, 390, 0xA2D ); AddImageTiled( 415, 29, 30, 390, 0x28DC ); AddLabelIntern( 100, 50, 0x481, 0 ); AddImage( 370, 50, 0x589 ); AddImage( 379, 60, 0x15A9 ); AddImage( 425, 0, 0x28C9 ); AddImage( 90, 33, 0x232D ); AddHtmlLocalized( 130, 45, 270, 16, 3006156, 0xFFFFFF, false, false ); // Quest Conversation AddImageTiled( 130, 65, 175, 1, 0x238D ); AddHtmlLocalized( 130, 68, 220, 48, 1114513, String.Format( "#{0}", quest.Title.ToString() ), 0x2710, false, false ); AddHtmlObject( 98, 140, 312, 180, quest.Complete, 0x15F90, false, true ); AddButton( 95, 395, 0x2EE9, 0x2EEB, 4, GumpButtonType.Reply, 0 ); // Continue AddKRHtmlLocalized( 0, 0, 0, 0, 1011036, false, false ); AddKRHtmlLocalized( 0, 0, 0, 0, 1011012, false, false ); AddButton( 313, 395, 0x2EE6, 0x2EE8, 3, GumpButtonType.Reply, 0 ); // Close }
public override void ProcessQuest(Mobile from, BaseQuest quest) { if(from == null || quest == null) return; Type type = quest.GetType(); if(Entries.ContainsKey(type)) AwardPoints(from, Entries[type].Item1, true); }
public MondainQuestGump( PlayerMobile owner, BaseQuest quest, Section section, bool offer, bool completed, object quester ) : base( 75, 25 ) { m_Quester = quester; m_Quest = quest; m_Section = section; m_Offer = offer; m_Completed = completed; if ( quest != null ) m_From = quest.Owner; else m_From = owner; Closable = false; Disposable = true; Dragable = true; Resizable = false; AddPage( 0 ); AddImageTiled( 50, 20, 400, 400, 0x1404 ); AddImageTiled( 50, 29, 30, 390, 0x28DC ); AddImageTiled( 34, 140, 17, 279, 0x242F ); AddImage( 48, 135, 0x28AB ); AddImage( -16, 285, 0x28A2 ); AddImage( 0, 10, 0x28B5 ); AddImage( 25, 0, 0x28B4 ); AddImageTiled( 83, 15, 350, 15, 0x280A ); AddImage( 34, 419, 0x2842 ); AddImage( 442, 419, 0x2840 ); AddImageTiled( 51, 419, 392, 17, 0x2775 ); AddImageTiled( 415, 29, 44, 390, 0xA2D ); AddImageTiled( 415, 29, 30, 390, 0x28DC ); AddImage( 370, 50, 0x589 ); if ( (int) m_From.AccessLevel > (int) AccessLevel.Counselor && quest != null ) AddButton( 379, 60, 0x15A9, 0x15A9, (int) Buttons.CompleteQuest, GumpButtonType.Reply, 0 ); else AddImage( 379, 60, 0x15A9 ); AddImage( 425, 0, 0x28C9 ); AddImage( 90, 33, 0x232D ); AddImageTiled( 130, 65, 175, 1, 0x238D ); switch ( m_Section ) { case Section.Main: SecMain( ); break; case Section.Description: SecDescription(); break; case Section.Objectives: SecObjectives(); break; case Section.Rewards: SecRewards(); break; case Section.Refuse: SecRefuse(); break; case Section.Complete: SecComplete(); break; case Section.InProgress: SecInProgress(); break; } }
public MondainResignGump( BaseQuest quest ) : base(120, 50) { if ( quest == null ) return; m_Quest = quest; Closable = false; Disposable = true; Dragable = true; Resizable = false; AddPage( 0 ); AddImageTiled( 0, 0, 348, 262, 0xA8E ); AddAlphaRegion( 0, 0, 348, 262 ); AddImage( 0, 15, 0x27A8 ); AddImageTiled( 0, 30, 17, 200, 0x27A7 ); AddImage( 0, 230, 0x27AA ); AddImage( 15, 0, 0x280C ); AddImageTiled( 30, 0, 300, 17, 0x280A ); AddImage( 315, 0, 0x280E ); AddImage( 15, 244, 0x280C ); AddImageTiled( 30, 244, 300, 17, 0x280A ); AddImage( 315, 244, 0x280E ); AddImage( 330, 15, 0x27A8 ); AddImageTiled( 330, 30, 17, 200, 0x27A7 ); AddImage( 330, 230, 0x27AA ); AddImage( 333, 2, 0x2716 ); AddImage( 333, 248, 0x2716 ); AddImage( 2, 248, 0x216 ); AddImage( 2, 2, 0x2716 ); AddHtmlLocalized( 25, 22, 200, 20, 1049000, 0x7D00, false, false ); // Confirm Quest Cancellation AddImage( 25, 40, 0xBBF ); AddHtmlLocalized( 25, 55, 300, 120, 1060836, 0xFFFFFF, false, false ); // This quest will give you valuable information, skills and equipment that will help you advance in the game at a quicker pace.<BR><BR>Are you certain you wish to cancel at this time? if ( quest.ChainID != QuestChain.None ) { AddRadio( 25, 145, 0x25F8, 0x25FB, false, (int) Radios.Chain ); AddHtmlLocalized( 60, 150, 280, 20, 1075023, 0xFFFFFF, false, false ); // Yes, I want to quit this entire chain! } AddRadio( 25, 180, 0x25F8, 0x25FB, true, (int) Radios.Quest ); AddHtmlLocalized( 60, 185, 280, 20, 1049005, 0xFFFFFF, false, false ); // Yes, I really want to quit this quest! AddRadio( 25, 215, 0x25F8, 0x25FB, false, (int) Radios.None ); AddHtmlLocalized( 60, 220, 280, 20, 1049006, 0xFFFFFF, false, false ); // No, I don't want to quit. AddButton( 265, 220, 0xF7, 0xF8, (int) Buttons.Okay, GumpButtonType.Reply, 0 ); // okay }
public MLQuestRewardGump( BaseQuest quest ) : base(75, 25) { m_Quest = quest; AddPage( 1 ); Closable = false; AddImageTiled( 50, 20, 400, 400, 0x1404 ); AddImageTiled( 50, 29, 30, 390, 0x28DC ); AddImageTiled( 34, 140, 17, 279, 0x242F ); AddImage( 48, 135, 0x28AB ); AddImage( -16, 285, 0x28A2 ); AddImage( 0, 10, 0x28B5 ); AddImage( 25, 0, 0x28B4 ); AddImageTiled( 83, 15, 350, 15, 0x280A ); AddImage( 34, 419, 0x2842 ); AddImage( 442, 419, 0x2840 ); AddImageTiled( 51, 419, 392, 17, 0x2775 ); AddImageTiled( 415, 29, 44, 390, 0xA2D ); AddImageTiled( 415, 29, 30, 390, 0x28DC ); AddLabel( 100, 50, 0x481, "" ); AddImage( 370, 50, 0x589 ); AddImage( 379, 60, 0x15A9 ); AddImage( 425, 0, 0x28C9 ); AddImage( 90, 33, 0x232D ); AddHtmlLocalized( 130, 45, 270, 16, 1072201, 0xFFFFFF, false, false ); // Reward AddImageTiled( 130, 65, 175, 1, 0x238D ); AddButton( 95, 395, 0x2EE0, 0x2EE2, 1, GumpButtonType.Reply, 0 ); // Accept AddHtmlLocalized( 130, 68, 220, 48, 1114513, String.Format( "#{0}", quest.Title.ToString() ), 0x2710, false, false ); AddHtmlLocalized( 98, 140, 312, 16, 1072201, 0x2710, false, false ); // Reward if ( quest.Rewards.Count == 1 ) { BaseReward reward = m_Quest.Rewards[0]; AddImage( 107, 147, 0x4B9 ); AddHtmlObject( 135, 146, 280, 32, reward.Name, 0x15F90, false, false ); } else { AddHtmlLocalized( 98, 156, 312, 16, 1072208, 0x2710, false, false ); // All of the following for ( int n = 0; n < quest.Rewards.Count; ++n ) { BaseReward reward = m_Quest.Rewards[n]; AddImage( 105, 179 + ( n * 16 ), 0x4B9 ); AddHtmlObject( 133, 178 + ( n * 16 ), 280, 32, reward.Name, 0x15F90, false, false ); } } }
public MLQuestConversationGump( BaseQuest quest, MLQuestConverType converType ) : base(75, 25) { AddPage( 1 ); Closable = false; AddImageTiled( 50, 20, 400, 400, 0x1404 ); AddImageTiled( 50, 29, 30, 390, 0x28DC ); AddImageTiled( 34, 140, 17, 279, 0x242F ); AddImage( 48, 135, 0x28AB ); AddImage( -16, 285, 0x28A2 ); AddImage( 0, 10, 0x28B5 ); AddImage( 25, 0, 0x28B4 ); AddImageTiled( 83, 15, 350, 15, 0x280A ); AddImage( 34, 419, 0x2842 ); AddImage( 442, 419, 0x2840 ); AddImageTiled( 51, 419, 392, 17, 0x2775 ); AddImageTiled( 415, 29, 44, 390, 0xA2D ); AddImageTiled( 415, 29, 30, 390, 0x28DC ); AddLabel( 100, 50, 0x481, "" ); AddImage( 370, 50, 0x589 ); AddImage( 379, 60, 0x15A9 ); AddImage( 425, 0, 0x28C9 ); AddImage( 90, 33, 0x232D ); AddHtmlLocalized( 130, 45, 270, 16, 3006156, 0xFFFFFF, false, false ); // Quest Conversation AddImageTiled( 130, 65, 175, 1, 0x238D ); AddHtmlLocalized( 130, 68, 220, 48, 1114513, String.Format( "#{0}", quest.Title.ToString() ), 0x2710, false, false ); switch ( converType ) { case MLQuestConverType.Refuse: { AddHtmlObject( 98, 140, 312, 180, quest.Refuse, 0x15F90, false, true ); AddButton( 313, 395, 0x2EE6, 0x2EE8, 3, GumpButtonType.Reply, 0 ); break; } case MLQuestConverType.InProgress: { AddHtmlObject( 98, 140, 312, 180, quest.Uncomplete, 0x15F90, false, true ); AddButton( 313, 395, 0x2EE6, 0x2EE8, 3, GumpButtonType.Reply, 0 ); // Close break; } } }
public override int Damage(int amount, Mobile from, bool informMount, bool checkDisrupt) { if (from is BaseCreature && ((BaseCreature)from).GetMaster() is PlayerMobile) { from = ((BaseCreature)from).GetMaster(); } if (from is PlayerMobile pm) { BaseQuest quest = QuestHelper.GetQuest(pm, typeof(GuiltyQuest)); if (quest != null && !quest.Completed) { return(base.Damage(amount, from, informMount, checkDisrupt)); } } from.SendLocalizedMessage(1075456); // You are not allowed to damage this NPC unless your on the Guilty Quest return(0); }
public override bool CanBeHarmedBy(Mobile from, bool message) { if (from is BaseCreature && ((BaseCreature)from).GetMaster() is PlayerMobile) { from = ((BaseCreature)from).GetMaster(); } if (from is PlayerMobile pm) { BaseQuest quest = QuestHelper.GetQuest(pm, typeof(GuiltyQuest)); if (quest != null && !quest.Completed) { return(base.CanBeHarmedBy(from, message)); } } from.SendLocalizedMessage(1075456); // You are not allowed to damage this NPC unless your on the Guilty Quest return(false); }
public override void OnExit(Mobile m) { base.OnExit(m); if (m is PlayerMobile) { PlayerMobile player = (PlayerMobile)m; for (int i = 0; i < player.Quests.Count; i++) { BaseQuest quest = player.Quests[i]; for (int j = 0; j < quest.Objectives.Count; j++) { BaseObjective objective = quest.Objectives[j]; if (objective is ApprenticeObjective && !objective.Completed) { ApprenticeObjective apprentice = (ApprenticeObjective)objective; if (IsPartOf(apprentice.Region)) { if (apprentice.Leave is int) { player.SendLocalizedMessage((int)apprentice.Leave); } else if (apprentice.Leave is string) { player.SendMessage((string)apprentice.Leave); } if (m_Table[m] is BuffInfo) { BuffInfo.RemoveBuff(m, (BuffInfo)m_Table[m]); } } } } } } }
public bool CheckQuest(PlayerMobile player) { for (int i = 0; i < _Quests.Length; i++) { BaseQuest quest = player.Quests.FirstOrDefault(q => q.GetType() == _Quests[i]); if (quest != null) { if (quest.Completed) { if (quest.GetType() != typeof(TeachingSomethingNewQuest)) { quest.GiveRewards(); } else { player.SendGump(new MondainQuestGump(quest, MondainQuestGump.Section.Complete, false, true)); } return(true); } player.SendGump(new MondainQuestGump(quest, MondainQuestGump.Section.InProgress, false)); quest.InProgress(); return(false); } } BaseQuest questt = new TamingPetQuest { Owner = player, Quester = this }; player.CloseGump(typeof(MondainQuestGump)); player.SendGump(new MondainQuestGump(questt)); return(true); }
public override void OnEnter(Mobile m) { base.OnEnter(m); if (m is PlayerMobile) { PlayerMobile player = (PlayerMobile)m; for (int i = 0; i < player.Quests.Count; i++) { BaseQuest quest = player.Quests[i]; for (int j = 0; j < quest.Objectives.Count; j++) { BaseObjective objective = quest.Objectives[j]; if (objective is ApprenticeObjective && !objective.Completed) { ApprenticeObjective apprentice = (ApprenticeObjective)objective; if (IsPartOf(apprentice.Region)) { if (apprentice.Enter is int) { player.SendLocalizedMessage((int)apprentice.Enter); } else if (apprentice.Enter is string) { player.SendMessage((string)apprentice.Enter); } BuffInfo info = new BuffInfo(BuffIcon.ArcaneEmpowerment, 1078511, 1078512, apprentice.Skill.ToString()); // Accelerated Skillgain Skill: ~1_val~ BuffInfo.AddBuff(m, info); m_Table[m] = info; } } } } } }
public bool HasQuest(PlayerMobile pm) { if (pm.Quests == null) { return(false); } for (int i = 0; i < pm.Quests.Count; i++) { BaseQuest quest = pm.Quests[i]; if (quest is ProfessionalBountyQuest) { if (this == quest.Quester) { for (int j = 0; j < quest.Objectives.Count; j++) { if (quest.Objectives[j].Update(pm)) { quest.Objectives[j].Complete(); } } } if (quest.Completed) { quest.OnCompleted(); pm.SendGump(new MondainQuestGump(quest, MondainQuestGump.Section.Complete, false, true)); } else { pm.SendGump(new MondainQuestGump(quest, MondainQuestGump.Section.InProgress, false)); quest.InProgress(); } return(true); } } return(false); }
public void PushQuestToPeasant(int PeasantIndex, int QuestIndex, BaseQuest quest) { Vector3 pos = Peasants[PeasantIndex].transform.position; Peasants[PeasantIndex].transform.GetComponent<Image>().enabled = true; Peasants[PeasantIndex].transform.GetComponent<colorLerp>().enabled = true; GameObject QuestMarkerObj = Instantiate(QuestMarkerPrefab); QuestMarkerObj.transform.position = pos + new Vector3(0, QuestMarkerHeight, 0); QuestMarkerObj.transform.SetParent(this.transform); PeasantQuest trigger = Peasants[PeasantIndex].AddComponent<PeasantQuest>(); //hubDataManager.SelectQuest(QuestIndex) trigger.delegateOnClickEvent += new PeasantQuest.DelegateOnClickEvent(hubDataManager.SetQuestLetter); trigger.delegateOnClickEvent2 += new PeasantQuest.DelegateOnClickEvent(hubDataManager.setCurrSelectedQuest); trigger.QuestIndex = QuestIndex; }
/// <summary> /// private internal Events on quest selections /// changed: 02.10.05 /// </summary> private void DoQuestEvents(Character c, BaseQuest bq) { if (c.QuestDone(bq)) { return; } if (!c.QuestCompleted(bq)) { if (!c.HaveQuest(bq)) { if (bq.HaveDeliveryObj && !HaveFreeSlot(c)) // quest need free slot { c.QuestFailed(qFailedReason.InventoryFull); } else if (AmountActiveQuests(c) >= 20) // questLog is full { c.QuestLogIsFull(); } else // can get quest { //need add questEmotion[] on get quest c.ResponseQuestDetails(this, bq.Id, bq.Name, bq.Desc, bq.Details, getEmoteOnStart(bq)); //c.ResponseQuestDetails( this, bq.Id, bq.Name, bq.Desc, bq.Details, new qEmote[] { new qEmote( Emote.ONESHOT_TALK, 500 ) } ); } } else { //c.QuestInvalid( qInvalidReason.ReadyHaveThatQuest ); c.SendGossip(this, OnlyQuests ? (int)NPCMenuId.Quests : (int)NPCMenuId.MainMenu, null, null); //c.ResponseMessage( this, OnlyQuests ? (int)NPCMenuId.Quests : (int)NPCMenuId.MainMenu, bq.ProgressDialog ); } } else if (c.QuestCompleted(bq)) { //need add questEmotion[] on complete quest c.OfferReward(this, bq.Id, bq.FinishTitle, bq.FinishDialog, getEmoteOnEnd(bq)); //c.OfferReward( this, bq.Id, bq.FinishTitle, bq.FinishDialog, new qEmote[] { new qEmote( Emote.ONESHOT_TALK, 500 ) } ); } }
public override bool CanUse(Mobile from) { if (!base.CanUse(from)) { return(false); } PlayerMobile pm = from as PlayerMobile; if (pm == null) { return(false); } for (int i = pm.Quests.Count - 1; i >= 0; i--) { BaseQuest quest = pm.Quests[i]; for (int j = quest.Objectives.Count - 1; j >= 0; j--) { BaseObjective objective = quest.Objectives[j]; if (objective is ApprenticeObjective) { from.SendMessage("You are already under the effect of an enhanced skillgain quest."); return(false); } } } if (pm.AcceleratedStart > DateTime.UtcNow) { from.SendLocalizedMessage(1077951); // You are already under the effect of an accelerated skillgain scroll. return(false); } return(true); }
private IQuest GenerateDestroyQuest(int numNonSuicide, int numSuicide) { var destQuest = new BaseQuest(); var meleeAvailable = (AvailableEnemies & EnemyTypes.HasMelee) == EnemyTypes.HasMelee; for (int i = 0; i < numNonSuicide; i++) { if (i % 2 == 0 && meleeAvailable) { destQuest.Objectives.Add(new DestroyTargetObjective(11)); } else { destQuest.Objectives.Add(new DestroyTargetObjective(12)); } } for (int i = 0; i < numSuicide; i++) { destQuest.Objectives.Add(new DestroyTargetObjective(13)); } return(destQuest); }
public bool HaveRewardOnHello(Character c) { bool result = false; ActiveQuest[] list = c.GetActiveQuests; if (list != null) { foreach (ActiveQuest aq in list) { if (aq != null && aq.baseQuest != null) { BaseQuest bq = aq.baseQuest; if (bq.HaveNPCTargetId && bq.NPCTargetId == this.Id) { if (bq.HasReward() || bq.HasRewardChoice()) { if (HaveFreeSlot(c)) { c.OfferReward(this, bq.Id, bq.FinishTitle, bq.FinishDialog, getEmoteOnEnd(bq)); } else { c.QuestFailed(qFailedReason.InventoryFull); } } else { c.OfferReward(this, bq.Id, bq.FinishTitle, bq.FinishDialog, getEmoteOnEnd(bq)); } result = true; break; } } } } return(result); }
public TownCrierQuestCompleteGump(PlayerMobile pm, BaseQuest quest) : base(pm, 10, 100) { Title = quest.Title; Body = quest.Complete; TownCryerNewsEntry entry = null; for (var index = 0; index < TownCryerSystem.NewsEntries.Count; index++) { var e = TownCryerSystem.NewsEntries[index]; if (e.QuestType == quest.GetType()) { entry = e; break; } } if (entry != null) { GumpID = entry.GumpImage; } }
public override bool CanUse(Mobile from) { if (!base.CanUse(from)) { return(false); } if (!(from is PlayerMobile pm)) { return(false); } for (int i = pm.Quests.Count - 1; i >= 0; i--) { BaseQuest quest = pm.Quests[i]; for (int j = quest.Objectives.Count - 1; j >= 0; j--) { BaseObjective objective = quest.Objectives[j]; if (objective is ApprenticeObjective) { from.SendLocalizedMessage(1079254); // You may not use your Scroll of Alacrity while your character is on a new player skill quest. return(false); } } } if (pm.AcceleratedStart > DateTime.UtcNow) { from.SendLocalizedMessage(1077951); // You are already under the effect of an accelerated skillgain scroll. return(false); } return(true); }
public override void OnDoubleClick(Mobile from) { if (from.InRange(Location, 4)) { if (!m_Conversation.ContainsKey(from)) { SayTo(from, m_Responses[0]); m_Conversation[from] = 1; } if (Backpack != null) { Backpack.DisplayTo(from); } } if (from is PlayerMobile pm && QuestHelper.CheckDoneOnce(pm, typeof(WishesOfTheWispQuest), null, false)) { WhisperingWithWispsQuest q = QuestHelper.GetQuest <WhisperingWithWispsQuest>(pm); if (q == null) { BaseQuest quest = QuestHelper.RandomQuest(pm, new Type[] { typeof(WhisperingWithWispsQuest) }, this); if (quest != null) { pm.CloseGump(typeof(MondainQuestGump)); pm.SendGump(new MondainQuestGump(quest)); } } else if (q.Completed) { q.CompleteQuest(); } } }
public override void OnResponse(RelayInfo info) { switch (info.ButtonID) { case 0: var gump = new TownCryerGump(User, Cryer); gump.Category = TownCryerGump.GumpCategory.News; BaseGump.SendGump(gump); break; case 1: User.LaunchBrowser(Entry.InfoUrl); Refresh(); break; case 2: if (QuestHelper.HasQuest(User, Entry.QuestType)) { Cryer.SayTo(User, 1080107, 1150); // I'm sorry, I have nothing for you at this time. } else { BaseQuest quest = QuestHelper.Construct(Entry.QuestType) as BaseQuest; if (quest != null && (!QuestHelper.CheckDoneOnce(User, quest, Cryer, true) || User.AccessLevel > AccessLevel.Player)) { quest.Owner = User; quest.Quester = Cryer; User.CloseGump(typeof(MondainQuestGump)); User.SendGump(new MondainQuestGump(quest)); } } break; } }
public static void CompleteQuest(PlayerMobile pm, BaseQuest quest) { BaseGump.SendGump(new TownCrierQuestCompleteGump(pm, quest)); }
public MLQuestFinishGump( PlayerMobile pm, BaseQuest quest ) : this(pm, quest, null) { }
public static void DeleteItems( BaseQuest quest ) { for ( int i = 0; i < quest.Objectives.Count; i ++ ) { BaseObjective objective = quest.Objectives[ i ]; DeleteItems( quest.Owner, objective.Type(), objective.MaxProgress, true ); RemoveStatus( quest.Owner, objective.Type() ); } }
public void Use(Mobile from, bool firstStage) { PlayerMobile pm = from as PlayerMobile; if (Deleted) { return; } #region Mondain's Legacy for (int i = pm.Quests.Count - 1; i >= 0; i--) { BaseQuest quest = pm.Quests[i]; for (int j = quest.Objectives.Count - 1; j >= 0; j--) { BaseObjective objective = quest.Objectives[j]; if (objective is ApprenticeObjective) { from.SendMessage("You are already under the effect of an enhanced skillgain quest."); return; } } } #endregion if (!IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. } else if (pm.AcceleratedStart > DateTime.Now) { from.SendLocalizedMessage(1077951); // You are already under the effect of an accelerated skillgain scroll. return; } else { if (firstStage) { from.CloseGump(typeof(StatCapScroll.InternalGump)); from.CloseGump(typeof(PowerScroll.InternalGump)); #region Scroll of Transcendence from.CloseGump(typeof(ScrollofTranscendence.InternalGump)); #endregion from.CloseGump(typeof(ScrollofAlacrity.InternalGump)); from.SendGump(new InternalGump(from, this)); } else { double tskill = from.Skills[m_Skill].Base; double tcap = from.Skills[m_Skill].Cap; if (tskill >= tcap || from.Skills[m_Skill].Lock == SkillLock.Locked || from.Skills[m_Skill].Lock == SkillLock.Down) { from.SendLocalizedMessage(1094935); /*You cannot increase this skill at this time. The skill may be locked or set to lower in your skill menu. * If you are at your total skill cap, you must use a Powerscroll to increase your current skill cap.*/ return; } else { Effects.PlaySound(from.Location, from.Map, 0x1E9); Effects.SendTargetParticles(from, 0x373A, 35, 45, 0x00, 0x00, 9502, (EffectLayer)255, 0x100); from.SendLocalizedMessage(1077956); // You are infused with intense energy. You are under the effects of an accelerated skillgain scroll. pm.AcceleratedStart = DateTime.Now + TimeSpan.FromMinutes(15); Timer t = (Timer)m_Table[from]; m_Table[from] = Timer.DelayCall(TimeSpan.FromMinutes(15), new TimerStateCallback(Expire_Callback), from); pm.AcceleratedSkill = m_Skill; Delete(); } } } }
public bool TryBound(Mobile from, BaseQuest quest) { if (from == null || Galleon == null || !Galleon.Contains(this) || quest == null) return false; if (m_IsCaught) { from.SendMessage("That pirate is already bound to a ship!"); return false; } Combatant = null; Warmode = false; m_IsCaught = true; return true; }
public bool TryConstructCreator(out UCreator creator) { switch (_object.ExportType) { // Fortnite case "AthenaConsumableEmoteItemDefinition": case "AthenaSkyDiveContrailItemDefinition": case "AthenaLoadingScreenItemDefinition": case "AthenaVictoryPoseItemDefinition": case "AthenaPetCarrierItemDefinition": case "AthenaMusicPackItemDefinition": case "AthenaBattleBusItemDefinition": case "AthenaCharacterItemDefinition": case "AthenaMapMarkerItemDefinition": case "AthenaBackpackItemDefinition": case "AthenaPickaxeItemDefinition": case "AthenaGadgetItemDefinition": case "AthenaGliderItemDefinition": case "AthenaSprayItemDefinition": case "AthenaDanceItemDefinition": case "AthenaEmojiItemDefinition": case "AthenaItemWrapDefinition": case "AthenaToyItemDefinition": case "FortHeroType": case "FortTokenType": case "FortAbilityKit": case "FortWorkerType": case "RewardGraphToken": case "FortBannerTokenType": case "FortVariantTokenType": case "FortDecoItemDefinition": case "FortStatItemDefinition": case "FortAmmoItemDefinition": case "FortEmoteItemDefinition": case "FortBadgeItemDefinition": case "FortAwardItemDefinition": case "FortGadgetItemDefinition": case "AthenaCharmItemDefinition": case "FortPlaysetItemDefinition": case "FortGiftBoxItemDefinition": case "FortOutpostItemDefinition": case "FortVehicleItemDefinition": case "FortCardPackItemDefinition": case "FortDefenderItemDefinition": case "FortCurrencyItemDefinition": case "FortResourceItemDefinition": case "FortBackpackItemDefinition": case "FortEventQuestMapDataAsset": case "FortWeaponModItemDefinition": case "FortCodeTokenItemDefinition": case "FortSchematicItemDefinition": case "FortWorldMultiItemDefinition": case "FortAlterationItemDefinition": case "FortExpeditionItemDefinition": case "FortIngredientItemDefinition": case "FortAccountBuffItemDefinition": case "FortWeaponMeleeItemDefinition": case "FortPlayerPerksItemDefinition": case "FortPlaysetPropItemDefinition": case "FortHomebaseNodeItemDefinition": case "FortNeverPersistItemDefinition": case "RadioContentSourceItemDefinition": case "FortPlaysetGrenadeItemDefinition": case "FortPersonalVehicleItemDefinition": case "FortGameplayModifierItemDefinition": case "FortHardcoreModifierItemDefinition": case "FortConsumableAccountItemDefinition": case "FortConversionControlItemDefinition": case "FortAccountBuffCreditItemDefinition": case "FortEventCurrencyItemDefinitionRedir": case "FortPersistentResourceItemDefinition": case "FortHomebaseBannerIconItemDefinition": case "FortCampaignHeroLoadoutItemDefinition": case "FortConditionalResourceItemDefinition": case "FortChallengeBundleScheduleDefinition": case "FortWeaponMeleeDualWieldItemDefinition": case "FortDailyRewardScheduleTokenDefinition": case "FortCreativeRealEstatePlotItemDefinition": case "AthenaDanceItemDefinition_AdHocSquadsJoin_C": creator = _style switch { EIconStyle.Cataba => new BaseCommunity(_object, _style, "Cataba"), _ => new BaseIcon(_object, _style) }; return(true); case "FortTrapItemDefinition": case "FortTandemCharacterData": case "FortSpyTechItemDefinition": case "FortAccoladeItemDefinition": case "FortContextTrapItemDefinition": case "FortWeaponRangedItemDefinition": case "Daybreak_LevelExitVehicle_PartItemDefinition_C": creator = new BaseIconStats(_object, _style); return(true); case "FortItemSeriesDefinition": creator = new BaseSeries(_object, _style); return(true); case "MaterialInstanceConstant" when _object.Owner != null && (_object.Owner.Name.EndsWith($"/MI_OfferImages/{_object.Name}", StringComparison.OrdinalIgnoreCase) || _object.Owner.Name.EndsWith($"/RenderSwitch_Materials/{_object.Name}", StringComparison.OrdinalIgnoreCase) || _object.Owner.Name.EndsWith($"/MI_BPTile/{_object.Name}", StringComparison.OrdinalIgnoreCase)): creator = new BaseMaterialInstance(_object, _style); return(true); case "FortMtxOfferData": creator = new BaseMtxOffer(_object, _style); return(true); case "FortPlaylistAthena": creator = new BasePlaylist(_object, _style); return(true); case "FortFeatItemDefinition": case "FortQuestItemDefinition": case "AthenaDailyQuestDefinition": case "FortUrgentQuestItemDefinition": creator = new BaseQuest(_object, _style); return(true); case "FortCompendiumItemDefinition": case "FortChallengeBundleItemDefinition": creator = new BaseBundle(_object, _style); return(true); case "AthenaSeasonItemDefinition": creator = new BaseSeason(_object, _style); return(true); case "FortItemAccessTokenType": creator = new BaseItemAccessToken(_object, _style); return(true); case "PlaylistUserOptionEnum": case "PlaylistUserOptionBool": case "PlaylistUserOptionString": case "PlaylistUserOptionIntEnum": case "PlaylistUserOptionIntRange": case "PlaylistUserOptionColorEnum": case "PlaylistUserOptionFloatEnum": case "PlaylistUserOptionFloatRange": case "PlaylistUserTintedIconIntEnum": case "PlaylistUserOptionPrimaryAsset": case "PlaylistUserOptionCollisionProfileEnum": creator = new BaseUserControl(_object, _style); return(true); // Battle Breakers case "WExpGenericAccountItemDefinition": case "WExpGearAccountItemDefinition": case "WExpHQWorkerLodgesDefinition": case "WExpPersonalEventDefinition": case "WExpUpgradePotionDefinition": case "WExpAccountRewardDefinition": case "WExpHQBlacksmithDefinition": case "WExpHQSecretShopDefinition": case "WExpHQMonsterPitDefinition": case "WExpHQHeroTowerDefinition": case "WExpVoucherItemDefinition": case "WExpTreasureMapDefinition": case "WExpHammerChestDefinition": case "WExpHQWorkshopDefinition": case "WExpUnlockableDefinition": case "WExpHQSmelterDefinition": case "WExpContainerDefinition": case "WExpCharacterDefinition": case "WExpHQMarketDefinition": case "WExpGiftboxDefinition": case "WExpStandInDefinition": case "WExpRegionDefinition": case "WExpHQMineDefinition": case "WExpXpBookDefinition": case "WExpTokenDefinition": case "WExpItemDefinition": case "WExpZoneDefinition": creator = new BaseBreakersIcon(_object, EIconStyle.Default); return(true); // Spellbreak case "GTargetedTeleportActiveSkill": case "GChronomasterV2ActiveSkill": case "GShadowstepActiveSkill": case "GGatewayActiveSkill": case "GStealthActiveSkill": case "GFeatherActiveSkill": case "GCosmeticDropTrail": case "GFlightActiveSkill": case "GCosmeticRunTrail": case "GCosmeticArtifact": case "GCosmeticTriumph": case "GWolfsbloodSkill": case "GDashActiveSkill": case "GCharacterPerk": case "GCosmeticTitle": case "GCosmeticBadge": case "GRMTStoreOffer": case "GCosmeticEmote": case "GCosmeticCard": case "GCosmeticSkin": case "GStoreOffer": case "GAccolade": case "GRuneItem": case "GQuest": creator = new BaseSpellIcon(_object, EIconStyle.Default); return(true); case "GLeagueTier": creator = new BaseLeague(_object, EIconStyle.Default); return(true); case "GLeagueDivision": creator = new BaseDivision(_object, EIconStyle.Default); return(true); default: creator = null; return(false); } }
public static void ProcessQuest(Mobile from, BaseQuest quest) { if(from == null || quest == null) return; Type type = quest.GetType(); if(PointsEntry.Entries.ContainsKey(type)) AwardPoints(from, PointsEntry.Entries[type].TopAttackerPoints, true); }
public MondainQuestGump( BaseQuest quest ) : this( quest, Section.Description, true ) { }
public static bool FirstChainQuest( BaseQuest quest, object quester ) { Type[] quests = null; if ( quester is MondainQuester ) { MondainQuester mQuester = (MondainQuester) quester; quests = mQuester.Quests; } else if ( quester is BaseQuestItem ) { BaseQuestItem iQuester = (BaseQuestItem) quester; quests = iQuester.Quests; } if ( quests != null ) { for ( int i = 0; i < quests.Length; i ++ ) { if ( quests[ i ] == quest.GetType() ) return true; } } return false; }
public MLQuestLogGump( BaseQuest quest ) : base(75, 25) { m_Quest = quest; Intern( "" ); AddPage( 1 ); Closable = false; AddImageTiled( 50, 20, 400, 400, 0x1404 ); AddImageTiled( 50, 29, 30, 390, 0x28DC ); AddImageTiled( 34, 140, 17, 279, 0x242F ); AddImage( 48, 135, 0x28AB ); AddImage( -16, 285, 0x28A2 ); AddImage( 0, 10, 0x28B5 ); AddImage( 25, 0, 0x28B4 ); AddImageTiled( 83, 15, 350, 15, 0x280A ); AddImage( 34, 419, 0x2842 ); AddImage( 442, 419, 0x2840 ); AddImageTiled( 51, 419, 392, 17, 0x2775 ); AddImageTiled( 415, 29, 44, 390, 0xA2D ); AddImageTiled( 415, 29, 30, 390, 0x28DC ); AddLabelIntern( 100, 50, 0x481, 0 ); AddImage( 370, 50, 0x589 ); AddImage( 379, 60, 0x15A9 ); AddImage( 425, 0, 0x28C9 ); AddImage( 90, 33, 0x232D ); AddHtmlLocalized( 130, 45, 270, 16, 1046026, 0xFFFFFF, false, false ); // Quest Log AddImageTiled( 130, 65, 175, 1, 0x238D ); AddButton( 95, 395, 0x2EF5, 0x2EF7, 1, GumpButtonType.Reply, 0 ); // Resign AddButton( 313, 395, 0x2EEC, 0x2EEE, 2, GumpButtonType.Reply, 0 ); // Okay if ( m_Quest.Failed ) AddHtmlLocalized( 160, 80, 250, 16, 500039, 0x3C00, false, false ); // Failed! AddHtmlLocalized( 130, 68, 220, 48, 1114513, String.Format( "#{0}", quest.Title.ToString() ), 0x2710, false, false ); if ( m_Quest.ChainID != QuestChain.None ) AddHtmlLocalized( 98, 140, 312, 16, 1075024, 0x2710, false, false ); // Description (quest chain) else AddHtmlLocalized( 98, 140, 312, 16, 1072202, 0x2710, false, false ); // Description AddHtmlObject( 98, 156, 312, 180, quest.Description, LightGreen, false, true ); AddButton( 275, 370, 0x2EE9, 0x2EEB, 0, GumpButtonType.Page, 2 ); // Continue AddPage( 2 ); Closable = false; AddImageTiled( 50, 20, 400, 400, 0x1404 ); AddImageTiled( 50, 29, 30, 390, 0x28DC ); AddImageTiled( 34, 140, 17, 279, 0x242F ); AddImage( 48, 135, 0x28AB ); AddImage( -16, 285, 0x28A2 ); AddImage( 0, 10, 0x28B5 ); AddImage( 25, 0, 0x28B4 ); AddImageTiled( 83, 15, 350, 15, 0x280A ); AddImage( 34, 419, 0x2842 ); AddImage( 442, 419, 0x2840 ); AddImageTiled( 51, 419, 392, 17, 0x2775 ); AddImageTiled( 415, 29, 44, 390, 0xA2D ); AddImageTiled( 415, 29, 30, 390, 0x28DC ); AddLabelIntern( 100, 50, 0x481, 0 ); AddImage( 370, 50, 0x589 ); AddImage( 379, 60, 0x15A9 ); AddImage( 425, 0, 0x28C9 ); AddImage( 90, 33, 0x232D ); AddHtmlLocalized( 130, 45, 270, 16, 1046026, 0xFFFFFF, false, false ); // Quest Log AddImageTiled( 130, 65, 175, 1, 0x238D ); AddButton( 95, 395, 0x2EF5, 0x2EF7, 1, GumpButtonType.Reply, 0 ); AddButton( 313, 395, 0x2EEC, 0x2EEE, 2, GumpButtonType.Reply, 0 ); AddHtmlLocalized( 130, 68, 220, 48, 1114513, String.Format( "#{0}", quest.Title.ToString() ), 0x2710, false, false ); AddButton( 275, 370, 0x2EE9, 0x2EEB, 0, GumpButtonType.Page, 2 ); AddButton( 130, 370, 0x2EEF, 0x2EF1, 0, GumpButtonType.Page, 1 ); AddHtmlLocalized( 98, 140, 312, 16, 1049073, 0x2710, false, false ); // Objective: if ( m_Quest.AllObjectives ) AddHtmlLocalized( 98, 156, 312, 16, 1072208, 0x2710, false, false ); // All of the following else AddHtmlLocalized( 98, 156, 312, 16, 1072209, 0x2710, false, false ); // Only one of the following int offset = 172; int internidx = 0; for ( int i = 0; i < m_Quest.Objectives.Count; i++ ) { int field = 1; BaseObjective objective = m_Quest.Objectives[i]; if ( objective is ObtainObjective ) { ObtainObjective obtain = (ObtainObjective) objective; string returnTo = ReturnTo(); AddKRHtmlLocalized( 0, 0, 0, 0, -3, false, false ); /*1*/ Intern( obtain.MaxProgress.ToString() ); /*2*/ Intern( obtain.Name ); /*3*/ Intern( obtain.Timed ? obtain.Seconds.ToString() : "" ); /*4*/ Intern( "" ); /*5*/ Intern( "" ); /*6*/ Intern( obtain.CurProgress.ToString() ); /*7*/ Intern( returnTo ); AddHtmlLocalized( 98, offset, 350, 16, 1072205, 0x15F90, false, false ); // Obtain AddLabelIntern( 143, offset, 0x481, 1 + ( internidx * 7 ) ); AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); AddLabelIntern( 173, offset, 0x481, 2 + ( internidx * 7 ) ); if ( obtain.Image > 0 ) AddItem( 350, offset, obtain.Image ); // Image offset += 16; AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); if ( obtain.Timed ) { AddHtmlLocalized( 103, offset, 120, 16, 1062379, 0x15F90, false, false ); // Est. time remaining: AddLabelIntern( 223, offset, 0x481, 3 + ( internidx * 7 ) ); // %est. time remaining% offset += 16; } else { AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); AddKRLabel( 0, 0, 0, 0, 3 + ( internidx * 7 ), false, false ); } AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); AddKRLabel( 0, 0, 0, 0, 4 + ( internidx * 7 ), false, false ); AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); AddKRLabel( 0, 0, 0, 0, 5 + ( internidx * 7 ), false, false ); AddHtmlLocalized( 103, offset, 120, 16, 3000087, 0x15F90, false, false ); // Total AddLabelIntern( 223, offset, 0x481, 6 + ( internidx * 7 ) ); offset += 16; AddHtmlLocalized( 103, offset, 120, 16, 1074782, 0x15F90, false, false ); // Return to AddLabelIntern( 223, offset, 0x481, 7 + ( internidx * 7 ) ); offset += 16; } else if ( objective is SlayObjective ) { SlayObjective slay = (SlayObjective) objective; int internOffset = internidx * 8; string returnTo = ReturnTo(); AddKRHtmlLocalized( 0, 0, 0, 0, -2, false, false ); /*1*/ Intern( slay.MaxProgress.ToString() ); /*2*/ Intern( slay.Name ); /*3*/ Intern( slay.Timed ? slay.Seconds.ToString() : "" ); /*4*/ Intern( slay.Region != null ? slay.Region.Name : "" ); /*5*/ Intern( "" ); /*6*/ Intern( "" ); /*7*/ Intern( slay.CurProgress.ToString() ); /*8*/ Intern( returnTo ); AddHtmlLocalized( 98, offset, 312, 16, 1072204, 0x15F90, false, false ); // Slay AddLabelIntern( 133, offset, 0x481, 1 + internOffset ); // Amount AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); AddLabelIntern( slay.MaxProgress > 10 ? 163 : 148, offset, 0x481, 2 + internOffset ); // Type offset += 16; if ( slay.Timed ) { AddHtmlLocalized( 103, offset, 120, 16, 1062379, 0x15F90, false, false ); // Est. time remaining: AddLabelIntern( 223, offset, 0x481, 3 + internOffset ); // %est. time remaining% offset += 16; } else { AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); AddKRLabel( 0, 0, 0, 0, 3 + internOffset, false, false ); } if ( slay.Region != null ) { AddHtmlLocalized( 103, offset, 312, 20, 1018327, 0x15F90, false, false ); // Location AddLabelIntern( 223, offset, 0x481, 4 + internOffset ); // %est. time remaining% offset += 16; } else { AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); AddKRLabel( 0, 0, 0, 0, 4 + internOffset, false, false ); } AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); AddKRLabel( 0, 0, 0, 0, 5 + internOffset, false, false ); AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); AddKRLabel( 0, 0, 0, 0, 6 + internOffset, false, false ); AddHtmlLocalized( 103, offset, 120, 16, 3000087, 0x15F90, false, false ); // Total AddLabelIntern( 223, offset, 0x481, 7 + internOffset ); offset += 16; AddHtmlLocalized( 103, offset, 120, 16, 1074782, 0x15F90, false, false ); // Return to AddLabelIntern( 223, offset, 0x481, 8 + internOffset ); offset += 16; } else if ( objective is DeliverObjective ) { DeliverObjective deliver = (DeliverObjective) objective; int internOffset = internidx * 5; AddKRHtmlLocalized( 0, 0, 0, 0, -5, false, false ); AddHtmlLocalized( 98, offset, 312, 16, 1072207, 0x15F90, false, false ); // Deliver Intern( deliver.MaxProgress.ToString() ); Intern( deliver.DeliveryName ); AddLabelIntern( 143, offset, 0x481, internOffset + 1 ); AddLabelIntern( 158, offset, 0x481, internOffset + 2 ); offset += 16; AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); if ( deliver.Timed ) { AddHtmlLocalized( 103, offset, 120, 16, 1062379, 0x15F90, false, false ); // Est. time remaining: Intern( deliver.Seconds.ToString() ); AddLabelIntern( 223, offset, 0x481, internOffset + 3 ); // %est. time remaining% offset += 16; } else { AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); AddKRLabel( 0, 0, 0, 0, internOffset + 3, false, false ); Intern( "" ); } AddHtmlLocalized( 103, offset, 120, 16, 1072379, 0x15F90, false, false ); // Deliver to Intern( deliver.DestName ); AddLabelIntern( 223, offset, 0x481, internOffset + 4 ); offset += 16; AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); AddKRLabel( 0, 0, 0, 0, internOffset + 5, false, false ); Intern( "" ); } else if ( objective is EscortObjective ) { EscortObjective escort = (EscortObjective) objective; AddKRHtmlLocalized( 0, 0, 0, 0, -4, false, false ); AddHtmlLocalized( 98, offset, 312, 16, 1072206, 0x15F90, false, false ); // Escort to AddHtmlObject( 173, offset, 312, 20, escort.Region.Name, 0xFFFFFF, false, false ); offset += 16; if ( escort.Timed ) { AddHtmlLocalized( 103, offset, 120, 16, 1062379, 0x15F90, false, false ); // Est. time remaining: Intern( escort.Seconds.ToString() ); AddLabelIntern( 223, offset, 0x481, ( internidx * 3 ) + ( field++ ) ); // %est. time remaining% offset += 16; } for ( int j = field; j < 3; j++ ) { AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false ); AddKRLabel( 0, 0, 0, 0, j, false, false ); Intern( "" ); } } else if ( objective is ApprenticeObjective ) { ApprenticeObjective apprentice = (ApprenticeObjective) objective; AddKRHtmlLocalized( 0, 0, 0, 0, -9, false, false ); AddHtmlLocalized( 98, offset, 200, 16, 1077485, "#" + ( 1044060 + (int) apprentice.Skill ) + "\t" + apprentice.MaxProgress, 0x15F90, false, false ); // Increase ~1_SKILL~ to ~2_VALUE~ offset += 16; } else if ( objective is BaseBardObjective ) { BaseBardObjective bardObjective = (BaseBardObjective) objective; AddHtmlLocalized( 98, offset, 200, 16, bardObjective.Cliloc, 0x15F90, false, false ); offset += 16; } internidx++; } AddButton( 275, 370, 0x2EE9, 0x2EEB, 0, GumpButtonType.Page, 3 ); AddPage( 3 ); Closable = false; AddImageTiled( 50, 20, 400, 400, 0x1404 ); AddImageTiled( 50, 29, 30, 390, 0x28DC ); AddImageTiled( 34, 140, 17, 279, 0x242F ); AddImage( 48, 135, 0x28AB ); AddImage( -16, 285, 0x28A2 ); AddImage( 0, 10, 0x28B5 ); AddImage( 25, 0, 0x28B4 ); AddImageTiled( 83, 15, 350, 15, 0x280A ); AddImage( 34, 419, 0x2842 ); AddImage( 442, 419, 0x2840 ); AddImageTiled( 51, 419, 392, 17, 0x2775 ); AddImageTiled( 415, 29, 44, 390, 0xA2D ); AddImageTiled( 415, 29, 30, 390, 0x28DC ); AddLabelIntern( 100, 50, 0x481, 0 ); AddImage( 370, 50, 0x589 ); AddImage( 379, 60, 0x15A9 ); AddImage( 425, 0, 0x28C9 ); AddImage( 90, 33, 0x232D ); AddHtmlLocalized( 130, 45, 270, 16, 1046026, 0xFFFFFF, false, false ); // Quest Log AddImageTiled( 130, 65, 175, 1, 0x238D ); AddButton( 95, 395, 0x2EF5, 0x2EF7, 1, GumpButtonType.Reply, 0 ); AddButton( 313, 395, 0x2EEC, 0x2EEE, 2, GumpButtonType.Reply, 0 ); AddHtmlLocalized( 130, 68, 220, 48, 1114513, String.Format( "#{0}", quest.Title.ToString() ), 0x2710, false, false ); AddButton( 130, 370, 0x2EEF, 0x2EF1, 0, GumpButtonType.Page, 2 ); AddHtmlLocalized( 98, 140, 312, 16, 1072201, 0x2710, false, false ); // Reward if ( quest.Rewards.Count == 1 ) { BaseReward reward = m_Quest.Rewards[0]; AddImage( 105, 163, 0x4B9 ); AddHtmlObject( 133, 162, 280, 32, reward.Name, 0x15F90, false, false ); } else { AddHtmlLocalized( 98, 156, 312, 16, 1072208, 0x2710, false, false ); // All of the following for ( int n = 0; n < quest.Rewards.Count; ++n ) { BaseReward reward = m_Quest.Rewards[n]; AddImage( 105, 179 + ( n * 16 ), 0x4B9 ); AddHtmlObject( 133, 178 + ( n * 16 ), 280, 32, reward.Name, 0x15F90, false, false ); } } }
protected override void OnTarget(Mobile from, object targeted) { from.RevealingAction(); if (targeted is BaseCreature || (from is BaseCreature && ((BaseCreature)from).CanProvoke)) { BaseCreature creature = targeted as BaseCreature; Mobile target = targeted as Mobile; bool questTargets = QuestTargets(creature, from); if (!m_Instrument.IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1062488); // The instrument you are trying to play is no longer in your backpack! } else if (m_Creature.Unprovokable) { from.SendLocalizedMessage(1049446); // You have no chance of provoking those creatures. } else if (creature != null && creature.Unprovokable && !(creature is DemonKnight) && !questTargets) { from.SendLocalizedMessage(1049446); // You have no chance of provoking those creatures. } else if (m_Creature.Map != target.Map || !m_Creature.InRange(target, BaseInstrument.GetBardRange(from, SkillName.Provocation))) { from.SendLocalizedMessage(1049450); // The creatures you are trying to provoke are too far away from each other for your music to have an effect. } else if (m_Creature != target) { from.NextSkillTime = Core.TickCount + 10000; double diff = ((m_Instrument.GetDifficultyFor(m_Creature) + m_Instrument.GetDifficultyFor(target)) * 0.5) - 5.0; double music = from.Skills[SkillName.Musicianship].Value; int masteryBonus = 0; if (from is PlayerMobile) { masteryBonus = Spells.SkillMasteries.BardSpell.GetMasteryBonus((PlayerMobile)from, SkillName.Provocation); } if (masteryBonus > 0) { diff -= (diff * ((double)masteryBonus / 100)); } diff += (XmlMobFactions.GetScaledFaction(from, m_Creature, -25, 25, -0.001) + XmlMobFactions.GetScaledFaction(from, target, -25, 25, -0.001)) * 0.5; if (music > 100.0) { diff -= (music - 100.0) * 0.5; } if (questTargets || from.CanBeHarmful(m_Creature, true) && from.CanBeHarmful(target, true)) { if (!BaseInstrument.CheckMusicianship(from)) { from.NextSkillTime = Core.TickCount + (10000 - ((masteryBonus / 5) * 1000)); from.SendLocalizedMessage(500612); // You play poorly, and there is no effect. m_Instrument.PlayInstrumentBadly(from); m_Instrument.ConsumeUse(from); } else { //from.DoHarmful( m_Creature ); //from.DoHarmful( creature ); if (!from.CheckTargetSkill(SkillName.Provocation, target, diff - 25.0, diff + 25.0)) { from.NextSkillTime = Core.TickCount + (10000 - ((masteryBonus / 5) * 1000)); from.SendLocalizedMessage(501599); // Your music fails to incite enough anger. m_Instrument.PlayInstrumentBadly(from); m_Instrument.ConsumeUse(from); } else { from.SendLocalizedMessage(501602); // Your music succeeds, as you start a fight. m_Instrument.PlayInstrumentWell(from); m_Instrument.ConsumeUse(from); m_Creature.Provoke(from, target, true); #region Bard Mastery Quest if (questTargets) { BaseQuest quest = QuestHelper.GetQuest((PlayerMobile)from, typeof(IndoctrinationOfABattleRouserQuest)); if (quest != null) { foreach (BaseObjective objective in quest.Objectives) { objective.Update(creature); } } } #endregion } } } } else { from.SendLocalizedMessage(501593); // You can't tell someone to attack themselves! } } else { from.SendLocalizedMessage(501589); // You can't incite that! } }
public MondainQuestGump( BaseQuest quest, Section section, bool offer ) : this( null, quest, section, offer, false ) { }
public MondainQuestGump( BaseQuest quest, Section section, bool offer, bool completed ) : this( null, quest, section, offer, completed ) { }
public MondainQuestGump( PlayerMobile owner, BaseQuest quest, Section section, bool offer, bool completed ) : this( owner, quest, section, offer, completed, null ) { }
void AddQuest(BaseQuest quest) { m_QuestDict.Add(quest.id, quest); quest.StartNewQuest(); }
public static void HandleQuest(Mobile from, BaseQuest quest) { if(PointsEntry.Entries.ContainsKey(quest.GetType())) ProcessQuest(from, quest); }
public int GetQuestProgress(int idx) { BaseQuest quest = m_QuestDict[idx]; return(quest.progress); }
public QuestEventArgs(BaseQuest quest) : base() { Quest = quest; }
public override void OnDoubleClick(Mobile m) { if (m is PlayerMobile && m.InRange(Location, 5)) { GoingGumshoeQuest quest = QuestHelper.GetQuest <GoingGumshoeQuest>((PlayerMobile)m); if (quest != null && quest.Completed) { quest.GiveRewards(); BaseQuest newquest = QuestHelper.RandomQuest((PlayerMobile)m, new Type[] { typeof(GoingGumshoeQuest2) }, this); if (newquest != null) { m.SendGump(new MondainQuestGump(newquest)); } } else { GoingGumshoeQuest2 quest2 = QuestHelper.GetQuest <GoingGumshoeQuest2>((PlayerMobile)m); if (quest2 != null) { if (quest2.IsComplete) { quest2.Objectives[0].CurProgress++; quest2.GiveRewards(); // TODO: Does this quest end here? BaseQuest newquest = QuestHelper.RandomQuest((PlayerMobile)m, new Type[] { typeof(GoingGumshoeQuest3) }, this); if (newquest != null) { m.SendGump(new MondainQuestGump(newquest)); } } else { m.SendGump(new MondainQuestGump(quest2, MondainQuestGump.Section.InProgress, false)); quest2.InProgress(); } } else { GoingGumshoeQuest3 quest3 = QuestHelper.GetQuest <GoingGumshoeQuest3>((PlayerMobile)m); if (quest3 != null) { if (quest3.IsComplete) { quest3.Objectives[0].CurProgress++; quest3.GiveRewards(); // TODO: Does this quest end here? BaseQuest newquest = QuestHelper.RandomQuest((PlayerMobile)m, new Type[] { typeof(GoingGumshoeQuest4) }, this); if (newquest != null) { m.SendGump(new MondainQuestGump(newquest)); } } else { m.SendGump(new MondainQuestGump(quest3, MondainQuestGump.Section.InProgress, false)); quest3.InProgress(); } } else { GoingGumshoeQuest4 quest4 = QuestHelper.GetQuest <GoingGumshoeQuest4>((PlayerMobile)m); if (quest4 != null && !quest4.IsComplete) { m.SendGump(new MondainQuestGump(quest4, MondainQuestGump.Section.InProgress, false)); quest4.InProgress(); } else if (quest4 == null) { SayTo(m, 1080107); // I'm sorry, I have nothing for you at this time. } } } } } }
public QAndAGump(Mobile owner, BaseQuest quest) : base(160, 100) { m_From = owner; m_Quest = quest; Closable = false; Disposable = false; foreach (BaseObjective objective in quest.Objectives) { if (objective is QuestionAndAnswerObjective answerObjective) { m_Objective = answerObjective; break; } } if (m_Objective == null) { return; } QuestionAndAnswerEntry entry = m_Objective.GetRandomQandA(); if (entry == null) { return; } AddImage(0, 0, 0x4CC); AddImage(40, 78, 0x5F); AddImageTiled(49, 87, 301, 3, 0x60); AddImage(350, 78, 0x61); object answer = entry.Answers[Utility.Random(entry.Answers.Length)]; List <object> selections = new List <object>(entry.WrongAnswers); m_Index = Utility.Random(selections.Count); //Gets correct answer selections.Insert(m_Index, answer); AddHtmlLocalized(30, 40, 340, 36, entry.Question, 0x0, false, false); //question for (int i = 0; i < selections.Count; i++) { object selection = selections[i]; AddImage(50, 112 + (i * 32), 0x8B0); AddButton(49, 111 + (i * 32), 2224, 2224, selection == answer ? 1 : 0, GumpButtonType.Reply, 0); if (selection is int iSelection) { AddHtmlLocalized(80, 109 + (i * 32), 275, 36, iSelection, 0x0, false, false); } else { AddHtml(80, 109 + (i * 32), 275, 36, string.Format("<BASEFONT COLOR=#{0:X6}>{1}</BASEFONT>", 0x0, selection), false, false); } } }
public QAndAGump(Mobile owner, BaseQuest quest) : base(50, 50) { m_From = owner; m_Quest = quest; this.Closable = false; foreach (BaseObjective objective in quest.Objectives) { if (objective is QuestionAndAnswerObjective) { m_Objective = (QuestionAndAnswerObjective)objective; break; } } if (m_Objective == null) { return; } QuestionAndAnswerEntry entry = m_Objective.GetRandomQandA(); if (entry == null) { return; } AddPage(0); int question = entry.Question; object answer = entry.Answers[Utility.Random(entry.Answers.Length)]; List <object> selections = new List <object>(entry.WrongAnswers); m_Index = Utility.Random(selections.Count); //Gets correct answer selections.Insert(m_Index, answer); AddBackground(0, 0, 305, 145 + (selections.Count * 35), 9270); AddHtmlLocalized(104, 25, 200, 26, (int)m_Quest.Title, FontColor, false, false); //La Insep Om AddHtmlLocalized(20, 55, 250, 36, question, FontColor, false, false); //question int y = 105; for (int i = 0; i < selections.Count; i++) { //AddButton(82, y, 2152, 2153, i + 1, GumpButtonType.Reply, 0); AddRadio(20, y, 2152, 2153, false, i + 1); object selection = selections[i]; if (selection is int) { AddHtmlLocalized(70, y - 2, 200, 18, (int)selection, FontColor, false, false); } else { AddHtml(70, y - 2, 200, 18, String.Format("<BASEFONT COLOR=#{0:X6}>{1}</BASEFONT>", FontColor, selections[i]), false, false); } y += 35; } AddButton(129, y, 2074, 2076, 1, GumpButtonType.Reply, 0); }
protected override void OnTarget(Mobile from, object targeted) { from.RevealingAction(); if (!(targeted is Mobile)) { from.SendLocalizedMessage(1049528); // You cannot calm that! } else if (!m_Instrument.IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1062488); // The instrument you are trying to play is no longer in your backpack! } else { m_SetSkillTime = false; int masteryBonus = 0; if (from is PlayerMobile) { masteryBonus = Spells.SkillMasteries.BardSpell.GetMasteryBonus((PlayerMobile)from, SkillName.Peacemaking); } if (targeted == from) { // Standard mode : reset combatants for everyone in the area if (from.Player && !BaseInstrument.CheckMusicianship(from)) { from.SendLocalizedMessage(500612); // You play poorly, and there is no effect. m_Instrument.PlayInstrumentBadly(from); m_Instrument.ConsumeUse(from); from.NextSkillTime = Core.TickCount + (10000 - ((masteryBonus / 5) * 1000)); } else if (!from.CheckSkill(SkillName.Peacemaking, 0.0, 120.0)) { from.SendLocalizedMessage(500613); // You attempt to calm everyone, but fail. m_Instrument.PlayInstrumentBadly(from); m_Instrument.ConsumeUse(from); from.NextSkillTime = Core.TickCount + (10000 - ((masteryBonus / 5) * 1000)); } else { from.NextSkillTime = Core.TickCount + 5000; m_Instrument.PlayInstrumentWell(from); m_Instrument.ConsumeUse(from); Map map = from.Map; if (map != null) { int range = BaseInstrument.GetBardRange(from, SkillName.Peacemaking); bool calmed = false; IPooledEnumerable eable = from.GetMobilesInRange(range); foreach (Mobile m in eable) { if ((m is BaseCreature && ((BaseCreature)m).Uncalmable) || (m is BaseCreature && ((BaseCreature)m).AreaPeaceImmune) || m == from || !from.CanBeHarmful(m, false)) { continue; } calmed = true; m.SendLocalizedMessage(500616); // You hear lovely music, and forget to continue battling! m.Combatant = null; m.Warmode = false; if (m is BaseCreature && !((BaseCreature)m).BardPacified) { ((BaseCreature)m).Pacify(from, DateTime.UtcNow + TimeSpan.FromSeconds(1.0)); } } eable.Free(); if (!calmed) { from.SendLocalizedMessage(1049648); // You play hypnotic music, but there is nothing in range for you to calm. } else { from.SendLocalizedMessage(500615); // You play your hypnotic music, stopping the battle. } } } } else { // Target mode : pacify a single target for a longer duration Mobile targ = (Mobile)targeted; if (!from.CanBeHarmful(targ, false)) { from.SendLocalizedMessage(1049528); m_SetSkillTime = true; } else if (targ is BaseCreature && ((BaseCreature)targ).Uncalmable) { from.SendLocalizedMessage(1049526); // You have no chance of calming that creature. m_SetSkillTime = true; } else if (targ is BaseCreature && ((BaseCreature)targ).BardPacified) { from.SendLocalizedMessage(1049527); // That creature is already being calmed. m_SetSkillTime = true; } else if (from.Player && !BaseInstrument.CheckMusicianship(from)) { from.SendLocalizedMessage(500612); // You play poorly, and there is no effect. from.NextSkillTime = Core.TickCount + 5000; m_Instrument.PlayInstrumentBadly(from); m_Instrument.ConsumeUse(from); } else { double diff = m_Instrument.GetDifficultyFor(targ) - 10.0; double music = from.Skills[SkillName.Musicianship].Value; if (music > 100.0) { diff -= (music - 100.0) * 0.5; } if (masteryBonus > 0) { diff -= (diff * ((double)masteryBonus / 100)); } if (!from.CheckTargetSkill(SkillName.Peacemaking, targ, diff - 25.0, diff + 25.0)) { from.SendLocalizedMessage(1049531); // You attempt to calm your target, but fail. m_Instrument.PlayInstrumentBadly(from); m_Instrument.ConsumeUse(from); from.NextSkillTime = Core.TickCount + (10000 - ((masteryBonus / 5) * 1000)); } else { m_Instrument.PlayInstrumentWell(from); m_Instrument.ConsumeUse(from); from.NextSkillTime = Core.TickCount + (5000 - ((masteryBonus / 5) * 1000)); if (targ is BaseCreature) { BaseCreature bc = (BaseCreature)targ; from.SendLocalizedMessage(1049532); // You play hypnotic music, calming your target. targ.Combatant = null; targ.Warmode = false; double seconds = 100 - (diff / 1.5); if (seconds > 120) { seconds = 120; } else if (seconds < 10) { seconds = 10; } bc.Pacify(from, DateTime.UtcNow + TimeSpan.FromSeconds(seconds)); #region Bard Mastery Quest if (from is PlayerMobile) { BaseQuest quest = QuestHelper.GetQuest((PlayerMobile)from, typeof(TheBeaconOfHarmonyQuest)); if (quest != null) { foreach (BaseObjective objective in quest.Objectives) { objective.Update(bc); } } } #endregion } else { from.SendLocalizedMessage(1049532); // You play hypnotic music, calming your target. targ.SendLocalizedMessage(500616); // You hear lovely music, and forget to continue battling! targ.Combatant = null; targ.Warmode = false; } } } } } }
public static bool Delayed( PlayerMobile player, BaseQuest quest, bool message ) { List<QuestRestartInfo> doneQuests = player.DoneQuests; for ( int i = doneQuests.Count - 1; i >= 0; i -- ) { QuestRestartInfo restartInfo = doneQuests[ i ]; if ( restartInfo.QuestType == quest.GetType() ) { if ( quest.DoneOnce ) { if ( message && quest.StartingMobile != null ) quest.StartingMobile.Say( 1075454 ); // I can not offer you the quest again. return false; } DateTime endTime = restartInfo.RestartTime; if ( DateTime.Now < endTime ) return false; if ( quest.RestartDelay > TimeSpan.Zero ) doneQuests.RemoveAt( i ); return true; } } return true; }
public override bool SpecialHarvest(Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc) { if (from is PlayerMobile player) { QuestSystem qs = player.Quest; if (qs is CollectorQuest) { QuestObjective obj = qs.FindObjective(typeof(FishPearlsObjective)); if (obj != null && !obj.Completed) { if (Utility.RandomDouble() < 0.5) { player.SendLocalizedMessage(1055086, "", 0x59); // You pull a shellfish out of the water, and find a rainbow pearl inside of it. obj.CurProgress++; } else { player.SendLocalizedMessage(1055087, "", 0x2C); // You pull a shellfish out of the water, but it doesn't have a rainbow pearl. } return(true); } } if (from.Region.IsPartOf("Underworld")) { for (var index = 0; index < player.Quests.Count; index++) { BaseQuest quest = player.Quests[index]; if (quest is SomethingFishy && Utility.RandomDouble() < 0.1) { Item red = new RedHerring(); from.AddToBackpack(red); player.SendLocalizedMessage(1095047, "", 0x23); // You pull a shellfish out of the water, but it doesn't have a rainbow pearl. return(true); } if (quest is ScrapingtheBottom && Utility.RandomDouble() < 0.1) { Item mug = new MudPuppy(); from.AddToBackpack(mug); player.SendLocalizedMessage(1095064, "", 0x23); // You pull a shellfish out of the water, but it doesn't have a rainbow pearl. return(true); } } } #region High Seas Charydbis if (tool is FishingPole pole && CharydbisSpawner.SpawnInstance != null && CharydbisSpawner.SpawnInstance.IsSummoned) { Item oracle = from.Backpack.FindItemByType(typeof(OracleOfTheSea)); CharydbisSpawner sp = CharydbisSpawner.SpawnInstance; if (oracle != null && sp != null) { if (from.Map != sp.Map) { from.SendLocalizedMessage(1150861); //Charybdis have never been seen in these waters, try somewhere else. } else if (pole.BaitType == typeof(Charydbis) && from.Skills[SkillName.Fishing].Value >= 100) { if (sp.Charydbis == null && !sp.HasSpawned && sp.CurrentLocation.Contains(loc)) { Multis.BaseBoat boat = Multis.BaseBoat.FindBoatAt(from, from.Map); sp.SpawnCharydbis(from, loc, sp.Map, boat); sp.HasSpawned = true; pole.OnFishedHarvest(from, true); return(true); } if (sp.LastLocation.Contains(loc)) { from.SendLocalizedMessage(1150862); //The charybdis has moved on from this location, consult Oracle Of The Seas again. } } else { from.SendLocalizedMessage(1150858); //You see a few bubbles, but no charybdis. } } } #endregion } return(false); }
public QuestEventArgs( BaseQuest quest ) : base() { Quest = quest; }
public static void CompleteQuest( PlayerMobile from, BaseQuest quest ) { if ( quest == null ) return; for ( int i = 0; i < quest.Objectives.Count; i ++ ) { BaseObjective obj = quest.Objectives[ i ]; obj.Complete(); } from.SendLocalizedMessage( 1046258, null, 0x23 ); // Your quest is complete. from.SendGump( new MondainQuestGump( quest, MondainQuestGump.Section.Complete, false, true ) ); from.PlaySound( quest.CompleteSound ); quest.OnCompleted(); }
public BindingPole(BaseQuest quest) : base(5696) { m_Quest = quest; Movable = false; }
public static Type FindFirstChainQuest( BaseQuest quest ) { if ( quest == null ) return null; Type[] quests = null; if ( quest.Quester is MondainQuester ) { MondainQuester mQuester = (MondainQuester) quest.Quester; quests = mQuester.Quests; } else if ( quest.Quester is BaseQuestItem ) { BaseQuestItem iQuester = (BaseQuestItem) quest.Quester; quests = iQuester.Quests; } if ( quests != null ) { for ( int i = 0; i < quests.Length; i ++ ) { BaseQuest fQuest = Construct( quests[ i ] ) as BaseQuest; if ( fQuest != null && fQuest.ChainID == quest.ChainID ) return fQuest.GetType(); } } return null; }
public static bool TryDeleteItems( BaseQuest quest ) { if ( quest == null ) return false; for ( int i = 0; i < quest.Objectives.Count; i ++ ) { if ( quest.Objectives[ i ] is ObtainObjective ) { ObtainObjective obtain = (ObtainObjective) quest.Objectives[ i ]; if ( obtain.MaxProgress > CountQuestItems( quest.Owner, obtain.Obtain ) ) return false; } else if ( quest.Objectives[ i ] is DeliverObjective ) { DeliverObjective deliver = (DeliverObjective) quest.Objectives[ i ]; if ( quest.StartingItem != null ) continue; else if ( deliver.MaxProgress > CountQuestItems( quest.Owner, deliver.Delivery ) ) { quest.Owner.SendLocalizedMessage( 1074813 ); // You have failed to complete your delivery. deliver.Fail(); return false; } } } DeleteItems( quest ); return true; }
protected override void OnTarget(Mobile from, object target) { from.RevealingAction(); from.NextSkillTime = Core.TickCount + 1000; if (!m_Instrument.IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1062488); // The instrument you are trying to play is no longer in your backpack! } else if (target is Mobile) { Mobile targ = (Mobile)target; if (targ == from || (targ is BaseCreature && (((BaseCreature)targ).BardImmune || !from.CanBeHarmful(targ, false)) && ((BaseCreature)targ).ControlMaster != from)) { from.SendLocalizedMessage(1049535); // A song of discord would have no effect on that. } else if (m_Table.Contains(targ)) //Already discorded { from.SendLocalizedMessage(1049537); // Your target is already in discord. } else if (!targ.Player || (from is BaseCreature) && ((BaseCreature)from).CanDiscord) { double diff = m_Instrument.GetDifficultyFor(targ) - 10.0; double music = from.Skills[SkillName.Musicianship].Value; int masteryBonus = 0; diff += XmlMobFactions.GetScaledFaction(from, targ, -25, 25, -0.001); if (music > 100.0) { diff -= (music - 100.0) * 0.5; } if (from is PlayerMobile) { masteryBonus = Spells.SkillMasteries.BardSpell.GetMasteryBonus((PlayerMobile)from, SkillName.Discordance); } if (masteryBonus > 0) { diff -= (diff * ((double)masteryBonus / 100)); } if (!BaseInstrument.CheckMusicianship(from)) { from.SendLocalizedMessage(500612); // You play poorly, and there is no effect. m_Instrument.PlayInstrumentBadly(from); m_Instrument.ConsumeUse(from); } else if (from.CheckTargetSkill(SkillName.Discordance, target, diff - 25.0, diff + 25.0)) { from.SendLocalizedMessage(1049539); // You play the song surpressing your targets strength m_Instrument.PlayInstrumentWell(from); m_Instrument.ConsumeUse(from); ArrayList mods = new ArrayList(); int effect; double scalar; if (Core.AOS) { double discord = from.Skills[SkillName.Discordance].Value; if (discord > 100.0) { effect = -20 + (int)((discord - 100.0) / -2.5); } else { effect = (int)(discord / -5.0); } if (Core.SE && BaseInstrument.GetBaseDifficulty(targ) >= 160.0) { effect /= 2; } scalar = effect * 0.01; mods.Add(new ResistanceMod(ResistanceType.Physical, effect)); mods.Add(new ResistanceMod(ResistanceType.Fire, effect)); mods.Add(new ResistanceMod(ResistanceType.Cold, effect)); mods.Add(new ResistanceMod(ResistanceType.Poison, effect)); mods.Add(new ResistanceMod(ResistanceType.Energy, effect)); for (int i = 0; i < targ.Skills.Length; ++i) { if (targ.Skills[i].Value > 0) { mods.Add(new DefaultSkillMod((SkillName)i, true, targ.Skills[i].Value * scalar)); } } } else { effect = (int)(from.Skills[SkillName.Discordance].Value / -5.0); scalar = effect * 0.01; mods.Add(new StatMod(StatType.Str, "DiscordanceStr", (int)(targ.RawStr * scalar), TimeSpan.Zero)); mods.Add(new StatMod(StatType.Int, "DiscordanceInt", (int)(targ.RawInt * scalar), TimeSpan.Zero)); mods.Add(new StatMod(StatType.Dex, "DiscordanceDex", (int)(targ.RawDex * scalar), TimeSpan.Zero)); for (int i = 0; i < targ.Skills.Length; ++i) { if (targ.Skills[i].Value > 0) { mods.Add(new DefaultSkillMod((SkillName)i, true, targ.Skills[i].Value * scalar)); } } } DiscordanceInfo info = new DiscordanceInfo(from, targ, Math.Abs(effect), mods); info.m_Timer = Timer.DelayCall(TimeSpan.Zero, TimeSpan.FromSeconds(1.25), ProcessDiscordance, info); #region Bard Mastery Quest if (from is PlayerMobile) { BaseQuest quest = QuestHelper.GetQuest((PlayerMobile)from, typeof(WieldingTheSonicBladeQuest)); if (quest != null) { foreach (BaseObjective objective in quest.Objectives) { objective.Update(targ); } } } #endregion m_Table[targ] = info; } else { from.SendLocalizedMessage(1049540); // You fail to disrupt your target m_Instrument.PlayInstrumentBadly(from); m_Instrument.ConsumeUse(from); } from.NextSkillTime = Core.TickCount + 12000; } else { m_Instrument.PlayInstrumentBadly(from); } } else { from.SendLocalizedMessage(1049535); // A song of discord would have no effect on that. } }
public static void ActivateQuest( BaseQuest quest ) { Invoke( OnActivateQuest, new QuestEventArgs( quest ) ); }
public static void DeliverQuest( BaseQuest quest ) { Invoke( OnDeliverQuest, new QuestEventArgs( quest ) ); }
protected override void OnTarget(Mobile from, object target) { from.RevealingAction(); from.NextSkillTime = Core.TickCount + 1000; if (!m_Instrument.IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1062488); // The instrument you are trying to play is no longer in your backpack! } else if (target is Mobile) { Mobile targ = (Mobile)target; if (targ == from || !from.CanBeHarmful(targ, false) || (targ is BaseCreature && ((BaseCreature)targ).BardImmune && ((BaseCreature)targ).ControlMaster != from)) { from.SendLocalizedMessage(1049535); // A song of discord would have no effect on that. } else if (m_Table.ContainsKey(targ)) //Already discorded { from.SendLocalizedMessage(1049537); // Your target is already in discord. } else if (!targ.Player || (from is BaseCreature && ((BaseCreature)from).CanDiscord) || (targ.Player && from.Player && CanDiscordPVP(from))) { double diff = m_Instrument.GetDifficultyFor(targ) - 10.0; double music = from.Skills[SkillName.Musicianship].Value; if (from is BaseCreature) { music = 120.0; } int masteryBonus = 0; if (music > 100.0) { diff -= (music - 100.0) * 0.5; } if (from is PlayerMobile) { masteryBonus = Spells.SkillMasteries.BardSpell.GetMasteryBonus((PlayerMobile)from, SkillName.Discordance); } if (masteryBonus > 0) { diff -= (diff * ((double)masteryBonus / 100)); } if (!BaseInstrument.CheckMusicianship(from)) { from.SendLocalizedMessage(500612); // You play poorly, and there is no effect. m_Instrument.PlayInstrumentBadly(from); m_Instrument.ConsumeUse(from); } else if (from.CheckTargetSkill(SkillName.Discordance, target, diff - 25.0, diff + 25.0)) { from.SendLocalizedMessage(1049539); // You play the song surpressing your targets strength if (targ.Player) { targ.SendLocalizedMessage(1072061); // You hear jarring music, suppressing your strength. } m_Instrument.PlayInstrumentWell(from); m_Instrument.ConsumeUse(from); DiscordanceInfo info; if (targ.Player && from.Player) { info = new DiscordanceInfo(from, targ, 0, null, true, from.Skills.CurrentMastery == SkillName.Discordance ? 6 : 4); from.DoHarmful(targ); } else { ArrayList mods = new ArrayList(); int effect; double scalar; double discord = from.Skills[SkillName.Discordance].Value; effect = (int)Math.Max(-28.0, (discord / -4.0)); if (BaseInstrument.GetBaseDifficulty(targ) >= 160.0) { effect /= 2; } scalar = (double)effect / 100; mods.Add(new ResistanceMod(ResistanceType.Physical, effect)); mods.Add(new ResistanceMod(ResistanceType.Fire, effect)); mods.Add(new ResistanceMod(ResistanceType.Cold, effect)); mods.Add(new ResistanceMod(ResistanceType.Poison, effect)); mods.Add(new ResistanceMod(ResistanceType.Energy, effect)); for (int i = 0; i < targ.Skills.Length; ++i) { if (targ.Skills[i].Value > 0) { mods.Add(new DefaultSkillMod((SkillName)i, true, targ.Skills[i].Value * scalar)); } } info = new DiscordanceInfo(from, targ, Math.Abs(effect), mods); #region Bard Mastery Quest if (from is PlayerMobile) { BaseQuest quest = QuestHelper.GetQuest((PlayerMobile)from, typeof(WieldingTheSonicBladeQuest)); if (quest != null) { foreach (BaseObjective objective in quest.Objectives) { objective.Update(targ); } } } #endregion } info.m_Timer = Timer.DelayCall(TimeSpan.Zero, TimeSpan.FromSeconds(1.25), ProcessDiscordance, info); m_Table[targ] = info; from.NextSkillTime = Core.TickCount + (8000 - ((masteryBonus / 5) * 1000)); } else { if (from is BaseCreature && PetTrainingHelper.Enabled) { from.CheckSkill(SkillName.Discordance, 0, from.Skills[SkillName.Discordance].Cap); } from.SendLocalizedMessage(1049540); // You attempt to disrupt your target, but fail. if (targ.Player) { targ.SendLocalizedMessage(1072064); // You hear jarring music, but it fails to disrupt you. } m_Instrument.PlayInstrumentBadly(from); m_Instrument.ConsumeUse(from); from.NextSkillTime = Core.TickCount + 5000; } } else { m_Instrument.PlayInstrumentBadly(from); } } else { from.SendLocalizedMessage(1049535); // A song of discord would have no effect on that. } }
public static bool AnyRewards( BaseQuest quest ) { for ( int i = 0; i < quest.Rewards.Count; i ++ ) { BaseReward reward = quest.Rewards[ i ]; if ( reward.Type != null ) return true; } return false; }