2
0
mirror of https://github.com/rehlds/metamod-r.git synced 2025-01-13 15:18:19 +03:00

Refactoring

This commit is contained in:
asmodai 2017-01-13 03:00:23 +03:00
parent 855e14b95e
commit 333918455c
35 changed files with 206 additions and 250 deletions

View File

@ -137,7 +137,8 @@
<OmitFramePointers>true</OmitFramePointers>
<BufferSecurityCheck>false</BufferSecurityCheck>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
<SDLCheck>false</SDLCheck>
<SDLCheck>
</SDLCheck>
</ClCompile>
<Link>
<OutputFile>.\release/metamod.dll</OutputFile>
@ -246,7 +247,6 @@
<ClInclude Include="..\src\sdk_util.h" />
<ClInclude Include="..\src\studioapi.h" />
<ClInclude Include="..\src\support_meta.h" />
<ClInclude Include="..\src\types_meta.h" />
<ClInclude Include="..\src\utils.h" />
</ItemGroup>
<ItemGroup>

View File

@ -172,9 +172,6 @@
<ClInclude Include="..\src\support_meta.h">
<Filter>Source Files</Filter>
</ClInclude>
<ClInclude Include="..\src\types_meta.h">
<Filter>Source Files</Filter>
</ClInclude>
<ClInclude Include="..\src\utils.h">
<Filter>Source Files</Filter>
</ClInclude>

View File

