mirror of
https://github.com/OTCv8/otclientv8.git
synced 2025-05-04 21:09:21 +02:00
415 lines
13 KiB
Lua
415 lines
13 KiB
Lua
setDefaultTab("HP")
|
|
storage.lootStatus = ""
|
|
healPanelName = "healbot"
|
|
local ui = setupUI([[
|
|
Panel
|
|
height: 19
|
|
|
|
BotSwitch
|
|
id: title
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
text-align: center
|
|
width: 130
|
|
!text: tr('HealBot')
|
|
|
|
Button
|
|
id: combos
|
|
anchors.top: prev.top
|
|
anchors.left: prev.right
|
|
anchors.right: parent.right
|
|
margin-left: 3
|
|
height: 17
|
|
text: Setup
|
|
|
|
]])
|
|
ui:setId(healPanelName)
|
|
|
|
if not storage[healPanelName] or not storage[healPanelName].spellTable or not storage[healPanelName].itemTable then
|
|
storage[healPanelName] = {
|
|
enabled = false,
|
|
spellTable = {},
|
|
itemTable = {}
|
|
}
|
|
end
|
|
|
|
ui.title:setOn(storage[healPanelName].enabled)
|
|
ui.title.onClick = function(widget)
|
|
storage[healPanelName].enabled = not storage[healPanelName].enabled
|
|
widget:setOn(storage[healPanelName].enabled)
|
|
end
|
|
|
|
ui.combos.onClick = function(widget)
|
|
healWindow:show()
|
|
healWindow:raise()
|
|
healWindow:focus()
|
|
end
|
|
|
|
rootWidget = g_ui.getRootWidget()
|
|
if rootWidget then
|
|
healWindow = g_ui.createWidget('HealWindow', rootWidget)
|
|
healWindow:hide()
|
|
|
|
local refreshSpells = function()
|
|
if storage[healPanelName].spellTable and #storage[healPanelName].spellTable > 0 then
|
|
for i, child in pairs(healWindow.spells.spellList:getChildren()) do
|
|
child:destroy()
|
|
end
|
|
for _, entry in pairs(storage[healPanelName].spellTable) do
|
|
local label = g_ui.createWidget("SpellEntry", healWindow.spells.spellList)
|
|
label.enabled:setChecked(entry.enabled)
|
|
label.enabled.onClick = function(widget)
|
|
entry.enabled = not entry.enabled
|
|
label.enabled:setChecked(entry.enabled)
|
|
end
|
|
label.remove.onClick = function(widget)
|
|
table.removevalue(storage[healPanelName].spellTable, entry)
|
|
reindexTable(storage[healPanelName].spellTable)
|
|
label:destroy()
|
|
end
|
|
label:setText("(MP>" .. entry.cost .. ") " .. entry.origin .. entry.sign .. entry.value .. ":" .. entry.spell)
|
|
end
|
|
end
|
|
end
|
|
refreshSpells()
|
|
|
|
local refreshItems = function()
|
|
if storage[healPanelName].itemTable and #storage[healPanelName].itemTable > 0 then
|
|
for i, child in pairs(healWindow.items.itemList:getChildren()) do
|
|
child:destroy()
|
|
end
|
|
for _, entry in pairs(storage[healPanelName].itemTable) do
|
|
local label = g_ui.createWidget("SpellEntry", healWindow.items.itemList)
|
|
label.enabled:setChecked(entry.enabled)
|
|
label.enabled.onClick = function(widget)
|
|
entry.enabled = not entry.enabled
|
|
label.enabled:setChecked(entry.enabled)
|
|
end
|
|
label.remove.onClick = function(widget)
|
|
table.removevalue(storage[healPanelName].itemTable, entry)
|
|
reindexTable(storage[healPanelName].itemTable)
|
|
label:destroy()
|
|
end
|
|
label:setText(entry.origin .. entry.sign .. entry.value .. ":" .. entry.item)
|
|
end
|
|
end
|
|
end
|
|
refreshItems()
|
|
|
|
healWindow.spells.MoveUp.onClick = function(widget)
|
|
local input = healWindow.spells.spellList:getFocusedChild()
|
|
if not input then return end
|
|
local index = healWindow.spells.spellList:getChildIndex(input)
|
|
if index < 2 then return end
|
|
|
|
local move
|
|
if storage[healPanelName].spellTable and #storage[healPanelName].spellTable > 0 then
|
|
for _, entry in pairs(storage[healPanelName].spellTable) do
|
|
if entry.index == index -1 then
|
|
move = entry
|
|
end
|
|
if entry.index == index then
|
|
move.index = index
|
|
entry.index = index -1
|
|
end
|
|
end
|
|
end
|
|
table.sort(storage[healPanelName].spellTable, function(a,b) return a.index < b.index end)
|
|
|
|
healWindow.spells.spellList:moveChildToIndex(input, index - 1)
|
|
healWindow.spells.spellList:ensureChildVisible(input)
|
|
end
|
|
|
|
healWindow.spells.MoveDown.onClick = function(widget)
|
|
local input = healWindow.spells.spellList:getFocusedChild()
|
|
if not input then return end
|
|
local index = healWindow.spells.spellList:getChildIndex(input)
|
|
if index >= healWindow.spells.spellList:getChildCount() then return end
|
|
|
|
local move
|
|
local move2
|
|
if storage[healPanelName].spellTable and #storage[healPanelName].spellTable > 0 then
|
|
for _, entry in pairs(storage[healPanelName].spellTable) do
|
|
if entry.index == index +1 then
|
|
move = entry
|
|
end
|
|
if entry.index == index then
|
|
move2 = entry
|
|
end
|
|
end
|
|
if move and move2 then
|
|
move.index = index
|
|
move2.index = index + 1
|
|
end
|
|
end
|
|
table.sort(storage[healPanelName].spellTable, function(a,b) return a.index < b.index end)
|
|
|
|
healWindow.spells.spellList:moveChildToIndex(input, index + 1)
|
|
healWindow.spells.spellList:ensureChildVisible(input)
|
|
end
|
|
|
|
healWindow.items.MoveUp.onClick = function(widget)
|
|
local input = healWindow.items.itemList:getFocusedChild()
|
|
if not input then return end
|
|
local index = healWindow.items.itemList:getChildIndex(input)
|
|
if index < 2 then return end
|
|
|
|
local move
|
|
if storage[healPanelName].itemTable and #storage[healPanelName].itemTable > 0 then
|
|
for _, entry in pairs(storage[healPanelName].itemTable) do
|
|
if entry.index == index -1 then
|
|
move = entry
|
|
end
|
|
if entry.index == index then
|
|
move.index = index
|
|
entry.index = index - 1
|
|
end
|
|
end
|
|
end
|
|
table.sort(storage[healPanelName].itemTable, function(a,b) return a.index < b.index end)
|
|
|
|
healWindow.items.itemList:moveChildToIndex(input, index - 1)
|
|
healWindow.items.itemList:ensureChildVisible(input)
|
|
end
|
|
|
|
healWindow.items.MoveDown.onClick = function(widget)
|
|
local input = healWindow.items.itemList:getFocusedChild()
|
|
if not input then return end
|
|
local index = healWindow.items.itemList:getChildIndex(input)
|
|
if index >= healWindow.items.itemList:getChildCount() then return end
|
|
|
|
local move
|
|
local move2
|
|
if storage[healPanelName].itemTable and #storage[healPanelName].itemTable > 0 then
|
|
for _, entry in pairs(storage[healPanelName].itemTable) do
|
|
if entry.index == index +1 then
|
|
move = entry
|
|
end
|
|
if entry.index == index then
|
|
move2 = entry
|
|
end
|
|
end
|
|
if move and move2 then
|
|
move.index = index
|
|
move2.index = index + 1
|
|
end
|
|
end
|
|
table.sort(storage[healPanelName].itemTable, function(a,b) return a.index < b.index end)
|
|
|
|
healWindow.items.itemList:moveChildToIndex(input, index + 1)
|
|
healWindow.items.itemList:ensureChildVisible(input)
|
|
end
|
|
|
|
healWindow.spells.addSpell.onClick = function(widget)
|
|
|
|
local spellFormula = healWindow.spells.spellFormula:getText():trim()
|
|
local manaCost = tonumber(healWindow.spells.manaCost:getText())
|
|
local spellTrigger = tonumber(healWindow.spells.spellValue:getText())
|
|
local spellSource = healWindow.spells.spellSource:getCurrentOption().text
|
|
local spellEquasion = healWindow.spells.spellCondition:getCurrentOption().text
|
|
local source
|
|
local equasion
|
|
|
|
if not manaCost then
|
|
warn("HealBot: incorrect mana cost value!")
|
|
healWindow.spells.spellFormula:setText('')
|
|
healWindow.spells.spellValue:setText('')
|
|
healWindow.spells.manaCost:setText('')
|
|
return
|
|
end
|
|
if not spellTrigger then
|
|
warn("HealBot: incorrect condition value!")
|
|
healWindow.spells.spellFormula:setText('')
|
|
healWindow.spells.spellValue:setText('')
|
|
healWindow.spells.manaCost:setText('')
|
|
return
|
|
end
|
|
|
|
if spellSource == "Current Mana" then
|
|
source = "MP"
|
|
elseif spellSource == "Current Health" then
|
|
source = "HP"
|
|
elseif spellSource == "Mana Percent" then
|
|
source = "MP%"
|
|
else
|
|
source = "HP%"
|
|
end
|
|
|
|
if spellEquasion == "Above" then
|
|
equasion = ">"
|
|
elseif spellEquasion == "Below" then
|
|
equasion = "<"
|
|
else
|
|
equasion = "="
|
|
end
|
|
|
|
if spellFormula:len() > 0 then
|
|
table.insert(storage[healPanelName].spellTable, {index = #storage[healPanelName].spellTable+1, spell = spellFormula, sign = equasion, origin = source, cost = manaCost, value = spellTrigger, enabled = true})
|
|
healWindow.spells.spellFormula:setText('')
|
|
healWindow.spells.spellValue:setText('')
|
|
healWindow.spells.manaCost:setText('')
|
|
end
|
|
refreshSpells()
|
|
end
|
|
|
|
healWindow.items.addItem.onClick = function(widget)
|
|
|
|
local id = healWindow.items.itemId:getItemId()
|
|
local trigger = tonumber(healWindow.items.itemValue:getText())
|
|
local src = healWindow.items.itemSource:getCurrentOption().text
|
|
local eq = healWindow.items.itemCondition:getCurrentOption().text
|
|
local source
|
|
local equasion
|
|
|
|
if not trigger then
|
|
warn("HealBot: incorrect trigger value!")
|
|
healWindow.items.itemId:setItemId(0)
|
|
healWindow.items.itemValue:setText('')
|
|
return
|
|
end
|
|
|
|
if src == "Current Mana" then
|
|
source = "MP"
|
|
elseif src == "Current Health" then
|
|
source = "HP"
|
|
elseif src == "Mana Percent" then
|
|
source = "MP%"
|
|
else
|
|
source = "HP%"
|
|
end
|
|
|
|
if eq == "Above" then
|
|
equasion = ">"
|
|
elseif eq == "Below" then
|
|
equasion = "<"
|
|
else
|
|
equasion = "="
|
|
end
|
|
|
|
if id > 100 then
|
|
table.insert(storage[healPanelName].itemTable, {index = #storage[healPanelName].itemTable+1,item = id, sign = equasion, origin = source, value = trigger, enabled = true})
|
|
refreshItems()
|
|
healWindow.items.itemId:setItemId(0)
|
|
healWindow.items.itemValue:setText('')
|
|
end
|
|
end
|
|
|
|
healWindow.closeButton.onClick = function(widget)
|
|
healWindow:hide()
|
|
end
|
|
end
|
|
|
|
-- spells
|
|
macro(100, function()
|
|
if not storage[healPanelName].enabled or modules.game_cooldown.isGroupCooldownIconActive(2) or #storage[healPanelName].spellTable == 0 then return end
|
|
|
|
for _, entry in pairs(storage[healPanelName].spellTable) do
|
|
if canCast(entry.spell) and entry.enabled then
|
|
if entry.origin == "HP%" then
|
|
if entry.sign == "=" and hppercent() == entry.value then
|
|
say(entry.spell)
|
|
return
|
|
elseif entry.sign == ">" and hppercent() >= entry.value then
|
|
say(entry.spell)
|
|
return
|
|
elseif entry.sign == "<" and hppercent() <= entry.value then
|
|
say(entry.spell)
|
|
return
|
|
end
|
|
elseif entry.origin == "HP" then
|
|
if entry.sign == "=" and hp() == entry.value then
|
|
say(entry.spell)
|
|
return
|
|
elseif entry.sign == ">" and hp() >= entry.value then
|
|
say(entry.spell)
|
|
return
|
|
elseif entry.sign == "<" and hp() <= entry.value then
|
|
say(entry.spell)
|
|
return
|
|
end
|
|
elseif entry.origin == "MP%" then
|
|
if entry.sign == "=" and manapercent() == entry.value then
|
|
say(entry.spell)
|
|
return
|
|
elseif entry.sign == ">" and manapercent() >= entry.value then
|
|
say(entry.spell)
|
|
return
|
|
elseif entry.sign == "<" and manapercent() <= entry.value then
|
|
say(entry.spell)
|
|
return
|
|
end
|
|
elseif entry.origin == "MP" then
|
|
if entry.sign == "=" and mana() == entry.value then
|
|
say(entry.spell)
|
|
return
|
|
elseif entry.sign == ">" and mana() >= entry.value then
|
|
say(entry.spell)
|
|
return
|
|
elseif entry.sign == "<" and mana() <= entry.value then
|
|
say(entry.spell)
|
|
return
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- items
|
|
macro(500, function()
|
|
if TargetBot.isOff() then storage.lootStatus = "" end
|
|
if not storage[healPanelName].enabled or storage.isUsing or #storage[healPanelName].itemTable == 0 then return end
|
|
|
|
if storage.lootStatus:len() > 0 then
|
|
delay(500)
|
|
end
|
|
for _, entry in pairs(storage[healPanelName].itemTable) do
|
|
local item = findItem(entry.item)
|
|
if item and entry.enabled then
|
|
if entry.origin == "HP%" then
|
|
if entry.sign == "=" and hppercent() == entry.value then
|
|
useWith(entry.item, player)
|
|
return
|
|
elseif entry.sign == ">" and hppercent() >= entry.value then
|
|
useWith(entry.item, player)
|
|
return
|
|
elseif entry.sign == "<" and hppercent() <= entry.value then
|
|
useWith(entry.item, player)
|
|
return
|
|
end
|
|
elseif entry.origin == "HP" then
|
|
if entry.sign == "=" and hp() == tonumberentry.value then
|
|
useWith(entry.item, player)
|
|
return
|
|
elseif entry.sign == ">" and hp() >= entry.value then
|
|
useWith(entry.item, player)
|
|
return
|
|
elseif entry.sign == "<" and hp() <= entry.value then
|
|
useWith(entry.item, player)
|
|
return
|
|
end
|
|
elseif entry.origin == "MP%" then
|
|
if entry.sign == "=" and manapercent() == entry.value then
|
|
useWith(entry.item, player)
|
|
return
|
|
elseif entry.sign == ">" and manapercent() >= entry.value then
|
|
useWith(entry.item, player)
|
|
return
|
|
elseif entry.sign == "<" and manapercent() <= entry.value then
|
|
useWith(entry.item, player)
|
|
return
|
|
end
|
|
elseif entry.origin == "MP" then
|
|
if entry.sign == "=" and mana() == entry.value then
|
|
useWith(entry.item, player)
|
|
return
|
|
elseif entry.sign == ">" and mana() >= entry.value then
|
|
useWith(entry.item, player)
|
|
return
|
|
elseif entry.sign == "<" and mana() <= entry.value then
|
|
useWith(entry.item, player)
|
|
return
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end) |