public void SetQuestObjective(QuestObjective objective) { _questObjective = objective; _questObjective.OnObjectiveCompleted += ObjectiveComplete; SetDescription(objective); objective.OnDescriptionChanged += SetDescription; }
public override void OnTalk(PlayerMobile player, bool contextMenu) { QuestSystem qs = player.Quest; if (qs is UzeraanTurmoilQuest) { if (UzeraanTurmoilQuest.HasLostFertileDirt(player)) { FocusTo(player); qs.AddConversation(new LostFertileDirtConversation(false)); } else { QuestObjective obj = qs.FindObjective(typeof(FindDryadObjective)); if (obj != null && !obj.Completed) { FocusTo(player); Item fertileDirt = new QuestFertileDirt(); if (!player.PlaceInBackpack(fertileDirt)) { fertileDirt.Delete(); player.SendLocalizedMessage(1046260); // You need to clear some space in your inventory to continue with the quest. Come back here when you have more space in your inventory. } else { obj.Complete(); } } else if (contextMenu) { FocusTo(player); SayTo(player, 1049357); // I have nothing more for you at this time. } } } }
public override bool GetDestination(PlayerMobile player, ref Point3D loc, ref Map map) { QuestSystem qs = player.Quest; if (qs is EminosUndertakingQuest) { QuestObjective obj = qs.FindObjective(typeof(TakeWhiteTeleporterObjective)); if (obj != null) { if (X == 392 && Y == 802 && Z == -1) { loc = new Point3D(411, 1085, 0); obj.Complete(); QuestObjective obj1 = qs.FindObjective(typeof(WalkThroughHallwayObjective)); if (obj1 == null) { qs.AddConversation(new NarrowsConversation()); qs.AddObjective(new WalkThroughHallwayObjective()); } } if (X == 412 && Y == 1086 && Z == 0) { loc = new Point3D(391, 803, 0); } map = Map.Malas; return(true); } } return(false); }
public override void OnDoubleClick(Mobile from) { PlayerMobile player = from as PlayerMobile; if (player != null && player.InRange(GetWorldLocation(), 2)) { QuestSystem qs = player.Quest; if (qs is UzeraanTurmoilQuest) { QuestObjective obj = qs.FindObjective(typeof(GetDaemonBloodObjective)); if ((obj != null && !obj.Completed) || UzeraanTurmoilQuest.HasLostDaemonBlood(player)) { Item vial = new QuestDaemonBlood(); if (player.PlaceInBackpack(vial)) { player.SendLocalizedMessage(1049331, "", 0x22); // You take a vial of blood from the chest and put it in your pack. if (obj != null && !obj.Completed) { obj.Complete(); } } else { player.SendLocalizedMessage(1049338, "", 0x22); // You find a vial of blood, but can't pick it up because your pack is too full. Come back when you have more room in your pack. vial.Delete(); } return; } } } base.OnDoubleClick(from); }
public override void OnDoubleClick(Mobile from) { PlayerMobile player = from as PlayerMobile; if (player != null && player.InRange(GetWorldLocation(), 2)) { QuestSystem qs = player.Quest; if (qs is SweetChildOfMineQuest) { QuestObjective obj = qs.FindObjective(typeof(FindKeyObjective)); if ((obj != null && !obj.Completed) || SweetChildOfMineQuest.HasIguanaCoveKey(player)) { Item item = new IguanaCoveKey(); if (player.PlaceInBackpack(item)) { player.SendMessage("You take the key from the barrel and place it in your pack."); if (obj != null && !obj.Completed) { obj.Complete(); } } else { player.SendMessage("You find a key and have no immediate use for it. At least for now."); item.Delete(); } return; } } } base.OnDoubleClick(from); }
public override bool OnDragDrop(Mobile from, Item dropped) { PlayerMobile player = from as PlayerMobile; if (player != null) { QuestSystem qs = player.Quest; if (qs is SweetChildOfMineQuest) { if (dropped is IguanaCoveKey) { QuestObjective obj = qs.FindObjective(typeof(ReturnKeyObjective)); if (obj != null && !obj.Completed) { obj.Complete(); qs.AddConversation(new HandKeyToGaryConversation()); player.AddToBackpack(new IguanaCoveKey()); dropped.Delete(); } } else if (dropped is Baby) { QuestObjective obj = qs.FindObjective(typeof(ReturnBabyObjective)); if (obj != null && !obj.Completed) { obj.Complete(); qs.AddConversation(new RelievedGaryConversation()); dropped.Delete(); } } } } return(base.OnDragDrop(from, dropped)); }
public override bool SpecialHarvest(Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc) { if (from is PlayerMobile player) { var qs = player.Quest; if (qs is CollectorQuest) { QuestObjective obj = qs.FindObjective <FishPearlsObjective>(); if (obj?.Completed == false) { 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); } } } return(false); }
public void AcceptQuest() { questWindow.SetActive(false); questButton.SetActive(false); quest = questHandler.GetQuest(); if (quest.quest.GetQuestObjective().goalType == GoalType.ReportTo) { quest.quest.GetQuestObjective().reporter = GameObject.Find(quest.quest.GetQuestObjective().reporterName); Debug.Log("Report to: " + quest.quest.GetQuestObjective().reporter.name); QuestObjective objective = new QuestObjective(quest.quest.GetQuestObjective().reporter.name); QuestData acceptedQuest = new QuestData(quest.quest.name, quest.quest.description, quest.quest.expReward, quest.quest.goldReward, true, objective); for (int i = 0; i < PlayerStats.missionList.Count; i++) { if (PlayerStats.missionList[i].GetName().Equals(acceptedQuest.GetName())) { Debug.Log("You already have this quest"); Debug.Log(PlayerStats.missionList.Count); return; } } PlayerStats.missionList.Add(acceptedQuest); return; } QuestObjective objective2 = new QuestObjective(quest.quest.GetQuestObjective().requiredAmount, quest.quest.GetQuestObjective().goalType); QuestData acceptedQuest2 = new QuestData(quest.quest.name, quest.quest.description, quest.quest.expReward, quest.quest.goldReward, true, objective2); for (int i = 0; i < PlayerStats.missionList.Count; i++) { if (PlayerStats.missionList[i].GetName().Equals(acceptedQuest2.name)) { Debug.Log("You already have this quest"); Debug.Log(PlayerStats.missionList.Count); return; } } PlayerStats.missionList.Add(acceptedQuest2); }
public override void OnDoubleClick(Mobile from) { PlayerMobile player = from as PlayerMobile; if (player != null && player.InRange(GetWorldLocation(), 2)) { QuestSystem qs = player.Quest; if (qs is StolenNecklaceQuest) { QuestObjective obj = qs.FindObjective(typeof(GetStolenNecklaceObjective)); if ((obj != null && !obj.Completed) || StolenNecklaceQuest.HasStolenNecklace(player)) { Item necklace = new QuestStolenNecklace(); if (player.PlaceInBackpack(necklace)) { player.SendMessage("You take the necklace from the bookcase and place it into your pack."); if (obj != null && !obj.Completed) { obj.Complete(); } } else { player.SendMessage("You find a necklace, but can't pick it up because your pack is too full. Come back when you have more room in your pack."); necklace.Delete(); } return; } } } base.OnDoubleClick(from); }
public override void OnDoubleClick(Mobile from) { PlayerMobile player = from as PlayerMobile; if (player != null && player.InRange(GetWorldLocation(), 2)) { QuestSystem qs = player.Quest; if (qs is KissOfTheSerpentMistressQuest) { QuestObjective obj = qs.FindObjective(typeof(ObtainBowAndJournalObjective)); if ((obj != null && !obj.Completed) || KissOfTheSerpentMistressQuest.HasCalcifinasJournal(player)) { Item journal = new CalcifinasJournal(); if (player.PlaceInBackpack(journal)) { player.SendMessage("You take the journal from the dresser and place it into your pack."); if (obj != null && !obj.Completed) { obj.Complete(); } } else { player.SendMessage("You find a journal, but can't pick it up because your pack is too full. Come back when you have more room in your pack."); journal.Delete(); } return; } } } base.OnDoubleClick(from); }
public override void OnDoubleClick(Mobile from) { if (from is PlayerMobile pm && pm.InRange(GetWorldLocation(), 2)) { var qs = pm.Quest; if (qs is DarkTidesQuest) { QuestObjective obj = qs.FindObjective <FindCallingScrollObjective>(); if (obj?.Completed == false || DarkTidesQuest.HasLostCallingScroll(from)) { Item scroll = new KronusScroll(); if (pm.PlaceInBackpack(scroll)) { pm.SendLocalizedMessage( 1060120, "", 0x41 ); // You rummage through the scrolls until you find the Scroll of Calling. You quickly put it in your pack. if (obj?.Completed == false) { obj.Complete(); } } else { pm.SendLocalizedMessage(1060148, "", 0x41); // You were unable to take the scroll. scroll.Delete(); } } } } base.OnDoubleClick(from); }
public override void OnTalk(PlayerMobile player, bool contextMenu) { Direction = this.GetDirectionTo(player); QuestSystem qs = player.Quest; if (qs is EminosUndertakingQuest) { if (qs.IsObjectiveInProgress(typeof(FindEliteNinjaZoelObjective))) { QuestObjective obj = qs.FindObjective(typeof(FindEliteNinjaZoelObjective)); if (obj != null) { obj.Complete(); } qs.AddConversation(new ZoelBeginConversation()); qs.AddObjective(new EnterTheCaveObjective()); } } }
public override void OnTalk(PlayerMobile player, bool contextMenu) { Direction = GetDirectionTo(player); QuestSystem qs = player.Quest; if (qs is EminosUndertakingQuest) { if (qs.IsObjectiveInProgress(typeof(TakeBlueTeleporterObjective))) { QuestObjective obj = qs.FindObjective(typeof(TakeBlueTeleporterObjective)); if (obj != null) { obj.Complete(); } qs.AddConversation(new ApproachTheDoorConversation()); qs.AddObjective(new GoBackBlueTeleporterObjective()); } } }
//Only used in testing for quick restarts public void RestartQuest() { //Move all quest objectives to _inactive _inactive.AddRange(_active); _inactive.AddRange(_completed); //Reset fallback objectives as well _inactiveFallback.AddRange(_activeFallback); //Clear the various lists _active.Clear(); _completed.Clear(); _activeFallback.Clear(); //Find stage 0 in _inactive and activate it QuestObjective stage0 = null; foreach (QuestObjective qo in _inactive) { if (qo.ID == 0.0) { stage0 = qo; break; } } //Clear the active and completed lists of objectives db side _databaseManager.QuestClearObjectives(ID); ActivateObjective(stage0); //Notify the player that the quest has started _messageController.EnqueueMessage("Starting quest: " + Name); //Start the quest UpdateQuest(null); }
public override bool OnDragDrop(Mobile from, Item dropped) { // trigger returns true if returnoverride if (XmlScript.HasTrigger(this, TriggerName.onDragDrop) && UberScriptTriggers.Trigger(this, from, TriggerName.onDragDrop, dropped)) { return(true); } PlayerMobile player = from as PlayerMobile; if (player != null) { QuestSystem qs = player.Quest; if (qs is HaochisTrialsQuest) { QuestObjective obj = qs.FindObjective(typeof(FourthTrialCatsObjective)); if (obj != null && !obj.Completed) { Gold gold = dropped as Gold; if (gold != null) { obj.Complete(); qs.AddObjective(new FourthTrialReturnObjective(false)); SayTo(from, 1063241); // I thank thee. This gold will be a great help to me and mine! gold.Consume(); // Intentional difference from OSI: don't take all the gold of poor newbies! return(gold.Deleted); } } } } return(base.OnDragDrop(from, dropped)); }
void LocationLevelUp(int level, Location location) { foreach (CurrentQuest currentQuest in player.Quests) { Quest q = currentQuest.Quest; for (int i = 0; i < q.QuestObjectives.Count; i++) { if (currentQuest.Objectives[i].Completed) { continue; //Dont need to do any checking if the quest is completed. } QuestObjective qo = q.QuestObjectives[i]; if (qo as LocationLevelObjective) { LocationLevelObjective llo = (qo as LocationLevelObjective); if (llo.RequiredLocation != location) { continue; //Not the right location } if (level >= currentQuest.Objectives[i].Progress) { currentQuest.Objectives[i].Progress = level; Debug.Log(llo.ObjectiveString(currentQuest.Objectives[i].Progress)); if (currentQuest.Objectives[i].Progress >= llo.RequiredLevel) { currentQuest.Objectives[i].Completed = true; } } } } } }
public override bool SpecialHarvest(Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc) { PlayerMobile player = from as PlayerMobile; if (player != null) { Region rg = player.Region; if (from.Region.Name == "Star Lake") { 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); } } } return(false); }
public override void Cancel() { base.Cancel(); QuestObjective obj = FindObjective(typeof(CollectFragmentsObjective)); QuestObjective objtwo = FindObjective(typeof(VanquishMinibossObjective)); if (obj != null && obj.CurProgress > 0 && objtwo == null && !obj.Completed) { BankBox box = From.BankBox; if (box != null) { IdolQuester quester = m_IdolQuester; QuestType type = quester.Type; switch (type) { case QuestType.Shame: m_Frag = new FragmentCrystal(QuestType.Shame, obj.CurProgress); break; case QuestType.Deceit: m_Frag = new FragmentCrystal(QuestType.Deceit, obj.CurProgress); break; case QuestType.Destard: m_Frag = new FragmentCrystal(QuestType.Destard, obj.CurProgress); break; case QuestType.Hythloth: m_Frag = new FragmentCrystal(QuestType.Hythloth, obj.CurProgress); break; case QuestType.Despise: m_Frag = new FragmentCrystal(QuestType.Despise, obj.CurProgress); break; case QuestType.Covetous: m_Frag = new FragmentCrystal(QuestType.Covetous, obj.CurProgress); break; case QuestType.Wrong: m_Frag = new FragmentCrystal(QuestType.Wrong, obj.CurProgress); break; } box.DropItem(m_Frag); From.SendMessage("The dungeon fragments you have offered up have been returned to you."); } } }
public override void OnDoubleClick(Mobile from) { PlayerMobile pm = from as PlayerMobile; if (pm == null) { return; } QuestSystem qs = pm.Quest; if (qs is EminosUndertakingQuest) { if (qs.IsObjectiveInProgress(typeof(WalkThroughHallwayObjective))) { ClearContents(); GenerateJewelry(); QuestObjective obj = qs.FindObjective(typeof(WalkThroughHallwayObjective)); if (obj != null) { obj.Complete(); } pm.AddToBackpack(new DaimyoEminosKatana()); qs.AddConversation(new OpenChestConversation()); qs.AddObjective(new TakeSwordObjective()); } } base.OnDoubleClick(from); }
public QuestObjectiveDTO Insert(QuestObjectiveDTO questObjective) { try { using (OpenNosContext context = DataAccessHelper.CreateContext()) { QuestObjective entity = new QuestObjective(); Mapper.Mappers.QuestObjectiveMapper.ToQuestObjective(questObjective, entity); context.QuestObjective.Add(entity); context.SaveChanges(); if (Mapper.Mappers.QuestObjectiveMapper.ToQuestObjectiveDTO(entity, questObjective)) { return(questObjective); } return(null); } } catch (Exception e) { Logger.Error(e); return(null); } }
public static void DrawTeleports(QuestObjective objective) { using (HorizontalScope(MaxWidth(750))) { var areas = objective.Blueprint.Areas; var locations = objective.Blueprint.Locations; if (areas.Count > 0 || locations.Count > 0) { if (locations.Count > 0) { Label("Teleport"); 25.space(); using (VerticalScope(MaxWidth(600))) { foreach (var location in locations) { var bp = location.GetBlueprint(); if (bp != null) { ActionButton(bp.name.yellow(), () => Teleport.To(location)); } } } } #if false if (areas.Count > 0) { Label(" Area"); Space(25); foreach (var area in areas) { ActionButton(area.name.yellow(), () => Teleport.To(area)); } } #endif } } }
public override bool OnDragDrop(Mobile from, Item dropped) { if (from is PlayerMobile player) { var qs = player.Quest; if (qs is EminosUndertakingQuest) { if (dropped is NoteForZoel) { QuestObjective obj = qs.FindObjective <GiveZoelNoteObjective>(); if (obj?.Completed == false) { dropped.Delete(); obj.Complete(); return(true); } } } } return(base.OnDragDrop(from, dropped)); }
public override void OnTalk(PlayerMobile player, bool contextMenu) { QuestSystem qs = player.Quest; if (qs is CollectorQuest) { Direction = GetDirectionTo(player); QuestObjective obj = qs.FindObjective(typeof(FindAlbertaObjective)); if (obj != null && !obj.Completed) { obj.Complete(); } else if (qs.IsObjectiveInProgress(typeof(SitOnTheStoolObjective))) { qs.AddConversation(new AlbertaStoolConversation()); } else if (qs.IsObjectiveInProgress(typeof(ReturnPaintingObjective))) { qs.AddConversation(new AlbertaAfterPaintingConversation()); } } }
public override int NotWorkingMessage => 1063198; // You stand on the strange floor tile but nothing happens. public override bool GetDestination(PlayerMobile player, ref Point3D loc, ref Map map) { QuestSystem qs = player.Quest; if (qs is EminosUndertakingQuest) { QuestObjective obj = qs.FindObjective <SearchForSwordObjective>(); if (obj != null) { if (!obj.Completed) { obj.Complete(); } loc = new Point3D(411, 1085, 0); map = Map.Malas; return(true); } } return(false); }
public static void HandleQuestQueryResponse(Packet packet) { packet.ReadInt32("Entry"); Bit hasData = packet.ReadBit("Has Data"); if (!hasData) { return; // nothing to do } var id = packet.ReadEntry("Quest ID"); QuestTemplate quest = new QuestTemplate { ID = (uint)id.Key }; quest.QuestType = packet.ReadInt32E <QuestType>("QuestType"); quest.QuestLevel = packet.ReadInt32("QuestLevel"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_3_5_25848)) { quest.QuestMaxScalingLevel = packet.ReadInt32("QuestMaxScalingLevel"); } quest.QuestPackageID = packet.ReadUInt32("QuestPackageID"); quest.MinLevel = packet.ReadInt32("QuestMinLevel"); quest.QuestSortID = (QuestSort)packet.ReadUInt32("QuestSortID"); quest.QuestInfoID = packet.ReadInt32E <QuestInfo>("QuestInfoID"); quest.SuggestedGroupNum = packet.ReadUInt32("SuggestedGroupNum"); quest.RewardNextQuest = packet.ReadUInt32("RewardNextQuest"); quest.RewardXPDifficulty = packet.ReadUInt32("RewardXPDifficulty"); quest.RewardXPMultiplier = packet.ReadSingle("RewardXPMultiplier"); quest.RewardMoney = packet.ReadInt32("RewardMoney"); quest.RewardMoneyDifficulty = packet.ReadUInt32("RewardMoneyDifficulty"); quest.RewardMoneyMultiplier = packet.ReadSingle("RewardMoneyMultiplier"); quest.RewardBonusMoney = packet.ReadUInt32("RewardBonusMoney"); quest.RewardDisplaySpellLegion = new uint?[3]; for (int i = 0; i < 3; ++i) { quest.RewardDisplaySpellLegion[i] = packet.ReadUInt32("RewardDisplaySpell", i); } quest.RewardSpellWod = packet.ReadUInt32("RewardSpell"); quest.RewardHonorWod = packet.ReadUInt32("RewardHonor"); quest.RewardKillHonor = packet.ReadSingle("RewardKillHonor"); quest.RewardArtifactXPDifficulty = packet.ReadUInt32("RewardArtifactXPDifficulty"); quest.RewardArtifactXPMultiplier = packet.ReadSingle("RewardArtifactXPMultiplier"); quest.RewardArtifactCategoryID = packet.ReadUInt32("RewardArtifactCategoryID"); quest.StartItem = packet.ReadUInt32("StartItem"); quest.Flags = packet.ReadUInt32E <QuestFlags>("Flags"); quest.FlagsEx = packet.ReadUInt32E <QuestFlagsEx>("FlagsEx"); quest.RewardItem = new uint?[4]; quest.RewardAmount = new uint?[4]; quest.ItemDrop = new uint?[4]; quest.ItemDropQuantity = new uint?[4]; for (int i = 0; i < 4; ++i) { quest.RewardItem[i] = packet.ReadUInt32("RewardItems", i); quest.RewardAmount[i] = packet.ReadUInt32("RewardAmount", i); quest.ItemDrop[i] = packet.ReadUInt32("ItemDrop", i); quest.ItemDropQuantity[i] = packet.ReadUInt32("ItemDropQuantity", i); } quest.RewardChoiceItemID = new uint?[6]; quest.RewardChoiceItemQuantity = new uint?[6]; quest.RewardChoiceItemDisplayID = new uint?[6]; for (int i = 0; i < 6; ++i) // CliQuestInfoChoiceItem { quest.RewardChoiceItemID[i] = packet.ReadUInt32("RewardChoiceItemID", i); quest.RewardChoiceItemQuantity[i] = packet.ReadUInt32("RewardChoiceItemQuantity", i); quest.RewardChoiceItemDisplayID[i] = packet.ReadUInt32("RewardChoiceItemDisplayID", i); } quest.POIContinent = packet.ReadUInt32("POIContinent"); quest.POIx = packet.ReadSingle("POIx"); quest.POIy = packet.ReadSingle("POIy"); quest.POIPriorityWod = packet.ReadInt32("POIPriority"); quest.RewardTitle = packet.ReadUInt32("RewardTitle"); quest.RewardArenaPoints = packet.ReadUInt32("RewardArenaPoints"); quest.RewardSkillLineID = packet.ReadUInt32("RewardSkillLineID"); quest.RewardNumSkillUps = packet.ReadUInt32("RewardNumSkillUps"); quest.QuestGiverPortrait = packet.ReadUInt32("PortraitGiver"); quest.QuestTurnInPortrait = packet.ReadUInt32("PortraitTurnIn"); quest.RewardFactionID = new uint?[5]; quest.RewardFactionOverride = new int?[5]; quest.RewardFactionValue = new int?[5]; quest.RewardFactionCapIn = new int?[5]; for (int i = 0; i < 5; ++i) { quest.RewardFactionID[i] = packet.ReadUInt32("RewardFactionID", i); quest.RewardFactionValue[i] = packet.ReadInt32("RewardFactionValue", i); quest.RewardFactionOverride[i] = packet.ReadInt32("RewardFactionOverride", i); quest.RewardFactionCapIn[i] = packet.ReadInt32("RewardFactionCapIn", i); } quest.RewardFactionFlags = packet.ReadUInt32("RewardFactionFlags"); quest.RewardCurrencyID = new uint?[4]; quest.RewardCurrencyCount = new uint?[4]; for (int i = 0; i < 4; ++i) { quest.RewardCurrencyID[i] = packet.ReadUInt32("RewardCurrencyID"); quest.RewardCurrencyCount[i] = packet.ReadUInt32("RewardCurrencyQty"); } quest.SoundAccept = packet.ReadUInt32("AcceptedSoundKitID"); quest.SoundTurnIn = packet.ReadUInt32("CompleteSoundKitID"); quest.AreaGroupID = packet.ReadUInt32("AreaGroupID"); quest.TimeAllowed = packet.ReadUInt32("TimeAllowed"); uint cliQuestInfoObjective = packet.ReadUInt32("CliQuestInfoObjective"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_3_5_25848)) { quest.AllowableRacesWod = packet.ReadUInt64("AllowableRaces"); } if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_0_3_22248) && ClientVersion.RemovedInVersion(ClientVersionBuild.V7_3_5_25848)) { quest.AllowableRacesWod = (uint)packet.ReadInt32("AllowableRaces"); } quest.QuestRewardID = packet.ReadInt32("QuestRewardID"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_2_0_23826)) { quest.Expansion = packet.ReadInt32("Expansion"); } packet.ResetBitReader(); uint logTitleLen = packet.ReadBits(9); uint logDescriptionLen = packet.ReadBits(12); uint questDescriptionLen = packet.ReadBits(12); uint areaDescriptionLen = packet.ReadBits(9); uint questGiverTextWindowLen = packet.ReadBits(10); uint questGiverTargetNameLen = packet.ReadBits(8); uint questTurnTextWindowLen = packet.ReadBits(10); uint questTurnTargetNameLen = packet.ReadBits(8); uint questCompletionLogLen = packet.ReadBits(11); for (uint i = 0; i < cliQuestInfoObjective; ++i) { var objectiveId = packet.ReadEntry("Id", i); QuestObjective questInfoObjective = new QuestObjective { ID = (uint)objectiveId.Key, QuestID = (uint)id.Key }; questInfoObjective.Type = packet.ReadByteE <QuestRequirementType>("Quest Requirement Type", i); questInfoObjective.StorageIndex = packet.ReadSByte("StorageIndex", i); questInfoObjective.Order = i; questInfoObjective.ObjectID = packet.ReadInt32("ObjectID", i); questInfoObjective.Amount = packet.ReadInt32("Amount", i); questInfoObjective.Flags = packet.ReadUInt32("Flags", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_1_0_22900)) { questInfoObjective.Flags2 = packet.ReadUInt32("Flags2", i); } questInfoObjective.ProgressBarWeight = packet.ReadSingle("ProgressBarWeight", i); int visualEffectsCount = packet.ReadInt32("VisualEffects", i); for (uint j = 0; j < visualEffectsCount; ++j) { QuestVisualEffect questVisualEffect = new QuestVisualEffect { ID = questInfoObjective.ID, Index = j, VisualEffect = packet.ReadInt32("VisualEffectId", i, j) }; Storage.QuestVisualEffects.Add(questVisualEffect, packet.TimeSpan); } packet.ResetBitReader(); uint bits6 = packet.ReadBits(8); questInfoObjective.Description = packet.ReadWoWString("Description", bits6, i); if (ClientLocale.PacketLocale != LocaleConstant.enUS && questInfoObjective.Description != string.Empty) { QuestObjectivesLocale localesQuestObjectives = new QuestObjectivesLocale { ID = (uint)objectiveId.Key, QuestId = (uint)id.Key, StorageIndex = questInfoObjective.StorageIndex, Description = questInfoObjective.Description }; Storage.LocalesQuestObjectives.Add(localesQuestObjectives, packet.TimeSpan); } Storage.QuestObjectives.Add(questInfoObjective, packet.TimeSpan); } quest.LogTitle = packet.ReadWoWString("LogTitle", logTitleLen); quest.LogDescription = packet.ReadWoWString("LogDescription", logDescriptionLen); quest.QuestDescription = packet.ReadWoWString("QuestDescription", questDescriptionLen); quest.AreaDescription = packet.ReadWoWString("AreaDescription", areaDescriptionLen); quest.QuestGiverTextWindow = packet.ReadWoWString("PortraitGiverText", questGiverTextWindowLen); quest.QuestGiverTargetName = packet.ReadWoWString("PortraitGiverName", questGiverTargetNameLen); quest.QuestTurnTextWindow = packet.ReadWoWString("PortraitTurnInText", questTurnTextWindowLen); quest.QuestTurnTargetName = packet.ReadWoWString("PortraitTurnInName", questTurnTargetNameLen); quest.QuestCompletionLog = packet.ReadWoWString("QuestCompletionLog", questCompletionLogLen); if (ClientLocale.PacketLocale != LocaleConstant.enUS) { LocalesQuest localesQuest = new LocalesQuest { ID = (uint)id.Key, LogTitle = quest.LogTitle, LogDescription = quest.LogDescription, QuestDescription = quest.QuestDescription, AreaDescription = quest.AreaDescription, PortraitGiverText = quest.QuestGiverTextWindow, PortraitGiverName = quest.QuestGiverTargetName, PortraitTurnInText = quest.QuestTurnTextWindow, PortraitTurnInName = quest.QuestTurnTargetName, QuestCompletionLog = quest.QuestCompletionLog }; Storage.LocalesQuests.Add(localesQuest, packet.TimeSpan); } Storage.QuestTemplates.Add(quest, packet.TimeSpan); }
public static void HandleQuestQueryResponse(Packet packet) { packet.ReadInt32("Entry"); Bit hasData = packet.ReadBit("Has Data"); if (!hasData) { return; // nothing to do } var id = packet.ReadEntry("Quest ID"); QuestTemplate quest = new QuestTemplate { ID = (uint)id.Key }; quest.QuestType = packet.ReadInt32E <QuestType>("QuestType"); quest.QuestLevel = packet.ReadInt32("QuestLevel"); quest.QuestPackageID = packet.ReadUInt32("QuestPackageID"); quest.MinLevel = packet.ReadInt32("QuestMinLevel"); quest.QuestSortID = (QuestSort)packet.ReadUInt32("QuestSortID"); quest.QuestInfoID = packet.ReadInt32E <QuestInfo>("QuestInfoID"); quest.SuggestedGroupNum = packet.ReadUInt32("SuggestedGroupNum"); quest.RewardNextQuest = packet.ReadUInt32("RewardNextQuest"); quest.RewardXPDifficulty = packet.ReadUInt32("RewardXPDifficulty"); quest.RewardXPMultiplier = packet.ReadSingle("RewardXPMultiplier"); quest.RewardMoney = packet.ReadInt32("RewardMoney"); quest.RewardMoneyDifficulty = packet.ReadUInt32("RewardMoneyDifficulty"); quest.RewardMoneyMultiplier = packet.ReadSingle("RewardMoneyMultiplier"); quest.RewardBonusMoney = packet.ReadUInt32("RewardBonusMoney"); quest.RewardDisplaySpell = packet.ReadUInt32("RewardDisplaySpell"); quest.RewardSpellWod = packet.ReadUInt32("RewardSpell"); quest.RewardHonorWod = packet.ReadUInt32("RewardHonor"); quest.RewardKillHonor = packet.ReadSingle("RewardKillHonor"); quest.StartItem = packet.ReadUInt32("StartItem"); quest.Flags = packet.ReadUInt32E <QuestFlags>("Flags"); quest.FlagsEx = packet.ReadUInt32E <QuestFlags2>("FlagsEx"); quest.RewardItem = new uint?[4]; quest.RewardAmount = new uint?[4]; quest.ItemDrop = new uint?[4]; quest.ItemDropQuantity = new uint?[4]; for (int i = 0; i < 4; ++i) { quest.RewardItem[i] = packet.ReadUInt32("RewardItems", i); quest.RewardAmount[i] = packet.ReadUInt32("RewardAmount", i); quest.ItemDrop[i] = packet.ReadUInt32("ItemDrop", i); quest.ItemDropQuantity[i] = packet.ReadUInt32("ItemDropQuantity", i); } quest.RewardChoiceItemID = new uint?[6]; quest.RewardChoiceItemQuantity = new uint?[6]; quest.RewardChoiceItemDisplayID = new uint?[6]; for (int i = 0; i < 6; ++i) // CliQuestInfoChoiceItem { quest.RewardChoiceItemID[i] = packet.ReadUInt32("RewardChoiceItemID", i); quest.RewardChoiceItemQuantity[i] = packet.ReadUInt32("RewardChoiceItemQuantity", i); quest.RewardChoiceItemDisplayID[i] = packet.ReadUInt32("RewardChoiceItemDisplayID", i); } quest.POIContinent = packet.ReadUInt32("POIContinent"); quest.POIx = packet.ReadSingle("POIx"); quest.POIy = packet.ReadSingle("POIy"); quest.POIPriorityWod = packet.ReadInt32("POIPriority"); quest.RewardTitle = packet.ReadUInt32("RewardTitle"); quest.RewardTalents = packet.ReadUInt32("RewardTalents"); quest.RewardArenaPoints = packet.ReadUInt32("RewardArenaPoints"); quest.RewardSkillLineID = packet.ReadUInt32("RewardSkillLineID"); quest.RewardNumSkillUps = packet.ReadUInt32("RewardNumSkillUps"); quest.QuestGiverPortrait = packet.ReadUInt32("PortraitGiver"); quest.QuestTurnInPortrait = packet.ReadUInt32("PortraitTurnIn"); quest.RewardFactionID = new uint?[5]; quest.RewardFactionValue = new int?[5]; quest.RewardFactionOverride = new int?[5]; for (int i = 0; i < 5; ++i) { quest.RewardFactionID[i] = packet.ReadUInt32("RewardFactionID", i); quest.RewardFactionValue[i] = packet.ReadInt32("RewardFactionValue", i); quest.RewardFactionOverride[i] = packet.ReadInt32("RewardFactionOverride", i); } quest.RewardFactionFlags = packet.ReadUInt32("RewardFactionFlags"); quest.RewardCurrencyID = new uint?[4]; quest.RewardCurrencyCount = new uint?[4]; for (int i = 0; i < 4; ++i) { quest.RewardCurrencyID[i] = packet.ReadUInt32("RewardCurrencyID"); quest.RewardCurrencyCount[i] = packet.ReadUInt32("RewardCurrencyQty"); } quest.SoundAccept = packet.ReadUInt32("AcceptedSoundKitID"); quest.SoundTurnIn = packet.ReadUInt32("CompleteSoundKitID"); quest.AreaGroupID = packet.ReadUInt32("AreaGroupID"); quest.TimeAllowed = packet.ReadUInt32("TimeAllowed"); uint int2946 = packet.ReadUInt32("CliQuestInfoObjective"); quest.AllowableRacesWod = packet.ReadInt32("AllowableRaces"); for (int i = 0; i < int2946; ++i) { var objectiveId = packet.ReadEntry("Id", i); QuestObjective questInfoObjective = new QuestObjective { ID = (uint)objectiveId.Key, QuestID = (uint)id.Key }; questInfoObjective.Type = packet.ReadByteE <QuestRequirementType>("Quest Requirement Type", i); questInfoObjective.StorageIndex = packet.ReadSByte("StorageIndex", i); questInfoObjective.ObjectID = packet.ReadInt32("ObjectID", i); questInfoObjective.Amount = packet.ReadInt32("Amount", i); questInfoObjective.Flags = packet.ReadUInt32("Flags", i); questInfoObjective.UnkFloat = packet.ReadSingle("Float5", i); int int280 = packet.ReadInt32("VisualEffects", i); for (int j = 0; j < int280; ++j) { QuestVisualEffect questVisualEffect = new QuestVisualEffect { ID = questInfoObjective.ID, Index = (uint)j, VisualEffect = packet.ReadInt32("VisualEffectId", i, j) }; Storage.QuestVisualEffects.Add(questVisualEffect, packet.TimeSpan); } packet.ResetBitReader(); uint bits6 = packet.ReadBits(8); questInfoObjective.Description = packet.ReadWoWString("Description", bits6, i); if (BinaryPacketReader.GetLocale() != LocaleConstant.enUS && questInfoObjective.Description != string.Empty) { QuestObjectivesLocale localesQuestObjectives = new QuestObjectivesLocale { ID = (uint)objectiveId.Key, QuestId = (uint)id.Key, StorageIndex = questInfoObjective.StorageIndex, Description = questInfoObjective.Description }; Storage.LocalesQuestObjectives.Add(localesQuestObjectives, packet.TimeSpan); } Storage.QuestObjectives.Add(questInfoObjective, packet.TimeSpan); } packet.ResetBitReader(); uint bits26 = packet.ReadBits(9); uint bits154 = packet.ReadBits(12); uint bits904 = packet.ReadBits(12); uint bits1654 = packet.ReadBits(9); uint bits1789 = packet.ReadBits(10); uint bits2045 = packet.ReadBits(8); uint bits2109 = packet.ReadBits(10); uint bits2365 = packet.ReadBits(8); uint bits2429 = packet.ReadBits(11); quest.LogTitle = packet.ReadWoWString("LogTitle", bits26); quest.LogDescription = packet.ReadWoWString("LogDescription", bits154); quest.QuestDescription = packet.ReadWoWString("QuestDescription", bits904); quest.AreaDescription = packet.ReadWoWString("AreaDescription", bits1654); quest.QuestGiverTextWindow = packet.ReadWoWString("PortraitGiverText", bits1789); quest.QuestGiverTargetName = packet.ReadWoWString("PortraitGiverName", bits2045); quest.QuestTurnTextWindow = packet.ReadWoWString("PortraitTurnInText", bits2109); quest.QuestTurnTargetName = packet.ReadWoWString("PortraitTurnInName", bits2365); quest.QuestCompletionLog = packet.ReadWoWString("QuestCompletionLog", bits2429); if (BinaryPacketReader.GetLocale() != LocaleConstant.enUS) { LocalesQuest localesQuest = new LocalesQuest { ID = (uint)id.Key, Locale = BinaryPacketReader.GetClientLocale(), LogTitle = quest.LogTitle, LogDescription = quest.LogDescription, QuestDescription = quest.QuestDescription, AreaDescription = quest.AreaDescription, PortraitGiverText = quest.QuestGiverTextWindow, PortraitGiverName = quest.QuestGiverTargetName, PortraitTurnInText = quest.QuestTurnTextWindow, PortraitTurnInName = quest.QuestTurnTargetName, QuestCompletionLog = quest.QuestCompletionLog }; Storage.LocalesQuests.Add(localesQuest, packet.TimeSpan); } Storage.QuestTemplates.Add(quest, packet.TimeSpan); }
public override void OnThink() { if (ControlMaster != null && QuestOverride) { if (X == 1076 && Y == 450) { AIObject.MoveTo(ControlMaster, false, 1); PlayerMobile pm = ControlMaster as PlayerMobile; if (pm != null) { QuestSystem qs = pm.Quest; if (qs is DarkTidesQuest) { QuestObjective obj = qs.FindObjective(typeof(FetchAbraxusScrollObjective)); if (obj != null && !obj.Completed) { AddToBackpack(new ScrollOfAbraxus()); obj.Complete(); CurrentSpeed = 0.1; QuestOverride = false; } } } } return; } base.OnThink(); if (DateTime.UtcNow < m_NextPickup) { return; } m_NextPickup = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(5, 10)); Container pack = Backpack; if (pack == null) { return; } ArrayList list = new ArrayList(); foreach (Item item in GetItemsInRange(2)) { if (item.Movable && item.Stackable) { list.Add(item); } } int pickedUp = 0; for (int i = 0; i < list.Count; ++i) { Item item = (Item)list[i]; if (!pack.CheckHold(this, item, false, true)) { return; } bool rejected; LRReason reject; NextActionTime = Core.TickCount; Lift(item, item.Amount, out rejected, out reject); if (rejected) { continue; } Drop(this, Point3D.Zero); if (++pickedUp == 3) { break; } } }
public virtual void Pour_OnTarget(Mobile from, object targ) { if (IsEmpty || !Pourable || !ValidateUse(from, false)) { return; } if (targ is BaseBeverage) { BaseBeverage bev = (BaseBeverage)targ; if (!bev.ValidateUse(from, true)) { return; } if (bev.IsFull && bev.Content == this.Content) { from.SendLocalizedMessage(500848); // Couldn't pour it there. It was already full. } else if (!bev.IsEmpty) { from.SendLocalizedMessage(500846); // Can't pour it there. } else { bev.Content = this.Content; bev.Poison = this.Poison; bev.Poisoner = this.Poisoner; if (this.Quantity > bev.MaxQuantity) { bev.Quantity = bev.MaxQuantity; this.Quantity -= bev.MaxQuantity; } else { bev.Quantity += this.Quantity; this.Quantity = 0; } from.PlaySound(0x4E); } } else if (from == targ) { if (from.Thirst < 20) { from.Thirst += 1; } if (ContainsAlchohol) { int bac = 0; switch (this.Content) { case BeverageType.Ale: bac = 1; break; case BeverageType.Wine: bac = 2; break; case BeverageType.Cider: bac = 3; break; case BeverageType.Liquor: bac = 4; break; } from.BAC += bac; if (from.BAC > 60) { from.BAC = 60; } CheckHeaveTimer(from); } from.PlaySound(Utility.RandomList(0x30, 0x2D6)); if (m_Poison != null) { from.ApplyPoison(m_Poisoner, m_Poison); } --Quantity; } else if (targ is BaseWaterContainer) { BaseWaterContainer bwc = targ as BaseWaterContainer; if (Content != BeverageType.Water) { from.SendLocalizedMessage(500842); // Can't pour that in there. } else if (bwc.Items.Count != 0) { from.SendLocalizedMessage(500841); // That has something in it. } else { int itNeeds = Math.Min((bwc.MaxQuantity - bwc.Quantity), Quantity); if (itNeeds > 0) { bwc.Quantity += itNeeds; Quantity -= itNeeds; from.PlaySound(0x4E); } } } else if (targ is PlantItem) { ((PlantItem)targ).Pour(from, this); } else if (targ is AddonComponent && (((AddonComponent)targ).Addon is WaterVatEast || ((AddonComponent)targ).Addon is WaterVatSouth) && this.Content == BeverageType.Water) { PlayerMobile player = from as PlayerMobile; if (player != null) { SolenMatriarchQuest qs = player.Quest as SolenMatriarchQuest; if (qs != null) { QuestObjective obj = qs.FindObjective(typeof(GatherWaterObjective)); if (obj != null && !obj.Completed) { BaseAddon vat = ((AddonComponent)targ).Addon; if (vat.X > 5784 && vat.X < 5814 && vat.Y > 1903 && vat.Y < 1934 && ((qs.RedSolen && vat.Map == Map.Trammel) || (!qs.RedSolen && vat.Map == Map.Felucca))) { if (obj.CurProgress + Quantity > obj.MaxProgress) { int delta = obj.MaxProgress - obj.CurProgress; Quantity -= delta; obj.CurProgress = obj.MaxProgress; } else { obj.CurProgress += Quantity; Quantity = 0; } } } } } } else { from.SendLocalizedMessage(500846); // Can't pour it there. } }
public override void OnTalk(PlayerMobile player, bool contextMenu) { Direction = GetDirectionTo(player); QuestSystem qs = player.Quest; if (qs is CollectorQuest) { if (qs.IsObjectiveInProgress(typeof(FishPearlsObjective))) { qs.AddConversation(new ElwoodDuringFishConversation()); } else { QuestObjective obj = qs.FindObjective(typeof(ReturnPearlsObjective)); if (obj != null && !obj.Completed) { obj.Complete(); } else if (qs.IsObjectiveInProgress(typeof(FindAlbertaObjective))) { qs.AddConversation(new ElwoodDuringPainting1Conversation()); } else if (qs.IsObjectiveInProgress(typeof(SitOnTheStoolObjective))) { qs.AddConversation(new ElwoodDuringPainting2Conversation()); } else { obj = qs.FindObjective(typeof(ReturnPaintingObjective)); if (obj != null && !obj.Completed) { obj.Complete(); } else if (qs.IsObjectiveInProgress(typeof(FindGabrielObjective))) { qs.AddConversation(new ElwoodDuringAutograph1Conversation()); } else if (qs.IsObjectiveInProgress(typeof(FindSheetMusicObjective))) { qs.AddConversation(new ElwoodDuringAutograph2Conversation()); } else if (qs.IsObjectiveInProgress(typeof(ReturnSheetMusicObjective))) { qs.AddConversation(new ElwoodDuringAutograph3Conversation()); } else { obj = qs.FindObjective(typeof(ReturnAutographObjective)); if (obj != null && !obj.Completed) { obj.Complete(); } else if (qs.IsObjectiveInProgress(typeof(FindTomasObjective))) { qs.AddConversation(new ElwoodDuringToys1Conversation()); } else if (qs.IsObjectiveInProgress(typeof(CaptureImagesObjective))) { qs.AddConversation(new ElwoodDuringToys2Conversation()); } else if (qs.IsObjectiveInProgress(typeof(ReturnImagesObjective))) { qs.AddConversation(new ElwoodDuringToys3Conversation()); } else { obj = qs.FindObjective(typeof(ReturnToysObjective)); if (obj != null && !obj.Completed) { obj.Complete(); if (GiveReward(player)) { qs.AddConversation(new EndConversation()); } else { qs.AddConversation(new FullEndConversation(true)); } } else { obj = qs.FindObjective(typeof(MakeRoomObjective)); if (obj != null && !obj.Completed) { if (GiveReward(player)) { obj.Complete(); qs.AddConversation(new EndConversation()); } else { qs.AddConversation(new FullEndConversation(false)); } } } } } } } } else { QuestSystem newQuest = new CollectorQuest(player); if (qs == null && QuestSystem.CanOfferQuest(player, typeof(CollectorQuest))) { newQuest.SendOffer(); } else { newQuest.AddConversation(new DontOfferConversation()); } } }
private void ObjectiveComplete(QuestObjective obj) { _completionToggle.isOn = true; _descriptionText.color = _completionColor; }
protected override void OnQuestObjectiveCompleted(QuestObjective objective) { base.OnQuestObjectiveCompleted(objective); DeRegister(); }
private void UpdateCounter(QuestObjective objective) { if (_questStep is Mooege.Common.MPQ.FileFormats.QuestUnassignedStep == false) { foreach (var player in _quest.game.Players.Values) player.InGameClient.SendMessage(new QuestCounterMessage() { snoQuest = _quest.SNOName.SNOId, snoLevelArea = -1, StepID = _questStep.ID, TaskIndex = objective.ID, Counter = objective.Counter, Checked = objective.Done ? 1 : 0, }); } var completedObjectiveList = from objectiveSet in ObjectivesSets where (from o in objectiveSet.Objectives select o.Done).Aggregate((r, o) => r && o) select objectiveSet.FollowUpStepID; if (completedObjectiveList.Count() > 0) _quest.StepCompleted(completedObjectiveList.First()); }
private void QuestObjectiveCompleted(QuestObjective questObjective) { CheckAllEntitiesForQuestAssociation(); TryAutoSetTrackedQuest(); }
private void UpdateCounter(QuestObjective objective) { Logger.Debug(" (UpdateCounter) is _questStep unassiagned ? {0}", (_questStep is Mooege.Common.MPQ.FileFormats.QuestUnassignedStep == false) ); if (_questStep is Mooege.Common.MPQ.FileFormats.QuestUnassignedStep == false) { Logger.Debug(" (UpdateCounter) calling updateCounter snoQuest {0}, step ID {1}, TaskIndex {2}, counter {3}, Checked {4}", _quest.SNOHandle.Id, _questStep.ID, objective.ID, objective.Counter, objective.Done ? 1 : 0); foreach (var player in _quest.game.Players.Values) player.InGameClient.SendMessage(new QuestCounterMessage() { snoQuest = _quest.SNOHandle.Id, snoLevelArea = -1, StepID = _questStep.ID, TaskIndex = objective.ID, Counter = objective.Counter, Checked = objective.Done ? 1 : 0, }); } //EREKOSE WARNING quest 87700 has at least 2 objective in stepID 55 var completedObjectiveList = from objectiveSet in ObjectivesSets where (from o in objectiveSet.Objectives select o.Done).Aggregate((r, o) => r && o) select objectiveSet.FollowUpStepID; Logger.Debug(" (UpdateCounter) contains {0} accomplished objectives ", completedObjectiveList.Count()); Logger.Debug(" (UpdateCounter) Current quest step contains {0} objectiveSet ", ObjectivesSets.Count()); foreach (var objectiveSet in ObjectivesSets) { foreach (var l_objective in objectiveSet.Objectives) { Logger.Debug(" (UpdateCounter) objective in ObjSets contains objective ID {0}, type {1}, value {2}, isDone {3} ", l_objective.ID, l_objective.ObjectiveType, l_objective.ObjectiveValue, l_objective.Done); } } if (completedObjectiveList.Count() == ObjectivesSets.Count()) { Logger.Debug(" (Update Counter) Now calling StepCompleted with followupID {0} ", completedObjectiveList.First()); _quest.StepCompleted(completedObjectiveList.First()); } }
// working on it erekose private void UpdateBonusCounter(QuestObjective objective) { Logger.Debug(" calling updateBonus Counter snoQuest {0}, step ID {1}, TaskIndex {2}, counter {3}, Checked {4}", _quest.SNOHandle.Id, _questStep.ID, objective.ID+1, objective.Counter, objective.Done ? 1 : 0); foreach (var player in _quest.game.Players.Values) player.InGameClient.SendMessage(new QuestCounterMessage() { snoQuest = _quest.SNOHandle.Id, snoLevelArea = -1, StepID = _questStep.ID, TaskIndex = objective.ID+1, // TODO really ugly what about counting the legit obj + the bonus obj ? Counter = objective.Counter, Checked = objective.Done ? 1 : 0, }); }
private void SetDescription(QuestObjective objective) { _descriptionText.text = objective.QuestDescription; }
public override void OnTalk(PlayerMobile player, bool contextMenu) { this.Direction = GetDirectionTo(player); AmbitiousQueenQuest qs = player.Quest as AmbitiousQueenQuest; if (qs != null && qs.RedSolen == this.RedSolen) { if (qs.IsObjectiveInProgress(typeof(KillQueensObjective))) { qs.AddConversation(new DuringKillQueensConversation()); } else { QuestObjective obj = qs.FindObjective(typeof(ReturnAfterKillsObjective)); if (obj != null && !obj.Completed) { obj.Complete(); } else if (qs.IsObjectiveInProgress(typeof(GatherFungiObjective))) { qs.AddConversation(new DuringFungiGatheringConversation()); } else { GetRewardObjective lastObj = qs.FindObjective(typeof(GetRewardObjective)) as GetRewardObjective; if (lastObj != null && !lastObj.Completed) { bool bagOfSending = lastObj.BagOfSending; bool powderOfTranslocation = lastObj.PowderOfTranslocation; bool gold = lastObj.Gold; AmbitiousQueenQuest.GiveRewardTo(player, ref bagOfSending, ref powderOfTranslocation, ref gold); lastObj.BagOfSending = bagOfSending; lastObj.PowderOfTranslocation = powderOfTranslocation; lastObj.Gold = gold; if (!bagOfSending && !powderOfTranslocation && !gold) { lastObj.Complete(); } else { qs.AddConversation(new FullBackpackConversation(false, lastObj.BagOfSending, lastObj.PowderOfTranslocation, lastObj.Gold)); } } } } } else { QuestSystem newQuest = new AmbitiousQueenQuest(player, this.RedSolen); if (player.Quest == null && QuestSystem.CanOfferQuest(player, typeof(AmbitiousQueenQuest))) { newQuest.SendOffer(); } else { newQuest.AddConversation(new DontOfferConversation()); } } }
public override void OnTalk(PlayerMobile player, bool contextMenu) { QuestSystem qs = player.Quest; if (qs is TerribleHatchlingsQuest) { if (qs.IsObjectiveInProgress(typeof(FirstKillObjective))) { qs.AddConversation(new DirectionConversation()); } else if (qs.IsObjectiveInProgress(typeof(SecondKillObjective)) || qs.IsObjectiveInProgress(typeof(ThirdKillObjective))) { qs.AddConversation(new TakeCareConversation()); } else { QuestObjective obj = qs.FindObjective(typeof(ReturnObjective)); if (obj != null && !obj.Completed) { Container cont = GetNewContainer(); cont.DropItem(new Gold(Utility.RandomMinMax(100, 200))); if (Utility.RandomBool()) { BaseWeapon weapon = Loot.Construct(Loot.SEWeaponTypes) as BaseWeapon; if (weapon != null) { BaseRunicTool.ApplyAttributesTo(weapon, 3, 10, 30); cont.DropItem(weapon); } } else { BaseArmor armor = Loot.Construct(Loot.SEArmorTypes) as BaseArmor; if (armor != null) { BaseRunicTool.ApplyAttributesTo(armor, 1, 10, 20); cont.DropItem(armor); } } if (player.PlaceInBackpack(cont)) { obj.Complete(); } else { cont.Delete(); player.SendLocalizedMessage(1046260); // You need to clear some space in your inventory to continue with the quest. Come back here when you have more space in your inventory. } } } } else { TerribleHatchlingsQuest newQuest = new TerribleHatchlingsQuest(player); bool inRestartPeriod = false; if (qs != null) { if (contextMenu) { SayTo(player, 1063322); // Before you can help me with the Terrible Hatchlings, you'll need to finish the quest you've already taken! } } else if (QuestSystem.CanOfferQuest(player, typeof(TerribleHatchlingsQuest), out inRestartPeriod)) { newQuest.SendOffer(); } else if (inRestartPeriod && contextMenu) { SayTo(player, 1049357); // I have nothing more for you at this time. } } }
/// <summary> /// This is called if the quest component has a parent quest objective and the Objective has just been completed /// This is useful for dealing with objective specific needs. /// </summary> /// <param name="objective"></param> protected virtual void OnQuestObjectiveCompleted(QuestObjective objective) { }