mirror of
https://github.com/dashr9230/SA-MP.git
synced 2025-01-06 01:23:30 +08:00
89 lines
1.8 KiB
C
89 lines
1.8 KiB
C
|
|
||
|
#pragma once
|
||
|
|
||
|
#include <windows.h>
|
||
|
|
||
|
#include "ArchiveCommon.h"
|
||
|
#include "Stream.h"
|
||
|
|
||
|
#include "../mod.h"
|
||
|
|
||
|
#include "../filesystem.h"
|
||
|
|
||
|
typedef struct _AFS_ENTRYBT_NODE
|
||
|
{
|
||
|
SAA_ENTRY* pEntry;
|
||
|
_AFS_ENTRYBT_NODE* pLNode;
|
||
|
_AFS_ENTRYBT_NODE* pRNode;
|
||
|
BYTE* pbData;
|
||
|
|
||
|
_AFS_ENTRYBT_NODE()
|
||
|
{
|
||
|
this->pEntry = NULL;
|
||
|
this->pLNode = NULL;
|
||
|
this->pRNode = NULL;
|
||
|
this->pbData = NULL;
|
||
|
}
|
||
|
|
||
|
_AFS_ENTRYBT_NODE(SAA_ENTRY* pSAAEntry)
|
||
|
{
|
||
|
this->pEntry = pSAAEntry;
|
||
|
this->pLNode = NULL;
|
||
|
this->pRNode = NULL;
|
||
|
this->pbData = NULL;
|
||
|
}
|
||
|
|
||
|
void AddEntry(SAA_ENTRY* pSAAEntry)
|
||
|
{
|
||
|
if (this->pEntry == NULL) {
|
||
|
this->pEntry = pSAAEntry;
|
||
|
} else {
|
||
|
if (pSAAEntry->dwFileNameHash < this->pEntry->dwFileNameHash) {
|
||
|
if (this->pLNode == NULL)
|
||
|
this->pLNode = new _AFS_ENTRYBT_NODE(pSAAEntry);
|
||
|
else
|
||
|
this->pLNode->AddEntry(pSAAEntry);
|
||
|
} else {
|
||
|
if (this->pRNode == NULL)
|
||
|
this->pRNode = new _AFS_ENTRYBT_NODE(pSAAEntry);
|
||
|
else
|
||
|
this->pRNode->AddEntry(pSAAEntry);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
} AFS_ENTRYBT_NODE;
|
||
|
|
||
|
class CArchiveFS // size: 2357
|
||
|
: public CFileSystem
|
||
|
{
|
||
|
private:
|
||
|
bool m_bLoaded;
|
||
|
CAbstractStream *m_pStream;
|
||
|
bool m_bEntriesLoaded;
|
||
|
SAA_FILE_HEADER m_Header;
|
||
|
SAA_ENTRY m_pEntries[SAA_MAX_ENTRIES];
|
||
|
AFS_ENTRYBT_NODE m_EntryBTreeRoot;
|
||
|
DWORD m_dwObfsMask;
|
||
|
DWORD m_dwNumEntries;
|
||
|
|
||
|
void LoadEntries();
|
||
|
|
||
|
public:
|
||
|
CArchiveFS(void);
|
||
|
CArchiveFS(DWORD dwNumEntries, DWORD dwFDSize);
|
||
|
|
||
|
virtual bool Load(char* szFileName);
|
||
|
|
||
|
// TODO: CArchiveFS vftable 100E9AA8
|
||
|
void CArchiveFS__sub_10065590() {};
|
||
|
void CArchiveFS__sub_100654A0() {};
|
||
|
void CArchiveFS__sub_10064E10() {};
|
||
|
void CArchiveFS__sub_10064EC0() {};
|
||
|
void CArchiveFS__sub_10064F20() {};
|
||
|
void CArchiveFS__sub_10064F60() {};
|
||
|
void CArchiveFS__sub_10064D30() {};
|
||
|
void CArchiveFS__sub_10064E40() {};
|
||
|
void CArchiveFS__sub_10065150() {};
|
||
|
};
|