Exemplo n.º 1
0
        /// <summary>
        /// Drops money.
        /// </summary>
        /// <param name="amount">The amount of money to drop.</param>
        /// <param name="map">The map.</param>
        /// <param name="x">The x coordinate.</param>
        /// <param name="y">The y coordinate.</param>
        /// <param name="dropClientId">The drop client id.</param>
        private void DropMoney(uint amount, Models.Maps.Map map, ushort x, ushort y, uint dropClientId)
        {
            uint itemId = 1090000;

            if (amount >= 10000)
            {
                itemId = 1091020;
            }
            else if (amount >= 5000)
            {
                itemId = 1091010;
            }
            else if (amount >= 1000)
            {
                itemId = 1091000;
            }
            else if (amount >= 100)
            {
                itemId = 1090020;
            }
            else if (amount >= 50)
            {
                itemId = 1090010;
            }

            var item = Collections.ItemCollection.CreateItemById(itemId);

            if (item != null)
            {
                var location = map.GetValidItemCoordinate(x, y);

                item.DropMoney = amount;
                item.Drop(map.Id, location.X, location.Y, false, dropClientId);
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// Teleports to a specific map id.
 /// </summary>
 /// <param name="mapId">The map id.</param>
 public void Teleport(int mapId)
 {
     Models.Maps.Map map = Collections.MapCollection.GetMap(mapId);
     if (map != null)
     {
         Teleport(map);
     }
 }
Exemplo n.º 3
0
        /// <summary>
        /// Appends map flags by a map.
        /// </summary>
        /// <param name="map">The map.</param>
        public void AppendFlag(Models.Maps.Map map)
        {
            switch (map.MapType)
            {
            case DbMap.DbMapType.NoSkills:
            case DbMap.DbMapType.NoSkillsNoLogin:
                AppendFlag(Enums.MapFlag.BoothEnable);
                break;

            case DbMap.DbMapType.NoPK:
                AppendFlag(Enums.MapFlag.PkDisable);
                break;
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Performs the drop.
        /// </summary>
        /// <param name="map">The map.</param>
        /// <param name="x">The x coordinate.</param>
        /// <param name="y">The y coordinate.</param>
        /// <param name="mobId">The monster id.</param>
        /// <param name="player">The player that caused the drop.</param>
        public void Perform(Models.Maps.Map map, ushort x, ushort y, int mobId, Models.Entities.Player player)
        {
            if (Tools.CalculationTools.ChanceSuccess(Drop.OverAllDropChance))
            {
                if (map != null)
                {
                    if (Drop.MobIds.Count > 0)
                    {
                        if (!Drop.MobIds.Contains(mobId))
                        {
                            return;
                        }
                    }

                    uint dropClientId = player != null ? player.ClientId : 0;

                    #region Always Items
                    {
                        var items = Drop.AlwaysItemIds;

                        if (items.Count > 0)
                        {
                            var itemId = (uint)(items.Count == 1 ? items[0] :
                                                items[Drivers.Repositories.Safe.Random.Next(items.Count)]);

                            var item = Collections.ItemCollection.CreateItemById(itemId);
                            if (item != null)
                            {
                                PerformPlus(item);
                                PerformSockets(item);
                                PerformQuality(item);

                                var location = map.GetValidItemCoordinate(x, y);

                                item.Drop(map.Id, location.X, location.Y, false, dropClientId);
                            }
                        }
                    }
                    #endregion
                    #region Common Items
                    if (Tools.CalculationTools.ChanceSuccess(50))
                    {
                        var items = Drop.CommonItemIds;

                        if (items.Count > 0)
                        {
                            var itemId = (uint)(items.Count == 1 ? items[0] :
                                                items[Drivers.Repositories.Safe.Random.Next(items.Count)]);

                            var item = Collections.ItemCollection.CreateItemById(itemId);
                            if (item != null)
                            {
                                PerformPlus(item);
                                PerformSockets(item);
                                PerformQuality(item);

                                var location = map.GetValidItemCoordinate(x, y);

                                item.Drop(map.Id, location.X, location.Y, false, dropClientId);
                            }
                        }
                    }
                    #endregion
                    #region Uncommon Items
                    if (Tools.CalculationTools.ChanceSuccess(10))
                    {
                        var items = Drop.UncommonItemIds;

                        if (items.Count > 0)
                        {
                            var itemId = (uint)(items.Count == 1 ? items[0] :
                                                items[Drivers.Repositories.Safe.Random.Next(items.Count)]);

                            var item = Collections.ItemCollection.CreateItemById(itemId);
                            if (item != null)
                            {
                                PerformPlus(item);
                                PerformSockets(item);
                                PerformQuality(item);

                                var location = map.GetValidItemCoordinate(x, y);

                                item.Drop(map.Id, location.X, location.Y, false, dropClientId);
                            }
                        }
                    }
                    #endregion
                    #region Rare Items
                    if (Tools.CalculationTools.ChanceSuccess(2))
                    {
                        var items = Drop.RareItemIds;

                        if (items.Count > 0)
                        {
                            var itemId = (uint)(items.Count == 1 ? items[0] :
                                                items[Drivers.Repositories.Safe.Random.Next(items.Count)]);

                            var item = Collections.ItemCollection.CreateItemById(itemId);
                            if (item != null)
                            {
                                PerformPlus(item);
                                PerformSockets(item);
                                PerformQuality(item);

                                var location = map.GetValidItemCoordinate(x, y);

                                item.Drop(map.Id, location.X, location.Y, false, dropClientId);
                            }
                        }
                    }
                    #endregion
                    #region Super Rare Items
                    if (Tools.CalculationTools.ChanceSuccess(1))
                    {
                        var items = Drop.SuperRareItemIds;

                        if (items.Count > 0)
                        {
                            var itemId = (uint)(items.Count == 1 ? items[0] :
                                                items[Drivers.Repositories.Safe.Random.Next(items.Count)]);

                            var item = Collections.ItemCollection.CreateItemById(itemId);
                            if (item != null)
                            {
                                PerformPlus(item);
                                PerformSockets(item);
                                PerformQuality(item);

                                var location = map.GetValidItemCoordinate(x, y);

                                item.Drop(map.Id, location.X, location.Y, false, dropClientId);
                            }
                        }
                    }
                    #endregion

                    #region Money
                    if (Tools.CalculationTools.ChanceSuccessBig(Drop.MoneyChance))
                    {
                        DropMoney((uint)Drivers.Repositories.Safe.Random.Next(Drop.MinMoney, Drop.MaxMoney), map, x, y, dropClientId);
                    }
                    #endregion
                    if (player != null)
                    {
                        #region CPs
                        if (Tools.CalculationTools.ChanceSuccessBig(Drop.CPsChance))
                        {
                            player.CPs += (uint)Drivers.Repositories.Safe.Random.Next(Drop.MinCPs, Drop.MaxCPs);
                        }
                        #endregion
                        #region BoundCPs
                        if (Tools.CalculationTools.ChanceSuccessBig(Drop.BoundCPsChance))
                        {
                            player.BoundCPs += (uint)Drivers.Repositories.Safe.Random.Next(Drop.MinBoundCPs, Drop.MaxBoundCPs);
                        }
                        #endregion
                    }

                    #region Meteors
                    if (Tools.CalculationTools.ChanceSuccessBig(Drop.MeteorChance))
                    {
                        var  amount = Drivers.Repositories.Safe.Random.Next(Drop.MinMeteors, Drop.MaxMeteors + 1);
                        uint itemId = 1088001;

                        for (int i = 0; i < amount; i++)
                        {
                            var item = Collections.ItemCollection.CreateItemById(itemId);
                            if (item != null)
                            {
                                var location = map.GetValidItemCoordinate(x, y);

                                item.Drop(map.Id, location.X, location.Y, false, dropClientId);
                            }
                        }
                    }
                    #endregion
                    #region Dragonballs
                    if (Tools.CalculationTools.ChanceSuccessBig(Drop.DragonballChance))
                    {
                        var  amount = Drivers.Repositories.Safe.Random.Next(Drop.MinDragonballs, Drop.MaxDragonballs + 1);
                        uint itemId = 1088000;

                        for (int i = 0; i < amount; i++)
                        {
                            var item = Collections.ItemCollection.CreateItemById(itemId);
                            if (item != null)
                            {
                                var location = map.GetValidItemCoordinate(x, y);

                                item.Drop(map.Id, location.X, location.Y, false, dropClientId);
                            }
                        }
                    }
                    #endregion

                    #region Gems
                    if (Tools.CalculationTools.ChanceSuccessBig(Drop.NormalGemDropChance))
                    {
                        var gem = (Enums.Gem)
                                  Drivers.Repositories.Safe.Random.NextEnum(typeof(Enums.Gem));

                        switch (gem)
                        {
                        case Enums.Gem.NormalPhoenixGem:
                        case Enums.Gem.RefinedPhoenixGem:
                        case Enums.Gem.SuperPhoenixGem:
                            gem = Enums.Gem.NormalPhoenixGem;
                            break;

                        case Enums.Gem.NormalDragonGem:
                        case Enums.Gem.RefinedDragonGem:
                        case Enums.Gem.SuperDragonGem:
                            gem = Enums.Gem.NormalDragonGem;
                            break;

                        case Enums.Gem.NormalRainbowGem:
                        case Enums.Gem.RefinedRainbowGem:
                        case Enums.Gem.SuperRainbowGem:
                            gem = Enums.Gem.NormalRainbowGem;
                            break;

                        case Enums.Gem.NormalVioletGem:
                        case Enums.Gem.RefinedVioletGem:
                        case Enums.Gem.SuperVioletGem:
                            gem = Enums.Gem.NormalVioletGem;
                            break;

                        case Enums.Gem.NormalFuryGem:
                        case Enums.Gem.RefinedFuryGem:
                        case Enums.Gem.SuperFuryGem:
                            gem = Enums.Gem.NormalFuryGem;
                            break;

                        case Enums.Gem.NormalKylinGem:
                        case Enums.Gem.RefinedKylinGem:
                        case Enums.Gem.SuperKylinGem:
                            gem = Enums.Gem.NormalKylinGem;
                            break;

                        case Enums.Gem.NormalMoonGem:
                        case Enums.Gem.RefinedMoonGem:
                        case Enums.Gem.SuperMoonGem:
                            gem = Enums.Gem.NormalMoonGem;
                            break;

                        default:
                            return;
                        }

                        uint gemId = (uint)(((uint)gem) + 700000);

                        if (Tools.CalculationTools.ChanceSuccessBig(Drop.RefinedGemDropChance))
                        {
                            gemId += 1;
                            if (Tools.CalculationTools.ChanceSuccessBig(Drop.SuperGemDropChance))
                            {
                                gemId += 1;
                            }
                        }

                        var item = Collections.ItemCollection.CreateItemById(gemId);
                        if (item != null)
                        {
                            var location = map.GetValidItemCoordinate(x, y);

                            item.Drop(map.Id, location.X, location.Y, false, dropClientId);
                        }
                    }
                    #endregion
                }
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Teleports to a specific map and coordination.
        /// </summary>
        /// <param name="mapId">The map id.</param>
        /// <param name="x">The x coord.</param>
        /// <param name="y">The y coord.</param>
        /// <param name="pullback">Boolean indicating whether the teleport is a pullback or not.</param>
        public void Teleport(int mapId, ushort x, ushort y, bool pullback = false)
        {
            Models.Maps.Map newMap = null;

            if (!pullback)
            {
                if (MapObject.Map != null)
                {
                    if (mapId == MapObject.MapId && x == MapObject.X && y == MapObject.Y)
                    {
                        return;
                    }
                    else if (!MapObject.Map.RemoveFromMap(MapObject))
                    {
                        return;
                    }
                }

                if (mapId != 0)
                {
                    newMap = Collections.MapCollection.GetMap(mapId);
                    if (newMap == null)
                    {
                        return;
                    }

                    if (!newMap.AddToMap(MapObject))
                    {
                        return;
                    }
                }
            }

            var player = MapObject as Models.Entities.Player;

            if (player != null && player.LoggedIn)
            {
                player.AttackPacket = null;
                uint sendMap = (uint)player.Map.ClientMapId;
                player.ClientSocket.Send(new Models.Packets.Client.DataExchangePacket
                {
                    ClientId     = player.ClientId,
                    Data1        = sendMap,
                    Timestamp    = Drivers.Time.GetSystemTime(),
                    ExchangeType = Enums.ExchangeType.Teleport,
                    Data3Low     = x,
                    Data3High    = y
                });
                player.ClientSocket.Send(new Models.Packets.Client.DataExchangePacket
                {
                    ClientId     = player.ClientId,
                    Data1        = sendMap,
                    Timestamp    = Drivers.Time.GetSystemTime(),
                    ExchangeType = Enums.ExchangeType.ChangeMap,
                    Data3Low     = x,
                    Data3High    = y
                });
                player.ClientSocket.Send(new Models.Packets.Location.MapInfoPacket
                {
                    Map = player.Map
                });
            }

            MapObject.X = x;
            MapObject.Y = y;

            UpdateScreen(true);
        }