should be able to whitelist nosteamers through DB simply

This commit is contained in:
Christian 2020-12-18 23:07:18 +01:00
parent 15c63febe2
commit aebf588588

View File

@ -10,6 +10,7 @@
#include <sourcemod> #include <sourcemod>
#include <sdktools> #include <sdktools>
public Plugin myinfo = public Plugin myinfo =
{ {
name = "nosteam bhop blocker", name = "nosteam bhop blocker",
@ -22,14 +23,42 @@ public Plugin myinfo =
bool bhop_restricted_nosteamer[MAXPLAYERS + 1]; bool bhop_restricted_nosteamer[MAXPLAYERS + 1];
int buttons_old[MAXPLAYERS + 1]; int buttons_old[MAXPLAYERS + 1];
int flags_old[MAXPLAYERS + 1]; int flags_old[MAXPLAYERS + 1];
Database g_dDatabase;
public void OnPluginStart() public void OnPluginStart()
{ {
for (int i = 1; i <= MAXPLAYERS; i++) SQL_StartConnection();
{ for (int i = 1; i <= MAXPLAYERS; i++)
if (IsValidClient(i)) {
OnClientPostAdminCheck(i); if (IsValidClient(i))
} OnClientPostAdminCheck(i);
}
}
public void OnMapStart()
{
SQL_StartConnection();
}
public void SQL_StartConnection()
{
char error[512];
if (SQL_CheckConfig("bhopnosteam"))
g_dDatabase = SQL_Connect("bhopnosteam", true, error, sizeof(error));
if (g_dDatabase == null)
{
PrintToChatAll("{green}[UNLOZE] {white}Error! Could not connect to MYSQL-DB!");
}
//create table
char sQuery[512];
Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS bhop_whitelist (`steam_auth` VARCHAR(254) NOT NULL, `name` VARCHAR(254) NOT NULL, PRIMARY KEY (`steam_auth`))");
SQL_TQuery(g_dDatabase, DummyCallbackSimple, sQuery);
}
public void DummyCallbackSimple(Handle hOwner, Handle hChild, const char[] err, DataPack pack1)
{
if (hOwner == null || hChild == null)
LogError("Query error. (%s)", err);
} }
stock bool IsValidClient(int client) stock bool IsValidClient(int client)
@ -48,44 +77,61 @@ public void OnClientDisconnect(int client)
public void OnClientPostAdminCheck(int client) public void OnClientPostAdminCheck(int client)
{ {
if (!IsFakeClient(client) && !IsClientSourceTV(client) && !PM_IsPlayerSteam(client)) if (!IsFakeClient(client) && !IsClientSourceTV(client) && !PM_IsPlayerSteam(client))
{ {
bhop_restricted_nosteamer[client] = true; bhop_restricted_nosteamer[client] = true;
buttons_old[client] = 0; buttons_old[client] = 0;
flags_old[client] = 0; flags_old[client] = 0;
} if (g_dDatabase)
{
DBResultSet rs;
char steam_auth[512];
GetClientAuthId(client, AuthId_Steam2, steam_auth, sizeof(steam_auth));
strcopy(steam_auth, sizeof(steam_auth), steam_auth[8]);
char sQuery[512];
Format(sQuery, sizeof(sQuery), "SELECT * FROM bhop_whitelist WHERE steam_auth = '%s'", steam_auth);
if ((rs = SQL_Query(g_dDatabase, sQuery)) != null)
{
rs.FetchRow();
if (rs.RowCount > 0)
{
bhop_restricted_nosteamer[client] = false;
PrintToChat(client, "bhop unrestricted!");
}
}
delete rs;
}
}
} }
public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float vel[3], const float angles[3], int weapon, int subtype, public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float vel[3], const float angles[3], int weapon, int subtype,
int cmdnum, int tickcount, int seed, const int mouse[2]) int cmdnum, int tickcount, int seed, const int mouse[2])
{ {
if (!IsValidClient(client) || !IsPlayerAlive(client) || !bhop_restricted_nosteamer[client]) return; if (!IsValidClient(client) || !IsPlayerAlive(client) || !bhop_restricted_nosteamer[client]) return;
if (!(buttons_old[client] & IN_JUMP) && (!(buttons & IN_JUMP))) if (!(buttons_old[client] & IN_JUMP) && (!(buttons & IN_JUMP)))
{ {
flags_old[client] = GetEntityFlags(client); flags_old[client] = GetEntityFlags(client);
return; return;
} }
if (buttons_old[client] & IN_JUMP) if (buttons_old[client] & IN_JUMP)
{ {
if (!(buttons & IN_JUMP)) if (!(buttons & IN_JUMP))
if (GetEntityFlags(client) & FL_ONGROUND) if (GetEntityFlags(client) & FL_ONGROUND)
buttons_old[client] = buttons; buttons_old[client] = buttons;
return; return;
} }
if (!(flags_old[client] & FL_ONGROUND)) if (!(flags_old[client] & FL_ONGROUND))
return; return;
float vVel[3]; float vVel[3];
GetEntPropVector(client, Prop_Data, "m_vecVelocity", vVel); GetEntPropVector(client, Prop_Data, "m_vecVelocity", vVel);
float fVelocity = SquareRoot(Pow(vVel[0], 2.0) + Pow(vVel[1], 2.0)); float fVelocity = SquareRoot(Pow(vVel[0], 2.0) + Pow(vVel[1], 2.0));
float velocity_block[3]; float velocity_block[3];
velocity_block[0] = vel[0]; velocity_block[0] = vel[0];
velocity_block[1] = vel[1]; velocity_block[1] = vel[1];
velocity_block[2] = vel[2]; velocity_block[2] = vel[2];
velocity_block[1] = 0.0; velocity_block[1] = 0.0;
if (fVelocity > 320.0) if (fVelocity > 320.0)
{ TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, velocity_block);
TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, velocity_block); buttons_old[client] = buttons;
}
buttons_old[client] = buttons;
} }