diff --git a/.github/workflows/test_server.yml b/.github/workflows/test_server.yml
index 124a9831a..b547f2d44 100644
--- a/.github/workflows/test_server.yml
+++ b/.github/workflows/test_server.yml
@@ -89,7 +89,18 @@ jobs:
done
working-directory: ${{ env.SCRIPTING_PATH }}
- - name: Upload files
+ - name: Upload files to EU
+ uses: SamKirkland/FTP-Deploy-Action@2.0.0
+ env:
+ FTP_SERVER: ${{ secrets.SFTP_HOST_EU }}
+ FTP_USERNAME: ${{ secrets.SFTP_USER_EU }}
+ FTP_PASSWORD: ${{ secrets.SFTP_PASS_EU }}
+ LOCAL_DIR: upload
+ METHOD: sftp
+ PORT: ${{ secrets.SFTP_PORT_EU }}
+ ARGS: --no-empty-dirs
+
+ - name: Upload files to NA
uses: SamKirkland/FTP-Deploy-Action@2.0.0
env:
FTP_SERVER: ${{ secrets.SFTP_HOST }}
@@ -100,7 +111,17 @@ jobs:
PORT: ${{ secrets.SFTP_PORT }}
ARGS: --no-empty-dirs
- - name: Restart test server
+ - name: Restart EU test server
+ shell: bash
+ run: |
+ curl --request POST \
+ --url ${{ secrets.BASE_URL_EU }}api/client/servers/${{ secrets.SERVER_ID_EU }}/power \
+ --header 'Accept: application/json' \
+ --header 'Authorization: Bearer ${{ secrets.API_KEY_EU }}' \
+ --header 'Content-Type: application/json' \
+ --data '{ "signal": "restart" }'
+
+ - name: Restart NA test server
shell: bash
run: |
curl --request POST \
diff --git a/README.md b/README.md
index 07526740f..4b1d9a1ff 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,7 @@ This is an open source timer plugin made for CS:GO.
SurfTimer Test Servers:
- North America: `connect na-test-server.surftimer.dev`
+ - Europe: `connect eu-test-server.surftimer.dev:27045`
## Project Goals
@@ -37,16 +38,16 @@ Less bugs = better experience = more players for surf!
* Download and install [Metamod 1.11](https://www.sourcemm.net/downloads.php/?branch=stable)
* Download and install [SourceMod 1.10](https://www.sourcemod.net/downloads.php?branch=stable) (latest stable) or [SourceMod 1.11](https://www.sourcemod.net/downloads.php?branch=master&all=1) (required for some recommended plugins)
* Download latest [release](https://github.com/surftimer/SurfTimer/releases/latest) and upload all the files to your csgo server directory
-* Set up A MySQL Database (MySQL 5.7, MySQL 8+, MariaDB supported)
+* Set up A MySQL Database (MySQL 5.7, MySQL 8+, MariaDB supported) and [initialise a schema for surftimer](https://github.com/surftimer/SurfTimer/blob/master/scripts/mysql-files/fresh_install.sql)
* Add a MySQL database called surftimer to csgo/addons/sourcemod/configs/databases.cfg
-* Ensure [End-Touch-Fix](https://github.com/rumourA/End-Touch-Fix) is loaded, this is required to ensure times are always accurate
+* Ensure [End-Touch-Fix](https://github.com/rumourA/End-Touch-Fix) is loaded, this is required to ensure times are always accurate (note: this is included in the official SurfTimer release build and loaded automatically without installing separately unless you are compiling SurfTimer yourself)
* Ensure you have added all the requirements below
## Installation common errors
[SurfTimer] Database tables could not be created! Error: Lost connection to MySQL server during query
-Run the following [queries](https://github.com/surftimer/SurfTimer/blob/master/scripts/mysql-files/fresh_install.sql) on your database:
+Run the following [queries](https://github.com/surftimer/SurfTimer/blob/master/scripts/mysql-files/fresh_install.sql) on your database
@@ -73,10 +74,15 @@ Run the following queries on your database:
## Requirements
**SourceMod Extensions**
-* [DHooks](https://github.com/peace-maker/DHooks2)
+* (\*) [DHooks](https://github.com/peace-maker/DHooks2)
* *(recommended)* [Cleaner](https://github.com/Accelerator74/Cleaner) - Suppresses server console warnings
+(\*) *Already included with SourceMod 1.11.6820 and newer*
+
**SourceMod Libraries**
+
+ℹ️ SourceMod Libraries are only required if you are compiling SurfTimer yourself
+
* [SMLib](https://github.com/bcserv/smlib/tree/transitional_syntax)
* [ColorLib](https://github.com/c0rp3n/colorlib-sm)
* [AutoExecConfig](https://github.com/Impact123/AutoExecConfig)
@@ -96,6 +102,7 @@ Run the following queries on your database:
* *(recommended)* [Stripper:Source](http://www.bailopan.net/stripper/) - Allows adding/modifying/removing entities from a map before it loads (config files included)
* *(optional)* [Surftimer-Web-Stats](https://github.com/KristianP26/Surftimer-Web-Stats) - Web statistics
* *(optional)* [Surftimer-Discord-Bot](https://github.com/Sarrus1/SurfTimer-Discord-Bot) - Discord BOT
+* *(optional)* [CSGO-Surf-Load-Screens](https://github.com/Sayt123/CSGO-Surf-Load-Screens) - Map loading images for surf maps
## Upgrading
diff --git a/addons/sourcemod/scripting/SurfTimer.sp b/addons/sourcemod/scripting/SurfTimer.sp
index 6aa114ea1..989d5d212 100644
--- a/addons/sourcemod/scripting/SurfTimer.sp
+++ b/addons/sourcemod/scripting/SurfTimer.sp
@@ -159,6 +159,9 @@ public void OnMapStart()
// Get mapname
GetCurrentMap(g_szMapName, 128);
+ // Download map radar image if existing
+ AddRadarImages();
+
// Create nav file
CreateNavFile();
@@ -177,22 +180,26 @@ public void OnMapStart()
// Load spawns
if (!g_bRenaming && !g_bInTransactionChain)
+ {
checkSpawnPoints();
+ }
db_viewMapSettings();
/// Start Loading Server Settings
ConVar cvHibernateWhenEmpty = FindConVar("sv_hibernate_when_empty");
- if(g_tables_converted){
+ if(g_tables_converted)
+ {
if (!g_bRenaming && !g_bInTransactionChain && (IsServerProcessing() || !cvHibernateWhenEmpty.BoolValue))
{
- LogToFileEx(g_szLogFile, "[surftimer] Starting to load server settings");
+ LogQueryTime("[surftimer] Starting to load server settings");
g_fServerLoading[0] = GetGameTime();
db_selectMapZones();
}
}
- else{
+ else
+ {
CreateTimer(1.0, DatabaseUpgrading, INVALID_HANDLE, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
}
@@ -214,7 +221,9 @@ public void OnMapStart()
}
for (int i = 0; i < MAX_STYLES; i++)
+ {
g_bReplayTickFound[i] = false;
+ }
// Precache
InitPrecache();
@@ -246,7 +255,9 @@ public void OnMapStart()
// Hook Zones
iEnt = -1;
if (g_hTriggerMultiple != null)
+ {
CloseHandle(g_hTriggerMultiple);
+ }
g_hTriggerMultiple = CreateArray(256);
while ((iEnt = FindEntityByClassname(iEnt, "trigger_multiple")) != -1)
diff --git a/addons/sourcemod/scripting/surftimer/admin.sp b/addons/sourcemod/scripting/surftimer/admin.sp
index bfd98b3c7..4eb1f55b8 100644
--- a/addons/sourcemod/scripting/surftimer/admin.sp
+++ b/addons/sourcemod/scripting/surftimer/admin.sp
@@ -51,6 +51,33 @@ public int TopMenuHandler2(Handle topmenu, TopMenuAction action, TopMenuObject o
return 0;
}
+public Action Admin_insertMapperName(int client, int args)
+{
+ if (!IsValidClient(client))
+ return Plugin_Handled;
+
+ if (!IsPlayerZoner(client))
+ {
+ CReplyToCommand(client, "%t", "AdminMapperName", g_szChatPrefix);
+ return Plugin_Handled;
+ }
+
+ if (args == 0)
+ {
+ CReplyToCommand(client, "%t", "MapperNameUsage", g_szChatPrefix);
+ return Plugin_Handled;
+ }
+ else
+ {
+ char arg1[64];
+ //char sMapperName[64];
+ GetCmdArgString(arg1, sizeof(arg1));
+
+ db_insertMapperName(client, arg1);
+ }
+ return Plugin_Handled;
+}
+
public Action Admin_insertMapTier(int client, int args)
{
if (!IsValidClient(client))
diff --git a/addons/sourcemod/scripting/surftimer/buttonpress.sp b/addons/sourcemod/scripting/surftimer/buttonpress.sp
index 10b657f67..63589509e 100644
--- a/addons/sourcemod/scripting/surftimer/buttonpress.sp
+++ b/addons/sourcemod/scripting/surftimer/buttonpress.sp
@@ -704,7 +704,7 @@ public void CL_OnEndTimerPress(int client)
else if (style != 0)
{
g_fPBDifference_Bonus[client][style][zGroup] = g_fFinalTime[client] - g_fStylePersonalRecordBonus[style][zGroup][client];
- g_fWRDifference_Bonus[client][style][zGroup] = g_fFinalTime[client] - g_fStyleBonusFastest[style][zGroup]
+ g_fWRDifference_Bonus[client][style][zGroup] = g_fFinalTime[client] - g_fStyleBonusFastest[style][zGroup];
if (GetConVarBool(g_hReplaceReplayTime) && (g_fFinalTime[client] < g_fReplayTimes[zGroup][style] || g_fReplayTimes[zGroup][style] == 0.0))
{
diff --git a/addons/sourcemod/scripting/surftimer/commands.sp b/addons/sourcemod/scripting/surftimer/commands.sp
index 920cd1e3b..13366e8c2 100644
--- a/addons/sourcemod/scripting/surftimer/commands.sp
+++ b/addons/sourcemod/scripting/surftimer/commands.sp
@@ -108,6 +108,8 @@ void CreateCommands()
RegConsoleCmd("sm_hookzone", Command_HookZones, "[surftimer] [zoner] Opens up zone hook creation menu.");
RegConsoleCmd("sm_addmaptier", Admin_insertMapTier, "[surftimer] [zoner] Changes maps tier");
RegConsoleCmd("sm_amt", Admin_insertMapTier, "[surftimer] [zoner] Changes maps tier");
+ RegConsoleCmd("sm_amn", Admin_insertMapperName, "[surftimer] [zoner] Adds mapper name to DB.");
+ RegConsoleCmd("sm_addmappername", Admin_insertMapperName, "[surftimer] [zoner] Adds mapper name to DB.");
RegConsoleCmd("sm_addspawn", Admin_insertSpawnLocation, "[surftimer] [zoner] Changes the position !r takes players to");
RegConsoleCmd("sm_delspawn", Admin_deleteSpawnLocation, "[surftimer] [zoner] Removes custom !r position");
RegConsoleCmd("sm_mapsettings", Admin_MapSettings, "[surftimer] [zoner] Displays menu containing various options to change map settings");
@@ -625,7 +627,10 @@ public Action Command_normalMode(int client, int args)
return Plugin_Handled;
Client_Stop(client, 1);
- CreateTimer(0.1, DisablePrac, GetClientSerial(client));
+
+ if (g_bPracticeMode[client])
+ g_bPracticeMode[client] = false;
+
Command_Restart(client, 1);
CPrintToChat(client, "%t", "PracticeNormal", g_szChatPrefix);
@@ -1250,7 +1255,7 @@ public Action Command_ToBonus(int client, int args)
if (g_bPracticeMode[client])
{
- CreateTimer(0.1, DisablePrac, GetClientSerial(client));
+ g_bPracticeMode[client] = false;
CPrintToChat(client, "%t", "PracticeNormal", g_szChatPrefix);
}
return Plugin_Handled;
@@ -1375,7 +1380,7 @@ public Action Command_ToStage(int client, int args)
if (g_bPracticeMode[client])
{
- CreateTimer(0.1, DisablePrac, GetClientSerial(client));
+ g_bPracticeMode[client] = false;
CPrintToChat(client, "%t", "PracticeNormal", g_szChatPrefix);
}
@@ -1438,7 +1443,7 @@ public Action Command_Restart(int client, int args)
teleportClient(client, 0, 1, true);
if (g_bPracticeMode[client])
{
- CreateTimer(0.1, DisablePrac, GetClientSerial(client));
+ g_bPracticeMode[client] = false;
CPrintToChat(client, "%t", "PracticeNormal", g_szChatPrefix);
}
return Plugin_Handled;
diff --git a/addons/sourcemod/scripting/surftimer/convars.sp b/addons/sourcemod/scripting/surftimer/convars.sp
index 34cd32500..16ad4b3e4 100644
--- a/addons/sourcemod/scripting/surftimer/convars.sp
+++ b/addons/sourcemod/scripting/surftimer/convars.sp
@@ -115,6 +115,7 @@ ConVar g_iHintsInterval = null; // Time between two hints. 0 = off
ConVar g_bHintsRandomOrder = null; // If hints are in random order
ConVar g_hOverrideClantag = null;
ConVar g_hDefaultPreSpeed = null;
+ConVar g_hLogQueryTimes = null;
void CreateConVars()
{
@@ -408,6 +409,7 @@ void CreateConVars()
g_hSlayOnRoundEnd = AutoExecConfig_CreateConVar("ck_slay_on_round_end", "1", "If enabled, all players will be slain on round end. If disabled all players timers will be stopped on round end");
g_hLimitSpeedType = AutoExecConfig_CreateConVar("ck_limit_speed_type", "1", "1 Use new style of limiting speed, 0 use old/cksurf way");
+ g_hLogQueryTimes = AutoExecConfig_CreateConVar("ck_log_query_times", "1", "Log query times or just print in server console. Default \"0\", it'll just print into servers console.", _, true, 0.0, true, 1.0);
// Server Name
g_hHostName = FindConVar("hostname");
diff --git a/addons/sourcemod/scripting/surftimer/db/queries.sp b/addons/sourcemod/scripting/surftimer/db/queries.sp
index 1d9648d54..cf2365879 100644
--- a/addons/sourcemod/scripting/surftimer/db/queries.sp
+++ b/addons/sourcemod/scripting/surftimer/db/queries.sp
@@ -3,10 +3,10 @@
////////////////////////
// ck_announcements
-char sql_createAnnouncements[] = "CREATE TABLE IF NOT EXISTS `ck_announcements` (`id` int(11) NOT NULL AUTO_INCREMENT, `server` varchar(256) NOT NULL DEFAULT 'Beginner', `name` varchar(32) NOT NULL, `mapname` varchar(128) NOT NULL, `mode` int(11) NOT NULL DEFAULT '0', `time` varchar(32) NOT NULL, `group` int(12) NOT NULL DEFAULT '0', PRIMARY KEY (`id`))DEFAULT CHARSET=utf8mb4;";
+char sql_createAnnouncements[] = "CREATE TABLE IF NOT EXISTS `ck_announcements` (`id` int(11) NOT NULL AUTO_INCREMENT, `server` varchar(256) NOT NULL DEFAULT 'Beginner', `name` varchar(64) NOT NULL, `mapname` varchar(128) NOT NULL, `mode` int(11) NOT NULL DEFAULT '0', `time` varchar(32) NOT NULL, `group` int(12) NOT NULL DEFAULT '0', PRIMARY KEY (`id`))DEFAULT CHARSET=utf8mb4;";
// ck_bonus
-char sql_createBonus[] = "CREATE TABLE IF NOT EXISTS ck_bonus (steamid VARCHAR(32), name VARCHAR(32), mapname VARCHAR(32), runtime decimal(12,6) NOT NULL DEFAULT '-1.000000', velStartXY SMALLINT(6) NOT NULL DEFAULT 0, velStartXYZ SMALLINT(6) NOT NULL DEFAULT 0, velStartZ SMALLINT(6) NOT NULL DEFAULT 0, zonegroup INT(12) NOT NULL DEFAULT 1, style INT(11) NOT NULL DEFAULT 0, PRIMARY KEY(steamid, mapname, zonegroup, style)) DEFAULT CHARSET=utf8mb4;";
+char sql_createBonus[] = "CREATE TABLE IF NOT EXISTS ck_bonus (steamid VARCHAR(32), name VARCHAR(64), mapname VARCHAR(32), runtime decimal(12,6) NOT NULL DEFAULT '-1.000000', velStartXY SMALLINT(6) NOT NULL DEFAULT 0, velStartXYZ SMALLINT(6) NOT NULL DEFAULT 0, velStartZ SMALLINT(6) NOT NULL DEFAULT 0, zonegroup INT(12) NOT NULL DEFAULT 1, style INT(11) NOT NULL DEFAULT 0, PRIMARY KEY(steamid, mapname, zonegroup, style)) DEFAULT CHARSET=utf8mb4;";
char sql_createBonusIndex[] = "CREATE INDEX bonusrank ON ck_bonus (mapname,runtime,zonegroup,style);";
char sql_insertBonus[] = "INSERT INTO ck_bonus (steamid, name, mapname, runtime, zonegroup, velStartXY, velStartXYZ, velStartZ) VALUES ('%s', '%s', '%s', '%f', '%i', '%i', '%i', '%i')";
char sql_updateBonus[] = "UPDATE ck_bonus SET runtime = '%f', name = '%s', velStartXY = %i, velStartXYZ = %i, velStartZ = %i WHERE steamid = '%s' AND mapname = '%s' AND zonegroup = %i AND style = 0";
@@ -30,15 +30,16 @@ char sql_selectStageTimes[] = "SELECT cp, stage_time FROM ck_checkpoints WHERE m
char sql_selectStageAttempts[] = "SELECT cp, stage_attempts FROM ck_checkpoints WHERE mapname = '%s' AND steamid = '%s';";
// ck_latestrecords
-char sql_createLatestRecords[] = "CREATE TABLE IF NOT EXISTS ck_latestrecords (steamid VARCHAR(32), name VARCHAR(32), runtime decimal(12,6) NOT NULL DEFAULT '-1.000000', map VARCHAR(32), date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(steamid,map,date)) DEFAULT CHARSET=utf8mb4;";
+char sql_createLatestRecords[] = "CREATE TABLE IF NOT EXISTS ck_latestrecords (steamid VARCHAR(32), name VARCHAR(64), runtime decimal(12,6) NOT NULL DEFAULT '-1.000000', map VARCHAR(32), date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(steamid,map,date)) DEFAULT CHARSET=utf8mb4;";
char sql_insertLatestRecords[] = "INSERT INTO ck_latestrecords (steamid, name, runtime, map) VALUES('%s','%s','%f','%s');";
char sql_selectLatestRecords[] = "SELECT name, runtime, map, date FROM ck_latestrecords ORDER BY date DESC LIMIT 50";
// ck_maptier
char sql_createMapTier[] = "CREATE TABLE IF NOT EXISTS ck_maptier (mapname VARCHAR(54) NOT NULL, tier INT(12), maxvelocity FLOAT NOT NULL DEFAULT '3500.0', announcerecord INT(11) NOT NULL DEFAULT '0', gravityfix INT(11) NOT NULL DEFAULT '1', ranked INT(11) NOT NULL DEFAULT '1', PRIMARY KEY(mapname)) DEFAULT CHARSET=utf8mb4;";
-char sql_selectMapTier[] = "SELECT tier, ranked FROM ck_maptier WHERE mapname = '%s'";
+char sql_selectMapTier[] = "SELECT tier, ranked, mapper FROM ck_maptier WHERE mapname = '%s'";
char sql_insertmaptier[] = "INSERT INTO ck_maptier (mapname, tier) VALUES ('%s', '%i');";
char sql_updatemaptier[] = "UPDATE ck_maptier SET tier = %i WHERE mapname ='%s'";
+char sql_updateMapperName[] = "UPDATE ck_maptier SET mapper = '%s' WHERE mapname = '%s'";
// ck_playeroptions2
char sql_createPlayerOptions[] = "CREATE TABLE IF NOT EXISTS `ck_playeroptions2` (`steamid` varchar(32) NOT NULL DEFAULT '', `timer` int(11) NOT NULL DEFAULT '1', `hide` int(11) NOT NULL DEFAULT '0', `sounds` int(11) NOT NULL DEFAULT '1', `chat` int(11) NOT NULL DEFAULT '0', `viewmodel` int(11) NOT NULL DEFAULT '1', `autobhop` int(11) NOT NULL DEFAULT '1', `checkpoints` int(11) NOT NULL DEFAULT '1', `gradient` int(11) NOT NULL DEFAULT '3', `speedmode` int(11) NOT NULL DEFAULT '0', `centrespeed` int(11) NOT NULL DEFAULT '0', `centrehud` int(11) NOT NULL DEFAULT '1', teleside int(11) NOT NULL DEFAULT '0', `module1c` int(11) NOT NULL DEFAULT '1', `module2c` int(11) NOT NULL DEFAULT '2', `module3c` int(11) NOT NULL DEFAULT '3', `module4c` int(11) NOT NULL DEFAULT '4', `module5c` int(11) NOT NULL DEFAULT '5', `module6c` int(11) NOT NULL DEFAULT '6', `sidehud` int(11) NOT NULL DEFAULT '1', `module1s` int(11) NOT NULL DEFAULT '5', `module2s` int(11) NOT NULL DEFAULT '0', `module3s` int(11) NOT NULL DEFAULT '0', `module4s` int(11) NOT NULL DEFAULT '0', `module5s` int(11) NOT NULL DEFAULT '0', prestrafe int(11) NOT NULL DEFAULT '0', cpmessages int(11) NOT NULL DEFAULT '1', wrcpmessages int(11) NOT NULL DEFAULT '1', hints int(11) NOT NULL DEFAULT '1', csd_update_rate int(11) NOT NULL DEFAULT '1' , csd_pos_x float(11) NOT NULL DEFAULT '0.5' , csd_pos_y float(11) NOT NULL DEFAULT '0.3' , csd_r int(11) NOT NULL DEFAULT '255', csd_g int(11) NOT NULL DEFAULT '255', csd_b int(11) NOT NULL DEFAULT '255', PRIMARY KEY (`steamid`)) DEFAULT CHARSET=utf8mb4;";
@@ -47,7 +48,7 @@ char sql_selectPlayerOptions[] = "SELECT timer, hide, sounds, chat, viewmodel, a
char sql_updatePlayerOptions[] = "UPDATE ck_playeroptions2 SET timer = %i, hide = %i, sounds = %i, chat = %i, viewmodel = %i, autobhop = %i, checkpoints = %i, gradient = %i, speedmode = %i, centrespeed = %i, centrehud = %i, teleside = %i, module1c = %i, module2c = %i, module3c = %i, module4c = %i, module5c = %i, module6c = %i, sidehud = %i, module1s = %i, module2s = %i, module3s = %i, module4s = %i, module5s = %i, prestrafe = %i, cpmessages = %i, wrcpmessages = %i, hints = %i, csd_update_rate = %i, csd_pos_x = %f, csd_pos_y = %f, csd_r= %i, csd_g = %i, csd_b = %i, prespeedmode = %i where steamid = '%s'";
// ck_playerrank
-char sql_createPlayerRank[] = "CREATE TABLE IF NOT EXISTS `ck_playerrank` (`steamid` varchar(32) NOT NULL DEFAULT '', `steamid64` varchar(64) DEFAULT NULL, `name` varchar(32) DEFAULT NULL, `country` varchar(32) DEFAULT NULL, `countryCode` varchar(3) DEFAULT NULL, `continentCode` varchar(3) DEFAULT NULL, `points` int(12) DEFAULT '0', `wrpoints` int(12) NOT NULL DEFAULT '0', `wrbpoints` int(12) NOT NULL DEFAULT '0', `wrcppoints` int(11) NOT NULL DEFAULT '0', `top10points` int(12) NOT NULL DEFAULT '0', `groupspoints` int(12) NOT NULL DEFAULT '0', `mappoints` int(11) NOT NULL DEFAULT '0', `bonuspoints` int(12) NOT NULL DEFAULT '0', `finishedmaps` int(12) DEFAULT '0', `finishedmapspro` int(12) DEFAULT '0', `finishedbonuses` int(12) NOT NULL DEFAULT '0', `finishedstages` int(12) NOT NULL DEFAULT '0', `wrs` int(12) NOT NULL DEFAULT '0', `wrbs` int(12) NOT NULL DEFAULT '0', `wrcps` int(12) NOT NULL DEFAULT '0', `top10s` int(12) NOT NULL DEFAULT '0', `groups` int(12) NOT NULL DEFAULT '0', `lastseen` int(64) DEFAULT NULL, `joined` int(64) NOT NULL, `timealive` int(64) NOT NULL DEFAULT '0', `timespec` int(64) NOT NULL DEFAULT '0', `connections` int(64) NOT NULL DEFAULT '1', `readchangelog` int(11) NOT NULL DEFAULT '0', `style` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`steamid`, `style`)) DEFAULT CHARSET=utf8mb4;";
+char sql_createPlayerRank[] = "CREATE TABLE IF NOT EXISTS `ck_playerrank` (`steamid` varchar(32) NOT NULL DEFAULT '', `steamid64` varchar(64) DEFAULT NULL, `name` varchar(64) DEFAULT NULL, `country` varchar(32) DEFAULT NULL, `countryCode` varchar(3) DEFAULT NULL, `continentCode` varchar(3) DEFAULT NULL, `points` int(12) DEFAULT '0', `wrpoints` int(12) NOT NULL DEFAULT '0', `wrbpoints` int(12) NOT NULL DEFAULT '0', `wrcppoints` int(11) NOT NULL DEFAULT '0', `top10points` int(12) NOT NULL DEFAULT '0', `groupspoints` int(12) NOT NULL DEFAULT '0', `mappoints` int(11) NOT NULL DEFAULT '0', `bonuspoints` int(12) NOT NULL DEFAULT '0', `finishedmaps` int(12) DEFAULT '0', `finishedmapspro` int(12) DEFAULT '0', `finishedbonuses` int(12) NOT NULL DEFAULT '0', `finishedstages` int(12) NOT NULL DEFAULT '0', `wrs` int(12) NOT NULL DEFAULT '0', `wrbs` int(12) NOT NULL DEFAULT '0', `wrcps` int(12) NOT NULL DEFAULT '0', `top10s` int(12) NOT NULL DEFAULT '0', `groups` int(12) NOT NULL DEFAULT '0', `lastseen` int(64) DEFAULT NULL, `joined` int(64) NOT NULL, `timealive` int(64) NOT NULL DEFAULT '0', `timespec` int(64) NOT NULL DEFAULT '0', `connections` int(64) NOT NULL DEFAULT '1', `readchangelog` int(11) NOT NULL DEFAULT '0', `style` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`steamid`, `style`)) DEFAULT CHARSET=utf8mb4;";
char sql_insertPlayerRank[] = "INSERT INTO ck_playerrank (steamid, steamid64, name, country, countryCode, continentCode, joined, style) VALUES('%s', '%s', '%s', '%s', '%s', '%s', %i, %i)";
char sql_updatePlayerRankPoints[] = "UPDATE ck_playerrank SET name ='%s', points ='%i', wrpoints = %i, wrbpoints = %i, wrcppoints = %i, top10points = %i, groupspoints = %i, mappoints = %i, bonuspoints = %i, finishedmapspro='%i', finishedbonuses = %i, finishedstages = %i, wrs = %i, wrbs = %i, wrcps = %i, top10s = %i, `groups` = %i where steamid='%s' AND style = %i;";
char sql_updatePlayerRankPoints2[] = "UPDATE ck_playerrank SET name ='%s', points ='%i', wrpoints = %i, wrbpoints = %i, wrcppoints = %i, top10points = %i, groupspoints = %i, mappoints = %i, bonuspoints = %i, finishedmapspro='%i', finishedbonuses = %i, finishedstages = %i, wrs = %i, wrbs = %i, wrcps = %i, top10s = %i, `groups` = %i, country = '%s', countryCode = '%s', continentCode = '%s' where steamid='%s' AND style = %i;";
@@ -71,7 +72,7 @@ char sql_deletePlayerTmp[] = "DELETE FROM ck_playertemp where steamid = '%s';";
char sql_selectPlayerTmp[] = "SELECT cords1,cords2,cords3, angle1, angle2, angle3,runtimeTmp, EncTickrate, Stage, zonegroup FROM ck_playertemp WHERE steamid = '%s' AND mapname = '%s';";
// ck_playertimes
-char sql_createPlayertimes[] = "CREATE TABLE IF NOT EXISTS ck_playertimes (steamid VARCHAR(32), mapname VARCHAR(32), name VARCHAR(32), runtimepro decimal(12,6) NOT NULL DEFAULT '-1.000000', velStartXY SMALLINT(6) NOT NULL DEFAULT 0, velStartXYZ SMALLINT(6) NOT NULL DEFAULT 0, velStartZ SMALLINT(6) NOT NULL DEFAULT 0, style INT(11) NOT NULL DEFAULT '0', PRIMARY KEY(steamid, mapname, style)) DEFAULT CHARSET=utf8mb4;";
+char sql_createPlayertimes[] = "CREATE TABLE IF NOT EXISTS ck_playertimes (steamid VARCHAR(32), mapname VARCHAR(32), name VARCHAR(64), runtimepro decimal(12,6) NOT NULL DEFAULT '-1.000000', velStartXY SMALLINT(6) NOT NULL DEFAULT 0, velStartXYZ SMALLINT(6) NOT NULL DEFAULT 0, velStartZ SMALLINT(6) NOT NULL DEFAULT 0, style INT(11) NOT NULL DEFAULT '0', PRIMARY KEY(steamid, mapname, style)) DEFAULT CHARSET=utf8mb4;";
char sql_createPlayertimesIndex[] = "CREATE INDEX maprank ON ck_playertimes (mapname, runtimepro, style);";
char sql_insertPlayer[] = "INSERT INTO ck_playertimes (steamid, mapname, name) VALUES('%s', '%s', '%s');";
char sql_insertPlayerTime[] = "INSERT INTO ck_playertimes (steamid, mapname, name, runtimepro, style, velStartXY, velStartXYZ, velStartZ) VALUES('%s', '%s', '%s', '%f', %i, %i, %i, %i);";
@@ -97,7 +98,7 @@ char sql_deleteSpawnLocations[] = "DELETE FROM ck_spawnlocations WHERE mapname =
char sql_createVipAdmins[] = "CREATE TABLE `ck_vipadmins` (`steamid` varchar(32) NOT NULL DEFAULT '', `title` varchar(128) DEFAULT '0', `namecolour` int(11) DEFAULT '0', `textcolour` int(11) NOT NULL DEFAULT '0', `joinmsg` varchar(255) DEFAULT 'none', `pbsound` varchar(256) NOT NULL DEFAULT 'none', `topsound` varchar(256) NOT NULL DEFAULT 'none', `wrsound` varchar(256) NOT NULL DEFAULT 'none', `inuse` int(11) DEFAULT '0', `vip` int(11) DEFAULT '0', `admin` int(11) NOT NULL DEFAULT '0', `zoner` int(11) NOT NULL DEFAULT '0', `active` int(11) NOT NULL DEFAULT '1', PRIMARY KEY (`steamid`), KEY `vip` (`steamid`,`vip`,`admin`,`zoner`)) DEFAULT CHARSET=utf8mb4;";
// ck_wrcps
-char sql_createWrcps[] = "CREATE TABLE IF NOT EXISTS `ck_wrcps` (`steamid` varchar(32) NOT NULL DEFAULT '', `name` varchar(32) DEFAULT NULL, `mapname` varchar(32) NOT NULL DEFAULT '', `runtimepro` decimal(12,6) NOT NULL DEFAULT '-1.000000', `velStartXY` smallint(6) NOT NULL DEFAULT 0, `velStartXYZ` smallint(6) NOT NULL DEFAULT 0, `velStartZ` smallint(6) NOT NULL DEFAULT 0, `stage` int(11) NOT NULL, `style` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`steamid`,`mapname`,`stage`,`style`), KEY `stagerank` (`mapname`,`runtimepro`,`stage`,`style`)) DEFAULT CHARSET=utf8mb4;";
+char sql_createWrcps[] = "CREATE TABLE IF NOT EXISTS `ck_wrcps` (`steamid` varchar(32) NOT NULL DEFAULT '', `name` varchar(64) DEFAULT NULL, `mapname` varchar(32) NOT NULL DEFAULT '', `runtimepro` decimal(12,6) NOT NULL DEFAULT '-1.000000', `velStartXY` smallint(6) NOT NULL DEFAULT 0, `velStartXYZ` smallint(6) NOT NULL DEFAULT 0, `velStartZ` smallint(6) NOT NULL DEFAULT 0, `stage` int(11) NOT NULL, `style` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`steamid`,`mapname`,`stage`,`style`), KEY `stagerank` (`mapname`,`runtimepro`,`stage`,`style`)) DEFAULT CHARSET=utf8mb4;";
// ck_zones
@@ -119,7 +120,7 @@ char sql_MainDeleteQeury[] = "DELETE From %s where mapname='%s' and style='%i' a
//ck_prinfo
-char sql_CreatePrinfo[] = "CREATE TABLE IF NOT EXISTS ck_prinfo (steamid VARCHAR(32), name VARCHAR(32), mapname VARCHAR(32), runtime decimal(12,6) NOT NULL DEFAULT '-1.000000', zonegroup INT(12) NOT NULL DEFAULT '0', PRtimeinzone decimal(12,6) NOT NULL DEFAULT '-1.000000', PRcomplete FLOAT NOT NULL DEFAULT '0.0', PRattempts FLOAT NOT NULL DEFAULT '0.0', PRstcomplete FLOAT NOT NULL DEFAULT '0.0', PRIMARY KEY(steamid, mapname, zonegroup)) DEFAULT CHARSET=utf8mb4;";
+char sql_CreatePrinfo[] = "CREATE TABLE IF NOT EXISTS ck_prinfo (steamid VARCHAR(32), name VARCHAR(64), mapname VARCHAR(32), runtime decimal(12,6) NOT NULL DEFAULT '-1.000000', zonegroup INT(12) NOT NULL DEFAULT '0', PRtimeinzone decimal(12,6) NOT NULL DEFAULT '-1.000000', PRcomplete FLOAT NOT NULL DEFAULT '0.0', PRattempts FLOAT NOT NULL DEFAULT '0.0', PRstcomplete FLOAT NOT NULL DEFAULT '0.0', PRIMARY KEY(steamid, mapname, zonegroup)) DEFAULT CHARSET=utf8mb4;";
char sql_selectPR[] = "SELECT steamid, name, mapname, zonegroup, PRtimeinzone, PRcomplete, PRattempts, PRstcomplete FROM ck_prinfo WHERE steamid = '%s' AND mapname = '%s' AND zonegroup= '%i';";
char sql_insertPR[] = "INSERT INTO ck_prinfo (steamid, name, mapname, runtime, zonegroup, PRtimeinzone, PRcomplete, PRattempts, PRstcomplete) VALUES('%s', '%s', '%s', '%f', '%i', '%f', '%f', '%f', '%f');";
diff --git a/addons/sourcemod/scripting/surftimer/db/updater.sp b/addons/sourcemod/scripting/surftimer/db/updater.sp
index 4b5a93cf4..3f62db21e 100644
--- a/addons/sourcemod/scripting/surftimer/db/updater.sp
+++ b/addons/sourcemod/scripting/surftimer/db/updater.sp
@@ -88,13 +88,30 @@ void CheckDatabaseForUpdates()
return;
}
- LogMessage("Version 12 looks good.");
+ // Version 13 - Start
+ char sQuery[512];
+ FormatEx(sQuery, sizeof(sQuery), "SELECT CHARACTER_MAXIMUM_LENGTH FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='%s' AND TABLE_NAME='ck_playertimes' AND COLUMN_NAME='name';", g_sDatabaseName);
+ DBResultSet results = SQL_Query(g_hDb, sQuery);
+
+ if (results != null && results.HasResults && results.FetchRow() && results.FetchInt(0) < 64)
+ {
+ db_upgradeDatabase(13, true);
+ delete results;
+ return;
+ }
+
+ // Version 13 - End
+
+ LogMessage("Version 13 looks good.");
}
}
-public void db_upgradeDatabase(int ver)
+void db_upgradeDatabase(int ver, bool skipErrorCheck = false)
{
- LogUpgradeError(ver);
+ if (!skipErrorCheck)
+ {
+ LogUpgradeError(ver);
+ }
if (ver == 0)
{
@@ -187,6 +204,16 @@ public void db_upgradeDatabase(int ver)
{
SQL_FastQuery(g_hDb, "ALTER TABLE ck_checkpoints ADD stage_time decimal(12, 6) NOT NULL DEFAULT '-1.000000', ADD stage_attempts INT NOT NULL DEFAULT '0';");
}
+ else if (ver == 13)
+ {
+ SQL_FastQuery(g_hDb, "ALTER TABLE ck_announcements MODIFY name VARCHAR(64);");
+ SQL_FastQuery(g_hDb, "ALTER TABLE ck_bonus MODIFY name VARCHAR(64);");
+ SQL_FastQuery(g_hDb, "ALTER TABLE ck_latestrecords MODIFY name VARCHAR(64);");
+ SQL_FastQuery(g_hDb, "ALTER TABLE ck_playerrank MODIFY name VARCHAR(64);");
+ SQL_FastQuery(g_hDb, "ALTER TABLE ck_playertimes MODIFY name VARCHAR(64);");
+ SQL_FastQuery(g_hDb, "ALTER TABLE ck_wrcps MODIFY name VARCHAR(64);");
+ SQL_FastQuery(g_hDb, "ALTER TABLE ck_prinfo MODIFY name VARCHAR(64);");
+ }
CheckDatabaseForUpdates();
}
@@ -284,7 +311,7 @@ public void SQLCheckDataType(Handle owner, Handle hndl, const char[] error, Data
if (!g_bRenaming && !g_bInTransactionChain && (IsServerProcessing() || !cvHibernateWhenEmpty.BoolValue))
{
- LogToFileEx(g_szLogFile, "[surftimer] Starting to load server settings");
+ LogQueryTime("[surftimer] Starting to load server settings");
g_fServerLoading[0] = GetGameTime();
db_selectMapZones();
}
diff --git a/addons/sourcemod/scripting/surftimer/globals.sp b/addons/sourcemod/scripting/surftimer/globals.sp
index 942b272ad..e19f89b24 100644
--- a/addons/sourcemod/scripting/surftimer/globals.sp
+++ b/addons/sourcemod/scripting/surftimer/globals.sp
@@ -1152,6 +1152,12 @@ char g_szCountry[MAXPLAYERS + 1][100];
char g_szCountryCode[MAXPLAYERS + 1][3];
char g_szContinentCode[MAXPLAYERS + 1][3];
+// mappers name
+char g_szMapperName[32];
+
+// mapper name null?
+bool g_bMapperNameFound;
+
// Client's steamID
char g_szSteamID[MAXPLAYERS + 1][32];
@@ -1283,6 +1289,9 @@ bool g_bCreatedTeleport[MAXPLAYERS + 1];
// Client is in the practice mode
bool g_bPracticeMode[MAXPLAYERS + 1];
+//did client finish run in practice mode or not?
+bool g_bPracticeModeRun[MAXPLAYERS +1];
+
/*---------- Reports ----------*/
bool g_bReportSuccess[MAXPLAYERS + 1];
@@ -1545,7 +1554,7 @@ char RadioCMDS[][] = // Disable radio commands
"go_b", "sorry", "needrop", "playerradio", "playerchatwheel", "chatwheel_ping", "player_ping"
};
-char g_sDatabaseName[32]; // Required for the float to decimal conversion
+char g_sDatabaseName[64]; // Required for the float to decimal conversion
char g_sDecimalTables[][][] = {
// Table, Column
{ "ck_bonus", "runtime", },
diff --git a/addons/sourcemod/scripting/surftimer/hooks.sp b/addons/sourcemod/scripting/surftimer/hooks.sp
index 0878899cf..9782f6a40 100644
--- a/addons/sourcemod/scripting/surftimer/hooks.sp
+++ b/addons/sourcemod/scripting/surftimer/hooks.sp
@@ -270,245 +270,246 @@ public Action Event_OnPlayerSpawn(Handle event, const char[] name, bool dontBroa
public Action Say_Hook(int client, const char[] command, int argc)
{
- if (!GetConVarBool(g_henableChatProcessing))
+ if (!IsValidClient(client))
return Plugin_Continue;
- if (IsValidClient(client))
- {
- // Get message text
- char sText[1024];
- GetCmdArgString(sText, sizeof(sText));
+ // Get message text
+ char sText[1024];
+ GetCmdArgString(sText, sizeof(sText));
- StripQuotes(sText);
- TrimString(sText);
+ StripQuotes(sText);
+ TrimString(sText);
- // Call Admin - Own Reason
- if (g_bClientOwnReason[client])
- {
- g_bClientOwnReason[client] = false;
- return Plugin_Continue;
- }
+ // Call Admin - Own Reason
+ if (g_bClientOwnReason[client])
+ {
+ g_bClientOwnReason[client] = false;
+ return Plugin_Continue;
+ }
- // Renaming zone
- if (g_ClientRenamingZone[client])
- {
- Admin_renameZone(client, sText);
- return Plugin_Handled;
- }
+ // Renaming zone
+ if (g_ClientRenamingZone[client])
+ {
+ Admin_renameZone(client, sText);
+ return Plugin_Handled;
+ }
+
+ // Client is muted
+ if (BaseComm_IsClientGagged(client))
+ return Plugin_Handled;
- // Client is muted
- if (BaseComm_IsClientGagged(client))
+ // Blocked Commands
+ for (int i = 0; i < sizeof(g_BlockedChatText); i++)
+ {
+ if (StrEqual(g_BlockedChatText[i], sText, true))
return Plugin_Handled;
+ }
- // Blocked Commands
- for (int i = 0; i < sizeof(g_BlockedChatText); i++)
+ // Functions that require the client to input something via the chat box
+ if (g_iWaitingForResponse[client] > None)
+ {
+ // Check if client is cancelling
+ if (StrEqual(sText, "cancel"))
{
- if (StrEqual(g_BlockedChatText[i], sText, true))
- return Plugin_Handled;
+ CPrintToChat(client, "%t", "Hooks1", g_szChatPrefix);
+ g_iWaitingForResponse[client] = None;
+ return Plugin_Handled;
}
- // Functions that require the client to input something via the chat box
- if (g_iWaitingForResponse[client] > None)
+ // Check which function we're waiting for
+ switch (g_iWaitingForResponse[client])
{
- // Check if client is cancelling
- if (StrEqual(sText, "cancel"))
+ case PreSpeed:
{
- CPrintToChat(client, "%t", "Hooks1", g_szChatPrefix);
- g_iWaitingForResponse[client] = None;
- return Plugin_Handled;
+ // Set zone Prespeed
+ float prespeed = StringToFloat(sText);
+ if (prespeed < 0.0)
+ prespeed = 0.0;
+ g_mapZones[g_ClientSelectedZone[client]].PreSpeed = prespeed;
+ PrespeedMenu(client);
}
-
- // Check which function we're waiting for
- switch (g_iWaitingForResponse[client])
+ case ZoneGroup:
{
- case PreSpeed:
- {
- // Set zone Prespeed
- float prespeed = StringToFloat(sText);
- if (prespeed < 0.0)
- prespeed = 0.0;
- g_mapZones[g_ClientSelectedZone[client]].PreSpeed = prespeed;
- PrespeedMenu(client);
- }
- case ZoneGroup:
+ // Hook zone zonegroup
+ int zgrp = StringToInt(sText);
+ if (zgrp < 1 || zgrp > 35)
{
- // Hook zone zonegroup
- int zgrp = StringToInt(sText);
- if (zgrp < 1 || zgrp > 35)
- {
- CPrintToChat(client, "%t", "Hooks2", g_szChatPrefix);
- return Plugin_Handled;
- }
- g_iZonegroupHook[client] = zgrp;
- CPrintToChat(client, "%t", "Hooks3", g_szChatPrefix, zgrp);
- }
- case MaxVelocity:
- {
- // Maxvelocity for map
- float maxvelocity = StringToFloat(sText);
- if (maxvelocity < 1.0)
- maxvelocity = 10000.0;
- g_fMaxVelocity = maxvelocity;
- db_updateMapSettings();
- MaxVelocityMenu(client);
- CPrintToChat(client, "%t", "Hooks4", g_szChatPrefix, g_szMapName, maxvelocity);
+ CPrintToChat(client, "%t", "Hooks2", g_szChatPrefix);
+ return Plugin_Handled;
}
- case TargetName:
- {
- // Zone set clients Target Name
- if (StrEqual(sText, "reset"))
- Format(sText, sizeof(sText), "player");
+ g_iZonegroupHook[client] = zgrp;
+ CPrintToChat(client, "%t", "Hooks3", g_szChatPrefix, zgrp);
+ }
+ case MaxVelocity:
+ {
+ // Maxvelocity for map
+ float maxvelocity = StringToFloat(sText);
+ if (maxvelocity < 1.0)
+ maxvelocity = 10000.0;
+ g_fMaxVelocity = maxvelocity;
+ db_updateMapSettings();
+ MaxVelocityMenu(client);
+ CPrintToChat(client, "%t", "Hooks4", g_szChatPrefix, g_szMapName, maxvelocity);
+ }
+ case TargetName:
+ {
+ // Zone set clients Target Name
+ if (StrEqual(sText, "reset"))
+ Format(sText, sizeof(sText), "player");
- Format(g_mapZones[g_ClientSelectedZone[client]].TargetName, sizeof(MapZone::TargetName), "%s", sText);
+ Format(g_mapZones[g_ClientSelectedZone[client]].TargetName, sizeof(MapZone::TargetName), "%s", sText);
- CPrintToChat(client, "%t", "Hooks5", g_szChatPrefix, g_szZoneDefaultNames[g_CurrentZoneType[client]], g_mapZones[g_ClientSelectedZone[client]].ZoneTypeId, sText);
+ CPrintToChat(client, "%t", "Hooks5", g_szChatPrefix, g_szZoneDefaultNames[g_CurrentZoneType[client]], g_mapZones[g_ClientSelectedZone[client]].ZoneTypeId, sText);
- EditorMenu(client);
- }
- case ClientEdit:
- {
- // Deleting records
- g_SelectedType[client] = StringToInt(sText);
- char szQuery[512];
+ EditorMenu(client);
+ }
+ case ClientEdit:
+ {
+ // Deleting records
+ g_SelectedType[client] = StringToInt(sText);
+ char szQuery[512];
- switch(g_SelectedEditOption[client])
+ switch(g_SelectedEditOption[client])
+ {
+ case 0:
{
- case 0:
- {
- FormatEx(szQuery, 512, sql_MainEditQuery, "runtimepro", "ck_playertimes", g_EditingMap[client], g_SelectedStyle[client], "", "runtimepro");
- }
- case 1:
- {
- char stageQuery[32];
- FormatEx(stageQuery, 32, "AND stage='%i' ", g_SelectedType[client]);
- FormatEx(szQuery, 512, sql_MainEditQuery, "runtimepro", "ck_wrcps", g_EditingMap[client], g_SelectedStyle[client], stageQuery, "runtimepro");
- }
- case 2:
- {
- char stageQuery[32];
- FormatEx(stageQuery, 32, "AND zonegroup='%i' ", g_SelectedType[client]);
- FormatEx(szQuery, 512, sql_MainEditQuery, "runtime", "ck_bonus", g_EditingMap[client], g_SelectedStyle[client], stageQuery, "runtime");
- }
+ FormatEx(szQuery, 512, sql_MainEditQuery, "runtimepro", "ck_playertimes", g_EditingMap[client], g_SelectedStyle[client], "", "runtimepro");
}
-
- SQL_TQuery(g_hDb, sql_DeleteMenuView, szQuery, GetClientSerial(client));
- }
- case ColorValue:
- {
- //COLOR VALUE FOR CENTER SPEED
- int color_value = StringToInt(sText);
-
- //KEEP VALUES BETWEEN 0-255
- if(color_value > 255)
- color_value = 255;
- else if(color_value < 0)
- color_value = 0;
-
- switch(g_iColorChangeIndex[client]){
- case 0: g_iCSD_R[client] = color_value;
- case 1: g_iCSD_G[client] = color_value;
- case 2: g_iCSD_B[client] = color_value;
+ case 1:
+ {
+ char stageQuery[32];
+ FormatEx(stageQuery, 32, "AND stage='%i' ", g_SelectedType[client]);
+ FormatEx(szQuery, 512, sql_MainEditQuery, "runtimepro", "ck_wrcps", g_EditingMap[client], g_SelectedStyle[client], stageQuery, "runtimepro");
+ }
+ case 2:
+ {
+ char stageQuery[32];
+ FormatEx(stageQuery, 32, "AND zonegroup='%i' ", g_SelectedType[client]);
+ FormatEx(szQuery, 512, sql_MainEditQuery, "runtime", "ck_bonus", g_EditingMap[client], g_SelectedStyle[client], stageQuery, "runtime");
}
- CSDOptions(client);
}
- }
- g_iWaitingForResponse[client] = None;
- return Plugin_Handled;
+ SQL_TQuery(g_hDb, sql_DeleteMenuView, szQuery, GetClientSerial(client));
+ }
+ case ColorValue:
+ {
+ //COLOR VALUE FOR CENTER SPEED
+ int color_value = StringToInt(sText);
+
+ //KEEP VALUES BETWEEN 0-255
+ if(color_value > 255)
+ color_value = 255;
+ else if(color_value < 0)
+ color_value = 0;
+
+ switch(g_iColorChangeIndex[client]){
+ case 0: g_iCSD_R[client] = color_value;
+ case 1: g_iCSD_G[client] = color_value;
+ case 2: g_iCSD_B[client] = color_value;
+ }
+ CSDOptions(client);
+ }
}
- // !s & !stage Commands
- if (StrContains(sText, "!s", false) == 0 || StrContains(sText, "!stage", false) == 0)
- return Plugin_Handled;
+ g_iWaitingForResponse[client] = None;
+ return Plugin_Handled;
+ }
- // !b & !bonus Commands
- if (StrContains(sText, "!b", false) == 0 || StrContains(sText, "!bonus", false) == 0)
- return Plugin_Handled;
+ if (!GetConVarBool(g_henableChatProcessing))
+ return Plugin_Continue;
- // Empty Message
- if (StrEqual(sText, " ") || !sText[0])
- return Plugin_Handled;
+ // !s & !stage Commands
+ if (StrContains(sText, "!s", false) == 0 || StrContains(sText, "!stage", false) == 0)
+ return Plugin_Handled;
- // Spam check
- if (checkSpam(client))
- return Plugin_Handled;
+ // !b & !bonus Commands
+ if (StrContains(sText, "!b", false) == 0 || StrContains(sText, "!bonus", false) == 0)
+ return Plugin_Handled;
+
+ // Empty Message
+ if (StrEqual(sText, " ") || !sText[0])
+ return Plugin_Handled;
+
+ // Spam check
+ if (checkSpam(client))
+ return Plugin_Handled;
- parseColorsFromString(sText, 1024);
+ parseColorsFromString(sText, 1024);
- // Lowercase
- if ((sText[0] == '/') || (sText[0] == '!'))
+ // Lowercase
+ if ((sText[0] == '/') || (sText[0] == '!'))
+ {
+ if (IsCharUpper(sText[1]))
{
- if (IsCharUpper(sText[1]))
- {
- for (int i = 0; i <= strlen(sText); ++i)
- sText[i] = CharToLower(sText[i]);
- FakeClientCommand(client, "say %s", sText);
- return Plugin_Handled;
- }
+ for (int i = 0; i <= strlen(sText); ++i)
+ sText[i] = CharToLower(sText[i]);
+ FakeClientCommand(client, "say %s", sText);
+ return Plugin_Handled;
}
+ }
- // Hide ! commands
- if (StrContains(sText, "!", false) == 0)
- return Plugin_Handled;
+ // Hide ! commands
+ if (StrContains(sText, "!", false) == 0)
+ return Plugin_Handled;
- if ((IsChatTrigger() && sText[0] == '/') || (sText[0] == '@' && (GetUserFlagBits(client) & ADMFLAG_ROOT || GetUserFlagBits(client) & ADMFLAG_GENERIC)))
- return Plugin_Continue;
+ if ((IsChatTrigger() && sText[0] == '/') || (sText[0] == '@' && (GetUserFlagBits(client) & ADMFLAG_ROOT || GetUserFlagBits(client) & ADMFLAG_GENERIC)))
+ return Plugin_Continue;
- char szName[64];
- GetClientName(client, szName, 64);
- RemoveColors(szName, 64);
+ char szName[64];
+ GetClientName(client, szName, 64);
+ RemoveColors(szName, 64);
- // log the chat of the player to the server so that tools such as HLSW/HLSTATX see it and also it remains logged in the log file
- WriteChatLog(client, "say", sText);
- PrintToServer("%s: %s", szName, sText);
+ // log the chat of the player to the server so that tools such as HLSW/HLSTATX see it and also it remains logged in the log file
+ WriteChatLog(client, "say", sText);
+ PrintToServer("%s: %s", szName, sText);
- // Name colors
- if (GetConVarBool(g_hPointSystem) && GetConVarBool(g_hColoredNames) && g_bDbCustomTitleInUse[client])
- setNameColor(szName, g_iCustomColours[client][0], 64);
+ // Name colors
+ if (GetConVarBool(g_hPointSystem) && GetConVarBool(g_hColoredNames) && g_bDbCustomTitleInUse[client])
+ setNameColor(szName, g_iCustomColours[client][0], 64);
- // Text colors
- if (GetConVarBool(g_hPointSystem) && GetConVarBool(g_hColoredNames) && g_bDbCustomTitleInUse[client] && g_bHasCustomTextColour[client])
- setTextColor(sText, g_iCustomColours[client][1], 1024);
+ // Text colors
+ if (GetConVarBool(g_hPointSystem) && GetConVarBool(g_hColoredNames) && g_bDbCustomTitleInUse[client] && g_bHasCustomTextColour[client])
+ setTextColor(sText, g_iCustomColours[client][1], 1024);
- if (GetClientTeam(client) == 1)
- {
- // Client is a spectator
- PrintSpecMessageAll(client);
- return Plugin_Handled;
- }
- else
+ if (GetClientTeam(client) == 1)
+ {
+ // Client is a spectator
+ PrintSpecMessageAll(client);
+ return Plugin_Handled;
+ }
+ else
+ {
+ if (GetConVarBool(g_hPointSystem))
{
- if (GetConVarBool(g_hPointSystem))
- {
- // Constructing the message
- char szChatRank[1024];
- Format(szChatRank, sizeof(szChatRank), "%s", g_pr_chat_coloredrank[client]);
+ // Constructing the message
+ char szChatRank[1024];
+ Format(szChatRank, sizeof(szChatRank), "%s", g_pr_chat_coloredrank[client]);
- char szChatRankColor[1024];
- Format(szChatRankColor, sizeof(szChatRankColor), "%s", g_pr_chat_coloredrank[client]);
- CGetRankColor(szChatRankColor, sizeof(szChatRankColor));
+ char szChatRankColor[1024];
+ Format(szChatRankColor, sizeof(szChatRankColor), "%s", g_pr_chat_coloredrank[client]);
+ CGetRankColor(szChatRankColor, sizeof(szChatRankColor));
- if (GetConVarBool(g_hColoredNames) && !g_bDbCustomTitleInUse[client])
- Format(szName, sizeof(szName), "{%s}%s", szChatRankColor, szName);
+ if (GetConVarBool(g_hColoredNames) && !g_bDbCustomTitleInUse[client])
+ Format(szName, sizeof(szName), "{%s}%s", szChatRankColor, szName);
- if (GetConVarBool(g_hCountry)) { // With country code
- if (IsPlayerAlive(client))
- CPrintToChatAll("%t", "Hooks6", g_szCountryCode[client], szChatRank, szName, sText);
- else
- CPrintToChatAll("%t", "Hooks7", g_szCountryCode[client], szChatRank, szName, sText);
- return Plugin_Handled;
- }
- else // Without country code
- {
- if (IsPlayerAlive(client))
- CPrintToChatAll("%t", "Hooks8", szChatRank, szName, sText);
- else
- CPrintToChatAll("%t", "Hooks9", szChatRank, szName, sText);
- return Plugin_Handled;
- }
+ if (GetConVarBool(g_hCountry)) { // With country code
+ if (IsPlayerAlive(client))
+ CPrintToChatAll("%t", "Hooks6", g_szCountryCode[client], szChatRank, szName, sText);
+ else
+ CPrintToChatAll("%t", "Hooks7", g_szCountryCode[client], szChatRank, szName, sText);
+ return Plugin_Handled;
+ }
+ else // Without country code
+ {
+ if (IsPlayerAlive(client))
+ CPrintToChatAll("%t", "Hooks8", szChatRank, szName, sText);
+ else
+ CPrintToChatAll("%t", "Hooks9", szChatRank, szName, sText);
+ return Plugin_Handled;
}
}
}
+
return Plugin_Continue;
}
diff --git a/addons/sourcemod/scripting/surftimer/mapsettings.sp b/addons/sourcemod/scripting/surftimer/mapsettings.sp
index f7916c2bd..ee7c81fa5 100644
--- a/addons/sourcemod/scripting/surftimer/mapsettings.sp
+++ b/addons/sourcemod/scripting/surftimer/mapsettings.sp
@@ -273,11 +273,13 @@ public void db_viewMapSettings()
{
char szQuery[2048];
Format(szQuery, 2048, "SELECT `mapname`, `maxvelocity`, `announcerecord`, `gravityfix` FROM `ck_maptier` WHERE `mapname` = '%s'", g_szMapName);
- SQL_TQuery(g_hDb, sql_viewMapSettingsCallback, szQuery, _, DBPrio_High);
+ SQL_TQuery(g_hDb, sql_viewMapSettingsCallback, szQuery, GetGameTime(), DBPrio_High);
}
-public void sql_viewMapSettingsCallback(Handle owner, Handle hndl, const char[] error, any pack)
+public void sql_viewMapSettingsCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished sql_viewMapSettingsCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (sql_viewMapSettingsCallback): %s", error);
diff --git a/addons/sourcemod/scripting/surftimer/misc.sp b/addons/sourcemod/scripting/surftimer/misc.sp
index dee8922cd..83f0e497f 100644
--- a/addons/sourcemod/scripting/surftimer/misc.sp
+++ b/addons/sourcemod/scripting/surftimer/misc.sp
@@ -1219,6 +1219,8 @@ public void SetClientDefaults(int client)
g_ClientRenamingZone[client] = false;
+ g_bPracticeModeRun[client] = false;
+
g_bNewReplay[client] = false;
g_bNewBonus[client] = false;
@@ -1588,6 +1590,18 @@ public void PlayWRCPRecord()
}
}
+public void AddRadarImages()
+{
+ char szRadarImage[PLATFORM_MAX_PATH];
+
+ Format(szRadarImage, sizeof(szRadarImage), "resource/overviews/%s_radar.dds", g_szMapName);
+
+ if (FileExists(szRadarImage))
+ AddFileToDownloadsTable(szRadarImage);
+ else
+ PrintToServer("[SurfTimer] No radar image found: %s", szRadarImage);
+}
+
public void InitPrecache()
{
char szBuffer[256];
@@ -4729,18 +4743,6 @@ public void TeleportToSaveloc(int client, int id)
TeleportEntity(client, g_fSaveLocCoords[client][id], g_fSaveLocAngle[client][id], g_fSaveLocVel[client][id]);
}
-public Action DisablePrac(Handle timer, any data)//saveloc on start > startpos
-{
- int client = GetClientFromSerial(data);
-
- if (client > 0)
- {
- g_bPracticeMode[client] = false;
- }
-
- return Plugin_Handled;
-}
-
public void ReadDefaultTitlesWhitelist()
{
ClearArray(g_DefaultTitlesWhitelist);
@@ -5542,4 +5544,19 @@ public void resetCCPDefaults(int client){
g_iCCP_StageRank_Player[client][i] = 0;
g_iCCP_StageTotal_Player[client][i] = 0;
}
-}
\ No newline at end of file
+}
+
+void LogQueryTime(const char[] format, any ...)
+{
+ char sMessage[512];
+ VFormat(sMessage, sizeof(sMessage), format, 2);
+
+ if (g_hLogQueryTimes.BoolValue)
+ {
+ LogToFileEx(g_szLogFile, sMessage);
+ }
+ else
+ {
+ PrintToServer(sMessage);
+ }
+}
diff --git a/addons/sourcemod/scripting/surftimer/newmaps.sp b/addons/sourcemod/scripting/surftimer/newmaps.sp
index 3cc10f0e0..3f071913b 100644
--- a/addons/sourcemod/scripting/surftimer/newmaps.sp
+++ b/addons/sourcemod/scripting/surftimer/newmaps.sp
@@ -76,7 +76,7 @@ public void db_InsertNewestMaps()
{
char sql_insertNewestMaps[] = "INSERT INTO ck_newmaps (mapname) VALUES('%s');";
char szQuery[512];
- Format(szQuery, 512, sql_insertNewestMaps, g_szMapName);
+ Format(szQuery, sizeof(szQuery), sql_insertNewestMaps, g_szMapName);
SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
}
diff --git a/addons/sourcemod/scripting/surftimer/sql.sp b/addons/sourcemod/scripting/surftimer/sql.sp
index aab98f013..b95e418ca 100644
--- a/addons/sourcemod/scripting/surftimer/sql.sp
+++ b/addons/sourcemod/scripting/surftimer/sql.sp
@@ -240,22 +240,22 @@ public int callback_Confirm(Menu menu, MenuAction action, int client, int key)
{
case 0:
{
- FormatEx(szQuery, 512, sql_MainDeleteQeury, "ck_playertimes", g_EditingMap[client], g_SelectedStyle[client], steamID, "");
+ FormatEx(szQuery, sizeof(szQuery), sql_MainDeleteQeury, "ck_playertimes", g_EditingMap[client], g_SelectedStyle[client], steamID, "");
}
case 1:
{
char stageQuery[32];
- FormatEx(stageQuery, 32, "AND stage='%i'", g_SelectedType[client]);
- FormatEx(szQuery, 512, sql_MainDeleteQeury, "ck_wrcps", g_EditingMap[client], g_SelectedStyle[client], steamID, stageQuery);
+ FormatEx(stageQuery, sizeof(stageQuery), "AND stage='%i'", g_SelectedType[client]);
+ FormatEx(szQuery, sizeof(szQuery), sql_MainDeleteQeury, "ck_wrcps", g_EditingMap[client], g_SelectedStyle[client], steamID, stageQuery);
}
case 2:
{
char zoneQuery[32];
- FormatEx(zoneQuery, 32, "AND zonegroup='%i'", g_SelectedType[client]);
- FormatEx(szQuery, 512, sql_MainDeleteQeury, "ck_bonus", g_EditingMap[client], g_SelectedStyle[client], steamID, zoneQuery);
+ FormatEx(zoneQuery, sizeof(zoneQuery), "AND zonegroup='%i'", g_SelectedType[client]);
+ FormatEx(szQuery, sizeof(szQuery), sql_MainDeleteQeury, "ck_bonus", g_EditingMap[client], g_SelectedStyle[client], steamID, zoneQuery);
char BonusPRruntime[512];
- Format(BonusPRruntime, 512, sql_clearPRruntime, steamID, g_EditingMap[client], g_SelectedType[client]);
+ Format(BonusPRruntime, sizeof(BonusPRruntime), sql_clearPRruntime, steamID, g_EditingMap[client], g_SelectedType[client]);
SQL_TQuery(g_hDb, SQL_CheckCallback, BonusPRruntime, .prio=DBPrio_Low);
}
}
@@ -386,8 +386,8 @@ public void db_deleteSpawnLocations(int zGrp, int teleside)
{
g_bGotSpawnLocation[zGrp][1][teleside] = false;
char szQuery[128];
- Format(szQuery, 128, sql_deleteSpawnLocations, g_szMapName, zGrp, teleside);
- SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, 1, DBPrio_Low);
+ Format(szQuery, sizeof(szQuery), sql_deleteSpawnLocations, g_szMapName, zGrp, teleside);
+ SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
}
@@ -428,11 +428,13 @@ public void db_selectSpawnLocations()
char szQuery[254];
Format(szQuery, 254, sql_selectSpawnLocations, g_szMapName);
- SQL_TQuery(g_hDb, db_selectSpawnLocationsCallback, szQuery, 1, DBPrio_Low);
+ SQL_TQuery(g_hDb, db_selectSpawnLocationsCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-public void db_selectSpawnLocationsCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void db_selectSpawnLocationsCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished db_selectSpawnLocationsCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (db_selectSpawnLocationsCallback): %s ", error);
@@ -475,11 +477,13 @@ public void db_viewMapProRankCount()
g_MapTimesCount = 0;
char szQuery[512];
Format(szQuery, 512, sql_selectPlayerProCount, g_szMapName);
- SQL_TQuery(g_hDb, sql_selectPlayerProCountCallback, szQuery, _, DBPrio_Low);
+ SQL_TQuery(g_hDb, sql_selectPlayerProCountCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-public void sql_selectPlayerProCountCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void sql_selectPlayerProCountCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished sql_selectPlayerProCountCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (sql_selectPlayerProCountCallback): %s", error);
@@ -1495,13 +1499,13 @@ public void db_viewPlayerPointsCallback(Handle owner, Handle hndl, const char[]
g_iTotalConnections[client]++;
char updateConnections[1024];
- Format(updateConnections, 1024, "UPDATE ck_playerrank SET connections = connections + 1 WHERE steamid = '%s';", g_szSteamID[client]);
+ Format(updateConnections, sizeof(updateConnections), "UPDATE ck_playerrank SET connections = connections + 1 WHERE steamid = '%s';", g_szSteamID[client]);
SQL_TQuery(g_hDb, SQL_CheckCallback, updateConnections, _, DBPrio_Low);
// Debug
g_fTick[client][1] = GetGameTime();
float tick = g_fTick[client][1] - g_fTick[client][0];
- LogToFileEx(g_szLogFile, "[SurfTimer] %s: Finished db_viewPlayerPoints in %fs", g_szSteamID[client], tick);
+ LogQueryTime("[SurfTimer] %s: Finished db_viewPlayerPoints in %fs", g_szSteamID[client], tick);
g_fTick[client][0] = GetGameTime();
// Count players rank
@@ -1529,7 +1533,7 @@ public void db_viewPlayerPointsCallback(Handle owner, Handle hndl, const char[]
char szSteamId64[64];
GetClientAuthId(client, AuthId_SteamID64, szSteamId64, MAX_NAME_LENGTH, true);
- Format(szQuery, 512, sql_insertPlayerRank, g_szSteamID[client], szSteamId64, szName, g_szCountry[client], g_szCountryCode[client], g_szContinentCode[client], GetTime());
+ Format(szQuery, sizeof(szQuery), sql_insertPlayerRank, g_szSteamID[client], szSteamId64, szName, g_szCountry[client], g_szCountryCode[client], g_szContinentCode[client], GetTime());
SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
// Play time
@@ -1539,7 +1543,7 @@ public void db_viewPlayerPointsCallback(Handle owner, Handle hndl, const char[]
// Debug
g_fTick[client][1] = GetGameTime();
float tick = g_fTick[client][1] - g_fTick[client][0];
- LogToFileEx(g_szLogFile, "[SurfTimer] %s: Finished db_viewPlayerPoints in %fs", g_szSteamID[client], tick);
+ LogQueryTime("[SurfTimer] %s: Finished db_viewPlayerPoints in %fs", g_szSteamID[client], tick);
g_fTick[client][0] = GetGameTime();
// Count players rank
@@ -1626,7 +1630,7 @@ public void sql_selectRankedPlayersRankCallback(Handle owner, Handle hndl, const
{
g_fTick[client][1] = GetGameTime();
float tick = g_fTick[client][1] - g_fTick[client][0];
- LogToFileEx(g_szLogFile, "[SurfTimer] %s: Finished db_GetPlayerRank in %fs", g_szSteamID[client], tick);
+ LogQueryTime("[SurfTimer] %s: Finished db_GetPlayerRank in %fs", g_szSteamID[client], tick);
g_fTick[client][0] = GetGameTime();
LoadClientSetting(client, g_iSettingToLoad[client]);
@@ -2002,11 +2006,13 @@ public void db_GetMapRecord_Pro()
char szQuery[512];
// SELECT MIN(runtimepro), name, steamid, style FROM ck_playertimes WHERE mapname = '%s' AND runtimepro > -1.0 GROUP BY style
Format(szQuery, 512, sql_selectMapRecord, g_szMapName);
- SQL_TQuery(g_hDb, sql_selectMapRecordCallback, szQuery, _, DBPrio_Low);
+ SQL_TQuery(g_hDb, sql_selectMapRecordCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-public void sql_selectMapRecordCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void sql_selectMapRecordCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished sql_selectMapRecordCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (sql_selectMapRecordCallback): %s", error);
@@ -2392,7 +2398,8 @@ public void SQL_CurrentRunRankCallback(Handle owner, Handle hndl, const char[] e
rank = SQL_FetchInt(hndl, 0);
}
- if(g_bPracticeMode[client]){
+ if(g_bPracticeModeRun[client])
+ {
float runtime = g_fCurrentRunTime[client];
float f_srDiff;
@@ -2474,8 +2481,8 @@ public void SQL_CurrentRunRank_StagePracCallback(Handle owner, Handle hndl, cons
// Called when a player finishes a map
public void db_selectRecord(int client)
{
- if (!IsValidClient(client))
- return;
+ if (!IsValidClient(client) || g_bPracticeMode[client])
+ return;
char szQuery[255];
Format(szQuery, 255, "SELECT runtimepro FROM ck_playertimes WHERE steamid = '%s' AND mapname = '%s' AND runtimepro > -1.0 AND style = 0;", g_szSteamID[client], g_szMapName);
@@ -2491,8 +2498,7 @@ public void sql_selectRecordCallback(Handle owner, Handle hndl, const char[] err
}
if (!IsValidClient(data))
- return;
-
+ return;
char szQuery[512];
@@ -2505,7 +2511,6 @@ public void sql_selectRecordCallback(Handle owner, Handle hndl, const char[] err
if ((g_fFinalTime[data] <= time || time <= 0.0))
{
db_updateRecordPro(data);
-
}
}
else
@@ -2574,7 +2579,6 @@ public void SQL_UpdateRecordProCallback(Handle owner, Handle hndl, const char[]
char szQuery[512];
Format(szQuery, sizeof(szQuery), "SELECT count(runtimepro) FROM `ck_playertimes` WHERE `mapname` = '%s' AND `runtimepro` < %f AND style = 0;", g_szMapName, time);
SQL_TQuery(g_hDb, SQL_UpdateRecordProCallback2, szQuery, client, DBPrio_Low);
-
}
}
@@ -3091,7 +3095,7 @@ public void db_viewPersonalRecords(int client, char szSteamId[32], char szMapNam
char szName[32];
GetClientName(client, szName, sizeof(szName));
g_fClientsLoading[client][0] = GetGameTime();
- LogToFileEx(g_szLogFile, "[SurfTimer] Loading %s - %s settings", szSteamId, szName);
+ LogQueryTime("[SurfTimer] Loading %s - %s settings", szSteamId, szName);
g_fTick[client][0] = GetGameTime();
@@ -3165,7 +3169,7 @@ public void SQL_selectPersonalRecordsCallback(Handle owner, Handle hndl, const c
{
g_fTick[client][1] = GetGameTime();
float tick = g_fTick[client][1] - g_fTick[client][0];
- LogToFileEx(g_szLogFile, "[SurfTimer] %s: Finished db_viewPersonalRecords in %fs", g_szSteamID[client], tick);
+ LogQueryTime("[SurfTimer] %s: Finished db_viewPersonalRecords in %fs", g_szSteamID[client], tick);
g_fTick[client][0] = GetGameTime();
LoadClientSetting(client, g_iSettingToLoad[client]);
}
@@ -3180,8 +3184,8 @@ public void db_deleteTmp(int client)
char szQuery[256];
if (!IsValidClient(client))
return;
- Format(szQuery, 256, sql_deletePlayerTmp, g_szSteamID[client]);
- SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, client, DBPrio_Low);
+ Format(szQuery, sizeof(szQuery), sql_deletePlayerTmp, g_szSteamID[client]);
+ SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
}
public void db_selectLastRun(int client)
@@ -3279,11 +3283,13 @@ public void db_viewRecordCheckpointInMap()
// "SELECT c.zonegroup, c.cp1, c.cp2, c.cp3, c.cp4, c.cp5, c.cp6, c.cp7, c.cp8, c.cp9, c.cp10, c.cp11, c.cp12, c.cp13, c.cp14, c.cp15, c.cp16, c.cp17, c.cp18, c.cp19, c.cp20, c.cp21, c.cp22, c.cp23, c.cp24, c.cp25, c.cp26, c.cp27, c.cp28, c.cp29, c.cp30, c.cp31, c.cp32, c.cp33, c.cp34, c.cp35 FROM ck_checkpoints c WHERE steamid = '%s' AND mapname='%s' UNION SELECT a.zonegroup, b.cp1, b.cp2, b.cp3, b.cp4, b.cp5, b.cp6, b.cp7, b.cp8, b.cp9, b.cp10, b.cp11, b.cp12, b.cp13, b.cp14, b.cp15, b.cp16, b.cp17, b.cp18, b.cp19, b.cp20, b.cp21, b.cp22, b.cp23, b.cp24, b.cp25, b.cp26, b.cp27, b.cp28, b.cp29, b.cp30, b.cp31, b.cp32, b.cp33, b.cp34, b.cp35 FROM ck_bonus a LEFT JOIN ck_checkpoints b ON a.steamid = b.steamid AND a.zonegroup = b.zonegroup WHERE a.mapname = '%s' GROUP BY a.zonegroup";
char szQuery[1028];
Format(szQuery, 1028, sql_selectRecordCheckpoints, g_szRecordMapSteamID, g_szMapName, g_szMapName);
- SQL_TQuery(g_hDb, sql_selectRecordCheckpointsCallback, szQuery, 1, DBPrio_Low);
+ SQL_TQuery(g_hDb, sql_selectRecordCheckpointsCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-public void sql_selectRecordCheckpointsCallback(Handle owner, Handle hndl, const char[] error, any data)
-{
+public void sql_selectRecordCheckpointsCallback(Handle owner, Handle hndl, const char[] error, float time)
+{
+ LogQueryTime("[SurfTimer] : Finished sql_selectRecordCheckpointsCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (sql_selectRecordCheckpointsCallback): %s", error);
@@ -3357,7 +3363,7 @@ public void SQL_selectCheckpointsCallback(Handle owner, Handle hndl, const char[
{
g_fTick[client][1] = GetGameTime();
float tick = g_fTick[client][1] - g_fTick[client][0];
- LogToFileEx(g_szLogFile, "[SurfTimer] %s: Finished db_viewCheckpoints in %fs", g_szSteamID[client], tick);
+ LogQueryTime("[SurfTimer] %s: Finished db_viewCheckpoints in %fs", g_szSteamID[client], tick);
LoadClientSetting(client, g_iSettingToLoad[client]);
}
@@ -3439,7 +3445,7 @@ public void SQL_LoadStageAttemptsCallback(Handle owner, Handle hndl, const char[
{
g_fTick[client][1] = GetGameTime();
float tick = g_fTick[client][1] - g_fTick[client][0];
- LogToFileEx(g_szLogFile, "[SurfTimer] %s: Finished db_LoadCCP in %fs", g_szSteamID[client], tick);
+ LogQueryTime("[SurfTimer] %s: Finished db_LoadCCP in %fs", g_szSteamID[client], tick);
LoadClientSetting(client, g_iSettingToLoad[client]);
}
}
@@ -3452,12 +3458,22 @@ public void db_viewReplayCPTicks(char szMapName[128])
g_bReplayTickFound[style] = false;
Format(szQuery, sizeof(szQuery), sql_selectReplayCPTicksAll, szMapName, style);
- SQL_TQuery(g_hDb, SQL_selectReplayCPTicksCallback, szQuery, _, DBPrio_Low);
+ DataPack pack = new DataPack()
+ pack.WriteCell(style);
+ pack.WriteFloat(GetGameTime());
+ SQL_TQuery(g_hDb, SQL_selectReplayCPTicksCallback, szQuery, pack, DBPrio_Low);
}
}
-public void SQL_selectReplayCPTicksCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void SQL_selectReplayCPTicksCallback(Handle owner, Handle hndl, const char[] error, DataPack pack)
{
+ pack.Reset();
+ int iStyle = pack.ReadCell();
+ float fTime = pack.ReadFloat();
+ delete pack;
+
+ LogQueryTime("[SurfTimer] : Finished SQL_selectReplayCPTicksCallback for %s in: %f", g_EditStyles[iStyle], GetGameTime() - fTime);
+
// fluffys come back
if (hndl == null)
{
@@ -3495,7 +3511,7 @@ public void SQL_selectReplayCPTicksCallback(Handle owner, Handle hndl, const cha
g_fServerLoading[1] = GetGameTime();
g_bHasLatestID = true;
float time = g_fServerLoading[1] - g_fServerLoading[0];
- LogToFileEx(g_szLogFile, "[SurfTimer] Finished loading server settings in %fs", time);
+ LogQueryTime("[SurfTimer] Finished loading server settings in %fs", time);
loadAllClientSettings();
}
}
@@ -3720,7 +3736,7 @@ public void db_viewPRinfoCallback(Handle owner, Handle hndl, const char[] error,
{
g_fTick[client][1] = GetGameTime();
float tick = g_fTick[client][1] - g_fTick[client][0];
- LogToFileEx(g_szLogFile, "[SurfTimer] %s: Finished db_viewPRinfo in %fs", g_szSteamID[client], tick);
+ LogQueryTime("[SurfTimer] %s: Finished db_viewPRinfo in %fs", g_szSteamID[client], tick);
g_fTick[client][0] = GetGameTime();
// Print a VIP's custom join msg to all
@@ -3756,7 +3772,7 @@ public void db_viewPRinfoCallback(Handle owner, Handle hndl, const char[] error,
float time = g_fTick[client][1] - g_fClientsLoading[client][0];
char szName[32];
GetClientName(client, szName, sizeof(szName));
- LogToFileEx(g_szLogFile, "[SurfTimer] Finished loading %s - %s settings in %fs", g_szSteamID[client], szName, time);
+ LogQueryTime("[SurfTimer] Finished loading %s - %s settings in %fs", g_szSteamID[client], szName, time);
}
}
@@ -3774,16 +3790,15 @@ public void db_prinforuntimecallback(Handle owner, Handle hndl, const char[] err
char szMapName[32];
ReadPackString(pack, szMapName, 32);
+ CloseHandle(pack);
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (db_prinforuntimecallback): %s", error);
- CloseHandle(pack);
return;
}
if (!IsValidClient(client)){
- CloseHandle(pack);
return;
}
@@ -3797,8 +3812,8 @@ public void db_prinforuntimecallback(Handle owner, Handle hndl, const char[] err
SQL_EscapeString(g_hDb, szUName, szName, MAX_NAME_LENGTH);
char szQuery[1024];
- Format(szQuery, 1024, sql_insertPR, szSteamID, szName, szMapName, runtime, 0, 0.0, 0.0, 0.0, 0.0);
- SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, pack, DBPrio_Low);
+ Format(szQuery, sizeof(szQuery), sql_insertPR, szSteamID, szName, szMapName, runtime, 0, 0.0, 0.0, 0.0, 0.0);
+ SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
}
else{
@@ -3809,11 +3824,10 @@ public void db_prinforuntimecallback(Handle owner, Handle hndl, const char[] err
char szQuery[1024];
- Format(szQuery, 1024, sql_insertPR, szSteamID, szName, szMapName, 0.0, 0, 0.0, 0.0, 0.0, 0.0);
- SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, pack, DBPrio_Low);
+ Format(szQuery, sizeof(szQuery), sql_insertPR, szSteamID, szName, szMapName, 0.0, 0, 0.0, 0.0, 0.0, 0.0);
+ SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
}
- CloseHandle(pack);
return;
}
@@ -3895,7 +3909,7 @@ public void db_viewBonusPRinfoCallback(Handle owner, Handle hndl, const char[] e
{
g_fTick[client][1] = GetGameTime();
float tick = g_fTick[client][1] - g_fTick[client][0];
- LogToFileEx(g_szLogFile, "[SurfTimer] %s: Finished db_viewPRinfo in %fs", g_szSteamID[client], tick);
+ LogQueryTime("[SurfTimer] %s: Finished db_viewPRinfo in %fs", g_szSteamID[client], tick);
g_fTick[client][0] = GetGameTime();
// Print a VIP's custom join msg to all
@@ -3931,7 +3945,7 @@ public void db_viewBonusPRinfoCallback(Handle owner, Handle hndl, const char[] e
float time = g_fTick[client][1] - g_fClientsLoading[client][0];
char szName[32];
GetClientName(client, szName, sizeof(szName));
- LogToFileEx(g_szLogFile, "[SurfTimer] Finished loading %s - %s settings in %fs", g_szSteamID[client], szName, time);
+ LogQueryTime("[SurfTimer] Finished loading %s - %s settings in %fs", g_szSteamID[client], szName, time);
}
return;
@@ -3976,8 +3990,8 @@ public void db_bonusprinforuntimecallback(Handle owner, Handle hndl, const char[
runtime = SQL_FetchFloat(hndl, 0);
zonegroup = SQL_FetchInt(hndl, 1);
- Format(szQuery, 1024, sql_insertPR, szSteamID, szName, szMapName, runtime, zonegroup, 0.0, 0.0, 0.0, 0.0);
- SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, pack, DBPrio_Low);
+ Format(szQuery, sizeof(szQuery), sql_insertPR, szSteamID, szName, szMapName, runtime, zonegroup, 0.0, 0.0, 0.0, 0.0);
+ SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
}
else{
@@ -3992,8 +4006,8 @@ public void db_bonusprinforuntimecallback(Handle owner, Handle hndl, const char[
char szQuery[1024];
- Format(szQuery, 1024, sql_insertPR, szSteamID, szName, szMapName, 0.0, zonegroup, 0.0, 0.0, 0.0, 0.0);
- SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, pack, DBPrio_Low);
+ Format(szQuery, sizeof(szQuery), sql_insertPR, szSteamID, szName, szMapName, 0.0, zonegroup, 0.0, 0.0, 0.0, 0.0);
+ SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
}
@@ -4008,7 +4022,7 @@ public void db_UpdatePRinfo_WithRuntime(int client, char szSteamID[32], int zGro
char szQuery[2048];
//PrintToConsole(client, "%f || %f || %f || %f || %f\n", g_fTimeinZone[client][zGroup], g_fCompletes[client][zGroup], g_fAttempts[client][zGroup], g_fstComplete[client][zGroup], runtime);
- Format(szQuery, 2048, sql_updatePrinfo_withruntime, g_fTimeinZone[client][zGroup], g_fCompletes[client], g_fAttempts[client][zGroup], g_fstComplete[client][zGroup], runtime, szSteamID, g_szMapName, zGroup);
+ Format(szQuery, sizeof(szQuery), sql_updatePrinfo_withruntime, g_fTimeinZone[client][zGroup], g_fCompletes[client], g_fAttempts[client][zGroup], g_fstComplete[client][zGroup], runtime, szSteamID, g_szMapName, zGroup);
SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, .prio=DBPrio_Low);
}
//this is called whenever the player's time stops and he is not in a end zone (map/bonus/stage)
@@ -4027,17 +4041,51 @@ public void db_UpdatePRinfo(int client, char szSteamID[32], int zGroup)
= MAPTIER =
===================================*/
+public void db_insertMapperName(int client, char arg1[64])
+{
+ char szQuery[256];
+
+ if (!g_bTierEntryFound)
+ {
+ CReplyToCommand(client, "%t", "NoTierEntry", g_szChatPrefix);
+ return;
+ }
+ if (g_bMapperNameFound)
+ {
+ CReplyToCommand(client, "%t", "UpdateMapperName", g_szChatPrefix, arg1);
+ Format(szQuery, sizeof(szQuery), sql_updateMapperName, arg1, g_szMapName);
+ SQL_TQuery(g_hDb, db_insertMapperNameCallback, szQuery, 1, DBPrio_Low);
+ }
+ else
+ {
+ CReplyToCommand(client, "%t", "InsertMapperName", g_szChatPrefix, arg1);
+ Format(szQuery, sizeof(szQuery), sql_updateMapperName, arg1, g_szMapName);
+ SQL_TQuery(g_hDb, db_insertMapperNameCallback, szQuery, 1, DBPrio_Low);
+ }
+}
+
+public void db_insertMapperNameCallback(Handle owner, Handle hndl, const char[] error, any data)
+{
+ if (hndl == null)
+ {
+ LogError("[Surftimer] SQL Error (db_insertMapperNameCallback): %s", error);
+ return;
+ }
+
+ db_selectMapTier();
+}
+
public void db_insertMapTier(int tier)
{
char szQuery[256];
if (g_bTierEntryFound)
{
- Format(szQuery, 256, sql_updatemaptier, tier, g_szMapName);
+ Format(szQuery, sizeof(szQuery), sql_updatemaptier, tier, g_szMapName);
SQL_TQuery(g_hDb, db_insertMapTierCallback, szQuery, 1, DBPrio_Low);
}
else
{
- Format(szQuery, 256, sql_insertmaptier, g_szMapName, tier);
+ Format(szQuery, sizeof(szQuery), sql_insertmaptier, g_szMapName, tier);
SQL_TQuery(g_hDb, db_insertMapTierCallback, szQuery, 1, DBPrio_Low);
}
}
@@ -4105,11 +4153,13 @@ public void db_selectMapTier()
char szQuery[1024];
Format(szQuery, 1024, sql_selectMapTier, g_szMapName);
- SQL_TQuery(g_hDb, SQL_selectMapTierCallback, szQuery, 1, DBPrio_Low);
+ SQL_TQuery(g_hDb, SQL_selectMapTierCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-public void SQL_selectMapTierCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void SQL_selectMapTierCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished SQL_selectMapTierCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (SQL_selectMapTierCallback): %s", error);
@@ -4127,11 +4177,31 @@ public void SQL_selectMapTierCallback(Handle owner, Handle hndl, const char[] er
// Format tier string
tier = SQL_FetchInt(hndl, 0);
g_bRankedMap = view_as(SQL_FetchInt(hndl, 1));
+
+ if (SQL_IsFieldNull(hndl, 2))
+ {
+ g_szMapperName = "N/A";
+ g_bMapperNameFound = false;
+ }
+ else
+ {
+ SQL_FetchString(hndl, 2, g_szMapperName, sizeof(g_szMapperName));
+ g_bMapperNameFound = true;
+ }
+
if (0 < tier < 9)
{
g_bTierFound = true;
g_iMapTier = tier;
- Format(g_sTierString, 512, "%c%s %c- ", BLUE, g_szMapName, WHITE);
+ if (g_bMapperNameFound)
+ {
+ Format(g_sTierString, 512, "%c%s \x01by \x03%s %c- ", BLUE, g_szMapName, g_szMapperName, WHITE);
+ }
+ else
+ {
+ Format(g_sTierString, 512, "%c%s %c- ", BLUE, g_szMapName, WHITE);
+ }
+
switch (tier)
{
case 1:Format(g_sTierString, 512, "%s%cTier %i %c- ", g_sTierString, GRAY, tier, WHITE);
@@ -4200,7 +4270,8 @@ public void db_viewBonusRunRank(Handle owner, Handle hndl, const char[] error, a
rank = SQL_FetchInt(hndl, 0);
}
- if(g_bPracticeMode[client]){
+ if(g_bPracticeModeRun[client])
+ {
float runtime = g_fCurrentRunTime[client];
char sz_srDiff[128];
float f_srDiff;
@@ -4361,7 +4432,7 @@ public void SQL_selectPersonalBonusRecordsCallback(Handle owner, Handle hndl, co
{
g_fTick[client][1] = GetGameTime();
float tick = g_fTick[client][1] - g_fTick[client][0];
- LogToFileEx(g_szLogFile, "[SurfTimer] %s: Finished db_viewPersonalBonusRecords in %fs", g_szSteamID[client], tick);
+ LogQueryTime("[SurfTimer] %s: Finished db_viewPersonalBonusRecords in %fs", g_szSteamID[client], tick);
g_fTick[client][0] = GetGameTime();
LoadClientSetting(client, g_iSettingToLoad[client]);
@@ -4374,11 +4445,13 @@ public void db_viewFastestBonus()
char szQuery[1024];
// SELECT name, MIN(runtime), zonegroup, style FROM ck_bonus WHERE mapname = '%s' GROUP BY zonegroup, style;
Format(szQuery, 1024, sql_selectFastestBonus, g_szMapName);
- SQL_TQuery(g_hDb, SQL_selectFastestBonusCallback, szQuery, 1, DBPrio_High);
+ SQL_TQuery(g_hDb, SQL_selectFastestBonusCallback, szQuery, GetGameTime(), DBPrio_High);
}
-public void SQL_selectFastestBonusCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void SQL_selectFastestBonusCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished SQL_selectFastestBonusCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (SQL_selectFastestBonusCallback): %s", error);
@@ -4467,11 +4540,13 @@ public void db_viewBonusTotalCount()
char szQuery[1024];
// SELECT zonegroup, style, count(1) FROM ck_bonus WHERE mapname = '%s' GROUP BY zonegroup, style;
Format(szQuery, 1024, sql_selectBonusCount, g_szMapName);
- SQL_TQuery(g_hDb, SQL_selectBonusTotalCountCallback, szQuery, 1, DBPrio_Low);
+ SQL_TQuery(g_hDb, SQL_selectBonusTotalCountCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-public void SQL_selectBonusTotalCountCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void SQL_selectBonusTotalCountCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished SQL_selectBonusTotalCountCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (SQL_selectBonusTotalCountCallback): %s", error);
@@ -4505,7 +4580,10 @@ public void SQL_selectBonusTotalCountCallback(Handle owner, Handle hndl, const c
}
public void db_insertBonus(int client, char szSteamId[32], char szUName[128], float FinalTime, int zoneGrp)
-{
+{
+ if (g_bPracticeMode[client])
+ return;
+
char szQuery[1024];
char szName[MAX_NAME_LENGTH * 2 + 1];
SQL_EscapeString(g_hDb, szUName, szName, MAX_NAME_LENGTH * 2 + 1);
@@ -4535,7 +4613,10 @@ public void SQL_insertBonusCallback(Handle owner, Handle hndl, const char[] erro
}
public void db_updateBonus(int client, char szSteamId[32], char szUName[128], float FinalTime, int zoneGrp)
-{
+{
+ if (g_bPracticeMode[client])
+ return;
+
char szQuery[1024];
char szName[MAX_NAME_LENGTH * 2 + 1];
Handle datapack = CreateDataPack();
@@ -4717,7 +4798,7 @@ public void db_checkAndFixZoneIdsCallback(Handle owner, Handle hndl, const char[
if (IDError)
{
char szQuery[256];
- Format(szQuery, 256, sql_deleteMapZones, g_szMapName);
+ Format(szQuery, sizeof(szQuery), sql_deleteMapZones, g_szMapName);
SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
// SQL_FastQuery(g_hDb, szQuery);
@@ -4733,12 +4814,12 @@ public void db_checkAndFixZoneIdsCallback(Handle owner, Handle hndl, const char[
public void ZoneDefaultName(int zonetype, int zonegroup, char zName[128])
{
if (zonegroup > 0)
- Format(zName, 64, "bonus %i", zonegroup);
+ Format(zName, sizeof(zName), "bonus %i", zonegroup);
else
if (-1 < zonetype < ZONEAMOUNT)
- Format(zName, 128, "%s %i", g_szZoneDefaultNames[zonetype], zonegroup);
+ Format(zName, sizeof(zName), "%s %i", g_szZoneDefaultNames[zonetype], zonegroup);
else
- Format(zName, 64, "Unknown");
+ Format(zName, sizeof(zName), "Unknown");
}
public void db_insertZoneCheap(int zoneid, int zonetype, int zonetypeid, float pointax, float pointay, float pointaz, float pointbx, float pointby, float pointbz, int vis, int team, int zGrp, char zName[128], int query, char hookname[128], char targetname[128], int ojl, float prespeed)
@@ -4758,7 +4839,7 @@ public void SQL_insertZonesCheapCallback(Handle owner, Handle hndl, const char[]
return;
}
if (query == (g_mapZonesCount - 1))
- db_selectMapZones();
+ db_selectMapZones();
}
public void db_insertZone(int zoneid, int zonetype, int zonetypeid, float pointax, float pointay, float pointaz, float pointbx, float pointby, float pointbz, int vis, int team, int zonegroup)
@@ -5093,11 +5174,13 @@ public void db_selectMapZones()
{
char szQuery[512];
Format(szQuery, sizeof(szQuery), sql_selectMapZones, g_szMapName);
- SQL_TQuery(g_hDb, SQL_selectMapZonesCallback, szQuery, 1, DBPrio_High);
+ SQL_TQuery(g_hDb, SQL_selectMapZonesCallback, szQuery, GetGameTime(), DBPrio_High);
}
-public void SQL_selectMapZonesCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void SQL_selectMapZonesCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished SQL_selectMapZonesCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (SQL_selectMapZonesCallback): %s", error);
@@ -5489,12 +5572,12 @@ public void db_insertLastPositionCallback(Handle owner, Handle hndl, const char[
int tickrate = g_iTickrate * 5 * 11;
if (SQL_HasResultSet(hndl) && SQL_FetchRow(hndl))
{
- Format(szQuery, 1024, sql_updatePlayerTmp, g_fPlayerCordsLastPosition[client][0], g_fPlayerCordsLastPosition[client][1], g_fPlayerCordsLastPosition[client][2], g_fPlayerAnglesLastPosition[client][0], g_fPlayerAnglesLastPosition[client][1], g_fPlayerAnglesLastPosition[client][2], g_fPlayerLastTime[client], szMapName, tickrate, stage, zgroup, szSteamID);
+ Format(szQuery, sizeof(szQuery), sql_updatePlayerTmp, g_fPlayerCordsLastPosition[client][0], g_fPlayerCordsLastPosition[client][1], g_fPlayerCordsLastPosition[client][2], g_fPlayerAnglesLastPosition[client][0], g_fPlayerAnglesLastPosition[client][1], g_fPlayerAnglesLastPosition[client][2], g_fPlayerLastTime[client], szMapName, tickrate, stage, zgroup, szSteamID);
SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
}
else
{
- Format(szQuery, 1024, sql_insertPlayerTmp, g_fPlayerCordsLastPosition[client][0], g_fPlayerCordsLastPosition[client][1], g_fPlayerCordsLastPosition[client][2], g_fPlayerAnglesLastPosition[client][0], g_fPlayerAnglesLastPosition[client][1], g_fPlayerAnglesLastPosition[client][2], g_fPlayerLastTime[client], szSteamID, szMapName, tickrate, stage, zgroup);
+ Format(szQuery, sizeof(szQuery), sql_insertPlayerTmp, g_fPlayerCordsLastPosition[client][0], g_fPlayerCordsLastPosition[client][1], g_fPlayerCordsLastPosition[client][2], g_fPlayerAnglesLastPosition[client][0], g_fPlayerAnglesLastPosition[client][1], g_fPlayerAnglesLastPosition[client][2], g_fPlayerLastTime[client], szSteamID, szMapName, tickrate, stage, zgroup);
SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
}
}
@@ -5503,7 +5586,7 @@ public void db_insertLastPositionCallback(Handle owner, Handle hndl, const char[
public void db_deletePlayerTmps()
{
char szQuery[64];
- Format(szQuery, 64, "delete FROM ck_playertemp");
+ Format(szQuery, sizeof(szQuery), "delete FROM ck_playertemp");
SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
}
@@ -5574,19 +5657,21 @@ public int LatestRecordsMenuHandler(Handle menu, MenuAction action, int param1,
public void db_InsertLatestRecords(char szSteamID[32], char szName[128], float FinalTime)
{
char szQuery[512];
- Format(szQuery, 512, sql_insertLatestRecords, szSteamID, szName, FinalTime, g_szMapName);
+ Format(szQuery, sizeof(szQuery), sql_insertLatestRecords, szSteamID, szName, FinalTime, g_szMapName);
SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
}
public void db_CalcAvgRunTime()
{
char szQuery[256];
- Format(szQuery, 256, sql_selectAllMapTimesinMap, g_szMapName);
- SQL_TQuery(g_hDb, SQL_db_CalcAvgRunTimeCallback, szQuery, _, DBPrio_Low);
+ Format(szQuery, sizeof(szQuery), sql_selectAllMapTimesinMap, g_szMapName);
+ SQL_TQuery(g_hDb, SQL_db_CalcAvgRunTimeCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-public void SQL_db_CalcAvgRunTimeCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void SQL_db_CalcAvgRunTimeCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished SQL_db_CalcAvgRunTimeCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (SQL_db_CalcAvgRunTimeCallback): %s", error);
@@ -5631,16 +5716,18 @@ public void db_CalcAvgRunTimeBonus()
{
char szQuery[256];
Format(szQuery, 256, sql_selectAllBonusTimesinMap, g_szMapName);
- SQL_TQuery(g_hDb, SQL_db_CalcAvgRunBonusTimeCallback, szQuery, 1, DBPrio_Low);
+ SQL_TQuery(g_hDb, SQL_db_CalcAvgRunBonusTimeCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-public void SQL_db_CalcAvgRunBonusTimeCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void SQL_db_CalcAvgRunBonusTimeCallback(Handle owner, Handle hndl, const char[] error, float fTime)
{
+ LogQueryTime("[SurfTimer] : Finished SQL_db_CalcAvgRunBonusTimeCallback in: %f", GetGameTime() - fTime);
+
if (hndl == null)
{
- LogError("[SurfTimer] SQL Error (SQL_db_CalcAvgRunTimeCallback): %s", error);
+ LogError("[SurfTimer] SQL Error (SQL_db_CalcAvgRunBonusTimeCallback): %s", error);
if (!g_bServerDataLoaded)
- db_CalculatePlayerCount(0);
+ db_CalculatePlayerCount(0);
return;
}
@@ -5682,12 +5769,13 @@ public void db_GetDynamicTimelimit()
}
char szQuery[256];
Format(szQuery, 256, sql_selectAllMapTimesinMap, g_szMapName);
- SQL_TQuery(g_hDb, SQL_db_GetDynamicTimelimitCallback, szQuery, _, DBPrio_Low);
+ SQL_TQuery(g_hDb, SQL_db_GetDynamicTimelimitCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-
-public void SQL_db_GetDynamicTimelimitCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void SQL_db_GetDynamicTimelimitCallback(Handle owner, Handle hndl, const char[] error, float fTime)
{
+ LogQueryTime("[SurfTimer] : Finished SQL_db_GetDynamicTimelimitCallback in: %f", GetGameTime() - fTime);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (SQL_db_GetDynamicTimelimitCallback): %s", error);
@@ -5755,18 +5843,31 @@ public void db_CalculatePlayerCount(int style)
{
char szQuery[255];
Format(szQuery, 255, sql_CountRankedPlayers, style);
- SQL_TQuery(g_hDb, sql_CountRankedPlayersCallback, szQuery, style, DBPrio_Low);
+ DataPack pack = new DataPack();
+ pack.WriteCell(style);
+ pack.WriteFloat(GetGameTime());
+ SQL_TQuery(g_hDb, sql_CountRankedPlayersCallback, szQuery, pack, DBPrio_Low);
}
public void db_CalculatePlayersCountGreater0(int style)
{
char szQuery[255];
Format(szQuery, 255, sql_CountRankedPlayers2, style);
- SQL_TQuery(g_hDb, sql_CountRankedPlayers2Callback, szQuery, style, DBPrio_Low);
+ DataPack pack = new DataPack();
+ pack.WriteCell(style);
+ pack.WriteFloat(GetGameTime());
+ SQL_TQuery(g_hDb, sql_CountRankedPlayers2Callback, szQuery, pack, DBPrio_Low);
}
-public void sql_CountRankedPlayersCallback(Handle owner, Handle hndl, const char[] error, any style)
+public void sql_CountRankedPlayersCallback(Handle owner, Handle hndl, const char[] error, DataPack pack)
{
+ pack.Reset();
+ int style = pack.ReadCell();
+ float time = pack.ReadFloat();
+ delete pack;
+
+ LogQueryTime("[SurfTimer] : Finished sql_CountRankedPlayersCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (sql_CountRankedPlayersCallback): %s", error);
@@ -5786,8 +5887,15 @@ public void sql_CountRankedPlayersCallback(Handle owner, Handle hndl, const char
return;
}
-public void sql_CountRankedPlayers2Callback(Handle owner, Handle hndl, const char[] error, any style)
+public void sql_CountRankedPlayers2Callback(Handle owner, Handle hndl, const char[] error, DataPack pack)
{
+ pack.Reset();
+ int style = pack.ReadCell();
+ float time = pack.ReadFloat();
+ delete pack;
+
+ LogQueryTime("[SurfTimer] : Finished sql_CountRankedPlayers2Callback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (sql_CountRankedPlayers2Callback): %s", error);
@@ -6071,7 +6179,7 @@ public void db_Cleanup()
char szQuery[255];
// tmps
- Format(szQuery, 255, "DELETE FROM ck_playertemp where mapname != '%s'", g_szMapName);
+ Format(szQuery, sizeof(szQuery), "DELETE FROM ck_playertemp where mapname != '%s'", g_szMapName);
SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
// times
@@ -6079,8 +6187,6 @@ public void db_Cleanup()
// fluffys pointless players
SQL_TQuery(g_hDb, SQL_CheckCallback, "DELETE FROM ck_playerrank WHERE `points` <= 0", _, DBPrio_Low);
- /*SQL_TQuery(g_hDb, SQL_CheckCallback, "DELETE FROM ck_wrcps WHERE `runtimepro` <= -1.0");
- SQL_TQuery(g_hDb, SQL_CheckCallback, "DELETE FROM ck_wrcps WHERE `stage` = 0");*/
}
@@ -6102,9 +6208,9 @@ public void db_UpdateLastSeen(int client)
{
char szQuery[512];
if (g_DbType == MYSQL)
- Format(szQuery, 512, sql_UpdateLastSeenMySQL, g_szSteamID[client]);
+ Format(szQuery, sizeof(szQuery), sql_UpdateLastSeenMySQL, g_szSteamID[client]);
else if (g_DbType == SQLITE)
- Format(szQuery, 512, sql_UpdateLastSeenSQLite, g_szSteamID[client]);
+ Format(szQuery, sizeof(szQuery), sql_UpdateLastSeenSQLite, g_szSteamID[client]);
SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
}
@@ -6118,58 +6224,9 @@ public void SQL_CheckCallback(Handle owner, Handle hndl, const char[] error, any
{
if (hndl == null)
{
- LogError("[SurfTimer] SQL Error (SQL_CheckCallback): %s", error);
- return;
- }
-}
-
-public void SQL_CheckCallback2(Handle owner, Handle hndl, const char[] error, any data)
-{
- if (hndl == null)
- {
- LogError("[SurfTimer] SQL Error (SQL_CheckCallback2): %s", error);
- return;
- }
-
- db_viewMapProRankCount();
- db_GetMapRecord_Pro();
-}
-
-public void SQL_CheckCallback3(Handle owner, Handle hndl, const char[] error, any data)
-{
- if (hndl == null)
- {
- LogError("[SurfTimer] SQL Error (SQL_CheckCallback3): %s", error);
- return;
- }
-
- char steamid[128];
-
- ResetPack(data);
- int client = ReadPackCell(data);
- ReadPackString(data, steamid, 128);
- CloseHandle(data);
-
- RecalcPlayerRank(client, steamid);
- db_viewMapProRankCount();
- db_GetMapRecord_Pro();
-}
-
-public void SQL_CheckCallback4(Handle owner, Handle hndl, const char[] error, any data)
-{
- if (hndl == null)
- {
- LogError("[SurfTimer] SQL Error (SQL_CheckCallback4): %s", error);
+ LogStackTrace("[SurfTimer] SQL Error (SQL_CheckCallback): %s", error);
return;
}
- char steamid[128];
-
- ResetPack(data);
- int client = ReadPackCell(data);
- ReadPackString(data, steamid, 128);
- CloseHandle(data);
-
- RecalcPlayerRank(client, steamid);
}
/*==================================
@@ -6251,7 +6308,7 @@ public void db_viewPlayerOptionsCallback(Handle owner, Handle hndl, const char[]
// "INSERT INTO ck_playeroptions2 (steamid, timer, hide, sounds, chat, viewmodel, autobhop, checkpoints, centrehud, module1c, module2c, module3c, module4c, module5c, module6c, sidehud, module1s, module2s, module3s, module4s, module5s) VALUES('%s', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i');";
- Format(szQuery, 1024, sql_insertPlayerOptions, g_szSteamID[client]);
+ Format(szQuery, sizeof(szQuery), sql_insertPlayerOptions, g_szSteamID[client]);
SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
g_bTimerEnabled[client] = true;
@@ -6296,7 +6353,7 @@ public void db_viewPlayerOptionsCallback(Handle owner, Handle hndl, const char[]
{
g_fTick[client][1] = GetGameTime();
float tick = g_fTick[client][1] - g_fTick[client][0];
- LogToFileEx(g_szLogFile, "[SurfTimer] %s: Finished db_viewPlayerOptions in %fs", g_szSteamID[client], tick);
+ LogQueryTime("[SurfTimer] %s: Finished db_viewPlayerOptions in %fs", g_szSteamID[client], tick);
g_fTick[client][0] = GetGameTime();
LoadClientSetting(client, g_iSettingToLoad[client]);
@@ -6312,7 +6369,7 @@ public void db_updatePlayerOptions(int client)
{
Format(szQuery, sizeof(szQuery), sql_updatePlayerOptions, BooltoInt(g_bTimerEnabled[client]), BooltoInt(g_bHide[client]), BooltoInt(g_bEnableQuakeSounds[client]), BooltoInt(g_bHideChat[client]), BooltoInt(g_bViewModel[client]), BooltoInt(g_bAutoBhopClient[client]), BooltoInt(g_bCheckpointsEnabled[client]), g_SpeedGradient[client], g_SpeedMode[client], BooltoInt(g_bCenterSpeedDisplay[client]), BooltoInt(g_bCentreHud[client]), g_iTeleSide[client], g_iCentreHudModule[client][0], g_iCentreHudModule[client][1], g_iCentreHudModule[client][2], g_iCentreHudModule[client][3], g_iCentreHudModule[client][4], g_iCentreHudModule[client][5], BooltoInt(g_bSideHud[client]), g_iSideHudModule[client][0], g_iSideHudModule[client][1], g_iSideHudModule[client][2], g_iSideHudModule[client][3], g_iSideHudModule[client][4], BooltoInt(g_iPrespeedText[client]), BooltoInt(g_iCpMessages[client]), BooltoInt(g_iWrcpMessages[client]), BooltoInt(g_bAllowHints[client]), g_iCSDUpdateRate[client], g_fCSD_POS_X[client], g_fCSD_POS_Y[client], g_iCSD_R[client], g_iCSD_G[client], g_iCSD_B[client], g_PreSpeedMode[client], g_szSteamID[client]);
//Format(szQuery, 1024, sql_updatePlayerOptions, BooltoInt(g_bTimerEnabled[client]), BooltoInt(g_bHide[client]), BooltoInt(g_bEnableQuakeSounds[client]), BooltoInt(g_bHideChat[client]), BooltoInt(g_bViewModel[client]), BooltoInt(g_bAutoBhopClient[client]), BooltoInt(g_bCheckpointsEnabled[client]), g_SpeedGradient[client], g_SpeedMode[client], BooltoInt(g_bCenterSpeedDisplay[client]), BooltoInt(g_bCentreHud[client]), g_iTeleSide[client], g_iCentreHudModule[client][0], g_iCentreHudModule[client][1], g_iCentreHudModule[client][2], g_iCentreHudModule[client][3], g_iCentreHudModule[client][4], g_iCentreHudModule[client][5], BooltoInt(g_bSideHud[client]), g_iSideHudModule[client][0], g_iSideHudModule[client][1], g_iSideHudModule[client][2], g_iSideHudModule[client][3], g_iSideHudModule[client][4], BooltoInt(g_iPrespeedText[client]), BooltoInt(g_iCpMessages[client]), BooltoInt(g_iWrcpMessages[client]), BooltoInt(g_bAllowHints[client]), BooltoInt(g_bTimeleftDisplay[client]), g_szSteamID[client]);
- SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, client, DBPrio_Low);
+ SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
}
}
@@ -6489,11 +6546,13 @@ public void db_selectTotalBonusCount()
{
char szQuery[512];
Format(szQuery, 512, "SELECT COUNT(DISTINCT a.mapname,zonegroup) as count FROM ck_zones a RIGHT JOIN ck_maptier b ON a.mapname = b.mapname WHERE a.zonegroup > 0");
- SQL_TQuery(g_hDb, sql_selectTotalBonusCountCallback, szQuery, DBPrio_Low);
+ SQL_TQuery(g_hDb, sql_selectTotalBonusCountCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-public void sql_selectTotalBonusCountCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void sql_selectTotalBonusCountCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished sql_selectTotalBonusCountCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (sql_selectTotalBonusCountCallback): %s", error);
@@ -6516,14 +6575,16 @@ public void db_selectTotalStageCount()
{
char szQuery[512];
Format(szQuery, 512, "SELECT SUM(c.stages) FROM (SELECT a.mapname, MAX(zonetypeid)+2 as stages FROM `ck_zones` a RIGHT JOIN `ck_maptier` b ON a.mapname = b.mapname WHERE zonetype = 3 GROUP BY a.mapname)c");
- SQL_TQuery(g_hDb, sql_selectTotalStageCountCallback, szQuery, DBPrio_Low);
+ SQL_TQuery(g_hDb, sql_selectTotalStageCountCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-public void sql_selectTotalStageCountCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void sql_selectTotalStageCountCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished sql_selectTotalStageCountCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
- LogError("[SurfTimer] SQL Error (sql_selectTotalBonusCountCallback): %s", error);
+ LogError("[SurfTimer] SQL Error (sql_selectTotalStageCountCallback): %s", error);
if (!g_bServerDataLoaded)
db_selectCurrentMapImprovement();
@@ -6541,7 +6602,7 @@ public void sql_selectTotalStageCountCallback(Handle owner, Handle hndl, const c
public void db_selectWrcpRecord(int client, int style, int stage)
{
- if (!IsValidClient(client) || IsFakeClient(client) || g_bUsingStageTeleport[client])
+ if (!IsValidClient(client) || IsFakeClient(client) || g_bUsingStageTeleport[client] || g_bPracticeMode[client])
return;
if (stage > g_TotalStages) // Hack fix for multiple end zones
@@ -6742,7 +6803,7 @@ public void SQL_UpdateWrcpRecordCallback2(Handle owner, Handle hndl, const char[
{
if (hndl == null)
{
- LogError("[SurfTimer] SQL Error (SQL_UpdateRecordProCallback2): %s", error);
+ LogError("[SurfTimer] SQL Error (SQL_UpdateWrcpRecordCallback2): %s", error);
CloseHandle(data);
return;
}
@@ -6984,7 +7045,7 @@ public void db_viewPersonalStageRecords(int client, char szSteamId[32])
{
if (!g_bSettingsLoaded[client] && !g_bhasStages)
{
- LogToFileEx(g_szLogFile, "[SurfTimer] %s: Skipping db_viewPersonalStageRecords (linear map)", g_szSteamID[client]);
+ LogQueryTime("[SurfTimer] %s: Skipping db_viewPersonalStageRecords (linear map)", g_szSteamID[client]);
LoadClientSetting(client, 3);
return;
}
@@ -7041,7 +7102,7 @@ public void SQL_selectPersonalStageRecordsCallback(Handle owner, Handle hndl, co
{
g_fTick[client][1] = GetGameTime();
float tick = g_fTick[client][1] - g_fTick[client][0];
- LogToFileEx(g_szLogFile, "[SurfTimer] %s: Finished db_viewPersonalStageRecords in %fs", g_szSteamID[client], tick);
+ LogQueryTime("[SurfTimer] %s: Finished db_viewPersonalStageRecords in %fs", g_szSteamID[client], tick);
g_fTick[client][0] = GetGameTime();
LoadClientSetting(client, g_iSettingToLoad[client]);
@@ -7156,7 +7217,7 @@ public void SQL_selectPersonalPrestrafeSpeeds_MapCallback(Handle owner, Handle h
{
g_fTick[client][1] = GetGameTime();
float tick = g_fTick[client][1] - g_fTick[client][0];
- LogToFileEx(g_szLogFile, "[SurfTimer] %s: Finished db_viewPersonalRecords in %fs", g_szSteamID[client], tick);
+ LogQueryTime("[SurfTimer] %s: Finished db_viewPersonalRecords in %fs", g_szSteamID[client], tick);
g_fTick[client][0] = GetGameTime();
LoadClientSetting(client, g_iSettingToLoad[client]);
}
@@ -7300,11 +7361,13 @@ public void db_GetTotalStages()
char szQuery[512];
Format(szQuery, 512, "SELECT COUNT(`zonetype`) AS stages FROM `ck_zones` WHERE `zonetype` = '3' AND `mapname` = '%s'", g_szMapName);
- SQL_TQuery(g_hDb, db_GetTotalStagesCallback, szQuery, _, DBPrio_Low);
+ SQL_TQuery(g_hDb, db_GetTotalStagesCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-public void db_GetTotalStagesCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void db_GetTotalStagesCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished db_GetTotalStagesCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (db_GetTotalStagesCallback): %s ", error);
@@ -7385,7 +7448,7 @@ public void sql_viewWrcpMapCallback(Handle owner, Handle hndl, const char[] erro
/*// Find out how many times are are faster than the players time
char szQuery[512];
Format(szQuery, 512, "", g_szMapName, g_CurrentStage[data], stagetime);
- SQL_TQuery(g_hDb, SQL_UpdateRecordProCallback2, szQuery, client, DBPrio_Low);*/
+ SQL_TQuery(g_hDb, sql_viewWrcpMapCallback, szQuery, client, DBPrio_Low);*/
}
}
}
@@ -7534,11 +7597,13 @@ public void db_viewStageRecords()
{
char szQuery[512];
Format(szQuery, 512, "SELECT cp1.name, cp1.runtimepro, cp1.stage, cp1.style, cp1.velStartXY, cp1.velStartXYZ, cp1.velstartZ FROM ck_wrcps cp1 JOIN ( SELECT MIN(runtimepro) AS min_runtime, stage, style, mapname FROM ck_wrcps GROUP BY stage, mapname, style ) AS cp2 ON cp1.stage = cp2.stage AND cp1.runtimepro = cp2.min_runtime AND cp1.mapname=cp2.mapname AND cp1.style=cp2.style WHERE cp1.mapname='%s'", g_szMapName);
- SQL_TQuery(g_hDb, sql_viewStageRecordsCallback, szQuery, 0, DBPrio_Low);
+ SQL_TQuery(g_hDb, sql_viewStageRecordsCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-public void sql_viewStageRecordsCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void sql_viewStageRecordsCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished sql_viewStageRecordsCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (sql_viewStageRecordsCallback): %s", error);
@@ -7628,11 +7693,13 @@ public void db_viewTotalStageRecords()
{
char szQuery[512];
Format(szQuery, 512, "SELECT stage, style, count(1) FROM ck_wrcps WHERE mapname = '%s' GROUP BY stage, style;", g_szMapName);
- SQL_TQuery(g_hDb, sql_viewTotalStageRecordsCallback, szQuery, 0, DBPrio_Low);
+ SQL_TQuery(g_hDb, sql_viewTotalStageRecordsCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-public void sql_viewTotalStageRecordsCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void sql_viewTotalStageRecordsCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished sql_viewTotalStageRecordsCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (sql_viewTotalStageRecordsCallback): %s", error);
@@ -7948,7 +8015,10 @@ public void db_selectStyleMapTopSurfers(int client, char mapname[128], int style
// Styles for bonuses
public void db_insertBonusStyle(int client, char szSteamId[32], char szUName[128], float FinalTime, int zoneGrp, int style)
-{
+{
+ if (g_bPracticeMode[client])
+ return;
+
char szQuery[1024];
char szName[MAX_NAME_LENGTH * 2 + 1];
SQL_EscapeString(g_hDb, szUName, szName, MAX_NAME_LENGTH * 2 + 1);
@@ -8031,7 +8101,10 @@ public void db_viewMapRankBonusStyleCallback(Handle owner, Handle hndl, const ch
}
public void db_updateBonusStyle(int client, char szSteamId[32], char szUName[128], float FinalTime, int zoneGrp, int style)
-{
+{
+ if (g_bPracticeMode[client])
+ return;
+
char szQuery[1024];
char szName[MAX_NAME_LENGTH * 2 + 1];
Handle datapack = CreateDataPack();
@@ -9204,7 +9277,7 @@ public void db_selectMapImprovementCallback(Handle owner, Handle hndl, const cha
if (type == 0)
{
Menu mi = CreateMenu(MapImprovementMenuHandler);
- SetMenuTitle(mi, "[Point Reward: %s]\n------------------------------\nTier: %i\n \n[Completion Points]\n \nMap Finish Points: %i\n \n[Map Improvement Groups]\n \n[Group 1] Ranks 11-%i ~ %i Pts\n[Group 2] Ranks %i-%i ~ %i Pts\n[Group 3] Ranks %i-%i ~ %i Pts\n[Group 4] Ranks %i-%i ~ %i Pts\n[Group 5] Ranks %i-%i ~ %i Pts\n \nSR Pts: %i\n \nTotal Completions: %i\n \n",szMapName, tier, mapcompletion, g1top, RoundFloat(g1points), g2bot, g2top, RoundFloat(g2points), g3bot, g3top, RoundFloat(g3points), g4bot, g4top, RoundFloat(g4points), g5bot, g5top, RoundFloat(g5points), iwrpoints, totalplayers);
+ SetMenuTitle(mi, "[Point Reward: %s]\n------------------------------\nTier: %i\n \nMapper: %s\n \n[Completion Points]\n \nMap Finish Points: %i\n \n[Map Improvement Groups]\n \n[Group 1] Ranks 11-%i ~ %i Pts\n[Group 2] Ranks %i-%i ~ %i Pts\n[Group 3] Ranks %i-%i ~ %i Pts\n[Group 4] Ranks %i-%i ~ %i Pts\n[Group 5] Ranks %i-%i ~ %i Pts\n \nSR Pts: %i\n \nTotal Completions: %i\n \n",szMapName, tier, mapcompletion, g1top, RoundFloat(g1points), g2bot, g2top, RoundFloat(g2points), g3bot, g3top, RoundFloat(g3points), g4bot, g4top, RoundFloat(g4points), g5bot, g5top, RoundFloat(g5points), iwrpoints, totalplayers);
// AddMenuItem(mi, "", "", ITEMDRAW_SPACER);
AddMenuItem(mi, szMapName, "Top 10 Points");
SetMenuOptionFlags(mi, MENUFLAG_BUTTON_EXIT);
@@ -9259,11 +9332,13 @@ public void db_selectCurrentMapImprovement()
{
char szQuery[1024];
Format(szQuery, 1024, "SELECT mapname, (SELECT count(1) FROM ck_playertimes b WHERE a.mapname = b.mapname AND b.style = 0) as total FROM ck_playertimes a where mapname = '%s' AND style = 0 LIMIT 0, 1;", g_szMapName);
- SQL_TQuery(g_hDb, db_selectMapCurrentImprovementCallback, szQuery, _, DBPrio_Low);
+ SQL_TQuery(g_hDb, db_selectMapCurrentImprovementCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-public void db_selectMapCurrentImprovementCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void db_selectMapCurrentImprovementCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished db_selectMapCurrentImprovementCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[SurfTimer] SQL Error (db_selectMapCurrentImprovementCallback): %s", error);
@@ -9824,7 +9899,7 @@ public void SQL_CheckVIPAdminCallback(Handle owner, Handle hndl, const char[] er
{
g_fTick[client][1] = GetGameTime();
float tick = g_fTick[client][1] - g_fTick[client][0];
- LogToFileEx(g_szLogFile, "[SurfTimer] %s: Finished db_CheckVIPAdmin in %fs", g_szSteamID[client], tick);
+ LogQueryTime("[SurfTimer] %s: Finished db_CheckVIPAdmin in %fs", g_szSteamID[client], tick);
g_fTick[client][0] = GetGameTime();
@@ -10174,7 +10249,7 @@ public void SQL_viewCustomTitlesCallback(Handle owner, Handle hndl, const char[]
{
g_fTick[client][1] = GetGameTime();
float tick = g_fTick[client][1] - g_fTick[client][0];
- LogToFileEx(g_szLogFile, "[SurfTimer] %s: Finished db_viewCustomTitles in %fs", g_szSteamID[client], tick);
+ LogQueryTime("[SurfTimer] %s: Finished db_viewCustomTitles in %fs", g_szSteamID[client], tick);
g_fTick[client][0] = GetGameTime();
LoadClientSetting(client, g_iSettingToLoad[client]);
@@ -10325,11 +10400,13 @@ public void db_selectAnnouncements()
char szEscServerName[128];
SQL_EscapeString(g_hDb, g_sServerName, szEscServerName, sizeof(szEscServerName));
Format(szQuery, 1024, "SELECT `id` FROM `ck_announcements` WHERE `server` != '%s' AND `id` > %d", szEscServerName, g_iLastID);
- SQL_TQuery(g_hDb, SQL_SelectAnnouncementsCallback, szQuery, 1, DBPrio_Low);
+ SQL_TQuery(g_hDb, SQL_SelectAnnouncementsCallback, szQuery, GetGameTime(), DBPrio_Low);
}
-public void SQL_SelectAnnouncementsCallback(Handle owner, Handle hndl, const char[] error, any data)
+public void SQL_SelectAnnouncementsCallback(Handle owner, Handle hndl, const char[] error, float time)
{
+ LogQueryTime("[SurfTimer] : Finished SQL_SelectAnnouncementsCallback in: %f", GetGameTime() - time);
+
if (hndl == null)
{
LogError("[surftimer] SQL Error (SQL_SelectAnnouncementsCallback): %s", error);
@@ -10362,7 +10439,7 @@ public void db_insertAnnouncement(char szName[128], char szMapName[128], int szM
char szEscServerName[128];
SQL_EscapeString(g_hDb, g_sServerName, szEscServerName, sizeof(szEscServerName));
Format(szQuery, 512, "INSERT INTO `ck_announcements` (`server`, `name`, `mapname`, `mode`, `time`, `group`) VALUES ('%s', '%s', '%s', '%i', '%s', '%i');", szEscServerName, szName, szMapName, szMode, szTime, szGroup);
- SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, 1, DBPrio_Low);
+ SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery, _, DBPrio_Low);
}
public void db_checkAnnouncements()
@@ -12504,7 +12581,7 @@ public void DisplayCCPMenu(int client, float map_time, float record_time, int ma
AddMenuItem(ccp_menu, "", szItem, ITEMDRAW_DEFAULT);
//MENU TITLE
- SetMenuTitle(ccp_menu, "%s CCP Times for Rank %i\nTime: %s (+%s)\n \n", szMapName, map_rank, szMapTimeFormatted, szMapTimeDiffFormatted)
+ SetMenuTitle(ccp_menu, "%s CCP Times for Rank %i\nTime: %s (+%s)\n \n", szMapName, map_rank, szMapTimeFormatted, szMapTimeDiffFormatted);
SetMenuPagination(ccp_menu, 3);
DisplayMenu(ccp_menu, client, MENU_TIME_FOREVER);
diff --git a/addons/sourcemod/scripting/surftimer/surfzones.sp b/addons/sourcemod/scripting/surftimer/surfzones.sp
index ad8aaac4d..61d037b20 100644
--- a/addons/sourcemod/scripting/surftimer/surfzones.sp
+++ b/addons/sourcemod/scripting/surftimer/surfzones.sp
@@ -411,6 +411,15 @@ public void StartTouch(int client, int action[3])
g_bInJump[client] = false;
g_bInDuck[client] = false;
+ if (g_bPracticeMode[client])
+ {
+ g_bPracticeModeRun[client] = true;
+ }
+ else
+ {
+ g_bPracticeModeRun[client] = false;
+ }
+
// fluffys wrcps
if (g_bhasStages)
{
diff --git a/addons/sourcemod/translations/surftimer.phrases.txt b/addons/sourcemod/translations/surftimer.phrases.txt
index 46233c758..63ade384e 100644
--- a/addons/sourcemod/translations/surftimer.phrases.txt
+++ b/addons/sourcemod/translations/surftimer.phrases.txt
@@ -1014,6 +1014,26 @@
"#format" "{1:s}"
"en" "{1} Usage: sm_addmaptier "
}
+ "NoTierEntry"
+ {
+ "#format" "{1:s}"
+ "en" "{1} Tier entry not found. Use sm_addmaptier to add a tier first."
+ }
+ "UpdateMapperName"
+ {
+ "#format" "{1:s},{2:s}"
+ "en" "{1} Mapper name already exists, updating to: {2}"
+ }
+ "InsertMapperName"
+ {
+ "#format" "{1:s},{2:s}"
+ "en" "{1} Setting mapper name to: {2}"
+ }
+ "MapperNameUsage"
+ {
+ "#format" "{1:s}"
+ "en" "{1} Usage: sm_addmappername "
+ }
"Admin6"
{
"#format" "{1:s}"
diff --git a/scripts/mysql-files/fresh_install.sql b/scripts/mysql-files/fresh_install.sql
index 4dc5eef30..d0fa863b2 100644
--- a/scripts/mysql-files/fresh_install.sql
+++ b/scripts/mysql-files/fresh_install.sql
@@ -4,7 +4,7 @@ USE surftimer;
CREATE TABLE IF NOT EXISTS ck_announcements (
`id` int(11) NOT NULL AUTO_INCREMENT,
`server` varchar(256) NOT NULL DEFAULT 'Beginner',
- `name` varchar(32) NOT NULL,
+ `name` varchar(64) NOT NULL,
`mapname` varchar(128) NOT NULL,
`mode` int(11) NOT NULL DEFAULT '0',
`time` varchar(32) NOT NULL,
@@ -15,7 +15,7 @@ CREATE TABLE IF NOT EXISTS ck_announcements (
CREATE TABLE IF NOT EXISTS ck_bonus (
`steamid` VARCHAR(32),
- `name` VARCHAR(32),
+ `name` VARCHAR(64),
`mapname` VARCHAR(32),
`runtime` decimal(12,6) NOT NULL DEFAULT '-1.000000',
`velStartXY` SMALLINT(6) NOT NULL DEFAULT 0,
@@ -43,7 +43,7 @@ CREATE TABLE IF NOT EXISTS ck_checkpoints (
CREATE TABLE IF NOT EXISTS ck_latestrecords (
`steamid` VARCHAR(32),
- `name` VARCHAR(32),
+ `name` VARCHAR(64),
`runtime` decimal(12,6) NOT NULL DEFAULT '-1.000000',
`map` VARCHAR(32),
`date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
@@ -103,7 +103,7 @@ CREATE TABLE IF NOT EXISTS ck_playeroptions2 (
CREATE TABLE IF NOT EXISTS ck_playerrank (
`steamid` varchar(32) NOT NULL DEFAULT '',
`steamid64` varchar(64) DEFAULT NULL,
- `name` varchar(32) DEFAULT NULL,
+ `name` varchar(64) DEFAULT NULL,
`country` varchar(32) DEFAULT NULL,
`countryCode` varchar(3) DEFAULT NULL,
`continentCode` varchar(3) DEFAULT NULL,
@@ -153,7 +153,7 @@ CREATE TABLE IF NOT EXISTS ck_playertemp (
CREATE TABLE IF NOT EXISTS ck_playertimes (
`steamid` VARCHAR(32),
`mapname` VARCHAR(32),
- `name` VARCHAR(32),
+ `name` VARCHAR(64),
`runtimepro` decimal(12,6) NOT NULL DEFAULT '-1.000000',
`velStartXY` SMALLINT(6) NOT NULL DEFAULT 0,
`velStartXYZ` SMALLINT(6) NOT NULL DEFAULT 0,
@@ -200,7 +200,7 @@ CREATE TABLE IF NOT EXISTS ck_vipadmins (
CREATE TABLE IF NOT EXISTS ck_wrcps (
`steamid` varchar(32) NOT NULL DEFAULT '',
- `name` varchar(32) DEFAULT NULL,
+ `name` varchar(64) DEFAULT NULL,
`mapname` varchar(32) NOT NULL DEFAULT '',
`runtimepro` decimal(12,6) NOT NULL DEFAULT '-1.000000',
`velStartXY` smallint(6) NOT NULL DEFAULT 0,
@@ -238,7 +238,7 @@ CREATE TABLE IF NOT EXISTS ck_zones (
CREATE TABLE IF NOT EXISTS ck_prinfo (
`steamid` VARCHAR(32),
- `name` VARCHAR(32),
+ `name` VARCHAR(64),
`mapname` VARCHAR(32),
`runtime` decimal(12,6) NOT NULL DEFAULT '-1.000000',
`zonegroup` INT(12) NOT NULL DEFAULT '0',
diff --git a/scripts/mysql-files/mappernames.sql b/scripts/mysql-files/mappernames.sql
new file mode 100644
index 000000000..8e7e7f63f
--- /dev/null
+++ b/scripts/mysql-files/mappernames.sql
@@ -0,0 +1,1410 @@
+CREATE TABLE `ck_maptiermappers` (
+ `mapname` varchar(54) NOT NULL,
+ `tier` int(12) NOT NULL,
+ `maxvelocity` float NOT NULL DEFAULT '9999',
+ `announcerecord` int(11) NOT NULL DEFAULT '0',
+ `gravityfix` int(11) NOT NULL DEFAULT '1',
+ `ranked` int(11) NOT NULL DEFAULT '1',
+ `mapper` varchar(255) DEFAULT NULL,
+) DEFAULT CHARSET=utf8mb4;
+
+INSERT INTO `ck_maptiermappers` (`mapname`, `tier`, `maxvelocity`, `announcerecord`, `gravityfix`, `ranked`, `mapper`) VALUES
+('surf_004_fix', 3, 3500, 1, 1, 1, 'MonkeyWithAGun'),
+('surf_1234', 2, 3500, 1, 1, 1, 'Laxen'),
+('surf_1dang', 2, 3500, 1, 1, 1, 'Who?'),
+('surf_1day', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_1try', 3, 3500, 1, 1, 1, 'Jnnhfelix'),
+('surf_2012_beta12', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_25_lighters', 5, 3500, 1, 1, 1, 'Big Blue'),
+('surf_29palms', 3, 3500, 1, 1, 1, 'SkariZ^'),
+('surf_2pacisalive', 2, 3500, 1, 1, 1, 'Umg_'),
+('surf_3', 3, 3500, 1, 1, 1, 'Umg_'),
+('surf_4dimensional', 4, 3500, 1, 1, 1, 'Streebree'),
+('surf_4head_csgo', 2, 3500, 1, 1, 1, 'sjom7e'),
+('surf_4steps', 3, 3500, 1, 1, 1, 'Kaneejn'),
+('surf_6', 3, 3500, 1, 1, 1, 'Essence'),
+('surf_666', 6, 3500, 1, 1, 1, 'Collab'),
+('surf_81st_network_njv', 3, 3500, 1, 1, 1, 'Ryan Sterner '),
+('surf_8bit', 2, 3500, 1, 1, 1, 'TaiiKii'),
+('surf_a', 3, 3500, 1, 1, 1, 'Umg_'),
+('surf_aaaa_reloaded', 3, 3500, 1, 1, 1, 'silverlol'),
+('surf_aatsika', 3, 3500, 1, 1, 1, 'MOKKAMASTER'),
+('surf_abstinens', 3, 3500, 1, 1, 1, 'Umg_'),
+('surf_abstract_final', 3, 3500, 1, 1, 1, 'a-ha!'),
+('surf_abyss_fix', 4, 3500, 1, 1, 1, 'Ninjaplz'),
+('surf_acedia', 5, 3500, 1, 1, 1, 'Seynethic'),
+('surf_acerbus', 6, 3500, 1, 1, 1, 'RazerSurf'),
+('surf_acp_fix', 3, 3500, 1, 1, 1, 'Panzer'),
+('surf_activation', 2, 10000, 1, 1, 1, 'iNooVa & biji'),
+('surf_adrs', 2, 3500, 1, 1, 1, 'mr.aNa'),
+('surf_adtr_njv', 3, 3500, 1, 1, 1, 'Ch!llers'),
+('surf_advanced', 3, 3500, 1, 1, 1, 'b0at'),
+('surf_adventure_easy', 4, 3500, 1, 1, 1, 'Gorange Ninja'),
+('surf_adventure_final', 4, 3500, 1, 1, 1, 'Gorange Ninja'),
+('surf_aeron', 2, 3500, 1, 1, 1, 'Ins'),
+('surf_aether_csgo', 2, 3500, 1, 1, 1, 'Scaz.zaf'),
+('surf_again_njv', 5, 3500, 1, 1, 1, 'Ch1!!3r'),
+('surf_ag_texture_final', 2, 3500, 1, 1, 1, 'SmOoth'),
+('surf_aircontrol_dark', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_aircontrol_ksf', 1, 3500, 1, 1, 1, 'SnoopSh'),
+('surf_airflow', 4, 3500, 1, 1, 1, 'Enjooi'),
+('surf_akai_f1n4l', 2, 3500, 1, 1, 1, 'akai'),
+('surf_akai_final_fix', 1, 3500, 1, 1, 1, 'akai'),
+('surf_alend', 4, 3500, 1, 1, 1, 'Ranth'),
+('surf_alpha', 6, 3500, 1, 1, 1, 'Gorange Ninja'),
+('surf_alpine', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_alternation', 3, 3500, 1, 1, 1, 'Ownd & Skyppy'),
+('surf_amantiss_csgo', 4, 3500, 1, 1, 1, 'Mallow'),
+('surf_amaranthine', 2, 3500, 1, 1, 1, 'Kuiq'),
+('surf_amaro_fix', 6, 3500, 1, 1, 1, 'Flaudgin'),
+('surf_amateur_v2b', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_ambient_fixed', 4, 3500, 1, 1, 1, 'Pimp Juice & Razer'),
+('surf_ameliorate', 1, 3500, 1, 1, 1, 'granis'),
+('surf_amir', 2, 3500, 1, 1, 1, 'Koga73'),
+('surf_amplitude_encore', 3, 3500, 1, 1, 1, 'Buck Nasty'),
+('surf_amplitude_encore_nsf_v4', 3, 5000, 1, 1, 1, 'Buck Nasty'),
+('surf_amplitude_light', 2, 10000, 1, 1, 1, 'Buck Nasty'),
+('surf_ancient', 3, 3500, 1, 1, 1, 'The_Ancient_One'),
+('surf_android', 5, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_andromeda', 1, 4500, 1, 1, 1, 'Syncronyze'),
+('surf_and_destroy_fix', 1, 3500, 1, 1, 1, 'ZaLoS'),
+('surf_angst_go', 4, 3500, 1, 1, 1, 'Proxychains'),
+('surf_animals', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_animekoreanclgpeople', 2, 3500, 1, 1, 1, 'I_ken'),
+('surf_annoyance_njv', 2, 3500, 1, 1, 1, 'svbg869'),
+('surf_anoname', 5, 3500, 1, 1, 1, 'N/A'),
+('surf_anonymity', 2, 3500, 1, 1, 1, 'Hiphopopotomus'),
+('surf_anthropomorphic', 4, 3500, 1, 1, 1, 'Furchee'),
+('surf_antimatter', 4, 3500, 1, 1, 1, 'Horsefeathers'),
+('surf_antimatter_v2', 5, 3500, 1, 1, 1, 'Horsefeathers'),
+('surf_antivero', 2, 3500, 1, 1, 1, 'Alice'),
+('surf_anubis', 7, 3500, 1, 1, 1, 'Sneakyyy'),
+('surf_anything', 3, 3500, 1, 1, 1, 'Phurix'),
+('surf_anzchamps', 2, 3500, 1, 1, 1, 'Hardex'),
+('surf_ape3', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_aphelion', 5, 3500, 1, 1, 1, 'Housegamer'),
+('surf_apollo', 1, 10000, 1, 1, 1, 'ApeXe'),
+('surf_apollonian', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_aquaflow', 2, 3500, 1, 1, 1, 'NvC_DmN_CH'),
+('surf_aqua_fix', 2, 3500, 1, 1, 1, 'xRyanNitro'),
+('surf_arcade', 2, 3500, 1, 1, 1, 'maz'),
+('surf_ardon_fix', 2, 3500, 1, 1, 1, 'FPS God'),
+('surf_arghmyeyes', 4, 3500, 1, 1, 1, 't3tra'),
+('surf_arghmyeyes_retexture', 4, 3500, 1, 1, 1, 't3tra'),
+('surf_artifex', 4, 3500, 1, 1, 1, 'Billy'),
+('surf_artois', 1, 3500, 1, 1, 1, 'ApeXe'),
+('surf_aser', 1, 10000, 1, 1, 1, 'TruMatrix'),
+('surf_ashpalt', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_aspiration', 5, 3500, 1, 1, 1, 'Cthulu'),
+('surf_asrown', 3, 3500, 1, 1, 1, 'Escencia'),
+('surf_astray', 1, 3500, 1, 1, 1, 'comrade teammate'),
+('surf_ataque_final', 4, 3500, 1, 1, 1, 'Junior, G-Flow, Ryan_S'),
+('surf_atlantis', 4, 3500, 1, 1, 1, 'Gorange Ninja'),
+('surf_atlas_1', 2, 3500, 1, 1, 1, 'Val'),
+('surf_atrium', 2, 3500, 1, 1, 1, 'ArcticPanda'),
+('surf_at_the_limit_fixed', 3, 3500, 1, 1, 1, 'Gladeare'),
+('surf_aura', 1, 3500, 1, 1, 1, 'ApeXe'),
+('surf_aurantia-grisea', 2, 3500, 1, 1, 1, 'ChiChiN'),
+('surf_auroia_njv', 3, 3500, 1, 1, 1, 'Escencia'),
+('surf_auroria2', 4, 3500, 1, 1, 1, 'Escencia'),
+('surf_autism', 1, 3500, 1, 1, 1, 'Titty Sprinkles'),
+('surf_autism_2', 1, 3500, 1, 1, 1, 'Titty Sprinkles'),
+('surf_aux', 5, 3500, 1, 1, 1, 'twistedVoid'),
+('surf_awakening', 4, 3500, 1, 1, 1, 'Skyppy'),
+('surf_aweles', 1, 3500, 1, 1, 1, 'Mazzo'),
+('surf_aweles_inferno_fix', 2, 3500, 1, 1, 1, 'Koga73'),
+('surf_ax', 4, 3500, 1, 1, 1, 'N/A'),
+('surf_axil', 4, 3500, 1, 1, 1, 'Klemix'),
+('surf_axiom2', 3, 10000, 1, 1, 1, 'krealington'),
+('surf_axiom_fix', 3, 3500, 1, 1, 1, 'iNooVa'),
+('surf_a_lot', 2, 3500, 1, 1, 1, 'Gladeare'),
+('surf_a_tier_one_map', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_a_xblah_reborn', 3, 3500, 1, 1, 1, 'Xblah'),
+('surf_bacalhau', 3, 3500, 1, 1, 1, 'Mastardy-1511 & ImHarker'),
+('surf_bageena', 1, 3500, 1, 1, 1, 'Moonbearthegreat'),
+('surf_banger', 3, 3500, 1, 1, 1, 'not_a_zombie & Joey'),
+('surf_basalt', 1, 3500, 1, 1, 1, 'Veggissss'),
+('surf_basic', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_bbb', 3, 3500, 1, 1, 1, 'Aux'),
+('surf_before', 5, 3500, 1, 1, 1, 'Hardex'),
+('surf_beginner', 1, 3500, 1, 1, 1, 'Kiiru'),
+('surf_beginner2', 2, 3500, 1, 1, 1, 'Kiiru'),
+('surf_beginner_h', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_beginner_hell_ksf', 4, 3500, 1, 1, 1, 'dotone'),
+('surf_beginner_lin', 1, 3500, 1, 1, 1, 'Frumpy7'),
+('surf_beginner_ug', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_believe_refix', 2, 3500, 1, 1, 1, 'OO SII'),
+('surf_benevolent', 2, 3500, 1, 1, 1, 'Syncronyze'),
+('surf_bepis', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_beverages', 3, 3500, 1, 1, 1, 'Sid'),
+('surf_beverages_remix_go', 2, 3500, 1, 1, 1, 'Sid'),
+('surf_bewatermyfriend', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_beyer', 4, 3500, 1, 1, 1, 'Juxtapo'),
+('surf_beyer2', 4, 3500, 1, 1, 1, 'Juxtapo'),
+('surf_beyond', 1, 3500, 1, 1, 1, 'granis & bro'),
+('surf_be_gentle', 4, 3500, 1, 1, 1, 'Krealington'),
+('surf_bigred_thing', 2, 3500, 1, 1, 1, 'Gibbay'),
+('surf_biohazards', 2, 3500, 1, 1, 1, 'Kinder'),
+('surf_blackandgold', 1, 3500, 1, 1, 1, 'Rated'),
+('surf_blackheart', 7, 3500, 1, 1, 1, 'otter'),
+('surf_blackout_v1', 3, 3500, 1, 1, 1, 'God Damnit Nappa'),
+('surf_blackside_njv', 4, 3500, 1, 1, 1, 'Pupsik'),
+('surf_bland', 4, 3500, 1, 1, 1, 'blandon'),
+('surf_blub_njv', 5, 3500, 1, 1, 1, 'Chayma'),
+('surf_blue', 2, 3500, 1, 1, 1, 'blueiv'),
+('surf_bluesky_beta', 2, 3500, 1, 1, 1, 'Gorange_Ninja'),
+('surf_bluewall', 2, 3500, 1, 1, 1, 'Biji'),
+('surf_bluewinter_final', 4, 3500, 1, 1, 1, 'iamsupaman'),
+('surf_blurry_fix', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_blyad', 1, 3500, 1, 1, 1, ' Nimbus'),
+('surf_boatastic', 3, 3500, 1, 1, 1, 'Pattermayn'),
+('surf_bob', 3, 3500, 1, 1, 1, 'ptad'),
+('surf_boboken', 3, 3500, 1, 1, 1, 'Storzenbecher'),
+('surf_bombix_v2', 2, 3500, 1, 1, 1, 'boomix'),
+('surf_boneless_beta', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_boner', 2, 3500, 1, 1, 1, 'BonerForest'),
+('surf_bonk', 4, 3500, 1, 1, 1, 'N/A'),
+('surf_bonkers_v2', 2, 3500, 1, 1, 1, 'The Frying Dutch Pan'),
+('surf_bonus', 5, 3500, 1, 1, 1, 'Gorange_Ninja'),
+('surf_borderlands', 1, 3500, 1, 1, 1, 'Wall-E'),
+('surf_borderlands_h', 3, 3500, 1, 1, 1, 'wiuuuh'),
+('surf_boreas', 1, 3500, 1, 1, 1, 'Syncronyze'),
+('surf_boring', 2, 3500, 1, 1, 1, 'Collab'),
+('surf_bork_nbv', 3, 3500, 1, 1, 1, 'Rambjoe & Kiiru'),
+('surf_botisses', 2, 3500, 1, 1, 1, 'Schranz'),
+('surf_boy_fixed', 1, 3500, 1, 1, 1, 'SkariZ'),
+('surf_braininvasion', 2, 3500, 1, 1, 1, 'Kiiru & OwndD'),
+('surf_brake1000', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_bricks', 3, 3500, 1, 1, 1, ' Rock'),
+('surf_brickwood', 3, 3500, 1, 1, 1, 'ciaHo'),
+('surf_brodderlands', 4, 3500, 1, 1, 1, 'Flow, Proxychains, TheFur'),
+('surf_broken', 3, 3500, 1, 1, 1, 'b0at'),
+('surf_brutalist', 5, 3500, 1, 1, 1, 'Hardex'),
+('surf_brutalist_ez', 3, 3500, 1, 1, 1, 'Hardex'),
+('surf_buffer', 1, 3500, 1, 1, 1, 'Buffer'),
+('surf_bullet_csgo', 6, 3500, 1, 1, 1, 'Collab'),
+('surf_bumpybusride', 3, 3500, 1, 1, 1, 'Hardex'),
+('surf_burga_alpha1', 1, 3500, 1, 1, 1, 'meso420'),
+('surf_b_r_o_x_x_x', 3, 3500, 1, 1, 1, 'AmstaFF & Spider'),
+('surf_caca', 3, 3500, 1, 1, 1, 'Swaaaaag'),
+('surf_caesart', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_caged', 2, 3500, 1, 1, 1, 'zer0tail'),
+('surf_caged_ws', 4, 3500, 1, 1, 1, 'HammY'),
+('surf_calamity2', 4, 3500, 1, 1, 1, 'SacRed'),
+('surf_calamity_njv', 3, 3500, 1, 1, 1, 'SacRed'),
+('surf_calibration', 4, 3500, 1, 1, 1, 'SacRed'),
+('surf_calycate2', 1, 3500, 1, 1, 1, 'ArcticPanda'),
+('surf_calycate_ksf', 1, 3500, 1, 1, 1, 'ArcticPanda'),
+('surf_calzone', 1, 3500, 1, 1, 1, 'sh_bro, Krealington, mr.25'),
+('surf_cancer', 2, 3500, 1, 1, 1, 'James'),
+('surf_candyland', 3, 3500, 1, 1, 1, 'JohnnyBoy'),
+('surf_canisius2', 3, 3500, 1, 1, 1, 'Billy'),
+('surf_canisius2_fix', 3, 3500, 1, 1, 1, 'Billy'),
+('surf_cannonball', 4, 5000, 1, 1, 1, 'EICHHOERNCHEN'),
+('surf_carnage', 1, 3500, 1, 1, 1, 'Googee'),
+('surf_cartoon', 3, 3500, 1, 1, 1, 'Gorange-Ninja'),
+('surf_casbah_fix', 2, 3500, 1, 1, 1, 'Comrade Teammate'),
+('surf_castlewalls', 5, 3500, 1, 1, 1, 'Gorange-Ninja'),
+('surf_castle_final', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_cat', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_catalyst', 3, 3500, 1, 1, 1, 'Copy-Mark'),
+('surf_catalyst2', 3, 3500, 1, 1, 1, 'Razer & Billy'),
+('surf_cave', 2, 3500, 1, 1, 1, 'Oatneil'),
+('surf_cavemissile_fix', 2, 5000, 1, 1, 1, 'EICHHOERNCHEN'),
+('surf_cawsmic', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_celestial', 5, 3500, 1, 1, 1, 'Sunday'),
+('surf_cement', 4, 3500, 1, 1, 1, 'N/A'),
+('surf_chaos_refix', 2, 3500, 1, 1, 1, 'LEO'),
+('surf_chasm_go', 4, 3500, 1, 1, 1, 'SID'),
+('surf_chateau_fix', 4, 3500, 1, 1, 1, 'Hesuka'),
+('surf_chill', 1, 3500, 1, 1, 1, 'Dimitri'),
+('surf_christmas2_fix', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_christmas_fix', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_cinnamon_fix', 5, 5000, 1, 1, 1, 'wayne3288'),
+('surf_citadelcbackup', 2, 3500, 1, 1, 1, '09420669'),
+('surf_classics', 2, 3500, 1, 1, 1, 'Panzer'),
+('surf_classics2', 2, 8000, 1, 1, 1, 'Panzer'),
+('surf_classics3', 2, 10000, 1, 1, 1, 'Collab'),
+('surf_clavius', 5, 3500, 1, 1, 1, 'Horsefeathers'),
+('surf_clockwork', 3, 3500, 1, 1, 1, 'Helix'),
+('surf_clujreek', 3, 3500, 1, 1, 1, 'SkariZ^'),
+('surf_coblazt', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_Collab', 4, 3500, 1, 1, 1, 'Grueddi & Chuck Norris'),
+('surf_collection_njv', 4, 3500, 1, 1, 1, 'Pand3mic & Baxter'),
+('surf_colmixv2_aqr', 3, 3500, 1, 1, 1, 'Aqresiv3'),
+('surf_colored_challenge', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_colors2_beta', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_colors_beta1', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_colors_final', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_color_njv', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_colours', 2, 3500, 1, 1, 1, 'Zombiesquatch'),
+('surf_colum', 1, 3500, 1, 1, 1, 'JohnnyOuh'),
+('surf_colum_2', 1, 3500, 1, 1, 1, 'Wiuuuh'),
+('surf_colum_again', 1, 3500, 1, 1, 1, 'Wiuuuh'),
+('surf_colum_up', 1, 3500, 1, 1, 1, 'FörsterPvP'),
+('surf_commune_again_beta5', 3, 3500, 1, 1, 1, 'Unknown'),
+('surf_commune_beta11', 3, 3500, 1, 1, 1, 'Unknown'),
+('surf_commune_too_beta5', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_compact', 4, 3500, 1, 1, 1, 'Billy'),
+('surf_compulsive_h', 3, 3500, 1, 1, 1, 'razEr'),
+('surf_compulsive_njv_fix', 3, 3500, 1, 1, 1, 'RazerSurf'),
+('surf_concept_njv', 3, 3500, 1, 1, 1, 'Grueddi'),
+('surf_concreteideas', 2, 3500, 1, 1, 1, 'SmileyTopin'),
+('surf_concretejungle_fix', 4, 3500, 1, 1, 1, 'PretzL & Hesuka'),
+('surf_concrete_workshop', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_conserve', 5, 3500, 1, 1, 1, 'Wackywallaby'),
+('surf_consistenza_diversa', 4, 3500, 1, 1, 1, 'Wakthor Thorwak'),
+('surf_constrictor_remix', 3, 3500, 1, 1, 1, 'Sid'),
+('surf_construction', 4, 3500, 1, 1, 1, 'CopyMark'),
+('surf_cookiejar', 3, 3500, 1, 1, 1, 'Kiiru'),
+('surf_coralis_ksf', 2, 3500, 1, 1, 1, 'Escencia'),
+('surf_cordelia', 4, 3500, 1, 1, 1, 'RazerSurf'),
+('surf_core_fix', 5, 3500, 1, 1, 1, 'Collab'),
+('surf_corner', 2, 3500, 1, 1, 1, 'Slickytail'),
+('surf_corporal', 1, 3500, 1, 1, 1, 'Yyoda'),
+('surf_corruption', 8, 3500, 1, 1, 1, 'Oli'),
+('surf_cosmic', 3, 3500, 1, 1, 1, 'TheCosmicWolf'),
+('surf_cosmo', 3, 3500, 1, 1, 1, 'Rathe'),
+('surf_cosmo_workshop', 3, 3500, 1, 1, 1, 'Storzenbecher'),
+('surf_cozy', 4, 3500, 1, 1, 1, 'Mr. Cow'),
+('surf_crackdesert_evo2', 3, 3500, 1, 1, 1, 'Housegamer'),
+('surf_crajjie', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_creation', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_crimson', 6, 3500, 1, 1, 1, 'Geoff'),
+('surf_crownroyal', 2, 3500, 1, 1, 1, 'a-ha!'),
+('surf_crush', 5, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_crush2', 6, 3500, 1, 1, 1, 'Xtra'),
+('surf_crystal', 3, 3500, 1, 1, 1, 'Copy-Mark'),
+('surf_crzyfrog_reloaded_fix', 1, 3500, 1, 1, 1, 'JackTheStripper'),
+('surf_cubic', 3, 3500, 1, 1, 1, 'Scaz.zaf'),
+('surf_curan', 1, 3500, 1, 1, 1, 'Zeta'),
+('surf_curious', 4, 3500, 1, 1, 1, 'Lightning'),
+('surf_cyanide_njv', 3, 3500, 1, 1, 1, 'Diealready'),
+('surf_cyberwave_fix', 2, 3500, 1, 1, 1, 'Mr. Cow'),
+('surf_cyka_ksf', 3, 3500, 1, 1, 1, 'Umg_'),
+('surf_damn', 5, 3500, 1, 1, 1, 'Biji'),
+('surf_damnub2', 1, 3500, 1, 1, 1, 'DamNub'),
+('surf_dank', 2, 3500, 1, 1, 1, ':D'),
+('surf_dark_v1', 1, 3500, 1, 1, 1, 'Jackmister'),
+('surf_dawn', 1, 3500, 1, 1, 1, 'Mashau'),
+('surf_deadline', 2, 3500, 1, 1, 1, 'House'),
+('surf_deathstar', 1, 3500, 1, 1, 1, 'Downycat'),
+('surf_death_of_a_martian', 5, 3500, 1, 1, 1, 'Gorange_Ninja'),
+('surf_deceptive_final', 3, 3500, 1, 1, 1, 'razEr'),
+('surf_decked', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_deeper', 2, 3500, 1, 1, 1, 'Sjup'),
+('surf_deeznuts', 1, 3500, 1, 1, 1, 'Trout'),
+('surf_defectum', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_delight_go', 2, 3500, 1, 1, 1, 'Aqresiv3'),
+('surf_delta', 5, 3500, 1, 1, 1, 'Sense & krealington'),
+('surf_delusional', 2, 3500, 1, 1, 1, 'SKAR'),
+('surf_deoa', 1, 3500, 1, 1, 1, 'Deod'),
+('surf_deod_beta', 1, 3500, 1, 1, 1, 'Deod'),
+('surf_deprecation', 3, 3500, 1, 1, 1, 'not_a_zombie'),
+('surf_depressing', 4, 3500, 1, 1, 1, 'Serz'),
+('surf_depths', 4, 3500, 1, 1, 1, 'Streebree'),
+('surf_deroland_neon_final', 3, 3500, 1, 1, 1, 'Baldur'),
+('surf_derpis_h_fix', 4, 3500, 1, 1, 1, 'Diealready'),
+('surf_derpis_ksf', 1, 3500, 1, 1, 1, 'Diealready'),
+('surf_deserted_njv', 3, 3500, 1, 1, 1, '.:PROTOTYPE:.'),
+('surf_desert_final', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_desolate', 4, 3500, 1, 1, 1, 'Juxtapo'),
+('surf_despair_x14', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_destiny_fixed', 3, 3500, 1, 1, 1, 'Codowner'),
+('surf_detroit', 1, 3500, 1, 1, 1, 'Stratus1G'),
+('surf_developer_begginer', 1, 3500, 1, 1, 1, 'Skymaster'),
+('surf_devil', 7, 5000, 1, 1, 1, 'Collab'),
+('surf_dhyana', 4, 3500, 1, 1, 1, '^smiley'),
+('surf_diamond_beta1', 5, 3500, 1, 1, 1, 'Raptor '),
+('surf_diar', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_digital[g]beta_fixed', 1, 3500, 1, 1, 1, 'X-shark'),
+('surf_diminsion', 4, 3500, 1, 1, 1, 'MonkeyWithAGun'),
+('surf_dinwod', 1, 3500, 1, 1, 1, 'Dinwod356'),
+('surf_dionysus', 5, 3500, 1, 1, 1, 'LightninG '),
+('surf_disaster', 6, 3500, 1, 1, 1, 'Mr.25'),
+('surf_discovery_njv', 5, 3500, 1, 1, 1, 'Billy'),
+('surf_disco_extreme', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_disneyland', 5, 3500, 1, 1, 1, 'Collab'),
+('surf_distraction_v2', 3, 3500, 1, 1, 1, 'Sacred'),
+('surf_diverge', 3, 3500, 1, 1, 1, 'Kiiru'),
+('surf_divided_nsf', 4, 3500, 1, 1, 1, 'Skyppy'),
+('surf_dogs', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_domain', 2, 3500, 1, 1, 1, 'Sid'),
+('surf_doodles_njv', 3, 3500, 1, 1, 1, 'Doodles'),
+('surf_dova', 5, 3500, 1, 1, 1, 'Hork'),
+('surf_dragon', 2, 3500, 1, 1, 1, 'yoghurt'),
+('surf_drain', 4, 3500, 1, 1, 1, 'Jaden'),
+('surf_dread', 3, 3500, 1, 1, 1, 'Mr. Mackey'),
+('surf_dream', 1, 3500, 1, 1, 1, 'Mumble98'),
+('surf_dreams', 4, 3500, 1, 1, 1, 'Shynex/Vay'),
+('surf_drifting_go', 4, 10000, 1, 1, 1, 'murglegurgle'),
+('surf_driftless_go', 3, 3500, 1, 1, 1, 'murglegurgle'),
+('surf_drift_go', 5, 5000, 1, 1, 1, 'murglegurgle'),
+('surf_drugs_csgo', 3, 3500, 1, 1, 1, 'Bonjorno7'),
+('surf_duggywuggy', 2, 3500, 1, 1, 1, 'Douglas Rattman'),
+('surf_dusk', 3, 3500, 1, 1, 1, 'Mr. Cow'),
+('surf_dynamics_fixed', 5, 3500, 1, 1, 1, 'Blaine'),
+('surf_dynasty', 2, 3500, 1, 1, 1, 'Scaz.zaf'),
+('surf_easier_than_easy', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_easiest_map_ever', 1, 3500, 1, 1, 1, 'Phatboyjawsh'),
+('surf_easy', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_easy1', 1, 3500, 1, 1, 1, 'KristiánP'),
+('surf_easy2', 1, 3500, 1, 1, 1, 'KristiánP'),
+('surf_easymap', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_ebob4', 1, 3500, 1, 1, 1, 'Zhelle & Bombu1V9'),
+('surf_ebony', 3, 3500, 1, 1, 1, 'Big Sid'),
+('surf_eclipse_fix', 2, 3500, 1, 1, 1, 'Paper-Cut'),
+('surf_ecosystem', 3, 3500, 1, 1, 1, 'Silverlol'),
+('surf_edge', 5, 3500, 1, 1, 1, 'fr3shz'),
+('surf_efficacy_rg', 4, 3500, 1, 1, 1, 'MvRouC12'),
+('surf_eggplant', 2, 3500, 1, 1, 1, 'HammY'),
+('surf_egypt2', 1, 3500, 1, 1, 1, 'Mariowned'),
+('surf_egypt_csgo', 1, 3500, 1, 1, 1, 'Umg_'),
+('surf_eldritch', 2, 3500, 1, 1, 1, 'a-ha!'),
+('surf_elements_beta3_fix', 3, 3500, 1, 1, 1, 'Ryan S'),
+('surf_elites_v2', 2, 3500, 1, 1, 1, 'Svbg869'),
+('surf_elites_v2_fix', 1, 3500, 1, 1, 1, 'Svbg869'),
+('surf_elsurfo', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_elysium', 5, 3500, 1, 1, 1, 'Sacred'),
+('surf_elysium2', 5, 3500, 1, 1, 1, 'Sacred'),
+('surf_elysium3', 5, 3500, 1, 1, 1, 'Sacred'),
+('surf_elysium4', 5, 4000, 1, 1, 1, 'Sacred'),
+('surf_ember2', 4, 3500, 1, 1, 1, 'Hardex'),
+('surf_ember_sns', 3, 3500, 1, 1, 1, 'SKAR'),
+('surf_embrace', 6, 3500, 1, 1, 1, 'maz64'),
+('surf_endurci', 3, 3500, 1, 1, 1, 'Oui'),
+('surf_enlightened', 1, 3500, 1, 1, 1, 'Benchmarked'),
+('surf_entropy_finalv2', 4, 3500, 1, 1, 1, 'Gorgeous Gentleman'),
+('surf_entropy_hardmode', 5, 3500, 1, 1, 1, 'Gorgeous Gentleman'),
+('surf_eon', 5, 3500, 1, 1, 1, 'Sense'),
+('surf_epic', 3, 3500, 1, 1, 1, 'Compact'),
+('surf_epicube_ksf', 3, 3500, 1, 1, 1, 'Rippey'),
+('surf_epiphany', 6, 3500, 1, 1, 1, 'krealington'),
+('surf_epithet', 3, 3500, 1, 1, 1, 'BlueRaven'),
+('surf_eryr', 4, 3500, 1, 1, 1, 'RNC1839'),
+('surf_eryr2', 5, 3500, 1, 1, 1, 'RNC1839'),
+('surf_escape_final', 1, 3500, 1, 1, 1, 'HammY'),
+('surf_essentia', 6, 3500, 1, 1, 1, 'TopHATTwaffle'),
+('surf_eternal_beta', 4, 3500, 1, 1, 1, 'Panzer'),
+('surf_ethereal', 2, 3500, 1, 1, 1, 'Collab'),
+('surf_eunoia', 3, 3500, 1, 1, 1, 'krealington'),
+('surf_euphoria', 5, 3500, 1, 1, 1, 'Billy'),
+('surf_eventide', 1, 3500, 1, 1, 1, 'Mariowned'),
+('surf_exclave', 4, 3500, 1, 1, 1, 'Malt'),
+('surf_execute', 3, 3500, 1, 1, 1, 'Vivio'),
+('surf_exile_njv', 6, 3500, 1, 1, 1, 'Pyanih Ezhik'),
+('surf_exland', 3, 3500, 1, 1, 1, 'Bontar0'),
+('surf_exocube', 2, 3500, 1, 1, 1, 'Pyanih Ezhik'),
+('surf_exocube_e', 2, 3500, 1, 1, 1, 'Pyanih Ezhik'),
+('surf_exocube_h', 5, 3500, 1, 1, 1, 'Pyanih Ezhik'),
+('surf_exogenesis', 3, 3500, 1, 1, 1, 'Pyanih Ezhik'),
+('surf_exonic', 7, 3500, 1, 1, 1, 'Roz'),
+('surf_explorer', 4, 3500, 1, 1, 1, 'Noobre'),
+('surf_extremex', 3, 3500, 1, 1, 1, 'Tioga060'),
+('surf_extremex2_5_njv', 5, 3500, 1, 1, 1, 'Tioga060'),
+('surf_extrodinaire', 2, 3500, 1, 1, 1, 'Hiphopopotomus'),
+('surf_exurbia_v2', 2, 3500, 1, 1, 1, 'ArcticPanda'),
+('surf_exxak', 3, 3500, 1, 1, 1, 'Nemix'),
+('surf_exxe', 4, 3500, 1, 1, 1, 'Exxelence'),
+('surf_ez', 2, 3500, 1, 1, 1, 'Entonic'),
+('surf_ez3', 3, 3500, 1, 1, 1, 'Waj'),
+('surf_ezclap', 3, 3500, 1, 1, 1, 'Sjom7e'),
+('surf_ezpz_fifiedition', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_ezpz_GFL', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_ezpz_syntax', 1, 3500, 1, 1, 1, 'lmaosyntax'),
+('surf_ezsurf', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_ez_surf_2', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_fabas', 4, 3500, 1, 1, 1, 'MaKo & Roxy'),
+('surf_faceless', 2, 3500, 1, 1, 1, 'DownyCat'),
+('surf_facility', 4, 3500, 1, 1, 1, 'krealington'),
+('surf_fade', 2, 3500, 1, 1, 1, 'FriendlyChemist'),
+('surf_faint_fix', 3, 3500, 1, 1, 1, 'Kippe'),
+('surf_fantasy', 3, 3500, 1, 1, 1, 'Maz64'),
+('surf_fast', 3, 10000, 1, 1, 1, 'Panzer'),
+('surf_fathom', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_feudal', 6, 3500, 1, 1, 1, 'Mrdeadguy34'),
+('surf_fever', 5, 3500, 1, 1, 1, 'N/A'),
+('surf_fiellu', 3, 3500, 1, 1, 1, 'Kahvo'),
+('surf_fightems', 1, 3500, 1, 1, 1, 'Cobblestoned'),
+('surf_fijy', 1, 3500, 1, 1, 1, 'Fijy'),
+('surf_finesse_final', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_fire_eye', 4, 3500, 1, 1, 1, 'Recoil'),
+('surf_first', 1, 3500, 1, 1, 1, 'Wiuuuh'),
+('surf_fish_njv', 1, 3500, 1, 1, 1, 'Gam£m0nK£Y'),
+('surf_flamingo', 2, 3500, 1, 1, 1, 'I_ken'),
+('surf_flappybird', 5, 3500, 1, 1, 1, 'SyFo'),
+('surf_flatliners', 3, 3500, 1, 1, 1, 'Aux'),
+('surf_flipv2_go', 2, 3500, 1, 1, 1, 'Flip'),
+('surf_flixy', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_flow', 2, 3500, 1, 1, 1, 'Koga73'),
+('surf_flow_a', 1, 3500, 1, 1, 1, 'Koga73'),
+('surf_flyingcastle_fixv2', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_flyin_fortress', 3, 3500, 1, 1, 1, 'HellRaisedSurfer'),
+('surf_fomsey', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_forbidden_swag', 3, 3500, 1, 1, 1, 'Umg_'),
+('surf_forbidden_tomb', 4, 3500, 1, 1, 1, 'Rapsodia'),
+('surf_forbidden_tomb2', 4, 3500, 1, 1, 1, 'Rapsodia'),
+('surf_forbidden_tomb2_njv', 4, 3500, 1, 1, 1, 'Rapsodia'),
+('surf_forbidden_tomb3', 4, 3500, 1, 1, 1, 'Rapsodia'),
+('surf_forbidden_tomb4_njv', 4, 3500, 1, 1, 1, 'Rapsodia'),
+('surf_forbidden_tomb_sns', 3, 3500, 1, 1, 1, 'RiddlerAJ'),
+('surf_forbidden_ways_ksf', 1, 3500, 1, 1, 1, 'Krusty'),
+('surf_ford', 3, 3500, 1, 1, 1, 'Natanskybudder8'),
+('surf_forgotten', 1, 3500, 1, 1, 1, 'Biji'),
+('surf_forgotten_fix', 1, 3500, 1, 1, 1, 'Biji'),
+('surf_forkentofixplz', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_fornax', 1, 3500, 1, 1, 1, 'iNooVa'),
+('surf_fortress', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_fortum', 2, 3500, 1, 1, 1, 'Collab'),
+('surf_for_all', 2, 3500, 1, 1, 1, 'Enjooi'),
+('surf_for_noob', 2, 3500, 1, 1, 1, 'NoxXious'),
+('surf_four_elements', 3, 3500, 1, 1, 1, '^Dede'),
+('surf_fractal', 3, 3500, 1, 1, 1, 'Kingkurtis'),
+('surf_freaky_njv', 4, 3500, 1, 1, 1, 'Freaky456'),
+('surf_freedom', 4, 3500, 1, 1, 1, 'notSmashed'),
+('surf_frequency_njv', 3, 3500, 1, 1, 1, 'NoPro'),
+('surf_frey', 2, 3500, 1, 1, 1, 'KappaEliitti'),
+('surf_frey2_go_fix', 3, 3500, 1, 1, 1, 'KappaEliitti'),
+('surf_frey2_ksfgo', 3, 3500, 1, 1, 1, 'KappaEliitti'),
+('surf_frey_remake_go', 2, 3500, 1, 1, 1, 'KappaEliitti'),
+('surf_friday', 3, 3500, 1, 1, 1, 'iamsupaman'),
+('surf_froots_ksf', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_frost', 1, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_froyo', 3, 3500, 1, 1, 1, 'Co1or'),
+('surf_fruits2', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_fruits_fix', 2, 3500, 1, 1, 1, 'Collab'),
+('surf_frus', 4, 3500, 1, 1, 1, 'Kozaa'),
+('surf_frustration', 5, 3500, 1, 1, 1, 'SONICSOUR'),
+('surf_fs', 4, 3500, 1, 1, 1, 'N/A'),
+('surf_fuckyou', 4, 3500, 1, 1, 1, 'Wayne3288'),
+('surf_fun', 1, 10000, 1, 1, 1, 'GroundSnake'),
+('surf_fungus', 4, 3500, 1, 1, 1, 'MaKo'),
+('surf_funhouse2', 2, 3500, 1, 1, 1, 'KrakenDaddy'),
+('surf_funhouse_fix', 1, 3500, 1, 1, 1, '[UDel]Steve'),
+('surf_furios', 2, 3500, 1, 1, 1, 'Chefkochmaps'),
+('surf_fusion_final', 1, 3500, 1, 1, 1, 'Semikiller'),
+('surf_fusubi', 2, 3500, 1, 1, 1, 'Bontar0'),
+('surf_gaap', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_galactic_zts', 2, 3500, 1, 1, 1, 'Downycat'),
+('surf_garden_go', 1, 3500, 1, 1, 1, 'Big Sid'),
+('surf_garden_h_go', 5, 3500, 1, 1, 1, 'Big Sid'),
+('surf_gauntlet_final', 3, 3500, 1, 1, 1, 'HellRaisedSurfer'),
+('surf_gc_liberdade', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_gekar', 4, 3500, 1, 1, 1, 'caaz'),
+('surf_gekyume_circumcision', 1, 3500, 1, 1, 1, 'a-ha!'),
+('surf_generic', 2, 3500, 1, 1, 1, 'Bicuits'),
+('surf_germania', 5, 3500, 1, 1, 1, 'Collab'),
+('surf_gettingharder', 6, 3500, 1, 1, 1, 'das_d!'),
+('surf_gforce', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_ghost_busters', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_giantmap', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_gisela_eich', 6, 3500, 1, 1, 1, 'N/A'),
+('surf_glamour', 3, 3500, 1, 1, 1, 'Hergs'),
+('surf_glass10', 2, 3500, 1, 1, 1, 'Exfib0'),
+('surf_glass20', 2, 3500, 1, 1, 1, 'Swaaaaag'),
+('surf_glass5', 4, 3500, 1, 1, 1, 'Smileytopin'),
+('surf_glass7', 2, 3500, 1, 1, 1, 'Smileytopin'),
+('surf_glass9', 2, 3500, 1, 1, 1, 'Smileytopin'),
+('surf_gleam', 2, 3500, 1, 1, 1, 'TruMatrix'),
+('surf_gleam2', 2, 3500, 1, 1, 1, 'TruMatrix'),
+('surf_glitch-shortversion', 2, 3500, 1, 1, 1, 'DragonHeart000'),
+('surf_globalchaos', 2, 3500, 1, 1, 1, 'LiNus'),
+('surf_gloomy', 6, 3500, 1, 1, 1, 'krakenDaddy'),
+('surf_gloom_njv', 2, 3500, 1, 1, 1, 'Ryan S'),
+('surf_glorious', 4, 3500, 1, 1, 1, 'MrCloudyMan'),
+('surf_glw', 2, 3500, 1, 1, 1, 'Glow_er'),
+('surf_goat_fix', 4, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_gold1', 2, 3500, 1, 1, 1, 'Kaneejn'),
+('surf_goldarn', 4, 3500, 1, 1, 1, 'FalseLogic'),
+('surf_golden_fix', 2, 3500, 1, 1, 1, 'Koga73'),
+('surf_goliath', 7, 5000, 1, 1, 1, 'Hardex'),
+('surf_goodbye2', 3, 3500, 1, 1, 1, 'Hulda'),
+('surf_gradient', 2, 3500, 1, 1, 1, 'Hippy'),
+('surf_graphia', 3, 3500, 1, 1, 1, 'Target Practice'),
+('surf_grassland', 2, 3500, 1, 1, 1, 'XShark'),
+('surf_grayscale', 1, 3500, 1, 1, 1, '64mb'),
+('surf_greenbrick', 2, 3500, 1, 1, 1, 'TempSo'),
+('surf_greenday', 2, 3500, 1, 1, 1, 'Gere'),
+('surf_greenhouse', 4, 3500, 1, 1, 1, 'Sagan'),
+('surf_greensway', 2, 3500, 1, 1, 1, 'NvC_DmN_CH'),
+('surf_grid', 5, 3500, 1, 1, 1, 'Gorange Ninja'),
+('surf_grotta', 3, 3500, 1, 1, 1, 'Forki'),
+('surf_grotto', 3, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_grunz', 2, 3500, 1, 1, 1, 'Natanskybudder8'),
+('surf_gudrun', 3, 3500, 1, 1, 1, 'SkariZ^'),
+('surf_guitar_hi', 2, 3500, 1, 1, 1, 'Masog'),
+('surf_gurus_njv', 5, 3500, 1, 1, 1, 'Collab'),
+('surf_hades', 6, 3500, 1, 1, 1, 'ArcticPanda'),
+('surf_hades2', 6, 3500, 1, 1, 1, 'ArcticPanda'),
+('surf_half_baked', 2, 3500, 1, 1, 1, '^smiley'),
+('surf_halloween', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_halloween_tf', 2, 3500, 1, 1, 1, 'Egan'),
+('surf_happyhands', 2, 3500, 1, 1, 1, 'Kiiru'),
+('surf_happyhands2', 3, 3500, 1, 1, 1, 'Kiiru'),
+('surf_happyhands3', 3, 3500, 1, 1, 1, 'Kiiru'),
+('surf_happyhands4', 3, 3500, 1, 1, 1, 'Kiiru'),
+('surf_happyhands5', 3, 3500, 1, 1, 1, 'Kiiru'),
+('surf_happyhands_test', 2, 3500, 1, 1, 1, 'Kiiru'),
+('surf_happyhug', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_harmony', 2, 3500, 1, 1, 1, 'PrisonNightmare'),
+('surf_hat', 1, 3500, 1, 1, 1, 'Dexter'),
+('surf_havaku_b1', 3, 3500, 1, 1, 1, 'SenseiFin'),
+('surf_haze', 2, 3500, 1, 1, 1, 'npb'),
+('surf_healthy_e', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_hearth_fix', 2, 3500, 1, 1, 1, 'GoZynth'),
+('surf_heaven', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_heftig', 1, 3500, 1, 1, 1, 'Turbo'),
+('surf_hekkz', 2, 3500, 1, 1, 1, 'Midahekki'),
+('surf_hektik', 4, 3500, 1, 1, 1, 'Fizu'),
+('surf_helium_v2_rg', 3, 3500, 1, 1, 1, 'Waffleburger'),
+('surf_helloworld', 5, 3500, 1, 1, 1, 'Fatfuk'),
+('surf_hentai', 3, 3500, 1, 1, 1, 'iiTzSheooo & ziomekYOYO'),
+('surf_hero', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_hero_go', 5, 3500, 1, 1, 1, 'Biji'),
+('surf_het', 1, 3500, 1, 1, 1, 'SkariZ^'),
+('surf_highlands', 5, 10000, 1, 1, 1, 'ArcticPanda'),
+('surf_hilirium_2017', 4, 3500, 1, 1, 1, 'N/A'),
+('surf_hob', 3, 3500, 1, 1, 1, 'Syncronyze'),
+('surf_hobo', 2, 3500, 1, 1, 1, 'JumpingHobo3'),
+('surf_holiday_fix', 2, 3500, 1, 1, 1, 'iNooVa'),
+('surf_hollow', 5, 3500, 1, 1, 1, 'Vampiricx & Xtra_Festive'),
+('surf_honker_rg', 4, 3500, 1, 1, 1, 'Tick-Tock'),
+('surf_hope', 5, 3500, 1, 1, 1, 'Collab'),
+('surf_hopi_caged_v1', 6, 3500, 1, 1, 1, 'Cpt. Hopi'),
+('surf_hopi_easy', 3, 3500, 1, 1, 1, 'Cpt. Hopi'),
+('surf_hopi_gradient_v1', 5, 3500, 1, 1, 1, 'Cpt. Hopi'),
+('surf_horizon_njv', 1, 10000, 1, 1, 1, 'Kompile'),
+('surf_hotrod', 2, 3500, 1, 1, 1, 'FriendlyChemist'),
+('surf_hotrod_beta', 2, 3500, 1, 1, 1, 'FriendlyChemist'),
+('surf_hotwheels', 2, 3500, 1, 1, 1, 'Hardex'),
+('surf_hourglass', 1, 5000, 1, 1, 1, 'Masog'),
+('surf_how2surf', 1, 3500, 1, 1, 1, 'Masog'),
+('surf_hoy', 2, 3500, 1, 1, 1, 'Addio'),
+('surf_hoy_crazyideas', 3, 3500, 1, 1, 1, 'Addio'),
+('surf_hoy_someideas', 2, 3500, 1, 1, 1, 'Addio'),
+('surf_huntworking', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_hunty', 4, 3500, 1, 1, 1, 'Rex'),
+('surf_hurrr', 2, 3500, 1, 1, 1, 'SKAR'),
+('surf_hydrogen_v2', 5, 3500, 1, 1, 1, 'Waffleburger, Knife, & Icecreaml'),
+('surf_hyper', 4, 3500, 1, 1, 1, 'Helix'),
+('surf_iamsupaman_beta1', 2, 3500, 1, 1, 1, 'Iamsupaman'),
+('surf_icetest', 3, 3500, 1, 1, 1, 'Ice & 2CAN'),
+('surf_iceworld', 3, 3500, 1, 1, 1, 'Ins'),
+('surf_idn', 3, 3500, 1, 1, 1, 'iodaN^'),
+('surf_illumination', 4, 3500, 1, 1, 1, 'Doink Face'),
+('surf_illumination2', 4, 3500, 1, 1, 1, 'Doink Face'),
+('surf_illusion', 2, 5000, 1, 1, 1, 'Juxtapo, Syncronyze, maz & Phuri'),
+('surf_illusory', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_imagine_fix', 3, 3500, 1, 1, 1, 'THAY-imagine'),
+('surf_imex_njv', 3, 3500, 1, 1, 1, 'Junior'),
+('surf_iminyourbasement', 2, 3500, 1, 1, 1, 'Buffer'),
+('surf_immortal_01', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_immortal_02', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_impact_njv', 3, 3500, 1, 1, 1, 'Sangre'),
+('surf_impact_tnn', 2, 3500, 1, 1, 1, 'ItzGallows'),
+('surf_industries_njv', 4, 3500, 1, 1, 1, 'Razersurf'),
+('surf_infamous_ksf', 5, 3500, 1, 1, 1, 'Collab'),
+('surf_infected_h', 5, 3500, 1, 1, 1, 'Hulda'),
+('surf_infected_njv', 5, 3500, 1, 1, 1, 'Hulda'),
+('surf_inferno', 4, 3500, 1, 1, 1, 'Syko_'),
+('surf_infrared', 4, 3500, 1, 1, 1, 'Wind'),
+('surf_ing_njv', 2, 10000, 1, 1, 1, 'RambJoe'),
+('surf_inhuman', 4, 3500, 1, 1, 1, 'Noztic'),
+('surf_injection_njv', 4, 3500, 1, 1, 1, 'Exither'),
+('surf_injustice', 1, 3500, 1, 1, 1, 'Presumed Dead'),
+('surf_inner', 3, 3500, 1, 1, 1, 'Klemix'),
+('surf_innokia', 5, 3500, 1, 1, 1, 'Hesuka'),
+('surf_inrage', 3, 3500, 1, 1, 1, 'Ch!ll3r'),
+('surf_inrage2', 4, 3500, 1, 1, 1, 'Ch!ll3r'),
+('surf_insanity', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_insanity2', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_insideout_final', 3, 3500, 1, 1, 1, 'Enjooi'),
+('surf_insignia_b1', 4, 3500, 1, 1, 1, 'LiNus'),
+('surf_inspire', 2, 3500, 1, 1, 1, 'Ins'),
+('surf_intense', 4, 3500, 1, 1, 1, 'Essence'),
+('surf_interceptor', 4, 3500, 1, 1, 1, 'Razersurf'),
+('surf_interference_csgo', 2, 10000, 1, 1, 1, 'NvC_DmN_CH'),
+('surf_intothewild', 2, 3500, 1, 1, 1, 'Koga73'),
+('surf_intra', 4, 3500, 1, 1, 1, 'Maz64'),
+('surf_in_space_go', 2, 3500, 1, 1, 1, 'KappaEliitti'),
+('surf_in_the_dark', 2, 3500, 1, 1, 1, 'Drk_KZG'),
+('surf_iridium', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_island', 2, 3500, 1, 1, 1, 'Scaz.zaf'),
+('surf_itcannotbeeasier', 1, 3500, 1, 1, 1, 'PaiN'),
+('surf_it_straight', 2, 3500, 1, 1, 1, '♥stxphxn♥'),
+('surf_ivo', 1, 3500, 1, 1, 1, 'xVivio'),
+('surf_ivory', 2, 5000, 1, 1, 1, 'Sid'),
+('surf_ixtab_njv', 4, 3500, 1, 1, 1, 'Sacred'),
+('surf_izded', 5, 3500, 1, 1, 1, 'Mr.25'),
+('surf_jail_go', 1, 10000, 1, 1, 1, 'Murglegurgle'),
+('surf_jakdum', 2, 3500, 1, 1, 1, 'JathOsh'),
+('surf_jaqen', 3, 3500, 1, 1, 1, 'Hardex'),
+('surf_jaqen2', 3, 3500, 1, 1, 1, 'Hardex'),
+('surf_jash440', 1, 3500, 1, 1, 1, 'Jash440'),
+('surf_jeff', 3, 3500, 1, 1, 1, 'Garanimal'),
+('surf_jenocide', 3, 3500, 1, 1, 1, 'Jongent123'),
+('surf_jizznipples', 4, 3500, 1, 1, 1, 'N/A'),
+('surf_joshog_final', 3, 3500, 1, 1, 1, 'King of the Bananas'),
+('surf_journeys_final', 2, 3500, 1, 1, 1, 'razersurf'),
+('surf_juhis', 3, 3500, 1, 1, 1, 'Juhis'),
+('surf_jumble', 6, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_jump', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_junglespic_ksf', 4, 3500, 1, 1, 1, 'Juxtapo'),
+('surf_jusched', 6, 3500, 1, 1, 1, 'notSmashed'),
+('surf_juturna', 2, 3500, 1, 1, 1, 'ashm0re'),
+('surf_juturna_easy', 1, 3500, 1, 1, 1, 'ashm0re'),
+('surf_kaboom', 3, 3500, 1, 1, 1, 'D- Pickles'),
+('surf_kairo', 5, 3500, 1, 1, 1, 'PretzL'),
+('surf_kaladin', 1, 3500, 1, 1, 1, 'F1nister'),
+('surf_kalium', 5, 3500, 1, 1, 1, 'N/A'),
+('surf_kalium2', 5, 3500, 1, 1, 1, 'Helix'),
+('surf_katyna_a', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_kawaii', 3, 3500, 1, 1, 1, 'Nikki Nueva'),
+('surf_kepler', 1, 3500, 1, 1, 1, 'FriendlyChemist'),
+('surf_kimetrik', 3, 3500, 1, 1, 1, 'Lovhon'),
+('surf_kinetic', 4, 3500, 1, 1, 1, 'Mumble98'),
+('surf_kingdom_v1', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_kinshi', 2, 3500, 1, 1, 1, 'Seenko'),
+('surf_kitsune', 1, 3500, 1, 1, 1, 'Arblarg'),
+('surf_kitsune2_beta', 3, 3500, 1, 1, 1, 'Arblarg'),
+('surf_kitsune2_GO', 3, 3500, 1, 1, 1, 'Arblarg'),
+('surf_kitsune_nb', 1, 3500, 1, 1, 1, 'Arblarg'),
+('surf_kloakk', 2, 3500, 1, 1, 1, 'PretzL'),
+('surf_klue', 2, 3500, 1, 1, 1, 'Klemix'),
+('surf_koa', 4, 3500, 1, 1, 1, 'TeMP'),
+('surf_korn', 2, 3500, 1, 1, 1, 'Payn'),
+('surf_krow10', 2, 3500, 1, 1, 1, 'Exither'),
+('surf_kuaga', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_kultur', 6, 3500, 1, 1, 1, 'Sonia'),
+('surf_kyuubi', 2, 3500, 1, 1, 1, 'Kyuubi'),
+('surf_kz_mix_journeys', 2, 3500, 1, 1, 1, 'SoUlFaThEr'),
+('surf_kz_protraining', 3, 3500, 1, 1, 1, 'SoUlFaThEr'),
+('surf_lab', 4, 3500, 1, 1, 1, 'TECH'),
+('surf_lament_njv', 2, 3500, 1, 1, 1, 'God Damnit Nappa'),
+('surf_lamppost', 1, 3500, 1, 1, 1, 'Incredirocks'),
+('surf_larry', 7, 3500, 1, 1, 1, 'N/A'),
+('surf_lavaflow', 2, 3500, 1, 1, 1, 'Kiiru'),
+('surf_lax_fix', 4, 3500, 1, 1, 1, 'Krealington'),
+('surf_leafy', 1, 3500, 1, 1, 1, 'Sugartitty'),
+('surf_lechumap', 3, 3500, 1, 1, 1, 'Fran'),
+('surf_leesriize', 3, 3500, 1, 1, 1, 'Leesriize'),
+('surf_leet_xl_beta7z', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_leet_xl_r12', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_legendary', 5, 3500, 1, 1, 1, 'Collab'),
+('surf_legends', 2, 3500, 1, 1, 1, 'SintaxError'),
+('surf_legends_lite', 1, 3500, 1, 1, 1, 'SintaxError'),
+('surf_lepidus', 4, 3500, 1, 1, 1, 'Tilt'),
+('surf_lesa', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_lessons', 2, 3500, 1, 1, 1, 'Helix'),
+('surf_lianfora', 2, 3500, 1, 1, 1, 'Ins'),
+('surf_liberation', 3, 3500, 1, 1, 1, 'MachINE'),
+('surf_liberation2', 3, 3500, 1, 1, 1, 'MachINE'),
+('surf_libya', 3, 3500, 1, 1, 1, 'b0at'),
+('surf_lies', 3, 3500, 1, 1, 1, 'Umg_'),
+('surf_lies_ksf', 3, 3500, 1, 1, 1, 'Umg_'),
+('surf_life_of_cow', 4, 3500, 1, 1, 1, 'Krealington'),
+('surf_life_of_doc', 1, 3500, 1, 1, 1, 'SKAR'),
+('surf_life_of_duck', 1, 3500, 1, 1, 1, 'SKAR'),
+('surf_life_of_duck_go', 1, 3500, 1, 1, 1, 'SKAR'),
+('surf_lighrust_easy', 2, 3500, 1, 1, 1, 'Sheogorath'),
+('surf_lighthouse', 3, 3500, 1, 1, 1, 'Ins'),
+('surf_lightstones_light', 2, 3500, 1, 1, 1, 'NOiDeasStudio'),
+('surf_like_this', 3, 3500, 1, 1, 1, 'Koga73'),
+('surf_lilorm', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_limbo_go', 4, 3500, 1, 1, 1, 'murglegurgle'),
+('surf_linear5', 4, 10000, 1, 1, 1, 'N/A'),
+('surf_liopleurodon2', 1, 3500, 1, 1, 1, 'Magical Liopleurodon'),
+('surf_liopleurodon_final', 3, 3500, 1, 1, 1, 'Magical Liopleurodon'),
+('surf_lithium', 3, 3500, 1, 1, 1, 'Copy-Mark'),
+('surf_lithium2', 4, 3500, 1, 1, 1, 'Copy-Mark'),
+('surf_lockdown', 2, 3500, 1, 1, 1, 'Pedroknz'),
+('surf_loentra', 5, 3500, 1, 1, 1, 'Ins'),
+('surf_loentra_easy', 3, 3500, 1, 1, 1, 'Ins'),
+('surf_lolrevlis', 5, 3500, 1, 1, 1, 'Silverlol'),
+('surf_lolrevlis2', 4, 3500, 1, 1, 1, 'Silverlol'),
+('surf_lolwhut', 4, 3500, 1, 1, 1, 'CyaN1de^'),
+('surf_lonnaly', 1, 3500, 1, 1, 1, 'LonnaKinns'),
+('surf_looksmodern', 6, 3500, 1, 1, 1, 'Tioga060'),
+('surf_lore_e', 2, 3500, 1, 1, 1, 'Target Practice'),
+('surf_lore_fix', 2, 3500, 1, 1, 1, 'Target Practice'),
+('surf_lost', 3, 3500, 1, 1, 1, 'Flux'),
+('surf_lost2', 3, 3500, 1, 1, 1, 'Flux'),
+('surf_love', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_loveland', 2, 3500, 1, 1, 1, '♥stxphxn♥'),
+('surf_loves_spliff', 1, 3500, 1, 1, 1, '[frank.]'),
+('surf_lovetunnel', 1, 3500, 1, 1, 1, 'Maz64'),
+('surf_lovhon', 2, 3500, 1, 1, 1, 'Lovhon'),
+('surf_loweffort', 4, 3500, 1, 1, 1, 'Vay'),
+('surf_lowestbidder', 4, 3500, 1, 1, 1, 'N/A'),
+('surf_low_production', 3, 3500, 1, 1, 1, 'Mr. Cow'),
+('surf_lo_tek', 2, 3500, 1, 1, 1, 'Axel'),
+('surf_lt_omnific_fix', 6, 10000, 1, 1, 1, 'Nyro'),
+('surf_lt_unicorn_official', 4, 10000, 1, 1, 1, 'Nyro'),
+('surf_lullaby_ksf', 1, 3500, 1, 1, 1, 'God Damnit Nappa'),
+('surf_lullaby_redone_njv', 2, 3500, 1, 1, 1, 'Wiuuuh'),
+('surf_luminaris', 3, 3500, 1, 1, 1, 'KappaEliitti'),
+('surf_lush', 3, 3500, 1, 1, 1, 'Rathe'),
+('surf_lux', 1, 3500, 1, 1, 1, 'SSStormy'),
+('surf_luxus_csgo', 1, 3500, 1, 1, 1, 'Luxus'),
+('surf_mackful', 1, 3500, 1, 1, 1, 'VenusOG'),
+('surf_magic', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_magma', 2, 3500, 1, 1, 1, 'daddy oSee'),
+('surf_maip_4_beta1', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_major_dark', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_mao', 2, 3500, 1, 1, 1, 'Mibes'),
+('surf_map', 5, 3500, 1, 1, 1, 'Pand3mic'),
+('surf_map_h', 6, 3500, 1, 1, 1, 'Pand3mic'),
+('surf_marah', 5, 3500, 1, 1, 1, 'Flaudgin'),
+('surf_marbleblast_e', 2, 3500, 1, 1, 1, 'BlueRaven'),
+('surf_marble_first', 2, 3500, 1, 1, 1, 'Zatura24'),
+('surf_marton', 1, 3500, 1, 1, 1, 'Martons'),
+('surf_mash-up', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_masonry', 4, 3500, 1, 1, 1, 'Mr. Cow'),
+('surf_master', 1, 3500, 1, 1, 1, 'Xzippyzachx'),
+('surf_master2', 1, 3500, 1, 1, 1, 'Xzippyzachx'),
+('surf_mastering', 2, 3500, 1, 1, 1, 'Jurandir'),
+('surf_mate', 2, 3500, 1, 1, 1, 'Edy'),
+('surf_maxcant', 1, 3500, 1, 1, 1, 'Pablo'),
+('surf_mdrn', 5, 3500, 1, 1, 1, 'Syncronyze'),
+('surf_me', 2, 10000, 1, 1, 1, 'Not_a_zombie'),
+('surf_megaeasy', 1, 3500, 1, 1, 1, 'DotzGOD'),
+('surf_mejai', 3, 3500, 1, 1, 1, '4Shot Fanboy'),
+('surf_mellow', 2, 3500, 1, 1, 1, 'Rezonate'),
+('surf_meme', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_memoria', 2, 3500, 1, 1, 1, 'Thursday'),
+('surf_memories', 4, 3500, 1, 1, 1, 'Chrissybear'),
+('surf_mephobia_final', 4, 3500, 1, 1, 1, 'Yeri'),
+('surf_meridional', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_mesa', 1, 10000, 1, 1, 1, 'Arblarg'),
+('surf_mesa_aether_fix', 3, 3500, 1, 1, 1, 'Arblarg'),
+('surf_mesa_fix', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_mesa_mine_fix', 2, 3500, 1, 1, 1, 'Arblarg'),
+('surf_mesa_revo_go', 1, 3500, 1, 1, 1, 'Arblarg'),
+('surf_mestro_ez', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_metallic', 5, 3500, 1, 1, 1, 'Mr. Cow'),
+('surf_metalwall', 4, 3500, 1, 1, 1, 'Hulda'),
+('surf_methadone', 3, 3500, 1, 1, 1, 'Ins'),
+('surf_method', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_methone', 3, 3500, 1, 1, 1, 'Methone & Natanskybudder8'),
+('surf_midsommar', 3, 3500, 1, 1, 1, 'Granis'),
+('surf_milkyway', 4, 3500, 1, 1, 1, 'Mr. Cow'),
+('surf_minecraft', 5, 3500, 1, 1, 1, 'b0at'),
+('surf_minecraft_2016_final', 2, 3500, 1, 1, 1, 'MaverickBg'),
+('surf_minecraft_2020_fix', 2, 3500, 1, 1, 1, 'Koga73'),
+('surf_minesport', 2, 3500, 1, 1, 1, 'Ale'),
+('surf_minigolf', 3, 3500, 1, 1, 1, 'Xbmann'),
+('surf_minimumwage', 3, 3500, 1, 1, 1, 'Serz'),
+('surf_minuet_njv', 1, 3500, 1, 1, 1, 'God Damnit Nappa'),
+('surf_miracle', 3, 3500, 1, 1, 1, 'Mazzo'),
+('surf_mirrors', 3, 3500, 1, 1, 1, 'Juhis'),
+('surf_misc', 5, 3500, 1, 1, 1, 'FreakOut'),
+('surf_mislorm', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_missing_no', 3, 3500, 1, 1, 1, 'Ryan S.'),
+('surf_misty', 2, 3500, 1, 1, 1, 'FIREK'),
+('surf_mjk', 2, 3500, 1, 1, 1, 'Gladeare'),
+('surf_mokuzai', 4, 3500, 1, 1, 1, 'Oscar'),
+('surf_molstration', 3, 3500, 1, 1, 1, 'Lody'),
+('surf_mom', 1, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_mom_fix', 1, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_monochrome', 3, 3500, 1, 1, 1, 'Minimalis'),
+('surf_monolith', 5, 3500, 1, 1, 1, 'Gorange Ninja'),
+('surf_monotony', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_monsterguts', 4, 3500, 1, 1, 1, 'Papa Panda Yo!'),
+('surf_moonkingdom', 2, 3500, 1, 1, 1, 'JD!'),
+('surf_morbid', 3, 3500, 1, 1, 1, 'Sacred'),
+('surf_motion1', 6, 3500, 1, 1, 1, 'Masog'),
+('surf_motion1_easy', 4, 3500, 1, 1, 1, 'Masog'),
+('surf_mudkip_fix', 4, 3500, 1, 1, 1, 'RNC1839'),
+('surf_murmenia1stage1test', 1, 3500, 1, 1, 1, 'Murmen'),
+('surf_mushroom_ksf', 4, 3500, 1, 1, 1, 'Chefkochmaps'),
+('surf_mwag_reloaded', 3, 3500, 1, 1, 1, 'Monkeywithagun'),
+('surf_mynah_final', 3, 3500, 1, 1, 1, 'Nikki Nueva'),
+('surf_my_shit', 2, 3500, 1, 1, 1, 'APirateTurtle'),
+('surf_nac', 3, 3500, 1, 1, 1, 'Big Blue'),
+('surf_nascent_csgo', 4, 3500, 1, 1, 1, 'Whimsy'),
+('surf_natura', 3, 3500, 1, 1, 1, 'Crystal'),
+('surf_nature', 2, 3500, 1, 1, 1, 'Jemix'),
+('surf_nebula', 2, 3500, 1, 1, 1, 'iNooVa'),
+('surf_nemesis', 4, 3500, 1, 1, 1, 'Sacred'),
+('surf_neon2', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_neon_beta', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_neon_final', 2, 3500, 1, 1, 1, 'Ch1!!3r'),
+('surf_neoplasma', 4, 3500, 1, 1, 1, 'Kujoen'),
+('surf_neoteric', 4, 3500, 1, 1, 1, 'Sam'),
+('surf_neo_njv', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_neptune', 5, 3500, 1, 1, 1, 'N/A'),
+('surf_nesquik', 5, 3500, 1, 1, 1, 'Sam'),
+('surf_networked', 3, 3500, 1, 1, 1, 'Ryan S.'),
+('surf_network_2008_final', 2, 3500, 1, 1, 1, 'Ryan S'),
+('surf_network_2009_njv', 3, 3500, 1, 1, 1, 'Ryan S'),
+('surf_network_2013', 3, 3500, 1, 1, 1, 'Ryan S'),
+('surf_new', 2, 3500, 1, 1, 1, 'Horizon'),
+('surf_newbie', 2, 3500, 1, 1, 1, 'NOiDeasStudio & Sheogorath'),
+('surf_newb_hazard_r1', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_nexus', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_neyon', 1, 3500, 1, 1, 1, 'Mike'),
+('surf_night', 1, 3500, 1, 1, 1, 'Magical Liopleurodon'),
+('surf_nightmare', 5, 3500, 1, 1, 1, 'Collab'),
+('surf_nikolo', 4, 3500, 1, 1, 1, 'Lucky Charms'),
+('surf_ninja_go_b5', 1, 3500, 1, 1, 1, 'Drunken Ninja & Mario'),
+('surf_ninja_r4', 1, 3500, 1, 1, 1, 'Drunken Ninja & Mario'),
+('surf_nitro', 2, 3500, 1, 1, 1, 'xRyanNitro'),
+('surf_noble_csgo', 3, 3500, 1, 1, 1, 'ArcticPanda'),
+('surf_nocolors', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_nocturns_hopeless', 3, 3500, 1, 1, 1, 'Lownine^'),
+('surf_nocturns_queen', 3, 3500, 1, 1, 1, 'Lownine^'),
+('surf_nostromo_csgo', 5, 3500, 1, 1, 1, 'Horsefeathers'),
+('surf_nothing', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_not_on', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_not_so_beginner', 2, 3500, 1, 1, 1, 'WALL-E'),
+('surf_not_so_disaster', 2, 5000, 1, 1, 1, 'Mr.25'),
+('surf_not_so_hentai', 2, 3500, 1, 1, 1, 'A-ha!'),
+('surf_not_so_neb', 1, 3500, 1, 1, 1, 'JD!'),
+('surf_not_so_quick', 4, 3500, 1, 1, 1, 'Sam'),
+('surf_not_so_sinister', 3, 3500, 1, 1, 1, 'RambJoe'),
+('surf_not_so_zen_fix', 6, 10000, 1, 1, 1, 'Mr.25'),
+('surf_nova', 2, 3500, 1, 1, 1, 'KappaEliitti'),
+('surf_noworth', 1, 3500, 1, 1, 1, 'Gttotchh'),
+('surf_numbers', 5, 3500, 1, 1, 1, 'Gorange Ninja'),
+('surf_numbers2', 4, 3500, 1, 1, 1, 'Granis'),
+('surf_nyx', 1, 5000, 1, 1, 1, 'Syncronyze'),
+('surf_nyze', 5, 3500, 1, 1, 1, 'Syncronyze'),
+('surf_ny_advance_nsf_v2', 3, 3500, 1, 1, 1, 'FAJ'),
+('surf_ny_aerial', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_ny_momentum2_ksf', 3, 3500, 1, 1, 1, 'FAJ'),
+('surf_ny_momentum_v3_1', 1, 3500, 1, 1, 1, 'FAJ'),
+('surf_ny_platinum', 2, 3500, 1, 1, 1, 'FAJ'),
+('surf_ny_superhappiest_b3', 1, 3500, 1, 1, 1, 'FAJ'),
+('surf_n_bhop_beta1', 4, 3500, 1, 1, 1, 'N/A'),
+('surf_n_turf', 1, 3500, 1, 1, 1, 'ApeXe'),
+('surf_oasis', 2, 3500, 1, 1, 1, 'Phurix'),
+('surf_occur', 3, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_oddworld', 4, 3500, 1, 1, 1, 'Exxe'),
+('surf_odyssey', 2, 3500, 1, 1, 1, 'RiddlerAJ'),
+('surf_oejz_v2', 3, 3500, 1, 1, 1, 'Ale'),
+('surf_offskill', 7, 3500, 1, 1, 1, 'KappaEliitti'),
+('surf_olympics', 3, 3500, 1, 1, 1, 'THAY-imagine'),
+('surf_olympus', 2, 3500, 1, 1, 1, 'FriendlyChemist'),
+('surf_oma', 2, 3500, 1, 1, 1, 'Creatin'),
+('surf_omnibus', 3, 3500, 1, 1, 1, 'SKAR'),
+('surf_oompa2', 4, 3500, 1, 1, 1, 'Lody'),
+('surf_oompa_loompa', 4, 3500, 1, 1, 1, 'CNCP'),
+('surf_opus', 2, 3500, 1, 1, 1, 'Oui'),
+('surf_orangewood', 4, 3500, 1, 1, 1, 'HannibalBy'),
+('surf_orbion', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_organs', 1, 3500, 1, 1, 1, 'Incredirocks'),
+('surf_original', 6, 3500, 1, 1, 1, 'Wayne3288'),
+('surf_orion', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_ori_l', 3, 3500, 1, 1, 1, 'Stats33'),
+('surf_orthodox_fix', 2, 3500, 1, 1, 1, 'ArcticPanda'),
+('surf_our', 5, 3500, 1, 1, 1, 'not_a_zombie'),
+('surf_overflight', 2, 3500, 1, 1, 1, 'Kirillins-'),
+('surf_overgrowth', 4, 3500, 1, 1, 1, 'Fission'),
+('surf_overgrowth2', 5, 3500, 1, 1, 1, 'Fission'),
+('surf_paddy', 2, 3500, 1, 1, 1, 'Hardex'),
+('surf_pagoda', 3, 3500, 1, 1, 1, 'PretzL'),
+('surf_palace', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_palais', 2, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_palette_v2', 4, 3500, 1, 1, 1, 'Bravesurf'),
+('surf_palikka_fix', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_palm', 2, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_pancake', 4, 3500, 1, 1, 1, 'Hardex'),
+('surf_pandemonium_njv', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_pandora', 2, 3500, 1, 1, 1, 'Sonia'),
+('surf_panono', 2, 3500, 1, 1, 1, 'Watri'),
+('surf_pantheon', 1, 10000, 1, 1, 1, 'Garanimal'),
+('surf_pantheon_beta', 1, 10000, 1, 1, 1, 'Garanimal'),
+('surf_papertown', 3, 3500, 1, 1, 1, 'Sam'),
+('surf_parachutes', 4, 3500, 1, 1, 1, 'ApeXe'),
+('surf_paradigm', 4, 3500, 1, 1, 1, 'Pyllytonttu'),
+('surf_paradise', 2, 3500, 1, 1, 1, 'Wiuuuh'),
+('surf_paranoid_enigma', 3, 3500, 1, 1, 1, 'Paragon'),
+('surf_parc_colore', 3, 3500, 1, 1, 1, 'Exither'),
+('surf_parrot_selector', 3, 3500, 1, 1, 1, 'Ptad'),
+('surf_pastel', 3, 3500, 1, 1, 1, 'G O O S'),
+('surf_pathfinder', 2, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_pavilion', 3, 3500, 1, 1, 1, 'Black Sheep'),
+('surf_peg_save38', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_peg_save38_fix', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_perennial', 1, 3500, 1, 1, 1, 'Granis '),
+('surf_perforated_restored', 4, 3500, 1, 1, 1, 'Matteman'),
+('surf_performance', 2, 3500, 1, 1, 1, 'Konstantinov'),
+('surf_peruna', 2, 3500, 1, 1, 1, 'Microwave'),
+('surf_petrus', 3, 3500, 1, 1, 1, 'iNooVa'),
+('surf_petrus2', 5, 3500, 1, 1, 1, 'iNooVa'),
+('surf_phantoml0rd_beta', 3, 3500, 1, 1, 1, 'Tioga060'),
+('surf_phuli', 1, 3500, 1, 1, 1, 'Yush'),
+('surf_physics', 2, 3500, 1, 1, 1, 'ColdAnimation'),
+('surf_piano', 2, 3500, 1, 1, 1, 'ZiomekYOYO'),
+('surf_pinkbash', 2, 3500, 1, 1, 1, 'Vay'),
+('surf_pinkcubes_fix', 2, 3500, 1, 1, 1, 'YajiGod'),
+('surf_pinkpiggy', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_pj_training1', 2, 3500, 1, 1, 1, 'Cirno'),
+('surf_pj_training2', 2, 3500, 1, 1, 1, 'Cirno'),
+('surf_placid', 3, 3500, 1, 1, 1, 'Enjooi'),
+('surf_plaguelands_beta7a', 3, 3500, 1, 1, 1, 'Ryan S.'),
+('surf_plaster', 2, 3500, 1, 1, 1, 'Tree'),
+('surf_plastered', 1, 3500, 1, 1, 1, 'Toilet'),
+('surf_platinum', 1, 3500, 1, 1, 1, 'FriendlyChemist'),
+('surf_platypus', 2, 3500, 1, 1, 1, 'Platypushunter'),
+('surf_plethora_fix', 3, 3500, 1, 1, 1, 'THAY-imagine'),
+('surf_pls', 6, 3500, 1, 1, 1, 'Biji'),
+('surf_pocari', 1, 3500, 1, 1, 1, 'Kingkurtis'),
+('surf_pogomogo_b3', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_poke_b9', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_polonia', 5, 3500, 1, 1, 1, 'Collab'),
+('surf_polski_sklep', 1, 3500, 1, 1, 1, 'Crystal'),
+('surf_polygon', 4, 3500, 1, 1, 1, 'Diealready'),
+('surf_polytron', 5, 3500, 1, 1, 1, 'Develo'),
+('surf_porn_fix', 3, 3500, 1, 1, 1, 'Monkeywithagun'),
+('surf_portal_easy_beta1', 2, 3500, 1, 1, 1, 'Kotton'),
+('surf_portal_game4', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_potato', 1, 3500, 1, 1, 1, 'Moth'),
+('surf_pox', 1, 3500, 1, 1, 1, 'Krusty'),
+('surf_pox_revamp', 1, 3500, 1, 1, 1, 'Bocuma'),
+('surf_prelude_ksf', 1, 3500, 1, 1, 1, 'God Damnit Nappa'),
+('surf_premium', 2, 3500, 1, 1, 1, 'Maz64'),
+('surf_presmon_fix', 2, 3500, 1, 1, 1, 'Arroba'),
+('surf_primero_njv', 5, 3500, 1, 1, 1, 'Zee'),
+('surf_prime_time_r3vamp', 1, 3500, 1, 1, 1, 'ZaLoS'),
+('surf_princess', 3, 3500, 1, 1, 1, 'Kuiq'),
+('surf_progress', 2, 3500, 1, 1, 1, 'Sam, Xtra_Festive'),
+('surf_proliferation', 4, 3500, 1, 1, 1, 'Krealington'),
+('surf_prolix', 4, 3500, 1, 1, 1, 'T3tra'),
+('surf_prosaic_njv', 3, 3500, 1, 1, 1, 'T3tra'),
+('surf_prosperity_v2', 4, 3500, 1, 1, 1, 'Fuddy'),
+('surf_prosperous', 2, 3500, 1, 1, 1, 'Fuddy'),
+('surf_proximity_final', 3, 3500, 1, 1, 1, 'Pand3mic'),
+('surf_psi', 3, 3500, 1, 1, 1, 'Waffleburger'),
+('surf_psi_fixed', 3, 3500, 1, 1, 1, 'Waffleburger'),
+('surf_psychedelia', 3, 3500, 1, 1, 1, 'Sid'),
+('surf_psycho_njv', 2, 3500, 1, 1, 1, 'HellRaisedSurfer'),
+('surf_purdy', 2, 3500, 1, 1, 1, 'Somber'),
+('surf_pure', 4, 3500, 1, 1, 1, 'N/A'),
+('surf_purgatory', 3, 3500, 1, 1, 1, 'THAY-imagine'),
+('surf_pyllyt1', 2, 3500, 1, 1, 1, 'TyöstöKärry'),
+('surf_pyrism_njv', 6, 3500, 1, 1, 1, 'NotSmashed'),
+('surf_pyzire', 4, 3500, 1, 1, 1, 'TaiKii'),
+('surf_qlimax_q', 5, 3500, 1, 1, 1, 'Helix'),
+('surf_quantum_njv', 2, 3500, 1, 1, 1, 'Sangre'),
+('surf_quarantine', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_quark_rc', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_quartus_ksf', 4, 3500, 1, 1, 1, 'Juxtapo'),
+('surf_quasar_njv', 4, 3500, 1, 1, 1, 'Rapsodia'),
+('surf_quattro', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_queen_of_the_ween', 3, 10000, 1, 1, 1, 'Otter'),
+('surf_quickie', 3, 3500, 1, 1, 1, 'Sam'),
+('surf_quilavar', 3, 3500, 1, 1, 1, 'Helix'),
+('surf_radiation_hazard', 2, 3500, 1, 1, 1, 'WarrioR^^'),
+('surf_ragequit', 4, 3500, 1, 1, 1, 'Kiiru'),
+('surf_ragu', 1, 3500, 1, 1, 1, 'Raafje'),
+('surf_raidboss_beta2', 3, 3500, 1, 1, 1, 'Kotton'),
+('surf_rainbow', 2, 3500, 1, 1, 1, 'Xenophenous'),
+('surf_rainbow_adventure', 1, 3500, 1, 1, 1, 'Astro & Kmart Team Member'),
+('surf_rampe', 1, 3500, 1, 1, 1, 'Activeed'),
+('surf_rands_njv', 4, 3500, 1, 1, 1, 'Monkeywithagun'),
+('surf_raphaello', 7, 3500, 1, 1, 1, 'Krealington'),
+('surf_rapid_njv', 3, 3500, 1, 1, 1, 'Ch!ll3'),
+('surf_raq', 2, 3500, 1, 1, 1, 'RAQ'),
+('surf_raq2', 2, 3500, 1, 1, 1, 'RAQ'),
+('surf_rat', 2, 3500, 1, 1, 1, 'Rathe'),
+('surf_ravine_go', 2, 3500, 1, 1, 1, 'FriendlyChemist'),
+('surf_razer_final', 3, 3500, 1, 1, 1, 'Compact'),
+('surf_reactor_go', 3, 3500, 1, 1, 1, 'Kujoen'),
+('surf_rebel_resistance_final4_swg', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_rebel_resistance_njv', 1, 3500, 1, 1, 1, 'Arcangel845'),
+('surf_rebel_scaz_csgo', 1, 3500, 1, 1, 1, 'Scaz.zaf'),
+('surf_reblis_final', 3, 3500, 1, 1, 1, 'Crystal'),
+('surf_redemption_b1', 4, 3500, 1, 1, 1, 'Sangre'),
+('surf_reflex', 2, 3500, 1, 1, 1, 'Cthulu'),
+('surf_refraxis', 3, 3500, 1, 1, 1, 'ChiChiN'),
+('surf_remeanian', 5, 3500, 1, 1, 1, 'FPS God'),
+('surf_replicant', 6, 3500, 1, 1, 1, 'Spy Complex'),
+('surf_reprise', 1, 4000, 1, 1, 1, 'TeMP'),
+('surf_reprise_h', 6, 3500, 1, 1, 1, 'TeMP, Arxxy, Bocuma'),
+('surf_republeague', 1, 3500, 1, 1, 1, 'BRNDMORE'),
+('surf_research', 2, 3500, 1, 1, 1, 'Sacricx & Headshot'),
+('surf_resort', 3, 5000, 1, 1, 1, 'WALL-E'),
+('surf_resort_jk_fix', 2, 3500, 1, 1, 1, 'WALL-E'),
+('surf_resource', 4, 3500, 1, 1, 1, 'Biji'),
+('surf_restart', 2, 3500, 1, 1, 1, 'BOI'),
+('surf_retroartz', 3, 3500, 1, 1, 1, 'Razersurf'),
+('surf_retry', 3, 3500, 1, 1, 1, 'iodaN^'),
+('surf_reveal', 1, 3500, 1, 1, 1, 'Saigar'),
+('surf_revolution', 5, 3500, 1, 1, 1, 'Kahvo'),
+('surf_reytx', 1, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_rez', 2, 3500, 1, 1, 1, 'Xbmann'),
+('surf_rez2', 4, 3500, 1, 1, 1, 'Xbmann'),
+('surf_rgb', 4, 3500, 1, 1, 1, 'Mrdeadguy34'),
+('surf_ridge_tweets', 1, 3500, 1, 1, 1, 'Andrew'),
+('surf_ripper', 3, 3500, 1, 1, 1, 'JackTheStripper'),
+('surf_riva', 2, 3500, 1, 1, 1, 'R1vaa'),
+('surf_road', 1, 3500, 1, 1, 1, 'Chmilk'),
+('surf_road_to_hell', 1, 3500, 1, 1, 1, 'SkariZ^'),
+('surf_rocco', 2, 3500, 1, 1, 1, 'FPS God'),
+('surf_rocco_v2', 2, 3500, 1, 1, 1, 'FPS God'),
+('surf_rolly', 4, 3500, 1, 1, 1, 'Klemix_RU'),
+('surf_roman', 4, 3500, 1, 1, 1, 'Horsefeathers'),
+('surf_rooftopsedge', 2, 3500, 1, 1, 1, 'Kingkurtis'),
+('surf_rooftopsv2', 1, 3500, 1, 1, 1, 'Koga73'),
+('surf_rookie2', 1, 3500, 1, 1, 1, 'Wiuuuh'),
+('surf_rookie_fix', 1, 3500, 1, 1, 1, 'Kiiru'),
+('surf_roomservice', 2, 3500, 1, 1, 1, 'GUINN355'),
+('surf_roomservice_2', 2, 3500, 1, 1, 1, 'GUINN355'),
+('surf_roomservice_3', 3, 3500, 1, 1, 1, 'GUINN355'),
+('surf_rope', 2, 3500, 1, 1, 1, 'Nitropath'),
+('surf_royal', 6, 3500, 1, 1, 1, 'Synx'),
+('surf_royal_ez', 5, 3500, 1, 1, 1, 'N/A');
+INSERT INTO `ck_maptiermappers` (`mapname`, `tier`, `maxvelocity`, `announcerecord`, `gravityfix`, `ranked`, `mapper`) VALUES
+('surf_rst', 4, 3500, 1, 1, 1, 'Synx'),
+('surf_rstar', 4, 3500, 1, 1, 1, 'COUNTERWEIGHT'),
+('surf_rtv_2', 4, 3500, 1, 1, 1, 'Ghost1648928'),
+('surf_rubiks_cube', 4, 3500, 1, 1, 1, 'juvee'),
+('surf_runewords', 4, 3500, 1, 1, 1, 'Biji'),
+('surf_runewords2', 4, 3500, 1, 1, 1, 'Biji'),
+('surf_runewords2_lod', 4, 3500, 1, 1, 1, 'Biji'),
+('surf_runner', 1, 3500, 1, 1, 1, 'Koga73'),
+('surf_rustic', 5, 3500, 1, 1, 1, 'Juxtapo'),
+('surf_rustic_v2', 4, 3500, 1, 1, 1, 'Juxtapo'),
+('surf_sacrifice', 4, 3500, 1, 1, 1, 'Spree'),
+('surf_salient', 5, 3500, 1, 1, 1, 'Collab'),
+('surf_salient2', 6, 3500, 1, 1, 1, 'Collab'),
+('surf_salvador', 2, 3500, 1, 1, 1, 'iNooVa'),
+('surf_salvation', 5, 3500, 1, 1, 1, 'Danger'),
+('surf_salvia', 4, 3500, 1, 1, 1, 'Pires'),
+('surf_sanctuary', 2, 3500, 1, 1, 1, 'Benchmarked'),
+('surf_sandbrick', 3, 3500, 1, 1, 1, 'Vay, HypestaR'),
+('surf_sanding', 2, 3500, 1, 1, 1, 'Compact'),
+('surf_sandman', 5, 3500, 1, 1, 1, 'Sandman'),
+('surf_sandman_v2', 5, 3500, 1, 1, 1, 'ArcticPanda'),
+('surf_sandsmile', 2, 3500, 1, 1, 1, '★ Wingshot ★'),
+('surf_sandstorm2', 3, 3500, 1, 1, 1, 'ArcticPanda'),
+('surf_sandtrap', 2, 3500, 1, 1, 1, 'ArcticPanda'),
+('surf_sandtrap2', 2, 10000, 1, 1, 1, 'ArcticPanda'),
+('surf_sand_world', 3, 3500, 1, 1, 1, 'Marxes'),
+('surf_sanguine', 3, 3500, 1, 1, 1, 'Krealington'),
+('surf_sapiens', 2, 3500, 1, 1, 1, 'Legeshq'),
+('surf_satellite_fix', 1, 3500, 1, 1, 1, 'Biji, iNooVa'),
+('surf_saturday_fix', 2, 3500, 1, 1, 1, 'iamsupaman'),
+('surf_savant_njv', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_saya', 2, 3500, 1, 1, 1, 'Kasumi ^3'),
+('surf_SA_gao_v1', 1, 3500, 1, 1, 1, '#Fartshit'),
+('surf_scarlet', 3, 3500, 1, 1, 1, 'PrisonNightmare'),
+('surf_school_kzg', 1, 3500, 1, 1, 1, 'Sid'),
+('surf_schwifty', 1, 3500, 1, 1, 1, 'Googee '),
+('surf_scientist', 3, 3500, 1, 1, 1, 'ApeXe'),
+('surf_sci_fi', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_scorch_go', 2, 3500, 1, 1, 1, 'Ver'),
+('surf_scrub', 2, 3500, 1, 1, 1, 'Xen'),
+('surf_sc_colours', 3, 3500, 1, 1, 1, 'sC'),
+('surf_sc_essence_v2_njv', 3, 3500, 1, 1, 1, 'sC'),
+('surf_se7en', 4, 3500, 1, 1, 1, 'SONICSOUR'),
+('surf_seasons', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_seasons_fixed', 2, 3500, 1, 1, 1, 'God Damnit Nappa'),
+('surf_seaworld_fix', 2, 3500, 1, 1, 1, 'Hulda'),
+('surf_sea_horse_sea_hell', 1, 3500, 1, 1, 1, 'Novaki'),
+('surf_secluded', 5, 3500, 1, 1, 1, 'PrisonNightmare'),
+('surf_second', 3, 3500, 1, 1, 1, 'Not_a_zombie'),
+('surf_selenka', 5, 3500, 1, 1, 1, 'DangerHSW'),
+('surf_semesterbreak_fix', 2, 3500, 1, 1, 1, 'Sam'),
+('surf_sempar_njv', 3, 3500, 1, 1, 1, 'Seme'),
+('surf_sensation', 4, 3500, 1, 1, 1, 'Billy & Sangre'),
+('surf_sensation_beta_v3', 2, 3500, 1, 1, 1, 'Kova'),
+('surf_sentient', 3, 3500, 1, 1, 1, 'TeMP'),
+('surf_sequoia', 3, 3500, 1, 1, 1, 'Maz64'),
+('surf_seraph', 5, 3500, 1, 1, 1, 'Cyber'),
+('surf_serenegarden', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_serenity', 3, 3500, 1, 1, 1, 'Hardex'),
+('surf_serenity2', 4, 3500, 1, 1, 1, 'Hardex'),
+('surf_sewers', 4, 3500, 1, 1, 1, 'Monkeywithagun'),
+('surf_sexellence2', 2, 3500, 1, 1, 1, 'Florida Man'),
+('surf_sexplizooimed', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_sexyartz_njv', 4, 3500, 1, 1, 1, 'Razersurf'),
+('surf_sh', 3, 3500, 1, 1, 1, 'Nano'),
+('surf_shady', 2, 3500, 1, 1, 1, 'Sanguine'),
+('surf_shady_h', 4, 3500, 1, 1, 1, 'Sanguine'),
+('surf_shambles', 4, 3500, 1, 1, 1, 'Nmroxy'),
+('surf_shit_v3', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_shodan', 6, 3500, 1, 1, 1, 'Spy Complex'),
+('surf_shoria', 4, 3500, 1, 1, 1, 'Razersurf'),
+('surf_shrug2', 4, 3500, 1, 1, 1, 'Shizangle'),
+('surf_sideflick_v2', 2, 3500, 1, 1, 1, 'Oatneil'),
+('surf_simple_v1b', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_simpsons_go_rc2', 1, 3500, 1, 1, 1, 'The-Goose'),
+('surf_simpsons_refix', 1, 3500, 1, 1, 1, 'The-Goose'),
+('surf_singletons_njv', 1, 3500, 1, 1, 1, 'AdamRH'),
+('surf_sinister2', 6, 3500, 1, 1, 1, 'Collab'),
+('surf_sinister_evil', 6, 3500, 1, 1, 1, 'RambJoe'),
+('surf_sinsane2_fix', 7, 3500, 1, 1, 1, 'Not_a_zombie'),
+('surf_sinsane_ez', 3, 3500, 1, 1, 1, 'Mbopferkuch'),
+('surf_sinsane_ksf', 6, 3500, 1, 1, 1, 'b0at'),
+('surf_sippysip', 4, 3500, 1, 1, 1, 'Syncronyze'),
+('surf_sirius', 3, 10000, 1, 1, 1, 'Granis'),
+('surf_si_fa', 2, 3500, 1, 1, 1, 'TempSo'),
+('surf_skeelee', 1, 3500, 1, 1, 1, 'Skeeleetraver'),
+('surf_sketchy', 3, 3500, 1, 1, 1, 'Gorange Ninja'),
+('surf_skill8', 4, 3500, 1, 1, 1, 'Monkeywithagun'),
+('surf_skill8_e', 3, 3500, 1, 1, 1, 'Monkeywithagun'),
+('surf_skill8_h', 6, 3500, 1, 1, 1, 'Monkeywithagun'),
+('surf_skill8_m', 4, 3500, 1, 1, 1, 'Monkeywithagun'),
+('surf_skipalot', 2, 3500, 1, 1, 1, 'EICHHOERNCHEN'),
+('surf_skyborn', 2, 3500, 1, 1, 1, 'Koga73'),
+('surf_skyfall_final', 4, 3500, 1, 1, 1, 'Exxe'),
+('surf_skyflow', 5, 3500, 1, 1, 1, 'ins-ane'),
+('surf_skyscrapers', 1, 3500, 1, 1, 1, 'Noobre'),
+('surf_sky_ages', 3, 3500, 1, 1, 1, 'Helix'),
+('surf_slob', 2, 3500, 1, 1, 1, 'Sam'),
+('surf_slob2', 3, 3500, 1, 1, 1, 'Sam'),
+('surf_slobs', 3, 3500, 1, 1, 1, 'Sam'),
+('surf_sluice2', 4, 3500, 1, 1, 1, 'Razersurf'),
+('surf_sluice_final', 4, 3500, 1, 1, 1, 'Razersurf'),
+('surf_smaragd', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_smezone', 1, 3500, 1, 1, 1, 'Francastor'),
+('surf_smile_njv', 3, 3500, 1, 1, 1, 'Compact'),
+('surf_smule', 1, 3500, 1, 1, 1, 'Smule'),
+('surf_snowslide', 2, 3500, 1, 1, 1, 'JorisCeoen'),
+('surf_sodacity', 1, 3500, 1, 1, 1, 'Kingkurtis'),
+('surf_solace', 6, 3500, 1, 1, 1, 'Sam'),
+('surf_something_serious', 3, 3500, 1, 1, 1, 'Inverted Moongoat'),
+('surf_something_v1', 2, 3500, 1, 1, 1, 'Yvng Chester'),
+('surf_soothe', 1, 3500, 1, 1, 1, 'Ndoman3807'),
+('surf_sorbat', 2, 3500, 1, 1, 1, 'Kaliumsorbat'),
+('surf_sos', 2, 3500, 1, 1, 1, 'Koga73'),
+('surf_southpark_refix', 1, 3500, 1, 1, 1, 'CrookedK3ANO'),
+('surf_spacejam', 2, 3500, 1, 1, 1, 'Juxtapo'),
+('surf_spaces', 4, 3500, 1, 1, 1, 'Cpt. Hopi'),
+('surf_spaceship_ksf', 3, 3500, 1, 1, 1, 'Darck'),
+('surf_spacewalk', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_spectra', 6, 10000, 1, 1, 1, 'Hork'),
+('surf_spectre', 2, 3500, 1, 1, 1, 'Rathe'),
+('surf_spectrum_njv', 3, 3500, 1, 1, 1, 'SKAR'),
+('surf_spike', 1, 3500, 1, 1, 1, 'Granis'),
+('surf_spindrop', 1, 3500, 1, 1, 1, 'Olliembm'),
+('surf_spindrop_hard', 3, 3500, 1, 1, 1, 'Olliembm'),
+('surf_squarestyle', 2, 3500, 1, 1, 1, 'Jappedk'),
+('surf_squirrelsonvacation', 1, 3500, 1, 1, 1, 'EICHHOERNCHEN'),
+('surf_stagejuan_ksf', 3, 3500, 1, 1, 1, 'Inverted Moongoat'),
+('surf_standard', 2, 3500, 1, 1, 1, 'Axelelele'),
+('surf_starfire_csgo', 2, 3500, 1, 1, 1, 'Ver'),
+('surf_stargaze_csgo', 3, 3500, 1, 1, 1, 'Ver'),
+('surf_static', 3, 3500, 1, 1, 1, 'GodOwner'),
+('surf_stepbystep', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_stick', 3, 3500, 1, 1, 1, 'M3rl1n'),
+('surf_stickybutt_alpha', 4, 3500, 1, 1, 1, 'Roosta & Panzer'),
+('surf_stitched', 5, 3500, 1, 1, 1, 'Masog'),
+('surf_stoneage', 5, 3500, 1, 1, 1, 'b0at'),
+('surf_stonework', 4, 3500, 1, 1, 1, 'Mr. Cow'),
+('surf_stonework2', 4, 3500, 1, 1, 1, 'Mr. Cow'),
+('surf_stonework3', 5, 3500, 1, 1, 1, 'Mr. Cow'),
+('surf_stonework4', 6, 3500, 1, 1, 1, 'Mr. Cow'),
+('surf_stonks', 2, 3500, 1, 1, 1, 'Hardex'),
+('surf_strafe', 3, 3500, 1, 1, 1, 'Masog'),
+('surf_strike', 5, 3500, 1, 1, 1, 'Spree'),
+('surf_subway', 3, 3500, 1, 1, 1, 'PretzL'),
+('surf_summer', 2, 3500, 1, 1, 1, 'Collab'),
+('surf_summit', 1, 5000, 1, 1, 1, 'Phurix'),
+('surf_sunday', 3, 5000, 1, 1, 1, 'iamsupaman'),
+('surf_sundown_njv', 2, 3500, 1, 1, 1, 'Skittl35'),
+('surf_sungam', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_sunnyhappylove', 2, 3500, 1, 1, 1, 'Streebree'),
+('surf_sunset2', 4, 3500, 1, 1, 1, 'Exither'),
+('surf_sunset_njv', 4, 3500, 1, 1, 1, 'Exither'),
+('surf_sup', 3, 3500, 1, 1, 1, 'WALL-E'),
+('surf_superbia', 1, 3500, 1, 1, 1, 'Seynethic'),
+('surf_superbia_new', 1, 3500, 1, 1, 1, 'Seynethic'),
+('surf_superduperm80s', 1, 3500, 1, 1, 1, 'PowerfulBacon'),
+('surf_surfsup', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_surprise', 2, 3500, 1, 1, 1, 'Wiuuuh'),
+('surf_swagtoast', 4, 3500, 1, 1, 1, 'WALL-E'),
+('surf_sylvan', 3, 3500, 1, 1, 1, 'Sagan'),
+('surf_symbiosis', 4, 3500, 1, 1, 1, 'Quensis'),
+('surf_synada', 4, 3500, 1, 1, 1, 'Hesuka'),
+('surf_syria', 2, 3500, 1, 1, 1, 'Razersurf'),
+('surf_syria_again', 6, 3500, 1, 1, 1, 'Razersurf'),
+('surf_systemlost_wr', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_s_t_a_t_i_o_n', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_tabasco', 1, 3500, 1, 1, 1, 'Rose'),
+('surf_take1', 3, 3500, 1, 1, 1, 'Monkeywithagun'),
+('surf_taq_njv', 4, 3500, 1, 1, 1, 'Monkeywithagun'),
+('surf_technique', 5, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_teho_v1', 3, 3500, 1, 1, 1, 'Teho'),
+('surf_telstar', 3, 3500, 1, 1, 1, 'Kompile'),
+('surf_tempest', 3, 3500, 1, 1, 1, 'Hardex'),
+('surf_tempest2', 3, 3500, 1, 1, 1, 'Hardex'),
+('surf_temple_final', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_tenacious', 3, 3500, 1, 1, 1, 'Meowie'),
+('surf_tendies', 1, 3500, 1, 1, 1, 'Granis'),
+('surf_tensile_njv', 2, 3500, 1, 1, 1, 'Diealready'),
+('surf_tensor', 4, 3500, 1, 1, 1, 'Superbike'),
+('surf_tentacion', 3, 3500, 1, 1, 1, 'Crossdesu'),
+('surf_tentacion_boo', 3, 3500, 1, 1, 1, 'Crossdesu'),
+('surf_tenzo', 3, 3500, 1, 1, 1, 'Doggo'),
+('surf_tequila', 4, 3500, 1, 1, 1, 'ApeXe'),
+('surf_test', 4, 3500, 1, 1, 1, 'N/A'),
+('surf_testerino', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_thatsneat', 4, 3500, 1, 1, 1, 'Big Daddy'),
+('surf_the-hazard', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_thembrium_sns', 3, 3500, 1, 1, 1, 'Razersurf'),
+('surf_theme', 4, 3500, 1, 1, 1, 'Phurix'),
+('surf_thesteve', 5, 3500, 1, 1, 1, 'Eichhörnchen'),
+('surf_the_distance', 5, 3500, 1, 1, 1, 'CollabA'),
+('surf_the_forest', 2, 3500, 1, 1, 1, 'Jez'),
+('surf_the_gloaming_rat', 2, 3500, 1, 1, 1, 'Roosta'),
+('surf_the_lost_city', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_the_ofen', 1, 3500, 1, 1, 1, 'Ofen'),
+('surf_the_unexpected', 3, 3500, 1, 1, 1, 'Eichhörnchen'),
+('surf_the_web', 2, 3500, 1, 1, 1, 'Cuddly'),
+('surf_the_web_v2', 3, 3500, 1, 1, 1, 'Cuddly'),
+('surf_thicket', 2, 3500, 1, 1, 1, 'iNooVa'),
+('surf_thief_fix', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_third4', 2, 3500, 1, 1, 1, 'Captain Haddock'),
+('surf_this_njv', 4, 3500, 1, 1, 1, 'Bravesurf'),
+('surf_this_time', 2, 3500, 1, 1, 1, 'Titty Sprinkles'),
+('surf_timber', 2, 3500, 1, 1, 1, 'Kinder'),
+('surf_timewarp', 5, 3500, 1, 1, 1, 'Tioga060'),
+('surf_tioga060', 4, 3500, 1, 1, 1, 'Tioga060'),
+('surf_togo', 3, 3500, 1, 1, 1, 'Jongent123'),
+('surf_tomb_redone', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_toohard', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_toot', 3, 3500, 1, 1, 1, 'Tooticans'),
+('surf_torque', 3, 3500, 1, 1, 1, 'Sangre'),
+('surf_torque2_njv', 3, 3500, 1, 1, 1, 'Sangre'),
+('surf_torrent_njv_fix', 2, 3500, 1, 1, 1, 'Egan'),
+('surf_total_beginners_beta', 1, 3500, 1, 1, 1, 'Gorange'),
+('surf_training', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_trainingschool', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_trance_ksf', 1, 3500, 1, 1, 1, 'UZY'),
+('surf_tranquil', 2, 3500, 1, 1, 1, 'PrisonNightmare'),
+('surf_tranquility', 3, 3500, 1, 1, 1, 'Young Pen Griffey'),
+('surf_transient', 5, 3500, 1, 1, 1, 'Collab'),
+('surf_trapped', 5, 3500, 1, 1, 1, 'ArcticPanda'),
+('surf_trapped2', 4, 3500, 1, 1, 1, 'ArcticPanda'),
+('surf_trash', 1, 3500, 1, 1, 1, 'Myldero'),
+('surf_treasurehunt_go', 1, 3500, 1, 1, 1, 'The Frying Dutch Pan'),
+('surf_treefort', 5, 3500, 1, 1, 1, 'Collab'),
+('surf_treespam', 6, 3500, 1, 1, 1, 'Pand3mic'),
+('surf_trial', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_tricky_chaos', 4, 3500, 1, 1, 1, 'N/A'),
+('surf_triggered', 4, 3500, 1, 1, 1, 'Lody'),
+('surf_trihard', 4, 10000, 1, 1, 1, 'Sjom7e'),
+('surf_trinity', 4, 3500, 1, 1, 1, 'Der Geier'),
+('surf_trippy', 2, 3500, 1, 1, 1, 'Stealthgerbil'),
+('surf_tronia_njv', 3, 3500, 1, 1, 1, 'Sangre'),
+('surf_tronic_njv', 5, 3500, 1, 1, 1, 'Sangre'),
+('surf_tron_njv', 3, 3500, 1, 1, 1, 'PireS'),
+('surf_tropical', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_trump_beta1', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_trump_rc1', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_truth', 2, 3500, 1, 1, 1, '64mb'),
+('surf_tui_1', 1, 3500, 1, 1, 1, 'Tuitara'),
+('surf_tundra', 5, 3500, 1, 1, 1, 'Malt'),
+('surf_tundra_v2', 4, 3500, 1, 1, 1, 'Malt'),
+('surf_tunnel', 1, 3500, 1, 1, 1, 'Sjup'),
+('surf_turtle', 1, 3500, 1, 1, 1, 'Swaaaaag'),
+('surf_tuscany_go', 2, 3500, 1, 1, 1, 'Exxe'),
+('surf_tuxedo_csgo', 4, 3500, 1, 1, 1, 'Caksoso'),
+('surf_twilight', 2, 3500, 1, 1, 1, 'God Damnit Nappa'),
+('surf_two_colour', 3, 3500, 1, 1, 1, 'Maza51'),
+('surf_tycho', 5, 3500, 1, 1, 1, 'TaiKii'),
+('surf_ultimate', 4, 3500, 1, 1, 1, 'SpexiS'),
+('surf_ultimatum', 3, 3500, 1, 1, 1, 'Godowner'),
+('surf_underearth', 2, 3500, 1, 1, 1, 'Slasher/Hussa'),
+('surf_underneath', 3, 3500, 1, 1, 1, 'MOKKAMASTER'),
+('surf_underworld_go', 4, 3500, 1, 1, 1, 'Billy'),
+('surf_unknown', 2, 3500, 1, 1, 1, 'Gorange Ninja'),
+('surf_unnamed', 2, 3500, 1, 1, 1, 'Quark'),
+('surf_unraveled', 3, 3500, 1, 1, 1, 'Spy Complex'),
+('surf_unreal2', 5, 3500, 1, 1, 1, 'Hulda'),
+('surf_unreal_njv', 5, 3500, 1, 1, 1, 'Hulda'),
+('surf_unusual_njv', 5, 3500, 1, 1, 1, 'InC'),
+('surf_upryzingx', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_urban', 4, 3500, 1, 1, 1, 'Gorange Ninja'),
+('surf_utopia_night', 1, 10000, 1, 1, 1, 'Koga73'),
+('surf_utopia_njv', 1, 10000, 1, 1, 1, 'Panzer'),
+('surf_utopia_v3', 1, 10000, 1, 1, 1, 'Panzer'),
+('surf_val', 4, 3500, 1, 1, 1, 'Val'),
+('surf_vale', 4, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_vale2', 3, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_vale_fotg', 3, 3500, 1, 1, 1, 'Xtra_Festive'),
+('surf_valpect', 6, 3500, 1, 1, 1, 'CRASHFORT'),
+('surf_van', 1, 3500, 1, 1, 1, 'Saigar'),
+('surf_vast', 6, 3500, 1, 1, 1, 'Krealington'),
+('surf_vdl_training', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_vector_final', 4, 3500, 1, 1, 1, 'Lucky Charms'),
+('surf_vegetables', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_velianglium', 4, 3500, 1, 1, 1, 'Konstantinov'),
+('surf_velocity_nsf', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_vents', 4, 3500, 1, 1, 1, 'Forki'),
+('surf_verge', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_vgaport_go', 3, 3500, 1, 1, 1, 'Flip, YajiGod, Unknown'),
+('surf_vienna', 4, 3500, 1, 1, 1, 'ApeXe'),
+('surf_violet', 2, 3500, 1, 1, 1, 'Zolfeca'),
+('surf_vitun_rotta', 2, 3500, 1, 1, 1, 'TyostoKarry'),
+('surf_volcanic', 4, 3500, 1, 1, 1, 'Spy Complex'),
+('surf_volvic', 2, 3500, 1, 1, 1, 'iNooVa'),
+('surf_wahey', 4, 3500, 1, 1, 1, 'Joeyy'),
+('surf_warped', 4, 3500, 1, 1, 1, 'EICHHOERNCHEN'),
+('surf_wasteland2', 3, 3500, 1, 1, 1, 'Pyllytonttu'),
+('surf_water-run_b5_fix', 1, 3500, 1, 1, 1, 'Mario & Nutz'),
+('surf_water-run_banjo_skill', 1, 3500, 1, 1, 1, 'Mario & Nutz'),
+('surf_waterworks', 2, 3500, 1, 1, 1, 'Skittl35'),
+('surf_wazor', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_wew', 1, 10000, 1, 1, 1, 'Comrade Teammate'),
+('surf_wexo', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_whiteout', 2, 3500, 1, 1, 1, 'Phurix'),
+('surf_whitewall', 2, 3500, 1, 1, 1, 'N/A'),
+('surf_whoknows', 4, 3500, 1, 1, 1, 'Malt'),
+('surf_whoknows2', 4, 5000, 1, 1, 1, 'Malt'),
+('surf_whoknows3', 4, 5000, 1, 1, 1, 'Malt'),
+('surf_whynot', 6, 3500, 1, 1, 1, 'Juvee'),
+('surf_whynot2', 6, 3500, 1, 1, 1, 'Juvee'),
+('surf_wicked', 3, 3500, 1, 1, 1, 'Collab'),
+('surf_willy1', 1, 3500, 1, 1, 1, 'Saigar'),
+('surf_windrunner_final', 1, 3500, 1, 1, 1, 'Aust.Mon'),
+('surf_wisdom', 3, 3500, 1, 1, 1, 'Watti'),
+('surf_wizard', 3, 3500, 1, 1, 1, 'Biji'),
+('surf_wolf_final', 1, 3500, 1, 1, 1, 'Thebman8794'),
+('surf_woo', 1, 3500, 1, 1, 1, 'N/A'),
+('surf_woodhouse', 1, 3500, 1, 1, 1, 'Wingshot'),
+('surf_woodspec', 1, 3500, 1, 1, 1, 'Noxid'),
+('surf_wood_fix', 1, 3500, 1, 1, 1, 'Enjooi & System Error'),
+('surf_x', 4, 3500, 1, 1, 1, 'Helix'),
+('surf_x2_beta07', 4, 3500, 1, 1, 1, 'N/A'),
+('surf_xd', 3, 3500, 1, 1, 1, 'Granis'),
+('surf_xeno', 2, 3500, 1, 1, 1, 'Apergios'),
+('surf_xeno_v2_watermelon', 2, 3500, 1, 1, 1, 'Apergios'),
+('surf_xiv_blood', 2, 3500, 1, 1, 1, 'SmOoth123'),
+('surf_y', 4, 3500, 1, 1, 1, 'N/A'),
+('surf_yaaan', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_yay', 4, 3500, 1, 1, 1, 'Hulda'),
+('surf_year3000', 1, 3500, 1, 1, 1, 'Archangel'),
+('surf_yeet', 1, 3500, 1, 1, 1, 'Twat'),
+('surf_yellow', 3, 3500, 1, 1, 1, 'M_Lama'),
+('surf_yiff', 2, 3500, 1, 1, 1, 'TheCosmicWolf'),
+('surf_your_way', 3, 3500, 1, 1, 1, 'SkyppySDK'),
+('surf_z', 4, 3500, 1, 1, 1, 'N/A'),
+('surf_zbig2', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_zealand', 2, 3500, 1, 1, 1, 'XBMANN'),
+('surf_zeitgeist', 3, 3500, 1, 1, 1, 'Spy Complex'),
+('surf_zen', 6, 3500, 1, 1, 1, 'mr.25'),
+('surf_zen2', 6, 3500, 1, 1, 1, 'mr.25'),
+('surf_zenith', 2, 3500, 1, 1, 1, 'Sneakyyy'),
+('surf_zen_fix', 6, 3500, 1, 1, 1, 'mr.25'),
+('surf_zeonine_fix', 4, 3500, 1, 1, 1, 'Collab'),
+('surf_zion_njv', 3, 3500, 1, 1, 1, 'N/A'),
+('surf_zlash', 1, 3500, 1, 1, 1, 'shalz'),
+('surf_zoomathon', 1, 3500, 1, 1, 1, 'Sid'),
+('surf_zoomboys_csgo', 3, 5000, 1, 1, 1, 'Sid'),
+('surf_zor', 2, 10000, 1, 1, 1, 'pretzL');
+
+ALTER TABLE ck_maptier
+ADD mapper varchar(255) DEFAULT NULL;
+
+UPDATE ck_maptier mt
+SET mt.mapper = (
+ SELECT distinct m.mapper
+ FROM ck_maptiermappers m
+ WHERE m.mapname = mt.mapname
+);
+
+DROP table ck_maptiermappers;
\ No newline at end of file