diff --git a/Source/Contents/NavigationManager.h b/Source/Contents/NavigationManager.h index 21640ebc..6859f2df 100644 --- a/Source/Contents/NavigationManager.h +++ b/Source/Contents/NavigationManager.h @@ -327,6 +327,11 @@ public: std::vector WriteObject(CNavi_Object* object); std::vector WriteReplayState(); CNavi_Link* ReadObject(const char* record); + NavigationTarget ReadTarget(const char* data, int size); + CNavi_Object* ReadTargetObject(const char* record); + bool GetMobInfo( + std::string title, std::string* name, std::string* sprite, int* cellX, int* cellYByte1, int* element, int* elementLevel, int* cellYByte0, int* type + ); void ClearSavedTarget(); void ClearCurrentObject(); void ClearStates(); diff --git a/Source/Contents/NavigationSource.cpp b/Source/Contents/NavigationSource.cpp index bd0a3779..49cf7146 100644 --- a/Source/Contents/NavigationSource.cpp +++ b/Source/Contents/NavigationSource.cpp @@ -1,6 +1,7 @@ #include "Contents/NavigationManager.h" #include "Client/Session.h" #include "Resource/ResourceMgr.h" +#include "Utility/Text/FormatString.h" #include #include @@ -404,6 +405,27 @@ NaviCell CNavigationManager::ParseCell(const char* text) { return cell; } +// OFFSET: 0x00B93BA0 +// FUNCTION: fn_19565 +NavigationTarget CNavigationManager::ReadTarget(const char* data, int size) { + NavigationTarget target; + target.type = *reinterpret_cast(data); + std::vector buffer(size - 3, '\0'); + if (target.type == 1 || target.type == 0) { + std::memcpy(buffer.data(), data + 4, size - 4); + target.object = this->FindObject(buffer.data()); + if (target.object == nullptr) { + return NavigationTarget(0, nullptr); + } + } else { + target.object = this->ReadTargetObject(data + 4); + } + + return target; +} + +// OFFSET: 0x00B94170 + // OFFSET: 0x00B94890 // FUNCTION: fn_19568 std::vector CNavigationManager::WriteTarget(NavigationTarget target) { @@ -556,6 +578,8 @@ void CNavigationManager::ClearNodes() { this->nodes.clear(); } +// OFFSET: 0x00B95B00 + // OFFSET: 0x00B95DC0 // FUNCTION: fn_19579 int CNavigationManager::FindNodePath(unsigned int index) {