Files
SMScripts/scripting/burningbird_rehasher.sp
2025-04-15 22:27:20 -04:00

63 lines
1.9 KiB
SourcePawn

#include <sourcemod>
Database BB_DB;
static char PLUGIN_VERSION[8] = "1.0.0";
bool rehash;
public Plugin myinfo = {
name = "Burningbird Donator Rehash",
author = "Fartsy",
description = "Checks each minute for new donators and then rehashes the admins if needed",
version = PLUGIN_VERSION,
url = "https://wiki.firehostredux.com"
};
//Connect to database
public void OnConfigsExecuted() {
if (!BB_DB) Database.Connect(BB_OnConnect, "bb_rehasher");
}
//Format database if needed
public void BB_OnConnect(Database db, char[] error, any data) {
if (!db) {
LogError(error);
return;
}
char buffer[64];
db.Driver.GetIdentifier(buffer, sizeof(buffer));
if (!StrEqual(buffer, "mysql", false)) {
delete db;
LogError("Could not connect to the database: expected mysql database.");
return;
}
BB_DB = db;
BB_DB.Query(Database_FastQuery, "CREATE TABLE IF NOT EXISTS bb_rehash(rehash INT UNSIGNED DEFAULT '0');");
BB_DB.Query(Database_FastQuery, "INSERT INTO bb_rehash (rehash) VALUES (1) ON DUPLICATE KEY UPDATE rehash = 1;"); // Set to 1 so we don't miss out on donators between restarts.
CreateTimer(60.0, CheckReloadStatus);
}
//Check if we need to rehash, do the rehash
public Action CheckReloadStatus(Handle timer){
BB_DB.Query(Rehasher, "SELECT * FROM bb_rehash");
return Plugin_Stop;
}
public void Rehasher(Database db, DBResultSet results, const char[] error, any data) {
if (!results) {
LogError("Failed to query database: %s", error);
return;
}
if (results.FetchRow()) {
rehash = results.FetchInt(0) == 1 ? true : false;
}
if (rehash){
ServerCommand("sm_rehash");
BB_DB.Query(Database_FastQuery, "UPDATE bb_rehash SET rehash = 0;");
}
CreateTimer(60.0, CheckReloadStatus);
return;
}
//Database Fastquery Manager
public void Database_FastQuery(Database db, DBResultSet results, const char[] error, any data) {
if (!results) LogError("Failed to query database: %s", error);
}