From 3d7e80ea7a6f78089959437fcf9883d735ec7b46 Mon Sep 17 00:00:00 2001 From: Eduardo Bart Date: Tue, 21 Aug 2012 21:27:48 -0300 Subject: [PATCH] Improve creature attack click --- src/otclient/creature.cpp | 5 +++-- src/otclient/creature.h | 6 +++++- src/otclient/tile.cpp | 20 ++++++++++++++++++++ src/otclient/tile.h | 1 + 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/otclient/creature.cpp b/src/otclient/creature.cpp index 38af2be8..f3e2494f 100644 --- a/src/otclient/creature.cpp +++ b/src/otclient/creature.cpp @@ -265,7 +265,8 @@ void Creature::walk(const Position& oldPos, const Position& newPos) // get walk direction m_lastStepDirection = oldPos.getDirectionFromPosition(newPos); - m_lastStepPosition = newPos; + m_lastStepFromPosition = oldPos; + m_lastStepToPosition = newPos; // set current walking direction setDirection(m_lastStepDirection); @@ -627,7 +628,7 @@ int Creature::getStepDuration() { int groundSpeed = 0; - Position tilePos = m_lastStepPosition; + Position tilePos = m_lastStepToPosition; if(!tilePos.isValid()) tilePos = m_position; const TilePtr& tile = g_map.getTile(tilePos); diff --git a/src/otclient/creature.h b/src/otclient/creature.h index cfb93340..ec7bd652 100644 --- a/src/otclient/creature.h +++ b/src/otclient/creature.h @@ -85,6 +85,9 @@ public: Point getDrawOffset(); int getStepDuration(); Point getWalkOffset() { return m_walkOffset; } + Position getLastStepFromPosition() { return m_lastStepFromPosition; } + Position getLastStepToPosition() { return m_lastStepToPosition; } + float getStepProgress() { return m_walkTimer.ticksElapsed() / getStepDuration(); } virtual Point getDisplacement(); virtual int getDisplacementX(); virtual int getDisplacementY(); @@ -154,7 +157,8 @@ protected: Point m_walkOffset; Otc::Direction m_walkTurnDirection; Otc::Direction m_lastStepDirection; - Position m_lastStepPosition; + Position m_lastStepFromPosition; + Position m_lastStepToPosition; Position m_oldPosition; }; diff --git a/src/otclient/tile.cpp b/src/otclient/tile.cpp index 3b560ff0..a4dadb36 100644 --- a/src/otclient/tile.cpp +++ b/src/otclient/tile.cpp @@ -371,6 +371,26 @@ CreaturePtr Tile::getTopCreature() } if(!creature && !m_walkingCreatures.empty()) creature = m_walkingCreatures.back(); + + // check for walking creatures in tiles around + if(!creature) { + for(int xi=-1;xi<=1;++xi) { + for(int yi=-1;yi<=1;++yi) { + Position pos = m_position.translated(xi, yi); + if(pos == m_position) + continue; + + const TilePtr& tile = g_map.getTile(pos); + if(tile) { + for(const CreaturePtr& c : tile->getCreatures()) { + if(c->isWalking() && c->getLastStepFromPosition() == m_position && c->getStepProgress() < 0.75f) { + creature = c; + } + } + } + } + } + } return creature; } diff --git a/src/otclient/tile.h b/src/otclient/tile.h index 51c9f227..4a2365ad 100644 --- a/src/otclient/tile.h +++ b/src/otclient/tile.h @@ -85,6 +85,7 @@ public: int getDrawElevation() { return m_drawElevation; } std::vector getItems(); std::vector getCreatures(); + std::vector getWalkingCreatures() { return m_walkingCreatures; } std::vector getThings() { return m_things; } ItemPtr getGround(); int getGroundSpeed();