forked from CSSZombieEscape/sm-ext-CSSFixes
Add BlockSolidMoved
This commit is contained in:
parent
a150d46b8e
commit
65503c3de5
@ -488,11 +488,9 @@ IterationRetval_t EnumElement(IHandleEntity *pHandleEntity)
|
||||
{
|
||||
RETURN_META_VALUE(MRES_IGNORED, ITERATION_CONTINUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
RETURN_META_VALUE(MRES_SUPERCEDE, ITERATION_CONTINUE);
|
||||
}
|
||||
}
|
||||
|
||||
cell_t FilterTriggerMoved(IPluginContext *pContext, const cell_t *params)
|
||||
{
|
||||
@ -500,6 +498,35 @@ cell_t FilterTriggerMoved(IPluginContext *pContext, const cell_t *params)
|
||||
return 0;
|
||||
}
|
||||
|
||||
volatile int gv_BlockSolidMoved = -1;
|
||||
// void IVEngineServer::SolidMoved( edict_t *pSolidEnt, ICollideable *pSolidCollide, const Vector* pPrevAbsOrigin, bool testSurroundingBoundsOnly ) = 0;
|
||||
SH_DECL_HOOK4_void(IVEngineServer, SolidMoved, SH_NOATTRIB, 0, edict_t *, ICollideable *, const Vector *, bool);
|
||||
void SolidMoved(edict_t *pSolidEnt, ICollideable *pSolidCollide, const Vector *pPrevAbsOrigin, bool testSurroundingBoundsOnly)
|
||||
{
|
||||
if(gv_BlockSolidMoved == -1)
|
||||
{
|
||||
RETURN_META(MRES_IGNORED);
|
||||
}
|
||||
else if(gv_BlockSolidMoved == 0)
|
||||
{
|
||||
RETURN_META(MRES_SUPERCEDE);
|
||||
}
|
||||
|
||||
int Entity = gamehelpers->IndexOfEdict(pSolidEnt);
|
||||
|
||||
if(Entity != gv_BlockSolidMoved)
|
||||
{
|
||||
RETURN_META(MRES_SUPERCEDE);
|
||||
}
|
||||
|
||||
RETURN_META(MRES_IGNORED);
|
||||
}
|
||||
|
||||
cell_t BlockSolidMoved(IPluginContext *pContext, const cell_t *params)
|
||||
{
|
||||
gv_BlockSolidMoved = params[1];
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool CSSFixes::SDK_OnLoad(char *error, size_t maxlength, bool late)
|
||||
{
|
||||
@ -625,9 +652,6 @@ bool CSSFixes::SDK_OnLoad(char *error, size_t maxlength, bool late)
|
||||
g_SH_SkipTwoEntitiesShouldHitEntity = SH_ADD_DVPHOOK(CTraceFilterSkipTwoEntities, ShouldHitEntity, g_CTraceFilterSkipTwoEntities, SH_STATIC(ShouldHitEntity), true);
|
||||
g_SH_SimpleShouldHitEntity = SH_ADD_DVPHOOK(CTraceFilterSimple, ShouldHitEntity, g_CTraceFilterSimple, SH_STATIC(ShouldHitEntity), true);
|
||||
|
||||
|
||||
SH_ADD_HOOK(IVEngineServer, TriggerMoved, engine, SH_STATIC(TriggerMoved), false);
|
||||
|
||||
// Find VTable for CTriggerMoved
|
||||
uintptr_t pCTriggerMoved;
|
||||
if(!g_pGameConf->GetMemSig("CTriggerMoved", (void **)(&pCTriggerMoved)) || !pCTriggerMoved)
|
||||
@ -641,6 +665,9 @@ bool CSSFixes::SDK_OnLoad(char *error, size_t maxlength, bool late)
|
||||
|
||||
g_SH_TriggerMoved = SH_ADD_DVPHOOK(CTriggerMoved, EnumElement, g_CTriggerMoved, SH_STATIC(EnumElement), false);
|
||||
|
||||
SH_ADD_HOOK(IVEngineServer, TriggerMoved, engine, SH_STATIC(TriggerMoved), false);
|
||||
SH_ADD_HOOK(IVEngineServer, SolidMoved, engine, SH_STATIC(SolidMoved), false);
|
||||
|
||||
if(!g_pGameConf->GetMemSig("Physics_SimulateEntity", (void **)(&g_pPhysics_SimulateEntity)) || !g_pPhysics_SimulateEntity)
|
||||
{
|
||||
snprintf(error, maxlength, "Failed to find Physics_SimulateEntity.\n");
|
||||
@ -755,12 +782,14 @@ bool CSSFixes::SDK_OnLoad(char *error, size_t maxlength, bool late)
|
||||
const sp_nativeinfo_t MyNatives[] =
|
||||
{
|
||||
{ "FilterTriggerMoved", FilterTriggerMoved },
|
||||
{ "BlockSolidMoved", BlockSolidMoved },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
void CSSFixes::SDK_OnAllLoaded()
|
||||
{
|
||||
sharesys->AddNatives(myself, MyNatives);
|
||||
sharesys->RegisterLibrary(myself, "CSSFixes");
|
||||
}
|
||||
|
||||
void CSSFixes::SDK_OnUnload()
|
||||
@ -846,6 +875,9 @@ void CSSFixes::SDK_OnUnload()
|
||||
if(g_SH_TriggerMoved)
|
||||
SH_REMOVE_HOOK_ID(g_SH_TriggerMoved);
|
||||
|
||||
SH_REMOVE_HOOK(IVEngineServer, TriggerMoved, engine, SH_STATIC(TriggerMoved), false);
|
||||
SH_REMOVE_HOOK(IVEngineServer, SolidMoved, engine, SH_STATIC(SolidMoved), false);
|
||||
|
||||
gameconfs->CloseGameConfigFile(g_pGameConf);
|
||||
|
||||
// Revert all applied patches
|
||||
|
@ -14,6 +14,12 @@ forward void OnRunThinkFunctionsPost(bool simulating);
|
||||
// REMEMBER TO CALL THIS AGAIN WITH -1 AFTER USING IT !!!
|
||||
native void FilterTriggerMoved(int entity);
|
||||
|
||||
// -1 = Ignore, normal operation.
|
||||
// 0 = Block ALL SV_TriggerMoved.
|
||||
// >0 = Entity index for which to allow SV_TriggerMoved to be called.
|
||||
// REMEMBER TO CALL THIS AGAIN WITH -1 AFTER USING IT !!!
|
||||
native void BlockSolidMoved(int entity);
|
||||
|
||||
public Extension __ext_CSSFixes =
|
||||
{
|
||||
name = "CSSFixes",
|
||||
|
@ -40,7 +40,7 @@
|
||||
/* Basic information exposed publicly */
|
||||
#define SMEXT_CONF_NAME "CSSFixes"
|
||||
#define SMEXT_CONF_DESCRIPTION "Patches bugs in the CSS server binary and more..."
|
||||
#define SMEXT_CONF_VERSION "1.8"
|
||||
#define SMEXT_CONF_VERSION "1.9"
|
||||
#define SMEXT_CONF_AUTHOR "BotoX"
|
||||
#define SMEXT_CONF_URL ""
|
||||
#define SMEXT_CONF_LOGTAG "CSSFIXES"
|
||||
|
Loading…
Reference in New Issue
Block a user