コード例 #1
0
ファイル: Managers.Quests.cs プロジェクト: virkmx/SagaRevised
        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);
            }
        }
コード例 #2
0
        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());
            }
        }
コード例 #3
0
ファイル: Managers.Quests.cs プロジェクト: virkmx/SagaRevised
        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);
                    }
                }
            }
        }