public override void Perform(DOLEvent e, object sender, EventArgs args) { GamePlayer player = BehaviourUtils.GuessGamePlayerFromNotify(e, sender, args); AbstractQuest playerQuest = player.IsDoingQuest(P); playerQuest?.AbortQuest(); }
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(); }
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)); } } }
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); }
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; }
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); }
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); } }
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); }
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; } } } }
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); } }
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); } }
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); } }
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); }); }
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; } } } } }
private void DisplayedQuest_StatusChanged(AbstractQuest quest) { NotifyPropertyChanged(nameof(IsDoneStatus)); }
public OnQuestUnloaded(AbstractQuest quest) { Quest = quest; }
public DescriptionComponent(AbstractQuest quest) : base(quest) { }
private void Step_StatusChanged(AbstractQuest quest) { OnProgressUpdated(); }
private void Model_DescriptionChanged(AbstractQuest quest) { OnDescriptionChanged(); }
private void Model_TitleChanged(AbstractQuest quest) { OnTitleChanged(); }
public void SendQuestUpdate(AbstractQuest quest) { }