My first attempt at a Lua script so be gentle. So far it has behaved as expected for me. Maintains 5 cookies/milk in your inventory at all times unless you are invisible.
[CODE lang="Lua" title="milk_cookies_manager.Lua"]
-- cookie_milk_manager.Lua version 1.4 (uses FindItemCount)
-- Maintains 5 Fresh Cookies and 5 Warm Milk in inventory
-- Summons only when needed
-- Auto-inventories summoned items
-- Does not summon while invisible
local mq = require("mq")
local COOKIE_ITEM_NAME = "Fresh Cookie"
local MILK_ITEM_NAME = "Warm Milk"
local COOKIE_CLICKY = "Fresh Cookie Dispenser"
local MILK_CLICKY = "Warm Milk Dispenser"
local TARGET_COOKIE_COUNT = 5
local TARGET_MILK_COUNT = 5
---@return number
local function getItemCount(itemName)
local count = mq.TLO.FindItemCount(string.format("=%s", itemName))() or 0
-- mq.cmdf("/echo Counted %d of %s", count, itemName)
return count
end
---@param itemName string
local function useClicky(itemName)
local item = mq.TLO.FindItem(itemName)
if item() and item.Clicky.Spell() and item.TimerReady() then
mq.cmdf("/useitem \"%s\"", itemName)
mq.delay(1500)
moveItemFromCursor()
end
end
function moveItemFromCursor()
local cursorItem = mq.TLO.Cursor
if cursorItem() then
if cursorItem.Name() == COOKIE_ITEM_NAME or cursorItem.Name() == MILK_ITEM_NAME then
mq.cmd("/autoinventory")
mq.delay(300)
end
end
end
local function maintainFoodAndDrink()
while true do
-- Skip checks while invisible
if not mq.TLO.Me.Invis() then
local cookieCount = getItemCount(COOKIE_ITEM_NAME)
local milkCount = getItemCount(MILK_ITEM_NAME)
if cookieCount < TARGET_COOKIE_COUNT then
useClicky(COOKIE_CLICKY)
end
if milkCount < TARGET_MILK_COUNT then
useClicky(MILK_CLICKY)
end
end
mq.delay(2000) -- Check every 2 seconds
end
end
maintainFoodAndDrink()
[/CODE]
[CODE lang="Lua" title="milk_cookies_manager.Lua"]
-- cookie_milk_manager.Lua version 1.4 (uses FindItemCount)
-- Maintains 5 Fresh Cookies and 5 Warm Milk in inventory
-- Summons only when needed
-- Auto-inventories summoned items
-- Does not summon while invisible
local mq = require("mq")
local COOKIE_ITEM_NAME = "Fresh Cookie"
local MILK_ITEM_NAME = "Warm Milk"
local COOKIE_CLICKY = "Fresh Cookie Dispenser"
local MILK_CLICKY = "Warm Milk Dispenser"
local TARGET_COOKIE_COUNT = 5
local TARGET_MILK_COUNT = 5
---@return number
local function getItemCount(itemName)
local count = mq.TLO.FindItemCount(string.format("=%s", itemName))() or 0
-- mq.cmdf("/echo Counted %d of %s", count, itemName)
return count
end
---@param itemName string
local function useClicky(itemName)
local item = mq.TLO.FindItem(itemName)
if item() and item.Clicky.Spell() and item.TimerReady() then
mq.cmdf("/useitem \"%s\"", itemName)
mq.delay(1500)
moveItemFromCursor()
end
end
function moveItemFromCursor()
local cursorItem = mq.TLO.Cursor
if cursorItem() then
if cursorItem.Name() == COOKIE_ITEM_NAME or cursorItem.Name() == MILK_ITEM_NAME then
mq.cmd("/autoinventory")
mq.delay(300)
end
end
end
local function maintainFoodAndDrink()
while true do
-- Skip checks while invisible
if not mq.TLO.Me.Invis() then
local cookieCount = getItemCount(COOKIE_ITEM_NAME)
local milkCount = getItemCount(MILK_ITEM_NAME)
if cookieCount < TARGET_COOKIE_COUNT then
useClicky(COOKIE_CLICKY)
end
if milkCount < TARGET_MILK_COUNT then
useClicky(MILK_CLICKY)
end
end
mq.delay(2000) -- Check every 2 seconds
end
end
maintainFoodAndDrink()
[/CODE]
Last edited:

