1
0
forked from metin2/client

Used shared pointers and string streams to read data from the CEterPackManager

This commit is contained in:
2024-12-24 06:54:43 +02:00
parent 603f2207ef
commit c21c99393d
50 changed files with 363 additions and 3668 deletions

View File

@ -1042,12 +1042,11 @@ class CTextLineLoader
public:
CTextLineLoader(const char * c_szFileName)
{
const VOID* pvData;
CMappedFile kFile;
if (!CEterPackManager::Instance().Get(kFile, c_szFileName, &pvData))
CEterPackManager::TPackDataPtr data;
if (!CEterPackManager::Instance().Get(c_szFileName, data))
return;
m_kTextFileLoader.Bind(kFile.Size(), pvData);
m_kTextFileLoader.Bind(data->size(), data->data());
}
DWORD GetLineCount()

View File

@ -241,19 +241,7 @@ void CPythonBackground::Initialize()
void CPythonBackground::__CreateProperty()
{
if (CEterPackManager::SEARCH_FILE_FIRST == CEterPackManager::Instance().GetSearchMode() &&
_access("property", 0) == 0)
{
m_PropertyManager.Initialize(NULL);
CPropertyLoader PropertyLoader;
PropertyLoader.SetPropertyManager(&m_PropertyManager);
PropertyLoader.Create("*.*", "Property");
}
else
{
m_PropertyManager.Initialize("pack/property");
}
m_PropertyManager.Initialize();
}
//////////////////////////////////////////////////////////////////////

View File

@ -106,16 +106,11 @@ void CPythonEventManager::__InitEventSet(TEventSet& rEventSet)
int CPythonEventManager::RegisterEventSet(const char * c_szFileName)
{
CMappedFile File;
LPCVOID pMap;
if (!CEterPackManager::Instance().Get(File, c_szFileName, &pMap))
std::stringstream data;
if (!CEterPackManager::Instance().Get(c_szFileName, data))
return -1;
std::string strEventString;
strEventString.resize(File.Size()+1);
File.Read(&strEventString[0], File.Size());
std::string strEventString = data.str();
TEventSet * pEventSet = m_EventSetPool.Alloc();
if (!pEventSet)

View File

@ -33,13 +33,12 @@ bool CPythonNetworkStream::IsInsultIn(const char* c_szMsg)
bool CPythonNetworkStream::LoadInsultList(const char* c_szInsultListFileName)
{
CMappedFile file;
const VOID* pvData;
if (!CEterPackManager::Instance().Get(file, c_szInsultListFileName, &pvData))
CEterPackManager::TPackDataPtr data;
CMemoryTextFileLoader kMemTextFileLoader;
if (!CEterPackManager::Instance().Get(c_szInsultListFileName, data))
return false;
CMemoryTextFileLoader kMemTextFileLoader;
kMemTextFileLoader.Bind(file.Size(), pvData);
kMemTextFileLoader.Bind(data->size(), data->data());
m_kInsultChecker.Clear();
for (DWORD dwLineIndex=0; dwLineIndex<kMemTextFileLoader.GetLineCount(); ++dwLineIndex)
@ -55,9 +54,8 @@ bool CPythonNetworkStream::LoadConvertTable(DWORD dwEmpireID, const char* c_szFi
if (dwEmpireID<1 || dwEmpireID>=4)
return false;
CMappedFile file;
const VOID* pvData;
if (!CEterPackManager::Instance().Get(file, c_szFileName, &pvData))
std::stringstream data;
if (!CEterPackManager::Instance().Get(c_szFileName, data))
return false;
DWORD dwEngCount=26;
@ -65,16 +63,17 @@ bool CPythonNetworkStream::LoadConvertTable(DWORD dwEmpireID, const char* c_szFi
DWORD dwHanSize=dwHanCount*2;
DWORD dwFileSize=dwEngCount*2+dwHanSize;
if (file.Size()<dwFileSize)
if (data.str().length() < dwFileSize)
return false;
char* pcData=(char*)pvData;
STextConvertTable& rkTextConvTable=m_aTextConvTable[dwEmpireID-1];
memcpy(rkTextConvTable.acUpper, pcData, dwEngCount);pcData+=dwEngCount;
memcpy(rkTextConvTable.acLower, pcData, dwEngCount);pcData+=dwEngCount;
memcpy(rkTextConvTable.aacHan, pcData, dwHanSize);
data.read((char*)rkTextConvTable.acUpper, dwEngCount);
data.read((char*)rkTextConvTable.acLower, dwEngCount);
data.read((char*)rkTextConvTable.aacHan, dwHanSize);
if (!data)
return false;
return true;
}

View File

@ -14,17 +14,17 @@ bool CPythonNonPlayer::LoadNonPlayerData(const char * c_szFileName)
6822045
};
CMappedFile file;
LPCVOID pvData;
Tracef("CPythonNonPlayer::LoadNonPlayerData: %s, sizeof(TMobTable)=%u\n", c_szFileName, sizeof(TMobTable));
if (!CEterPackManager::Instance().Get(file, c_szFileName, &pvData))
std::stringstream data;
if (!CEterPackManager::Instance().Get(c_szFileName, data))
return false;
DWORD dwFourCC, dwElements, dwDataSize;
file.Read(&dwFourCC, sizeof(DWORD));
data.read((char*)&dwFourCC, sizeof(DWORD));
if (!data)
return false;
if (dwFourCC != MAKEFOURCC('M', 'M', 'P', 'T'))
{
@ -32,20 +32,26 @@ bool CPythonNonPlayer::LoadNonPlayerData(const char * c_szFileName)
return false;
}
file.Read(&dwElements, sizeof(DWORD));
file.Read(&dwDataSize, sizeof(DWORD));
data.read((char*)&dwElements, sizeof(DWORD));
if (!data)
return false;
data.read((char*)&dwDataSize, sizeof(DWORD));
if (!data)
return false;
auto pbData = std::make_shared<std::vector<BYTE>>(dwDataSize);
data.read((char*)pbData->data(), pbData->size());
if (!data)
return false;
BYTE * pbData = new BYTE[dwDataSize];
file.Read(pbData, dwDataSize);
/////
CLZObject zObj;
if (!CLZO::Instance().Decompress(zObj, pbData, s_adwMobProtoKey))
{
delete [] pbData;
if (!CLZO::Instance().Decompress(zObj, pbData->data(), s_adwMobProtoKey))
return false;
}
if ((zObj.GetSize() % sizeof(TMobTable)) != 0)
{
@ -64,7 +70,6 @@ bool CPythonNonPlayer::LoadNonPlayerData(const char * c_szFileName)
m_NonPlayerDataMap.insert(TNonPlayerDataMap::value_type(pNonPlayerData->dwVnum, pNonPlayerData));
}
delete [] pbData;
return true;
}

View File

@ -63,11 +63,9 @@ PyObject * packGet(PyObject * poSelf, PyObject * poArgs)
(stricmp(pcExt, ".pyc") == 0) ||
(stricmp(pcExt, ".txt") == 0))
{
CMappedFile file;
const void * pData = NULL;
if (CEterPackManager::Instance().Get(file,strFileName,&pData))
return Py_BuildValue("s#",pData, file.Size());
CEterPackManager::TPackDataPtr data;
if (CEterPackManager::Instance().Get(strFileName, data))
return Py_BuildValue("s#", data->data(), data->size());
}
}

