diff --git a/Add-on API.h b/Add-on API.h index 077e99e..511a7da 100644 --- a/Add-on API.h +++ b/Add-on API.h @@ -19,7 +19,7 @@ #include "database.h" #include "object.h" #include "player.h" -typedef toggle (WINAPIC *CmdFunc)(Player::PlayerInfo plI, util::ArgContainer arg,char chatRconRemote, short stage, LPVOID stack, bool* showChat); +typedef toggle (WINAPIC *CmdFunc)(IPlayer::PlayerInfo plI, util::ArgContainer arg,char chatRconRemote, short stage, LPVOID stack, bool* showChat); #include "admin.h" #include "command.h" @@ -76,10 +76,10 @@ namespace addon { } extern "C" dllAPI addon::versionEAO EXTversion = { sizeof(addon::versionEAO), //size - 3, //requiredAPI (required) - 3, //general (optional, set to 0 if not using) - 1, //iniFile (optional, set to 0 if not using) - 2, //database (optional, set to 0 if not using) + 4, //requiredAPI (required) + 4, //general (optional, set to 0 if not using) + 2, //iniFile (optional, set to 0 if not using) + 3, //database (optional, set to 0 if not using) 0, //external (optional, set to 0 if not using) 0, //reserved 0 }; //reserved diff --git a/Add-on API.lib b/Add-on API.lib index 6a7fe15..14d8ae9 100644 Binary files a/Add-on API.lib and b/Add-on API.lib differ diff --git a/admin.h b/admin.h index 836742a..c13cdbb 100644 --- a/admin.h +++ b/admin.h @@ -5,25 +5,14 @@ #define LOGINFAIL 0 #define LOGINPASS 1 -extern "C" class dllport Admin { +extern "C" class IAdmin { public: - Admin(); - ~Admin(); - Admin(Admin const &); - short unlimit; - bool reqUser; - bool reqAddr; - bool reqPort; - bool reqLoginAddr; - bool reqLoginPort; - bool reqRemoteAddr; - bool reqRemotePort; - toggle WINAPIC isPlayerAuthorized(Player::PlayerInfo* plI, wchar_t* cmd, util::ArgContainer* arg, CmdFunc* func); - toggle WINAPIC UsernameExist(wchar_t username[]); - toggle WINAPIC Add(wchar_t hashW[], wchar_t IP_Addr[], wchar_t IP_Port[], wchar_t username[],wchar_t password[],short level,bool remote, bool pass_force); - toggle WINAPIC Del(wchar_t username[]); - toggle WINAPIC Login(Player::PlayerInfo& plI, char chatRconRemote, wchar_t user[], wchar_t pass[]); + virtual toggle WINAPIC isPlayerAuthorized(IPlayer::PlayerInfo* plI, const wchar_t* cmd, util::ArgContainer* arg, CmdFunc* func)=0; + virtual toggle WINAPIC UsernameExist(wchar_t username[])=0; + virtual toggle WINAPIC Add(wchar_t hashW[32], wchar_t IP_Addr[15], wchar_t IP_Port[6], wchar_t username[24],wchar_t password[],short level,bool remote, bool pass_force)=0; + virtual toggle WINAPIC Del(wchar_t username[24])=0; + virtual toggle WINAPIC Login(IPlayer::PlayerInfo& plI, char chatRconRemote, wchar_t user[], wchar_t pass[])=0; }; -extern "C" dllport Admin* admin; +extern "C" dllport IAdmin* pIAdmin; #endif \ No newline at end of file diff --git a/command.h b/command.h index 14b0779..1dba650 100644 --- a/command.h +++ b/command.h @@ -7,15 +7,13 @@ struct helpInfo { wchar_t info[4][255]; }; #pragma pack(pop) -extern "C" class Command { +extern "C" class ICommand { public: - Command(); - ~Command(); - dllport bool WINAPIC Add(const wchar_t command[], CmdFunc func, const wchar_t section[], unsigned short min, unsigned short max, bool allowOverride, GAME_MODE_S mode); - dllport bool WINAPIC Del(CmdFunc func, const wchar_t funcName[]); - dllport bool WINAPIC ReloadLevel(); - dllport bool WINAPIC AliasAdd(const wchar_t* command, const wchar_t* alias); - dllport bool WINAPIC AliasDel(const wchar_t* command, const wchar_t* alias); + virtual bool WINAPIC Add(const wchar_t command[], CmdFunc func, const wchar_t section[], unsigned short min, unsigned short max, bool allowOverride, GAME_MODE_S mode)=0; + virtual bool WINAPIC Del(CmdFunc func, const wchar_t funcName[])=0; + virtual bool WINAPIC ReloadLevel()=0; + virtual bool WINAPIC AliasAdd(const wchar_t* command, const wchar_t* alias)=0; + virtual bool WINAPIC AliasDel(const wchar_t* command, const wchar_t* alias)=0; }; -extern "C" dllport Command* command; +extern "C" dllport ICommand* pICommand; #endif \ No newline at end of file diff --git a/database.h b/database.h index 23ff812..6040d62 100644 --- a/database.h +++ b/database.h @@ -1,8 +1,6 @@ #ifndef databaseH #define databaseH -extern const char dbErrorConnectionLost[]; - extern "C" namespace DBSQL { //-- //#pragma comment(lib,"Msvcrt.lib") //Basically bypass the error of vsnprintf... Replace the odbccp32.lib file with vista SDK!!! @@ -18,65 +16,47 @@ extern "C" namespace DBSQL { #define IS_SQL_OK(res) (res==SQL_SUCCESS_WITH_INFO || res==SQL_SUCCESS) #define SAFE_STR(str) ((str==NULL) ? _T("") : str) //-- - void EXTHookDatabaseEnabled(); - void EXTHookDatabaseDisabled(); - bool EXTIsHookDatabase(); - void EXTUnloadDatabase(); - - class dllport DBConnection { + + class IDBConnection { public: - bool WINAPIC Connect(LPCWSTR MDBPath,LPCWSTR User=L"", LPCWSTR Pass=L"",bool Exclusive=0); + virtual bool WINAPIC Connect(LPCWSTR MDBPath,LPCWSTR User=L"", LPCWSTR Pass=L"",bool Exclusive=0)=0; //bool Connect(LPCTSTR svSource); - DBConnection(); - ~DBConnection(); - DBConnection& operator=(DBConnection const&); - void WINAPIC Disconnect(); - void WINAPIC STMTStatus(); - void WINAPIC Check(); - SQLHDBC WINAPIC HDBC() { - return m_hDBC; - } + //static DBConnection& operator=(DBConnection const&); + virtual void WINAPIC Disconnect()=0; + virtual void WINAPIC STMTStatus()=0; + virtual void WINAPIC Check()=0; + virtual SQLHDBC WINAPIC HDBC()=0; + //static IDBConnection dllport WINAPIC getIDBConnection(); private: - SQLRETURN m_nReturn; // Internal SQL Error code - SQLHENV m_hEnv; // Handle to environment - SQLHDBC m_hDBC; // Handle to database connection + //IDBConnection(); + //~IDBConnection(); }; - /*extern "C" class MDBConnection { - };*/ - class dllport DBStmt { - private: - SQLHSTMT m_hStmt; - int m_nStmt; + class IDBStmt { public: - DBStmt(); - ~DBStmt(); - DBStmt& operator=(DBStmt const&); - DBStmt(SQLHDBC hDBCLink); - bool WINAPIC IsValid(); - USHORT WINAPIC GetColumnCount(); - DWORD WINAPIC GetChangedRowCount(); - bool WINAPIC Query(LPCWSTR strSQL); - bool WINAPIC Fetch(); - bool WINAPIC FetchRow(UINT nRow); - bool WINAPIC FetchPrevious(); - bool WINAPIC FetchNext(); - bool WINAPIC FetchRow(ULONG nRow,bool Absolute=1); - bool WINAPIC FetchFirst(); - bool WINAPIC FetchLast(); - bool WINAPIC Cancel(); - /*bool SetPos(SQLSETPOSIROW irow); - bool OpenCursor(); - bool CloseCursor();*/ + virtual void Release(); + virtual bool WINAPIC IsValid()=0; + virtual USHORT WINAPIC GetColumnCount()=0; + virtual DWORD WINAPIC GetChangedRowCount()=0; + virtual bool WINAPIC Query(LPCWSTR strSQL)=0; + virtual bool WINAPIC Fetch()=0; + virtual bool WINAPIC FetchRow(UINT nRow)=0; + virtual bool WINAPIC FetchPrevious()=0; + virtual bool WINAPIC FetchNext()=0; + virtual bool WINAPIC FetchRow(ULONG nRow,bool Absolute=1)=0; + virtual bool WINAPIC FetchFirst()=0; + virtual bool WINAPIC FetchLast()=0; + virtual bool WINAPIC Cancel()=0; - bool WINAPIC BindColumn(USHORT Column, LPVOID pBuffer, ULONG pBufferSize, LONG * pReturnedBufferSize=NULL, USHORT nType=SQL_C_TCHAR); - USHORT WINAPIC GetColumnByName(LPCTSTR Column); - bool WINAPIC GetData(USHORT Column, LPVOID pBuffer, ULONG pBufLen, LONG * dataLen=NULL, int Type=SQL_C_DEFAULT); - int WINAPIC GetColumnType( USHORT Column ); - DWORD WINAPIC GetColumnSize( USHORT Column ); - DWORD WINAPIC GetColumnScale( USHORT Column ); - bool WINAPIC GetColumnName( USHORT Column, LPTSTR Name, SHORT NameLen ); - bool WINAPIC IsColumnNullable( USHORT Column ); + virtual bool WINAPIC BindColumn(USHORT Column, LPVOID pBuffer, ULONG pBufferSize, LONG * pReturnedBufferSize=NULL, USHORT nType=SQL_C_TCHAR)=0; + virtual USHORT WINAPIC GetColumnByName(LPCTSTR Column)=0; + virtual bool WINAPIC GetData(USHORT Column, LPVOID pBuffer, ULONG pBufLen, LONG * dataLen=NULL, int Type=SQL_C_DEFAULT)=0; + virtual int WINAPIC GetColumnType( USHORT Column )=0; + virtual DWORD WINAPIC GetColumnSize( USHORT Column )=0; + virtual DWORD WINAPIC GetColumnScale( USHORT Column )=0; + virtual bool WINAPIC GetColumnName( USHORT Column, LPTSTR Name, SHORT NameLen )=0; + virtual bool WINAPIC IsColumnNullable( USHORT Column )=0; }; + dllport IDBConnection* WINAPIC getIDBConnection(); + dllport IDBStmt* WINAPIC getIDBStmt(); }; -extern "C" dllport DBSQL::DBConnection iDB; #endif \ No newline at end of file diff --git a/haloEngine.h b/haloEngine.h index 7295b93..28a2a7f 100644 --- a/haloEngine.h +++ b/haloEngine.h @@ -1,23 +1,23 @@ #ifndef haloEngineH #define haloEngineH -#define CANTJOINSERVER 0 -#define INVALIDCONREQUEST 1 -#define PASSWORDREJECTED 2 -#define SERVERFULL 3 -#define CDINVALID 4 -#define CDINUSED 5 -#define OPBANNED 6 -#define OPKICKED 7 -#define VIDEOTEST 8 -#define CPSAVED 9 -#define ADDRESSINVALID 10 -#define PROFILEREQUIRED 11 -#define INCOMPATIBLENETWORK 12 -#define OLDERCVER 13 -#define NEWERCVER 14 -#define ADMINREQUIREDPATCH 15 -#define REQUESTDELETESAVED 16 +#define REJECT_CANTJOINSERVER 0 +#define REJECT_INVALIDCONREQUEST 1 +#define REJECT_PASSWORDREJECTED 2 +#define REJECT_SERVERFULL 3 +#define REJECT_CDINVALID 4 +#define REJECT_CDINUSED 5 +#define REJECT_OPBANNED 6 +#define REJECT_OPKICKED 7 +#define REJECT_VIDEOTEST 8 +#define REJECT_CPSAVED 9 +#define REJECT_ADDRESSINVALID 10 +#define REJECT_PROFILEREQUIRED 11 +#define REJECT_INCOMPATIBLENETWORK 12 +#define REJECT_OLDERCVER 13 +#define REJECT_NEWERCVER 14 +#define REJECT_ADMINREQUIREDPATCH 15 +#define REJECT_REQUESTDELETESAVED 16 #define HALO_UNKNOWN 0 #define HALO_TRIAL 1 @@ -40,7 +40,8 @@ #define DIRECTS8 IDirectSound #endif -extern "C" class dllport HaloEngine { // For Add-on API interface support + +extern "C" class IHaloEngine { // For Add-on API interface support public: GlobalServer* globalServer; PlayerAlter* playerAlter; @@ -58,42 +59,41 @@ extern "C" class dllport HaloEngine { // For Add-on API interface support BYTE haloGameVersion; bool isDedi; ConsoleColorStruct* consoleColor; - DIRECTX9** DirectX9; - DIRECTI8** DirectInput8; - DIRECTS8** DirectSound8; - HaloEngine(); + DIRECTX9* DirectX9; + DIRECTI8* DirectInput8; + DIRECTS8* DirectSound8; //Halo Simulate Functions Begin - DWORD WINAPIC BuildPacket(LPBYTE output, DWORD arg1, DWORD packettype, DWORD arg3, LPBYTE dataPtr, DWORD arg4, DWORD arg5, DWORD arg6); - void WINAPIC AddPacketToPlayerQueue(DWORD player, LPBYTE packet, DWORD packetCode, DWORD arg1, DWORD arg2, DWORD arg3, DWORD arg4, DWORD arg5); - void WINAPIC AddPacketToGlobalQueue(LPBYTE packet, DWORD packetCode, DWORD arg1, DWORD arg2, DWORD arg3, DWORD arg4, DWORD arg5); - void WINAPIC DispatchRcon(rconData& d, Player::PlayerInfo& plI); - void WINAPIC DispatchPlayer(chatData& d, int len, Player::PlayerInfo& plI); - void WINAPIC DispatchGlobal(chatData& d, int len); - bool WINAPIC sendRejectCode(MachineHeader* mH, DWORD code); - void WINAPIC GetCDHash(MachineHeader &mH, char hashKey[33]); - void WINAPIC SetObjectSpawnPlayerX(playerindex pl_ind); - void WINAPIC Kill(Player::PlayerInfo plI); - bool WINAPIC SetIdle(); - bool WINAPIC MapNext(); - bool WINAPIC Exec(const char* cmd); - void WINAPIC GetServerPassword(wchar_t pass[8]); - void WINAPIC SetServerPassword(wchar_t pass[8]); - void WINAPIC GetRconPassword(char pass[8]); - void WINAPIC SetRconPassword(char pass[8]); - bool WINAPIC BanPlayer(Player::PlayerExtended &plEx, tm &gmtm); - bool WINAPIC BanCDkey(wchar_t CDHash[33], tm &gmtm); - bool WINAPIC BanIP(wchar_t IP_Addr[16], tm &gmtm); - int WINAPIC BanIPGetId(wchar_t IP_Addr[16]); - int WINAPIC BanCDkeyGetId(wchar_t CDHash[33]); - bool WINAPIC UnbanID(int ID); + virtual DWORD WINAPIC BuildPacket(LPBYTE output, DWORD arg1, DWORD packettype, DWORD arg3, LPBYTE dataPtr, DWORD arg4, DWORD arg5, DWORD arg6)=0; + virtual void WINAPIC AddPacketToPlayerQueue(DWORD player, LPBYTE packet, DWORD packetCode, DWORD arg1, DWORD arg2, DWORD arg3, DWORD arg4, DWORD arg5)=0; + virtual void WINAPIC AddPacketToGlobalQueue(LPBYTE packet, DWORD packetCode, DWORD arg1, DWORD arg2, DWORD arg3, DWORD arg4, DWORD arg5)=0; + virtual void WINAPIC DispatchRcon(rconData& d, IPlayer::PlayerInfo& plI)=0; + virtual void WINAPIC DispatchPlayer(chatData& d, int len, IPlayer::PlayerInfo& plI)=0; + virtual void WINAPIC DispatchGlobal(chatData& d, int len)=0; + virtual bool WINAPIC sendRejectCode(MachineHeader* mH, DWORD code)=0; + virtual void WINAPIC GetCDHash(MachineHeader &mH, char hashKey[33])=0; + virtual void WINAPIC SetObjectSpawnPlayerX(playerindex pl_ind)=0; + virtual void WINAPIC Kill(IPlayer::PlayerInfo plI)=0; + virtual bool WINAPIC SetIdle()=0; + virtual bool WINAPIC MapNext()=0; + virtual bool WINAPIC Exec(const char* cmd)=0; + virtual void WINAPIC GetServerPassword(wchar_t pass[8])=0; + virtual void WINAPIC SetServerPassword(wchar_t pass[8])=0; + virtual void WINAPIC GetRconPassword(char pass[8])=0; + virtual void WINAPIC SetRconPassword(char pass[8])=0; + virtual bool WINAPIC BanPlayer(IPlayer::PlayerExtended &plEx, tm &gmtm)=0; + virtual bool WINAPIC BanCDkey(wchar_t CDHash[33], tm &gmtm)=0; + virtual bool WINAPIC BanIP(wchar_t IP_Addr[16], tm &gmtm)=0; + virtual int WINAPIC BanIPGetId(wchar_t IP_Addr[16])=0; + virtual int WINAPIC BanCDkeyGetId(wchar_t CDHash[33])=0; + virtual bool WINAPIC UnbanID(int ID)=0; //char* WINAPIC GetCDHash(Player::PlayerInfo& plI); - void WINAPIC GetIP(MachineHeader& mH, BYTE m_ip[4]); - void WINAPIC GetPort(MachineHeader& mH, WORD& m_port); + virtual void WINAPIC GetIP(MachineHeader& mH, BYTE m_ip[4])=0; + virtual void WINAPIC GetPort(MachineHeader& mH, WORD& m_port)=0; //Halo Simulate Functions End - bool WINAPIC EXTAddOnGetInfoIndex(size_t index, addon::addonInfo &getInfo); - bool WINAPIC EXTAddOnGetInfoByName(wchar_t name[], addon::addonInfo &getInfo); - bool WINAPIC EXTAddOnReloadDll(wchar_t name[128]); + virtual bool WINAPIC EXTAddOnGetInfoIndex(size_t index, addon::addonInfo &getInfo)=0; + virtual bool WINAPIC EXTAddOnGetInfoByName(wchar_t name[], addon::addonInfo &getInfo)=0; + virtual bool WINAPIC EXTAddOnReloadDll(wchar_t name[128])=0; }; -extern "C" dllport HaloEngine* haloEngine; +extern "C" dllport IHaloEngine* pIHaloEngine; #endif \ No newline at end of file diff --git a/iniFile.h b/iniFile.h index db86ca5..e8ac852 100644 --- a/iniFile.h +++ b/iniFile.h @@ -3,7 +3,7 @@ #define INIFILELENMAX 512 -extern "C" class dllport CIniFile { +extern "C" class ICIniFile { public: #pragma pack(push,1) struct Record { @@ -18,34 +18,22 @@ extern "C" class dllport CIniFile { pound = L'#', semiColon = L';' }; - CIniFile(); - ~CIniFile(); - CIniFile(CIniFile const&); - CIniFile& operator=(CIniFile const&); - void WINAPIC Close(); - bool WINAPIC Open(wchar_t const fileName[]); - bool WINAPIC Create(wchar_t const fileName[]); - bool WINAPIC Delete(wchar_t const fileName[]); - bool WINAPIC Content(const wchar_t*& content, size_t &len); - bool WINAPIC SectionAdd(wchar_t const sectionName[]); - bool WINAPIC SectionDelete(wchar_t const sectionName[]); - bool WINAPIC SectionExist(wchar_t const sectionName[]); - bool WINAPIC ValueExist(wchar_t const keyName[], const wchar_t sectionName[]); - bool WINAPIC ValueSet(wchar_t const keyName[], wchar_t valueName[], const wchar_t sectionName[]); - bool WINAPIC ValueGet(wchar_t const keyName[], wchar_t valueName[], const wchar_t sectionName[]); - bool WINAPIC Save(); - bool WINAPIC Load(); - void WINAPIC Clear(); -private: - wchar_t tempFileName[INIFILELENMAX]; - const wchar_t* strFileContentW; - DWORD size; - HANDLE hFile; - HANDLE hFileMap; -#pragma warning( push ) -#pragma warning( disable : 4251) - util::dynamicStack* content; -#pragma warning( pop ) + virtual void WINAPIC Release(); + virtual void WINAPIC Close()=0; + virtual bool WINAPIC Open(wchar_t const fileName[])=0; + virtual bool WINAPIC Create(wchar_t const fileName[])=0; + virtual bool WINAPIC Delete(wchar_t const fileName[])=0; + virtual bool WINAPIC Content(const wchar_t*& content, size_t &len)=0; + virtual bool WINAPIC SectionAdd(wchar_t const sectionName[])=0; + virtual bool WINAPIC SectionDelete(wchar_t const sectionName[])=0; + virtual bool WINAPIC SectionExist(wchar_t const sectionName[])=0; + virtual bool WINAPIC ValueExist(wchar_t const keyName[], const wchar_t sectionName[])=0; + virtual bool WINAPIC ValueSet(wchar_t const keyName[], wchar_t valueName[], const wchar_t sectionName[])=0; + virtual bool WINAPIC ValueGet(wchar_t const keyName[], wchar_t valueName[], const wchar_t sectionName[])=0; + virtual bool WINAPIC Save()=0; + virtual bool WINAPIC Load()=0; + virtual void WINAPIC Clear()=0; }; +extern "C" dllport ICIniFile* WINAPIC getICIniFile(); #endif \ No newline at end of file diff --git a/object.h b/object.h index 4e9c4f1..e3b1715 100644 --- a/object.h +++ b/object.h @@ -1,8 +1,7 @@ #ifndef objectH #define objectH #include "player.h" //Required in order to obtain playerInfo structure. - -extern "C" class Object { +extern "C" class IObject { public: // Structure definitions #pragma pack(push, 1) @@ -66,18 +65,14 @@ extern "C" class Object { vect3 scale; }; #pragma pack(pop) - Object(); - ~Object(); - Object& operator=(Object const &); - ObjectS* WINAPIC GetObjectAddress(int mode, ident obj_id); - hTagHeader* WINAPIC LookupTag(ident objectTag); - hTagHeader* WINAPIC LookupTagTypeName(const char* tagType, const char* tag); - void WINAPIC Delete(ident obj_id); - void WINAPIC Copy(ident obj_id, Player::PlayerInfo plI); - bool WINAPIC Eject(ident obj_id); - void WINAPIC Update(ident obj_id); - //void WINAPIC Drop(ident obj_id); + virtual ObjectS* WINAPIC GetObjectAddress(int mode, ident obj_id)=0; + virtual hTagHeader* WINAPIC LookupTag(ident objectTag)=0; + virtual hTagHeader* WINAPIC LookupTagTypeName(const char* tagType, const char* tag)=0; + virtual void WINAPIC Delete(ident obj_id)=0; + virtual void WINAPIC Copy(ident obj_id, IPlayer::PlayerInfo plI)=0; + virtual bool WINAPIC Eject(ident obj_id)=0; + virtual void WINAPIC Update(ident obj_id)=0; }; -extern "C" dllport Object* object; +extern "C" dllport IObject* pIObject; #endif \ No newline at end of file diff --git a/player.h b/player.h index b57506c..acf0dcf 100644 --- a/player.h +++ b/player.h @@ -10,7 +10,7 @@ #define MSG_ERROR 6 #define MSG_ALERT 7 -extern "C" class Player { +extern "C" class IPlayer { public: #pragma pack(push,1) struct PlayerExtended { @@ -74,27 +74,26 @@ extern "C" class Player { PlayerInfo plList[32]; }; #pragma pack(pop) - Player(); - ~Player(); - Player& operator=(Player const &); - PlayerInfo WINAPIC getPlayerMindex(machineindex m_ind); - PlayerInfo WINAPIC getPlayer(DWORD playerId); - PlayerInfo WINAPIC getPlayerIdent(ident pl_Tag); - PlayerInfo WINAPIC getPlayerByNickname(const wchar_t nickname[]); - PlayerInfo WINAPIC getPlayerByUsername(const wchar_t username[]); - PlayerInfo WINAPIC getPlayerByUniqueID(long uniqueID); - short WINAPIC StrToPlayerList(const wchar_t src[], util::dynamicStack &plMatch, Player::PlayerInfo* plOwner); - int WINAPIC GetIDFullName(wchar_t fullName[]); - int WINAPIC GetIDIpAddress(wchar_t ipAddress[]); - int WINAPIC GetIDPort(wchar_t port[]); - void WINAPIC GetFullNameID(int ID, wchar_t fullName[13]); - void WINAPIC GetIpAddressID(int ID, wchar_t ipAddress[16]); - void WINAPIC GetPortID(int ID, wchar_t port[10]); - bool WINAPIC Update(PlayerInfo& plI); - bool WINAPIC setNickname(PlayerInfo& plI, wchar_t nickname[]); - bool WINAPIC sendCustomMsg(char formatMsg, toggle chatRconRemote, PlayerInfo& plI, const wchar_t *Msg, ...); - bool WINAPIC isAdmin(machineindex m_ind); + virtual PlayerInfo WINAPIC getPlayerMindex(machineindex m_ind)=0; + virtual PlayerInfo WINAPIC getPlayer(DWORD playerId)=0; + virtual PlayerInfo WINAPIC getPlayerIdent(ident pl_Tag)=0; + virtual PlayerInfo WINAPIC getPlayerByNickname(const wchar_t nickname[])=0; + virtual PlayerInfo WINAPIC getPlayerByUsername(const wchar_t username[])=0; + virtual PlayerInfo WINAPIC getPlayerByUniqueID(long uniqueID)=0; + virtual short WINAPIC StrToPlayerList(const wchar_t src[], util::dynamicStack &plMatch, IPlayer::PlayerInfo* plOwner)=0; + virtual int WINAPIC GetIDFullName(wchar_t fullName[])=0; + virtual int WINAPIC GetIDIpAddress(wchar_t ipAddress[])=0; + virtual int WINAPIC GetIDPort(wchar_t port[])=0; + virtual void WINAPIC GetFullNameID(int ID, wchar_t fullName[13])=0; + virtual void WINAPIC GetIpAddressID(int ID, wchar_t ipAddress[16])=0; + virtual void WINAPIC GetPortID(int ID, wchar_t port[10])=0; + virtual bool WINAPIC Update(PlayerInfo& plI)=0; + virtual bool WINAPIC setNickname(PlayerInfo& plI, wchar_t nickname[])=0; + virtual bool WINAPIC sendCustomMsg(char formatMsg, toggle chatRconRemote, PlayerInfo& plI, const wchar_t *Msg, ...)=0; + virtual bool WINAPIC isAdmin(machineindex m_ind)=0; + virtual PlayerInfo WINAPIC getPlayerByBipedTagCurrent(ident bipedTag)=0; + virtual PlayerInfo WINAPIC getPlayerByBipedTagPrevious(ident bipedTag)=0; }; -extern "C" dllport Player* player; +extern "C" dllport IPlayer* pIPlayer; #endif \ No newline at end of file diff --git a/struct.h b/struct.h index 1c9a1ab..e1a06b2 100644 --- a/struct.h +++ b/struct.h @@ -419,55 +419,62 @@ static_assert_check(sizeof(actionFlags) == 0x02, "Incorrect size of aFlag"); struct BipedS { - ObjectS sObject; // 0x0000 - long Unknown[4]; // 0x01F4 - short IsInvisible; // 0x0204 normal = 0x41 invis = 0x51 (bitfield?) - char Flashlight; // 0x0206 - char Frozen; // 0x0207 - actionFlags actionBits; // 0x0208 & 0x0209 - char Unknown1[2]; // 0x020A - long UnknownCounter1; // 0x020C - long UnknownLongs1[5]; // 0x0210 - vect3 RightVect; // 0x0224 - vect3 UpVect; // 0x0230 - vect3 LookVect; // 0x023C - vect3 ZeroVect; // 0x0248 - vect3 RealLookVect; // 0x0254 - vect3 UnknownVect3; // 0x0260 - char Unknown2[140]; // 0x026C - ident PrimaryWeapon; // 0x02F8 - ident SecondaryWeapon; // 0x02FC - ident ThirdWeapon; // 0x0300 - ident FourthWeapon; // 0x0304 - long UnknownLongs2[5]; // 0x0308 - char grenadeIndex; // 0x031C - char grenadeIndex1; // 0x031D - char grenade0; // 0x031E - char grenade1; // 0x031F - char Zoom; // 0x0320 - char Zoom1; // 0x0321 - char Unknown3[2]; // 0x0322 - ident SlaveController; // 0x0324 - char Unknown4[552]; // 0x0328 - bone LeftThigh; // 0x0550 - bone RightThigh; // 0x0584 - bone Pelvis; // 0x05B8 - bone LeftCalf; // 0x05EC - bone RightCalf; // 0x0620 - bone Spine; // 0x0654 - bone LeftClavicle; // 0x0688 - bone LeftFoot; // 0x06BC - bone Neck; // 0x06F0 - bone RightClavicle; // 0x0724 - bone RightFoot; // 0x0758 - bone Head; // 0x078C - bone LeftUpperArm; // 0x07C0 - bone RightUpperArm; // 0x07F4 - bone LeftLowerArm; // 0x0828 - bone RightLowerArm; // 0x085C - bone LeftHand; // 0x0890 - bone RightHand; // 0x08C4 - char Unknown5[1216]; // 0x08F8 //Missing 0x092C? + ObjectS sObject; // 0x0000 + long Unknown[4]; // 0x01F4 + short IsInvisible; // 0x0204 normal = 0x41 invis = 0x51 (bitfield?) + char Flashlight; // 0x0206 + char Frozen; // 0x0207 + actionFlags actionBits; // 0x0208 & 0x0209 + char Unknown1[2]; // 0x020A + long UnknownCounter1; // 0x020C + long UnknownLongs1[5]; // 0x0210 + vect3 RightVect; // 0x0224 + vect3 UpVect; // 0x0230 + vect3 LookVect; // 0x023C + vect3 ZeroVect; // 0x0248 + vect3 RealLookVect; // 0x0254 + vect3 UnknownVect3; // 0x0260 + char Unknown2[134]; // 0x026C + WORD CurWeaponIndex0; // 0x02F2 (Do not attempt to edit this, will crash Halo) + WORD CurWeaponIndex1; // 0x02F4 (Read only) + WORD Unknown6; // 0x02F6 + ident PrimaryWeapon; // 0x02F8 + ident SecondaryWeapon; // 0x02FC + ident ThirdWeapon; // 0x0300 + ident FourthWeapon; // 0x0304 + DWORD PrimaryWeaponLastUse; // 0x0308 + DWORD SecondaryWeaponLastUse; // 0x030C + DWORD ThirdWeaponLastUse; // 0x0310 + DWORD FourthWeaponLastUse; // 0x0314 + long UnknownLongs2; // 0x031C + char grenadeIndex; // 0x031C + char grenadeIndex1; // 0x031D + char grenade0; // 0x031E + char grenade1; // 0x031F + char Zoom; // 0x0320 + char Zoom1; // 0x0321 + char Unknown3[2]; // 0x0322 + ident SlaveController; // 0x0324 + char Unknown4[552]; // 0x0328 + bone LeftThigh; // 0x0550 + bone RightThigh; // 0x0584 + bone Pelvis; // 0x05B8 + bone LeftCalf; // 0x05EC + bone RightCalf; // 0x0620 + bone Spine; // 0x0654 + bone LeftClavicle; // 0x0688 + bone LeftFoot; // 0x06BC + bone Neck; // 0x06F0 + bone RightClavicle; // 0x0724 + bone RightFoot; // 0x0758 + bone Head; // 0x078C + bone LeftUpperArm; // 0x07C0 + bone RightUpperArm; // 0x07F4 + bone LeftLowerArm; // 0x0828 + bone RightLowerArm; // 0x085C + bone LeftHand; // 0x0890 + bone RightHand; // 0x08C4 + char Unknown5[1216]; // 0x08F8 //Missing 0x092C? }; // Size - 3564(0x0DEC) bytes //Major WIP Halo Structure Begin diff --git a/util.h b/util.h index a7644d0..bf281e5 100644 --- a/util.h +++ b/util.h @@ -1,13 +1,25 @@ #ifndef utilH #define utilH +#define WINAPIC __cdecl + +//Attempt to fix the new/delete operator. +/*inline void * __cdecl operator new(size_t _count) { + return my_operator_new_replacement(_count); +} +inline void __cdecl operator delete(void * _ptr) { + my_operator_delete_replacement(_ptr); +}*/ + namespace util { - static char colon = ':'; - static char newline = '\n'; - static char pipe = '|'; - static wchar_t commaW = L','; - static wchar_t me[] = L"me"; + + static const char colon = ':'; + static const char newline = '\n'; + static const char pipe = '|'; + static const wchar_t commaW = L','; + static const wchar_t me[] = L"me"; static const wchar_t backslash = L'\\'; + static const wchar_t dotW = L'.'; static GAME_MODE_S modeAll = {1,1,1}; static GAME_MODE_S modeSingle = {1, 0, 0}; static GAME_MODE_S modeSingleMulti = {1, 1, 0}; @@ -16,11 +28,8 @@ namespace util { static GAME_MODE_S modeMultiHost = {0,1,1}; static GAME_MODE_S modeHost = {0,0,1}; #define PI 3.141592653589793f - #define TOGGLE(val, on) val = (on==-1 ? !val : on) - - extern "C" void dllport *Alloc(size_t Size); - extern "C" void dllport Free(void* Address); - + extern "C" dllport void* WINAPIC AllocMem(size_t Size); + extern "C" dllport void WINAPIC FreeMem(void* Address); extern "C" class dllport ArgContainer { private: wchar_t* args[10]; @@ -28,47 +37,23 @@ namespace util { public: size_t argc; ArgContainer(); + //dllport ArgContainer(const ArgContainer&); + //ArgContainer(const ArgContainer&); ArgContainer(const wchar_t arg[]); ArgContainer(const wchar_t arg[], int numArrayLink); ArgContainer(ArgContainer const ©); wchar_t* WINAPIC operator[](size_t i); ArgContainer& WINAPIC operator=(ArgContainer const ©); + //ArgContainer& operator=(ArgContainer ©); + //ArgContainer(wchar_t arg[]); + //wchar_t* operator[](size_t i); ArgContainer WINAPIC operator*(); - virtual ~ArgContainer(); - }; - - extern "C" void dllport toCharW(char* charA, int len, wchar_t* charW); - extern "C" void dllport toCharA(wchar_t* charW, int len, char* charA); - extern "C" toggle dllport StrToBooleanA(const char str[]); - extern "C" toggle dllport StrToBooleanW(const wchar_t str[]); - extern "C" toggle dllport StrToTeamA(const char str[]); - extern "C" toggle dllport StrToTeamW(const wchar_t str[]); - extern "C" void dllport ReplaceA(char* regStr); - extern "C" void dllport ReplaceW(wchar_t* regStr); - extern "C" void dllport ReplaceUndoA(char* regStr); - extern "C" void dllport ReplaceUndoW(wchar_t* regStr); - extern "C" bool dllport isnumberA(const char* str); - extern "C" bool dllport isnumberW(const wchar_t* str); - extern "C" bool dllport hashCheckA(const char* str); - extern "C" bool dllport hashCheckW(const wchar_t* str); - extern "C" void dllport shiftStrA(char regStr[], int len, int pos, int lenShift, bool leftRight); - extern "C" void dllport shiftStrW(wchar_t regStr[], int len, int pos, int lenShift, bool leftRight); - extern "C" void dllport regexReplaceW(wchar_t regStr[], bool isDB); - extern "C" bool dllport regexMatchW(wchar_t srcStr[], wchar_t regex[]); - extern "C" bool dllport regexiMatchW(wchar_t srcStr[], wchar_t regex[]); - extern "C" bool dllport FormatVarArgsA(const char* _Format, va_list ArgList, char* writeTo); - extern "C" bool dllport FormatVarArgsW(const wchar_t* _Format, va_list ArgList, wchar_t* writeTo); - extern "C" bool dllport dirExistsW(const wchar_t dirName[]); - #pragma pack(push,1) - struct haloConsole { - int r; - char output[1024]; + ~ArgContainer(); }; - #pragma pack(pop) - template class ThreadSafeObject { public: + //inline ThreadSafeObject(){} inline ThreadSafeObject(T* type):m_type(type){InitializeCriticalSection(&m_cs);} ~ThreadSafeObject() { EnterCriticalSection (&m_cs); @@ -91,6 +76,8 @@ namespace util { private: T* m_type; CRITICAL_SECTION m_cs; + //ThreadSafeObject(const ThreadSafeObject&):m_type(new T){InitializeCriticalSection(&m_cs);} + //ThreadSafeObject& operator=(const ThreadSafeObject&); }; template class dynamicStack { @@ -113,8 +100,8 @@ namespace util { stack = NULL; return; } else { - stack = (d_stack*)util::Alloc(sizeof(d_stack)); - stack->d_type = (T*)util::Alloc(sizeof(T)); + stack = (d_stack*)util::AllocMem(sizeof(d_stack)); + stack->d_type = (T*)util::AllocMem(sizeof(T)); *stack->d_type = *scan->d_type; scan = scan->next_d_type; stack->next_d_type = NULL; @@ -122,8 +109,8 @@ namespace util { } while(scan) { - d_stack* newStack = (d_stack*)util::Alloc(sizeof(d_stack)); - newStack->d_type = (T*)util::Alloc(sizeof(T)); + d_stack* newStack = (d_stack*)util::AllocMem(sizeof(d_stack)); + newStack->d_type = (T*)util::AllocMem(sizeof(T)); *newStack->d_type = *clone->d_type; newStack->next_d_type = NULL; clone->next_d_type = newStack; @@ -139,8 +126,8 @@ namespace util { class const_iterator; void push_back(T type) { if (!stack) { - stack = (d_stack*)util::Alloc(sizeof(d_stack)); - stack->d_type = (T*)util::Alloc(sizeof(T)); + stack = (d_stack*)util::AllocMem(sizeof(d_stack)); + stack->d_type = (T*)util::AllocMem(sizeof(T)); *stack->d_type = type; stack->next_d_type = NULL; } else { @@ -148,8 +135,8 @@ namespace util { while (src->next_d_type) { src = src->next_d_type; } - d_stack* newSrc = (d_stack*)util::Alloc(sizeof(d_stack)); - newSrc->d_type = (T*)util::Alloc(sizeof(T)); + d_stack* newSrc = (d_stack*)util::AllocMem(sizeof(d_stack)); + newSrc->d_type = (T*)util::AllocMem(sizeof(T)); *newSrc->d_type = type; newSrc->next_d_type = NULL; src->next_d_type = newSrc; @@ -159,8 +146,8 @@ namespace util { if (stack) { d_stack* src = stack; d_stack* nextSrc = stack->next_d_type; - util::Free(stack->d_type); - util::Free(stack); + util::FreeMem(stack->d_type); + util::FreeMem(stack); stack = nextSrc; } } @@ -182,8 +169,8 @@ namespace util { prevSrc->next_d_type = src->next_d_type; } else stack = src->next_d_type; - util::Free(src->d_type); - util::Free(src); + util::FreeMem(src->d_type); + util::FreeMem(src); } return isDel; } @@ -239,8 +226,8 @@ namespace util { prevSrc->next_d_type = src->next_d_type; } else stack = prevSrc = src->next_d_type; - util::Free(src->d_type); - util::Free(src); + util::FreeMem(src->d_type); + util::FreeMem(src); return prevSrc; } prevSrc = src; @@ -276,8 +263,8 @@ namespace util { void insert(iterator iter, T newData) { d_stack* insert; if (iter!=NULL) { - insert = (d_stack*)util::Alloc(sizeof(d_stack)); - insert->d_type = (T*)util::Alloc(sizeof(T)); + insert = (d_stack*)util::AllocMem(sizeof(d_stack)); + insert->d_type = (T*)util::AllocMem(sizeof(T)); *insert->d_type = newData; insert->next_d_type = iter.ptr_->next_d_type; iter.ptr_->next_d_type = insert; @@ -285,8 +272,8 @@ namespace util { } else { d_stack* src = stack; if (!src) { - stack = (d_stack*)util::Alloc(sizeof(d_stack)); - stack->d_type = (T*)util::Alloc(sizeof(T)); + stack = (d_stack*)util::AllocMem(sizeof(d_stack)); + stack->d_type = (T*)util::AllocMem(sizeof(T)); *stack->d_type = newData; stack->next_d_type = NULL; return; @@ -299,8 +286,8 @@ namespace util { } if (!src) src = stack; - insert = (d_stack*)util::Alloc(sizeof(d_stack)); - insert->d_type = (T*)util::Alloc(sizeof(T)); + insert = (d_stack*)util::AllocMem(sizeof(d_stack)); + insert->d_type = (T*)util::AllocMem(sizeof(T)); *insert->d_type = newData; insert->next_d_type = src->next_d_type; src->next_d_type = insert; @@ -312,14 +299,15 @@ namespace util { d_stack* holder = NULL; while (src) { if (src->d_type) - util::Free(src->d_type); + util::FreeMem(src->d_type); holder = src; src = src->next_d_type; - util::Free(holder); + util::FreeMem(holder); } stack=NULL; } } + //example of https:// gist.github.com/jeetsukumaran/307264 with nessary modifications. class iterator { private: d_stack* ptr_; @@ -397,6 +385,37 @@ namespace util { }; }; + + extern "C" dllport void WINAPIC toCharW(const char* charA, int len, wchar_t* charW); + extern "C" dllport void WINAPIC toCharA(const wchar_t* charW, int len, char* charA); + extern "C" dllport toggle WINAPIC StrToBooleanA(const char str[]); + extern "C" dllport toggle WINAPIC StrToBooleanW(const wchar_t str[]); + extern "C" dllport toggle WINAPIC StrToTeamA(const char str[]); + extern "C" dllport toggle WINAPIC StrToTeamW(const wchar_t str[]); + extern "C" dllport void WINAPIC ReplaceA(char* regStr); + extern "C" dllport void WINAPIC ReplaceW(wchar_t* regStr); + extern "C" dllport void WINAPIC ReplaceUndoA(char* regStr); + extern "C" dllport void WINAPIC ReplaceUndoW(wchar_t* regStr); + extern "C" dllport bool WINAPIC isnumberA(const char* str); + extern "C" dllport bool WINAPIC isnumberW(const wchar_t* str); + extern "C" dllport bool WINAPIC hashCheckA(const char* str); + extern "C" dllport bool WINAPIC hashCheckW(const wchar_t* str); + extern "C" dllport void WINAPIC shiftStrA(char regStr[], int len, int pos, int lenShift, bool leftRight); + extern "C" dllport void WINAPIC shiftStrW(wchar_t regStr[], int len, int pos, int lenShift, bool leftRight); + extern "C" dllport void WINAPIC regexReplaceW(wchar_t regStr[], bool isDB); + extern "C" dllport bool WINAPIC regexMatchW(wchar_t srcStr[], wchar_t regex[]); + extern "C" dllport bool WINAPIC regexiMatchW(wchar_t srcStr[], wchar_t regex[]); + + #pragma pack(push,1) + struct haloConsole { + int r; + char output[1024]; + }; + #pragma pack(pop) + + extern "C" dllport bool WINAPIC FormatVarArgsA(const char* _Format, va_list ArgList, char* writeTo); + extern "C" dllport bool WINAPIC FormatVarArgsW(const wchar_t* _Format, va_list ArgList, wchar_t* writeTo); + extern "C" dllport bool WINAPIC dirExistsW(const wchar_t dirName[]); extern "C" dllport bool WINAPIC findSubStrFirstA(const char* dest, const char* src); extern "C" dllport bool WINAPIC findSubStrFirstW(const wchar_t* dest, const wchar_t* src); }