AntiLagSwitch WIP
This commit is contained in:
parent
21d93c7b60
commit
d7fe41b51f
23
AntiLagSwitch/gamedata/AntiLagSwitch.games.txt
Normal file
23
AntiLagSwitch/gamedata/AntiLagSwitch.games.txt
Normal file
@ -0,0 +1,23 @@
|
||||
"Games"
|
||||
{
|
||||
"cstrike"
|
||||
{
|
||||
"Offsets"
|
||||
{
|
||||
"ProcessUsercmds"
|
||||
{
|
||||
"windows" "418"
|
||||
"linux" "419"
|
||||
}
|
||||
}
|
||||
|
||||
"Signatures"
|
||||
{
|
||||
"RunNullCommand"
|
||||
{
|
||||
"library" "server"
|
||||
"linux" "@_ZN11CBasePlayer14RunNullCommandEv"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
72
AntiLagSwitch/scripting/AntiLagSwitch.sp
Normal file
72
AntiLagSwitch/scripting/AntiLagSwitch.sp
Normal file
@ -0,0 +1,72 @@
|
||||
#include <sourcemod>
|
||||
#include <sdktools>
|
||||
#include <dhooks>
|
||||
|
||||
#pragma semicolon 1
|
||||
#pragma newdecls required
|
||||
|
||||
public Plugin myinfo =
|
||||
{
|
||||
name = "AntiLagSwitch",
|
||||
author = "BotoX",
|
||||
description = "",
|
||||
version = "0.0",
|
||||
url = ""
|
||||
};
|
||||
|
||||
Handle g_hProcessUsercmds;
|
||||
Handle g_hRunNullCommand;
|
||||
|
||||
public void OnPluginStart()
|
||||
{
|
||||
Handle hGameConf = LoadGameConfigFile("AntiLagSwitch.games");
|
||||
if(!hGameConf)
|
||||
SetFailState("Failed to load AntiLagSwitch gamedata.");
|
||||
|
||||
// void CBasePlayer::RunNullCommand( void )
|
||||
StartPrepSDKCall(SDKCall_Player);
|
||||
if(!PrepSDKCall_SetFromConf(hGameConf, SDKConf_Signature, "RunNullCommand"))
|
||||
SetFailState("PrepSDKCall_SetFromConf(hGameConf, SDKConf_Signature, \"RunNullCommand\" failed!");
|
||||
|
||||
g_hRunNullCommand = EndPrepSDKCall();
|
||||
|
||||
int Offset = GameConfGetOffset(hGameConf, "ProcessUsercmds");
|
||||
if(Offset == -1)
|
||||
SetFailState("Failed to find ProcessUsercmds offset");
|
||||
|
||||
/* void CBasePlayer::ProcessUsercmds( CUserCmd *cmds, int numcmds, int totalcmds,
|
||||
int dropped_packets, bool paused ) */
|
||||
g_hProcessUsercmds = DHookCreate(Offset, HookType_Entity, ReturnType_Void, ThisPointer_CBaseEntity, Hook_ProcessUsercmds);
|
||||
if(g_hProcessUsercmds == INVALID_HANDLE)
|
||||
SetFailState("Failed to DHookCreate ProcessUsercmds");
|
||||
|
||||
DHookAddParam(g_hProcessUsercmds, HookParamType_ObjectPtr); // 1 - CUserCmd *cmds
|
||||
DHookAddParam(g_hProcessUsercmds, HookParamType_Int); // 2 - int numcmds
|
||||
DHookAddParam(g_hProcessUsercmds, HookParamType_Int); // 3 - int totalcmds
|
||||
DHookAddParam(g_hProcessUsercmds, HookParamType_Int); // 4 - int dropped_packets
|
||||
DHookAddParam(g_hProcessUsercmds, HookParamType_Bool); // 5 - bool paused
|
||||
|
||||
delete hGameConf;
|
||||
|
||||
// Late load.
|
||||
for(int client = 1; client <= MaxClients; client++)
|
||||
{
|
||||
if(IsClientInGame(client))
|
||||
OnClientPutInServer(client);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnClientPutInServer(int client)
|
||||
{
|
||||
DHookEntity(g_hProcessUsercmds, true, client);
|
||||
}
|
||||
|
||||
public MRESReturn Hook_ProcessUsercmds(int client, Handle hParams)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int RunNullCommand(int client)
|
||||
{
|
||||
return SDKCall(g_hRunNullCommand, client);
|
||||
}
|
Loading…
Reference in New Issue
Block a user