mirror of
https://github.com/OTCv8/otclientv8.git
synced 2025-05-29 17:04:28 +02:00
100 lines
3.8 KiB
Lua
100 lines
3.8 KiB
Lua
CaveBot.Extensions.BuySupplies = {}
|
|
|
|
CaveBot.Extensions.BuySupplies.setup = function()
|
|
CaveBot.registerAction("BuySupplies", "#C300FF", function(value, retries)
|
|
local item1Count = itemAmount(storage[suppliesPanelName].item1)
|
|
local item2Count = itemAmount(storage[suppliesPanelName].item2)
|
|
local item3Count = itemAmount(storage[suppliesPanelName].item3)
|
|
local item4Count = itemAmount(storage[suppliesPanelName].item4)
|
|
local item5Count = itemAmount(storage[suppliesPanelName].item5)
|
|
local item6Count = itemAmount(storage[suppliesPanelName].item6)
|
|
local item7Count = itemAmount(storage[suppliesPanelName].item7)
|
|
local possibleItems = {}
|
|
|
|
local val = string.split(value, ",")
|
|
local waitVal
|
|
if #val == 0 or #val > 2 then
|
|
warn("CaveBot[BuySupplies]: incorrect BuySupplies value")
|
|
return false
|
|
elseif #val == 2 then
|
|
waitVal = tonumber(val[2]:trim())
|
|
end
|
|
|
|
local npc = getCreatureByName(val[1]:trim())
|
|
if not npc then
|
|
print("CaveBot[BuySupplies]: NPC not found")
|
|
return false
|
|
end
|
|
|
|
if not waitVal and #val == 2 then
|
|
warn("CaveBot[BuySupplies]: incorrect delay values!")
|
|
elseif waitVal and #val == 2 then
|
|
delay(waitVal)
|
|
end
|
|
|
|
if retries > 50 then
|
|
print("CaveBot[BuySupplies]: Too many tries, can't buy")
|
|
return false
|
|
end
|
|
|
|
delay(200)
|
|
|
|
local pos = player:getPosition()
|
|
local npcPos = npc:getPosition()
|
|
if math.max(math.abs(pos.x - npcPos.x), math.abs(pos.y - npcPos.y)) > 3 then
|
|
CaveBot.walkTo(npcPos, 20, {ignoreNonPathable = true, precision=3})
|
|
delay(300)
|
|
return "retry"
|
|
end
|
|
|
|
local itemList = {
|
|
item1 = {ID = storage[suppliesPanelName].item1, maxAmount = storage[suppliesPanelName].item1Max, currentAmount = item1Count},
|
|
item2 = {ID = storage[suppliesPanelName].item2, maxAmount = storage[suppliesPanelName].item2Max, currentAmount = item2Count},
|
|
item3 = {ID = storage[suppliesPanelName].item3, maxAmount = storage[suppliesPanelName].item3Max, currentAmount = item3Count},
|
|
item4 = {ID = storage[suppliesPanelName].item4, maxAmount = storage[suppliesPanelName].item4Max, currentAmount = item4Count},
|
|
item5 = {ID = storage[suppliesPanelName].item5, maxAmount = storage[suppliesPanelName].item5Max, currentAmount = item5Count},
|
|
item6 = {ID = storage[suppliesPanelName].item6, maxAmount = storage[suppliesPanelName].item6Max, currentAmount = item6Count},
|
|
item7 = {ID = storage[suppliesPanelName].item7, maxAmount = storage[suppliesPanelName].item7Max, currentAmount = item7Count}
|
|
}
|
|
|
|
if not NPC.isTrading() then
|
|
NPC.say("hi")
|
|
schedule(500, function() NPC.say("trade") end)
|
|
return "retry"
|
|
end
|
|
|
|
-- get items from npc
|
|
local npcItems = NPC.getBuyItems()
|
|
for i,v in pairs(npcItems) do
|
|
table.insert(possibleItems, v.id)
|
|
end
|
|
|
|
for i, item in pairs(itemList) do
|
|
-- info(table.find(possibleItems, item["ID"]))
|
|
if item["ID"] and item["ID"] > 100 and table.find(possibleItems, item["ID"]) then
|
|
local amountToBuy = item["maxAmount"] - item["currentAmount"]
|
|
if amountToBuy > 100 then
|
|
for i=1, math.ceil(amountToBuy/100), 1 do
|
|
NPC.buy(item["ID"], math.min(100, amountToBuy))
|
|
print("CaveBot[BuySupplies]: bought " .. amountToBuy .. "x " .. item["ID"])
|
|
return "retry"
|
|
end
|
|
else
|
|
if amountToBuy > 0 then
|
|
NPC.buy(item["ID"], math.min(100, amountToBuy))
|
|
print("CaveBot[BuySupplies]: bought " .. amountToBuy .. "x " .. item["ID"])
|
|
return "retry"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
print("CaveBot[BuySupplies]: bought everything, proceeding")
|
|
return true
|
|
end)
|
|
|
|
CaveBot.Editor.registerAction("buysupplies", "buy supplies", {
|
|
value="NPC name",
|
|
title="Buy Supplies",
|
|
description="NPC Name, delay(in ms, optional)",
|
|
})
|
|
end |