Proper fix for autowalk lag issue
This commit is contained in:
parent
725a16e38e
commit
adc01ab9e3
|
@ -66,6 +66,14 @@ function UIGameMap:onMouseRelease(mousePosition, mouseButton)
|
||||||
-- happens when clicking outside of map boundaries
|
-- happens when clicking outside of map boundaries
|
||||||
if not autoWalkPos then return false end
|
if not autoWalkPos then return false end
|
||||||
|
|
||||||
|
local localPlayerPos = g_game.getLocalPlayer():getPosition()
|
||||||
|
if autoWalkPos.z ~= localPlayerPos.z then
|
||||||
|
local dz = autoWalkPos.z - localPlayerPos.z
|
||||||
|
autoWalkPos.x = autoWalkPos.x + dz
|
||||||
|
autoWalkPos.y = autoWalkPos.y + dz
|
||||||
|
autoWalkPos.z = localPlayerPos.z
|
||||||
|
end
|
||||||
|
|
||||||
local lookThing
|
local lookThing
|
||||||
local useThing
|
local useThing
|
||||||
local creatureThing
|
local creatureThing
|
||||||
|
@ -76,18 +84,6 @@ function UIGameMap:onMouseRelease(mousePosition, mouseButton)
|
||||||
lookThing = tile:getTopLookThing()
|
lookThing = tile:getTopLookThing()
|
||||||
useThing = tile:getTopUseThing()
|
useThing = tile:getTopUseThing()
|
||||||
creatureThing = tile:getTopCreature()
|
creatureThing = tile:getTopCreature()
|
||||||
|
|
||||||
if tile:isWalkable() then
|
|
||||||
local localPlayerPos = g_game.getLocalPlayer():getPosition()
|
|
||||||
if autoWalkPos.z ~= localPlayerPos.z then
|
|
||||||
local dz = autoWalkPos.z - localPlayerPos.z
|
|
||||||
autoWalkPos.x = autoWalkPos.x + dz
|
|
||||||
autoWalkPos.y = autoWalkPos.y + dz
|
|
||||||
autoWalkPos.z = localPlayerPos.z
|
|
||||||
end
|
|
||||||
else
|
|
||||||
autoWalkPos = nil
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local ret = modules.game_interface.processMouseAction(mousePosition, mouseButton, autoWalkPos, lookThing, useThing, creatureThing)
|
local ret = modules.game_interface.processMouseAction(mousePosition, mouseButton, autoWalkPos, lookThing, useThing, creatureThing)
|
||||||
|
|
|
@ -561,6 +561,20 @@ std::tuple<std::vector<Otc::Direction>, Otc::PathFindResult> Map::findPath(const
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check the goal pos is walkable
|
||||||
|
if(g_map.isAwareOfPosition(goalPos)) {
|
||||||
|
const TilePtr goalTile = getTile(goalPos);
|
||||||
|
if(!goalTile || !goalTile->isWalkable()) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const MinimapTile& goalTile = g_minimap.getTile(goalPos);
|
||||||
|
if(goalTile.hasFlag(MinimapTileNotWalkable)) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::unordered_map<Position, Node*, PositionHasher> nodes;
|
std::unordered_map<Position, Node*, PositionHasher> nodes;
|
||||||
std::priority_queue<Node*, std::vector<Node*>, LessNode> searchList;
|
std::priority_queue<Node*, std::vector<Node*>, LessNode> searchList;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue