public void RemoveDrop(Drop Drop, RewardLeaveType Type = RewardLeaveType.Normal, int Option = 0) { if (Drops.Remove(Drop.DropID)) { DropPacket.SendMakeLeaveFieldPacket(Drop, Type, Option); } }
public bool Create(Reward Reward, int OwnerID, int OwnPartyID, DropType OwnType, int SourceID, Pos CurPos, int x2, short Delay, bool Admin, short Pos, bool ByPet, bool ByUser) { var Foothold = Field.GetFootholdUnderneath(x2, CurPos.Y - 100, out int y2); if (Foothold == null || !Field.IsPointInMBR(x2, y2, true)) { Foothold = Field.GetFootholdClosest(x2, CurPos.Y, ref x2, ref y2, CurPos.X); } Drop Drop = null; if (_MergeDrops && !ByUser && GetDrop(OwnerID, Reward, x2, y2, out Drop)) { Drop.CreateTime = MasterThread.CurrentTime; Drop.FFA = true; bool Changed = false; if (Drop.Reward.Mesos) { int Value = Reward.Drop + Drop.Reward.Drop; if (Drop.Reward.Drop < 50 && Value >= 50) { Changed = true; } else if (Drop.Reward.Drop < 100 && Value >= 100) { Changed = true; } else if (Drop.Reward.Drop < 1000 && Value >= 1000) { Changed = true; } Drop.Reward.Drop = Value; } else { Drop.Reward.GetData().Amount += Reward.Amount; } DropPacket.SendMakeEnterFieldPacket(Drop, RewardEnterType.DisappearDuringDrop, Delay); if (Changed) { DropPacket.SendMakeLeaveFieldPacket(Drop, RewardLeaveType.Remove); DropPacket.SendMakeEnterFieldPacket(Drop, RewardEnterType.ShowExisting, 0); } return(true); } else { Drop = new Drop(_DropIdCounter.NextValue(), Reward, OwnerID, OwnPartyID, OwnType, SourceID, CurPos.X, CurPos.Y, (short)x2, (short)y2, ByPet, ByUser) { Field = Field, CreateTime = MasterThread.CurrentTime, Pos = Pos, Everlasting = DropEverlasting, ConsumeOnPickup = (!Reward.Mesos && false /*DataProvider.ConsumeOnPickup.Contains(Reward.ItemID)*/) }; if (!Admin && ByUser && !Drop.Reward.Mesos && ((DataProvider.QuestItems.Contains(Reward.ItemID) || DataProvider.UntradeableDrops.Contains(Reward.ItemID)))) { DropPacket.SendMakeEnterFieldPacket(Drop, RewardEnterType.DisappearDuringDrop, Delay); } else { Drops.Add(Drop.DropID, Drop); DropPacket.SendMakeEnterFieldPacket(Drop, RewardEnterType.DropAnimation, Delay); } return(false); } }