@ -6,7 +6,7 @@
#define ENGAPI_ENTRY(name, loglevel) API_ENTRY(enginefuncs_t, name, loglevel)
// trace flag, loglevel, name
dllapi_info_t dllapi_info = {
dllapi_info_t g_dllapi_info = {
DLLAPI_ENTRY(GameInit, 1), // pfnGameInit
DLLAPI_ENTRY(Spawn, 2), // pfnSpawn
DLLAPI_ENTRY(Think, 2), // pfnThink
@ -61,7 +61,7 @@ dllapi_info_t dllapi_info = {
{ 0, "", 0 },
};
newapi_info_t newapi_info = {
newapi_info_t g_newapi_info = {
NEWAPI_ENTRY(OnFreeEntPrivateData, 3), // pfnOnFreeEntPrivateData
NEWAPI_ENTRY(GameShutdown, 3), // pfnGameShutdown
NEWAPI_ENTRY(ShouldCollide, 3), // pfnShouldCollide
@ -71,7 +71,7 @@ newapi_info_t newapi_info = {
{ 0, "", 0 },
};
engine_info_t engine_info = {
engine_info_t g_engineapi_info = {
ENGAPI_ENTRY(PrecacheModel, 2), // pfnPrecacheModel
ENGAPI_ENTRY(PrecacheSound, 2), // pfnPrecacheSound
ENGAPI_ENTRY(SetModel, 2), // pfnSetModel

View File

@ -253,6 +253,6 @@ struct engine_info_t
api_info_t END;
};
extern dllapi_info_t dllapi_info;
extern newapi_info_t newapi_info;
extern engine_info_t engine_info;
extern dllapi_info_t g_dllapi_info;
extern newapi_info_t g_newapi_info;
extern engine_info_t g_engineapi_info;

View File

@ -35,8 +35,8 @@ metacmd_t g_meta_cmds[] =
// Register commands and cvars.
void meta_register_cmdcvar()
{
CVAR_REGISTER(&meta_debug);
CVAR_REGISTER(&meta_version);
CVAR_REGISTER(&g_meta_debug);
CVAR_REGISTER(&g_meta_version);
REG_SVR_COMMAND("meta", server_meta);
}
@ -183,11 +183,11 @@ void cmd_meta_game()
}
META_CONS("GameDLL info:");
META_CONS(" name: %s", GameDLL.name);
META_CONS(" desc: %s", GameDLL.desc);
META_CONS(" gamedir: %s", GameDLL.gamedir);
META_CONS(" dll file: %s", GameDLL.file);
META_CONS("dll pathname: %s", GameDLL.pathname);
META_CONS(" name: %s", g_GameDLL.name);
META_CONS(" desc: %s", g_GameDLL.desc);
META_CONS(" gamedir: %s", g_GameDLL.gamedir);
META_CONS(" dll file: %s", g_GameDLL.file);
META_CONS("dll pathname: %s", g_GameDLL.pathname);
g_regMsgs->show();
}
@ -267,18 +267,6 @@ void cmd_meta_config()
g_config->show();
}
// gamedir/filename
// gamedir/dlls/filename
//
// dir/mm_file
// dir/file
//
// path
// path_mm
// path_MM
// path.so, path.dll
// path_i386.so, path_i486.so, etc
// "meta load" console command.
void cmd_meta_load()
{
@ -292,12 +280,11 @@ void cmd_meta_load()
#ifdef _WIN32
META_CONS(" name.dll");
META_CONS(" name_mm.dll");
META_CONS(" mm_name.dll");
#else
META_CONS(" name.so");
META_CONS(" name_mm.so");
META_CONS(" name_MM.so");
META_CONS(" mm_name.so");
META_CONS(" name_mm_i386.so");
META_CONS(" ...etc");
#endif
META_CONS(" in a number of directories, including:");
@ -339,8 +326,6 @@ void cmd_doplug(PLUG_CMD pcmd)
if (*arg && !*endptr)
findp = g_plugins->find(pindex);
// else try to match some string (prefix)
else
findp = g_plugins->find_match(arg, unique);

View File

@ -1,7 +1,5 @@
#pragma once
#include "types_meta.h"
// Flags to use for meta_cmd_doplug(), to operate on existing plugins; note
// "load" operates on a non-existing plugin thus isn't included here.
enum PLUG_CMD

View File

@ -1,6 +1,6 @@
#include "precompiled.h"
MConfig::MConfig() : debuglevel(0), plugins_file(nullptr), exec_cfg(nullptr), list(nullptr), filename(nullptr)
MConfig::MConfig() : m_debuglevel(0), m_plugins_file(nullptr), m_exec_cfg(nullptr), m_list(nullptr), m_filename(nullptr)
{
}
@ -8,14 +8,14 @@ MConfig::MConfig() : debuglevel(0), plugins_file(nullptr), exec_cfg(nullptr), li
// _after_ constructor, so that all the fields are allocated (d'oh).
void MConfig::init(option_t* global_options)
{
list = global_options;
for (auto optp = list; optp->name; optp++)
m_list = global_options;
for (auto optp = m_list; optp->name; optp++)
set(optp, optp->init);
}
option_t *MConfig::find(const char* lookup) const
{
for (auto optp = list; optp->name; optp++)
for (auto optp = m_list; optp->name; optp++)
{
if (!strcmp(optp->name, lookup)) {
return optp;
@ -145,16 +145,16 @@ bool MConfig::load(const char* fn)
}
}
filename = Q_strdup(loadfile);
m_filename = Q_strdup(loadfile);
fclose(fp);
return true;
}
void MConfig::show() const
{
META_CONS("Config options from localinfo and %s:", filename);
META_CONS("Config options from localinfo and %s:", m_filename);
for (auto optp = list; optp->name; optp++)
for (auto optp = m_list; optp->name; optp++)
{
int *optval = (int *)optp->dest;
char **optstr = (char **)optp->dest;

View File

@ -1,7 +1,5 @@
#pragma once
#include "types_meta.h"
// Max length of line in config file.
#define MAX_CONF_LEN 1024
@ -23,22 +21,23 @@ struct option_t
char *init; // initial value, as a string, just as config file would
};
class MConfig {
class MConfig
{
public:
MConfig();
int debuglevel; // to use for meta_debug
char *plugins_file; // ie metamod.ini, plugins.ini
char *exec_cfg; // ie metaexec.cfg, exec.cfg
void init(option_t *global_options);
bool load(const char *filename);
bool set(const char *key, const char *value) const;
void show() const;
int m_debuglevel; // to use for meta_debug
char *m_plugins_file; // ie metamod.ini, plugins.ini
char *m_exec_cfg; // ie metaexec.cfg, exec.cfg
private:
option_t *list;
char *filename;
option_t *m_list;
char *m_filename;
option_t *find(const char *lookup) const;
static bool set(option_t *setp, const char *value);

View File

@ -50,7 +50,7 @@ void EXT_FUNC mm_ServerDeactivate(void)
g_plugins->unpause_all();
// g_plugins->retry_all(PT_CHANGELEVEL);
g_players.clear_all_cvar_queries();
requestid_counter = 0;
g_requestid_counter = 0;
/* RETURN TO ENGINE */
}
@ -221,7 +221,7 @@ void compile_dllfunc_callbacks()
jitdata.post_table_offset = offsetof(MPlugin, m_dllapi_post_table);
for (auto& cd : g_dllfunc_cdata) {
jitdata.pfn_original = *(size_t *)(size_t(GameDLL.funcs.dllapi_table) + cd.offset);
jitdata.pfn_original = *(size_t *)(size_t(g_GameDLL.funcs.dllapi_table) + cd.offset);
jitdata.args_count = cd.args_count;
jitdata.has_ret = cd.has_ret;
jitdata.has_varargs = cd.has_varargs;
@ -242,7 +242,7 @@ void compile_newdllfunc_callbacks()
jitdata.post_table_offset = offsetof(MPlugin, m_newapi_post_table);
for (auto& cd : g_newdllfunc_cdata) {
jitdata.pfn_original = *(size_t *)(size_t(GameDLL.funcs.newapi_table) + cd.offset);
jitdata.pfn_original = *(size_t *)(size_t(g_GameDLL.funcs.newapi_table) + cd.offset);
jitdata.args_count = cd.args_count;
jitdata.has_ret = cd.has_ret;
jitdata.has_varargs = cd.has_varargs;

View File

@ -3,8 +3,8 @@
#define CDATA_ENG_H(x, p, h) CDATA_ENTRY(enginefuncs_t, x, p, size_t(h))
#define CDATA_ENG(x) CDATA_ENTRY(enginefuncs_t, x, P_PRE, 0u)
meta_enginefuncs_t meta_engfuncs; // static trampolines to dynamic callbacks (for gamedll)
meta_enginefuncs_t meta_engfuncs_jit; // dynamic jit callbacks
meta_enginefuncs_t g_meta_engfuncs; // static trampolines to dynamic callbacks (for gamedll)
meta_enginefuncs_t g_meta_engfuncs_jit; // dynamic jit callbacks
void MM_PRE_HOOK mm_QueryClientCvarValue(const edict_t* pEdict, const char* cvarName)
{
@ -253,7 +253,7 @@ void compile_engfuncs_callbacks()
jitdata.mm_hook_time = cd.mm_hook_time;
jitdata.mm_hook = cd.mm_hook;
*(size_t *)(size_t(&meta_engfuncs_jit) + cd.offset) = g_jit.compile_callback(&jitdata);
*(size_t *)(size_t(&g_meta_engfuncs_jit) + cd.offset) = g_jit.compile_callback(&jitdata);
}
}
@ -261,7 +261,7 @@ void compile_engine_tramps()
{
// we compile simple static functions that will call dynamic callbacks
for (auto& cd : g_engfuncs_cdata) {
*(size_t *)(size_t(&meta_engfuncs) + cd.offset) = g_jit.compile_tramp(size_t(&meta_engfuncs_jit) + cd.offset/*, cd.mm_hook, cd.mm_hook_time*/);
*(size_t *)(size_t(&g_meta_engfuncs) + cd.offset) = g_jit.compile_tramp(size_t(&g_meta_engfuncs_jit) + cd.offset/*, cd.mm_hook, cd.mm_hook_time*/);
}
}

View File

@ -1,9 +1,9 @@
#pragma once
#include <archtypes.h>
struct enginefuncs_s;
// Plugin's GetEngineFunctions, called by metamod.
typedef int (*GET_ENGINE_FUNCTIONS_FN)(enginefuncs_t *pengfuncsFromEngine, int *interfaceVersion);
typedef int (*GET_ENGINE_FUNCTIONS_FN)(enginefuncs_s *pengfuncsFromEngine, int *interfaceVersion);
// According to SDK engine/eiface.h:
// ONLY ADD NEW FUNCTIONS TO THE END OF THIS STRUCT. INTERFACE VERSION IS FROZEN AT 138
@ -13,7 +13,7 @@ typedef int (*GET_ENGINE_FUNCTIONS_FN)(enginefuncs_t *pengfuncsFromEngine, int *
// normal enginefuncs_t type for their meta_engfuncs.
#ifdef METAMOD_CORE
#include "meta_eiface.h" // meta_enginefuncs_t
extern meta_enginefuncs_t meta_engfuncs;
extern meta_enginefuncs_t g_meta_engfuncs;
#else
extern enginefuncs_t meta_engfuncs;
#endif

View File

@ -1,7 +1,5 @@
#pragma once
#include "eiface.h" // engfuncs_t, globalvars_t
// Our structure for storing engine references.
struct engine_t
{

View File

@ -4,7 +4,7 @@
//! this structure contains a list of supported mods and their dlls names
//! To add support for another mod add an entry here, and add all the
//! exported entities to link_func.cpp
const game_modinfo_t known_games[] = {
const game_modinfo_t g_known_games[] = {
// name/gamedir linux_so win_dll desc
//
// Previously enumerated in this sourcefile, the list is now kept in a
@ -20,7 +20,7 @@ const game_modinfo_t known_games[] = {
// Find a modinfo corresponding to the given game name.
inline const game_modinfo_t *lookup_game(const char *name)
{
for (auto& known : known_games)
for (auto& known : g_known_games)
{
if (known.name && !Q_stricmp(known.name, name))
return &known;

View File

@ -1,6 +1,5 @@
#pragma once
#include "types_meta.h"
#include "metamod.h"
// Information we have about each game/mod DLL.

View File

@ -14,12 +14,12 @@ void NOINLINE do_link_ent(ENTITY_FN *pfnEntity, int *missing, const char *entStr
if (!*pfnEntity)
{
META_DEBUG(9, "Looking up game entity '%s'", entStr);
*pfnEntity = (ENTITY_FN)GameDLL.sys_module.getsym(entStr);
*pfnEntity = (ENTITY_FN)g_GameDLL.sys_module.getsym(entStr);
}
if (!*pfnEntity)
{
META_ERROR("Couldn't find game entity '%s' in game DLL '%s': %s", entStr, GameDLL.name, CSysModule::getloaderror());
META_ERROR("Couldn't find game entity '%s' in game DLL '%s': %s", entStr, g_GameDLL.name, CSysModule::getloaderror());
*missing = 1;
return;
}

View File

@ -1,6 +1,6 @@
#include "precompiled.h"
cvar_t meta_debug = { "meta_debug", "0", FCVAR_EXTDLL , 0, nullptr };
cvar_t g_meta_debug = { "meta_debug", "0", FCVAR_EXTDLL , 0, nullptr };
enum MLOG_SERVICE
{
@ -108,8 +108,8 @@ struct BufferedMessage
BufferedMessage *next;
};
static BufferedMessage *messageQueueStart = nullptr;
static BufferedMessage *messageQueueEnd = nullptr;
static BufferedMessage *g_messageQueueStart = nullptr;
static BufferedMessage *g_messageQueueEnd = nullptr;
void buffered_ALERT(MLOG_SERVICE service, ALERT_TYPE atype, const char *prefix, const char *fmt, va_list ap)
{
@ -136,14 +136,14 @@ void buffered_ALERT(MLOG_SERVICE service, ALERT_TYPE atype, const char *prefix,
Q_vsnprintf(msg->buf, sizeof buf, fmt, ap);
msg->next = nullptr;
if (!messageQueueEnd)
if (!g_messageQueueEnd)
{
messageQueueStart = messageQueueEnd = msg;
g_messageQueueStart = g_messageQueueEnd = msg;
}
else
{
messageQueueEnd->next = msg;
messageQueueEnd = msg;
g_messageQueueEnd->next = msg;
g_messageQueueEnd = msg;
}
}
@ -153,7 +153,7 @@ void buffered_ALERT(MLOG_SERVICE service, ALERT_TYPE atype, const char *prefix,
// jumptable is set. Don't call it if it isn't set.
void flush_ALERT_buffer(void)
{
BufferedMessage *msg = messageQueueStart;
BufferedMessage *msg = g_messageQueueStart;
int dev = (int)CVAR_GET_FLOAT("developer");
while (msg)
@ -166,10 +166,10 @@ void flush_ALERT_buffer(void)
ALERT(msg->atype, "b>%s %s\n", msg->prefix, msg->buf);
}
messageQueueStart = messageQueueStart->next;
g_messageQueueStart = g_messageQueueStart->next;
delete msg;
msg = messageQueueStart;
msg = g_messageQueueStart;
}
messageQueueStart = messageQueueEnd = nullptr;
g_messageQueueStart = g_messageQueueEnd = nullptr;
}

View File

@ -1,19 +1,17 @@
#pragma once
#include "enginecallbacks.h" // ALERT, etc
// max buffer size for printed messages
#define MAX_LOGMSG_LEN 1024
// max buffer size for client messages
#define MAX_CLIENTMSG_LEN 128
extern cvar_t meta_debug;
extern cvar_t g_meta_debug;
template<typename ...t_args>
void META_DEBUG(int level, const char* fmt, t_args... args)
{
if (unlikely(meta_debug.value >= level))
if (unlikely(g_meta_debug.value >= level))
META_DEBUG_(level, fmt, args...);
}

View File

@ -5,26 +5,11 @@ void meta_new_dll_functions_t::set_from(NEW_DLL_FUNCTIONS* _pFuncs)
Q_memcpy(this, _pFuncs, sizeof(NEW_DLL_FUNCTIONS));
}
void meta_new_dll_functions_t::copy_to(NEW_DLL_FUNCTIONS *_pFuncs) const
{
#if 0
// TODO: Implement regamedll check
// exit
#endif
Q_memcpy(_pFuncs, this, sizeof(NEW_DLL_FUNCTIONS));
}
void meta_enginefuncs_t::set_from(enginefuncs_t* _pFuncs)
{
Q_memcpy(this, _pFuncs, sizeof(enginefuncs_t));
}
void meta_enginefuncs_t::copy_to(enginefuncs_t* _pFuncs) const
{
Q_memcpy(_pFuncs, this, sizeof(enginefuncs_t));
}
void HL_enginefuncs_t::initialise_interface(enginefuncs_t* _pFuncs)
{
set_from(_pFuncs);

View File

@ -12,9 +12,6 @@ struct meta_new_dll_functions_t: public NEW_DLL_FUNCTIONS
{
// Fill this object with pointers copied from a NEW_DLL_FUNCTIONS struct.
void set_from(NEW_DLL_FUNCTIONS* pFuncs);
// Copy the pointers from this object to a NEW_DLL_FUNCTIONS struct.
void copy_to(NEW_DLL_FUNCTIONS* pFuncs) const;
};
// meta_enginefuncs_t
@ -22,9 +19,6 @@ struct meta_enginefuncs_t : public enginefuncs_t
{
// Fill this object with pointers copied from an enginefuncs_t struct.
void set_from(enginefuncs_t* pFuncs);
// Copy the pointers from this object to an enginefuncs_t struct.
void copy_to(enginefuncs_t* pFuncs) const;
};
// This is a specialisation of the meta_enginefuncs_t struct which is only
@ -48,9 +42,4 @@ private:
{
meta_enginefuncs_t::set_from(pFuncs);
}
void copy_to(enginefuncs_t* pFuncs)
{
meta_enginefuncs_t::copy_to(pFuncs);
}
};

View File

@ -1,20 +1,20 @@
#include "precompiled.h"
cvar_t meta_version = { "metamod_version", APP_VERSION_STRD, FCVAR_SERVER, 0, nullptr };
cvar_t g_meta_version = { "metamod_version", APP_VERSION_STRD, FCVAR_SERVER, 0, nullptr };
MConfig static_config;
MConfig *g_config = &static_config;
option_t global_options[] =
MConfig g_static_config;
MConfig *g_config = &g_static_config;
option_t g_global_options[] =
{
{ "debuglevel", CF_INT, &g_config->debuglevel, "0" },
{ "plugins_file", CF_PATH, &g_config->plugins_file, PLUGINS_INI },
{ "exec_cfg", CF_STR, &g_config->exec_cfg, EXEC_CFG },
{ "debuglevel", CF_INT, &g_config->m_debuglevel, "0" },
{ "plugins_file", CF_PATH, &g_config->m_plugins_file, PLUGINS_INI },
{ "exec_cfg", CF_STR, &g_config->m_exec_cfg, EXEC_CFG },
// list terminator
{ NULL, CF_NONE, NULL, NULL }
};
gamedll_t GameDLL;
gamedll_t g_GameDLL;
meta_globals_t g_metaGlobals;
@ -27,9 +27,9 @@ MRegMsgList *g_regMsgs;
MPlayerList g_players;
unsigned int CALL_API_count = 0;
unsigned int g_CALL_API_count = 0;
int requestid_counter = 0;
int g_requestid_counter = 0;
// Very first metamod function that's run.
// Do startup operations...
@ -65,11 +65,11 @@ void metamod_startup()
// Set a slight debug level for developer mode, if debug level not
// already set.
if ((int) CVAR_GET_FLOAT("developer") != 0 && meta_debug.value == 0)
if ((int) CVAR_GET_FLOAT("developer") != 0 && g_meta_debug.value == 0)
CVAR_SET_FLOAT("meta_debug", 3.0);
// Init default values
g_config->init(global_options);
g_config->init(g_global_options);
// Find config file
cfile = CONFIG_INI;
@ -111,8 +111,8 @@ void metamod_startup()
// Check for an initial debug level, since cfg files don't get exec'd
// until later.
if (g_config->debuglevel != 0)
CVAR_SET_FLOAT("meta_debug", g_config->debuglevel);
if (g_config->m_debuglevel != 0)
CVAR_SET_FLOAT("meta_debug", g_config->m_debuglevel);
// Prepare for registered commands from plugins.
g_regCmds = new MRegCmdList();
@ -162,10 +162,10 @@ void metamod_startup()
if (!valid_gamedir_file(PLUGINS_INI) && valid_gamedir_file(OLD_PLUGINS_INI))
mmfile = OLD_PLUGINS_INI;
if (valid_gamedir_file(g_config->plugins_file))
mmfile = g_config->plugins_file;
if (valid_gamedir_file(g_config->m_plugins_file))
mmfile = g_config->m_plugins_file;
else
META_ERROR("g_plugins file is empty/missing: %s; falling back to %s", g_config->plugins_file, mmfile);
META_ERROR("g_plugins file is empty/missing: %s; falling back to %s", g_config->m_plugins_file, mmfile);
g_plugins = new MPluginList(mmfile);
@ -189,8 +189,8 @@ void metamod_startup()
// Only attempt load if the file appears to exist and be non-empty, to
// avoid confusing users with "couldn't exec exec.cfg" console
// messages.
if (valid_gamedir_file(g_config->exec_cfg))
mmfile = g_config->exec_cfg;
if (valid_gamedir_file(g_config->m_exec_cfg))
mmfile = g_config->m_exec_cfg;
else if (valid_gamedir_file(OLD_EXEC_CFG))
mmfile = OLD_EXEC_CFG;
@ -219,7 +219,7 @@ bool meta_init_gamedll(void)
char gamedir[PATH_MAX];
char *cp;
Q_memset(&GameDLL, 0, sizeof(GameDLL));
Q_memset(&g_GameDLL, 0, sizeof(g_GameDLL));
GET_GAME_DIR(gamedir);
normalize_pathname(gamedir);
@ -239,13 +239,13 @@ bool meta_init_gamedll(void)
// Old style; GET_GAME_DIR returned full pathname. Copy this into
// our gamedir, and truncate to get the game name.
// (note check for both linux and win32 full pathname.)
Q_strncpy(GameDLL.gamedir, gamedir, sizeof GameDLL.gamedir - 1);
GameDLL.gamedir[sizeof GameDLL.gamedir - 1] = '\0';
Q_strncpy(g_GameDLL.gamedir, gamedir, sizeof g_GameDLL.gamedir - 1);
g_GameDLL.gamedir[sizeof g_GameDLL.gamedir - 1] = '\0';
cp = Q_strrchr(gamedir, '/') + 1;
Q_strncpy(GameDLL.name, cp, sizeof GameDLL.name - 1);
GameDLL.name[sizeof GameDLL.name - 1] = '\0';
Q_strncpy(g_GameDLL.name, cp, sizeof g_GameDLL.name - 1);
g_GameDLL.name[sizeof g_GameDLL.name - 1] = '\0';
}
else
{
@ -258,12 +258,12 @@ bool meta_init_gamedll(void)
return false;
}
Q_snprintf(GameDLL.gamedir, sizeof GameDLL.gamedir, "%s/%s", buf, gamedir);
Q_strncpy(GameDLL.name, gamedir, sizeof GameDLL.name - 1);
GameDLL.name[sizeof(GameDLL.name) - 1] = '\0';
Q_snprintf(g_GameDLL.gamedir, sizeof g_GameDLL.gamedir, "%s/%s", buf, gamedir);
Q_strncpy(g_GameDLL.name, gamedir, sizeof g_GameDLL.name - 1);
g_GameDLL.name[sizeof(g_GameDLL.name) - 1] = '\0';
}
META_DEBUG(3, "Game: %s", GameDLL.name);
META_DEBUG(3, "Game: %s", g_GameDLL.name);
return true;
}
@ -272,7 +272,7 @@ bool get_function_table(const char* ifname, int ifvers_mm, table_t*& table, size
{
typedef int(*getfunc_t)(table_t *pFunctionTable, ifvers_t interfaceVersion);
auto pfnGetFuncs = (getfunc_t)GameDLL.sys_module.getsym(ifname);
auto pfnGetFuncs = (getfunc_t)g_GameDLL.sys_module.getsym(ifname);
if (pfnGetFuncs) {
table = (table_t *)Q_calloc(1, table_size);
@ -280,11 +280,11 @@ bool get_function_table(const char* ifname, int ifvers_mm, table_t*& table, size
int ifvers_gamedll = ifvers_mm;
if (pfnGetFuncs(table, ifvers_gamedll)) {
META_DEBUG(3, "dll: Game '%s': Found %s", GameDLL.name, ifname);
META_DEBUG(3, "dll: Game '%s': Found %s", g_GameDLL.name, ifname);
return true;
}
META_ERROR("dll: Failure calling %s in game '%s'", ifname, GameDLL.name);
META_ERROR("dll: Failure calling %s in game '%s'", ifname, g_GameDLL.name);
Q_free(table);
table = nullptr;
@ -296,13 +296,13 @@ bool get_function_table(const char* ifname, int ifvers_mm, table_t*& table, size
if (ifvers_gamedll > ifvers_mm)
META_CONS("g_engine appears to be outdated, check for updates");
else
META_CONS("The game DLL for %s appears to be outdated, check for updates", GameDLL.name);
META_CONS("The game DLL for %s appears to be outdated, check for updates", g_GameDLL.name);
META_CONS("==================");
ALERT(at_error, "Exiting...\n");
}
}
else {
META_DEBUG(5, "dll: Game '%s': No %s", GameDLL.name, ifname);
META_DEBUG(5, "dll: Game '%s': No %s", g_GameDLL.name, ifname);
table = nullptr;
}
@ -314,22 +314,22 @@ bool get_function_table_old(const char* ifname, int ifvers_mm, table_t*& table,
{
typedef int (*getfunc_t)(table_t *pFunctionTable, int interfaceVersion);
auto pfnGetFuncs = (getfunc_t)GameDLL.sys_module.getsym(ifname);
auto pfnGetFuncs = (getfunc_t)g_GameDLL.sys_module.getsym(ifname);
if (pfnGetFuncs) {
table = (table_t *)Q_calloc(1, table_size);
if (pfnGetFuncs(table, ifvers_mm)) {
META_DEBUG(3, "dll: Game '%s': Found %s", GameDLL.name, ifname);
META_DEBUG(3, "dll: Game '%s': Found %s", g_GameDLL.name, ifname);
return true;
}
META_ERROR("dll: Failure calling %s in game '%s'", ifname, GameDLL.name);
META_ERROR("dll: Failure calling %s in game '%s'", ifname, g_GameDLL.name);
Q_free(table);
table = nullptr;
}
else {
META_DEBUG(5, "dll: Game '%s': No %s", GameDLL.name, ifname);
META_DEBUG(5, "dll: Game '%s': No %s", g_GameDLL.name, ifname);
table = nullptr;
}
@ -343,17 +343,17 @@ bool get_function_table_old(const char* ifname, int ifvers_mm, table_t*& table,
// (GiveFnptrsToDll, GetEntityAPI, GetEntityAPI2)
bool meta_load_gamedll(void)
{
if (!setup_gamedll(&GameDLL))
if (!setup_gamedll(&g_GameDLL))
{
META_ERROR("dll: Unrecognized game: %s", GameDLL.name);
META_ERROR("dll: Unrecognized game: %s", g_GameDLL.name);
// meta_errno should be already set in lookup_game()
return false;
}
// open the game DLL
if (!GameDLL.sys_module.load(GameDLL.pathname))
if (!g_GameDLL.sys_module.load(g_GameDLL.pathname))
{
META_ERROR("dll: Couldn't load game DLL %s: %s", GameDLL.pathname, CSysModule::getloaderror());
META_ERROR("dll: Couldn't load game DLL %s: %s", g_GameDLL.pathname, CSysModule::getloaderror());
return false;
}
@ -364,41 +364,41 @@ bool meta_load_gamedll(void)
// wanted to catch one of the functions, but now that plugins are
// dynamically loadable at any time, we have to always pass our table,
// so that any plugin loaded later can catch what they need to.
auto pfn_give_engfuncs = (GIVE_ENGINE_FUNCTIONS_FN)GameDLL.sys_module.getsym("GiveFnptrsToDll");
auto pfn_give_engfuncs = (GIVE_ENGINE_FUNCTIONS_FN)g_GameDLL.sys_module.getsym("GiveFnptrsToDll");
if (pfn_give_engfuncs)
{
pfn_give_engfuncs(&meta_engfuncs, gpGlobals);
META_DEBUG(3, "dll: Game '%s': Called GiveFnptrsToDll", GameDLL.name);
pfn_give_engfuncs(&g_meta_engfuncs, gpGlobals);
META_DEBUG(3, "dll: Game '%s': Called GiveFnptrsToDll", g_GameDLL.name);
}
else
{
META_ERROR("dll: Couldn't find GiveFnptrsToDll() in game DLL '%s'", GameDLL.name);
META_ERROR("dll: Couldn't find GiveFnptrsToDll() in game DLL '%s'", g_GameDLL.name);
return false;
}
// Look for API-NEW interface in Game dll. We do this before API2/API, because
// that's what the engine appears to do..
get_function_table<int&>("GetNewDLLFunctions", NEW_DLL_FUNCTIONS_VERSION, GameDLL.funcs.newapi_table);
get_function_table<int&>("GetNewDLLFunctions", NEW_DLL_FUNCTIONS_VERSION, g_GameDLL.funcs.newapi_table);
// Look for API2 interface in plugin; preferred over API-1.
bool found = get_function_table<int&>("GetEntityAPI2", INTERFACE_VERSION, GameDLL.funcs.dllapi_table);
bool found = get_function_table<int&>("GetEntityAPI2", INTERFACE_VERSION, g_GameDLL.funcs.dllapi_table);
// Look for API-1 in plugin, if API2 interface wasn't found.
if (!found) {
found = get_function_table_old("GetEntityAPI", INTERFACE_VERSION, GameDLL.funcs.dllapi_table);
found = get_function_table_old("GetEntityAPI", INTERFACE_VERSION, g_GameDLL.funcs.dllapi_table);
}
// If didn't find either, return failure.
if (!found) {
META_ERROR("dll: Couldn't find either GetEntityAPI nor GetEntityAPI2 in game DLL '%s'", GameDLL.name);
META_ERROR("dll: Couldn't find either GetEntityAPI nor GetEntityAPI2 in game DLL '%s'", g_GameDLL.name);
return false;
}
// prepare gamedll callbacks
compile_gamedll_callbacks();
META_LOG("Game DLL for '%s' loaded successfully", GameDLL.desc);
META_LOG("Game DLL for '%s' loaded successfully", g_GameDLL.desc);
return true;
}

View File

@ -5,7 +5,6 @@
#include "mreg.h" // MRegCmdList, etc
#include "conf_meta.h" // MConfig
#include "osdep.h" // NAME_MAX, etc
#include "types_meta.h" // bool
#include "mplayer.h" // MPlayerList
#include "meta_eiface.h" // HL_enginefuncs_t, meta_enginefuncs_t
#include "engine_t.h" // engine_t, Engine
@ -25,7 +24,7 @@
#define CONFIG_INI "addons/metamod/config.ini"
// cvar to contain version
extern cvar_t meta_version;
extern cvar_t g_meta_version;
// Info about the game dll/mod.
struct gamedll_t
@ -40,7 +39,7 @@ struct gamedll_t
gamedll_funcs_t funcs; // dllapi_table, newapi_table
};
extern gamedll_t GameDLL;
extern gamedll_t g_GameDLL;
// SDK variables for storing engine funcs and globals.
extern HL_enginefuncs_t g_engfuncs;
@ -85,10 +84,10 @@ extern NEW_DLL_FUNCTIONS *pHookedNewDllFunctions;
// metamod assumed that g_metaGlobals is free to be used.
// With call_count we can fix this by backuping up g_metaGlobals if
// it's already being used.
extern unsigned int CALL_API_count;
extern unsigned int g_CALL_API_count;
// stores previous requestid counter
extern int requestid_counter;
extern int g_requestid_counter;
// (patch by BAILOPAN)
// Holds cached player info, right now only things for querying cvars

View File

@ -1,6 +1,5 @@
#pragma once
#include "types_meta.h" // bool
#include "mplugin.h" // class MPlugin
#include "plinfo.h" // plid_t, etc

View File

@ -1,6 +1,6 @@
#include "precompiled.h"
MPlayer::MPlayer() : isQueried(false)
MPlayer::MPlayer() : m_isQueried(false)
{
}
@ -17,16 +17,16 @@ void MPlayer::set_cvar_query(const char *cvar)
return;
}
isQueried = true;
Q_strncpy(cvarName, cvar, sizeof cvarName - 1);
cvarName[sizeof cvarName - 1] = '\0';
m_isQueried = true;
Q_strncpy(g_cvarName, cvar, sizeof g_cvarName - 1);
g_cvarName[sizeof g_cvarName - 1] = '\0';
}
// Unmark player as querying a client cvar
void MPlayer::clear_cvar_query(const char *cvar)
{
isQueried = false;
cvarName[0] = '\0';
m_isQueried = false;
g_cvarName[0] = '\0';
}
// Check if a client cvar is queried for this player
@ -34,9 +34,9 @@ void MPlayer::clear_cvar_query(const char *cvar)
// or the name of the cvar.
const char *MPlayer::is_querying_cvar(void) const
{
if (isQueried)
if (m_isQueried)
{
return cvarName;
return g_cvarName;
}
return nullptr;
@ -49,7 +49,7 @@ void MPlayerList::set_player_cvar_query(const edict_t *pEntity, const char *cvar
{
int indx = ENTINDEX(pEntity);
if (indx >= 1 && indx <= gpGlobals->maxClients)
players[indx].set_cvar_query(cvar);
m_players[indx].set_cvar_query(cvar);
}
// Unmark player as querying a client cvar
@ -57,14 +57,14 @@ void MPlayerList::clear_player_cvar_query(const edict_t *pEntity, const char *cv
{
int indx = ENTINDEX(pEntity);
if (indx >= 1 && indx <= gpGlobals->maxClients)
players[indx].clear_cvar_query(cvar);
m_players[indx].clear_cvar_query(cvar);
}
void MPlayerList::clear_all_cvar_queries(void)
{
for (int indx = 1; indx <= gpGlobals->maxClients; indx++)
{
players[indx].clear_cvar_query();
m_players[indx].clear_cvar_query();
}
}
@ -77,7 +77,7 @@ const char *MPlayerList::is_querying_cvar(const edict_t *pEntity) const
{
int indx = ENTINDEX(pEntity);
if (indx >= 1 && indx <= gpGlobals->maxClients)
return players[indx].is_querying_cvar();
return m_players[indx].is_querying_cvar();
return NULL;
}

View File

@ -1,7 +1,5 @@
#pragma once
#include "types_meta.h"
// Info on an individual player
class MPlayer
{
@ -13,8 +11,8 @@ public:
const char *is_querying_cvar() const; // check if a player is querying a cvar. returns
private:
bool isQueried; // is this player currently queried for a cvar value
char cvarName[64]; // name of the cvar if getting queried
bool m_isQueried; // is this player currently queried for a cvar value
char g_cvarName[64]; // name of the cvar if getting queried
};
// A list of players. The number of max players is fixed and small enough
@ -28,6 +26,6 @@ public:
const char *is_querying_cvar(const edict_t *pEntity) const;
private:
int maxplayers = 32;
MPlayer players[MAX_CLIENTS + 1]; // array of players
int m_maxplayers = 32;
MPlayer m_players[MAX_CLIENTS + 1]; // array of players
};

View File

@ -281,9 +281,9 @@ bool MPlugin::resolve(void)
m_file = m_pathname;
// store pathname: the gamedir relative path, or an absolute path
size_t len = Q_strlen(GameDLL.gamedir);
size_t len = Q_strlen(g_GameDLL.gamedir);
if (!Q_strnicmp(m_pathname, GameDLL.gamedir, len))
if (!Q_strnicmp(m_pathname, g_GameDLL.gamedir, len))
{
Q_strncpy(m_filename, m_pathname + len + 1, sizeof m_filename - 1);
m_filename[sizeof m_filename - 1] = '\0';
@ -306,7 +306,7 @@ char *MPlugin::resolve_dirs(char *path) const
{
static char buf[PATH_MAX ];
Q_snprintf(buf, sizeof buf, "%s/%s", GameDLL.gamedir, path);
Q_snprintf(buf, sizeof buf, "%s/%s", g_GameDLL.gamedir, path);
// try this path
struct stat st;
@ -318,7 +318,7 @@ char *MPlugin::resolve_dirs(char *path) const
if (found)
return found;
Q_snprintf(buf, sizeof buf, "%s/dlls/%s", GameDLL.gamedir, path);
Q_snprintf(buf, sizeof buf, "%s/dlls/%s", g_GameDLL.gamedir, path);
// try this path
if (!stat(buf, &st) && S_ISREG(st.st_mode))
@ -663,7 +663,7 @@ bool MPlugin::query(void)
// Make a copy of the meta_util function table for each plugin, for the
// same reason.
Q_memcpy(&m_mutil_funcs, &MetaUtilFunctions, sizeof m_mutil_funcs);
Q_memcpy(&m_mutil_funcs, &g_MetaUtilFunctions, sizeof m_mutil_funcs);
if (pfn_query(META_INTERFACE_VERSION, &m_info, &m_mutil_funcs) != TRUE)
{
@ -801,7 +801,7 @@ bool MPlugin::attach(PLUG_LOADTIME now)
{
// Make copy of gameDLL's function tables for each plugin, so we don't
// risk the plugins screwing with the tables everyone uses.
if (GameDLL.funcs.dllapi_table && !m_gamedll_funcs.dllapi_table) // TODO: check it
if (g_GameDLL.funcs.dllapi_table && !m_gamedll_funcs.dllapi_table) // TODO: check it
{
m_gamedll_funcs.dllapi_table = (DLL_FUNCTIONS *)Q_malloc(sizeof(DLL_FUNCTIONS));
if (!m_gamedll_funcs.dllapi_table)
@ -809,9 +809,9 @@ bool MPlugin::attach(PLUG_LOADTIME now)
META_ERROR("dll: Failed attach plugin '%s': Failed malloc() for dllapi_table");
return false;
}
Q_memcpy(m_gamedll_funcs.dllapi_table, GameDLL.funcs.dllapi_table, sizeof(DLL_FUNCTIONS));
Q_memcpy(m_gamedll_funcs.dllapi_table, g_GameDLL.funcs.dllapi_table, sizeof(DLL_FUNCTIONS));
}
if (GameDLL.funcs.newapi_table && !m_gamedll_funcs.newapi_table)
if (g_GameDLL.funcs.newapi_table && !m_gamedll_funcs.newapi_table)
{
m_gamedll_funcs.newapi_table = (NEW_DLL_FUNCTIONS *)Q_calloc(1, sizeof(meta_new_dll_functions_t));
if (!m_gamedll_funcs.newapi_table)
@ -819,7 +819,7 @@ bool MPlugin::attach(PLUG_LOADTIME now)
META_ERROR("dll: Failed attach plugin '%s': Failed malloc() for newapi_table");
return false;
}
static_cast<meta_new_dll_functions_t *>(m_gamedll_funcs.newapi_table)->set_from(GameDLL.funcs.newapi_table);
static_cast<meta_new_dll_functions_t *>(m_gamedll_funcs.newapi_table)->set_from(g_GameDLL.funcs.newapi_table);
}
auto pfn_attach = (META_ATTACH_FN)m_sys_module.getsym("Meta_Attach");
if (!pfn_attach)
@ -1210,14 +1210,14 @@ void MPlugin::show()
META_CONS("%*s: %s", width, "last loaded", tstr);
// XXX show file time ?
show_table("DLLAPI", m_dllapi_table, &dllapi_info.pfnGameInit, false);
show_table("DLLAPI Post", m_dllapi_post_table, &dllapi_info.pfnGameInit, true);
show_table("DLLAPI", m_dllapi_table, &g_dllapi_info.pfnGameInit, false);
show_table("DLLAPI Post", m_dllapi_post_table, &g_dllapi_info.pfnGameInit, true);
show_table("NEWAPI", m_newapi_table, &newapi_info.pfnOnFreeEntPrivateData, false);
show_table("NEWAPI Post", m_newapi_post_table, &newapi_info.pfnOnFreeEntPrivateData, true);
show_table("NEWAPI", m_newapi_table, &g_newapi_info.pfnOnFreeEntPrivateData, false);
show_table("NEWAPI Post", m_newapi_post_table, &g_newapi_info.pfnOnFreeEntPrivateData, true);
show_table("Engine", m_engine_table, &engine_info.pfnPrecacheModel, false);
show_table("Engine Post", m_engine_post_table, &engine_info.pfnPrecacheModel, true);
show_table("Engine", m_engine_table, &g_engineapi_info.pfnPrecacheModel, false);
show_table("Engine Post", m_engine_post_table, &g_engineapi_info.pfnPrecacheModel, true);
g_regCmds->show(m_index);
g_regCvars->show(m_index);

View File

@ -2,7 +2,12 @@
MRegCmd::MRegCmd(char* cmd_name, REG_CMD_FN cmd_handler, MPlugin* cmd_plugin) : m_pfunction(cmd_handler), m_plugid(cmd_plugin->m_index), m_status(RG_VALID)
{
m_name = _strdup(cmd_name);
m_name = Q_strdup(cmd_name);
}
MRegCmd::~MRegCmd()
{
Q_free(m_name);
}
bool MRegCmd::call() const
@ -32,6 +37,13 @@ MRegCmdList::MRegCmdList() : m_list()
{
}
MRegCmdList::~MRegCmdList()
{
for (auto reg : m_list) {
delete reg;
}
}
MRegCmd *MRegCmdList::find(const char *name) const
{
for (auto reg : m_list)
@ -139,14 +151,21 @@ void MRegCmdList::show(int plugin_id) const
MRegCvar::MRegCvar(cvar_t* cv_ptr, MPlugin* cv_plugin) : m_cvar(cv_ptr), m_plugid(cv_plugin->m_index), m_status(RG_VALID)
{
m_cvar = g_static_allocator.allocate<cvar_t>();
m_cvar->name = _strdup(cv_ptr->name);
m_cvar->string = _strdup(cv_ptr->string);
m_cvar = new cvar_t;
m_cvar->name = Q_strdup(cv_ptr->name);
m_cvar->string = Q_strdup(cv_ptr->string);
m_cvar->flags = cv_ptr->flags;
m_cvar->value = cv_ptr->value;
m_cvar->next = cv_ptr->next;
}
MRegCvar::~MRegCvar()
{
Q_free((void *)m_cvar->name);
Q_free(m_cvar->string);
delete m_cvar;
}
cvar_t* MRegCvar::getcvar() const
{
return m_cvar;
@ -157,9 +176,16 @@ MRegCvarList::MRegCvarList() : m_list()
{
}
MRegCvarList::~MRegCvarList()
{
for (auto reg : m_list) {
delete reg;
}
}
MRegCvar *MRegCvarList::add(cvar_t* src, MPlugin* plugin)
{
MRegCvar *reg_cvar = new(g_static_allocator.allocate<MRegCvar>()) MRegCvar(src, plugin);
MRegCvar *reg_cvar = new MRegCvar(src, plugin);
m_list.push_back(reg_cvar);
return reg_cvar;
}
@ -270,12 +296,19 @@ MRegMsgList::MRegMsgList() : m_list()
{
}
MRegMsgList::~MRegMsgList()
{
for (auto reg : m_list) {
delete reg;
}
}
MRegMsg *MRegMsgList::add(const char *addname, int addmsgid, int addsize)
{
// Copy msg data into empty slot.
// Note: 'addname' assumed to be a constant string allocated in the
// gamedll.
auto msg = new(g_static_allocator.allocate<MRegMsg>()) MRegMsg(addname, addmsgid, addsize);
auto msg = new MRegMsg(addname, addmsgid, addsize);
m_list.push_back(msg);
return msg;
}

View File

@ -25,6 +25,7 @@ class MRegCmd
{
public:
MRegCmd(char* cmd_name, REG_CMD_FN cmd_handler, MPlugin* cmd_plugin);
~MRegCmd();
bool call() const; // try to call the function
void disable();
char* getname() const;
@ -44,6 +45,7 @@ class MRegCmdList
{
public:
MRegCmdList();
~MRegCmdList();
MRegCmd *find(const char *name) const;
MRegCmd *add(char *name, REG_CMD_FN cmd_handler, MPlugin* cmd_plugin);
void remove(char* cmd_name);
@ -60,6 +62,7 @@ class MRegCvar
{
public:
MRegCvar(cvar_t* cv_ptr, MPlugin* cv_plugin);
~MRegCvar();
cvar_t* getcvar() const;
private:
@ -75,6 +78,7 @@ class MRegCvarList
{
public:
MRegCvarList();
~MRegCvarList();
MRegCvar *add(cvar_t* src, MPlugin* plugin);
MRegCvar *find(const char *findname); // find by MRegCvar->data.name
void disable(int plugin_id) const; // change status to Invalid
@ -107,6 +111,7 @@ class MRegMsgList
{
public:
MRegMsgList();
~MRegMsgList();
MRegMsg *add(const char *addname, int addmsgid, int addsize);
MRegMsg *find(const char *findname);
MRegMsg *find(int findmsgid);

View File

@ -175,11 +175,11 @@ void EXT_FUNC mutil_CenterSayVarargs(plid_t plid, hudtextparms_t tparms, const c
qboolean EXT_FUNC mutil_CallGameEntity(plid_t plid, const char *entStr, entvars_t *pev)
{
META_DEBUG(8, "Looking up game entity '%s' for plugin '%s'", entStr, plid->name);
ENTITY_FN pfnEntity = (ENTITY_FN)GameDLL.sys_module.getsym(entStr);
ENTITY_FN pfnEntity = (ENTITY_FN)g_GameDLL.sys_module.getsym(entStr);
if (!pfnEntity)
{
META_ERROR("Couldn't find game entity '%s' in game DLL '%s' for plugin '%s'", entStr, GameDLL.name, plid->name);
META_ERROR("Couldn't find game entity '%s' in game DLL '%s' for plugin '%s'", entStr, g_GameDLL.name, plid->name);
return false;
}
@ -266,22 +266,22 @@ const char* EXT_FUNC mutil_GetGameInfo(plid_t plid, ginfo_t type)
switch (type)
{
case GINFO_NAME:
cp = GameDLL.name;
cp = g_GameDLL.name;
break;
case GINFO_DESC:
cp = GameDLL.desc;
cp = g_GameDLL.desc;
break;
case GINFO_GAMEDIR:
cp = GameDLL.gamedir;
cp = g_GameDLL.gamedir;
break;
case GINFO_DLL_FULLPATH:
cp = GameDLL.pathname;
cp = g_GameDLL.pathname;
break;
case GINFO_DLL_FILENAME:
cp = GameDLL.file;
cp = g_GameDLL.file;
break;
case GINFO_REALDLL_FULLPATH:
cp = GameDLL.real_pathname;
cp = g_GameDLL.real_pathname;
break;
default:
META_ERROR("GetGameInfo: invalid request '%d' from plugin '%s'", type, plid->name);
@ -371,13 +371,13 @@ const char* EXT_FUNC mutil_IsQueryingClientCvar(plid_t plid, const edict_t* pEdi
int EXT_FUNC mutil_MakeRequestId(plid_t plid)
{
//the offset is to distinguish from gamedll requests, if any
return abs(0xbeef << 16) + (++requestid_counter);
return abs(0xbeef << 16) + (++g_requestid_counter);
}
void EXT_FUNC mutil_GetHookTables(plid_t plid, enginefuncs_t** peng, DLL_FUNCTIONS** pdll, NEW_DLL_FUNCTIONS** pnewdll)
{
if (peng)
*peng = &meta_engfuncs;
*peng = &g_meta_engfuncs;
if (pdll)
*pdll = pHookedDllFunctions;
@ -387,7 +387,7 @@ void EXT_FUNC mutil_GetHookTables(plid_t plid, enginefuncs_t** peng, DLL_FUNCTIO
}
// Meta Utility Function table.
mutil_funcs_t MetaUtilFunctions = {
mutil_funcs_t g_MetaUtilFunctions = {
mutil_LogConsole, // pfnLogConsole
mutil_LogMessage, // pfnLogMessage
mutil_LogError, // pfnLogError

View File

@ -48,7 +48,7 @@ struct mutil_funcs_t
#endif
};
extern mutil_funcs_t MetaUtilFunctions;
extern mutil_funcs_t g_MetaUtilFunctions;
// Meta Utility Functions
void mutil_LogConsole(plid_t plid, const char *fmt, ...);
@ -70,16 +70,6 @@ const char *mutil_IsQueryingClientCvar(plid_t plid, const edict_t *pEdict);
int mutil_MakeRequestId(plid_t plid);
void mutil_GetHookTables(plid_t plid, enginefuncs_t **peng, DLL_FUNCTIONS **pdll, NEW_DLL_FUNCTIONS **pnewdll);
#ifdef UNFINISHED
int mutil_HookGameEvent(plid_t plid, game_event_t event, event_func_t pfnHandle);
int mutil_HookLogTrigger(plid_t plid, const char *trigger, logmatch_func_t pfnHandle);
int mutil_HookLogString(plid_t plid, const char *string, logmatch_func_t pfnHandle);
int mutil_HookLogRegex(plid_t plid, const char *pattern, logmatch_func_t pfnHandle);
qboolean mutil_RemoveHookID(plid_t plid, int hookid);
int mutil_RemoveHookAll(plid_t plid);
#endif
// Convenience macros for MetaUtil functions
#define LOG_CONSOLE (*gpMetaUtilFuncs->pfnLogConsole)
#define LOG_MESSAGE (*gpMetaUtilFuncs->pfnLogMessage)
@ -99,12 +89,3 @@ int mutil_RemoveHookAll(plid_t plid);
#define IS_QUERYING_CLIENT_CVAR (*gpMetaUtilFuncs->pfnIsQueryingClientCvar)
#define MAKE_REQUESTID (*gpMetaUtilFuncs->pfnMakeRequestId)
#define GET_HOOK_TABLES (*gpMetaUtilFuncs->pfnGetHookTables)
#ifdef UNFINISHED
#define HOOK_GAME_EVENT (*gpMetaUtilFuncs->pfnHookGameEvent)
#define HOOK_LOG_TRIGGER (*gpMetaUtilFuncs->pfnHookLogTrigger)
#define HOOK_LOG_STRING (*gpMetaUtilFuncs->pfnHookLogString)
#define HOOK_LOG_REGEX (*gpMetaUtilFuncs->pfnHookLogRegex)
#define REMOVE_HOOK_ID (*gpMetaUtilFuncs->pfnRemoveHookID)
#define REMOVE_HOOK_ALL (*gpMetaUtilFuncs->pfnRemoveHookAll)
#endif

View File

@ -40,7 +40,6 @@
#include "meta_api.h"
#include "mutil.h"
#include "reg_support.h"
#include "types_meta.h"
#include "mlist.h"
#include "mplugin.h"
#include "plinfo.h"

View File

@ -44,11 +44,11 @@ C_DLLEXPORT int Server_GetBlendingInterface(int version,
if (!getblend)
{
META_DEBUG(6, "Looking up Server_GetBlendingInterface");
getblend = (GETBLENDAPI_FN)GameDLL.sys_module.getsym("Server_GetBlendingInterface");
getblend = (GETBLENDAPI_FN)g_GameDLL.sys_module.getsym("Server_GetBlendingInterface");
}
if (!getblend)
{
META_DEBUG(6, "Couldn't find Server_GetBlendingInterface in game DLL '%s': %s", GameDLL.name, "function not found");
META_DEBUG(6, "Couldn't find Server_GetBlendingInterface in game DLL '%s': %s", g_GameDLL.name, "function not found");
missing = 1;
return 0;
}

View File

@ -2,9 +2,8 @@
void __declspec(noreturn) do_exit(int exitval)
{
//TerminateProcess(GetCurrentProcess(), 1);
*((int *)NULL) = 0;
while (true);
//Allahu Akbar!!
*((int *)nullptr) = 0;
}
// Checks for a non-empty file, relative to the gamedir if necessary.
@ -31,7 +30,7 @@ int valid_gamedir_file(const char* path)
buf[sizeof buf - 1] = '\0';
}
else
snprintf(buf, sizeof buf, "%s/%s", GameDLL.gamedir, path);
snprintf(buf, sizeof buf, "%s/%s", g_GameDLL.gamedir, path);
int ret = stat(buf, &st);
if (ret != 0)
@ -76,7 +75,7 @@ char* full_gamedir_path(const char* path, char* fullpath)
Q_strncpy(buf, path, sizeof buf - 1);
buf[sizeof buf - 1] = '\0';
}
else snprintf(buf, sizeof buf, "%s/%s", GameDLL.gamedir, path);
else snprintf(buf, sizeof buf, "%s/%s", g_GameDLL.gamedir, path);
// Remove relative path components, if possible.
if (!realpath(buf, fullpath))

View File

@ -1 +0,0 @@
#pragma once

View File

@ -1,7 +1,5 @@
#include "precompiled.h"
static_allocator g_static_allocator(static_allocator::mp_readwrite);
bool is_yes(const char* str)
{
return !Q_strcmp(str, "true") || !Q_strcmp(str, "yes") || !Q_strcmp(str, "1");

View File

@ -43,8 +43,6 @@ private:
memory_protection m_protection;
};
extern static_allocator g_static_allocator;
bool is_yes(const char* str);
bool is_no(const char* str);