mirror of
https://github.com/OTCv8/otclientv8.git
synced 2025-05-03 04:29:22 +02:00
148 lines
4.5 KiB
Lua
148 lines
4.5 KiB
Lua
-- tools tab
|
|
setDefaultTab("Tools")
|
|
|
|
-- allows to test/edit bot lua scripts ingame, you can have multiple scripts like this, just change storage.ingame_lua
|
|
UI.Button("Ingame macro editor", function(newText)
|
|
UI.MultilineEditorWindow(storage.ingame_macros or "", {title="Macro editor", description="You can add your custom macros (or any other lua code) here"}, function(text)
|
|
storage.ingame_macros = text
|
|
reload()
|
|
end)
|
|
end)
|
|
UI.Button("Ingame hotkey editor", function(newText)
|
|
UI.MultilineEditorWindow(storage.ingame_hotkeys or "", {title="Hotkeys editor", description="You can add your custom hotkeys/singlehotkeys here"}, function(text)
|
|
storage.ingame_hotkeys = text
|
|
reload()
|
|
end)
|
|
end)
|
|
|
|
UI.Separator()
|
|
|
|
for _, scripts in ipairs({storage.ingame_macros, storage.ingame_hotkeys}) do
|
|
if type(scripts) == "string" and scripts:len() > 3 then
|
|
local status, result = pcall(function()
|
|
assert(load(scripts, "ingame_editor"))()
|
|
end)
|
|
if not status then
|
|
error("Ingame edior error:\n" .. result)
|
|
end
|
|
end
|
|
end
|
|
|
|
UI.Separator()
|
|
|
|
UI.Button("Zoom In map [ctrl + =]", function() zoomIn() end)
|
|
UI.Button("Zoom Out map [ctrl + -]", function() zoomOut() end)
|
|
|
|
UI.Separator()
|
|
|
|
local moneyIds = {3031, 3035} -- gold coin, platinium coin
|
|
macro(1000, "Exchange money", function()
|
|
local containers = g_game.getContainers()
|
|
for index, container in pairs(containers) do
|
|
if not container.lootContainer then -- ignore monster containers
|
|
for i, item in ipairs(container:getItems()) do
|
|
if item:getCount() == 100 then
|
|
for m, moneyId in ipairs(moneyIds) do
|
|
if item:getId() == moneyId then
|
|
return g_game.use(item)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
macro(1000, "Stack items", function()
|
|
local containers = g_game.getContainers()
|
|
local toStack = {}
|
|
for index, container in pairs(containers) do
|
|
if not container.lootContainer then -- ignore monster containers
|
|
for i, item in ipairs(container:getItems()) do
|
|
if item:isStackable() and item:getCount() < 100 then
|
|
local stackWith = toStack[item:getId()]
|
|
if stackWith then
|
|
g_game.move(item, stackWith[1], math.min(stackWith[2], item:getCount()))
|
|
return
|
|
end
|
|
toStack[item:getId()] = {container:getSlotPosition(i - 1), 100 - item:getCount()}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
macro(10000, "Anti Kick", function()
|
|
local dir = player:getDirection()
|
|
turn((dir + 1) % 4)
|
|
turn(dir)
|
|
end)
|
|
|
|
UI.Separator()
|
|
UI.Label("Drop items:")
|
|
if type(storage.dropItems) ~= "table" then
|
|
storage.dropItems = {283, 284, 285}
|
|
end
|
|
|
|
local foodContainer = UI.Container(function(widget, items)
|
|
storage.dropItems = items
|
|
end, true)
|
|
foodContainer:setHeight(35)
|
|
foodContainer:setItems(storage.dropItems)
|
|
|
|
macro(5000, "drop items", function()
|
|
if not storage.dropItems[1] then return end
|
|
if TargetBot and TargetBot.isActive() then return end -- pause when attacking
|
|
for _, container in pairs(g_game.getContainers()) do
|
|
for __, item in ipairs(container:getItems()) do
|
|
for i, dropItem in ipairs(storage.dropItems) do
|
|
if item:getId() == dropItem.id then
|
|
if item:isStackable() then
|
|
return g_game.move(item, player:getPosition(), item:getCount())
|
|
else
|
|
return g_game.move(item, player:getPosition(), dropItem.count) -- count is also subtype
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
UI.Separator()
|
|
|
|
UI.Label("Mana training")
|
|
if type(storage.manaTrain) ~= "table" then
|
|
storage.manaTrain = {on=false, title="MP%", text="utevo lux", min=80, max=100}
|
|
end
|
|
|
|
local manatrainmacro = macro(1000, function()
|
|
if TargetBot and TargetBot.isActive() then return end -- pause when attacking
|
|
local mana = math.min(100, math.floor(100 * (player:getMana() / player:getMaxMana())))
|
|
if storage.manaTrain.max >= mana and mana >= storage.manaTrain.min then
|
|
say(storage.manaTrain.text)
|
|
end
|
|
end)
|
|
manatrainmacro.setOn(storage.manaTrain.on)
|
|
|
|
UI.DualScrollPanel(storage.manaTrain, function(widget, newParams)
|
|
storage.manaTrain = newParams
|
|
manatrainmacro.setOn(storage.manaTrain.on)
|
|
end)
|
|
|
|
UI.Separator()
|
|
|
|
macro(60000, "Send message on trade", function()
|
|
local trade = getChannelId("advertising")
|
|
if not trade then
|
|
trade = getChannelId("trade")
|
|
end
|
|
if trade and storage.autoTradeMessage:len() > 0 then
|
|
sayChannel(trade, storage.autoTradeMessage)
|
|
end
|
|
end)
|
|
UI.TextEdit(storage.autoTradeMessage or "I'm using OTClientV8!", function(widget, text)
|
|
storage.autoTradeMessage = text
|
|
end)
|
|
|
|
UI.Separator()
|