Beispiel #1
0
 public void RemoveDrop(Drop Drop, RewardLeaveType Type = RewardLeaveType.Normal, int Option = 0)
 {
     if (Drops.Remove(Drop.DropID))
     {
         DropPacket.SendMakeLeaveFieldPacket(Drop, Type, Option);
     }
 }
Beispiel #2
0
        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);
            }
        }