2021-01-18 00:46:05 +01:00

329 lines
9.6 KiB
Lua

setDefaultTab("HP")
function jewelleryEquip()
panelName = "jewelleryEquipper"
local ui = setupUI([[
Panel
height: 130
margin-top: 2
BotItem
id: ringId
anchors.left: parent.left
anchors.top: parent.top
SmallBotSwitch
id: ringSwitch
anchors.left: ringId.right
anchors.right: parent.right
anchors.top: parent.top
text-align: center
text: Equip Ring
margin-left: 3
margin-right: 45
SmallBotSwitch
id: valueRing
anchors.left: ringSwitch.right
anchors.right: parent.right
anchors.top: parent.top
text-align: center
text: Mana
margin-left: 3
margin-right: 0
BotLabel
id: ringTitle
anchors.left: ringId.right
anchors.right: parent.right
anchors.top: ringId.verticalCenter
text-align: center
HorizontalScrollBar
id: ringScroll1
anchors.left: parent.left
anchors.right: parent.horizontalCenter
anchors.top: ringId.bottom
margin-right: 2
margin-top: 2
minimum: 0
maximum: 100
step: 1
HorizontalScrollBar
id: ringScroll2
anchors.left: parent.horizontalCenter
anchors.right: parent.right
anchors.top: prev.top
margin-left: 2
minimum: 0
maximum: 100
step: 1
BotItem
id: ammyId
anchors.left: parent.left
anchors.top: ringScroll1.bottom
margin-top: 5
SmallBotSwitch
id: ammySwitch
anchors.left: ammyId.right
anchors.right: parent.right
anchors.top: ringScroll2.bottom
text-align: center
text: Equip Amulet
margin-top: 5
margin-left: 3
margin-right: 45
SmallBotSwitch
id: valueAmmy
anchors.left: ammySwitch.right
anchors.right: parent.right
anchors.top: ringScroll2.bottom
text-align: center
text: Mana
margin-top: 5
margin-left: 3
BotLabel
id: ammyTitle
anchors.left: ammyId.right
anchors.right: parent.right
anchors.top: ammyId.verticalCenter
text-align: center
HorizontalScrollBar
id: ammyScroll1
anchors.left: parent.left
anchors.right: parent.horizontalCenter
anchors.top: ammyId.bottom
margin-right: 2
margin-top: 2
minimum: 0
maximum: 100
step: 1
HorizontalScrollBar
id: ammyScroll2
anchors.left: parent.horizontalCenter
anchors.right: parent.right
anchors.top: prev.top
margin-left: 2
minimum: 0
maximum: 100
step: 1
Button
id: resetDefault
anchors.top: ammyScroll2.bottom
anchors.left: parent.left
anchors.right: parent.horizontalCenter
margin-top: 8
margin-left: 2
text: Reset Default
SmallBotSwitch
id: pzCheck
anchors.top: ammyScroll2.bottom
anchors.left: resetDefault.right
anchors.bottom: resetDefault.bottom
anchors.right: parent.right
margin-top: 8
margin-right: 2
margin-left: 1
text: Ignore in PZ
]], parent)
ui:setId(panelName)
if not storage[panelName] or not storage[panelName].ringId or not storage[panelName].ammyId then
storage[panelName] = {
pzCheck = true,
ringSwitch = true,
ammySwitch = true,
ringId = 3048,
ammyId = 3081,
ringMin = 30,
ringMax = 80,
ammyMin = 30,
ammyMax = 80,
valueAmmy = false,
valueRing = false,
ringValue = "HP",
ammyValue = "HP"
}
end
ui.ringSwitch:setOn(storage[panelName].ringEnabled)
ui.ringSwitch.onClick = function(widget)
storage[panelName].ringEnabled = not storage[panelName].ringEnabled
widget:setOn(storage[panelName].ringEnabled)
end
ui.ammySwitch:setOn(storage[panelName].ammyEnabled)
ui.ammySwitch.onClick = function(widget)
storage[panelName].ammyEnabled = not storage[panelName].ammyEnabled
widget:setOn(storage[panelName].ammyEnabled)
end
ui.pzCheck:setOn(storage[panelName].pzCheck)
ui.pzCheck.onClick = function(widget)
storage[panelName].pzCheck = not storage[panelName].pzCheck
widget:setOn(storage[panelName].pzCheck)
end
local updateRingText = function()
ui.ringTitle:setText("" .. storage[panelName].ringMin .. "% <= " .. storage[panelName].ringValue .. " >= " .. storage[panelName].ringMax .. "%")
end
local updateAmmyText = function()
ui.ammyTitle:setText("" .. storage[panelName].ammyMin .. "% <= " .. storage[panelName].ammyValue .. " >= " .. storage[panelName].ammyMax .. "%")
end
ui.valueRing:setOn(storage[panelName].valueRing)
ui.valueRing.onClick = function(widget)
storage[panelName].valueRing = not storage[panelName].valueRing
widget:setOn(storage[panelName].valueRing)
if storage[panelName].valueRing then
storage[panelName].ringValue = "MP"
else
storage[panelName].ringValue = "HP"
end
updateRingText()
end
ui.valueAmmy:setOn(storage[panelName].valueAmmy)
ui.valueAmmy.onClick = function(widget)
storage[panelName].valueAmmy = not storage[panelName].valueAmmy
widget:setOn(storage[panelName].valueAmmy)
if storage[panelName].valueAmmy then
storage[panelName].ammyValue = "MP"
else
storage[panelName].ammyValue = "HP"
end
updateAmmyText()
end
ui.ringScroll1.onValueChange = function(scroll, value)
storage[panelName].ringMin = value
updateRingText()
end
ui.ringScroll2.onValueChange = function(scroll, value)
storage[panelName].ringMax = value
updateRingText()
end
ui.ammyScroll1.onValueChange = function(scroll, value)
storage[panelName].ammyMin = value
updateAmmyText()
end
ui.ammyScroll2.onValueChange = function(scroll, value)
storage[panelName].ammyMax = value
updateAmmyText()
end
ui.ringId.onItemChange = function(widget)
storage[panelName].ringId = widget:getItemId()
end
ui.ammyId.onItemChange = function(widget)
storage[panelName].ammyId = widget:getItemId()
end
ui.ringScroll1:setValue(storage[panelName].ringMin)
ui.ringScroll2:setValue(storage[panelName].ringMax)
ui.ammyScroll1:setValue(storage[panelName].ammyMin)
ui.ammyScroll2:setValue(storage[panelName].ammyMax)
ui.ringId:setItemId(storage[panelName].ringId)
ui.ammyId:setItemId(storage[panelName].ammyId)
local defaultRing
local defaultAmmy
-- basic ring check
function defaultRingFind()
if storage[panelName].ringEnabled then
if getFinger() and (getFinger():getId() ~= storage[panelName].ringId and getFinger():getId() ~= getActiveItemId(storage[panelName].ringId)) then
defaultRing = getFinger():getId()
else
defaultRing = false
end
end
end
defaultRingFind()
-- basic amulet check
function defaultAmmyFind()
if storage[panelName].ammyEnabled then
if getNeck() and (getNeck():getId() ~= storage[panelName].ammyId and getNeck():getId() ~= getActiveItemId(storage[panelName].ammyId)) then
defaultAmmy = getNeck():getId()
else
defaultAmmy = false
end
end
end
defaultAmmyFind()
ui.resetDefault.onClick = function(widget)
defaultRingFind()
defaultAmmyFind()
end
local lastAction = now
macro(20, function()
if now - lastAction < 100 then return end
if not storage[panelName].ringEnabled and not storage[panelName].ammyEnabled then return end
-- [[ condition list ]] --
local ringEnabled = storage[panelName].ringEnabled
local ringEquipped = getFinger() and (getFinger():getId() == storage[panelName].ringId or getFinger():getId() == getActiveItemId(storage[panelName].ringId))
local shouldEquipRing = not storage[panelName].valueRing and hppercent() <= storage[panelName].ringMin or storage[panelName].valueRing and manapercent() <= storage[panelName].ringMin
local shouldUnequipRing = not storage[panelName].valueRing and hppercent() >= storage[panelName].ringMax or storage[panelName].valueRing and manapercent() >= storage[panelName].ringMax
local hasDefaultRing = defaultRing and findItem(defaultRing)
local ammyEnabled = storage[panelName].ammyEnabled
local ammyEquipped = getNeck() and (getNeck():getId() == storage[panelName].ammyId or getNeck():getId() == getActiveItemId(storage[panelName].ammyId))
local shouldEquipAmmy = not storage[panelName].valueAmmy and hppercent() <= storage[panelName].ammyMin or storage[panelName].valueAmmy and manapercent() <= storage[panelName].ammyMin
local shouldUnequipAmmy = not storage[panelName].valueAmmy and hppercent() >= storage[panelName].ammyMax or storage[panelName].valueAmmy and manapercent() >= storage[panelName].ammyMax
local hasDefaultAmmy = defaultAmmy and findItem(defaultAmmy)
local pzOk = not storage[panelName].pzCheck or not isInPz()
-- [[ ring ]] --
if ringEnabled then
if not ringEquipped and shouldEquipRing and pzOk then
g_game.equipItemId(storage[panelName].ringId)
lastAction = now
return
elseif ringEquipped and (shouldUnequipRing or not pzOk) then
if hasDefaultRing then
g_game.equipItemId(defaultRing)
lastAction = now
return
else
g_game.equipItemId(storage[panelName].ringId)
lastAction = now
return
end
end
end
-- [[ amulet ]] --
if ammyEnabled then
if not ammyEquipped and shouldEquipAmmy and pzOk then
g_game.equipItemId(storage[panelName].ammyId)
lastAction = now
return
elseif ammyEquipped and (shouldUnequipAmmy or not pzOk) then
if hasDefaultAmmy then
g_game.equipItemId(defaultAmmy)
lastAction = now
return
else
g_game.equipItemId(storage[panelName].ammyId)
lastAction = now
return
end
end
end
end)
-- end of function
end
addSeparator()
UI.Label("-- [[ Equipper ]] --")
addSeparator()
jewelleryEquip()
addSeparator()