gdle/Source/TurbineData.cpp

122 lines
2.3 KiB
C++
Raw Permalink Normal View History

2018-03-29 17:01:57 -04:00
2019-07-07 20:56:15 +00:00
#include <StdAfx.h>
2018-03-29 17:01:57 -04:00
#include "Globals.h"
//
#include "TurbineData.h"
#include "TurbineObject.h"
TurbineData::TurbineData()
{
m_dwVersion = 0;
m_mFileInfo.clear();
2019-07-07 20:56:15 +00:00
//m_strPath = csprintf("%s\\Data\\", g_pGlobals->GetGameDirectory());
2018-03-29 17:01:57 -04:00
}
TurbineData::~TurbineData()
{
CloseFile();
}
2019-07-07 20:56:15 +00:00
void TurbineData::FileFoundCallback(void *This, uint32_t dwFileID, BTEntry *pEntry)
2018-03-29 17:01:57 -04:00
{
((TurbineData *)This)->FileFoundCallbackInternal(dwFileID, pEntry);
}
2019-07-07 20:56:15 +00:00
void TurbineData::FileFoundCallbackInternal(uint32_t dwFileID, BTEntry *pEntry)
2018-03-29 17:01:57 -04:00
{
FILEINFO info;
info.dwPosition = pEntry->Offset_;
info.dwLength = pEntry->size_;
m_mFileInfo[dwFileID] = info;
}
void TurbineData::LoadFile(const char* szFile)
{
WINLOG(Temp, Normal, "Loading %s.. ", szFile);
SERVER_INFO << "Loading" << szFile;
2018-03-29 17:01:57 -04:00
m_strFile = szFile;
2019-07-07 20:56:15 +00:00
//std::string fullpath = m_strPath + "\\" + szFile;
std::string fullpath = g_pGlobals->GetGameData("Data", szFile);
2018-03-29 17:01:57 -04:00
m_pDATDisk = new DATDisk(fullpath.c_str());
if (!m_pDATDisk->Open())
{
SERVER_ERROR << "Error loading file" << fullpath.c_str();
2018-03-29 17:01:57 -04:00
SafeDelete(m_pDATDisk);
}
else
{
#ifndef _DEBUG
2018-04-25 20:57:54 -05:00
WINLOG(Temp, Normal, "mapping.. ");
SERVER_INFO << "mapping.. ";
2019-07-07 20:56:15 +00:00
m_pDATDisk->FindFileIDsWithinRange(0, (uint32_t)-1, FileFoundCallback, NULL, this);
2018-03-29 17:01:57 -04:00
#endif
WINLOG(Temp, Normal, "done!\n");
SERVER_INFO << szFile << "done! ";
2018-03-29 17:01:57 -04:00
#ifdef PRE_TOD_DATA_FILES
#else
SERVER_INFO << szFile << ": version" << m_pDATDisk->GetHeader()->VersionMinor << "," << m_mFileInfo.size() << "entries.";
2018-03-29 17:01:57 -04:00
#endif
2019-04-13 18:18:28 +00:00
m_iterFile = std::unique_ptr<TurbineFile>(GetFile(0xFFFF0001));
2018-03-29 17:01:57 -04:00
}
}
void TurbineData::CloseFile()
{
SafeDelete(m_pDATDisk);
m_mFileInfo.clear();
}
2019-07-07 20:56:15 +00:00
BOOL TurbineData::FileExists(uint32_t dwID)
2018-03-29 17:01:57 -04:00
{
FILEMAP::iterator i = m_mFileInfo.find(dwID);
return (i != m_mFileInfo.end()) ? TRUE : FALSE;
}
2019-04-13 18:18:28 +00:00
int TurbineData::CompareIteration(BYTE *data)
{
return memcmp(data, m_iterFile->GetData(), m_iterFile->GetLength());
}
2019-07-07 20:56:15 +00:00
TURBINEFILE *TurbineData::GetFile(uint32_t dwID)
2018-03-29 17:01:57 -04:00
{
DATEntry entry;
if (m_pDATDisk && m_pDATDisk->GetData(dwID, &entry))
{
return new TurbineFile(dwID, entry.Data, entry.Length);
}
return NULL;
}
2019-07-07 20:56:15 +00:00
uint32_t TurbineData::GetFileCount()
2018-03-29 17:01:57 -04:00
{
2019-07-07 20:56:15 +00:00
return (uint32_t)m_mFileInfo.size();
2018-03-29 17:01:57 -04:00
}
2019-07-07 20:56:15 +00:00
uint32_t TurbineData::GetVersion()
2018-03-29 17:01:57 -04:00
{
return m_dwVersion;
}
FILEMAP *TurbineData::GetFiles()
{
return &m_mFileInfo;
}