From aebf588588657077c1f2e778c7fe58cf4f7e8319 Mon Sep 17 00:00:00 2001 From: Christian Date: Fri, 18 Dec 2020 23:07:18 +0100 Subject: [PATCH] should be able to whitelist nosteamers through DB simply --- .../scripting/bhop_limit_nosteamers.sp | 124 ++++++++++++------ 1 file changed, 85 insertions(+), 39 deletions(-) diff --git a/BlockNosteamBhop/scripting/bhop_limit_nosteamers.sp b/BlockNosteamBhop/scripting/bhop_limit_nosteamers.sp index d7e37cb0..78e57e0e 100644 --- a/BlockNosteamBhop/scripting/bhop_limit_nosteamers.sp +++ b/BlockNosteamBhop/scripting/bhop_limit_nosteamers.sp @@ -10,6 +10,7 @@ #include #include + 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; }