public override void Perform(DOLEvent e, object sender, EventArgs args)
        {
            GamePlayer    player      = BehaviourUtils.GuessGamePlayerFromNotify(e, sender, args);
            AbstractQuest playerQuest = player.IsDoingQuest(P);

            playerQuest?.AbortQuest();
        }
Exemple #2
0
        public override void SendQuestUpdate(AbstractQuest quest)
        {
            int questIndex = 1;

            // add check for null due to LD
            if (m_gameClient != null && m_gameClient.Player != null && m_gameClient.Player.QuestList != null)
            {
                lock (m_gameClient.Player.QuestList)
                {
                    foreach (AbstractQuest q in m_gameClient.Player.QuestList)
                    {
                        if (q == quest)
                        {
                            SendQuestPacket(q, questIndex);
                            break;
                        }

                        if (q.Step != -1)
                        {
                            questIndex++;
                        }
                    }
                }
            }
        }
        public void HandlePacket(GameClient client, GSPacketIn packet)
        {
            ushort unk1       = packet.ReadShort();
            ushort questIndex = packet.ReadShort();
            ushort unk2       = packet.ReadShort();
            ushort unk3       = packet.ReadShort();

            AbstractQuest quest = null;

            int index = 0;

            lock (client.Player.QuestList)
            {
                foreach (AbstractQuest q in client.Player.QuestList)
                {
                    // ignore completed quests
                    if (q.Step == -1)
                    {
                        continue;
                    }

                    if (index == questIndex)
                    {
                        quest = q;
                        break;
                    }

                    index++;
                }
            }

            quest?.AbortQuest();
        }
