diff --git a/extension.cpp b/extension.cpp index d9dba0c..64e7d1c 100644 --- a/extension.cpp +++ b/extension.cpp @@ -45,9 +45,8 @@ #include "extension.h" -#define LISTEN_ADDR "127.0.0.1" -//#define LISTEN_ADDR "10.0.0.101" -#define LISTEN_PORT 27020 +ConVar g_SmVoiceAddr("sm_voice_addr", "127.0.0.1", FCVAR_PROTECTED, "Voice server listen ip address."); +ConVar g_SmVoicePort("sm_voice_port", "27020", FCVAR_PROTECTED, "Voice server listen port.", true, 1025.0, true, 65535.0); /** * @file extension.cpp @@ -266,13 +265,17 @@ bool CVoice::SDK_OnLoad(char *error, size_t maxlength, bool late) return false; } + engine->ServerCommand("exec sourcemod/extension.Voice.cfg\n"); + engine->ServerExecute(); + sockaddr_in bindAddr; memset(&bindAddr, 0, sizeof(bindAddr)); bindAddr.sin_family = AF_INET; - inet_aton(LISTEN_ADDR, &bindAddr.sin_addr); - bindAddr.sin_port = htons(LISTEN_PORT); + inet_aton(g_SmVoiceAddr.GetString(), &bindAddr.sin_addr); + bindAddr.sin_port = htons(g_SmVoicePort.GetInt()); + + smutils->LogMessage(myself, "Binding to %s:%d!\n", g_SmVoiceAddr.GetString(), g_SmVoicePort.GetInt()); - // Listen on LISTEN_ADDR:LISTEN_PORT if(bind(m_ListenSocket, (sockaddr *)&bindAddr, sizeof(sockaddr_in)) < 0) { g_SMAPI->Format(error, maxlength, "Failed binding to socket (%d '%s').", errno, strerror(errno)); @@ -336,6 +339,20 @@ bool CVoice::SDK_OnLoad(char *error, size_t maxlength, bool late) return true; } +bool CVoice::SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlen, bool late) +{ + GET_V_IFACE_CURRENT(GetEngineFactory, g_pCVar, ICvar, CVAR_INTERFACE_VERSION); + ConVar_Register(0, this); + + return true; +} + +bool CVoice::RegisterConCommandBase(ConCommandBase *pVar) +{ + /* Always call META_REGCVAR instead of going through the engine. */ + return META_REGCVAR(pVar); +} + void CVoice::SDK_OnAllLoaded() { SM_GET_LATE_IFACE(SDKTOOLS, g_pSDKTools); diff --git a/extension.h b/extension.h index 8168775..339023a 100644 --- a/extension.h +++ b/extension.h @@ -56,7 +56,9 @@ typedef void (*t_SV_BroadcastVoiceData)(IClient *, int, unsigned char *, int64); * @brief Sample implementation of the SDK Extension. * Note: Uncomment one of the pre-defined virtual functions in order to use it. */ -class CVoice : public SDKExtension +class CVoice : + public SDKExtension, + public IConCommandBaseAccessor { public: /** @@ -103,7 +105,7 @@ public: * @param late Whether or not Metamod considers this a late load. * @return True to succeed, false to fail. */ - //virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlength, bool late); + virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlength, bool late); /** * @brief Called when Metamod is detaching, after the extension version is called. @@ -127,6 +129,9 @@ public: //virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlength); #endif +public: // IConCommandBaseAccessor + virtual bool RegisterConCommandBase(ConCommandBase *pVar); + public: CVoice(); void OnGameFrame(bool simulating);