public static void UserCheckPosition(Character Target) { List <uint> QuestsId = new List <uint>(); Predicate <ObjectiveList.Position> FindLootObjective = delegate(ObjectiveList.Position Objective) { if (Objective.mapid != Target.map) { return(false); } return(!QuestsId.Contains(Objective.Quest) && Vector.GetDistance2D(Target.Position, Objective.point) < 2000); }; //DEFAULT_MANAGER_QUEST.CheckQuest(Target, baseQuest); foreach (ObjectiveList.Position Objective in Target.QuestObjectives.Points.FindAll(FindLootObjective)) { Predicate <ObjectiveList.SubStep> SubStepInfo = delegate(ObjectiveList.SubStep Substep) { return(Substep.Quest == Objective.Quest && Substep.StepId == Objective.StepId && Substep.SubStepId == Objective.SubStepId); }; if (Vector.GetDistance3D(Target.Position, Objective.point) < Objective.range) { ObjectiveList.SubStep Substep = Target.QuestObjectives.Substeps.Find(SubStepInfo); if (Substep != null && Substep.current < Substep.max) { //Send update SMSG_QUESTSUBSTEPUPDATE spkt = new SMSG_QUESTSUBSTEPUPDATE(); spkt.Amount = (byte)(++Substep.current); spkt.QuestID = Objective.Quest; spkt.SessionId = Target.id; spkt.StepID = Substep.StepId; spkt.SubStep = (byte)Substep.SubStepId; spkt.Unknown = 1; Target.client.Send((byte[])spkt); //Find Objective if (Substep.current >= Substep.max) { Substep.Completed = true; Target.QuestObjectives[Objective.Quest].CheckQuest(Target); } } } } foreach (ObjectiveList.Position Objective in Target.QuestObjectives.ScenarioPosition.FindAll(FindLootObjective)) { Target.QuestObjectives.Quests[3].CheckQuest(Target); } }
public static void UserEliminateTarget(uint NpcId, Character Target) { try { Predicate <ObjectiveList.Elimination> FindElimintation = delegate(ObjectiveList.Elimination Objective) { return(Objective.NpcId == NpcId); }; ObjectiveList.Elimination EliminationObjective = Target.QuestObjectives.Elimintations.Find(FindElimintation); ObjectiveList.SubStep Substep = null; if (EliminationObjective != null) { //Find Substep Predicate <ObjectiveList.SubStep> SubStepInfo = delegate(ObjectiveList.SubStep Objective) { return(Objective.StepId == EliminationObjective.StepId && Objective.SubStepId == EliminationObjective.SubStepId); }; Substep = Target.QuestObjectives.Substeps.Find(SubStepInfo); if (Substep != null && Substep.current < Substep.max) { //Send update SMSG_QUESTSUBSTEPUPDATE spkt = new SMSG_QUESTSUBSTEPUPDATE(); spkt.Amount = (byte)(++Substep.current); spkt.QuestID = EliminationObjective.Quest; spkt.SessionId = Target.id; spkt.StepID = Substep.StepId; spkt.SubStep = (byte)Substep.SubStepId; spkt.Unknown = 1; Target.client.Send((byte[])spkt); //Find Objective if (Substep.current >= Substep.max) { Substep.Completed = true; Target.QuestObjectives[EliminationObjective.Quest].CheckQuest(Target); } } } } catch (Exception e) { Trace.TraceError(e.ToString()); } }
public static void UserObtainedItem(uint ItemId, Character Target) { Predicate <ObjectiveList.Loot> FindLootObjective = delegate(ObjectiveList.Loot Objective) { return(Objective.ItemId == ItemId); }; ObjectiveList.Loot LootObjective = Target.QuestObjectives.LootObjectives.Find(FindLootObjective); ObjectiveList.SubStep Substep = null; if (LootObjective != null) { //Find Substep Predicate <ObjectiveList.SubStep> SubStepInfo = delegate(ObjectiveList.SubStep Objective) { return(Objective.StepId == LootObjective.StepId && Objective.SubStepId == LootObjective.SubStepId); }; Substep = Target.QuestObjectives.Substeps.Find(SubStepInfo); if (Substep != null && Substep.current < Substep.max) { //Send update SMSG_QUESTSUBSTEPUPDATE spkt = new SMSG_QUESTSUBSTEPUPDATE(); spkt.Amount = (byte)(++Substep.current); spkt.QuestID = LootObjective.Quest; spkt.SessionId = Target.id; spkt.StepID = Substep.StepId; spkt.SubStep = (byte)Substep.SubStepId; spkt.Unknown = 1; Target.client.Send((byte[])spkt); //Find Objective if (Substep.current >= Substep.max) { Substep.Completed = true; Target.QuestObjectives[LootObjective.Quest].CheckQuest(Target); } } } }