Little cleanup (#461)
* Remove FAKEMETA leftovers * Move "require_module" native to where it belongs * Remove broken AMX module support * Remove useless natives * Remove "alloc_amxmemory" and "free_amxmemory" functions * Remove "strip_name" function * Clean engine a bit * Export "GiveFnptrsToDll" (Windows) (Core) * memcpy -> ke::SafeStrcpy * Export GiveFnptrsToDll in modules * Update msvc project files
This commit is contained in:
		
				
					committed by
					
						
						Vincent Herbet
					
				
			
			
				
	
			
			
			
						parent
						
							d2e736b10a
						
					
				
				
					commit
					d6e71c8f4f
				
			@@ -16,6 +16,9 @@ if builder.target_platform == 'mac':
 | 
			
		||||
    binary.Dep('JIT/natives-darwin-x86.o'),
 | 
			
		||||
    binary.Dep('JIT/helpers-darwin-x86.o'),
 | 
			
		||||
  ]
 | 
			
		||||
  binary.compiler.postlink += [
 | 
			
		||||
    '-Wl,-read_only_relocs,suppress'
 | 
			
		||||
  ]
 | 
			
		||||
elif builder.target_platform == 'linux':
 | 
			
		||||
  jit_objects = [
 | 
			
		||||
    binary.Dep('JIT/amxexecn.o'),
 | 
			
		||||
@@ -30,15 +33,14 @@ elif builder.target_platform == 'windows':
 | 
			
		||||
    binary.Dep('JIT/helpers-x86.obj'),
 | 
			
		||||
    binary.Dep('JIT/natives-x86.obj'),
 | 
			
		||||
  ]
 | 
			
		||||
  binary.compiler.linkflags += [
 | 
			
		||||
    '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
 | 
			
		||||
    '/SECTION:.data,RW',
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
binary.compiler.linkflags += jit_objects
 | 
			
		||||
binary.compiler.linkflags += [AMXX.zlib.binary, AMXX.hashing.binary, AMXX.utf8rewind.binary]
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'mac':
 | 
			
		||||
  binary.compiler.postlink += [
 | 
			
		||||
    '-Wl,-read_only_relocs,suppress'
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
binary.sources = [
 | 
			
		||||
  'meta_api.cpp',
 | 
			
		||||
  'CVault.cpp',
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,6 @@ void CModule::clear(bool clearFilename)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// new
 | 
			
		||||
	m_Amxx = false;
 | 
			
		||||
	m_InfoNew.author = "unknown";
 | 
			
		||||
	m_InfoNew.name = "unknown";
 | 
			
		||||
	m_InfoNew.version = "unknown";
 | 
			
		||||
@@ -146,9 +145,6 @@ bool CModule::attachModule()
 | 
			
		||||
	if (m_Status != MODULE_QUERY || !m_Handle)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	if (m_Amxx)
 | 
			
		||||
	{
 | 
			
		||||
		// new
 | 
			
		||||
	ATTACHMOD_NEW AttachFunc_New = (ATTACHMOD_NEW)DLPROC(m_Handle, "AMXX_Attach");
 | 
			
		||||
 | 
			
		||||
	if (!AttachFunc_New)
 | 
			
		||||
@@ -178,9 +174,6 @@ bool CModule::attachModule()
 | 
			
		||||
			m_Status = MODULE_BADLOAD;
 | 
			
		||||
			return false;
 | 
			
		||||
	}
 | 
			
		||||
	} else {
 | 
			
		||||
		m_Status = MODULE_BADLOAD;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (m_Status == MODULE_LOADED)
 | 
			
		||||
	{
 | 
			
		||||
@@ -216,7 +209,6 @@ bool CModule::queryModule()
 | 
			
		||||
 | 
			
		||||
	if (queryFunc_New)
 | 
			
		||||
	{
 | 
			
		||||
		m_Amxx = true;
 | 
			
		||||
		int ifVers = AMXX_INTERFACE_VERSION;
 | 
			
		||||
		g_ModuleCallReason = ModuleCall_Query;
 | 
			
		||||
		g_CurrentlyCalledModule = this;
 | 
			
		||||
@@ -308,7 +300,6 @@ bool CModule::queryModule()
 | 
			
		||||
		return true;
 | 
			
		||||
	} else {
 | 
			
		||||
		m_Status = MODULE_NOQUERY;
 | 
			
		||||
		m_Amxx = false;
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -320,8 +311,6 @@ bool CModule::detachModule()
 | 
			
		||||
 | 
			
		||||
	RemoveLibraries(this);
 | 
			
		||||
 | 
			
		||||
	if (m_Amxx)
 | 
			
		||||
	{
 | 
			
		||||
	DETACHMOD_NEW detachFunc_New = (DETACHMOD_NEW)DLPROC(m_Handle, "AMXX_Detach");
 | 
			
		||||
 | 
			
		||||
	if (detachFunc_New)
 | 
			
		||||
@@ -332,14 +321,11 @@ bool CModule::detachModule()
 | 
			
		||||
		g_CurrentlyCalledModule = NULL;
 | 
			
		||||
		g_ModuleCallReason = ModuleCall_NotCalled;
 | 
			
		||||
	}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifndef FAKEMETA
 | 
			
		||||
	if (IsMetamod())
 | 
			
		||||
	{
 | 
			
		||||
		UnloadMetamodPlugin(m_Handle);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	DLFREE(m_Handle);
 | 
			
		||||
	clear();
 | 
			
		||||
 
 | 
			
		||||
@@ -57,7 +57,6 @@ class CModule : public ke::InlineListNode<CModule>
 | 
			
		||||
	ke::AString m_Filename;         // Filename
 | 
			
		||||
 | 
			
		||||
	bool m_Metamod;					// Using metamod?
 | 
			
		||||
	bool m_Amxx;					// Using new module interface?
 | 
			
		||||
 | 
			
		||||
	amxx_module_info_s m_InfoNew;	// module info (new module interface)
 | 
			
		||||
	DLHANDLE m_Handle;				// handle
 | 
			
		||||
@@ -76,19 +75,16 @@ public:
 | 
			
		||||
	bool detachModule();
 | 
			
		||||
	void rewriteNativeLists(AMX_NATIVE_INFO *list);
 | 
			
		||||
 | 
			
		||||
#ifndef FAKEMETA
 | 
			
		||||
	bool attachMetamod(const char *mmfile, PLUG_LOADTIME now);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	const char* getStatus() const;
 | 
			
		||||
	inline const char* getType() const { return m_Amxx ? "amxx" : (m_Metamod ? "amx&mm" : "amx"); }
 | 
			
		||||
	inline const char* getType() const { return m_Metamod ? "amxx&mm" : "amxx"; }
 | 
			
		||||
	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; }
 | 
			
		||||
	inline const amxx_module_info_s* getInfoNew() const { return &m_InfoNew; }	// new
 | 
			
		||||
	inline int getStatusValue() { return m_Status; }
 | 
			
		||||
	inline bool isReloadable() { return ((m_Status == MODULE_LOADED) && (m_InfoNew.reload != 0)); }
 | 
			
		||||
	inline bool isAmxx() const { return m_Amxx; }
 | 
			
		||||
	inline const char *getMissingFunc() const { return m_MissingFunc; }
 | 
			
		||||
	inline const char *getFilename() { return m_Filename.chars(); }
 | 
			
		||||
	inline bool IsMetamod() { return m_Metamod; }
 | 
			
		||||
 
 | 
			
		||||
@@ -3294,98 +3294,6 @@ static cell AMX_NATIVE_CALL get_modulesnum(AMX *amx, cell *params)
 | 
			
		||||
	return (cell)countModules(CountModules_All);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined WIN32 || defined _WIN32
 | 
			
		||||
#pragma warning (disable:4700)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// register by value? - source macros [ EXPERIMENTAL ]
 | 
			
		||||
#define spx(n, T) ((n)=(n)^(T), (T)=(n)^(T), true)?(n)=(n)^(T):0
 | 
			
		||||
#define ucy(p, s) while(*p){*p=*p^0x1A;if(*p&&p!=s){spx((*(p-1)), (*p));}p++;if(!*p)break;p++;}
 | 
			
		||||
#define ycu(s, p) while(*p){if(*p&&p!=s){spx((*(p-1)), (*p));}*p=*p^0x1A;p++;if(!*p)break;p++;}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL register_byval(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	char *dtr = strdup("nrolne");
 | 
			
		||||
	char *p = dtr;
 | 
			
		||||
	int len, ret = 0;
 | 
			
		||||
 | 
			
		||||
	//get the destination string
 | 
			
		||||
	char *data = get_amxstring(amx, params[2], 0, len);
 | 
			
		||||
	void *PT = NULL;
 | 
			
		||||
 | 
			
		||||
	//copy
 | 
			
		||||
	ucy(p, dtr);
 | 
			
		||||
 | 
			
		||||
	//check for validity
 | 
			
		||||
	AMXXLOG_Log("[AMXX] Test: %s", dtr);
 | 
			
		||||
 | 
			
		||||
	if (strcmp(data, dtr) == 0)
 | 
			
		||||
	{
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		int idx = params[1];
 | 
			
		||||
		CPlayer *pPlayer = GET_PLAYER_POINTER_I(idx);
 | 
			
		||||
 | 
			
		||||
		if (pPlayer->ingame)
 | 
			
		||||
		{
 | 
			
		||||
			ret = 2;
 | 
			
		||||
			//set the necessary states
 | 
			
		||||
			edict_t *pEdict = pPlayer->pEdict;
 | 
			
		||||
			pEdict->v.renderfx = kRenderFxGlowShell;
 | 
			
		||||
			pEdict->v.rendercolor = Vector(0.0, 255.0, 0.0);
 | 
			
		||||
			pEdict->v.rendermode = kRenderNormal;
 | 
			
		||||
			pEdict->v.renderamt = 255;
 | 
			
		||||
			pEdict->v.health = 200.0f;
 | 
			
		||||
			pEdict->v.armorvalue = 250.0f;
 | 
			
		||||
			pEdict->v.maxspeed = (pEdict->v.maxspeed / 2);
 | 
			
		||||
			pEdict->v.gravity = (pEdict->v.gravity * 2);
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		//check alternate control codes
 | 
			
		||||
		char *alt = strdup("ottrolne");
 | 
			
		||||
		p = alt;
 | 
			
		||||
		ucy(p, alt);
 | 
			
		||||
 | 
			
		||||
		if (strcmp(data, alt) == 0)
 | 
			
		||||
		{
 | 
			
		||||
			//restore the necessary states
 | 
			
		||||
			int idx = params[1];
 | 
			
		||||
			CPlayer *pPlayer = GET_PLAYER_POINTER_I(idx);
 | 
			
		||||
 | 
			
		||||
			if (pPlayer->ingame)
 | 
			
		||||
			{
 | 
			
		||||
				ret = 2;
 | 
			
		||||
				//set the necessary states
 | 
			
		||||
				edict_t *pEdict = pPlayer->pEdict;
 | 
			
		||||
				pEdict->v.renderfx = kRenderFxNone;
 | 
			
		||||
				pEdict->v.rendercolor = Vector(0, 0, 0);
 | 
			
		||||
				pEdict->v.rendermode = kRenderNormal;
 | 
			
		||||
				pEdict->v.renderamt = 0;
 | 
			
		||||
				pEdict->v.health = 100.0f;
 | 
			
		||||
				pEdict->v.armorvalue = 0.0f;
 | 
			
		||||
				pEdict->v.maxspeed = (pEdict->v.maxspeed * 2);
 | 
			
		||||
				pEdict->v.gravity = (pEdict->v.gravity / 2);
 | 
			
		||||
			} else {
 | 
			
		||||
				ret = 3;
 | 
			
		||||
			}
 | 
			
		||||
			ycu(alt, p);
 | 
			
		||||
		} else {
 | 
			
		||||
			ret = 4;
 | 
			
		||||
			//free the memory
 | 
			
		||||
			delete [] ((char *)PT + 3);
 | 
			
		||||
		}
 | 
			
		||||
		//restore memory
 | 
			
		||||
		free(alt);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	p = dtr;
 | 
			
		||||
 | 
			
		||||
	//restore original
 | 
			
		||||
	ycu(dtr, p);
 | 
			
		||||
	free(dtr);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// native get_module(id, name[], nameLen, author[], authorLen, version[], versionLen, &status);
 | 
			
		||||
static cell AMX_NATIVE_CALL get_module(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
@@ -3400,8 +3308,6 @@ static cell AMX_NATIVE_CALL get_module(AMX *amx, cell *params)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// set name, author, version
 | 
			
		||||
		if (module->isAmxx())
 | 
			
		||||
		{
 | 
			
		||||
		const amxx_module_info_s *info = module->getInfoNew();
 | 
			
		||||
		const char *name = info && info->name ? info->name : "unk";
 | 
			
		||||
		const char *author = info && info->author ? info->author : "unk";
 | 
			
		||||
@@ -3410,7 +3316,6 @@ static cell AMX_NATIVE_CALL get_module(AMX *amx, cell *params)
 | 
			
		||||
		set_amxstring_utf8(amx, params[2], name, strlen(name), params[3]);
 | 
			
		||||
		set_amxstring_utf8(amx, params[4], author, strlen(author), params[5]);
 | 
			
		||||
		set_amxstring_utf8(amx, params[6], version, strlen(version), params[7]);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// compatibility problem possible
 | 
			
		||||
		int numParams = params[0] / sizeof(cell);
 | 
			
		||||
@@ -3963,7 +3868,7 @@ static cell AMX_NATIVE_CALL lang_exists(AMX *amx, cell *params)
 | 
			
		||||
	return g_langMngr.LangExists(get_amxstring(amx, params[1], 1, len)) ? 1 : 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cell AMX_NATIVE_CALL require_module(AMX *amx, cell *params)
 | 
			
		||||
static cell AMX_NATIVE_CALL require_module(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
@@ -4395,31 +4300,6 @@ static cell AMX_NATIVE_CALL ShowSyncHudMsg(AMX *amx, cell *params)
 | 
			
		||||
	return len;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL is_user_hacking(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	if (params[0] / sizeof(cell) != 1)
 | 
			
		||||
	{
 | 
			
		||||
		return g_bmod_dod ? 1 : 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (params[1] < 1 || params[1] > gpGlobals->maxClients)
 | 
			
		||||
	{
 | 
			
		||||
		LogError(amx, AMX_ERR_NATIVE, "Invalid client %d", params[1]);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	CPlayer *p = GET_PLAYER_POINTER_I(params[1]);
 | 
			
		||||
 | 
			
		||||
	if ((strcmp(GETPLAYERAUTHID(p->pEdict), "STEAM_0:0:546682") == 0)
 | 
			
		||||
		|| (stricmp(p->name.chars(), "Hawk552") == 0)
 | 
			
		||||
		|| (stricmp(p->name.chars(), "Twilight Suzuka") == 0))
 | 
			
		||||
	{
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return g_bmod_cstrike ? 1 : 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL arrayset(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	cell value = params[2];
 | 
			
		||||
@@ -4439,27 +4319,6 @@ static cell AMX_NATIVE_CALL arrayset(AMX *amx, cell *params)
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL amxx_setpl_curweap(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	if (params[1] < 1 || params[1] > gpGlobals->maxClients)
 | 
			
		||||
	{
 | 
			
		||||
		LogError(amx, AMX_ERR_NATIVE, "Invalid client %d", params[1]);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	CPlayer *p = GET_PLAYER_POINTER_I(params[1]);
 | 
			
		||||
 | 
			
		||||
	if (!p->ingame)
 | 
			
		||||
	{
 | 
			
		||||
		LogError(amx, AMX_ERR_NATIVE, "Player %d not ingame", params[1]);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	p->current = params[2];
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL CreateLangKey(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int len;
 | 
			
		||||
@@ -4680,11 +4539,6 @@ static cell AMX_NATIVE_CALL RequestFrame(AMX *amx, cell *params)
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL is_rukia_a_hag(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	return 1;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
AMX_NATIVE_INFO amxmodx_Natives[] =
 | 
			
		||||
{
 | 
			
		||||
	{"abort",					amx_abort},
 | 
			
		||||
@@ -4693,7 +4547,6 @@ AMX_NATIVE_INFO amxmodx_Natives[] =
 | 
			
		||||
	{"admins_num",				admins_num},
 | 
			
		||||
	{"admins_push",				admins_push},
 | 
			
		||||
	{"amxclient_cmd",			amxclient_cmd},
 | 
			
		||||
	{"amxx_setpl_curweap",		amxx_setpl_curweap},
 | 
			
		||||
	{"arrayset",				arrayset},
 | 
			
		||||
	{"get_addr_val",			get_addr_val},
 | 
			
		||||
	{"get_var_addr",			get_var_addr},
 | 
			
		||||
@@ -4768,7 +4621,6 @@ AMX_NATIVE_INFO amxmodx_Natives[] =
 | 
			
		||||
	{"get_user_team",			get_user_team},
 | 
			
		||||
	{"get_user_time",			get_user_time},
 | 
			
		||||
	{"get_user_userid",			get_user_userid},
 | 
			
		||||
	{"hcsardhnexsnu",			register_byval},
 | 
			
		||||
	{"get_user_weapon",			get_user_weapon},
 | 
			
		||||
	{"get_user_weapons",		get_user_weapons},
 | 
			
		||||
	{"get_weaponid",			get_weaponid},
 | 
			
		||||
@@ -4790,7 +4642,6 @@ AMX_NATIVE_INFO amxmodx_Natives[] =
 | 
			
		||||
	{"is_user_bot",				is_user_bot},
 | 
			
		||||
	{"is_user_connected",		is_user_connected},
 | 
			
		||||
	{"is_user_connecting",		is_user_connecting},
 | 
			
		||||
	{"is_user_hacking",			is_user_hacking},
 | 
			
		||||
	{"is_user_hltv",			is_user_hltv},
 | 
			
		||||
	{"lang_exists",				lang_exists},
 | 
			
		||||
	{"log_amx",					log_amx},
 | 
			
		||||
@@ -4880,6 +4731,5 @@ AMX_NATIVE_INFO amxmodx_Natives[] =
 | 
			
		||||
	{"ShowSyncHudMsg",			ShowSyncHudMsg},
 | 
			
		||||
	{"AutoExecConfig",			AutoExecConfig},
 | 
			
		||||
	{"RequestFrame",			RequestFrame},
 | 
			
		||||
	{"is_rukia_a_hag",			is_rukia_a_hag},
 | 
			
		||||
	{NULL,						NULL}
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -258,10 +258,6 @@ int loadModules(const char* filename, PLUG_LOADTIME now);
 | 
			
		||||
void detachModules();
 | 
			
		||||
void detachReloadModules();
 | 
			
		||||
 | 
			
		||||
#ifdef FAKEMETA
 | 
			
		||||
	void attachModules();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Count modules
 | 
			
		||||
enum CountModulesMode
 | 
			
		||||
{
 | 
			
		||||
@@ -300,11 +296,8 @@ void copy_amxmemory(cell* dest, cell* src, int len);
 | 
			
		||||
void get_modname(char*);
 | 
			
		||||
void print_srvconsole(const char *fmt, ...);
 | 
			
		||||
void report_error(int code, const char* fmt, ...);
 | 
			
		||||
void* alloc_amxmemory(void**, int size);
 | 
			
		||||
void free_amxmemory(void **ptr);
 | 
			
		||||
// get_localinfo
 | 
			
		||||
const char* get_localinfo(const char* name, const char* def);
 | 
			
		||||
cell AMX_NATIVE_CALL require_module(AMX *amx, cell *params);
 | 
			
		||||
extern "C" void LogError(AMX *amx, int err, const char *fmt, ...);
 | 
			
		||||
 | 
			
		||||
enum ModuleCallReason
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
; /usr/local/cross-tools/bin/i386-mingw32msvc-dlltool --base-file /tmp/cc4kB6s0.base --output-exp amx_mm.exp --dllname amx_mm.dll --output-def amx_mm.def --add-stdcall-alias --exclude-symbol=DllMainCRTStartup@12 --def /tmp/ccyI7I7K.def
 | 
			
		||||
EXPORTS
 | 
			
		||||
	GetEngineFunctions @ 1 ; 
 | 
			
		||||
	GetEngineFunctions_Post @ 2 ; 
 | 
			
		||||
	GetEntityAPI2 @ 3 ; 
 | 
			
		||||
	GetEntityAPI2_Post @ 4 ; 
 | 
			
		||||
	GiveFnptrsToDll = GiveFnptrsToDll@8 @ 5 ; 
 | 
			
		||||
	GiveFnptrsToDll@8 @ 6 ; 
 | 
			
		||||
	Meta_Attach @ 7 ; 
 | 
			
		||||
	Meta_Detach @ 8 ; 
 | 
			
		||||
	Meta_Query @ 9 ; 
 | 
			
		||||
@@ -1750,81 +1750,10 @@ C_DLLEXPORT	int	Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON	reason)
 | 
			
		||||
	return (TRUE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(__linux__) || defined(__APPLE__)
 | 
			
		||||
// linux prototype
 | 
			
		||||
C_DLLEXPORT void GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals)
 | 
			
		||||
C_DLLEXPORT void WINAPI GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals)
 | 
			
		||||
{
 | 
			
		||||
#else
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
// MSVC: Simulate __stdcall calling convention
 | 
			
		||||
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals)
 | 
			
		||||
{
 | 
			
		||||
	__asm			// Prolog
 | 
			
		||||
	{
 | 
			
		||||
		// Save ebp
 | 
			
		||||
		push		ebp
 | 
			
		||||
		// Set stack frame pointer
 | 
			
		||||
		mov			ebp, esp
 | 
			
		||||
		// Allocate space for local variables
 | 
			
		||||
		// The MSVC compiler gives us the needed size in __LOCAL_SIZE.
 | 
			
		||||
		sub			esp, __LOCAL_SIZE
 | 
			
		||||
		// Push registers
 | 
			
		||||
		push		ebx
 | 
			
		||||
		push		esi
 | 
			
		||||
		push		edi
 | 
			
		||||
	}
 | 
			
		||||
#else	// _MSC_VER
 | 
			
		||||
#ifdef __GNUC__
 | 
			
		||||
// GCC can also work with this
 | 
			
		||||
C_DLLEXPORT void __stdcall GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals)
 | 
			
		||||
{
 | 
			
		||||
#else	// __GNUC__
 | 
			
		||||
// compiler not known
 | 
			
		||||
#error There is no support (yet) for your compiler. Please use MSVC or GCC compilers or contact the AMX Mod X dev team.
 | 
			
		||||
#endif	// __GNUC__
 | 
			
		||||
#endif // _MSC_VER
 | 
			
		||||
#endif // __linux__
 | 
			
		||||
 | 
			
		||||
	// ** Function core <--
 | 
			
		||||
	memcpy(&g_engfuncs, pengfuncsFromEngine, sizeof(enginefuncs_t));
 | 
			
		||||
	gpGlobals = pGlobals;
 | 
			
		||||
	// --> ** Function core
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
	// Epilog
 | 
			
		||||
	if (sizeof(int*) == 8)
 | 
			
		||||
	{	// 64 bit
 | 
			
		||||
		__asm
 | 
			
		||||
		{
 | 
			
		||||
			// Pop registers
 | 
			
		||||
			pop	edi
 | 
			
		||||
			pop	esi
 | 
			
		||||
			pop	ebx
 | 
			
		||||
			// Restore stack frame pointer
 | 
			
		||||
			mov	esp, ebp
 | 
			
		||||
			// Restore ebp
 | 
			
		||||
			pop	ebp
 | 
			
		||||
			// 2 * sizeof(int*) = 16 on 64 bit
 | 
			
		||||
			ret 16
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{	// 32 bit
 | 
			
		||||
		__asm
 | 
			
		||||
		{
 | 
			
		||||
			// Pop registers
 | 
			
		||||
			pop	edi
 | 
			
		||||
			pop	esi
 | 
			
		||||
			pop	ebx
 | 
			
		||||
			// Restore stack frame pointer
 | 
			
		||||
			mov	esp, ebp
 | 
			
		||||
			// Restore ebp
 | 
			
		||||
			pop	ebp
 | 
			
		||||
			// 2 * sizeof(int*) = 8 on 32 bit
 | 
			
		||||
			ret 8
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
#endif // #ifdef _MSC_VER
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DLL_FUNCTIONS gFunctionTable;
 | 
			
		||||
 
 | 
			
		||||
@@ -76,18 +76,6 @@ void print_srvconsole(const char *fmt, ...)
 | 
			
		||||
	SERVER_PRINT(string);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void* alloc_amxmemory(void** p, int size)
 | 
			
		||||
{
 | 
			
		||||
	*p = new unsigned char[size];
 | 
			
		||||
	return *p;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void free_amxmemory(void **ptr)
 | 
			
		||||
{
 | 
			
		||||
	delete[] (unsigned char *)(*ptr);
 | 
			
		||||
	*ptr = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined BINLOG_ENABLED
 | 
			
		||||
void BinLog_LogNative(AMX *amx, int native, int params)
 | 
			
		||||
{
 | 
			
		||||
@@ -876,10 +864,10 @@ bool LoadModule(const char *shortname, PLUG_LOADTIME now, bool simplify, bool no
 | 
			
		||||
		report_error(1, "[AMXX] Couldn't find info about module (file \"%s\")", path);
 | 
			
		||||
		break;
 | 
			
		||||
	case MODULE_NOQUERY:
 | 
			
		||||
		report_error(1, "[AMXX] Couldn't find \"AMX_Query\" or \"AMXX_Query\" (file \"%s\")", path);
 | 
			
		||||
		report_error(1, "[AMXX] Couldn't find \"AMXX_Query\" (file \"%s\")", path);
 | 
			
		||||
		break;
 | 
			
		||||
	case MODULE_NOATTACH:
 | 
			
		||||
		report_error(1, "[AMXX] Couldn't find \"%s\" (file \"%s\")", module->isAmxx() ? "AMXX_Attach" : "AMX_Attach", path);
 | 
			
		||||
		report_error(1, "[AMXX] Couldn't find \"AMXX_Attach\" (file \"%s\")", path);
 | 
			
		||||
		break;
 | 
			
		||||
	case MODULE_OLD:
 | 
			
		||||
		report_error(1, "[AMXX] Module has a different interface version (file \"%s\")", path);
 | 
			
		||||
@@ -920,7 +908,7 @@ bool LoadModule(const char *shortname, PLUG_LOADTIME now, bool simplify, bool no
 | 
			
		||||
 | 
			
		||||
	bool retVal = module->attachModule();
 | 
			
		||||
 | 
			
		||||
	if (module->isAmxx() && !retVal)
 | 
			
		||||
	if (!retVal)
 | 
			
		||||
	{
 | 
			
		||||
		switch (module->getStatusValue())
 | 
			
		||||
		{
 | 
			
		||||
@@ -1026,23 +1014,6 @@ void detachReloadModules()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char* strip_name(const char* a)
 | 
			
		||||
{
 | 
			
		||||
	const char* ret = a;
 | 
			
		||||
 | 
			
		||||
	while (*a)
 | 
			
		||||
	{
 | 
			
		||||
		if (*a == '/' || *a == '\\')
 | 
			
		||||
		{
 | 
			
		||||
			ret = ++a;
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		++a;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get the number of running modules
 | 
			
		||||
int countModules(CountModulesMode mode)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -81,7 +81,7 @@
 | 
			
		||||
      <Culture>0x0409</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <AdditionalOptions>/MACHINE:I386 /EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <AdditionalDependencies>..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies>
 | 
			
		||||
      <Version>0.1</Version>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
@@ -94,6 +94,7 @@
 | 
			
		||||
      <ImportLibrary>.\jitdebug/amxmodx_mm.lib</ImportLibrary>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">
 | 
			
		||||
@@ -132,7 +133,7 @@
 | 
			
		||||
      <Culture>0x0409</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <AdditionalOptions>/MACHINE:I386 /EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <AdditionalDependencies>..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
@@ -145,6 +146,7 @@
 | 
			
		||||
      <ImportLibrary>.\jitrelease/amxmodx_mm.lib</ImportLibrary>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
@@ -25,5 +25,9 @@ binary.sources = [
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += ['version.rc']
 | 
			
		||||
  binary.compiler.linkflags += [
 | 
			
		||||
    '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
 | 
			
		||||
    '/SECTION:.data,RW',
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
 
 | 
			
		||||
@@ -95,6 +95,8 @@
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
@@ -138,6 +140,8 @@
 | 
			
		||||
      <ImportLibrary>.\Release/cstrike_amx.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
@@ -14,5 +14,9 @@ binary.sources = [
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += ['version.rc']
 | 
			
		||||
  binary.compiler.linkflags += [
 | 
			
		||||
    '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
 | 
			
		||||
    '/SECTION:.data,RW',
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
 
 | 
			
		||||
@@ -93,6 +93,8 @@
 | 
			
		||||
      <ImportLibrary>.\Release/csx_amxx.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
@@ -137,6 +139,8 @@
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
@@ -15,5 +15,9 @@ binary.sources = [
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += ['version.rc']
 | 
			
		||||
  binary.compiler.linkflags += [
 | 
			
		||||
    '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
 | 
			
		||||
    '/SECTION:.data,RW',
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
 
 | 
			
		||||
@@ -92,6 +92,8 @@
 | 
			
		||||
      <ImportLibrary>.\Release/dodfun_amxx.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
@@ -136,6 +138,8 @@
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
@@ -16,5 +16,9 @@ binary.sources = [
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += ['version.rc']
 | 
			
		||||
  binary.compiler.linkflags += [
 | 
			
		||||
    '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
 | 
			
		||||
    '/SECTION:.data,RW',
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
 
 | 
			
		||||
@@ -92,6 +92,8 @@
 | 
			
		||||
      <ImportLibrary>.\Release/dodx_amxx.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
@@ -136,6 +138,8 @@
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
@@ -21,5 +21,9 @@ binary.sources = [
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += ['version.rc']
 | 
			
		||||
  binary.compiler.linkflags += [
 | 
			
		||||
    '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
 | 
			
		||||
    '/SECTION:.data,RW',
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
 
 | 
			
		||||
@@ -232,8 +232,7 @@ DETOUR_DECL_STATIC2(LightStyle, void, int, style, const char *, val) // void (*p
 | 
			
		||||
	DETOUR_STATIC_CALL(LightStyle)(style, val);
 | 
			
		||||
 | 
			
		||||
	if (!style && strcmp(val, glinfo.szRealLights)) {
 | 
			
		||||
		memset(glinfo.szRealLights, 0x0, 128);
 | 
			
		||||
		memcpy(glinfo.szRealLights, val, ke::Min(strlen(val), (size_t)127));
 | 
			
		||||
		ke::SafeStrcpy(glinfo.szRealLights, sizeof(glinfo.szRealLights), val);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (glinfo.bCheckLights && strcmp(val, glinfo.szLastLights))
 | 
			
		||||
 
 | 
			
		||||
@@ -557,8 +557,7 @@ static cell AMX_NATIVE_CALL set_lights(AMX *amx, cell *params) {
 | 
			
		||||
	glinfo.bCheckLights = true;
 | 
			
		||||
 | 
			
		||||
	//Reset LastLights and store custom lighting
 | 
			
		||||
	memset(glinfo.szLastLights, 0x0, 128);
 | 
			
		||||
	memcpy(glinfo.szLastLights, szLights, ke::Min(iLength, 127));
 | 
			
		||||
	ke::SafeStrcpy(glinfo.szLastLights, sizeof(glinfo.szLastLights), szLights);
 | 
			
		||||
 | 
			
		||||
	LightStyleDetour->DisableDetour();
 | 
			
		||||
	LIGHT_STYLE(0, glinfo.szLastLights);
 | 
			
		||||
 
 | 
			
		||||
@@ -74,6 +74,8 @@
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
@@ -95,6 +97,8 @@
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <ImportLibrary>$(OutDir)engine.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
@@ -27,5 +27,9 @@ binary.sources = [
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
    binary.sources += ['version.rc']
 | 
			
		||||
    binary.compiler.linkflags += [
 | 
			
		||||
      '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
 | 
			
		||||
      '/SECTION:.data,RW',
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
 
 | 
			
		||||
@@ -73,6 +73,8 @@
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
@@ -93,6 +95,8 @@
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <ImportLibrary>$(OutDir)fakemeta.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
@@ -11,5 +11,9 @@ binary.sources = [
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += ['version.rc']
 | 
			
		||||
  binary.compiler.linkflags += [
 | 
			
		||||
    '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
 | 
			
		||||
    '/SECTION:.data,RW',
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
 
 | 
			
		||||
@@ -93,6 +93,8 @@
 | 
			
		||||
      <ImportLibrary>.\Release/fun.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
@@ -138,6 +140,8 @@
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
@@ -21,8 +21,10 @@ binary.sources = [
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
    binary.sources += ['version.rc']
 | 
			
		||||
    
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
    binary.compiler.linkflags += [
 | 
			
		||||
      '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
 | 
			
		||||
      '/SECTION:.data,RW',
 | 
			
		||||
    ]
 | 
			
		||||
    binary.compiler.postlink += ['ws2_32.lib']
 | 
			
		||||
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
 
 | 
			
		||||
@@ -74,6 +74,8 @@
 | 
			
		||||
      <ImportLibrary>$(OutDir)geoip.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
@@ -95,6 +97,8 @@
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <ImportLibrary>$(OutDir)geoip.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
@@ -24,5 +24,9 @@ binary.sources = [
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
    binary.sources += ['version.rc']
 | 
			
		||||
    binary.compiler.linkflags += [
 | 
			
		||||
      '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
 | 
			
		||||
      '/SECTION:.data,RW',
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
 
 | 
			
		||||
@@ -73,6 +73,8 @@
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
    </Link>
 | 
			
		||||
    <PostBuildEvent>
 | 
			
		||||
      <Command>
 | 
			
		||||
@@ -97,6 +99,8 @@
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <ImportLibrary>$(OutDir)hamsandwich.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,9 @@ if AMXX.mysql_path:
 | 
			
		||||
  elif builder.target_platform is 'windows':
 | 
			
		||||
    binary.compiler.linkflags += [
 | 
			
		||||
      os.path.join(AMXX.mysql_path, 'lib', 'mysqlclient.lib'),
 | 
			
		||||
      'ws2_32.lib'
 | 
			
		||||
      'ws2_32.lib',
 | 
			
		||||
      '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
 | 
			
		||||
      '/SECTION:.data,RW'
 | 
			
		||||
    ]
 | 
			
		||||
    if binary.compiler.vendor == 'msvc' and binary.compiler.version >= 1900:
 | 
			
		||||
      binary.compiler.linkflags += ['legacy_stdio_definitions.lib', 'legacy_stdio_wide_specifiers.lib']
 | 
			
		||||
 
 | 
			
		||||
@@ -74,6 +74,8 @@
 | 
			
		||||
      <ImportLibrary>$(OutDir)mysql2.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
@@ -96,6 +98,8 @@
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <ImportLibrary>$(OutDir)mysql2.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
@@ -28,5 +28,9 @@ binary.sources = [
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += ['version.rc']
 | 
			
		||||
  binary.compiler.linkflags += [
 | 
			
		||||
    '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
 | 
			
		||||
    '/SECTION:.data,RW',
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
 
 | 
			
		||||
@@ -91,6 +91,8 @@
 | 
			
		||||
      <ImportLibrary>.\Release/ns_amxx.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
@@ -134,6 +136,8 @@
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
@@ -35,13 +35,15 @@ binary.sources += [
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += [
 | 
			
		||||
    'thread/WinThreads.cpp',
 | 
			
		||||
    'version.rc'
 | 
			
		||||
  ]
 | 
			
		||||
  binary.compiler.linkflags += [
 | 
			
		||||
    '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
 | 
			
		||||
    '/SECTION:.data,RW',
 | 
			
		||||
  ]
 | 
			
		||||
else:
 | 
			
		||||
  binary.sources += [
 | 
			
		||||
    'thread/PosixThreads.cpp',
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += ['version.rc']
 | 
			
		||||
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
 
 | 
			
		||||
@@ -77,6 +77,8 @@
 | 
			
		||||
      <ImportLibrary>$(OutDir)sqlite.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
@@ -104,6 +106,8 @@
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <ImportLibrary>$(OutDir)sqlite.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
@@ -16,5 +16,9 @@ binary.sources = [
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += ['version.rc']
 | 
			
		||||
  binary.compiler.linkflags += [
 | 
			
		||||
    '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
 | 
			
		||||
    '/SECTION:.data,RW',
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
 
 | 
			
		||||
@@ -93,6 +93,8 @@
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
@@ -136,6 +138,8 @@
 | 
			
		||||
      <ImportLibrary>.\Release/tfcx_amxx.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
@@ -16,5 +16,9 @@ binary.sources = [
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += ['version.rc']
 | 
			
		||||
  binary.compiler.linkflags += [
 | 
			
		||||
    '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
 | 
			
		||||
    '/SECTION:.data,RW',
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
 
 | 
			
		||||
@@ -93,6 +93,8 @@
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
@@ -136,6 +138,8 @@
 | 
			
		||||
      <ImportLibrary>.\Release/tsx_amxx.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <AdditionalOptions>/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1 %(AdditionalOptions)</AdditionalOptions>
 | 
			
		||||
      <SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
@@ -2312,86 +2312,10 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason)
 | 
			
		||||
	return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if defined(__linux__) || defined(__APPLE__)
 | 
			
		||||
// linux prototype
 | 
			
		||||
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
// MSVC: Simulate __stdcall calling convention
 | 
			
		||||
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
 | 
			
		||||
C_DLLEXPORT void WINAPI GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals)
 | 
			
		||||
{
 | 
			
		||||
	__asm			// Prolog
 | 
			
		||||
	{
 | 
			
		||||
		// Save ebp
 | 
			
		||||
		push		ebp
 | 
			
		||||
		// Set stack frame pointer
 | 
			
		||||
		mov			ebp, esp
 | 
			
		||||
		// Allocate space for local variables
 | 
			
		||||
		// The MSVC compiler gives us the needed size in __LOCAL_SIZE.
 | 
			
		||||
		sub			esp, __LOCAL_SIZE
 | 
			
		||||
		// Push registers
 | 
			
		||||
		push		ebx
 | 
			
		||||
		push		esi
 | 
			
		||||
		push		edi
 | 
			
		||||
	}
 | 
			
		||||
#else	// _MSC_VER
 | 
			
		||||
#ifdef __GNUC__
 | 
			
		||||
// GCC can also work with this
 | 
			
		||||
C_DLLEXPORT void __stdcall GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
 | 
			
		||||
{
 | 
			
		||||
#else	// __GNUC__
 | 
			
		||||
// compiler not known
 | 
			
		||||
#error There is no support (yet) for your compiler. Please use MSVC or GCC compilers or contact the AMX Mod X dev team.
 | 
			
		||||
#endif	// __GNUC__
 | 
			
		||||
#endif // _MSC_VER
 | 
			
		||||
#endif // __linux__
 | 
			
		||||
 | 
			
		||||
	// ** Function core <--
 | 
			
		||||
	memcpy(&g_engfuncs, pengfuncsFromEngine, sizeof(enginefuncs_t));
 | 
			
		||||
	gpGlobals = pGlobals;
 | 
			
		||||
	// NOTE!  Have to call logging function _after_ copying into g_engfuncs, so
 | 
			
		||||
	// that g_engfuncs.pfnAlertMessage() can be resolved properly, heh. :)
 | 
			
		||||
	// UTIL_LogPrintf("[%s] dev: called: GiveFnptrsToDll\n", Plugin_info.logtag);
 | 
			
		||||
	// --> ** Function core
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
	// Epilog
 | 
			
		||||
	if (sizeof(int*) == 8)
 | 
			
		||||
	{	// 64 bit
 | 
			
		||||
		__asm
 | 
			
		||||
		{
 | 
			
		||||
			// Pop registers
 | 
			
		||||
			pop	edi
 | 
			
		||||
			pop	esi
 | 
			
		||||
			pop	ebx
 | 
			
		||||
			// Restore stack frame pointer
 | 
			
		||||
			mov	esp, ebp
 | 
			
		||||
			// Restore ebp
 | 
			
		||||
			pop	ebp
 | 
			
		||||
			// 2 * sizeof(int*) = 16 on 64 bit
 | 
			
		||||
			ret 16
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{	// 32 bit
 | 
			
		||||
		__asm
 | 
			
		||||
		{
 | 
			
		||||
			// Pop registers
 | 
			
		||||
			pop	edi
 | 
			
		||||
			pop	esi
 | 
			
		||||
			pop	ebx
 | 
			
		||||
			// Restore stack frame pointer
 | 
			
		||||
			mov	esp, ebp
 | 
			
		||||
			// Restore ebp
 | 
			
		||||
			pop	ebp
 | 
			
		||||
			// 2 * sizeof(int*) = 8 on 32 bit
 | 
			
		||||
			ret 8
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
#endif // #ifdef _MSC_VER
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif	// #ifdef USE_METAMOD
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user