jit refactoring branch
--HG-- branch : refac-jit extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/branches/refac-jit%402369
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
# (C)2004-2008 SourceMod Development Team
|
||||
# Makefile written by David "BAILOPAN" Anderson
|
||||
|
||||
SMSDK = ..
|
||||
SRCDS_BASE = ~/srcds
|
||||
HL2SDK_ORIG = ../../../hl2sdk
|
||||
HL2SDK_OB = ../../../hl2sdk-ob
|
||||
SOURCEMM14 = ../../../sourcemm-1.4
|
||||
SOURCEMM16 = ../../../sourcemm-1.6
|
||||
|
||||
#####################################
|
||||
### EDIT BELOW FOR OTHER PROJECTS ###
|
||||
#####################################
|
||||
|
||||
PROJECT = stub_mm
|
||||
|
||||
OBJECTS = stub_mm.cpp sm_ext.cpp sm_sdk_config.cpp stub_util.cpp
|
||||
|
||||
##############################################
|
||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
||||
##############################################
|
||||
|
||||
C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -pipe -fno-strict-aliasing
|
||||
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
|
||||
C_GCC4_FLAGS = -fvisibility=hidden
|
||||
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
|
||||
CPP = gcc-4.1
|
||||
|
||||
override ENGSET = false
|
||||
ifeq "$(ENGINE)" "original"
|
||||
HL2SDK = $(HL2SDK_ORIG)
|
||||
HL2PUB = $(HL2SDK_ORIG)/public
|
||||
HL2LIB = $(HL2SDK_ORIG)/linux_sdk
|
||||
METAMOD = $(SOURCEMM14)
|
||||
INCLUDE += -I$(HL2SDK)/public/dlls
|
||||
SRCDS = $(SRCDS_BASE)
|
||||
override ENGSET = true
|
||||
endif
|
||||
ifeq "$(ENGINE)" "orangebox"
|
||||
HL2SDK = $(HL2SDK_OB)
|
||||
HL2PUB = $(HL2SDK_OB)/public
|
||||
HL2LIB = $(HL2SDK_OB)/linux_sdk
|
||||
CFLAGS += -DORANGEBOX_BUILD
|
||||
METAMOD = $(SOURCEMM16)
|
||||
INCLUDE += -I$(HL2SDK)/public/game/server
|
||||
SRCDS = $(SRCDS_BASE)/orangebox
|
||||
override ENGSET = true
|
||||
endif
|
||||
|
||||
LINK = vstdlib_i486.so tier0_i486.so -static-libgcc
|
||||
|
||||
INCLUDE += -I. -I.. -I$(HL2PUB) -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \
|
||||
-I$(METAMOD) -I$(METAMOD)/sourcehook -I$(METAMOD)/sourcemm -I$(SMSDK) -I$(SMSDK)/jit \
|
||||
-I$(SMSDK)/jit/x86 -I$(SMSDK)/extensions -I$(SMSDK)/sourcepawn
|
||||
|
||||
CFLAGS += -D_LINUX -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \
|
||||
-D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -mfpmath=sse \
|
||||
-msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32
|
||||
CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti
|
||||
|
||||
################################################
|
||||
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
||||
################################################
|
||||
|
||||
ifeq "$(DEBUG)" "true"
|
||||
BIN_DIR = Debug.$(ENGINE)
|
||||
CFLAGS += $(C_DEBUG_FLAGS)
|
||||
else
|
||||
BIN_DIR = Release.$(ENGINE)
|
||||
CFLAGS += $(C_OPT_FLAGS)
|
||||
endif
|
||||
|
||||
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
||||
ifeq "$(GCC_VERSION)" "4"
|
||||
CFLAGS += $(C_GCC4_FLAGS)
|
||||
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
||||
endif
|
||||
|
||||
BINARY = $(PROJECT)_i486.so
|
||||
|
||||
OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
||||
|
||||
$(BIN_DIR)/%.o: %.cpp
|
||||
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
||||
|
||||
all: check
|
||||
mkdir -p $(BIN_DIR)
|
||||
ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so;
|
||||
ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so;
|
||||
$(MAKE) -f Makefile mms_ext
|
||||
|
||||
check:
|
||||
if [ "$(ENGSET)" == "false" ]; then \
|
||||
echo "You must supply ENGINE=orangebox or ENGINE=original"; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
mms_ext: check $(OBJ_LINUX)
|
||||
$(CPP) $(INCLUDE) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
||||
|
||||
debug:
|
||||
$(MAKE) -f Makefile all DEBUG=true
|
||||
|
||||
default: all
|
||||
|
||||
clean: check
|
||||
rm -rf $(BIN_DIR)/*.o
|
||||
rm -rf $(BIN_DIR)/$(BINARY)
|
||||
@@ -0,0 +1,176 @@
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* =============================================================================
|
||||
* SourceMod Extension Code for Metamod:Source
|
||||
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||
* =============================================================================
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||
* Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||
* this exception to all derivative works. AlliedModders LLC defines further
|
||||
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||
* or <http://www.sourcemod.net/license.php>.
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "stub_mm.h"
|
||||
#include "stub_util.h"
|
||||
#include "sm_ext.h"
|
||||
|
||||
MyExtension g_SMExt;
|
||||
|
||||
bool SM_LoadExtension(char *error, size_t maxlength)
|
||||
{
|
||||
if ((smexts = (IExtensionManager *)g_SMAPI->MetaFactory(
|
||||
SOURCEMOD_INTERFACE_EXTENSIONS,
|
||||
NULL,
|
||||
NULL))
|
||||
== NULL)
|
||||
{
|
||||
if (error && maxlength)
|
||||
{
|
||||
UTIL_Format(error, maxlength, SOURCEMOD_INTERFACE_EXTENSIONS " interface not found");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* This could be more dynamic */
|
||||
char path[256];
|
||||
g_SMAPI->PathFormat(path,
|
||||
sizeof(path),
|
||||
"addons/myplugin/bin/myplugin%s",
|
||||
#if defined __linux__
|
||||
"_i486.so"
|
||||
#else
|
||||
".dll"
|
||||
#endif
|
||||
);
|
||||
|
||||
if ((myself = smexts->LoadExternal(&g_SMExt,
|
||||
path,
|
||||
"myplugin_mm.ext",
|
||||
error,
|
||||
maxlength))
|
||||
== NULL)
|
||||
{
|
||||
SM_UnsetInterfaces();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void SM_UnloadExtension()
|
||||
{
|
||||
smexts->UnloadExtension(myself);
|
||||
}
|
||||
|
||||
bool MyExtension::OnExtensionLoad(IExtension *me,
|
||||
IShareSys *sys,
|
||||
char *error,
|
||||
size_t maxlength,
|
||||
bool late)
|
||||
{
|
||||
sharesys = sys;
|
||||
myself = me;
|
||||
|
||||
/* Get the default interfaces from our configured SDK header */
|
||||
if (!SM_AcquireInterfaces(error, maxlength))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void MyExtension::OnExtensionUnload()
|
||||
{
|
||||
/* Clean up any resources here, and more importantly, make sure
|
||||
* any listeners/hooks into SourceMod are totally removed, as well
|
||||
* as data structures like handle types and forwards.
|
||||
*/
|
||||
|
||||
//...
|
||||
|
||||
/* Make sure our pointers get NULL'd just in case */
|
||||
SM_UnsetInterfaces();
|
||||
}
|
||||
|
||||
void MyExtension::OnExtensionsAllLoaded()
|
||||
{
|
||||
/* Called once all extensions are marked as loaded.
|
||||
* This always called, and always called only once.
|
||||
*/
|
||||
}
|
||||
|
||||
void MyExtension::OnExtensionPauseChange(bool pause)
|
||||
{
|
||||
}
|
||||
|
||||
bool MyExtension::QueryRunning(char *error, size_t maxlength)
|
||||
{
|
||||
/* if something is required that can't be determined during the initial
|
||||
* load process, print a message here will show a helpful message to
|
||||
* users when they view the extension's info.
|
||||
*/
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MyExtension::IsMetamodExtension()
|
||||
{
|
||||
/* Must return false! */
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *MyExtension::GetExtensionName()
|
||||
{
|
||||
return mmsplugin->GetName();
|
||||
}
|
||||
|
||||
const char *MyExtension::GetExtensionURL()
|
||||
{
|
||||
return mmsplugin->GetURL();
|
||||
}
|
||||
|
||||
const char *MyExtension::GetExtensionTag()
|
||||
{
|
||||
return mmsplugin->GetLogTag();
|
||||
}
|
||||
|
||||
const char *MyExtension::GetExtensionAuthor()
|
||||
{
|
||||
return mmsplugin->GetAuthor();
|
||||
}
|
||||
|
||||
const char *MyExtension::GetExtensionVerString()
|
||||
{
|
||||
return mmsplugin->GetVersion();
|
||||
}
|
||||
|
||||
const char *MyExtension::GetExtensionDescription()
|
||||
{
|
||||
return mmsplugin->GetDescription();
|
||||
}
|
||||
|
||||
const char *MyExtension::GetExtensionDateString()
|
||||
{
|
||||
return mmsplugin->GetDate();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* =============================================================================
|
||||
* SourceMod Extension Code for Metamod:Source
|
||||
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||
* =============================================================================
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||
* Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||
* this exception to all derivative works. AlliedModders LLC defines further
|
||||
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||
* or <http://www.sourcemod.net/license.php>.
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE_SAMPLE_MMS_SOURCEMOD_EXTENSION_
|
||||
#define _INCLUDE_SAMPLE_MMS_SOURCEMOD_EXTENSION_
|
||||
|
||||
#include "sm_sdk_config.h"
|
||||
|
||||
using namespace SourceMod;
|
||||
|
||||
class MyExtension : public IExtensionInterface
|
||||
{
|
||||
public:
|
||||
virtual bool OnExtensionLoad(IExtension *me,
|
||||
IShareSys *sys,
|
||||
char *error,
|
||||
size_t maxlength,
|
||||
bool late);
|
||||
virtual void OnExtensionUnload();
|
||||
virtual void OnExtensionsAllLoaded();
|
||||
virtual void OnExtensionPauseChange(bool pause);
|
||||
virtual bool QueryRunning(char *error, size_t maxlength);
|
||||
virtual bool IsMetamodExtension();
|
||||
virtual const char *GetExtensionName();
|
||||
virtual const char *GetExtensionURL();
|
||||
virtual const char *GetExtensionTag();
|
||||
virtual const char *GetExtensionAuthor();
|
||||
virtual const char *GetExtensionVerString();
|
||||
virtual const char *GetExtensionDescription();
|
||||
virtual const char *GetExtensionDateString();
|
||||
};
|
||||
|
||||
bool SM_LoadExtension(char *error, size_t maxlength);
|
||||
void SM_UnloadExtension();
|
||||
|
||||
extern IShareSys *sharesys;
|
||||
extern IExtension *myself;
|
||||
extern MyExtension g_SMExt;
|
||||
|
||||
#endif //_INCLUDE_SAMPLE_MMS_SOURCEMOD_EXTENSION_
|
||||
|
||||
@@ -0,0 +1,190 @@
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* =============================================================================
|
||||
* SourceMod Extension Code for Metamod:Source
|
||||
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||
* =============================================================================
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||
* Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||
* this exception to all derivative works. AlliedModders LLC defines further
|
||||
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||
* or <http://www.sourcemod.net/license.php>.
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#include "sm_sdk_config.h"
|
||||
|
||||
using namespace SourceMod;
|
||||
|
||||
bool SM_AcquireInterfaces(char *error, size_t maxlength)
|
||||
{
|
||||
SM_FIND_IFACE_OR_FAIL(SOURCEMOD, sm_main, error, maxlength);
|
||||
|
||||
#if defined SMEXT_ENABLE_FORWARDSYS
|
||||
SM_FIND_IFACE_OR_FAIL(FORWARDMANAGER, sm_forwards, error, maxlength);
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_HANDLESYS
|
||||
SM_FIND_IFACE_OR_FAIL(HANDLESYSTEM, sm_handlesys, error, maxlength);
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_PLAYERHELPERS
|
||||
SM_FIND_IFACE_OR_FAIL(PLAYERMANAGER, sm_players, error, maxlength);
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_DBMANAGER
|
||||
SM_FIND_IFACE_OR_FAIL(DBI, sm_dbi, error, maxlength);
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_GAMECONF
|
||||
SM_FIND_IFACE_OR_FAIL(GAMECONFIG, sm_gameconfs, error, maxlength);
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_MEMUTILS
|
||||
SM_FIND_IFACE_OR_FAIL(MEMORYUTILS, sm_memutils, error, maxlength);
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_GAMEHELPERS
|
||||
SM_FIND_IFACE_OR_FAIL(GAMEHELPERS, sm_gamehelpers, error, maxlength);
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_TIMERSYS
|
||||
SM_FIND_IFACE_OR_FAIL(TIMERSYS, sm_timersys, error, maxlength);
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_THREADER
|
||||
SM_FIND_IFACE_OR_FAIL(THREADER, sm_threader, error, maxlength);
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_LIBSYS
|
||||
SM_FIND_IFACE_OR_FAIL(LIBRARYSYS, sm_libsys, error, maxlength);
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_PLUGINSYS
|
||||
SM_FIND_IFACE_OR_FAIL(PLUGINSYSTEM, sm_plsys, error, maxlength);
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_MENUS
|
||||
SM_FIND_IFACE_OR_FAIL(MENUMANAGER, sm_menus, error, maxlength);
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_ADMINSYS
|
||||
SM_FIND_IFACE_OR_FAIL(ADMINSYS, sm_adminsys, error, maxlength);
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_TEXTPARSERS
|
||||
SM_FIND_IFACE_OR_FAIL(TEXTPARSERS, sm_text, error, maxlength);
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_TRANSLATOR
|
||||
SM_FIND_IFACE_OR_FAIL(TRANSLATOR, sm_translator, error, maxlength);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void SM_UnsetInterfaces()
|
||||
{
|
||||
myself = NULL;
|
||||
smexts = NULL;
|
||||
sharesys = NULL;
|
||||
sm_main = NULL;
|
||||
#if defined SMEXT_ENABLE_FORWARDSYS
|
||||
sm_forwards = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_HANDLESYS
|
||||
sm_handlesys = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_PLAYERHELPERS
|
||||
sm_players = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_DBMANAGER
|
||||
sm_dbi = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_GAMECONF
|
||||
sm_gameconfs = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_MEMUTILS
|
||||
sm_memutils = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_GAMEHELPERS
|
||||
sm_gamehelpers = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_TIMERSYS
|
||||
sm_timersys = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_THREADER
|
||||
sm_threader = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_LIBSYS
|
||||
sm_libsys = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_PLUGINSYS
|
||||
sm_plsys = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_MENUS
|
||||
sm_menus = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_ADMINSYS
|
||||
sm_adminsys = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_TEXTPARSERS
|
||||
sm_text = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_TRANSLATOR
|
||||
sm_translator = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
IExtension *myself = NULL;
|
||||
IExtensionManager *smexts = NULL;
|
||||
IShareSys *sharesys = NULL;
|
||||
SourceMod::ISourceMod *sm_main = NULL;
|
||||
#if defined SMEXT_ENABLE_FORWARDSYS
|
||||
SourceMod::IForwardManager *sm_forwards = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_HANDLESYS
|
||||
SourceMod::IHandleSys *sm_handlesys = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_PLAYERHELPERS
|
||||
SourceMod::IPlayerManager *sm_players = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_DBMANAGER
|
||||
SourceMod::IDBManager *sm_dbi = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_GAMECONF
|
||||
SourceMod::IGameConfigManager *sm_gameconfs = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_MEMUTILS
|
||||
SourceMod::IMemoryUtils *sm_memutils = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_GAMEHELPERS
|
||||
SourceMod::IGameHelpers *sm_gamehelpers = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_TIMERSYS
|
||||
SourceMod::ITimerSystem *sm_timersys = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_THREADER
|
||||
SourceMod::IThreader *sm_threader = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_LIBSYS
|
||||
SourceMod::ILibrarySys *sm_libsys = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_PLUGINSYS
|
||||
SourceMod::IPluginManager *sm_plsys = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_MENUS
|
||||
SourceMod::IMenuManager *sm_menus = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_ADMINSYS
|
||||
SourceMod::IAdminSystem *sm_adminsys = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_TEXTPARSERS
|
||||
SourceMod::ITextParsers *sm_text = NULL;
|
||||
#endif
|
||||
#if defined SMEXT_ENABLE_TRANSLATOR
|
||||
SourceMod::ITranslator *sm_translator = NULL;
|
||||
#endif
|
||||
@@ -0,0 +1,165 @@
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* =============================================================================
|
||||
* SourceMod Extension Code for Metamod:Source
|
||||
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||
* =============================================================================
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||
* Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||
* this exception to all derivative works. AlliedModders LLC defines further
|
||||
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||
* or <http://www.sourcemod.net/license.php>.
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE_SOURCEMOD_CONFIG_H_
|
||||
#define _INCLUDE_SOURCEMOD_CONFIG_H_
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
/**
|
||||
* @brief Acquires the interfaces enabled at the bottom of this header.
|
||||
*
|
||||
* @param error Buffer to store error message.
|
||||
* @param maxlength Maximum size of the error buffer.
|
||||
* @return True on success, false on failure.
|
||||
* On failure, a null-terminated string will be stored
|
||||
* in the error buffer, if the buffer is non-NULL and
|
||||
* greater than 0 bytes in size.
|
||||
*/
|
||||
bool SM_AcquireInterfaces(char *error, size_t maxlength);
|
||||
|
||||
/**
|
||||
* @brief Sets each acquired interface to NULL.
|
||||
*/
|
||||
void SM_UnsetInterfaces();
|
||||
|
||||
/**
|
||||
* Enable interfaces you want to use here by uncommenting lines.
|
||||
* These interfaces are all part of SourceMod's core.
|
||||
*/
|
||||
//#define SMEXT_ENABLE_FORWARDSYS
|
||||
//#define SMEXT_ENABLE_HANDLESYS
|
||||
//#define SMEXT_ENABLE_PLAYERHELPERS
|
||||
//#define SMEXT_ENABLE_DBMANAGER
|
||||
//#define SMEXT_ENABLE_GAMECONF
|
||||
//#define SMEXT_ENABLE_MEMUTILS
|
||||
//#define SMEXT_ENABLE_GAMEHELPERS
|
||||
//#define SMEXT_ENABLE_TIMERSYS
|
||||
//#define SMEXT_ENABLE_THREADER
|
||||
//#define SMEXT_ENABLE_LIBSYS
|
||||
//#define SMEXT_ENABLE_MENUS
|
||||
//#define SMEXT_ENABLE_ADTFACTORY
|
||||
//#define SMEXT_ENABLE_PLUGINSYS
|
||||
//#define SMEXT_ENABLE_ADMINSYS
|
||||
//#define SMEXT_ENABLE_TEXTPARSERS
|
||||
//#define SMEXT_ENABLE_TRANSLATOR
|
||||
|
||||
|
||||
/**
|
||||
* There is no need to edit below.
|
||||
*/
|
||||
|
||||
#include <IShareSys.h>
|
||||
#include <IExtensionSys.h>
|
||||
extern SourceMod::IExtension *myself;
|
||||
extern SourceMod::IExtensionManager *smexts;
|
||||
extern SourceMod::IShareSys *sharesys;
|
||||
|
||||
#include <ISourceMod.h>
|
||||
extern SourceMod::ISourceMod *sm_main;
|
||||
|
||||
#if defined SMEXT_ENABLE_FORWARDSYS
|
||||
#include <IForwardSys.h>
|
||||
extern SourceMod::IForwardManager *sm_forwards;
|
||||
#endif
|
||||
|
||||
#if defined SMEXT_ENABLE_HANDLESYS
|
||||
#include <IHandleSys.h>
|
||||
extern SourceMod::IHandleSys *sm_handlesys;
|
||||
#endif
|
||||
|
||||
#if defined SMEXT_ENABLE_PLAYERHELPERS
|
||||
#include <IPlayerHelpers.h>
|
||||
extern SourceMod::IPlayerManager *sm_players;
|
||||
#endif
|
||||
|
||||
#if defined SMEXT_ENABLE_DBMANAGER
|
||||
#include <IDBDriver.h>
|
||||
extern SourceMod::IDBManager *sm_dbi;
|
||||
#endif
|
||||
|
||||
#if defined SMEXT_ENABLE_GAMECONF
|
||||
#include <IGameConfigs.h>
|
||||
extern SourceMod::IGameConfigManager *sm_gameconfs;
|
||||
#endif
|
||||
|
||||
#if defined SMEXT_ENABLE_MEMUTILS
|
||||
#include <IMemoryUtils.h>
|
||||
extern SourceMod::IMemoryUtils *sm_memutils;
|
||||
#endif
|
||||
|
||||
#if defined SMEXT_ENABLE_GAMEHELPERS
|
||||
#include <IGameHelpers.h>
|
||||
extern SourceMod::IGameHelpers *sm_gamehelpers;
|
||||
#endif
|
||||
|
||||
#if defined SMEXT_ENABLE_TIMERSYS
|
||||
#include <ITimerSystem.h>
|
||||
extern SourceMod::ITimerSystem *sm_timersys;
|
||||
#endif
|
||||
|
||||
#if defined SMEXT_ENABLE_THREADER
|
||||
#include <IThreader.h>
|
||||
extern SourceMod::IThreader *sm_threader;
|
||||
#endif
|
||||
|
||||
#if defined SMEXT_ENABLE_LIBSYS
|
||||
#include <ILibrarySys.h>
|
||||
extern SourceMod::ILibrarySys *sm_libsys;
|
||||
#endif
|
||||
|
||||
#if defined SMEXT_ENABLE_PLUGINSYS
|
||||
#include <IPluginSys.h>
|
||||
extern SourceMod::IPluginManager *sm_plsys;
|
||||
#endif
|
||||
|
||||
#if defined SMEXT_ENABLE_MENUS
|
||||
#include <IMenuManager.h>
|
||||
extern SourceMod::IMenuManager *sm_menus;
|
||||
#endif
|
||||
|
||||
#if defined SMEXT_ENABLE_ADMINSYS
|
||||
#include <IAdminSystem.h>
|
||||
extern SourceMod::IAdminSystem *sm_adminsys;
|
||||
#endif
|
||||
|
||||
#if defined SMEXT_ENABLE_TEXTPARSERS
|
||||
#include <ITextParsers.h>
|
||||
extern SourceMod::ITextParsers *sm_text;
|
||||
#endif
|
||||
|
||||
#if defined SMEXT_ENABLE_TRANSLATOR
|
||||
#include <ITranslator.h>
|
||||
extern SourceMod::ITranslator *sm_translator;
|
||||
#endif
|
||||
|
||||
#endif //_INCLUDE_SOURCEMOD_CONFIG_H_
|
||||
|
||||
@@ -0,0 +1,144 @@
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* ======================================================
|
||||
* Metamod:Source Stub Plugin
|
||||
* Written by AlliedModders LLC.
|
||||
* ======================================================
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from
|
||||
* the use of this software.
|
||||
*
|
||||
* This stub plugin is public domain.
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "stub_mm.h"
|
||||
#include "stub_util.h"
|
||||
#include "sm_ext.h"
|
||||
|
||||
SH_DECL_HOOK3_void(IServerGameDLL, ServerActivate, SH_NOATTRIB, 0, edict_t *, int, int);
|
||||
|
||||
StubPlugin g_StubPlugin;
|
||||
IVEngineServer *engine = NULL;
|
||||
IServerGameDLL *server = NULL;
|
||||
ISmmPlugin *mmsplugin = &g_StubPlugin;
|
||||
|
||||
PLUGIN_EXPOSE(StubPlugin, g_StubPlugin);
|
||||
bool StubPlugin::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late)
|
||||
{
|
||||
PLUGIN_SAVEVARS();
|
||||
|
||||
#if defined METAMOD_PLAPI_VERSION
|
||||
GET_V_IFACE_ANY(GetServerFactory, server, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL);
|
||||
GET_V_IFACE_ANY(GetEngineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER);
|
||||
#else
|
||||
GET_V_IFACE_ANY(serverFactory, server, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL);
|
||||
GET_V_IFACE_ANY(engineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER);
|
||||
#endif
|
||||
|
||||
SH_ADD_HOOK_STATICFUNC(IServerGameDLL, ServerActivate, server, Hook_ServerActivate, true);
|
||||
|
||||
ismm->AddListener(this, this);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool StubPlugin::Unload(char *error, size_t maxlen)
|
||||
{
|
||||
SM_UnloadExtension();
|
||||
|
||||
SH_REMOVE_HOOK_STATICFUNC(IServerGameDLL, ServerActivate, server, Hook_ServerActivate, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Hook_ServerActivate(edict_t *pEdictList, int edictCount, int clientMax)
|
||||
{
|
||||
META_LOG(g_PLAPI, "ServerActivate() called: edictCount = %d, clientMax = %d", edictCount, clientMax);
|
||||
}
|
||||
|
||||
void *StubPlugin::OnMetamodQuery(const char *iface, int *ret)
|
||||
{
|
||||
if (strcmp(iface, SOURCEMOD_NOTICE_EXTENSIONS) == 0)
|
||||
{
|
||||
BindToSourcemod();
|
||||
}
|
||||
|
||||
if (ret != NULL)
|
||||
{
|
||||
*ret = IFACE_OK;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void StubPlugin::AllPluginsLoaded()
|
||||
{
|
||||
BindToSourcemod();
|
||||
}
|
||||
|
||||
void StubPlugin::BindToSourcemod()
|
||||
{
|
||||
char error[256];
|
||||
|
||||
if (!SM_LoadExtension(error, sizeof(error)))
|
||||
{
|
||||
char message[512];
|
||||
UTIL_Format(message, sizeof(message), "Could not load as a SourceMod extension: %s\n", error);
|
||||
engine->LogPrint(message);
|
||||
}
|
||||
}
|
||||
|
||||
bool StubPlugin::Pause(char *error, size_t maxlen)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool StubPlugin::Unpause(char *error, size_t maxlen)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
const char *StubPlugin::GetLicense()
|
||||
{
|
||||
return "Public Domain";
|
||||
}
|
||||
|
||||
const char *StubPlugin::GetVersion()
|
||||
{
|
||||
return "1.0.0.0";
|
||||
}
|
||||
|
||||
const char *StubPlugin::GetDate()
|
||||
{
|
||||
return __DATE__;
|
||||
}
|
||||
|
||||
const char *StubPlugin::GetLogTag()
|
||||
{
|
||||
return "STUB";
|
||||
}
|
||||
|
||||
const char *StubPlugin::GetAuthor()
|
||||
{
|
||||
return "AlliedModders LLC";
|
||||
}
|
||||
|
||||
const char *StubPlugin::GetDescription()
|
||||
{
|
||||
return "Sample empty plugin";
|
||||
}
|
||||
|
||||
const char *StubPlugin::GetName()
|
||||
{
|
||||
return "Stub Plugin";
|
||||
}
|
||||
|
||||
const char *StubPlugin::GetURL()
|
||||
{
|
||||
return "http://www.sourcemm.net/";
|
||||
}
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* ======================================================
|
||||
* Metamod:Source Stub Plugin
|
||||
* Written by AlliedModders LLC.
|
||||
* ======================================================
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from
|
||||
* the use of this software.
|
||||
*
|
||||
* This stub plugin is public domain.
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_
|
||||
#define _INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_
|
||||
|
||||
#include <ISmmPlugin.h>
|
||||
|
||||
class StubPlugin :
|
||||
public ISmmPlugin,
|
||||
public IMetamodListener
|
||||
{
|
||||
public:
|
||||
bool Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late);
|
||||
bool Unload(char *error, size_t maxlen);
|
||||
bool Pause(char *error, size_t maxlen);
|
||||
bool Unpause(char *error, size_t maxlen);
|
||||
void AllPluginsLoaded();
|
||||
const char *GetAuthor();
|
||||
const char *GetName();
|
||||
const char *GetDescription();
|
||||
const char *GetURL();
|
||||
const char *GetLicense();
|
||||
const char *GetVersion();
|
||||
const char *GetDate();
|
||||
const char *GetLogTag();
|
||||
public: //IMetamodListener
|
||||
void *OnMetamodQuery(const char *iface, int *ret);
|
||||
private:
|
||||
void BindToSourcemod();
|
||||
};
|
||||
|
||||
void Hook_ServerActivate(edict_t *pEdictList, int edictCount, int clientMax);
|
||||
|
||||
extern StubPlugin g_StubPlugin;
|
||||
extern ISmmPlugin *mmsplugin;
|
||||
|
||||
PLUGIN_GLOBALVARS();
|
||||
|
||||
#endif //_INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* ======================================================
|
||||
* Metamod:Source Stub Plugin
|
||||
* Written by AlliedModders LLC.
|
||||
* ======================================================
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from
|
||||
* the use of this software.
|
||||
*
|
||||
* This stub plugin is public domain.
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include "stub_util.h"
|
||||
|
||||
size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
size_t len = vsnprintf(buffer, maxlength, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
if (len >= maxlength)
|
||||
{
|
||||
len = maxlength - 1;
|
||||
buffer[len] = '\0';
|
||||
}
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* ======================================================
|
||||
* Metamod:Source Stub Plugin
|
||||
* Written by AlliedModders LLC.
|
||||
* ======================================================
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from
|
||||
* the use of this software.
|
||||
*
|
||||
* This stub plugin is public domain.
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE_STUB_UTIL_FUNCTIONS_H_
|
||||
#define _INCLUDE_STUB_UTIL_FUNCTIONS_H_
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
/**
|
||||
* This is a platform-safe function which fixes weird idiosyncracies
|
||||
* in the null-termination and return value of snprintf(). It guarantees
|
||||
* the terminator on overflow cases, and never returns -1 or a value
|
||||
* not equal to the number of non-terminating bytes written.
|
||||
*/
|
||||
size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...);
|
||||
|
||||
#endif //_INCLUDE_STUB_UTIL_FUNCTIONS_H_
|
||||
|
||||
Reference in New Issue
Block a user