FIXED THE MUSIC SYSTEM FINALLY AFTER THE 7TH REWRITE. THANK YOU SO MUCH, @arieshi255 !!! + Made music system CONSIDERABLY more accurate, and virtually immune to server lag as we now base ticks off the game engine's real time clock in seconds, with an accuracy of up to 100ns. + Changed ChangeBGM function to accept a true or false, determining whether to stop the music and change it on the fly, or wait for the current song to finish. + Disabled debug info (getting real world time) from going into global chat. + Optimised music system's loop code to skip over index 0 (console) as the server console should never receive sound commands anyways.
83 lines
3.7 KiB
SourcePawn
83 lines
3.7 KiB
SourcePawn
// ASS Utilities - Advanced server features
|
|
Database Ass_Database_ServerMetrics;
|
|
void Set_Ass_Database_ServerMetrics(Database db) {
|
|
Ass_Database_ServerMetrics = db;
|
|
}
|
|
Database Get_Ass_Database_ServerMetrics() {
|
|
return Ass_Database_ServerMetrics;
|
|
}
|
|
//Gets the server time as an int array, 0 = hour, 1 = minute, 2 = AM/PM(0/1 respectively)
|
|
void GetServerTime(int retVal[3]) {
|
|
char buffer[8];
|
|
FormatTime(buffer, sizeof(buffer), "%I", GetTime());
|
|
int hour = StringToInt(buffer);
|
|
FormatTime(buffer, sizeof(buffer), "%M", GetTime());
|
|
int minute = StringToInt(buffer);
|
|
FormatTime(buffer, sizeof(buffer), "%p", GetTime());
|
|
int ampm = (StrEqual(buffer, "AM")) ? 0 : 1;
|
|
retVal[0] = hour;
|
|
retVal[1] = minute;
|
|
retVal[2] = ampm;
|
|
}
|
|
//Gets the server stats and display it in the server
|
|
public Action StatsTracker(Handle timer) {
|
|
int time[3];
|
|
GetServerTime(time);
|
|
char hour[4], minute[4], ampm[4];
|
|
Format(hour, sizeof(hour), "%i", time[0]);
|
|
Format(minute, sizeof(minute), "%i", time[1]);
|
|
Format(ampm, sizeof(ampm), "%i", time[2]);
|
|
FastFire2("FBMetric.TimeHH", "SetTextureIndex", hour, 0.0, false);
|
|
FastFire2("FBMetric.TimeMM", "SetTextureIndex", minute, 0.0, false);
|
|
FastFire2("FBMetric.TimeAMPM", "SetTextureIndex", ampm, 0.0, false);
|
|
//PrintToChatAll("Current time is %s:%s %s", hour, minute, StringToInt(ampm) == 0 ? "AM" : "PM");
|
|
CreateTimer(15.0, StatsTracker);
|
|
if (!Get_Ass_Database()) return Plugin_Stop;
|
|
char query[512];
|
|
query[0] = '\0'; // Clear buffer
|
|
StrCat(query, sizeof(query), "SELECT 'memory_used_gib' AS name, value FROM memory_used_gib WHERE id = 1 ");
|
|
StrCat(query, sizeof(query), "UNION ALL SELECT 'memory_total_gib', value FROM memory_total_gib WHERE id = 1 ");
|
|
StrCat(query, sizeof(query), "UNION ALL SELECT 'cpu_usage_percent', value FROM cpu_usage_percent WHERE id = 1 ");
|
|
StrCat(query, sizeof(query), "UNION ALL SELECT 'cpu_frequency_x10', value FROM cpu_frequency_x10 WHERE id = 1 ");
|
|
StrCat(query, sizeof(query), "UNION ALL SELECT 'cpu_temperature_c', value FROM cpu_temperature_c WHERE id = 1");
|
|
SQL_TQuery(Ass_Database_ServerMetrics, OnMetricsFetch, query);
|
|
return Plugin_Stop;
|
|
}
|
|
|
|
public void OnMetricsFetch(Database db, DBResultSet results, const char[] error, any data)
|
|
{
|
|
if (results == null)
|
|
{
|
|
LogError("Stat fetch failed: %s", error);
|
|
return;
|
|
}
|
|
|
|
while (results.FetchRow())
|
|
{
|
|
char name[32];
|
|
int value;
|
|
results.FetchString(0, name, sizeof(name));
|
|
value = results.FetchInt(1);
|
|
char val[32];
|
|
if (StrEqual(name, "memory_used_gib")) {
|
|
Format(val, sizeof(val), "%i", value);
|
|
FastFire2("FBMetric.RAMUtil", "SetTextureIndex", val, 0.0, false);
|
|
} else if (StrEqual(name, "memory_total_gib")) {
|
|
Format(val, sizeof(val), "%i", value);
|
|
FastFire2("FBMetric.RAMTotal", "SetTextureIndex", val, 0.0, false);
|
|
} else if (StrEqual(name, "cpu_usage_percent")) {
|
|
Format(val, sizeof(val), "%i", value);
|
|
FastFire2("FBMetric.CPUUtil", "SetTextureIndex", val, 0.0, false);
|
|
//PrintToServer("CPU Usage: %d%%", value);
|
|
} else if (StrEqual(name, "cpu_frequency_x10")) {
|
|
Format(val, sizeof(val), "%i", value);
|
|
FastFire2("FBMetric.CPUFreq", "SetTextureIndex", val, 0.0, false);
|
|
//PrintToServer("CPU Freq: %.1f GHz", value / 10.0);
|
|
} else if (StrEqual(name, "cpu_temperature_c")) {
|
|
Format(val, sizeof(val), "%i", value);
|
|
FastFire2("FBMetric.CPUTemp", "SetTextureIndex", val, 0.0, false);
|
|
//PrintToServer("CPU Temp: %d°C", value);
|
|
}
|
|
}
|
|
FastFire2("FBMetrics.*", "Enable", "", 0.0, false);
|
|
} |