public static IEnumerable <Rag2Item> UserQuestLoot(uint NpcId, Character Target) { Predicate <ObjectiveList.Loot> FindLootObjective = delegate(ObjectiveList.Loot Objective) { return(Objective.Npc == NpcId); }; List <ObjectiveList.Loot> Loots = Target.QuestObjectives.LootObjectives.FindAll(FindLootObjective); if (Loots != null) { for (int i = 0; i < Loots.Count; i++) { Rag2Item myItem; ObjectiveList.Loot objective = Loots[i]; if (Singleton.Item.TryGetItem(objective.ItemId, out myItem)) { if (Singleton.Itemdrops.CheckAgainstDroprate(myItem, objective.Ratio, Target._DropRate)) { yield return(myItem); } } } } }
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); } } } }