diff --git a/src/world/Actor/BNpc.cpp b/src/world/Actor/BNpc.cpp index 1e105142..6da0e92f 100644 --- a/src/world/Actor/BNpc.cpp +++ b/src/world/Actor/BNpc.cpp @@ -31,6 +31,7 @@ #include "BNpcTemplate.h" #include "Manager/TerritoryMgr.h" #include "Common.h" +#include using namespace Sapphire::Common; using namespace Sapphire::Network::Packets; @@ -155,7 +156,16 @@ bool Sapphire::Entity::BNpc::moveTo( const FFXIVARR_POSITION3& pos ) auto path = m_pCurrentZone->getNaviProvider()->findFollowPath( m_pos, pos ); - //face( path[0] ); + if(!path.empty()) + { + for(int i = 0; i < path.size(); i++) + Logger::debug("{0}: {1} {2} {3}", i, path[i].x, path[i].y, path[i].z); + + face( path[0] ); + setPos(path[0]); + } + + sendPositionUpdate(); /* float rot = Util::calcAngFrom( getPos().x, getPos().z, pos.x, pos.z ); diff --git a/src/world/Navi/NaviProvider.cpp b/src/world/Navi/NaviProvider.cpp index 5bb3e031..eb3bf39e 100644 --- a/src/world/Navi/NaviProvider.cpp +++ b/src/world/Navi/NaviProvider.cpp @@ -225,6 +225,13 @@ void Sapphire::NaviProvider::toDetourPos( const Sapphire::Common::FFXIVARR_POSIT out[2] = z * -1; } +Sapphire::Common::FFXIVARR_POSITION3 Sapphire::NaviProvider::toGamePos( float* pos ) { + float y = pos[1]; + float z = pos[2]; + + return Common::FFXIVARR_POSITION3 { pos[0], y * -1, z * -1 }; +} + std::vector< Sapphire::Common::FFXIVARR_POSITION3 > Sapphire::NaviProvider::findFollowPath( Common::FFXIVARR_POSITION3 startPos, Common::FFXIVARR_POSITION3 endPos ) { if( !m_naviMesh || !m_naviMeshQuery ) @@ -234,11 +241,16 @@ std::vector< Sapphire::Common::FFXIVARR_POSITION3 > Sapphire::NaviProvider::find dtPolyRef startRef, endRef = 0; + /* float spos[3]; NaviProvider::toDetourPos( startPos, spos ); float epos[3]; NaviProvider::toDetourPos( endPos, epos ); + */ + + float spos[3] = {startPos.x, startPos.y, startPos.z}; + float epos[3] = {endPos.x, endPos.y, endPos.z}; dtQueryFilter filter; filter.setIncludeFlags( 0xffff ); @@ -383,7 +395,7 @@ std::vector< Sapphire::Common::FFXIVARR_POSITION3 > Sapphire::NaviProvider::find for( int i = 0; i < numSmoothPath; i += 3 ) { - resultCoords.push_back( Common::FFXIVARR_POSITION3{ smoothPath[i], smoothPath[i + 2], smoothPath[i + 3] } ); + resultCoords.push_back( Common::FFXIVARR_POSITION3{ smoothPath[i], smoothPath[i + 1], smoothPath[i + 2] } ); } } diff --git a/src/world/Navi/NaviProvider.h b/src/world/Navi/NaviProvider.h index a4d598da..5b9592da 100644 --- a/src/world/Navi/NaviProvider.h +++ b/src/world/Navi/NaviProvider.h @@ -40,6 +40,7 @@ namespace Sapphire void initQuery(); void toDetourPos(const Common::FFXIVARR_POSITION3 position, float* out); + Sapphire::Common::FFXIVARR_POSITION3 toGamePos( float* pos ); std::vector< Sapphire::Common::FFXIVARR_POSITION3 > findFollowPath(Common::FFXIVARR_POSITION3 startPos, Common::FFXIVARR_POSITION3 endPos);