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 <sdktools>
public Plugin myinfo =
{
name = "nosteam bhop blocker",
@ -22,14 +23,42 @@ public Plugin myinfo =
bool bhop_restricted_nosteamer[MAXPLAYERS + 1];
int buttons_old[MAXPLAYERS + 1];
int flags_old[MAXPLAYERS + 1];
Database g_dDatabase;
public void OnPluginStart()
{
for (int i = 1; i <= MAXPLAYERS; i++)
{
if (IsValidClient(i))
OnClientPostAdminCheck(i);
}
SQL_StartConnection();
for (int i = 1; i <= MAXPLAYERS; 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)
@ -48,44 +77,61 @@ public void OnClientDisconnect(int client)
public void OnClientPostAdminCheck(int client)
{
if (!IsFakeClient(client) && !IsClientSourceTV(client) && !PM_IsPlayerSteam(client))
{
bhop_restricted_nosteamer[client] = true;
buttons_old[client] = 0;
flags_old[client] = 0;
}
if (!IsFakeClient(client) && !IsClientSourceTV(client) && !PM_IsPlayerSteam(client))
{
bhop_restricted_nosteamer[client] = true;
buttons_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,
int cmdnum, int tickcount, int seed, const int mouse[2])
{
if (!IsValidClient(client) || !IsPlayerAlive(client) || !bhop_restricted_nosteamer[client]) return;
if (!(buttons_old[client] & IN_JUMP) && (!(buttons & IN_JUMP)))
{
flags_old[client] = GetEntityFlags(client);
return;
}
if (buttons_old[client] & IN_JUMP)
{
if (!(buttons & IN_JUMP))
if (GetEntityFlags(client) & FL_ONGROUND)
buttons_old[client] = buttons;
return;
}
if (!(flags_old[client] & FL_ONGROUND))
return;
float vVel[3];
GetEntPropVector(client, Prop_Data, "m_vecVelocity", vVel);
float fVelocity = SquareRoot(Pow(vVel[0], 2.0) + Pow(vVel[1], 2.0));
float velocity_block[3];
velocity_block[0] = vel[0];
velocity_block[1] = vel[1];
velocity_block[2] = vel[2];
velocity_block[1] = 0.0;
if (fVelocity > 320.0)
{
TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, velocity_block);
}
buttons_old[client] = buttons;
if (!IsValidClient(client) || !IsPlayerAlive(client) || !bhop_restricted_nosteamer[client]) return;
if (!(buttons_old[client] & IN_JUMP) && (!(buttons & IN_JUMP)))
{
flags_old[client] = GetEntityFlags(client);
return;
}
if (buttons_old[client] & IN_JUMP)
{
if (!(buttons & IN_JUMP))
if (GetEntityFlags(client) & FL_ONGROUND)
buttons_old[client] = buttons;
return;
}
if (!(flags_old[client] & FL_ONGROUND))
return;
float vVel[3];
GetEntPropVector(client, Prop_Data, "m_vecVelocity", vVel);
float fVelocity = SquareRoot(Pow(vVel[0], 2.0) + Pow(vVel[1], 2.0));
float velocity_block[3];
velocity_block[0] = vel[0];
velocity_block[1] = vel[1];
velocity_block[2] = vel[2];
velocity_block[1] = 0.0;
if (fVelocity > 320.0)
TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, velocity_block);
buttons_old[client] = buttons;
}