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:
Koray
2026-02-15 14:33:59 +03:00
parent 219cf7e624
commit acb0ac0af5

View File

@@ -2,6 +2,7 @@
#include "EterLib/BufferPool.h" #include "EterLib/BufferPool.h"
#include <fstream> #include <fstream>
#include <filesystem> #include <filesystem>
#include "EterBase/Debug.h"
CPackManager::CPackManager() CPackManager::CPackManager()
: m_load_from_pack(true) : 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) // 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 void CPackManager::NormalizePath(std::string_view in, std::string& out) const