public static MapleItem CreateItem(int itemId, string source, short quantity = 1, bool randomStats = false) { MapleInventoryType type = ItemConstants.GetInventoryType(itemId); if (type == MapleInventoryType.Equip) { WzEquip wzInfo = DataBuffer.GetEquipById(itemId); if (wzInfo != null) { MapleEquip equip = new MapleEquip(itemId, source); equip.SetDefaultStats(wzInfo, randomStats); return(equip); } } else if (type != MapleInventoryType.Undefined) { WzItem wzInfo = DataBuffer.GetItemById(itemId); if (wzInfo != null) { if (wzInfo.SlotMax > 0 && quantity > wzInfo.SlotMax) { quantity = (short)wzInfo.SlotMax; } MapleItem item = new MapleItem(itemId, source, quantity); return(item); } } return(null); }
public static void Convert() { string[] lines = File.ReadAllLines(@".\CustomData\drop_data_v144_3.txt"); Dictionary <int, List <TempMobDrop> > drops = new Dictionary <int, List <TempMobDrop> >(); for (int i = 0; i < lines.Length; i++) { string[] split = lines[i].Split(' '); TempMobDrop drop = new TempMobDrop(); int mobId = int.Parse(split[0]); drop.itemId = int.Parse(split[1]); drop.min = int.Parse(split[2]); drop.max = int.Parse(split[3]); drop.questId = int.Parse(split[4]); drop.dropChance = int.Parse(split[5]); WzItem item = DataBuffer.GetItemById(drop.itemId); if (item != null) { if (!item.IsQuestItem) { if (!drops.ContainsKey(mobId)) { drops.Add(mobId, new List <TempMobDrop>() { drop }); } else { drops[mobId].Add(drop); } } } } StringBuilder sb = new StringBuilder(); drops = drops.OrderBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value); foreach (var kvp in drops) { //4031161 1000000 1 1 1008 sb.Append('#'); sb.AppendLine(kvp.Key.ToString()); foreach (TempMobDrop drop in kvp.Value) { sb.Append(drop.itemId + " "); sb.Append(drop.dropChance + " "); sb.Append(drop.min + " "); sb.Append(drop.max + " "); sb.AppendLine(drop.questId.ToString()); } sb.AppendLine(); } File.WriteAllText(@".\CustomData\MonsterDrops.txt", sb.ToString()); }
public static void Handle(MapleClient c, PacketReader pr) { try { if (c.NpcEngine != null && c.NpcEngine.IsShop) { byte mode = pr.ReadByte(); int NpcId = c.NpcEngine.NpcId; switch (mode) { case 0: { short shopIndex = pr.ReadShort(); int itemId = pr.ReadInt(); short amount = pr.ReadShort(); c.NpcEngine.BuyItem(itemId, shopIndex, amount); break; } case 1: //sell { short inventoryIndex = pr.ReadShort(); int itemId = pr.ReadInt(); short qty = pr.ReadShort(); MapleInventoryType invType = ItemConstants.GetInventoryType(itemId); switch (invType) { case MapleInventoryType.Equip: case MapleInventoryType.Etc: case MapleInventoryType.Setup: case MapleInventoryType.Use: break; default: return; // Not a valid item } WzItem wzitem = DataBuffer.GetItemById(itemId); if (wzitem == null) { wzitem = DataBuffer.GetEquipById(itemId); } if (wzitem == null) // Item doesnt exist (anymore?) { return; } if (wzitem.NotSale || wzitem.IsCashItem || wzitem.IsQuestItem) { return; } byte response = 0; if (!wzitem.IsQuestItem) { MapleInventory inventory = c.Account.Character.Inventory; MapleItem item = inventory.GetItemSlotFromInventory(invType, inventoryIndex); if (item?.ItemId == itemId && item.Quantity >= qty) { if (inventory.Mesos + wzitem.Price > GameConstants.MAX_MESOS) { response = 2; // You do not have enough mesos } else { inventory.RemoveItemsFromSlot(item.InventoryType, item.Position, qty, true); inventory.GainMesos(wzitem.Price * qty, false, false); } // TODO: buyback } } PacketWriter pw = new PacketWriter(); pw.WriteHeader(SendHeader.NpcTransaction); pw.WriteByte(response); pw.WriteByte(0); pw.WriteByte(0); c.SendPacket(pw); break; } case 3: { c.NpcEngine.Dispose(); break; } default: { c.NpcEngine.ScriptInstance = null; ServerConsole.Warning("Unkown NpcShopActionHandler mode:" + mode); ServerConsole.Info(Functions.ByteArrayToStr(pr.ToArray())); break; } } } } catch (Exception ex) { ServerConsole.Error("NpcShopActionHandler Failure"); ServerConsole.Error(ex.Message); if (c.NpcEngine != null) { c.NpcEngine.Dispose(); } } }