#include #pragma semicolon 1 #define DEBUG #define PLUGIN_AUTHOR "jenz" #define PLUGIN_VERSION "1.0" #define generic_length 256 #include #include public Plugin myinfo = { name = "nosteam bhop blocker", author = PLUGIN_AUTHOR, description = "no more bhop for meatbags ", version = PLUGIN_VERSION, url = "" }; bool bhop_restricted_nosteamer[MAXPLAYERS + 1]; int buttons_old[MAXPLAYERS + 1]; int flags_old[MAXPLAYERS + 1]; Database g_dDatabase; public void OnPluginStart() { 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) { if (client > 0 && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client)) return true; return false; } public void OnClientDisconnect(int client) { bhop_restricted_nosteamer[client] = false; buttons_old[client] = 0; flags_old[client] = 0; } 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 (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; }