public void SetQuestObjective(QuestObjective objective)
 {
     _questObjective = objective;
     _questObjective.OnObjectiveCompleted += ObjectiveComplete;
     SetDescription(objective);
     objective.OnDescriptionChanged += SetDescription;
 }
Exemple #2
0
        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.
                    }
                }
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #6
0
        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));
        }
Exemple #7
0
        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);
    }
Exemple #9
0
        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);
        }
Exemple #11
0
        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);
        }
Exemple #12
0
        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);
    }
Exemple #15
0
        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));
        }
Exemple #16
0
    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;
                        }
                    }
                }
            }
        }
    }
Exemple #17
0
        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.");
                }
            }
        }
Exemple #19
0
        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);
            }
        }
Exemple #21
0
        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
                }
            }
        }
Exemple #22
0
        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);
        }
Exemple #25
0
        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);
        }
Exemple #27
0
        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;
                }
            }
        }
Exemple #28
0
        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.
            }
        }
Exemple #29
0
        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();
 }
Exemple #32
0
            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());
            }
Exemple #33
0
 private void QuestObjectiveCompleted(QuestObjective questObjective)
 {
     CheckAllEntitiesForQuestAssociation();
     TryAutoSetTrackedQuest();
 }
Exemple #34
0
            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());
                }
            }
Exemple #35
0
 // 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;
 }
Exemple #37
0
        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());
                }
            }
        }
Exemple #38
0
        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) { }