mirror of
https://github.com/OTCv8/otclientv8.git
synced 2025-04-29 18:59:20 +02:00
217 lines
5.0 KiB
Lua
217 lines
5.0 KiB
Lua
setDefaultTab("Main")
|
|
|
|
local panelName = "pushmax"
|
|
local ui = setupUI([[
|
|
Panel
|
|
height: 19
|
|
|
|
BotSwitch
|
|
id: title
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
text-align: center
|
|
width: 130
|
|
!text: tr('PUSHMAX')
|
|
|
|
Button
|
|
id: push
|
|
anchors.top: prev.top
|
|
anchors.left: prev.right
|
|
anchors.right: parent.right
|
|
margin-left: 3
|
|
height: 17
|
|
text: Setup
|
|
|
|
]])
|
|
ui:setId(panelName)
|
|
|
|
if not storage[panelName] then
|
|
storage[panelName] = {
|
|
enabled = true,
|
|
pushDelay = 1060,
|
|
pushMaxRuneId = 3188,
|
|
mwallBlockId = 2128,
|
|
pushMaxKey = "PageUp"
|
|
}
|
|
end
|
|
|
|
ui.title:setOn(storage[panelName].enabled)
|
|
ui.title.onClick = function(widget)
|
|
storage[panelName].enabled = not storage[panelName].enabled
|
|
widget:setOn(storage[panelName].enabled)
|
|
end
|
|
|
|
ui.push.onClick = function(widget)
|
|
pushWindow:show()
|
|
pushWindow:raise()
|
|
pushWindow:focus()
|
|
end
|
|
|
|
rootWidget = g_ui.getRootWidget()
|
|
if rootWidget then
|
|
pushWindow = UI.createWindow('PushMaxWindow', rootWidget)
|
|
pushWindow:hide()
|
|
|
|
pushWindow.closeButton.onClick = function(widget)
|
|
pushWindow:hide()
|
|
end
|
|
|
|
local updateDelayText = function()
|
|
pushWindow.delayText:setText("Push Delay: ".. storage[panelName].pushDelay)
|
|
end
|
|
updateDelayText()
|
|
pushWindow.delay.onValueChange = function(scroll, value)
|
|
storage[panelName].pushDelay = value
|
|
updateDelayText()
|
|
end
|
|
pushWindow.delay:setValue(storage[panelName].pushDelay)
|
|
|
|
pushWindow.runeId.onItemChange = function(widget)
|
|
storage[panelName].pushMaxRuneId = widget:getItemId()
|
|
end
|
|
pushWindow.runeId:setItemId(storage[panelName].pushMaxRuneId)
|
|
pushWindow.mwallId.onItemChange = function(widget)
|
|
storage[panelName].mwallBlockId = widget:getItemId()
|
|
end
|
|
pushWindow.mwallId:setItemId(storage[panelName].mwallBlockId)
|
|
|
|
pushWindow.hotkey.onTextChange = function(widget, text)
|
|
storage[panelName].pushMaxKey = text
|
|
end
|
|
pushWindow.hotkey:setText(storage[panelName].pushMaxKey)
|
|
end
|
|
|
|
|
|
-- variables for config
|
|
|
|
local config = storage[panelName]
|
|
local pushDelay = tonumber(config.pushDelay)
|
|
local rune = tonumber(config.pushMaxRuneId)
|
|
local customMwall = config.mwallBlockId
|
|
local key = config.pushMaxKey
|
|
local enabled = config.enabled
|
|
local fieldTable = {2118, 105, 2122}
|
|
|
|
-- scripts
|
|
|
|
local targetTile
|
|
local pushTarget
|
|
local targetid
|
|
|
|
local resetData = function()
|
|
for i, tile in pairs(g_map.getTiles(posz())) do
|
|
if tile:getText() == "TARGET" or tile:getText() == "DEST" then
|
|
tile:setText('')
|
|
end
|
|
end
|
|
pushTarget = nil
|
|
targetTile = nil
|
|
targetId = nil
|
|
end
|
|
|
|
local getCreatureById = function(id)
|
|
for i, spec in ipairs(getSpectators()) do
|
|
if spec:getId() == id then
|
|
return spec
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
local isNotOk = function(t,tile)
|
|
local tileItems = {}
|
|
|
|
for i, item in pairs(tile:getItems()) do
|
|
table.insert(tileItems, item:getId())
|
|
end
|
|
for i, field in ipairs(t) do
|
|
if table.find(tileItems, field) then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
local isOk = function(a,b)
|
|
return getDistanceBetween(a,b) == 1
|
|
end
|
|
|
|
-- to mark
|
|
onKeyDown(function(keys)
|
|
if not enabled then return end
|
|
if keys ~= key then return end
|
|
local tile = getTileUnderCursor()
|
|
if not tile then return end
|
|
if pushTarget and targetTile then
|
|
resetData()
|
|
return
|
|
end
|
|
local creature = tile:getCreatures()[1]
|
|
if not pushTarget and creature then
|
|
pushTarget = creature
|
|
targetId = creature:getId()
|
|
if pushTarget then
|
|
tile:setText('TARGET')
|
|
pushTarget:setMarked('#00FF00')
|
|
end
|
|
elseif not targetTile and pushTarget then
|
|
if pushTarget and getDistanceBetween(tile:getPosition(),pushTarget:getPosition()) ~= 1 then
|
|
resetData()
|
|
return
|
|
else
|
|
tile:setText('DEST')
|
|
targetTile = tile
|
|
end
|
|
end
|
|
end)
|
|
|
|
onCreaturePositionChange(function(creature, newPos, oldPos)
|
|
if not enabled then return end
|
|
if creature == player then
|
|
resetData()
|
|
end
|
|
if not pushTarget or not targetTile then return end
|
|
if creature == pushTarget and newPos == targetTile then
|
|
resetData()
|
|
end
|
|
end)
|
|
|
|
macro(20, function()
|
|
if not enabled then return end
|
|
if not pushTarget or not targetTile then return end
|
|
tilePos = targetTile:getPosition()
|
|
targetPos = pushTarget:getPosition()
|
|
if not isOk(tilePos,targetPos) then return end
|
|
|
|
local tileOfTarget = g_map.getTile(targetPos)
|
|
|
|
if not targetTile:isWalkable() then
|
|
local topThing = targetTile:getTopUseThing():getId()
|
|
if topThing == 2129 or topThing == 2130 or topThing == customMwall then
|
|
if targetTile:getTimer() < pushDelay+500 then
|
|
storage.isUsing = true
|
|
schedule(pushDelay+700, function()
|
|
storage.isUsing = false
|
|
end)
|
|
end
|
|
if targetTile:getTimer() > pushDelay then
|
|
return
|
|
end
|
|
else
|
|
return resetData()
|
|
end
|
|
end
|
|
|
|
if not tileOfTarget:getTopUseThing():isNotMoveable() then
|
|
return useWith(rune, pushTarget)
|
|
end
|
|
if isNotOk(fieldTable, targetTile) then
|
|
if targetTile:canShoot() then
|
|
return useWith(3148, targetTile:getTopUseThing())
|
|
else
|
|
return
|
|
end
|
|
end
|
|
g_game.move(pushTarget,tilePos)
|
|
delay(2000)
|
|
end) |