Exemple #4
0
        protected void SetUpModel(AbstractQuest model)
        {
            if (model is null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            //
            // The method is protected, so it could be used in subclasses. To use the method correctly we have to be sure that next vars are initialized.
            //
            if (displayedQuest is null)
            {
                throw new NullReferenceException(nameof(displayedQuest) + "is not initialized");
            }

            if (this.steps is null)
            {
                throw new NullReferenceException(nameof(steps) + "is not initialized");
            }


            displayedQuest.SetUpModel(model);
            (displayedQuest.SourceModel as INotifyCollectionChanged).CollectionChanged += QuestPageViewModel_StepsCollectionChanged;

            foreach (var stepQuest in displayedQuest.SourceModel.Steps)
            {
                if (stepQuest != null)
                {
                    steps.Add(new QuestViewModel(stepQuest));
                }
            }
        }
Exemple #5
0
        public QuestPageViewModel(AbstractQuest questToDisplay, IPageNavigator pageNavigator)
        {
            if (questToDisplay is null)
            {
                throw new ArgumentNullException(nameof(questToDisplay));
            }
            if (pageNavigator is null)
            {
                throw new ArgumentNullException(nameof(pageNavigator));
            }

            displayedQuest = new QuestViewModel(questToDisplay);

            steps = new ObservableCollection <QuestViewModel>();
            Steps = new ReadOnlyObservableCollection <QuestViewModel>(steps);

            (displayedQuest.SourceModel.Steps as INotifyCollectionChanged).CollectionChanged += QuestPageViewModel_StepsCollectionChanged;

            foreach (var stepQuest in displayedQuest.SourceModel.Steps)
            {
                if (stepQuest != null)
                {
                    steps.Add(new QuestViewModel(stepQuest));
                }
            }

            DeleteQuestCommand = new Command(() =>
            {
                QuestRegistry.Instance.UnregisterQuest(displayedQuest.SourceModel);
                pageNavigator.ToMainPage();
            });
        }
        /// <summary>
        /// Grant credit for an artifact.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="artifactID"></param>
        /// <returns></returns>
        public static bool GrantArtifactCredit(GamePlayer player, String artifactID)
        {
            if (player == null || artifactID == null)
            {
                return(false);
            }

            if (!player.CanReceiveArtifact(artifactID))
            {
                return(false);
            }

            Artifact artifact;

            lock (m_artifacts)
            {
                if (!m_artifacts.ContainsKey(artifactID))
                {
                    return(false);
                }
                artifact = m_artifacts[artifactID];
            }

            if (artifact == null)
            {
                return(false);
            }

            Type encounterType = GetQuestType(artifact.EncounterID);

            if (encounterType == null)
            {
                return(false);
            }

            Type artifactQuestType = GetQuestType(artifact.QuestID);

            if (artifactQuestType == null)
            {
                return(false);
            }

            if (player.HasFinishedQuest(encounterType) > 0 ||
                player.HasFinishedQuest(artifactQuestType) > 0)
            {
                return(false);
            }

            AbstractQuest quest = (AbstractQuest)(System.Activator.CreateInstance(encounterType,
                                                                                  new object[] { player }));

            if (quest == null)
            {
                return(false);
            }

            quest.FinishQuest();
            return(true);
        }
Exemple #7
0
        public override void Perform(DOLEvent e, object sender, EventArgs args)
        {
            GamePlayer    player      = BehaviourUtils.GuessGamePlayerFromNotify(e, sender, args);
            AbstractQuest playerQuest = player.IsDoingQuest(P) as AbstractQuest;

            if (playerQuest != null)
            {
                playerQuest.Step = Q;
            }
        }
        public ProgressComponent(AbstractQuest quest) : base(quest)
        {
            foreach (var step in quest.Steps)
            {
                stepsCopy.Add(step);
                step.StatusChanged += Step_StatusChanged;
            }

            (quest.Steps as INotifyCollectionChanged).CollectionChanged += ProgressComponent_CollectionChanged;
        }
Exemple #9
0
        public void ToQuestPage(AbstractQuest questToDisplay)
        {
            if (questToDisplay is null)
            {
                throw new ArgumentNullException(nameof(questToDisplay));
            }

            var ViewModel = new QuestPageViewModel(questToDisplay, this);
            var QuestPage = new Views.QuestPage(ViewModel);

            Application.Current.MainPage.Navigation.PushAsync(QuestPage);
        }
Exemple #10
0
 protected override void SendQuestPacket(AbstractQuest quest, int index)
 {
     using (GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.QuestEntry)))
     {
         pak.WriteByte((byte)index);
         if (quest.Step <= 0)
         {
             pak.WriteByte(0);
             pak.WriteByte(0);
             pak.WriteByte(0);
             pak.WriteByte(0);
         }
         else
         {
             string name = quest.Name;
             string desc = quest.Description;
             if (name.Length > byte.MaxValue)
             {
                 if (log.IsWarnEnabled)
                 {
                     log.Warn(quest.GetType().ToString() + ": name is too long for 1.71 clients (" + name.Length + ") '" + name + "'");
                 }
                 name = name.Substring(0, byte.MaxValue);
             }
             if (desc.Length > ushort.MaxValue)
             {
                 if (log.IsWarnEnabled)
                 {
                     log.Warn(quest.GetType().ToString() + ": description is too long for 1.71 clients (" + desc.Length + ") '" + desc + "'");
                 }
                 desc = desc.Substring(0, ushort.MaxValue);
             }
             if (name.Length + desc.Length > 2048 - 10)
             {
                 if (log.IsWarnEnabled)
                 {
                     log.Warn(quest.GetType().ToString() + ": name + description length is too long and would have crashed the client.\nName (" + name.Length + "): '" + name + "'\nDesc (" + desc.Length + "): '" + desc + "'");
                 }
                 name = name.Substring(0, 32);
                 desc = desc.Substring(0, 2048 - 10 - name.Length);                       // all that's left
             }
             pak.WriteByte((byte)name.Length);
             pak.WriteShortLowEndian((ushort)desc.Length);
             pak.WriteByte(0);
             pak.WriteStringBytes(name);                     //Write Quest Name without trailing 0
             pak.WriteStringBytes(desc);                     //Write Quest Description without trailing 0
         }
         SendTCP(pak);
     }
 }
