projects-jenz/Plugins/unloze_maptimer/scripting/unloze_maptimer.sp

809 lines
22 KiB
SourcePawn
Raw Normal View History

2019-03-02 15:18:51 +01:00
#pragma semicolon 1
#pragma newdecls required
#define DEBUG
#define PLUGIN_AUTHOR "jenz"
#define PLUGIN_VERSION "6.20"
#define ZONE_PREFIX_RACE "ZONE_PREFIX_RACE"
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <unloze_zones>
#include <colorvariables>
#include <regex>
#include <zombiereloaded>
bool g_bMessage[MAXPLAYERS];
bool g_bStopTimer[MAXPLAYERS];
bool g_bRoundend;
bool g_bSmap;
bool g_bRmap;
char g_cMapname[512];
float g_fEngineRoundtimeSurf[MAXPLAYERS];
float g_fEngineSecondsSurf[MAXPLAYERS];
float g_fPlayertimes[MAXPLAYERS];
float g_fEngineRoundtime;
float g_fEngineSeconds;
int g_iEngine_minutesSurf[MAXPLAYERS];
int g_iCurrentS[MAXPLAYERS];
int g_iSurf[MAXPLAYERS];
int g_iEngine_minutes;
Handle g_hSurfTimer[MAXPLAYERS];
public Plugin myinfo =
{
name = "Unloze Map Timer",
author = PLUGIN_AUTHOR,
description = "Timers for Race Maps",
version = PLUGIN_VERSION,
url = ""
};
//----------------------------------------------------------------------------------------------------
// Purpose: Pluginstart/mapstart
//----------------------------------------------------------------------------------------------------
public void OnPluginStart()
{
SQL_StartConnection();
RegConsoleCmd("sm_toptime", cmd_timerCheck, "checking");
RegConsoleCmd("sm_s1", cmd_timerCheckS1, "checking");
RegConsoleCmd("sm_s2", cmd_timerCheckS2, "checking 2");
RegConsoleCmd("sm_s3", cmd_timerCheckS3, "checking 3");
RegConsoleCmd("sm_s4", cmd_timerCheckS4, "checking 4");
RegConsoleCmd("sm_s5", cmd_timerCheckS5, "checking 5");
RegConsoleCmd("sm_s6", cmd_timerCheckS6, "checking 6");
RegConsoleCmd("sm_s7", cmd_timerCheckS7, "checking 7");
RegConsoleCmd("sm_s8", cmd_timerCheckS8, "checking 8");
RegConsoleCmd("sm_s9", cmd_timerCheckS9, "checking 9");
RegConsoleCmd("sm_s10", cmd_timerCheckS010, "checking 10");
HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
HookEvent("round_end", Event_RoundEnd);
}
public void OnMapStart()
{
GetCurrentMap(g_cMapname, sizeof(g_cMapname));
g_bSmap = false;
g_bRmap = false;
}
//----------------------------------------------------------------------------------------------------
// Purpose: mysql queries/callbacks
//----------------------------------------------------------------------------------------------------
public void SQL_SelectTop_Callback(Database db, DBResultSet results, const char[] error, any data)
{
if (results == null)
{
//LogError("[SS] Selecting players error. Reason: %s", error);
return;
}
int client = GetClientFromSerial(data);
if (client == 0)
{
LogError("[SS] Client is not valid. Reason: %s", error);
return;
}
Menu menu = new Menu(MenuHandler1);
if (g_iSurf[client] != 0)
{
menu.SetTitle("Maptimer: %s_S%i", g_cMapname, g_iSurf[client]);
}
else
{
menu.SetTitle("Maptimer: %s", g_cMapname);
}
int iS_Count = 0;
char gS_MenuContent[524];
while (results.FetchRow())
{
float oldTime = 0.0;
int engine_cMin = 0;
float engine_cSec = 0.0;
iS_Count++;
//Player Name
char[] gS_PlayerName = new char[MAX_NAME_LENGTH];
results.FetchString(0, gS_PlayerName, MAX_NAME_LENGTH);
oldTime = results.FetchFloat(1);
engine_cMin = RoundToFloor(oldTime / 60);
engine_cSec = oldTime - (engine_cMin * 60);
Format(gS_MenuContent, sizeof(gS_MenuContent), "Position: %i Time: %i:%f - %s", iS_Count, engine_cMin, engine_cSec, gS_PlayerName);
menu.AddItem("-1", gS_MenuContent, ITEMDRAW_DISABLED);
}
if (!iS_Count)
{
menu.AddItem("-1", "No results.", ITEMDRAW_DISABLED);
}
//menu.AddItem("no", "No", ITEMDRAW_DISABLED);
menu.ExitButton = true;
menu.Display(client, 20);
//////message//////
char sQuery[564];
char sSID[64];
GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
if (g_iSurf[client] != 0)
{
Format(sQuery, sizeof(sQuery), "SELECT name, `%sS%i` FROM `zetimer_tableSurf` WHERE steam_auth = '%s'", g_cMapname, g_iSurf[client], sSID);
}
else
{
Format(sQuery, sizeof(sQuery), "SELECT name, `%s` FROM `zetimer_table` WHERE steam_auth = '%s'", g_cMapname, sSID);
}
DBResultSet rs;
if ((rs = SQL_Query(db, sQuery)) == null)
{
delete db;
delete rs;
return;
}
char gS_MessageContent[524];
if (rs.FetchRow())
{
float oldTime = 0.0;
int engine_cMin = 0;
float engine_cSec = 0.0;
//Player Name
char[] gS_PlayerName = new char[MAX_NAME_LENGTH];
rs.FetchString(0, gS_PlayerName, MAX_NAME_LENGTH);
oldTime = rs.FetchFloat(1);
engine_cMin = RoundToFloor(oldTime / 60);
engine_cSec = oldTime - (engine_cMin * 60);
Format(gS_MessageContent, sizeof(gS_MessageContent), "%i:%f - %s", engine_cMin, engine_cSec, gS_PlayerName);
if (g_iSurf[client] != 0)
{
CPrintToChat(client, "Your best time Stage %i: %s", g_iSurf[client], gS_MessageContent);
}
else
{
CPrintToChat(client, "Your best time: %s", gS_MessageContent);
}
}
delete db;
delete rs;
}
public float receiveMYSQL(int client, float f_playerTime)
{
//variables
float iCollected;
char sQuery[255];
char sSID[64];
char error[255];
DBResultSet rs;
Database db;
if (SQL_CheckConfig("zetimer"))
{
db = SQL_Connect("zetimer", true, error, sizeof(error));
}
if (db == null)
{
CPrintToChatAll("{green}[Unloze] Error! Could not connect to MYSQL-DB!");
delete db;
}
GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
Format(sQuery, sizeof(sQuery), "SELECT `%s` FROM `zetimer_table` WHERE steam_auth = '%s'", g_cMapname, sSID);
//PrintToChatAll("receiveMYSQL sQuery: %s", sQuery);
if ((rs = SQL_Query(db, sQuery)) == null)
{
delete db;
delete rs;
return 0.0;
}
if(SQL_FetchRow(rs))
{
iCollected = SQL_FetchFloat(rs, 0);
}
delete rs;
delete db;
return iCollected;
}
public void sendMYSQLSurf(int client, float f_playerTime, int Entry)
{
char error[255];
Database db;
if (SQL_CheckConfig("zetimer"))
{
db = SQL_Connect("zetimer", true, error, sizeof(error));
}
if (db == null)
{
CPrintToChatAll("{green}[Unloze] Error! Could not connect to MYSQL-DB!");
delete db;
return;
}
char sSID[64];
GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
char sQuery[255];
//Format(sQuery, sizeof(sQuery), "SELECT `%sS1` FROM `zetimer_tableSurf` LIMIT 10", g_cMapname);
Format(sQuery, sizeof(sQuery), "SELECT `%sS%i` FROM `zetimer_tableSurf` LIMIT 10", g_cMapname, Entry);
//PrintToChatAll("sendMYSQLSurf sQuery: %s", sQuery);
DBResultSet rs;
if ((rs = SQL_Query(db, sQuery)) == null)
{
Format(sQuery, sizeof(sQuery), "ALTER TABLE `zetimer_tableSurf` ADD COLUMN `%sS%i` DECIMAL(13,3) NOT NULL", g_cMapname, Entry);
SQL_TQuery(db, DummyCallbackSimple, sQuery);
PrintToChat(client, "Sorry but the time was not counted since the Table had to be created first EKSDEE- jenz");
}
else
{
char l_cName[256];
SQL_FetchClientName(client, db, l_cName, sizeof(l_cName));
Format(sQuery, sizeof(sQuery), "INSERT INTO `zetimer_tableSurf` (`steam_auth`, `name`, `%sS%i`) VALUES ('%s', '%s', '%f') ON DUPLICATE KEY UPDATE `name` = '%s', `%sS%i` = '%f'", g_cMapname, Entry, sSID, l_cName, f_playerTime, l_cName, g_cMapname, Entry, f_playerTime);
SQL_TQuery(db, DummyCallbackSimple, sQuery);
}
delete db;
delete rs;
//CPrintToChatAll("reaching end, query is: %s", sQuery);
}
public void sendMYSQL(int client, float f_playerTime)
{
char error[255];
Database db;
if (SQL_CheckConfig("zetimer"))
{
db = SQL_Connect("zetimer", true, error, sizeof(error));
}
if (db == null)
{
CPrintToChatAll("{green}[Unloze] Error! Could not connect to MYSQL-DB!");
delete db;
}
char sSID[64];
GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
char sQuery[255];
Format(sQuery, sizeof(sQuery), "SELECT `%s` FROM `zetimer_table` LIMIT 10", g_cMapname);
DBResultSet rs;
if ((rs = SQL_Query(db, sQuery)) == null)
{
Format(sQuery, sizeof(sQuery), "ALTER TABLE `zetimer_table` ADD COLUMN `%s` DECIMAL(13,3) NOT NULL", g_cMapname);
SQL_TQuery(db, DummyCallbackSimple, sQuery);
PrintToChat(client, "Sorry but the time was not counted since the Table had to be created first EKSDEE- jenz");
}
else
{
Format(sQuery, sizeof(sQuery), "INSERT INTO `zetimer_table` (`steam_auth`, `name`, `%s`) VALUES ('%s', '%N', '%f') ON DUPLICATE KEY UPDATE `name` = '%N', `%s` = '%f'", g_cMapname, sSID, client, f_playerTime, client, g_cMapname, f_playerTime);
SQL_TQuery(db, DummyCallbackSimple, sQuery);
}
delete db;
delete rs;
//CPrintToChatAll("reaching end, query is: %s", sQuery);
}
public void SQL_StartConnection()
{
char error[255];
Database db;
if (SQL_CheckConfig("zetimer"))
{
db = SQL_Connect("zetimer", true, error, sizeof(error));
}
if (db == null)
{
CPrintToChatAll("{green}[Unloze] {white}Error! Could not connect to MYSQL-DB!");
delete db;
}
//create tables
char sQuery[255];
Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `zetimer_table` (`steam_auth` VARCHAR(254) NOT NULL, `name` VARCHAR(254) NOT NULL, PRIMARY KEY (`steam_auth`))");
SQL_TQuery(db, DummyCallbackSimple, sQuery);
Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `zetimer_tableSurf` (`steam_auth` VARCHAR(254) NOT NULL, `name` VARCHAR(254) NOT NULL, PRIMARY KEY (`steam_auth`))");
SQL_TQuery(db, DummyCallbackSimple, sQuery);
delete db;
}
public float receiveMYSQLSurf(int client, float f_playerTime, int i_zoneEndIndex)
{
//variables
float iCollected;
char sQuery[255];
char sSID[64];
char error[255];
DBResultSet rs;
Database db;
if (SQL_CheckConfig("zetimer"))
{
db = SQL_Connect("zetimer", true, error, sizeof(error));
}
if (db == null)
{
CPrintToChatAll("{green}[Unloze] Error! Could not connect to MYSQL-DB!");
delete db;
}
GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
Format(sQuery, sizeof(sQuery), "SELECT `%sS%i` FROM `zetimer_tableSurf` WHERE steam_auth = '%s'", g_cMapname, i_zoneEndIndex, sSID);
//PrintToChatAll("receiveMYSQLSurf sQuery: %s", sQuery);
if ((rs = SQL_Query(db, sQuery)) == null)
{
delete db;
delete rs;
return 0.0;
}
if (SQL_FetchRow(rs))
{
iCollected = SQL_FetchFloat(rs, 0);
}
delete rs;
delete db;
return iCollected;
}
public void mysqlLoadNames(int client)
{
char error[255];
char sQuery[255];
char sSID[64];
Database db;
DBResultSet rs;
if (SQL_CheckConfig("zetimer"))
{
db = SQL_Connect("zetimer", true, error, sizeof(error));
}
if (db == null)
{
CPrintToChatAll("{green}[Unloze] {white}Error! Could not connect to MYSQL-DB!");
delete db;
}
char cClient[250];
Format(cClient, sizeof(cClient), "%N", client);
if (StrContains(cClient, "'") >= 0)
{
ReplaceString(cClient, sizeof(cClient), "'", "", false);
}
GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
Format(sQuery, sizeof(sQuery), "UPDATE `zetimer_table` SET `name`= '%s' WHERE `steam_auth` = '%s'", cClient, sSID);
SQL_TQuery(db, DummyCallbackSimple, sQuery);
Format(sQuery, sizeof(sQuery), "UPDATE `zetimer_tableSurf` SET `name`= '%s' WHERE `steam_auth` = '%s'", cClient, sSID);
SQL_TQuery(db, DummyCallbackSimple, sQuery);
delete rs;
delete db;
}
public Action MysqlCheckSurfStage(int client, int count)
{
if (g_bSmap == false)
{
CPrintToChat(client, "[UNLOZE] Does not support Surf zones");
return Plugin_Handled;
}
Database db;
char sQuery[512];
char error[255];
if (SQL_CheckConfig("zetimer"))
{
db = SQL_Connect("zetimer", true, error, sizeof(error));
}
if (db == null)
{
CPrintToChatAll("{green}[Unloze] Error! Could not connect to MYSQL-DB!");
delete db;
}
Format(sQuery, sizeof(sQuery), "SELECT name, %sS%i FROM `zetimer_tableSurf` WHERE %sS%i > 0.000 ORDER BY %sS%i ASC LIMIT 10", g_cMapname, count, g_cMapname, count, g_cMapname, count);
db.Query(SQL_SelectTop_Callback, sQuery, GetClientSerial(client), DBPrio_Normal);
//CPrintToChat(client, " ");
delete db;
return Plugin_Handled;
}
//----------------------------------------------------------------------------------------------------
// Purpose: Chat Command for Race timer
//----------------------------------------------------------------------------------------------------
public Action cmd_timerCheck(int client, int args)
{
if (g_bRmap == false)
{
CPrintToChat(client, "[UNLOZE] Does not support race zones");
return Plugin_Handled;
}
Database db;
char sQuery[512];
char error[555];
if (SQL_CheckConfig("zetimer"))
{
db = SQL_Connect("zetimer", true, error, sizeof(error));
}
if (db == null)
{
CPrintToChatAll("{green}[Unloze] Error! Could not connect to MYSQL-DB!");
delete db;
}
g_iSurf[client] = 0;
Format(sQuery, sizeof(sQuery), "SELECT name, %s FROM `zetimer_table` WHERE %s > 0.000 ORDER BY %s ASC LIMIT 10", g_cMapname, g_cMapname, g_cMapname);
db.Query(SQL_SelectTop_Callback, sQuery, GetClientSerial(client), DBPrio_Normal);
delete db;
return Plugin_Handled;
}
//----------------------------------------------------------------------------------------------------
// Purpose: Chat Command for Surf timer
//----------------------------------------------------------------------------------------------------
public Action cmd_timerCheckS1(int client, int args)
{
g_iSurf[client] = 1;
MysqlCheckSurfStage(client, g_iSurf[client]);
return Plugin_Handled;
}
public Action cmd_timerCheckS2(int client, int args)
{
g_iSurf[client] = 2;
MysqlCheckSurfStage(client, g_iSurf[client]);
return Plugin_Handled;
}
public Action cmd_timerCheckS3(int client, int args)
{
g_iSurf[client] = 3;
MysqlCheckSurfStage(client, g_iSurf[client]);
return Plugin_Handled;
}
public Action cmd_timerCheckS4(int client, int args)
{
g_iSurf[client] = 4;
MysqlCheckSurfStage(client, g_iSurf[client]);
return Plugin_Handled;
}
public Action cmd_timerCheckS5(int client, int args)
{
g_iSurf[client] = 5;
MysqlCheckSurfStage(client, g_iSurf[client]);
return Plugin_Handled;
}
public Action cmd_timerCheckS6(int client, int args)
{
g_iSurf[client] = 6;
MysqlCheckSurfStage(client, g_iSurf[client]);
return Plugin_Handled;
}
public Action cmd_timerCheckS7(int client, int args)
{
g_iSurf[client] = 7;
MysqlCheckSurfStage(client, g_iSurf[client]);
return Plugin_Handled;
}
public Action cmd_timerCheckS8(int client, int args)
{
g_iSurf[client] = 8;
MysqlCheckSurfStage(client, g_iSurf[client]);
return Plugin_Handled;
}
public Action cmd_timerCheckS9(int client, int args)
{
g_iSurf[client] = 9;
MysqlCheckSurfStage(client, g_iSurf[client]);
return Plugin_Handled;
}
public Action cmd_timerCheckS010(int client, int args)
{
g_iSurf[client] = 10;
MysqlCheckSurfStage(client, g_iSurf[client]);
return Plugin_Handled;
}
//----------------------------------------------------------------------------------------------------
// Purpose: Menus
//----------------------------------------------------------------------------------------------------
public int MenuHandler1(Menu menu, MenuAction action, int param1, int param2)
{
/* If the menu was cancelled, print a message to the server about it. */
if (action == MenuAction_Cancel)
{
PrintToServer("Client %d's menu was cancelled. Reason: %d", param1, param2);
}
/* If the menu has ended, destroy it */
else if (action == MenuAction_End)
{
delete menu;
}
}
//----------------------------------------------------------------------------------------------------
// Purpose: Roundstart/roundend, Postadmincheck, disconnect
//----------------------------------------------------------------------------------------------------
public void Event_RoundStart(Handle event, const char[] name, bool dontBroadcast)
{
for (int i = 1; i < MaxClients; i++)
{
if (IsValidClient(i))
{
g_fPlayertimes[i] = 0.0;
g_bMessage[i] = false;
g_fEngineRoundtimeSurf[i] = 0.0;
g_fEngineSecondsSurf[i] = 0.0;
g_iEngine_minutesSurf[i] = 0;
g_iCurrentS[i] = -1;
g_iSurf[i] = 0;
}
}
g_fEngineRoundtime = 0.0;
g_iEngine_minutes = 0;
g_fEngineSeconds = 0.0;
CreateTimer(0.1, Timer_CountdownRace, _, TIMER_REPEAT);
g_bRoundend = false;
}
public void Event_RoundEnd(Handle event, const char[] name, bool dontBroadcast)
{
g_bRoundend = true;
}
public void OnClientDisconnect(int client)
{
//disconnect is triggered on each map switch
g_bMessage[client] = false;
g_fPlayertimes[client] = 0.0;
g_fEngineRoundtimeSurf[client] = 0.0;
g_fEngineSecondsSurf[client] = 0.0;
g_iEngine_minutesSurf[client] = 0;
g_iCurrentS[client] = 0;
g_iSurf[client] = 0;
g_bStopTimer[client] = false;
}
public void OnClientPostAdminCheck(int client)
{
g_bMessage[client] = false;
g_fPlayertimes[client] = 0.0;
g_fEngineRoundtimeSurf[client] = 0.0;
g_fEngineSecondsSurf[client] = 0.0;
g_iEngine_minutesSurf[client] = 0;
g_iCurrentS[client] = 0;
g_iSurf[client] = 0;
g_bStopTimer[client] = true;
}
//----------------------------------------------------------------------------------------------------
// Purpose: Counting maptime functions
//----------------------------------------------------------------------------------------------------
//Callback for timer
public Action Timer_CountdownRace(Handle timer, any data)
{
if (g_bRoundend)
{
return Plugin_Stop;
}
g_fEngineRoundtime += 0.1;
g_fEngineSeconds += 0.1;
if (g_fEngineSeconds >= 60.0)
{
g_iEngine_minutes += 1;
g_fEngineSeconds = 0.0;
}
return Plugin_Changed;
}
public Action Timer_CountdownSurf(Handle timer, int client)
{
if (g_iCurrentS[client] == -1 || !g_bStopTimer[client])
{
if (g_hSurfTimer[client] != INVALID_HANDLE)
{
delete g_hSurfTimer[client];
}
return Plugin_Stop;
}
//PrintToChatAll("g_fEngineRoundtimeSurf: %f", g_fEngineRoundtimeSurf[client]);
//PrintToChatAll("g_fEngineSecondsSurf: %f", g_fEngineSecondsSurf[client]);
g_fEngineRoundtimeSurf[client] += 0.1;
g_fEngineSecondsSurf[client] += 0.1;
if (g_fEngineSecondsSurf[client] >= 60.0)
{
g_iEngine_minutesSurf[client] += 1;
g_fEngineSecondsSurf[client] = 0.0;
}
return Plugin_Changed;
}
public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn)
{
g_iCurrentS[client] = -1;
}
//----------------------------------------------------------------------------------------------------
// Purpose: zone forwards
//----------------------------------------------------------------------------------------------------
public void unloze_zoneLeave(int client, char [] zone)
{
if (IsValidClient(client) && GetClientTeam(client) == 3 && StrContains(zone, "ZONE_PREFIX_SURF_S", false) >= 0)
{
//PrintToChatAll("unloze_zoneLeave succesfull: %s", zone);
g_fEngineRoundtimeSurf[client] = 0.0;
g_fEngineSecondsSurf[client] = 0.0;
g_iEngine_minutesSurf[client] = 0;
g_iCurrentS[client] = -1;
//createtime only one per player
g_hSurfTimer[client] = CreateTimer(0.1, Timer_CountdownSurf, client, TIMER_REPEAT);
g_iCurrentS[client] = 0;
}
}
public void unloze_zoneEntry(int client, char[] zone)
{
float oldTime[MAXPLAYERS];
//ZONE_PREFIX_RACE
if (IsValidClient(client) && GetClientTeam(client) == 3 && StrContains(zone, ZONE_PREFIX_RACE, false) >= 0)
{
g_bRmap = true;
g_fPlayertimes[client] = g_fEngineRoundtime;
if (g_bMessage[client] == true)
{
return;
}
CPrintToChat(client, "{green}[Unloze] Client: %N \nTime: %i:%f", client, g_iEngine_minutes, g_fEngineSeconds);
oldTime[client] = receiveMYSQL(client, g_fPlayertimes[client]);
int engine_cMin = 0;
float engine_cSec = 0.0;
engine_cMin = RoundToFloor(oldTime[client] / 60);
engine_cSec = oldTime[client] - (engine_cMin * 60);
CPrintToChat(client, "Your record: 0%i:%f \n Command: !toptime", engine_cMin, engine_cSec);
if (g_fPlayertimes[client] < oldTime[client] || oldTime[client] == -1.000000 || oldTime[client] == 0.000000)
{
sendMYSQL(client, g_fPlayertimes[client]);
CPrintToChat(client, "Updated timer");
}
g_bMessage[client] = true;
return;
}
//everything below here is only for ZONE_PREFIX_SURF
if (StrContains(zone, "ZONE_PREFIX_SURF_S", false) >= 0)
{
//When the first client enters the surf gets unlocked
//else do nothing with surf start zoneEntry
g_bSmap = true;
return;
}
if (StrContains(zone, "ZONE_PREFIX_SURF_E", false) < 0)
{
//if client entered non surf end zone stop
return;
}
char out[64];
//stops timer unsafe?
g_iCurrentS[client] = -1;
if (StrContains(zone, "10", false) < 0)
{
Regexmatcher(zone, out, sizeof(out));
}
else
{
Format(out, sizeof(out), "10");
}
if (GetClientTeam(client) != 3)
{
return;
}
int i_zoneEndIndex;
int engine_cMinS1 = 0;
float engine_cSecS1 = 0.0;
//PrintToChatAll("zone: %s", zone);
//PrintToChatAll("out: %s", out);
i_zoneEndIndex = StringToInt(out);
g_fPlayertimes[client] = g_fEngineRoundtimeSurf[client];
oldTime[client] = receiveMYSQLSurf(client, g_fPlayertimes[client], i_zoneEndIndex);
//CPrintToChat(client, "oldTime[%N] ZONE_PREFIX_SURF: %f", client, oldTime[client]);
CPrintToChat(client, "{green}[UNLOZE] Client: %N \nTime: %i:%f", client, g_iEngine_minutesSurf[client], g_fEngineSecondsSurf[client]);
engine_cMinS1 = RoundToFloor(oldTime[client] / 60);
engine_cSecS1 = oldTime[client] - (engine_cMinS1 * 60);
CPrintToChat(client, "Your record Stage %i: 0%i:%f \n Command: !s%i", i_zoneEndIndex, engine_cMinS1, engine_cSecS1, i_zoneEndIndex);
if (g_fPlayertimes[client] < oldTime[client] || oldTime[client] <= 0.000000)
{
sendMYSQLSurf(client, g_fPlayertimes[client], i_zoneEndIndex);
CPrintToChat(client, "Updated surftimer");
}
}
//----------------------------------------------------------------------------------------------------
// Purpose: stocks
//----------------------------------------------------------------------------------------------------
stock bool IsValidClient(int client)
{
if (client > 0 && client <= MaxClients && IsClientInGame(client) && !IsFakeClient(client) && IsPlayerAlive(client))
{
return true;
}
return false;
}
stock void Regexmatcher(const char[] message, char[] out, int maxlen)
{
Regex regex = CompileRegex("[0-9]");
//the match is needed for getsubstring apperently
regex.Match(message);
regex.GetSubString(0, out, maxlen);
}
public void DummyCallbackSimple(Handle hOwner, Handle hChild, const char[] err, DataPack pack1)
{
if (hOwner == null || hChild == null)
{
LogError("Query error. (%s)", err);
}
}
stock void SQL_FetchClientName(int client, Database database, char[] buffer, int size)
{
char sName[MAX_NAME_LENGTH];
GetClientName(client, sName, sizeof(sName));
int size2 = 2 * strlen(sName) + 1;
char[] sEscapedName = new char[size2 + 1];
SQL_EscapeString(database, sName, sEscapedName, size2 + 1);
strcopy(buffer, size, sEscapedName);
}