new pack system

This commit is contained in:
d1str4ught
2025-09-21 05:28:55 +02:00
parent 775cb2f927
commit 5b1d3c6bce
100 changed files with 5269 additions and 5825 deletions

View File

@@ -3,7 +3,7 @@
#include "EterLib/ResourceManager.h"
#include "EterLib/StateManager.h"
#include "EterPack/EterPackManager.h"
#include "PackLib/PackManager.h"
#include "AreaTerrain.h"
#include "MapOutdoor.h"
@@ -106,10 +106,9 @@ bool CTerrain::LoadShadowMap(const char * c_pszFileName)
DWORD dwStart = ELTimer_GetMSec();
Tracef("LoadShadowMap %s ", c_pszFileName);
CMappedFile file;
LPCVOID c_pvData;
TPackFile file;
if (!CEterPackManager::Instance().Get(file, c_pszFileName, &c_pvData))
if (!CPackManager::Instance().GetFile(c_pszFileName, file))
{
TraceError(" CTerrain::LoadShadowMap - %s OPEN ERROR", c_pszFileName);
return false;
@@ -117,13 +116,13 @@ bool CTerrain::LoadShadowMap(const char * c_pszFileName)
DWORD dwShadowMapSize = sizeof(WORD) * 256 * 256;
if (file.Size() != dwShadowMapSize)
if (file.size() != dwShadowMapSize)
{
TraceError(" CTerrain::LoadShadowMap - %s SIZE ERROR", c_pszFileName);
return false;
}
memcpy(m_awShadowMap, c_pvData, dwShadowMapSize);
memcpy(m_awShadowMap, file.data(), dwShadowMapSize);
Tracef("%d ms\n", ELTimer_GetMSec() - dwStart);
return true;

View File

@@ -4,6 +4,8 @@ add_library(GameLib STATIC ${FILE_SOURCES})
target_link_libraries(GameLib
lzo2
cryptopp-static
mio
)
GroupSourcesByFolder(GameLib)

View File

@@ -1,6 +1,7 @@
#include "StdAfx.h"
#include "EterPack/EterPackManager.h"
#include "PackLib/PackManager.h"
#include "EterLib/ResourceManager.h"
#include "EterBase/lzo.h"
#include "ItemManager.h"
@@ -95,14 +96,13 @@ CItemData * CItemManager::MakeItemData(DWORD dwIndex)
bool CItemManager::LoadItemList(const char * c_szFileName)
{
CMappedFile File;
LPCVOID pData;
TPackFile File;
if (!CEterPackManager::Instance().Get(File, c_szFileName, &pData))
if (!CPackManager::Instance().GetFile(c_szFileName, File))
return false;
CMemoryTextFileLoader textFileLoader;
textFileLoader.Bind(File.Size(), pData);
textFileLoader.Bind(File.size(), File.data());
CTokenVector TokenVector;
for (DWORD i = 0; i < textFileLoader.GetLineCount(); ++i)
@@ -196,16 +196,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))
TPackFile kFile;
if (!CPackManager::Instance().GetFile(c_szFileName, kFile))
{
Tracenf("CItemManager::LoadItemDesc(c_szFileName=%s) - Load Error", c_szFileName);
return false;
}
CMemoryTextFileLoader kTextFileLoader;
kTextFileLoader.Bind(kFile.Size(), pvData);
kTextFileLoader.Bind(kFile.size(), kFile.data());
std::string stTemp;
@@ -254,22 +253,27 @@ DWORD GetHashCode( const char* pString )
bool CItemManager::LoadItemTable(const char* c_szFileName)
{
CMappedFile file;
TPackFile file;
LPCVOID pvData;
if (!CEterPackManager::Instance().Get(file, c_szFileName, &pvData))
if (!CPackManager::Instance().GetFile(c_szFileName, file))
return false;
DWORD dwFourCC, dwElements, dwDataSize;
DWORD dwVersion=0;
DWORD dwStride=0;
file.Read(&dwFourCC, sizeof(DWORD));
uint8_t* p = file.data();
memcpy(&dwFourCC, p, sizeof(DWORD));
p += sizeof(DWORD);
if (dwFourCC == MAKEFOURCC('M', 'I', 'P', 'X'))
{
file.Read(&dwVersion, sizeof(DWORD));
file.Read(&dwStride, sizeof(DWORD));
memcpy(&dwVersion, p, sizeof(DWORD));
p += sizeof(DWORD);
memcpy(&dwStride, p, sizeof(DWORD));
p += sizeof(DWORD);
if (dwVersion != 1)
{
@@ -289,11 +293,14 @@ bool CItemManager::LoadItemTable(const char* c_szFileName)
return false;
}
file.Read(&dwElements, sizeof(DWORD));
file.Read(&dwDataSize, sizeof(DWORD));
memcpy(&dwElements, p, sizeof(DWORD));
p += sizeof(DWORD);
memcpy(&dwDataSize, p, sizeof(DWORD));
p += sizeof(DWORD);
BYTE * pbData = new BYTE[dwDataSize];
file.Read(pbData, dwDataSize);
memcpy(pbData, p, dwDataSize);
/////

View File

@@ -1,6 +1,6 @@
#include "StdAfx.h"
#include "EterLib/StateManager.h"
#include "EterPack/EterPackManager.h"
#include "PackLib/PackManager.h"
#include "MapManager.h"
#include "MapOutdoor.h"
@@ -597,14 +597,13 @@ void CMapManager::GetBaseXY(DWORD * pdwBaseX, DWORD * pdwBaseY)
void CMapManager::__LoadMapInfoVector()
{
CMappedFile kFile;
LPCVOID pData;
if (!CEterPackManager::Instance().Get(kFile, m_stAtlasInfoFileName.c_str(), &pData))
if (!CEterPackManager::Instance().Get(kFile, "AtlasInfo.txt", &pData))
TPackFile kFile;
if (!CPackManager::Instance().GetFile(m_stAtlasInfoFileName, kFile))
if (!CPackManager::Instance().GetFile("AtlasInfo.txt", kFile))
return;
CMemoryTextFileLoader textFileLoader;
textFileLoader.Bind(kFile.Size(), pData);
textFileLoader.Bind(kFile.size(), kFile.data());
char szMapName[256];
int x, y;

View File

@@ -3,7 +3,7 @@
#include "AreaTerrain.h"
#include "AreaLoaderThread.h"
#include "EterLib/ResourceManager.h"
#include "EterPack/EterPackManager.h"
#include "PackLib/PackManager.h"
//CAreaLoaderThread CMapOutdoor::ms_AreaLoaderThread;
@@ -11,7 +11,6 @@ bool CMapOutdoor::Load(float x, float y, float z)
{
Destroy();
CEterPackManager& rkPackMgr=CEterPackManager::Instance();
{
static std::string s_strOldPathName="";
@@ -42,7 +41,7 @@ bool CMapOutdoor::Load(float x, float y, float z)
// LOCAL_ENVIRONMENT_DATA
std::string local_envDataName = GetMapDataDirectory() + "\\" + m_settings_envDataName;
if (rkPackMgr.isExist(local_envDataName.c_str()))
if (CPackManager::instance().IsExist(local_envDataName.c_str()))
{
m_envDataName = local_envDataName;
}
@@ -440,10 +439,9 @@ bool CMapOutdoor::LoadMonsterAreaInfo()
char c_szFileName[256];
sprintf(c_szFileName, "%s\\regen.txt", GetMapDataDirectory().c_str());
LPCVOID pModelData;
CMappedFile File;
TPackFile File;
if (!CEterPackManager::Instance().Get(File, c_szFileName, &pModelData))
if (!CPackManager::Instance().GetFile(c_szFileName, File))
{
//TraceError(" CMapOutdoorAccessor::LoadMonsterAreaInfo Load File %s ERROR", c_szFileName);
return false;
@@ -452,7 +450,7 @@ bool CMapOutdoor::LoadMonsterAreaInfo()
CMemoryTextFileLoader textFileLoader;
CTokenVector stTokenVector;
textFileLoader.Bind(File.Size(), pModelData);
textFileLoader.Bind(File.size(), File.data());
for (DWORD i = 0; i < textFileLoader.GetLineCount(); ++i)
{

View File

@@ -136,54 +136,6 @@ void GetTimeString(char * str, time_t ct)
tm.tm_sec);
}
bool CProperty::Save(const char * c_pszFileName)
{
CTempFile file;
DWORD fourcc = MAKEFOURCC('Y', 'P', 'R', 'T');
file.Write(&fourcc, sizeof(DWORD));
file.Write("\r\n", 2);
if (0 == m_stCRC.length())
{
char szCRC[MAX_PATH + 16 + 1];
GetTimeString(szCRC, time(0));
strcpy(szCRC + strlen(szCRC), c_pszFileName);
m_dwCRC = CPropertyManager::Instance().GetUniqueCRC(szCRC);
_snprintf(szCRC, sizeof(szCRC), "%u", m_dwCRC);
m_stCRC.assign(szCRC);
}
file.Write(m_stCRC.c_str(), m_stCRC.length());
file.Write("\r\n", 2);
CTokenVectorMap::iterator itor = m_stTokenMap.begin();
char buf[4096 + 1];
while (itor != m_stTokenMap.end())
{
CTokenVector & tokenVector = itor->second;
int len = _snprintf(buf, sizeof(buf), "%s\t", itor->first.c_str());
file.Write(buf, len);
for (DWORD i = 0; i < tokenVector.size(); ++i)
{
len = _snprintf(buf, sizeof(buf), "\t\"%s\"", tokenVector[i].c_str());
file.Write(buf, len);
}
file.Write("\r\n", 2);
++itor;
}
file.Close();
return CPropertyManager::Instance().Put(c_pszFileName, file.GetFileName());
}
bool CProperty::ReadFromMemory(const void * c_pvData, int iLen, const char * c_pszFileName)
{
const char * pcData = (const char *) c_pvData;

View File

@@ -19,8 +19,6 @@ class CProperty
void PutVector(const char * c_pszKey, const CTokenVector & c_rTokenVector);
void PutString(const char * c_pszKey, const char * c_pszString);
bool Save(const char * c_pszFileName);
DWORD GetSize();
DWORD GetCRC();

View File

@@ -1,5 +1,5 @@
#include "StdAfx.h"
#include "EterPack/EterPackManager.h"
#include "PackLib/PackManager.h"
#include "PropertyManager.h"
#include "Property.h"
@@ -17,37 +17,22 @@ bool CPropertyManager::Initialize(const char * c_pszPackFileName)
{
if (c_pszPackFileName)
{
if (!m_pack.Create(m_fileDict, c_pszPackFileName, "", true))
{
m_pack = std::make_shared<CPack>();
if (!m_pack->Open(c_pszPackFileName, m_fileDict)) {
LogBoxf("Cannot open property pack file (filename %s)", c_pszPackFileName);
return false;
}
m_isFileMode = false;
TDataPositionMap & indexMap = m_pack.GetIndexMap();
TDataPositionMap::iterator itor = indexMap.begin();
typedef std::map<DWORD, TEterPackIndex *> TDataPositionMap;
int i = 0;
while (indexMap.end() != itor)
{
TEterPackIndex * pIndex = itor->second;
++itor;
if (!stricmp("property/reserve", pIndex->filename))
{
LoadReservedCRC(pIndex->filename);
continue;
for (auto it = m_fileDict.begin(); it != m_fileDict.end(); ++it) {
std::string stFileName = it->second.second.file_name;
if (!stricmp("property/reserve", stFileName.c_str())) {
LoadReservedCRC(stFileName.c_str());
}
else {
Register(stFileName.c_str());
}
if (!Register(pIndex->filename))
continue;
++i;
}
}
else
@@ -60,43 +45,15 @@ bool CPropertyManager::Initialize(const char * c_pszPackFileName)
return true;
}
bool CPropertyManager::BuildPack()
{
if (!m_pack.Create(m_fileDict, "property", ""))
return false;
WIN32_FIND_DATA fdata;
HANDLE hFind = FindFirstFile("property\\*", &fdata);
if (hFind == INVALID_HANDLE_VALUE)
return false;
do
{
if (fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
continue;
char szSourceFileName[256 + 1];
_snprintf(szSourceFileName, sizeof(szSourceFileName), "property\\%s", fdata.cFileName);
m_pack.Put(fdata.cFileName, szSourceFileName,COMPRESSED_TYPE_NONE,"");
}
while (FindNextFile(hFind, &fdata));
FindClose(hFind);
return true;
}
bool CPropertyManager::LoadReservedCRC(const char * c_pszFileName)
{
CMappedFile file;
LPCVOID c_pvData;
TPackFile file;
if (!CEterPackManager::Instance().Get(file, c_pszFileName, &c_pvData))
if (!CPackManager::Instance().GetFile(c_pszFileName, file))
return false;
CMemoryTextFileLoader textFileLoader;
textFileLoader.Bind(file.Size(), c_pvData);
textFileLoader.Bind(file.size(), file.data());
for (DWORD i = 0; i < textFileLoader.GetLineCount(); ++i)
{
@@ -136,15 +93,14 @@ DWORD CPropertyManager::GetUniqueCRC(const char * c_szSeed)
bool CPropertyManager::Register(const char * c_pszFileName, CProperty ** ppProperty)
{
CMappedFile file;
LPCVOID c_pvData;
TPackFile file;
if (!CEterPackManager::Instance().Get(file, c_pszFileName, &c_pvData))
if (!CPackManager::Instance().GetFile(c_pszFileName, file))
return false;
CProperty * pProperty = new CProperty(c_pszFileName);
if (!pProperty->ReadFromMemory(c_pvData, file.Size(), c_pszFileName))
if (!pProperty->ReadFromMemory(file.data(), file.size(), c_pszFileName))
{
delete pProperty;
return false;
@@ -188,67 +144,6 @@ bool CPropertyManager::Get(DWORD dwCRC, CProperty ** ppProperty)
return true;
}
bool CPropertyManager::Put(const char * c_pszFileName, const char * c_pszSourceFileName)
{
if (!CopyFile(c_pszSourceFileName, c_pszFileName, FALSE))
return false;
if (!m_isFileMode) // 팩 파일에도 넣음
{
if (!m_pack.Put(c_pszFileName, NULL, COMPRESSED_TYPE_NONE,""))
{
assert(!"CPropertyManager::Put cannot write to pack file");
return false;
}
}
Register(c_pszFileName);
return true;
}
bool CPropertyManager::Erase(DWORD dwCRC)
{
TPropertyCRCMap::iterator itor = m_PropertyByCRCMap.find(dwCRC);
if (m_PropertyByCRCMap.end() == itor)
return false;
CProperty * pProperty = itor->second;
m_PropertyByCRCMap.erase(itor);
DeleteFile(pProperty->GetFileName());
ReserveCRC(pProperty->GetCRC());
if (!m_isFileMode) // 파일 모드가 아니면 팩에서도 지움
m_pack.Delete(pProperty->GetFileName());
FILE * fp = fopen("property/reserve", "a+");
if (!fp)
LogBox("예약 CRC 파일을 열 수 없습니다.");
else
{
char szCRC[64 + 1];
_snprintf(szCRC, sizeof(szCRC), "%u\r\n", pProperty->GetCRC());
fputs(szCRC, fp);
fclose(fp);
}
delete pProperty;
return true;
}
bool CPropertyManager::Erase(const char * c_pszFileName)
{
CProperty * pProperty = NULL;
if (Get(c_pszFileName, &pProperty))
return Erase(pProperty->GetCRC());
return false;
}
void CPropertyManager::Clear()
{
stl_wipe_second(m_PropertyByCRCMap);

View File

@@ -1,6 +1,6 @@
#pragma once
#include "EterPack/EterPack.h"
#include "PackLib/PackManager.h"
class CPropertyManager : public CSingleton<CPropertyManager>
{
@@ -10,9 +10,6 @@ class CPropertyManager : public CSingleton<CPropertyManager>
void Clear();
void SetPack(CEterPack * pPack);
bool BuildPack();
bool LoadReservedCRC(const char * c_pszFileName);
void ReserveCRC(DWORD dwCRC);
DWORD GetUniqueCRC(const char * c_szSeed);
@@ -23,14 +20,6 @@ class CPropertyManager : public CSingleton<CPropertyManager>
bool Get(DWORD dwCRC, CProperty ** ppProperty);
bool Get(const char * c_pszFileName, CProperty ** ppProperty);
// bool Add(const char * c_pszFileName);
// bool Remove(DWORD dwCRC);
bool Put(const char * c_pszFileName, const char * c_pszSourceFileName);
bool Erase(DWORD dwCRC);
bool Erase(const char * c_pszFileName);
protected:
typedef std::map<DWORD, CProperty *> TPropertyCRCMap;
typedef std::set<DWORD> TCRCSet;
@@ -38,6 +27,6 @@ class CPropertyManager : public CSingleton<CPropertyManager>
bool m_isFileMode;
TPropertyCRCMap m_PropertyByCRCMap;
TCRCSet m_ReservedCRCSet;
CEterPack m_pack;
CEterFileDict m_fileDict;
std::shared_ptr<CPack> m_pack;
TPackFileMap m_fileDict;
};

View File

@@ -1,7 +1,7 @@
#include "StdAfx.h"
#include "RaceManager.h"
#include "RaceMotionData.h"
#include "EterPack/EterPackManager.h"
#include "PackLib/PackManager.h"
bool __IsGuildRace(unsigned race)
{
@@ -237,14 +237,13 @@ bool CRaceManager::__LoadRaceMotionList(CRaceData& rkRaceData, const char* pathN
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("SKILL5", CRaceMotionData::NAME_SKILL+125));
}
const void* pvData;
CMappedFile kMappedFile;
if (!CEterPackManager::Instance().Get(kMappedFile, motionListFileName, &pvData))
TPackFile kMappedFile;
if (!CPackManager::Instance().GetFile(motionListFileName, kMappedFile))
return false;
CMemoryTextFileLoader kTextFileLoader;
kTextFileLoader.Bind(kMappedFile.Size(), pvData);
kTextFileLoader.Bind(kMappedFile.size(), kMappedFile.data());
rkRaceData.RegisterMotionMode(CRaceMotionData::MODE_GENERAL);