public void AddMateria(byte materiaId, uint experience = 0) { var scanResult = _memory.ScanMem(Settings.ProcessName, FirstAddress, ItemSize, InvCapacity, IsEmpty); if (scanResult.BaseAddrOffset == -1) { return; } IntPtr address = IntPtr.Add(FirstAddress, scanResult.BaseAddrOffset); var materiaSlot = new MateriaSlot(materiaId, experience); _memory.WriteMem(Settings.ProcessName, address, materiaSlot.AsBytes()); bool IsEmpty(byte[] bytes) => bytes.All(b => b == byte.MaxValue); }
public void AddItem(ushort itemId, ushort quantity = 1, bool allowIncrement = true) { var scanResult = _memory.ScanMem(Settings.ProcessName, FirstAddress, ItemSize, InvCapacity, IsItem); if (scanResult.BaseAddrOffset == -1) // Have none, find empty { scanResult = _memory.ScanMem(Settings.ProcessName, FirstAddress, ItemSize, InvCapacity, IsEmpty); WriteInventoryItem(new InventorySlot(itemId, quantity), scanResult.BaseAddrOffset); } else if (allowIncrement) { var item = new InventorySlot(scanResult.Bytes); item.Quantity += quantity; WriteInventoryItem(item, scanResult.BaseAddrOffset); } bool IsItem(byte[] bytes) => new InventorySlot(bytes).ItemId == itemId; bool IsEmpty(byte[] bytes) => bytes.All(b => b == byte.MaxValue); void WriteInventoryItem(InventorySlot inventorySlot, int addrOffset) => _memory.WriteMem(Settings.ProcessName, IntPtr.Add(FirstAddress, addrOffset), inventorySlot.AsBytes()); }