public SaveResult InsertOrUpdate(ref MinilandObjectDTO obj)
        {
            try
            {
                using (OpenNosContext context = DataAccessHelper.CreateContext())
                {
                    long           id     = obj.MinilandObjectId;
                    MinilandObject entity = context.MinilandObject.FirstOrDefault(c => c.MinilandObjectId.Equals(id));

                    if (entity == null)
                    {
                        obj = Insert(obj, context);
                        return(SaveResult.Inserted);
                    }

                    obj.MinilandObjectId = entity.MinilandObjectId;
                    obj = Update(entity, obj, context);
                    return(SaveResult.Updated);
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
                return(SaveResult.Error);
            }
        }
Exemplo n.º 2
0
        public void MinilandRemoveObject(RmvobjPacket packet)
        {
            ItemInstance minilandobject = Session.Character.Inventory.LoadBySlotAndType <ItemInstance>(packet.Slot, InventoryType.Miniland);

            if (minilandobject != null)
            {
                if (Session.Character.MinilandState == MinilandState.LOCK)
                {
                    MinilandObject mo = Session.Character.MinilandObjects.FirstOrDefault(s => s.ItemInstanceId == minilandobject.Id);
                    if (mo != null)
                    {
                        if (minilandobject.Item.IsMinilandObject)
                        {
                            Session.Character.WareHouseSize = 0;
                        }
                        Session.Character.MinilandObjects.Remove(mo);
                        Session.SendPacket(mo.GenerateMinilandEffect(true));
                        Session.SendPacket(Session.Character.GenerateMinilandPoint());
                        Session.SendPacket(mo.GenerateMinilandObject(true));
                    }
                }
                else
                {
                    Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("MINILAND_NEED_LOCK"), 0));
                }
            }
        }
Exemplo n.º 3
0
        private void ExecuteHandler(ClientSession session)
        {
            ItemInstance minilandobject =
                session.Character.Inventory.LoadBySlotAndType <ItemInstance>(Slot, InventoryType.Miniland);

            if (minilandobject != null)
            {
                if (session.Character.MinilandState == MinilandState.Lock)
                {
                    MinilandObject minilandObject =
                        session.Character.MinilandObjects.Find(s => s.ItemInstanceId == minilandobject.Id);
                    if (minilandObject != null)
                    {
                        if (minilandobject.Item.IsMinilandObject)
                        {
                            session.Character.WareHouseSize = 0;
                        }

                        session.Character.MinilandObjects.Remove(minilandObject);
                        session.SendPacket(minilandObject.GenerateMinilandEffect(true));
                        session.SendPacket(session.Character.GenerateMinilandPoint());
                        session.SendPacket(minilandObject.GenerateMinilandObject(true));
                    }
                }
                else
                {
                    session.SendPacket(
                        UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("MINILAND_NEED_LOCK"), 0));
                }
            }
        }
