Move timer natives into logic binary (bug 4402, r=ds).
--HG-- rename : core/smn_timers.cpp => core/logic/smn_timers.cpp
This commit is contained in:
parent
f4e22cb44c
commit
a6ceb337b2
@ -81,6 +81,7 @@ class SM:
|
|||||||
self.compiler.AddToListVar('CFLAGS', '-mfpmath=sse')
|
self.compiler.AddToListVar('CFLAGS', '-mfpmath=sse')
|
||||||
self.compiler.AddToListVar('CFLAGS', '-msse')
|
self.compiler.AddToListVar('CFLAGS', '-msse')
|
||||||
self.compiler.AddToListVar('CFLAGS', '-m32')
|
self.compiler.AddToListVar('CFLAGS', '-m32')
|
||||||
|
self.compiler.AddToListVar('POSTLINKFLAGS', '-m32')
|
||||||
self.compiler.AddToListVar('CFLAGS', '-static-libgcc')
|
self.compiler.AddToListVar('CFLAGS', '-static-libgcc')
|
||||||
self.compiler.AddToListVar('CXXFLAGS', '-fno-exceptions')
|
self.compiler.AddToListVar('CXXFLAGS', '-fno-exceptions')
|
||||||
self.compiler.AddToListVar('CXXFLAGS', '-fno-rtti')
|
self.compiler.AddToListVar('CXXFLAGS', '-fno-rtti')
|
||||||
|
@ -61,7 +61,6 @@ for i in SM.sdkInfo:
|
|||||||
'PluginSys.cpp',
|
'PluginSys.cpp',
|
||||||
'smn_console.cpp',
|
'smn_console.cpp',
|
||||||
'smn_handles.cpp',
|
'smn_handles.cpp',
|
||||||
'smn_timers.cpp',
|
|
||||||
'UserMessages.cpp',
|
'UserMessages.cpp',
|
||||||
'Database.cpp',
|
'Database.cpp',
|
||||||
'MenuManager.cpp',
|
'MenuManager.cpp',
|
||||||
|
@ -56,11 +56,16 @@ void DebugReport::OnDebugSpew(const char *msg, ...)
|
|||||||
void DebugReport::GenerateError(IPluginContext *ctx, cell_t func_idx, int err, const char *message, ...)
|
void DebugReport::GenerateError(IPluginContext *ctx, cell_t func_idx, int err, const char *message, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
char buffer[512];
|
|
||||||
|
|
||||||
va_start(ap, message);
|
va_start(ap, message);
|
||||||
UTIL_FormatArgs(buffer, sizeof(buffer), message, ap);
|
GenerateErrorVA(ctx, func_idx, err, message, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DebugReport::GenerateErrorVA(IPluginContext *ctx, cell_t func_idx, int err, const char *message, va_list ap)
|
||||||
|
{
|
||||||
|
char buffer[512];
|
||||||
|
UTIL_FormatArgs(buffer, sizeof(buffer), message, ap);
|
||||||
|
|
||||||
const char *plname = g_PluginSys.FindPluginByContext(ctx->GetContext())->GetFilename();
|
const char *plname = g_PluginSys.FindPluginByContext(ctx->GetContext())->GetFilename();
|
||||||
const char *error = g_pSourcePawn2->GetErrorString(err);
|
const char *error = g_pSourcePawn2->GetErrorString(err);
|
||||||
|
@ -46,6 +46,7 @@ public: // IDebugListener
|
|||||||
void OnDebugSpew(const char *msg, ...);
|
void OnDebugSpew(const char *msg, ...);
|
||||||
public:
|
public:
|
||||||
void GenerateError(IPluginContext *ctx, cell_t func_idx, int err, const char *message, ...);
|
void GenerateError(IPluginContext *ctx, cell_t func_idx, int err, const char *message, ...);
|
||||||
|
void GenerateErrorVA(IPluginContext *ctx, cell_t func_idx, int err, const char *message, va_list ap);
|
||||||
void GenerateCodeError(IPluginContext *ctx, uint32_t code_addr, int err, const char *message, ...);
|
void GenerateCodeError(IPluginContext *ctx, uint32_t code_addr, int err, const char *message, ...);
|
||||||
private:
|
private:
|
||||||
int _GetPluginIndex(IPluginContext *ctx);
|
int _GetPluginIndex(IPluginContext *ctx);
|
||||||
|
@ -26,7 +26,7 @@ OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \
|
|||||||
smn_datapacks.cpp smn_entities.cpp smn_events.cpp smn_fakenatives.cpp \
|
smn_datapacks.cpp smn_entities.cpp smn_events.cpp smn_fakenatives.cpp \
|
||||||
smn_filesystem.cpp smn_gameconfigs.cpp smn_halflife.cpp \
|
smn_filesystem.cpp smn_gameconfigs.cpp smn_halflife.cpp \
|
||||||
smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp \
|
smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp \
|
||||||
smn_lang.cpp smn_player.cpp smn_string.cpp smn_timers.cpp \
|
smn_lang.cpp smn_player.cpp smn_string.cpp \
|
||||||
smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp \
|
smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp \
|
||||||
smn_hudtext.cpp smn_nextmap.cpp
|
smn_hudtext.cpp smn_nextmap.cpp
|
||||||
OBJECTS += ExtensionSys.cpp \
|
OBJECTS += ExtensionSys.cpp \
|
||||||
|
@ -78,11 +78,11 @@ public: //ITimerSystem
|
|||||||
float GetTickedTime();
|
float GetTickedTime();
|
||||||
void NotifyOfGameStart(float offset /* = 0.0f */);
|
void NotifyOfGameStart(float offset /* = 0.0f */);
|
||||||
bool GetMapTimeLeft(float *pTime);
|
bool GetMapTimeLeft(float *pTime);
|
||||||
|
IMapTimer *GetMapTimer();
|
||||||
public:
|
public:
|
||||||
void RunFrame();
|
void RunFrame();
|
||||||
void RemoveMapChangeTimers();
|
void RemoveMapChangeTimers();
|
||||||
void GameFrame(bool simulating);
|
void GameFrame(bool simulating);
|
||||||
IMapTimer *GetMapTimer();
|
|
||||||
private:
|
private:
|
||||||
List<ITimer *> m_SingleTimers;
|
List<ITimer *> m_SingleTimers;
|
||||||
List<ITimer *> m_LoopTimers;
|
List<ITimer *> m_LoopTimers;
|
||||||
|
@ -30,6 +30,7 @@ files = [
|
|||||||
'smn_adt_trie.cpp',
|
'smn_adt_trie.cpp',
|
||||||
'Profiler.cpp',
|
'Profiler.cpp',
|
||||||
'smn_functions.cpp',
|
'smn_functions.cpp',
|
||||||
|
'smn_timers.cpp',
|
||||||
'sm_crc32.cpp'
|
'sm_crc32.cpp'
|
||||||
]
|
]
|
||||||
if AMBuild.target['platform'] == 'windows':
|
if AMBuild.target['platform'] == 'windows':
|
||||||
|
@ -26,7 +26,8 @@ OBJECTS = \
|
|||||||
smn_adt_trie.cpp \
|
smn_adt_trie.cpp \
|
||||||
Profiler.cpp \
|
Profiler.cpp \
|
||||||
smn_functions.cpp \
|
smn_functions.cpp \
|
||||||
sm_crc32.cpp
|
sm_crc32.cpp \
|
||||||
|
smn_timers.cpp
|
||||||
|
|
||||||
##############################################
|
##############################################
|
||||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
||||||
|
@ -50,6 +50,8 @@ IShareSys *sharesys;
|
|||||||
IRootConsole *rootmenu;
|
IRootConsole *rootmenu;
|
||||||
IPluginManager *pluginsys;
|
IPluginManager *pluginsys;
|
||||||
IForwardManager *forwardsys;
|
IForwardManager *forwardsys;
|
||||||
|
ITimerSystem *timersys;
|
||||||
|
ServerGlobals serverGlobals;
|
||||||
|
|
||||||
static sm_logic_t logic =
|
static sm_logic_t logic =
|
||||||
{
|
{
|
||||||
@ -65,6 +67,7 @@ static void logic_init(const sm_core_t* core, sm_logic_t* _logic)
|
|||||||
|
|
||||||
memcpy(&smcore, core, sizeof(sm_core_t));
|
memcpy(&smcore, core, sizeof(sm_core_t));
|
||||||
memcpy(_logic, &logic, sizeof(sm_logic_t));
|
memcpy(_logic, &logic, sizeof(sm_logic_t));
|
||||||
|
memcpy(&serverGlobals, core->serverGlobals, sizeof(ServerGlobals));
|
||||||
|
|
||||||
handlesys = core->handlesys;
|
handlesys = core->handlesys;
|
||||||
libsys = core->libsys;
|
libsys = core->libsys;
|
||||||
@ -75,6 +78,7 @@ static void logic_init(const sm_core_t* core, sm_logic_t* _logic)
|
|||||||
rootmenu = core->rootmenu;
|
rootmenu = core->rootmenu;
|
||||||
pluginsys = core->pluginsys;
|
pluginsys = core->pluginsys;
|
||||||
forwardsys = core->forwardsys;
|
forwardsys = core->forwardsys;
|
||||||
|
timersys = core->timersys;
|
||||||
}
|
}
|
||||||
|
|
||||||
PLATFORM_EXTERN_C ITextParsers *get_textparsers()
|
PLATFORM_EXTERN_C ITextParsers *get_textparsers()
|
||||||
|
@ -47,6 +47,8 @@ extern IShareSys *sharesys;
|
|||||||
extern IRootConsole *rootmenu;
|
extern IRootConsole *rootmenu;
|
||||||
extern IPluginManager *pluginsys;
|
extern IPluginManager *pluginsys;
|
||||||
extern IForwardManager *forwardsys;
|
extern IForwardManager *forwardsys;
|
||||||
|
extern ITimerSystem *timersys;
|
||||||
|
extern ServerGlobals serverGlobals;
|
||||||
|
|
||||||
#endif /* _INCLUDE_SOURCEMOD_COMMON_LOGIC_H_ */
|
#endif /* _INCLUDE_SOURCEMOD_COMMON_LOGIC_H_ */
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ using namespace SourceMod;
|
|||||||
* Add 1 to the RHS of this expression to bump the intercom file
|
* Add 1 to the RHS of this expression to bump the intercom file
|
||||||
* This is to prevent mismatching core/logic binaries
|
* This is to prevent mismatching core/logic binaries
|
||||||
*/
|
*/
|
||||||
#define SM_LOGIC_MAGIC (0x0F47C0DE - 3)
|
#define SM_LOGIC_MAGIC (0x0F47C0DE - 4)
|
||||||
|
|
||||||
#if defined SM_LOGIC
|
#if defined SM_LOGIC
|
||||||
class IVEngineServer
|
class IVEngineServer
|
||||||
@ -63,11 +63,19 @@ namespace SourceMod
|
|||||||
class IRootConsole;
|
class IRootConsole;
|
||||||
class IPluginManager;
|
class IPluginManager;
|
||||||
class IForwardManager;
|
class IForwardManager;
|
||||||
|
class ITimerSystem;
|
||||||
}
|
}
|
||||||
|
|
||||||
class IVEngineServer;
|
class IVEngineServer;
|
||||||
class ConVar;
|
class ConVar;
|
||||||
|
|
||||||
|
struct ServerGlobals
|
||||||
|
{
|
||||||
|
const double *universalTime;
|
||||||
|
float *interval_per_tick;
|
||||||
|
float *frametime;
|
||||||
|
};
|
||||||
|
|
||||||
struct sm_core_t
|
struct sm_core_t
|
||||||
{
|
{
|
||||||
/* Objects */
|
/* Objects */
|
||||||
@ -80,6 +88,7 @@ struct sm_core_t
|
|||||||
IRootConsole *rootmenu;
|
IRootConsole *rootmenu;
|
||||||
IPluginManager *pluginsys;
|
IPluginManager *pluginsys;
|
||||||
IForwardManager *forwardsys;
|
IForwardManager *forwardsys;
|
||||||
|
ITimerSystem *timersys;
|
||||||
/* Functions */
|
/* Functions */
|
||||||
void (*AddNatives)(sp_nativeinfo_t* nlist);
|
void (*AddNatives)(sp_nativeinfo_t* nlist);
|
||||||
ConVar * (*FindConVar)(const char*);
|
ConVar * (*FindConVar)(const char*);
|
||||||
@ -89,6 +98,9 @@ struct sm_core_t
|
|||||||
const char * (*GetCvarString)(ConVar*);
|
const char * (*GetCvarString)(ConVar*);
|
||||||
size_t (*Format)(char*, size_t, const char*, ...);
|
size_t (*Format)(char*, size_t, const char*, ...);
|
||||||
unsigned int (*ReplaceAll)(char*, size_t, const char *, const char *, bool);
|
unsigned int (*ReplaceAll)(char*, size_t, const char *, const char *, bool);
|
||||||
|
void (*GenerateError)(IPluginContext *, cell_t, int, const char *, ...);
|
||||||
|
/* Data */
|
||||||
|
ServerGlobals *serverGlobals;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sm_logic_t
|
struct sm_logic_t
|
||||||
|
@ -29,11 +29,14 @@
|
|||||||
* Version: $Id$
|
* Version: $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "HandleSys.h"
|
#include "common_logic.h"
|
||||||
#include "TimerSys.h"
|
#include <string.h>
|
||||||
#include "PluginSys.h"
|
#include <IHandleSys.h>
|
||||||
#include "Logger.h"
|
#include <ITimerSystem.h>
|
||||||
#include "DebugReporter.h"
|
#include <IPluginSys.h>
|
||||||
|
#include <sh_stack.h>
|
||||||
|
|
||||||
|
using namespace SourceHook;
|
||||||
|
|
||||||
#define TIMER_DATA_HNDL_CLOSE (1<<9)
|
#define TIMER_DATA_HNDL_CLOSE (1<<9)
|
||||||
#define TIMER_HNDL_CLOSE (1<<9)
|
#define TIMER_HNDL_CLOSE (1<<9)
|
||||||
@ -86,15 +89,15 @@ void TimerNatives::OnSourceModAllInitialized()
|
|||||||
{
|
{
|
||||||
HandleAccess sec;
|
HandleAccess sec;
|
||||||
|
|
||||||
g_HandleSys.InitAccessDefaults(NULL, &sec);
|
handlesys->InitAccessDefaults(NULL, &sec);
|
||||||
sec.access[HandleAccess_Clone] = HANDLE_RESTRICT_IDENTITY;
|
sec.access[HandleAccess_Clone] = HANDLE_RESTRICT_IDENTITY;
|
||||||
|
|
||||||
g_TimerType = g_HandleSys.CreateType("Timer", this, 0, NULL, &sec, g_pCoreIdent, NULL);
|
g_TimerType = handlesys->CreateType("Timer", this, 0, NULL, &sec, g_pCoreIdent, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TimerNatives::OnSourceModShutdown()
|
void TimerNatives::OnSourceModShutdown()
|
||||||
{
|
{
|
||||||
g_HandleSys.RemoveType(g_TimerType, g_pCoreIdent);
|
handlesys->RemoveType(g_TimerType, g_pCoreIdent);
|
||||||
g_TimerType = 0;
|
g_TimerType = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,7 +105,7 @@ void TimerNatives::OnHandleDestroy(HandleType_t type, void *object)
|
|||||||
{
|
{
|
||||||
TimerInfo *pTimer = reinterpret_cast<TimerInfo *>(object);
|
TimerInfo *pTimer = reinterpret_cast<TimerInfo *>(object);
|
||||||
|
|
||||||
g_Timers.KillTimer(pTimer->Timer);
|
timersys->KillTimer(pTimer->Timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
TimerInfo *TimerNatives::CreateTimerInfo()
|
TimerInfo *TimerNatives::CreateTimerInfo()
|
||||||
@ -150,27 +153,23 @@ void TimerNatives::OnTimerEnd(ITimer *pTimer, void *pData)
|
|||||||
|
|
||||||
if (pInfo->Flags & TIMER_DATA_HNDL_CLOSE)
|
if (pInfo->Flags & TIMER_DATA_HNDL_CLOSE)
|
||||||
{
|
{
|
||||||
if ((herr=g_HandleSys.FreeHandle(usrhndl, &sec)) != HandleError_None)
|
if ((herr=handlesys->FreeHandle(usrhndl, &sec)) != HandleError_None)
|
||||||
{
|
{
|
||||||
g_DbgReporter.GenerateError(pInfo->pContext,
|
smcore.GenerateError(pInfo->pContext, pInfo->Hook->GetFunctionID(),
|
||||||
pInfo->Hook->GetFunctionID(),
|
|
||||||
SP_ERROR_NATIVE,
|
SP_ERROR_NATIVE,
|
||||||
"Invalid data handle %x (error %d) passed during timer end with TIMER_DATA_HNDL_CLOSE",
|
"Invalid data handle %x (error %d) passed during timer end with TIMER_DATA_HNDL_CLOSE",
|
||||||
usrhndl,
|
usrhndl, herr);
|
||||||
herr);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pInfo->TimerHandle != BAD_HANDLE)
|
if (pInfo->TimerHandle != BAD_HANDLE)
|
||||||
{
|
{
|
||||||
if ((herr=g_HandleSys.FreeHandle(pInfo->TimerHandle, &sec)) != HandleError_None)
|
if ((herr=handlesys->FreeHandle(pInfo->TimerHandle, &sec)) != HandleError_None)
|
||||||
{
|
{
|
||||||
g_DbgReporter.GenerateError(pInfo->pContext,
|
smcore.GenerateError(pInfo->pContext, pInfo->Hook->GetFunctionID(),
|
||||||
pInfo->Hook->GetFunctionID(),
|
|
||||||
SP_ERROR_NATIVE,
|
SP_ERROR_NATIVE,
|
||||||
"Invalid timer handle %x (error %d) during timer end, displayed function is timer callback, not the stack trace",
|
"Invalid timer handle %x (error %d) during timer end, displayed function is timer callback, not the stack trace",
|
||||||
pInfo->TimerHandle,
|
pInfo->TimerHandle, herr);
|
||||||
herr);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,7 +199,7 @@ static cell_t smn_CreateTimer(IPluginContext *pCtx, const cell_t *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
pInfo = s_TimerNatives.CreateTimerInfo();
|
pInfo = s_TimerNatives.CreateTimerInfo();
|
||||||
pTimer = g_Timers.CreateTimer(&s_TimerNatives, sp_ctof(params[1]), pInfo, flags);
|
pTimer = timersys->CreateTimer(&s_TimerNatives, sp_ctof(params[1]), pInfo, flags);
|
||||||
|
|
||||||
if (!pTimer)
|
if (!pTimer)
|
||||||
{
|
{
|
||||||
@ -208,7 +207,7 @@ static cell_t smn_CreateTimer(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
hndl = g_HandleSys.CreateHandle(g_TimerType, pInfo, pCtx->GetIdentity(), g_pCoreIdent, NULL);
|
hndl = handlesys->CreateHandle(g_TimerType, pInfo, pCtx->GetIdentity(), g_pCoreIdent, NULL);
|
||||||
|
|
||||||
/* If we can't get a handle, the timer isn't refcounted against the plugin and
|
/* If we can't get a handle, the timer isn't refcounted against the plugin and
|
||||||
* we need to bail out to prevent a crash.
|
* we need to bail out to prevent a crash.
|
||||||
@ -219,11 +218,11 @@ static cell_t smn_CreateTimer(IPluginContext *pCtx, const cell_t *params)
|
|||||||
if (flags & TIMER_DATA_HNDL_CLOSE)
|
if (flags & TIMER_DATA_HNDL_CLOSE)
|
||||||
{
|
{
|
||||||
HandleSecurity sec(pCtx->GetIdentity(), g_pCoreIdent);
|
HandleSecurity sec(pCtx->GetIdentity(), g_pCoreIdent);
|
||||||
g_HandleSys.FreeHandle(params[3], &sec);
|
handlesys->FreeHandle(params[3], &sec);
|
||||||
}
|
}
|
||||||
/* Zero everything so there's no conflicts */
|
/* Zero everything so there's no conflicts */
|
||||||
memset(pInfo, 0, sizeof(TimerInfo));
|
memset(pInfo, 0, sizeof(TimerInfo));
|
||||||
g_Timers.KillTimer(pTimer);
|
timersys->KillTimer(pTimer);
|
||||||
|
|
||||||
return pCtx->ThrowNativeError("Could not create timer, no more handles");
|
return pCtx->ThrowNativeError("Could not create timer, no more handles");
|
||||||
}
|
}
|
||||||
@ -248,20 +247,20 @@ static cell_t smn_KillTimer(IPluginContext *pCtx, const cell_t *params)
|
|||||||
sec.pOwner = pCtx->GetIdentity();
|
sec.pOwner = pCtx->GetIdentity();
|
||||||
sec.pIdentity = g_pCoreIdent;
|
sec.pIdentity = g_pCoreIdent;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.ReadHandle(hndl, g_TimerType, &sec, (void **)&pInfo))
|
if ((herr=handlesys->ReadHandle(hndl, g_TimerType, &sec, (void **)&pInfo))
|
||||||
!= HandleError_None)
|
!= HandleError_None)
|
||||||
{
|
{
|
||||||
return pCtx->ThrowNativeError("Invalid timer handle %x (error %d)", hndl, herr);
|
return pCtx->ThrowNativeError("Invalid timer handle %x (error %d)", hndl, herr);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_Timers.KillTimer(pInfo->Timer);
|
timersys->KillTimer(pInfo->Timer);
|
||||||
|
|
||||||
if (params[2] && !(pInfo->Flags & TIMER_DATA_HNDL_CLOSE))
|
if (params[2] && !(pInfo->Flags & TIMER_DATA_HNDL_CLOSE))
|
||||||
{
|
{
|
||||||
sec.pOwner = pInfo->pContext->GetIdentity();
|
sec.pOwner = pInfo->pContext->GetIdentity();
|
||||||
sec.pIdentity = g_pCoreIdent;
|
sec.pIdentity = g_pCoreIdent;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.FreeHandle(static_cast<Handle_t>(pInfo->UserData), &sec)) != HandleError_None)
|
if ((herr=handlesys->FreeHandle(static_cast<Handle_t>(pInfo->UserData), &sec)) != HandleError_None)
|
||||||
{
|
{
|
||||||
return pCtx->ThrowNativeError("Invalid data handle %x (error %d) on timer kill with TIMER_DATA_HNDL_CLOSE", hndl, herr);
|
return pCtx->ThrowNativeError("Invalid data handle %x (error %d) on timer kill with TIMER_DATA_HNDL_CLOSE", hndl, herr);
|
||||||
}
|
}
|
||||||
@ -280,26 +279,26 @@ static cell_t smn_TriggerTimer(IPluginContext *pCtx, const cell_t *params)
|
|||||||
sec.pOwner = pCtx->GetIdentity();
|
sec.pOwner = pCtx->GetIdentity();
|
||||||
sec.pIdentity = g_pCoreIdent;
|
sec.pIdentity = g_pCoreIdent;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.ReadHandle(hndl, g_TimerType, &sec, (void **)&pInfo))
|
if ((herr=handlesys->ReadHandle(hndl, g_TimerType, &sec, (void **)&pInfo))
|
||||||
!= HandleError_None)
|
!= HandleError_None)
|
||||||
{
|
{
|
||||||
return pCtx->ThrowNativeError("Invalid timer handle %x (error %d)", hndl, herr);
|
return pCtx->ThrowNativeError("Invalid timer handle %x (error %d)", hndl, herr);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_Timers.FireTimerOnce(pInfo->Timer, params[2] ? true : false);
|
timersys->FireTimerOnce(pInfo->Timer, params[2] ? true : false);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t smn_GetTickedTime(IPluginContext *pContext, const cell_t *params)
|
static cell_t smn_GetTickedTime(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
return sp_ftoc(*g_pUniversalTime);
|
return sp_ftoc(*serverGlobals.universalTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t smn_GetMapTimeLeft(IPluginContext *pContext, const cell_t *params)
|
static cell_t smn_GetMapTimeLeft(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
float time_left;
|
float time_left;
|
||||||
if (!g_Timers.GetMapTimeLeft(&time_left))
|
if (!timersys->GetMapTimeLeft(&time_left))
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -313,7 +312,7 @@ static cell_t smn_GetMapTimeLeft(IPluginContext *pContext, const cell_t *params)
|
|||||||
|
|
||||||
static cell_t smn_GetMapTimeLimit(IPluginContext *pContext, const cell_t *params)
|
static cell_t smn_GetMapTimeLimit(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
IMapTimer *pMapTimer = g_Timers.GetMapTimer();
|
IMapTimer *pMapTimer = timersys->GetMapTimer();
|
||||||
|
|
||||||
if (!pMapTimer)
|
if (!pMapTimer)
|
||||||
{
|
{
|
||||||
@ -330,7 +329,7 @@ static cell_t smn_GetMapTimeLimit(IPluginContext *pContext, const cell_t *params
|
|||||||
|
|
||||||
static cell_t smn_ExtendMapTimeLimit(IPluginContext *pContext, const cell_t *params)
|
static cell_t smn_ExtendMapTimeLimit(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
IMapTimer *pMapTimer = g_Timers.GetMapTimer();
|
IMapTimer *pMapTimer = timersys->GetMapTimer();
|
||||||
|
|
||||||
if (!pMapTimer)
|
if (!pMapTimer)
|
||||||
{
|
{
|
||||||
@ -344,12 +343,12 @@ static cell_t smn_ExtendMapTimeLimit(IPluginContext *pContext, const cell_t *par
|
|||||||
|
|
||||||
static cell_t smn_IsServerProcessing(IPluginContext *pContext, const cell_t *params)
|
static cell_t smn_IsServerProcessing(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
return (gpGlobals->frametime > 0.0f) ? 1 : 0;
|
return (*serverGlobals.frametime > 0.0f) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t smn_GetTickInterval(IPluginContext *pContext, const cell_t *params)
|
static cell_t smn_GetTickInterval(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
return sp_ftoc(gpGlobals->interval_per_tick);
|
return sp_ftoc(*serverGlobals.interval_per_tick);
|
||||||
}
|
}
|
||||||
|
|
||||||
REGISTER_NATIVES(timernatives)
|
REGISTER_NATIVES(timernatives)
|
@ -43,7 +43,9 @@
|
|||||||
#include "ShareSys.h"
|
#include "ShareSys.h"
|
||||||
#include "sm_srvcmds.h"
|
#include "sm_srvcmds.h"
|
||||||
#include "ForwardSys.h"
|
#include "ForwardSys.h"
|
||||||
|
#include "TimerSys.h"
|
||||||
#include "logic_bridge.h"
|
#include "logic_bridge.h"
|
||||||
|
#include "DebugReporter.h"
|
||||||
|
|
||||||
static ILibrary *g_pLogic = NULL;
|
static ILibrary *g_pLogic = NULL;
|
||||||
static LogicInitFunction logic_init_fn;
|
static LogicInitFunction logic_init_fn;
|
||||||
@ -82,11 +84,22 @@ static void log_error(const char *fmt, ...)
|
|||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void generate_error(IPluginContext *ctx, cell_t func_idx, int err, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start(ap, fmt);
|
||||||
|
g_DbgReporter.GenerateErrorVA(ctx, func_idx, err, fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
|
||||||
static const char *get_cvar_string(ConVar* cvar)
|
static const char *get_cvar_string(ConVar* cvar)
|
||||||
{
|
{
|
||||||
return cvar->GetString();
|
return cvar->GetString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ServerGlobals serverGlobals;
|
||||||
|
|
||||||
static sm_core_t core_bridge =
|
static sm_core_t core_bridge =
|
||||||
{
|
{
|
||||||
/* Objects */
|
/* Objects */
|
||||||
@ -99,6 +112,7 @@ static sm_core_t core_bridge =
|
|||||||
&g_RootMenu,
|
&g_RootMenu,
|
||||||
&g_PluginSys,
|
&g_PluginSys,
|
||||||
&g_Forwards,
|
&g_Forwards,
|
||||||
|
&g_Timers,
|
||||||
/* Functions */
|
/* Functions */
|
||||||
add_natives,
|
add_natives,
|
||||||
find_convar,
|
find_convar,
|
||||||
@ -107,13 +121,19 @@ static sm_core_t core_bridge =
|
|||||||
log_error,
|
log_error,
|
||||||
get_cvar_string,
|
get_cvar_string,
|
||||||
UTIL_Format,
|
UTIL_Format,
|
||||||
UTIL_ReplaceAll
|
UTIL_ReplaceAll,
|
||||||
|
generate_error,
|
||||||
|
&serverGlobals
|
||||||
};
|
};
|
||||||
|
|
||||||
void InitLogicBridge()
|
void InitLogicBridge()
|
||||||
{
|
{
|
||||||
sm_logic_t logic;
|
sm_logic_t logic;
|
||||||
|
|
||||||
|
serverGlobals.universalTime = g_pUniversalTime;
|
||||||
|
serverGlobals.frametime = &gpGlobals->frametime;
|
||||||
|
serverGlobals.interval_per_tick = &gpGlobals->interval_per_tick;
|
||||||
|
|
||||||
core_bridge.core_ident = g_pCoreIdent;
|
core_bridge.core_ident = g_pCoreIdent;
|
||||||
logic_init_fn(&core_bridge, &logic);
|
logic_init_fn(&core_bridge, &logic);
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import ambuild.osutil as osutil
|
|||||||
|
|
||||||
def BuildCURL():
|
def BuildCURL():
|
||||||
curl = AMBuild.AddJob('curl')
|
curl = AMBuild.AddJob('curl')
|
||||||
if AMBuild.target['platform'] == 'linux' or AMBuild.target['platform'] == 'darwin':
|
if AMBuild.target['platform'] in ['linux', 'darwin']:
|
||||||
if not osutil.FileExists(os.path.join(AMBuild.outputFolder, 'curl', 'Makefile')):
|
if not osutil.FileExists(os.path.join(AMBuild.outputFolder, 'curl', 'Makefile')):
|
||||||
args = ['/bin/bash',
|
args = ['/bin/bash',
|
||||||
os.path.join(AMBuild.sourceFolder, 'extensions', 'curl', 'curl-src', 'configure'),
|
os.path.join(AMBuild.sourceFolder, 'extensions', 'curl', 'curl-src', 'configure'),
|
||||||
@ -16,11 +16,10 @@ def BuildCURL():
|
|||||||
'--without-libidn',
|
'--without-libidn',
|
||||||
'--without-libssh2',
|
'--without-libssh2',
|
||||||
'--without-zlib']
|
'--without-zlib']
|
||||||
if AMBuild.target['platform'] == 'linux':
|
|
||||||
env = None
|
|
||||||
elif AMBuild.target['platform'] == 'darwin':
|
|
||||||
env = os.environ.copy()
|
env = os.environ.copy()
|
||||||
env['CFLAGS'] = '-m32 -isysroot /Developer/SDKs/MacOSX10.5.sdk'
|
env['CFLAGS'] = '-m32'
|
||||||
|
if AMBuild.target['platform'] == 'darwin':
|
||||||
|
env['CFLAGS'] += ' -isysroot /Developer/SDKs/MacOSX10.5.sdk'
|
||||||
env['LDFLAGS'] = '-mmacosx-version-min=10.5'
|
env['LDFLAGS'] = '-mmacosx-version-min=10.5'
|
||||||
curl.AddCommand(command.DirectCommand(argv = args, env = env))
|
curl.AddCommand(command.DirectCommand(argv = args, env = env))
|
||||||
curl.AddCommand(command.ShellCommand('cd lib && make'))
|
curl.AddCommand(command.ShellCommand('cd lib && make'))
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
#include <IForwardSys.h>
|
#include <IForwardSys.h>
|
||||||
|
|
||||||
#define SMINTERFACE_TIMERSYS_NAME "ITimerSys"
|
#define SMINTERFACE_TIMERSYS_NAME "ITimerSys"
|
||||||
#define SMINTERFACE_TIMERSYS_VERSION 3
|
#define SMINTERFACE_TIMERSYS_VERSION 4
|
||||||
|
|
||||||
namespace SourceMod
|
namespace SourceMod
|
||||||
{
|
{
|
||||||
@ -203,6 +203,13 @@ namespace SourceMod
|
|||||||
* @return True on success, false if no support.
|
* @return True on success, false if no support.
|
||||||
*/
|
*/
|
||||||
virtual bool GetMapTimeLeft(float *pTime) =0;
|
virtual bool GetMapTimeLeft(float *pTime) =0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns the interface for dealing with map time limits.
|
||||||
|
*
|
||||||
|
* @return Map timer interface.
|
||||||
|
*/
|
||||||
|
virtual IMapTimer *GetMapTimer() = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user