should be able to whitelist nosteamers through DB simply
This commit is contained in:
parent
15c63febe2
commit
aebf588588
@ -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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user