forked from metin2/client
Used shared pointers and string streams to read data from the CEterPackManager
This commit is contained in:
@ -95,14 +95,12 @@ CItemData * CItemManager::MakeItemData(DWORD dwIndex)
|
||||
|
||||
bool CItemManager::LoadItemList(const char * c_szFileName)
|
||||
{
|
||||
CMappedFile File;
|
||||
LPCVOID pData;
|
||||
|
||||
if (!CEterPackManager::Instance().Get(File, c_szFileName, &pData))
|
||||
CEterPackManager::TPackDataPtr data;
|
||||
CMemoryTextFileLoader textFileLoader;
|
||||
if (!CEterPackManager::Instance().Get(c_szFileName, data))
|
||||
return false;
|
||||
|
||||
CMemoryTextFileLoader textFileLoader;
|
||||
textFileLoader.Bind(File.Size(), pData);
|
||||
textFileLoader.Bind(data->size(), data->data());
|
||||
|
||||
CTokenVector TokenVector;
|
||||
for (DWORD i = 0; i < textFileLoader.GetLineCount(); ++i)
|
||||
@ -196,16 +194,15 @@ const std::string& __SnapString(const std::string& c_rstSrc, std::string& rstTem
|
||||
|
||||
bool CItemManager::LoadItemDesc(const char* c_szFileName)
|
||||
{
|
||||
const VOID* pvData;
|
||||
CMappedFile kFile;
|
||||
if (!CEterPackManager::Instance().Get(kFile, c_szFileName, &pvData))
|
||||
CEterPackManager::TPackDataPtr data;
|
||||
CMemoryTextFileLoader kTextFileLoader;
|
||||
if (!CEterPackManager::Instance().Get(c_szFileName, data))
|
||||
{
|
||||
Tracenf("CItemManager::LoadItemDesc(c_szFileName=%s) - Load Error", c_szFileName);
|
||||
return false;
|
||||
}
|
||||
|
||||
CMemoryTextFileLoader kTextFileLoader;
|
||||
kTextFileLoader.Bind(kFile.Size(), pvData);
|
||||
kTextFileLoader.Bind(data->size(), data->data());
|
||||
|
||||
std::string stTemp;
|
||||
|
||||
@ -254,22 +251,27 @@ DWORD GetHashCode( const char* pString )
|
||||
|
||||
bool CItemManager::LoadItemTable(const char* c_szFileName)
|
||||
{
|
||||
CMappedFile file;
|
||||
LPCVOID pvData;
|
||||
|
||||
if (!CEterPackManager::Instance().Get(file, c_szFileName, &pvData))
|
||||
std::stringstream data;
|
||||
if (!CEterPackManager::Instance().Get(c_szFileName, data))
|
||||
return false;
|
||||
|
||||
DWORD dwFourCC, dwElements, dwDataSize;
|
||||
DWORD dwVersion=0;
|
||||
DWORD dwStride=0;
|
||||
|
||||
file.Read(&dwFourCC, sizeof(DWORD));
|
||||
data.read((char*)&dwFourCC, sizeof(DWORD));
|
||||
if (!data)
|
||||
return false;
|
||||
|
||||
if (dwFourCC == MAKEFOURCC('M', 'I', 'P', 'X'))
|
||||
{
|
||||
file.Read(&dwVersion, sizeof(DWORD));
|
||||
file.Read(&dwStride, sizeof(DWORD));
|
||||
data.read((char*)&dwVersion, sizeof(DWORD));
|
||||
if (!data)
|
||||
return false;
|
||||
|
||||
data.read((char*)&dwStride, sizeof(DWORD));
|
||||
if (!data)
|
||||
return false;
|
||||
|
||||
if (dwVersion != 1)
|
||||
{
|
||||
@ -289,19 +291,25 @@ bool CItemManager::LoadItemTable(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;
|
||||
|
||||
BYTE * pbData = new BYTE[dwDataSize];
|
||||
file.Read(pbData, dwDataSize);
|
||||
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;
|
||||
|
||||
/////
|
||||
|
||||
CLZObject zObj;
|
||||
|
||||
if (!CLZO::Instance().Decompress(zObj, pbData, s_adwItemProtoKey))
|
||||
if (!CLZO::Instance().Decompress(zObj, pbData->data(), s_adwItemProtoKey))
|
||||
{
|
||||
delete [] pbData;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -382,7 +390,6 @@ bool CItemManager::LoadItemTable(const char* c_szFileName)
|
||||
// pItemData->SetItemTableData(table);
|
||||
// }
|
||||
|
||||
delete [] pbData;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user