/// <summary> /// pdtse packet /// </summary> /// <param name="pdtsePacket"></param> public void Pdtse(PdtsePacket pdtsePacket) { Logger.Debug(Session.Character.GenerateIdentity(), pdtsePacket.ToString()); if (!Session.HasCurrentMapInstance) { return; } short VNum = pdtsePacket.VNum; if (pdtsePacket.Type == 1) { MapNpc npc = Session.CurrentMapInstance.Npcs.FirstOrDefault(s => s.MapNpcId == Session.Character.LastNRunId); if (npc != null) { int distance = Map.GetDistance(new MapCell { X = Session.Character.PositionX, Y = Session.Character.PositionY }, new MapCell { X = npc.MapX, Y = npc.MapY }); if (npc.MapInstance == Session.CurrentMapInstance && 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.CurrentMapInstance.Npcs.FirstOrDefault(s => s.MapNpcId == Session.Character.LastNRunId); if (npc != null) { int distance = Map.GetDistance(new MapCell { X = Session.Character.PositionX, Y = Session.Character.PositionY }, new MapCell { X = npc.MapX, Y = npc.MapY }); if (npc.MapInstance == Session.CurrentMapInstance && 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).FirstOrDefault(); if (inv != null) { if (inv.GetType() == typeof(WearableInstance)) { if (inv is WearableInstance item && (item.Item.EquipmentSlot == EquipmentType.Armor || item.Item.EquipmentSlot == EquipmentType.MainWeapon || item.Item.EquipmentSlot == EquipmentType.SecondaryWeapon)) { item.SetRarityPoint(); } } foreach (RecipeItemDTO ite in rec.Items) { Session.Character.Inventory.RemoveItemAmount(ite.ItemVNum, ite.Amount); } Session.SendPacket($"pdti 11 {inv.ItemVNum} {rec.Amount} 29 {inv.Upgrade} 0"); Session.SendPacket(UserInterfaceHelper.Instance.GenerateGuri(19, 1, Session.Character.CharacterId, 1324)); Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("CRAFTED_OBJECT"), inv.Item.Name, rec.Amount), 0)); } } } } } }
/// <summary> /// pdtse packet /// </summary> /// <param name="pdtsePacket"></param> public void Pdtse(PdtsePacket pdtsePacket) { if (!Session.HasCurrentMapInstance) { return; } short vNum = pdtsePacket.VNum; if (pdtsePacket.Type == 1) { Recipe rec; if (Session.Character.LastUsedItem == 0) { MapNpc npc = Session.CurrentMapInstance.Npcs.FirstOrDefault(s => s.MapNpcId == Session.Character.LastNRunId); if (npc == null) { return; } int distance = Map.GetDistance(Session.Character.GetPos(), npc.GetPos()); if (npc.MapInstance != Session.CurrentMapInstance || distance > 5) { return; } rec = npc.Recipes.FirstOrDefault(s => s.ItemVNum == vNum); } else { if (!ServerManager.Instance.ItemHasRecipe(vNum)) { // NO RECIPE WITH THIS VNUM return; } if (Session.Character.Inventory.CountItem(Session.Character.LastUsedItem) <= 0) { // NO SCROLL, PACKET HACKING return; } rec = ServerManager.Instance.GetRecipeByItemVNum(vNum); } if (rec == null || rec.Amount <= 0) { return; } string rece = $"m_list 3 {rec.Amount}"; rece = rec.Items.Where(ite => ite.Amount > 0).Aggregate(rece, (current, ite) => current + $" {ite.ItemVNum} {ite.Amount}"); rece += " -1"; Session.SendPacket(rece); } else { Recipe rec; if (Session.Character.LastUsedItem == 0) { MapNpc npc = Session.CurrentMapInstance.Npcs.FirstOrDefault(s => s.MapNpcId == Session.Character.LastNRunId); if (npc == null) { return; } int distance = Map.GetDistance(Session.Character.GetPos(), npc.GetPos()); if (npc.MapInstance != Session.CurrentMapInstance || distance > 5) { return; } rec = npc.Recipes.FirstOrDefault(s => s.ItemVNum == vNum); } else { if (!ServerManager.Instance.ItemHasRecipe(vNum)) { // NO RECIPE WITH THIS VNUM return; } if (Session.Character.Inventory.CountItem(Session.Character.LastUsedItem) <= 0) { // NO SCROLL, PACKET HACKING return; } rec = ServerManager.Instance.GetRecipeByItemVNum(vNum); } if (rec == null) { return; } 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).FirstOrDefault(); if (inv == null) { return; } if (inv.GetType() == typeof(WearableInstance)) { if (inv is WearableInstance item && (item.Item.EquipmentSlot == EquipmentType.Armor || item.Item.EquipmentSlot == EquipmentType.MainWeapon || item.Item.EquipmentSlot == EquipmentType.SecondaryWeapon)) { item.SetRarityPoint(); } } foreach (RecipeItemDTO ite in rec.Items) { Session.Character.Inventory.RemoveItemAmount(ite.ItemVNum, ite.Amount); } Session.Character.LastUsedItem = 0; Session.SendPacket($"pdti 11 {inv.ItemVNum} {rec.Amount} 29 {inv.Upgrade} 0"); Session.SendPacket(UserInterfaceHelper.Instance.GenerateGuri(19, 1, Session.Character.CharacterId, 1324)); Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("CRAFTED_OBJECT"), inv.Item.Name, rec.Amount), 0)); Session.Character.IncrementQuests(QuestType.Product, inv.ItemVNum, rec.Amount); } }