public IItemInstance Generate(short itemToCreateVNum, short amount, sbyte rare, byte upgrade,
                                      byte design)
        {
            var itemToCreate = _items.Find(s => s.VNum == itemToCreateVNum) !.Adapt <Item.Item>();

            switch (itemToCreate.Type)
            {
            case NoscorePocketType.Miniland:
                return(new ItemInstance(itemToCreate)
                {
                    Amount = amount,
                    DurabilityPoint = itemToCreate.MinilandObjectPoint / 2
                });

            case NoscorePocketType.Equipment:
                switch (itemToCreate.ItemType)
                {
                case ItemType.Specialist:
                    return(new SpecialistInstance(itemToCreate)
                    {
                        SpLevel = 1,
                        Amount = amount,
                        Design = design,
                        Upgrade = upgrade
                    });

                case ItemType.Box:
                    return(new BoxInstance(itemToCreate)
                    {
                        Amount = amount,
                        Upgrade = upgrade,
                        Design = design
                    });

                default:
                    var wear = new WearableInstance(itemToCreate, _logger)
                    {
                        Amount  = amount,
                        Rare    = rare,
                        Upgrade = upgrade,
                        Design  = design
                    };
                    if (wear.Rare > 0)
                    {
                        wear.SetRarityPoint();
                    }

                    return(wear);
                }

            default:
                return(new ItemInstance(itemToCreate)
                {
                    Amount = amount
                });
            }
        }
        public void Pdtse(string packet)
        {
            Logger.Debug(packet, Session.SessionId);
            string[] packetsplit = packet.Split(' ');
            if (packetsplit.Count() < 4)
            {
                return;
            }
            byte  type = 0;
            short VNum = 0;

            if (!byte.TryParse(packetsplit[2], out type) || !short.TryParse(packetsplit[3], out VNum))
            {
                return;
            }
            if (type == 1)
            {
                MapNpc npc = Session.CurrentMap.Npcs.FirstOrDefault(s => s.MapNpcId == Session.Character.LastNRunId);
                if (npc != null)
                {
                    Recipe rec = npc.Recipes.FirstOrDefault(s => s.ItemVNum == VNum);
                    if (rec != null && rec.Amount > 0)
                    {
                        string rece = $"m_list 3 {rec.Amount}";
                        foreach (RecipeItemDTO ite in rec.Items)
                        {
                            if (ite.Amount > 0)
                            {
                                rece += $" {ite.ItemVNum} {ite.Amount}";
                            }
                        }
                        rece += " -1";
                        Session.SendPacket(rece);
                    }
                }
            }
            else
            {
                MapNpc npc = Session.CurrentMap.Npcs.FirstOrDefault(s => s.MapNpcId == Session.Character.LastNRunId);
                if (npc != null)
                {
                    Recipe rec = npc.Recipes.FirstOrDefault(s => s.ItemVNum == VNum);
                    if (rec != null)
                    {
                        if (rec.Amount <= 0)
                        {
                            return;
                        }
                        foreach (RecipeItemDTO ite in rec.Items)
                        {
                            if (Session.Character.InventoryList.CountItem(ite.ItemVNum) < ite.Amount)
                            {
                                return;
                            }
                        }

                        Inventory inv = Session.Character.InventoryList.AddNewItemToInventory(rec.ItemVNum, rec.Amount);
                        if (inv.ItemInstance.GetType().Equals(typeof(WearableInstance)))
                        {
                            WearableInstance item = inv.ItemInstance as WearableInstance;
                            if (item != null && (item.Item.EquipmentSlot == (byte)EquipmentType.Armor || item.Item.EquipmentSlot == (byte)EquipmentType.MainWeapon || item.Item.EquipmentSlot == (byte)EquipmentType.SecondaryWeapon))
                            {
                                item.SetRarityPoint();
                            }
                        }

                        if (inv != null)
                        {
                            short Slot = inv.Slot;
                            if (Slot != -1)
                            {
                                foreach (RecipeItemDTO ite in rec.Items)
                                {
                                    Session.Character.InventoryList.RemoveItemAmount(ite.ItemVNum, ite.Amount);
                                }
                                Session.SendPacket(Session.Character.GenerateInventoryAdd(inv.ItemInstance.ItemVNum, inv.ItemInstance.Amount, inv.Type, inv.Slot, 0, inv.ItemInstance.Rare, inv.ItemInstance.Upgrade, 0));

                                Session.SendPacket($"pdti 11 {inv.ItemInstance.ItemVNum} {rec.Amount} 29 {inv.ItemInstance.Upgrade} 0");
                                Session.SendPacket(Session.Character.GenerateGuri(19, 1, 1324));

                                Session.SendPacket(Session.Character.GenerateMsg(String.Format(Language.Instance.GetMessageFromKey("CRAFTED_OBJECT"), (inv.ItemInstance as ItemInstance).Item.Name, rec.Amount), 0));
                            }
                        }
                        else
                        {
                            Session.SendPacket(Session.Character.GenerateMsg(Language.Instance.GetMessageFromKey("NOT_ENOUGH_PLACE"), 0));
                        }
                    }
                }
            }
        }
