2004-03-05 21:03:14 +00:00
|
|
|
/* AMX Mod X
|
|
|
|
*
|
|
|
|
* by the AMX Mod X Development Team
|
|
|
|
* originally developed by OLO
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
|
|
* under the terms of the GNU General Public License as published by the
|
|
|
|
* Free Software Foundation; either version 2 of the License, or (at
|
|
|
|
* your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful, but
|
|
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
|
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*
|
|
|
|
* In addition, as a special exception, the author gives permission to
|
|
|
|
* link the code of this program with the Half-Life Game Engine ("HL
|
|
|
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
|
|
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
|
|
|
* respects for all of the code used other than the HL Engine and MODs
|
|
|
|
* from Valve. If you modify this file, you may extend this exception
|
|
|
|
* to your version of the file, but you are not obligated to do so. If
|
|
|
|
* you do not wish to do so, delete this exception statement from your
|
|
|
|
* version.
|
|
|
|
*/
|
2004-01-31 20:56:22 +00:00
|
|
|
|
|
|
|
// *****************************************************
|
|
|
|
// class CModule
|
|
|
|
// *****************************************************
|
|
|
|
|
|
|
|
#ifndef CMODULE_H
|
|
|
|
#define CMODULE_H
|
|
|
|
|
2005-09-10 00:38:42 +00:00
|
|
|
enum MODULE_STATUS
|
|
|
|
{
|
|
|
|
MODULE_NONE, // No module loaded
|
|
|
|
MODULE_QUERY, // Query failed
|
|
|
|
MODULE_BADLOAD, // Bad file or the module writer messed something up ;]
|
|
|
|
MODULE_LOADED, // Loaded
|
|
|
|
MODULE_NOINFO, // No info
|
|
|
|
MODULE_NOQUERY, // No query function present
|
|
|
|
MODULE_NOATTACH, // No attach function present
|
|
|
|
MODULE_OLD, // Old interface
|
|
|
|
MODULE_NEWER, // newer interface
|
|
|
|
MODULE_INTERROR, // Internal error
|
|
|
|
MODULE_FUNCNOTPRESENT, // Function not present
|
2008-04-27 00:07:06 +00:00
|
|
|
MODULE_NOT64BIT, // Not 64 bit compatible
|
|
|
|
MODULE_BADGAME, // Module cannot load on the current game mod
|
2004-01-31 20:56:22 +00:00
|
|
|
};
|
|
|
|
|
2004-03-31 18:03:06 +00:00
|
|
|
struct amxx_module_info_s
|
|
|
|
{
|
|
|
|
const char *name;
|
|
|
|
const char *author;
|
|
|
|
const char *version;
|
|
|
|
int reload; // reload on mapchange when nonzero
|
2005-07-15 19:15:58 +00:00
|
|
|
const char *logtag; //added in version 2
|
2006-05-07 09:56:06 +00:00
|
|
|
const char *library; // added in version 4
|
|
|
|
const char *libclass; // added in version 4
|
2004-03-31 18:03:06 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#define AMXX_OK 0 /* no error */
|
|
|
|
#define AMXX_IFVERS 1 /* interface version */
|
|
|
|
#define AMXX_PARAM 2 /* Invalid parameter */
|
|
|
|
#define AMXX_FUNC_NOT_PRESENT 3 /* Function not present */
|
|
|
|
|
2008-04-27 00:07:06 +00:00
|
|
|
#define AMXX_GAME_OK 0 /* Module can load on this game. */
|
|
|
|
#define AMXX_GAME_BAD 1 /* Module cannot load on this game. */
|
|
|
|
|
2006-05-07 09:56:06 +00:00
|
|
|
#define AMXX_INTERFACE_VERSION 4
|
2004-03-31 18:03:06 +00:00
|
|
|
|
2004-01-31 20:56:22 +00:00
|
|
|
class CModule
|
|
|
|
{
|
2004-08-15 10:53:48 +00:00
|
|
|
String m_Filename; // Filename
|
2005-09-16 23:48:51 +00:00
|
|
|
|
2004-03-31 18:03:06 +00:00
|
|
|
bool m_Metamod; // Using metamod?
|
|
|
|
bool m_Amxx; // Using new module interface?
|
2005-09-16 23:48:51 +00:00
|
|
|
|
2004-03-31 18:03:06 +00:00
|
|
|
amxx_module_info_s m_InfoNew; // module info (new module interface)
|
|
|
|
DLHANDLE m_Handle; // handle
|
|
|
|
MODULE_STATUS m_Status; // status
|
|
|
|
const char *m_MissingFunc; // missing function; only set on MODULE_FUNCNOTPRESENT status
|
2004-01-31 20:56:22 +00:00
|
|
|
|
2004-03-31 18:03:06 +00:00
|
|
|
void clear(bool clearFilename = true);
|
2004-01-31 20:56:22 +00:00
|
|
|
public:
|
|
|
|
CModule(const char* fname);
|
|
|
|
~CModule();
|
|
|
|
|
|
|
|
// Interface
|
2005-09-10 00:38:42 +00:00
|
|
|
|
2004-01-31 20:56:22 +00:00
|
|
|
bool attachModule();
|
|
|
|
bool queryModule();
|
|
|
|
bool detachModule();
|
2006-05-10 11:23:08 +00:00
|
|
|
void rewriteNativeLists(AMX_NATIVE_INFO *list);
|
2005-09-10 00:38:42 +00:00
|
|
|
|
2005-07-22 19:32:16 +00:00
|
|
|
#ifndef FAKEMETA
|
|
|
|
bool attachMetamod(const char *mmfile, PLUG_LOADTIME now);
|
|
|
|
#endif
|
2005-09-10 00:38:42 +00:00
|
|
|
|
2004-01-31 20:56:22 +00:00
|
|
|
const char* getStatus() const;
|
2004-04-22 07:52:26 +00:00
|
|
|
inline const char* getType() const { return m_Amxx ? "amxx" : (m_Metamod ? "amx&mm" : "amx"); }
|
2005-07-25 06:03:43 +00:00
|
|
|
inline const char* getAuthor() const { return m_InfoNew.author; }
|
|
|
|
inline const char* getVersion() const { return m_InfoNew.version; }
|
|
|
|
inline const char* getName() const { return m_InfoNew.name; }
|
2004-03-31 18:03:06 +00:00
|
|
|
inline const amxx_module_info_s* getInfoNew() const { return &m_InfoNew; } // new
|
|
|
|
inline int getStatusValue() { return m_Status; }
|
2005-09-16 23:48:51 +00:00
|
|
|
inline bool operator==(const char* fname) { return !strcmp(m_Filename.c_str(), fname); }
|
2005-07-25 06:03:43 +00:00
|
|
|
inline bool isReloadable() { return ((m_Status == MODULE_LOADED) && (m_InfoNew.reload != 0)); }
|
2004-03-31 18:03:06 +00:00
|
|
|
inline bool isAmxx() const { return m_Amxx; }
|
|
|
|
inline const char *getMissingFunc() const { return m_MissingFunc; }
|
2004-08-13 08:46:04 +00:00
|
|
|
inline const char *getFilename() { return m_Filename.c_str(); }
|
2005-07-22 19:32:16 +00:00
|
|
|
inline bool IsMetamod() { return m_Metamod; }
|
2005-09-16 23:48:51 +00:00
|
|
|
|
2006-02-14 23:59:24 +00:00
|
|
|
void CallPluginsLoaded();
|
2006-05-07 09:56:06 +00:00
|
|
|
void CallPluginsUnloaded();
|
|
|
|
void CallPluginsUnloading();
|
2004-03-31 18:03:06 +00:00
|
|
|
|
2006-05-10 11:23:08 +00:00
|
|
|
CVector<AMX_NATIVE_INFO*> m_Natives;
|
2006-09-01 03:29:27 +00:00
|
|
|
CVector<AMX_NATIVE_INFO*> m_NewNatives; // Natives for new (AMXX, not AMX) plugins only
|
2006-05-10 11:23:08 +00:00
|
|
|
CVector<size_t> m_DestroyableIndexes;
|
2004-01-31 20:56:22 +00:00
|
|
|
};
|
|
|
|
|
2005-09-10 00:38:42 +00:00
|
|
|
#endif //CMODULE_H
|