Exemplo n.º 4
0
        private void ExecuteHandler(ClientSession session)
        {
            ClientSession client =
                ServerManager.Instance.Sessions.FirstOrDefault(s =>
                                                               s.Character?.Miniland == session.Character.MapInstance);
            ItemInstance minilandObjectItem =
                client?.Character.Inventory.LoadBySlotAndType <ItemInstance>(Slot, InventoryType.Miniland);

            if (minilandObjectItem != null)
            {
                MinilandObject minilandObject =
                    client.Character.MinilandObjects.Find(s => s.ItemInstanceId == minilandObjectItem.Id);
                if (minilandObject != null)
                {
                    if (!minilandObjectItem.Item.IsMinilandObject)
                    {
                        byte game = (byte)(minilandObject.ItemInstance.Item.EquipmentSlot == 0
                            ? 4 + (minilandObject.ItemInstance.ItemVNum % 10)
                            : (int)minilandObject.ItemInstance.Item.EquipmentSlot / 3);
                        const bool full = false;
                        session.SendPacket(
                            $"mlo_info {(client == session ? 1 : 0)} {minilandObjectItem.ItemVNum} {Slot} {session.Character.MinilandPoint} {(minilandObjectItem.DurabilityPoint < 1000 ? 1 : 0)} {(full ? 1 : 0)} 0 {SharedMinilandMethods.GetMinilandMaxPoint(game)[0]} {SharedMinilandMethods.GetMinilandMaxPoint(game)[0] + 1} {SharedMinilandMethods.GetMinilandMaxPoint(game)[1]} {SharedMinilandMethods.GetMinilandMaxPoint(game)[1] + 1} {SharedMinilandMethods.GetMinilandMaxPoint(game)[2]} {SharedMinilandMethods.GetMinilandMaxPoint(game)[2] + 2} {SharedMinilandMethods.GetMinilandMaxPoint(game)[3]} {SharedMinilandMethods.GetMinilandMaxPoint(game)[3] + 1} {SharedMinilandMethods.GetMinilandMaxPoint(game)[4]} {SharedMinilandMethods.GetMinilandMaxPoint(game)[4] + 1} {SharedMinilandMethods.GetMinilandMaxPoint(game)[5]}");
                    }
                    else
                    {
                        session.SendPacket(session.Character.GenerateStashAll());
                    }
                }
            }
        }
        private static MinilandObjectDTO Update(MinilandObject entity, MinilandObjectDTO respawn, OpenNosContext context)
        {
            if (entity != null)
            {
                Mapper.Mappers.MinilandObjectMapper.ToMinilandObject(respawn, entity);
                context.SaveChanges();
            }
            if (Mapper.Mappers.MinilandObjectMapper.ToMinilandObjectDTO(entity, respawn))
            {
                return(respawn);
            }

            return(null);
        }
        protected override void Handle(Client client, MlObjLstPacket packet)
        {
            Character character = client.Character;

            var miniland = character.Map as Miniland;

            if (miniland == null)
            {
                _logger.Info("Not in miniland");
                return;
            }

            miniland.Objects.Clear();

            string[] minilandObjects = packet.Content.Split(' ');
            foreach (string obj in minilandObjects)
            {
                string[] objectInfo = obj.Split('.');

                int  slot = Convert.ToInt32(objectInfo[0]);
                bool used = objectInfo[1] == "1";

                if (!used)
                {
                    _logger.Info($"Miniland object {slot} is not used, skipping.");
                    continue;
                }

                ItemInstance itemInstance = character.Inventory.Miniland.GetValueOrDefault(slot);
                if (itemInstance == null)
                {
                    _logger.Info($"No miniland object found in inventory at slot {slot}");
                    continue;
                }

                var position = new Position(Convert.ToInt16(objectInfo[2]), Convert.ToInt16(objectInfo[3]));

                MinilandObject minilandObject = _minilandObjectFactory.CreateMinilandObject(itemInstance.Item, slot, position);
                if (minilandObject == null)
                {
                    _logger.Debug("Not a miniland object");
                    continue;
                }

                miniland.Objects.Add(minilandObject);
            }
        }
 public static bool ToMinilandObjectDTO(MinilandObject input, MinilandObjectDTO output)
 {
     if (input == null)
     {
         return(false);
     }
     output.CharacterId      = input.CharacterId;
     output.ItemInstanceId   = input.ItemInstanceId;
     output.Level1BoxAmount  = input.Level1BoxAmount;
     output.Level2BoxAmount  = input.Level2BoxAmount;
     output.Level3BoxAmount  = input.Level3BoxAmount;
     output.Level4BoxAmount  = input.Level4BoxAmount;
     output.Level5BoxAmount  = input.Level5BoxAmount;
     output.MapX             = input.MapX;
     output.MapY             = input.MapY;
     output.MinilandObjectId = input.MinilandObjectId;
     return(true);
 }
        private static MinilandObjectDTO Insert(MinilandObjectDTO obj, OpenNosContext context)
        {
            try
            {
                MinilandObject entity = new MinilandObject();
                Mapper.Mappers.MinilandObjectMapper.ToMinilandObject(obj, entity);
                context.MinilandObject.Add(entity);
                context.SaveChanges();
                if (Mapper.Mappers.MinilandObjectMapper.ToMinilandObjectDTO(entity, obj))
                {
                    return(obj);
                }

                return(null);
            }
            catch (Exception e)
            {
                Logger.Error(e);
                return(null);
            }
        }
        public DeleteResult DeleteById(long id)
        {
            try
            {
                using (OpenNosContext context = DataAccessHelper.CreateContext())
                {
                    MinilandObject item = context.MinilandObject.First(i => i.MinilandObjectId.Equals(id));

                    if (item != null)
                    {
                        context.MinilandObject.Remove(item);
                        context.SaveChanges();
                    }

                    return(DeleteResult.Deleted);
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
                return(DeleteResult.Error);
            }
        }
Exemplo n.º 10
0
        public void UseMinilandObject(UseobjPacket packet)
        {
            ClientSession client         = ServerManager.Instance.Sessions.FirstOrDefault(s => s.Character?.Miniland == Session.Character.MapInstance);
            ItemInstance  minilandobject = client?.Character.Inventory.LoadBySlotAndType <ItemInstance>(packet.Slot, InventoryType.Miniland);

            if (minilandobject != null)
            {
                MinilandObject mlobj = client.Character.MinilandObjects.FirstOrDefault(s => s.ItemInstanceId == minilandobject.Id);
                if (mlobj != null)
                {
                    if (!minilandobject.Item.IsMinilandObject)
                    {
                        byte game = (byte)(mlobj.ItemInstance.Item.EquipmentSlot == 0 ? 4 + mlobj.ItemInstance.ItemVNum % 10 : (int)mlobj.ItemInstance.Item.EquipmentSlot / 3);
                        bool full = false;
                        Session.SendPacket($"mlo_info {(client == Session ? 1 : 0)} {minilandobject.ItemVNum} {packet.Slot} {Session.Character.MinilandPoint} {(minilandobject.DurabilityPoint < 1000 ? 1 : 0)} {(full ? 1 : 0)} 0 {GetMinilandMaxPoint(game)[0]} {GetMinilandMaxPoint(game)[0] + 1} {GetMinilandMaxPoint(game)[1]} {GetMinilandMaxPoint(game)[1] + 1} {GetMinilandMaxPoint(game)[2]} {GetMinilandMaxPoint(game)[2] + 2} {GetMinilandMaxPoint(game)[3]} {GetMinilandMaxPoint(game)[3] + 1} {GetMinilandMaxPoint(game)[4]} {GetMinilandMaxPoint(game)[4] + 1} {GetMinilandMaxPoint(game)[5]}");
                    }
                    else
                    {
                        Session.SendPacket(Session.Character.GenerateStashAll());
                    }
                }
            }
        }
Exemplo n.º 11
0
        private void ExecuteHandler(ClientSession session)
        {
            ItemInstance minilandobject =
                session.Character.Inventory.LoadBySlotAndType <ItemInstance>(Slot, InventoryType.Miniland);

            if (minilandobject != null)
            {
                if (session.Character.MinilandObjects.All(s => s.ItemInstanceId != minilandobject.Id))
                {
                    if (session.Character.MinilandState == MinilandState.Lock)
                    {
                        MinilandObject minilandobj = new MinilandObject
                        {
                            CharacterId     = session.Character.CharacterId,
                            ItemInstance    = minilandobject,
                            ItemInstanceId  = minilandobject.Id,
                            MapX            = PositionX,
                            MapY            = PositionY,
                            Level1BoxAmount = 0,
                            Level2BoxAmount = 0,
                            Level3BoxAmount = 0,
                            Level4BoxAmount = 0,
                            Level5BoxAmount = 0
                        };

                        if (minilandobject.Item.ItemType == ItemType.House)
                        {
                            switch (minilandobject.Item.ItemSubType)
                            {
                            case 2:
                                minilandobj.MapX = 31;
                                minilandobj.MapY = 3;
                                break;

                            case 0:
                                minilandobj.MapX = 24;
                                minilandobj.MapY = 7;
                                break;

                            case 1:
                                minilandobj.MapX = 21;
                                minilandobj.MapY = 4;
                                break;
                            }

                            MinilandObject min = session.Character.MinilandObjects.Find(s =>
                                                                                        s.ItemInstance.Item.ItemType == ItemType.House && s.ItemInstance.Item.ItemSubType
                                                                                        == minilandobject.Item.ItemSubType);
                            if (min != null)
                            {
                                MinilandRemoveObject.HandlePacket(session, $"1 rmobj {Slot}");
                            }
                        }

                        if (minilandobject.Item.IsMinilandObject)
                        {
                            session.Character.WareHouseSize = minilandobject.Item.MinilandObjectPoint;
                        }

                        session.Character.MinilandObjects.Add(minilandobj);
                        session.SendPacket(minilandobj.GenerateMinilandEffect(false));
                        session.SendPacket(session.Character.GenerateMinilandPoint());
                        session.SendPacket(minilandobj.GenerateMinilandObject(false));
                    }
                    else
                    {
                        session.SendPacket(
                            UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("MINILAND_NEED_LOCK"),
                                                            0));
                    }
                }
                else
                {
                    session.SendPacket(
                        UserInterfaceHelper.GenerateMsg(
                            Language.Instance.GetMessageFromKey("ALREADY_THIS_MINILANDOBJECT"), 0));
                }
            }
        }
        private void ExecuteHandler(ClientSession session)
        {
            ClientSession client =
                ServerManager.Instance.Sessions.FirstOrDefault(s =>
                                                               s.Character?.Miniland == session.Character.MapInstance);
            MinilandObject mlobj =
                client?.Character.MinilandObjects.Find(s => s.ItemInstance.ItemVNum == MinigameVNum);

            if (mlobj != null)
            {
                const bool full = false;
                byte       game = (byte)(mlobj.ItemInstance.Item.EquipmentSlot);
                switch (Type)
                {
                //play
                case 1:
                    if (mlobj.ItemInstance.DurabilityPoint <= 0)
                    {
                        session.SendPacket(UserInterfaceHelper.GenerateMsg(
                                               Language.Instance.GetMessageFromKey("NOT_ENOUGH_DURABILITY_POINT"), 0));
                        return;
                    }

                    if (session.Character.MinilandPoint <= 0)
                    {
                        session.SendPacket(
                            $"qna #mg^1^7^3125^1^1 {Language.Instance.GetMessageFromKey("NOT_ENOUGH_MINILAND_POINT")}");
                    }

                    session.Character.MapInstance.Broadcast(
                        UserInterfaceHelper.GenerateGuri(2, 1, session.Character.CharacterId));
                    session.Character.CurrentMinigame = (short)(game == 0 ? 5102 :
                                                                game == 1 ? 5103 :
                                                                game == 2 ? 5105 :
                                                                game == 3 ? 5104 :
                                                                game == 4 ? 5113 : 5112);
                    session.Character.MinigameLog = new MinigameLogDTO
                    {
                        CharacterId = session.Character.CharacterId,
                        StartTime   = DateTime.UtcNow.Ticks,
                        Minigame    = game
                    };
                    session.SendPacket($"mlo_st {game}");
                    break;

                //stop
                case 2:
                    session.Character.CurrentMinigame = 0;
                    session.Character.MapInstance.Broadcast(
                        UserInterfaceHelper.GenerateGuri(6, 1, session.Character.CharacterId));
                    break;

                case 3:
                    session.Character.CurrentMinigame = 0;
                    session.Character.MapInstance.Broadcast(
                        UserInterfaceHelper.GenerateGuri(6, 1, session.Character.CharacterId));
                    if (Point.HasValue && session.Character.MinigameLog != null)
                    {
                        session.Character.MinigameLog.EndTime = DateTime.UtcNow.Ticks;
                        session.Character.MinigameLog.Score   = Point.Value;

                        int level = -1;
                        for (short i = 0; i < SharedMinilandMethods.GetMinilandMaxPoint(game).Length; i++)
                        {
                            if (Point.Value > SharedMinilandMethods.GetMinilandMaxPoint(game)[i])
                            {
                                level = i;
                            }
                            else
                            {
                                break;
                            }
                        }

                        session.SendPacket(level != -1
                                ? $"mlo_lv {level}"
                                : $"mg 3 {game} {MinigameVNum} 0 0");
                    }

                    break;

                // select gift
                case 4:
                    if (session.Character.MinilandPoint >= 100 &&
                        session.Character.MinigameLog != null &&
                        Point.HasValue && Point.Value > 0 &&
                        SharedMinilandMethods.GetMinilandMaxPoint(game)[Point.Value - 1] < session.Character.MinigameLog.Score)
                    {
                        MinigameLogDTO dto = session.Character.MinigameLog;
                        DAOFactory.MinigameLogDAO.InsertOrUpdate(ref dto);
                        session.Character.MinigameLog = null;
                        Gift obj = SharedMinilandMethods.GetMinilandGift(MinigameVNum, Point.Value);
                        if (obj != null)
                        {
                            session.SendPacket($"mlo_rw {obj.VNum} {obj.Amount}");
                            session.SendPacket(session.Character.GenerateMinilandPoint());
                            List <ItemInstance> inv =
                                session.Character.Inventory.AddNewToInventory(obj.VNum, obj.Amount);
                            session.Character.MinilandPoint -= 100;
                            if (inv.Count == 0)
                            {
                                session.Character.SendGift(session.Character.CharacterId, obj.VNum, obj.Amount,
                                                           0, 0, false);
                            }

                            if (client != session)
                            {
                                switch (Point.Value)
                                {
                                case 0:
                                    mlobj.Level1BoxAmount++;
                                    break;

                                case 1:
                                    mlobj.Level2BoxAmount++;
                                    break;

                                case 2:
                                    mlobj.Level3BoxAmount++;
                                    break;

                                case 3:
                                    mlobj.Level4BoxAmount++;
                                    break;

                                case 4:
                                    mlobj.Level5BoxAmount++;
                                    break;
                                }
                            }
                        }
                    }

                    break;

                case 5:
                    session.SendPacket(session.Character.GenerateMloMg(mlobj, MinigameVNum));
                    break;

                //refill
                case 6:
                    if (!Point.HasValue || Point.Value < 0)
                    {
                        return;
                    }

                    if (session.Character.Gold > Point)
                    {
                        session.Character.Gold -= Point.Value;
                        session.SendPacket(session.Character.GenerateGold());
                        mlobj.ItemInstance.DurabilityPoint += Point.Value / 100;
                        session.SendPacket(UserInterfaceHelper.GenerateInfo(
                                               string.Format(Language.Instance.GetMessageFromKey("REFILL_MINIGAME"),
                                                             Point.Value / 100)));
                        session.SendPacket(session.Character.GenerateMloMg(mlobj, MinigameVNum));
                    }

                    break;

                //gift
                case 7:
                    session.SendPacket(
                        $"mlo_pmg {MinigameVNum} {session.Character.MinilandPoint} {(mlobj.ItemInstance.DurabilityPoint < 1000 ? 1 : 0)} {(full ? 1 : 0)} {(mlobj.Level1BoxAmount > 0 ? $"392 {mlobj.Level1BoxAmount}" : "0 0")} {(mlobj.Level2BoxAmount > 0 ? $"393 {mlobj.Level2BoxAmount}" : "0 0")} {(mlobj.Level3BoxAmount > 0 ? $"394 {mlobj.Level3BoxAmount}" : "0 0")} {(mlobj.Level4BoxAmount > 0 ? $"395 {mlobj.Level4BoxAmount}" : "0 0")} {(mlobj.Level5BoxAmount > 0 ? $"396 {mlobj.Level5BoxAmount}" : "0 0")} 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0");
                    break;

                //get gift
                case 8:
                    if (!Point.HasValue)
                    {
                        return;
                    }
                    int amount = 0;
                    switch (Point.Value)
                    {
                    case 0:
                        amount = mlobj.Level1BoxAmount;
                        break;

                    case 1:
                        amount = mlobj.Level2BoxAmount;
                        break;

                    case 2:
                        amount = mlobj.Level3BoxAmount;
                        break;

                    case 3:
                        amount = mlobj.Level4BoxAmount;
                        break;

                    case 4:
                        amount = mlobj.Level5BoxAmount;
                        break;
                    }

                    List <Gift> gifts = new List <Gift>();
                    for (int i = 0; i < amount; i++)
                    {
                        Gift gift = SharedMinilandMethods.GetMinilandGift(MinigameVNum, Point.Value);
                        if (gift != null)
                        {
                            if (gifts.Any(o => o.VNum == gift.VNum))
                            {
                                gifts.First(o => o.Amount == gift.Amount).Amount += gift.Amount;
                            }
                            else
                            {
                                gifts.Add(gift);
                            }
                        }
                    }

                    string str = string.Empty;
                    for (int i = 0; i < 9; i++)
                    {
                        if (gifts.Count > i)
                        {
                            short itemVNum          = gifts[i].VNum;
                            byte  itemAmount        = gifts[i].Amount;
                            List <ItemInstance> inv =
                                session.Character.Inventory.AddNewToInventory(itemVNum, itemAmount);
                            if (inv.Count > 0)
                            {
                                session.SendPacket(session.Character.GenerateSay(
                                                       $"{Language.Instance.GetMessageFromKey("ITEM_ACQUIRED")}: {ServerManager.GetItem(itemVNum).Name} x {itemAmount}",
                                                       12));
                            }
                            else
                            {
                                session.Character.SendGift(session.Character.CharacterId, itemVNum, itemAmount, 0,
                                                           0, false);
                            }

                            str += $" {itemVNum} {itemAmount}";
                        }
                        else
                        {
                            str += " 0 0";
                        }
                    }

                    session.SendPacket(
                        $"mlo_pmg {MinigameVNum} {session.Character.MinilandPoint} {(mlobj.ItemInstance.DurabilityPoint < 1000 ? 1 : 0)} {(full ? 1 : 0)} {(mlobj.Level1BoxAmount > 0 ? $"392 {mlobj.Level1BoxAmount}" : "0 0")} {(mlobj.Level2BoxAmount > 0 ? $"393 {mlobj.Level2BoxAmount}" : "0 0")} {(mlobj.Level3BoxAmount > 0 ? $"394 {mlobj.Level3BoxAmount}" : "0 0")} {(mlobj.Level4BoxAmount > 0 ? $"395 {mlobj.Level4BoxAmount}" : "0 0")} {(mlobj.Level5BoxAmount > 0 ? $"396 {mlobj.Level5BoxAmount}" : "0 0")}{str}");
                    break;

                //coupon
                case 9:
                    List <ItemInstance> items = session.Character.Inventory
                                                .Where(s => s.ItemVNum == 1269 || s.ItemVNum == 1271).OrderBy(s => s.Slot).ToList();
                    if (items.Count > 0)
                    {
                        short itemVNum = items[0].ItemVNum;
                        session.Character.Inventory.RemoveItemAmount(itemVNum);
                        int point = itemVNum == 1269 ? 300 : 500;
                        mlobj.ItemInstance.DurabilityPoint += point;
                        session.SendPacket(UserInterfaceHelper.GenerateInfo(
                                               string.Format(Language.Instance.GetMessageFromKey("REFILL_MINIGAME"), point)));
                        session.SendPacket(session.Character.GenerateMloMg(mlobj, MinigameVNum));
                    }

                    break;
                }
            }
        }
