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)); } } } } }
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 }); } }
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)); } } } } } }