Exemple #11
0
        protected override void SendQuestPacket(AbstractQuest q, int index)
        {
            if (q == null || !(q is RewardQuest))
            {
                base.SendQuestPacket(q, index);
                return;
            }

            RewardQuest quest = q as RewardQuest;

            using (GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.QuestEntry)))
            {
                pak.WriteByte((byte)index);
                pak.WriteByte((byte)quest.Name.Length);
                pak.WriteShort(0x00);                 // unknown
                pak.WriteByte((byte)quest.Goals.Count);
                pak.WriteByte((byte)quest.Level);
                pak.WriteStringBytes(quest.Name);
                pak.WritePascalString(quest.Description);
                int goalindex = 0;
                foreach (RewardQuest.QuestGoal goal in quest.Goals)
                {
                    goalindex++;
                    String goalDesc = String.Format("{0}\r", goal.Description);
                    pak.WriteShortLowEndian((ushort)goalDesc.Length);
                    pak.WriteStringBytes(goalDesc);
                    pak.WriteShortLowEndian((ushort)goal.ZoneID2);
                    pak.WriteShortLowEndian((ushort)goal.XOffset2);
                    pak.WriteShortLowEndian((ushort)goal.YOffset2);
                    pak.WriteShortLowEndian(0x00);                      // unknown
                    pak.WriteShortLowEndian((ushort)goal.Type);
                    pak.WriteShortLowEndian(0x00);                      // unknown
                    pak.WriteShortLowEndian((ushort)goal.ZoneID1);
                    pak.WriteShortLowEndian((ushort)goal.XOffset1);
                    pak.WriteShortLowEndian((ushort)goal.YOffset1);
                    pak.WriteByte((byte)((goal.IsAchieved) ? 0x01 : 0x00));
                    if (goal.QuestItem == null)
                    {
                        pak.WriteByte(0x00);
                    }
                    else
                    {
                        pak.WriteByte((byte)goalindex);
                        WriteTemplateData(pak, goal.QuestItem, 1);
                    }
                }
                SendTCP(pak);
            }
        }
        /// <summary>
        /// Checks the added requirement whenever a trigger associated with this questpart fires.(returns true)
        /// </summary>
        /// <param name="e"></param>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public override bool Check(DOLEvent e, object sender, EventArgs args)
        {
            GamePlayer    player      = BehaviourUtils.GuessGamePlayerFromNotify(e, sender, args);
            AbstractQuest playerQuest = player.IsDoingQuest(N);

            bool result = true;

            if (playerQuest != null)
            {
                result &= compare(playerQuest.Step, V, Comparator);
            }
            else
            {
                result = false;
            }

            return(result);
        }
Exemple #13
0
        public override void Notify(DOLEvent e, object sender, EventArgs args)
        {
            base.Notify(e, sender, args);
            GamePlayer player = sender as GamePlayer;

            if (player == null)
            {
                return;
            }

            AbstractQuest quest = player.IsDoingQuest(typeof(BonesToBlades));

            if (quest == null)
            {
                return;
            }

            if (Step > 0 && e == GameLivingEvent.EnemyKilled)
            {
                EnemyKilledEventArgs gArgs = (EnemyKilledEventArgs)args;
                for (int i = 0; i < mobTypes.Length; i++)
                {
                    if (gArgs.Target.Name.IndexOf(mobTypes[i]) >= 0)
                    {
                        InventoryItemRequirement requirement = new InventoryItemRequirement(null, armBone, 2, eComparator.Less);
                        if (requirement.Check(e, player, args))
                        {
                            GiveItemAction action = new GiveItemAction(null, armBone, null);
                            action.Perform(e, sender, args);
                        }

                        if (!requirement.Check(e, player, args))
                        {
                            if (quest.Step == 1)
                            {
                                quest.Step = 2;
                            }
                        }

                        return;
                    }
                }
            }
        }
Exemple #14
0
        protected override void SendQuestPacket(AbstractQuest quest, int index)
        {
            using (GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.QuestEntry)))
            {
                pak.WriteByte((byte)index);
                if (quest == null)
                {
                    pak.WriteByte(0);
                    pak.WriteByte(0);
                    pak.WriteByte(0);
                    pak.WriteByte(0);
                    pak.WriteByte(0);
                }
                else
                {
                    string name = string.Format("{0} (Level {1})", quest.Name, quest.Level);
                    string desc = string.Format("[Step #{0}]: {1}", quest.Step, quest.Description);
                    if (name.Length > byte.MaxValue)
                    {
                        if (log.IsWarnEnabled)
                        {
                            log.Warn(quest.GetType().ToString() + ": name is too long for 1.68+ clients (" + name.Length + ") '" + name + "'");
                        }
                        name = name.Substring(0, byte.MaxValue);
                    }
                    if (desc.Length > byte.MaxValue)
                    {
                        if (log.IsWarnEnabled)
                        {
                            log.Warn(quest.GetType().ToString() + ": description is too long for 1.68+ clients (" + desc.Length + ") '" + desc + "'");
                        }
                        desc = desc.Substring(0, byte.MaxValue);
                    }
                    pak.WriteByte((byte)name.Length);
                    pak.WriteShortLowEndian((ushort)desc.Length);
                    pak.WriteByte(0);                     // Quest Zone ID ?
                    pak.WriteByte(0);
                    pak.WriteStringBytes(name);           //Write Quest Name without trailing 0
                    pak.WriteStringBytes(desc);           //Write Quest Description without trailing 0
                }

                SendTCP(pak);
            }
        }
Exemple #15
0
        public void SetUpModel(AbstractQuest newModel)
        {
            if (newModel is null)
            {
                throw new ArgumentNullException(nameof(newModel));
            }

            this.Clear();

            Model = newModel;

            Model.StatusChanged += DisplayedQuest_StatusChanged;
            (Model.Steps as INotifyCollectionChanged).CollectionChanged += OnQuestComponentCollectionChanged;

            var createdComponentViewModels = BuildComponentViewModelCollection(Model.Components);

            foreach (var viewModel in createdComponentViewModels)
            {
                this.questComponentViewModels.Add(viewModel);
            }
        }