Exemplo n.º 13
0
        public void MinigamePlay(MinigamePacket packet)
        {
            ClientSession  client = ServerManager.Instance.Sessions.FirstOrDefault(s => s.Character?.Miniland == Session.Character.MapInstance);
            MinilandObject mlobj  = client?.Character.MinilandObjects.FirstOrDefault(s => s.ItemInstance.ItemVNum == packet.MinigameVNum);

            if (mlobj != null)
            {
                bool full = false;
                byte game = (byte)(mlobj.ItemInstance.Item.EquipmentSlot == 0 ? 4 + mlobj.ItemInstance.ItemVNum % 10 : (int)mlobj.ItemInstance.Item.EquipmentSlot / 3);
                switch (packet.Type)
                {
                //play
                case 1:
                    if (mlobj.ItemInstance.DurabilityPoint <= 0)
                    {
                        Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("NOT_ENOUGH_DURABILITY_POINT"), 0));
                        return;
                    }
                    if (Session.Character.MinilandPoint <= 0)
                    {
                        Session.SendPacket($"qna #mg^1^7^3125^1^1 {Language.Instance.GetMessageFromKey("NOT_ENOUGH_MINILAND_POINT")}");
                    }
                    Session.Character.MapInstance.Broadcast(UserInterfaceHelper.Instance.GenerateGuri(2, 1, Session.Character.CharacterId));
                    Session.Character.CurrentMinigame = (short)(game == 0 ? 5102 : game == 1 ? 5103 : game == 2 ? 5105 : game == 3 ? 5104 : game == 4 ? 5113 : 5112);
                    Session.SendPacket($"mlo_st {game}");
                    break;

                //stop
                case 2:
                    Session.Character.CurrentMinigame = 0;
                    Session.Character.MapInstance.Broadcast(UserInterfaceHelper.Instance.GenerateGuri(6, 1, Session.Character.CharacterId));
                    break;

                case 3:
                    Session.Character.CurrentMinigame = 0;
                    Session.Character.MapInstance.Broadcast(UserInterfaceHelper.Instance.GenerateGuri(6, 1, Session.Character.CharacterId));
                    int Level = -1;
                    for (short i = 0; i < GetMinilandMaxPoint(game).Count(); i++)
                    {
                        if (packet.Point > GetMinilandMaxPoint(game)[i])
                        {
                            Level = i;
                        }
                        else
                        {
                            break;
                        }
                    }
                    Session.SendPacket(Level != -1
                            ? $"mlo_lv {Level}"
                            : $"mg 3 {game} {packet.MinigameVNum} 0 0");
                    break;

                // select gift
                case 4:
                    if (Session.Character.MinilandPoint >= 100)
                    {
                        Gift obj = GetMinilandGift(packet.MinigameVNum, (int)packet.Point);
                        if (obj != null)
                        {
                            Session.SendPacket($"mlo_rw {obj.VNum} {obj.Amount}");
                            Session.SendPacket(Session.Character.GenerateMinilandPoint());
                            List <ItemInstance> inv = Session.Character.Inventory.AddNewToInventory(obj.VNum, obj.Amount);
                            Session.Character.MinilandPoint -= 100;
                            if (!inv.Any())
                            {
                                Session.Character.SendGift(Session.Character.CharacterId, obj.VNum, obj.Amount, 0, 0, false);
                            }

                            if (client != Session)
                            {
                                switch (packet.Point)
                                {
                                case 0:
                                    mlobj.Level1BoxAmount++;
                                    break;

                                case 1:
                                    mlobj.Level2BoxAmount++;
                                    break;

                                case 2:
                                    mlobj.Level3BoxAmount++;
                                    break;

                                case 3:
                                    mlobj.Level4BoxAmount++;
                                    break;

                                case 4:
                                    mlobj.Level5BoxAmount++;
                                    break;
                                }
                            }
                        }
                    }
                    break;

                case 5:
                    Session.SendPacket(Session.Character.GenerateMloMg(mlobj, packet));
                    break;

                //refill
                case 6:
                    if (packet.Point == null)
                    {
                        return;
                    }
                    if (Session.Character.Gold > packet.Point)
                    {
                        Session.Character.Gold -= (int)packet.Point;
                        Session.SendPacket(Session.Character.GenerateGold());
                        mlobj.ItemInstance.DurabilityPoint += (int)(packet.Point / 100);
                        Session.SendPacket(UserInterfaceHelper.Instance.GenerateInfo(Language.Instance.GetMessageFromKey(string.Format("REFILL_MINIGAME", (int)packet.Point / 100))));
                        Session.SendPacket(Session.Character.GenerateMloMg(mlobj, packet));
                    }
                    break;

                //gift
                case 7:
                    Session.SendPacket($"mlo_pmg {packet.MinigameVNum} {Session.Character.MinilandPoint} {(mlobj.ItemInstance.DurabilityPoint < 1000 ? 1 : 0)} {(full ? 1 : 0)} {(mlobj.Level1BoxAmount > 0 ? $"392 {mlobj.Level1BoxAmount}" : "0 0")} {(mlobj.Level2BoxAmount > 0 ? $"393 {mlobj.Level2BoxAmount}" : "0 0")} {(mlobj.Level3BoxAmount > 0 ? $"394 {mlobj.Level3BoxAmount}" : "0 0")} {(mlobj.Level4BoxAmount > 0 ? $"395 {mlobj.Level4BoxAmount}" : "0 0")} {(mlobj.Level5BoxAmount > 0 ? $"396 {mlobj.Level5BoxAmount}" : "0 0")} 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0");
                    break;

                //get gift
                case 8:
                    int amount = 0;
                    switch (packet.Point)
                    {
                    case 0:
                        amount = mlobj.Level1BoxAmount;
                        break;

                    case 1:
                        amount = mlobj.Level2BoxAmount;
                        break;

                    case 2:
                        amount = mlobj.Level3BoxAmount;
                        break;

                    case 3:
                        amount = mlobj.Level4BoxAmount;
                        break;

                    case 4:
                        amount = mlobj.Level5BoxAmount;
                        break;
                    }
                    List <Gift> objlst = new List <Gift>();
                    for (int i = 0; i < amount; i++)
                    {
                        Gift s = GetMinilandGift(packet.MinigameVNum, (int)packet.Point);
                        if (s != null)
                        {
                            if (objlst.Any(o => o.VNum == s.VNum))
                            {
                                objlst.First(o => o.Amount == s.Amount).Amount += s.Amount;
                            }
                            else
                            {
                                objlst.Add(s);
                            }
                        }
                    }
                    string str = string.Empty;
                    for (int i = 0; i < 9; i++)
                    {
                        if (objlst.Count > i)
                        {
                            List <ItemInstance> inv = Session.Character.Inventory.AddNewToInventory(objlst.ElementAt(i).VNum, objlst.ElementAt(i).Amount);
                            if (inv.Any())
                            {
                                Session.SendPacket(Session.Character.GenerateSay($"{Language.Instance.GetMessageFromKey("ITEM_ACQUIRED")}: {ServerManager.Instance.GetItem(objlst.ElementAt(i).VNum).Name} x {objlst.ElementAt(i).Amount}", 12));
                            }
                            else
                            {
                                Session.Character.SendGift(Session.Character.CharacterId, objlst.ElementAt(i).VNum, objlst.ElementAt(i).Amount, 0, 0, false);
                            }
                            str += $" {objlst.ElementAt(i).VNum} {objlst.ElementAt(i).Amount}";
                        }
                        else
                        {
                            str += " 0 0";
                        }
                    }
                    Session.SendPacket($"mlo_pmg {packet.MinigameVNum} {Session.Character.MinilandPoint} {(mlobj.ItemInstance.DurabilityPoint < 1000 ? 1 : 0)} {(full ? 1 : 0)} {(mlobj.Level1BoxAmount > 0 ? $"392 {mlobj.Level1BoxAmount}" : "0 0")} {(mlobj.Level2BoxAmount > 0 ? $"393 {mlobj.Level2BoxAmount}" : "0 0")} {(mlobj.Level3BoxAmount > 0 ? $"394 {mlobj.Level3BoxAmount}" : "0 0")} {(mlobj.Level4BoxAmount > 0 ? $"395 {mlobj.Level4BoxAmount}" : "0 0")} {(mlobj.Level5BoxAmount > 0 ? $"396 {mlobj.Level5BoxAmount}" : "0 0")}{str}");
                    break;

                //coupon
                case 9:
                    List <ItemInstance> items = Session.Character.Inventory.GetAllItems().Where(s => s.ItemVNum == 1269 || s.ItemVNum == 1271).OrderBy(s => s.Slot).ToList();
                    if (items.Count > 0)
                    {
                        Session.Character.Inventory.RemoveItemAmount(items.ElementAt(0).ItemVNum);
                        int point = items.ElementAt(0).ItemVNum == 1269 ? 300 : 500;
                        mlobj.ItemInstance.DurabilityPoint += point;
                        Session.SendPacket(UserInterfaceHelper.Instance.GenerateInfo(Language.Instance.GetMessageFromKey(string.Format("REFILL_MINIGAME", point))));
                        Session.SendPacket(Session.Character.GenerateMloMg(mlobj, packet));
                    }
                    break;
                }
            }
        }