示例#3
0
        public IItemInstance Create(short itemToCreateVNum, long characterId, short amount, sbyte rare,
                                    byte upgrade, byte design)
        {
            Item.Item itemToCreate = _items.Find(s => s.VNum == itemToCreateVNum);
            switch (itemToCreate.Type)
            {
            case PocketType.Miniland:
                return(new ItemInstance(itemToCreate)
                {
                    CharacterId = characterId,
                    Amount = amount,
                    DurabilityPoint = itemToCreate.MinilandObjectPoint / 2
                });

            case PocketType.Equipment:
                switch (itemToCreate.ItemType)
                {
                case ItemType.Specialist:
                    return(new SpecialistInstance(itemToCreate)
                    {
                        SpLevel = 1,
                        Amount = amount,
                        CharacterId = characterId,
                        Design = design,
                        Upgrade = upgrade
                    });

                case ItemType.Box:
                    return(new BoxInstance(itemToCreate)
                    {
                        Amount = amount,
                        CharacterId = characterId,
                        Upgrade = upgrade,
                        Design = design
                    });

                default:
                    var wear = new WearableInstance(itemToCreate)
                    {
                        Amount      = amount,
                        Rare        = rare,
                        CharacterId = characterId,
                        Upgrade     = upgrade,
                        Design      = design
                    };
                    if (wear.Rare > 0)
                    {
                        wear.SetRarityPoint();
                    }

                    return(wear);
                }

            default:
                return(new ItemInstance(itemToCreate)
                {
                    Type = itemToCreate.Type,
                    Amount = amount,
                    CharacterId = characterId
                });
            }
        }
示例#4
0
        public void Pdtse(string packet)
        {
            Logger.Debug(packet, Session.SessionId);
            string[] packetsplit = packet.Split(' ');
            if (packetsplit.Length < 4 || !Session.HasCurrentMap)
            {
                return;
            }
            byte  type;
            short VNum;

            if (!byte.TryParse(packetsplit[2], out type) || !short.TryParse(packetsplit[3], out VNum))
            {
                return;
            }
            if (type == 1)
            {
                MapNpc npc = Session.CurrentMap.Npcs.FirstOrDefault(s => s.MapNpcId == Session.Character.LastNRunId);
                if (npc != null)
                {
                    int distance = Map.GetDistance(new MapCell {
                        X = Session.Character.MapX, Y = Session.Character.MapY
                    }, new MapCell {
                        X = npc.MapX, Y = npc.MapY
                    });
                    if (npc.MapId == Session.CurrentMap.MapId && distance <= 5)
                    {
                        Recipe rec = npc.Recipes.FirstOrDefault(s => s.ItemVNum == VNum);
                        if (rec != null && rec.Amount > 0)
                        {
                            string rece = $"m_list 3 {rec.Amount}";
                            foreach (RecipeItemDTO ite in rec.Items)
                            {
                                if (ite.Amount > 0)
                                {
                                    rece = rece + $" {ite.ItemVNum} {ite.Amount}";
                                }
                            }
                            rece += " -1";
                            Session.SendPacket(rece);
                        }
                    }
                }
            }
            else
            {
                MapNpc npc = Session.CurrentMap.Npcs.FirstOrDefault(s => s.MapNpcId == Session.Character.LastNRunId);
                if (npc != null)
                {
                    int distance = Map.GetDistance(new MapCell {
                        X = Session.Character.MapX, Y = Session.Character.MapY
                    }, new MapCell {
                        X = npc.MapX, Y = npc.MapY
                    });
                    if (npc.MapId == Session.CurrentMap.MapId && distance <= 5)
                    {
                        Recipe rec = npc.Recipes.FirstOrDefault(s => s.ItemVNum == VNum);
                        if (rec != null)
                        {
                            if (rec.Amount <= 0)
                            {
                                return;
                            }
                            if (rec.Items.Any(ite => Session.Character.Inventory.CountItem(ite.ItemVNum) < ite.Amount))
                            {
                                return;
                            }

                            ItemInstance inv = Session.Character.Inventory.AddNewToInventory(rec.ItemVNum, rec.Amount);
                            if (inv == null)
                            {
                                return;
                            }
                            if (inv.GetType().Equals(typeof(WearableInstance)))
                            {
                                WearableInstance item = inv as WearableInstance;
                                if (item != null && (item.Item.EquipmentSlot == EquipmentType.Armor || item.Item.EquipmentSlot == EquipmentType.MainWeapon || item.Item.EquipmentSlot == EquipmentType.SecondaryWeapon))
                                {
                                    item.SetRarityPoint();
                                }
                            }
                            short Slot = inv.Slot;
                            if (Slot != -1)
                            {
                                foreach (RecipeItemDTO ite in rec.Items)
                                {
                                    Session.Character.Inventory.RemoveItemAmount(ite.ItemVNum, ite.Amount);
                                }
                                Session.SendPacket(Session.Character.GenerateInventoryAdd(inv.ItemVNum, inv.Amount, inv.Type, inv.Slot, 0, inv.Rare, inv.Upgrade, 0));

                                Session.SendPacket($"pdti 11 {inv.ItemVNum} {rec.Amount} 29 {inv.Upgrade} 0");
                                Session.SendPacket(Session.Character.GenerateGuri(19, 1, 1324));

                                Session.SendPacket(Session.Character.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("CRAFTED_OBJECT"), inv.Item.Name, rec.Amount), 0));
                            }
                        }
                    }
                }
            }
        }