mirror of
https://github.com/OTCv8/otclientv8.git
synced 2025-10-24 00:15:02 +02:00
Updated to OTCv8 3.0 rev 19
This commit is contained in:
81
modules/game_bot/default_configs/vBot/cavebot/clear_tile.lua
Normal file
81
modules/game_bot/default_configs/vBot/cavebot/clear_tile.lua
Normal file
@@ -0,0 +1,81 @@
|
||||
CaveBot.Extensions.ClearTile = {}
|
||||
|
||||
CaveBot.Extensions.ClearTile.setup = function()
|
||||
CaveBot.registerAction("ClearTile", "#00FFFF", function(value, retries)
|
||||
local pos = regexMatch(value, "\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)")
|
||||
if not pos[1] then
|
||||
warn("CaveBot[ClearTile]: invalid value. It should be position (x,y,z), is: " .. value)
|
||||
return false
|
||||
end
|
||||
|
||||
if retries >= 20 then
|
||||
print("CaveBot[ClearTile]: too many tries, can't open doors")
|
||||
return false -- tried 20 times, can't clear it
|
||||
end
|
||||
|
||||
pos = {x=tonumber(pos[1][2]), y=tonumber(pos[1][3]), z=tonumber(pos[1][4])}
|
||||
local tile = g_map.getTile(pos)
|
||||
if not tile then
|
||||
print("CaveBot[ClearTile]: can't find tile or tile is unreachable, skipping")
|
||||
return false
|
||||
end
|
||||
|
||||
-- no items on tile and walkability means we are done
|
||||
if tile:isWalkable() and tile:getTopUseThing():isNotMoveable() and not tile:hasCreature() then
|
||||
print("CaveBot[ClearTile]: tile clear, proceeding")
|
||||
return true
|
||||
end
|
||||
|
||||
local pPos = player:getPosition()
|
||||
local tPos = tile:getPosition()
|
||||
if math.max(math.abs(pPos.x - tPos.x), math.abs(pPos.y - tPos.y)) ~= 1 then
|
||||
CaveBot.walkTo(tPos, 20, {ignoreNonPathable = true, precision=3})
|
||||
delay(300)
|
||||
return "retry"
|
||||
end
|
||||
|
||||
if retries > 0 then
|
||||
delay(1100)
|
||||
end
|
||||
|
||||
-- but if not then first check for creatures
|
||||
if tile:hasCreature() then
|
||||
local c = tile:getCreatures()[1]
|
||||
if c:isMonster() then
|
||||
attack(c)
|
||||
|
||||
-- ok here we will find tile to push player, random
|
||||
elseif c:isPlayer() then
|
||||
local candidates = {}
|
||||
for _, tile in ipairs(g_map.getTiles(posz())) do
|
||||
if getDistanceBetween(c:getPosition(), tile:getPosition()) == 1 and tile:getPosition() ~= pPos then
|
||||
table.insert(candidates, tile:getPosition())
|
||||
end
|
||||
end
|
||||
|
||||
if #candidates == 0 then
|
||||
print("CaveBot[ClearTile]: can't find tile to push, cannot clear way, skipping")
|
||||
return false
|
||||
else
|
||||
print("CaveBot[ClearTile]: pushing player... " .. c:getName() .. " out of the way")
|
||||
g_game.move(c, candidates[math.random(1,#candidates)])
|
||||
return "retry"
|
||||
end
|
||||
end
|
||||
end
|
||||
if #tile:getItems() > 1 then
|
||||
local item = tile:getTopUseThing()
|
||||
print("CaveBot[ClearTile]: moving item... " .. item:getId().. " from tile")
|
||||
g_game.move(item, pPos, item:getCount())
|
||||
return "retry"
|
||||
end
|
||||
end)
|
||||
|
||||
CaveBot.Editor.registerAction("cleartile", "clear tile", {
|
||||
value=function() return posx() .. "," .. posy() .. "," .. posz() end,
|
||||
title="position of tile to clear",
|
||||
description="tile position (x,y,z)",
|
||||
multiline=false,
|
||||
validation="^\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)$"
|
||||
})
|
||||
end
|
||||
Reference in New Issue
Block a user