View File

@ -89,13 +89,13 @@ void string_replace_word(const char* base, int base_len, const char* src, int sr
bool CPythonSkill::RegisterSkillTable(const char * c_szFileName)
{
const VOID* pvData;
CMappedFile kFile;
if (!CEterPackManager::Instance().Get(kFile, c_szFileName, &pvData))
CEterPackManager::TPackDataPtr data;
CMemoryTextFileLoader textFileLoader;
if (!CEterPackManager::Instance().Get(c_szFileName, data))
return false;
CMemoryTextFileLoader textFileLoader;
textFileLoader.Bind(kFile.Size(), pvData);
textFileLoader.Bind(data->size(), data->data());
// OVERWRITE_SKILLPROTO_POLY
std::string src_poly_rand;
@ -279,13 +279,13 @@ void CPythonSkill::__RegisterNormalIconImage(TSkillData & rData, const char * c_
extern const DWORD c_iSkillIndex_Riding;
bool CPythonSkill::RegisterSkillDesc(const char * c_szFileName)
{
const VOID* pvData;
CMappedFile kFile;
if (!CEterPackManager::Instance().Get(kFile, c_szFileName, &pvData))
CEterPackManager::TPackDataPtr data;
CMemoryTextFileLoader textFileLoader;
if (!CEterPackManager::Instance().Get(c_szFileName, data))
return false;
CMemoryTextFileLoader textFileLoader;
textFileLoader.Bind(kFile.Size(), pvData);
textFileLoader.Bind(data->size(), data->data());
CTokenVector TokenVector;
for (DWORD i = 0; i < textFileLoader.GetLineCount(); ++i)

View File

@ -256,10 +256,6 @@ bool PackInitialize(const char * c_pszFolder)
#endif
CTextFileLoader::SetCacheMode();
#if defined(USE_RELATIVE_PATH)
CEterPackManager::Instance().SetRelativePathMode();
#endif
CEterPackManager::Instance().SetCacheMode();
CEterPackManager::Instance().SetSearchMode(bPackFirst);
CSoundData::SetPackMode(); // Miles <20><><EFBFBD><EFBFBD> <20>ݹ<EFBFBD><DDB9><EFBFBD> <20><><EFBFBD><EFBFBD>