fix missing resource exception handling
Unhandled exception at 0x00007FF9433E8B9C (KERNELBASE.dll) in metin2client__20260215_143044.dmp: 0xE06D7363: Microsoft C++ Exception (parameters: 0x0000000019930520, 0x0000001E1CF2CF80, 0x00007FF698014258, 0x00007FF696940000).
[External Code]
> Metin2_Debug.exe!std::filesystem::_Throw_fs_error(const char * _Op, const std::error_code & _Error, const std::filesystem::path & _Path1) Line 1863 C++
Metin2_Debug.exe!std::filesystem::exists(const std::filesystem::path & _Target) Line 3463 C++
Metin2_Debug.exe!CPackManager::IsExist(std::basic_string_view<char,std::char_traits<char>> path) Line 95 C++
Metin2_Debug.exe!CResourceManager::IsFileExist(const char * c_szFileName) Line 498 C++
Metin2_Debug.exe!CArea::__SetObjectInstance_SetBuilding(CArea::SObjectInstance * pObjectInstance, const CArea::SObjectData * c_pData, CProperty * pProperty) Line 599 C++
Metin2_Debug.exe!CArea::__SetObjectInstance(CArea::SObjectInstance * pObjectInstance, const CArea::SObjectData * c_pData) Line 479 C++
Metin2_Debug.exe!CArea::__Load_BuildObjectInstances() Line 449 C++
Metin2_Debug.exe!CArea::Load(const char * c_szPathName) Line 750 C++
Metin2_Debug.exe!CMapOutdoor::LoadArea(unsigned short wAreaCoordX, unsigned short wAreaCoordY, unsigned short wCellCoordX, unsigned short wCellCoordY) Line 173 C++
Metin2_Debug.exe!CMapOutdoor::Update(float fX, float fY, float fZ) Line 103 C++
Metin2_Debug.exe!CMapOutdoor::Load(float x, float y, float z) Line 40 C++
Metin2_Debug.exe!CMapManager::LoadMap(const std::string & c_rstrMapName, float x, float y, float z) Line 124 C++
Metin2_Debug.exe!CPythonBackground::Warp(unsigned long dwX, unsigned long dwY) Line 744 C++
Metin2_Debug.exe!CPythonNetworkStream::Warp(long lGlobalX, long lGlobalY) Line 374 C++
Metin2_Debug.exe!netWarp(_object * poSelf, _object * poArgs) Line 81 C++
[External Code]
Metin2_Debug.exe!CPythonLauncher::RunFile(const char * c_szFileName) Line 319 C++
Metin2_Debug.exe!RunMainScript(CPythonLauncher & pyLauncher, const char * lpCmdLine) Line 246 C++
Metin2_Debug.exe!Main(HINSTANCE__ * hInstance, char * lpCmdLine) Line 302 C++
Metin2_Debug.exe!WinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, char * lpCmdLine, int nCmdShow) Line 329 C++
[External Code]
+ this 0x0000001e1cf2f6a0 {m_load_from_pack=true m_entries={ size=50983 } m_pBufferPool=0x0000001e1d03b350 {...} ...} const CPackManager *
buf <Unable to read memory>
+ path "d:/ymir work/zone/b/obj/general_obj_stone19_lod_01.gr2" std::basic_string_view<char,std::char_traits<char>>
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
#include "EterLib/BufferPool.h"
|
||||
#include <fstream>
|
||||
#include <filesystem>
|
||||
#include "EterBase/Debug.h"
|
||||
|
||||
CPackManager::CPackManager()
|
||||
: m_load_from_pack(true)
|
||||
@@ -92,7 +93,15 @@ bool CPackManager::IsExist(std::string_view path) const
|
||||
}
|
||||
|
||||
// Fallback to disk (for files not in packs, like bgm folder)
|
||||
return std::filesystem::exists(buf);
|
||||
std::error_code ec; // To avoid exceptions from std::filesystem
|
||||
const auto result = std::filesystem::exists(buf, ec);
|
||||
if (ec)
|
||||
{
|
||||
TraceError("std::filesystem::exists failed for path '%s' with error: %s", buf.c_str(), ec.message().c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void CPackManager::NormalizePath(std::string_view in, std::string& out) const
|
||||
|
||||
Reference in New Issue
Block a user