Exemplo n.º 14
0
        public void MinilandAddObject(AddobjPacket packet)
        {
            ItemInstance minilandobject = Session.Character.Inventory.LoadBySlotAndType <ItemInstance>(packet.Slot, InventoryType.Miniland);

            if (minilandobject != null)
            {
                if (Session.Character.MinilandObjects.All(s => s.ItemInstanceId != minilandobject.Id))
                {
                    if (Session.Character.MinilandState == MinilandState.LOCK)
                    {
                        MinilandObject mo = new MinilandObject
                        {
                            CharacterId     = Session.Character.CharacterId,
                            ItemInstance    = minilandobject,
                            ItemInstanceId  = minilandobject.Id,
                            MapX            = packet.PositionX,
                            MapY            = packet.PositionY,
                            Level1BoxAmount = 0,
                            Level2BoxAmount = 0,
                            Level3BoxAmount = 0,
                            Level4BoxAmount = 0,
                            Level5BoxAmount = 0
                        };

                        if (minilandobject.Item.ItemType == ItemType.House)
                        {
                            switch (minilandobject.Item.ItemSubType)
                            {
                            case 2:
                                mo.MapX = 31;
                                mo.MapY = 3;
                                break;

                            case 0:
                                mo.MapX = 24;
                                mo.MapY = 7;
                                break;

                            case 1:
                                mo.MapX = 21;
                                mo.MapY = 4;
                                break;
                            }

                            MinilandObject min = Session.Character.MinilandObjects.FirstOrDefault(s => s.ItemInstance.Item.ItemType == ItemType.House && s.ItemInstance.Item.ItemSubType == minilandobject.Item.ItemSubType);
                            if (min != null)
                            {
                                MinilandRemoveObject(new RmvobjPacket {
                                    Slot = min.ItemInstance.Slot
                                });
                            }
                        }

                        if (minilandobject.Item.IsMinilandObject)
                        {
                            Session.Character.WareHouseSize = minilandobject.Item.MinilandObjectPoint;
                        }
                        Session.Character.MinilandObjects.Add(mo);
                        Session.SendPacket(mo.GenerateMinilandEffect(false));
                        Session.SendPacket(Session.Character.GenerateMinilandPoint());
                        Session.SendPacket(mo.GenerateMinilandObject(false));
                    }
                    else
                    {
                        Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("MINILAND_NEED_LOCK"), 0));
                    }
                }
                else
                {
                    Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("ALREADY_THIS_MINILANDOBJECT"), 0));
                }
            }
        }