Exemple #16
0
        protected override void SendQuestPacket(AbstractQuest quest, int index)
        {
            using (GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.QuestEntry)))
            {
                pak.WriteByte((byte)index);
                if (quest.Step <= 0)
                {
                    pak.WriteByte(0);
                    pak.WriteByte(0);
                    pak.WriteByte(0);
                }
                else
                {
                    string name = quest.Name;
                    string desc = quest.Description;
                    if (name.Length > byte.MaxValue)
                    {
                        if (log.IsWarnEnabled)
                        {
                            log.Warn(quest.GetType().ToString() + ": name is too long for 1.68+ clients (" + name.Length + ") '" + name + "'");
                        }
                        name = name.Substring(0, byte.MaxValue);
                    }
                    if (desc.Length > ushort.MaxValue)
                    {
                        if (log.IsWarnEnabled)
                        {
                            log.Warn(quest.GetType().ToString() + ": description is too long for 1.68+ clients (" + desc.Length + ") '" + desc + "'");
                        }
                        desc = desc.Substring(0, ushort.MaxValue);
                    }

                    pak.WriteByte((byte)name.Length);
                    pak.WriteShort((ushort)desc.Length);
                    pak.WriteStringBytes(name);                     //Write Quest Name without trailing 0
                    pak.WriteStringBytes(desc);                     //Write Quest Description without trailing 0
                }
                SendTCP(pak);
            }
        }
Exemple #17
0
        public QuestViewModel(AbstractQuest model)
        {
            if (model is null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            questComponentViewModels = new ObservableCollection <AbstractComponentViewModel>();
            QuestComponentViewModels = new ReadOnlyObservableCollection <AbstractComponentViewModel>(questComponentViewModels);

            SetUpModel(model);

            AddNewStepCommand = new Command <AbstractQuest>((quest) =>
            {
                if (quest is null)
                {
                    throw new ArgumentNullException(nameof(quest));
                }

                Model.AddStep(quest);
            });
        }
Exemple #18
0
        public void SetUpNewModelModel(AbstractQuest model)
        {
            if (model is null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            //
            // The method is protected, so it could be used in subclasses. To use the method correctly we have to be sure that next vars are inited.
            //
            if (displayedQuest is null)
            {
                throw new NullReferenceException(nameof(displayedQuest) + "is not initialized");
            }

            if (this.steps is null)
            {
                throw new NullReferenceException(nameof(steps) + "is not initialized");
            }


            Clear();
            SetUpModel(model);
        }
		/// <summary>
		/// This is the critical method to override when using the /search command
		/// For this quest will will give the player the item and advance the quest step.
		/// </summary>
		/// <param name="command"></param>
		protected override void QuestCommandCompleted(AbstractQuest.eQuestCommand command)
		{
			if (command == eQuestCommand.Search)
			{
				foreach (QuestGoal goal in Goals)
				{
					if (goal.Id == STEP2_GOAL_ID && goal.IsAchieved == false)
					{
						// Here we try to place the item in the players backpack.  If their inventory is full it fails and quest does not advance.
						if (TryGiveItem(QuestPlayer, reedFlute))
						{
							// If we can give the flute to the player then we advance to the last step
							goal.Advance();
							AddGoal(STEP3_GOAL_ID, LanguageMgr.GetTranslation(ServerProperties.Properties.SERV_LANGUAGE, "Hib.WingsOfTheIsle.Goal3", QuestPlayer.Name), QuestGoal.GoalType.ScoutMission, 1, reedFlute);
							Step = 3;
							break;
						}
					}
				}
			}
		}
Exemple #20
0
 private void DisplayedQuest_StatusChanged(AbstractQuest quest)
 {
     NotifyPropertyChanged(nameof(IsDoneStatus));
 }
Exemple #21
0
 public OnQuestUnloaded(AbstractQuest quest)
 {
     Quest = quest;
 }
 public DescriptionComponent(AbstractQuest quest) : base(quest)
 {
 }
 private void Step_StatusChanged(AbstractQuest quest)
 {
     OnProgressUpdated();
 }
Exemple #24
0
 private void Model_DescriptionChanged(AbstractQuest quest)
 {
     OnDescriptionChanged();
 }
Exemple #25
0
 private void Model_TitleChanged(AbstractQuest quest)
 {
     OnTitleChanged();
 }
Exemple #26
0
 public void SendQuestUpdate(AbstractQuest quest)
 {
 }