remove vel2d from stagetimes and separate stage time wr and pb tables

This commit is contained in:
rtldg 2021-05-06 02:18:43 +00:00
parent cdc0c651b9
commit 2873cbe422

View File

@ -40,16 +40,9 @@ enum struct wrcache_t
float fWRs[STYLE_LIMIT]; float fWRs[STYLE_LIMIT];
} }
enum struct stagetimepb_t
{
float fTime;
float fVel2D;
}
enum struct stagetimewr_t enum struct stagetimewr_t
{ {
float fTime; float fTime;
float fVel2D;
int iAuth; int iAuth;
char sName[MAX_NAME_LENGTH]; char sName[MAX_NAME_LENGTH];
} }
@ -105,8 +98,8 @@ chatstrings_t gS_ChatStrings;
// stage times (wrs/pbs) // stage times (wrs/pbs)
stagetimewr_t gA_StageWR[STYLE_LIMIT][TRACKS_SIZE][MAX_STAGES]; stagetimewr_t gA_StageWR[STYLE_LIMIT][TRACKS_SIZE][MAX_STAGES];
ArrayList gA_StagePB[MAXPLAYERS+1][STYLE_LIMIT][TRACKS_SIZE]; // stagetimepb_t ArrayList gA_StagePB[MAXPLAYERS+1][STYLE_LIMIT][TRACKS_SIZE];
stagetimepb_t gA_StageTimes[MAXPLAYERS+1][MAX_STAGES]; float gA_StageTimes[MAXPLAYERS+1][MAX_STAGES];
public Plugin myinfo = public Plugin myinfo =
{ {
@ -520,7 +513,7 @@ void UpdateWRCache(int client = -1)
} }
FormatEx(sQuery, sizeof(sQuery), FormatEx(sQuery, sizeof(sQuery),
"SELECT style, track, auth, stage, MIN(time), vel2d FROM `%sstagetimes` WHERE map = '%s' GROUP BY style, track, stage;", "SELECT style, track, auth, stage, time FROM `%sstagetimeswr` WHERE map = '%s';",
gS_MySQLPrefix, gS_Map); gS_MySQLPrefix, gS_Map);
gH_SQL.Query(SQL_UpdateWRStageTimes_Callback, sQuery); gH_SQL.Query(SQL_UpdateWRStageTimes_Callback, sQuery);
@ -597,7 +590,6 @@ public void SQL_UpdateWRStageTimes_Callback(Database db, DBResultSet results, co
stagetimewr_t cache; stagetimewr_t cache;
cache.fTime = results.FetchFloat(4); cache.fTime = results.FetchFloat(4);
cache.fVel2D = results.FetchFloat(5);
gA_StageWR[style][track][stage] = cache; gA_StageWR[style][track][stage] = cache;
} }
@ -815,14 +807,14 @@ public int Native_GetStagePB(Handle plugin, int numParams)
int track = GetNativeCell(2); int track = GetNativeCell(2);
int style = GetNativeCell(3); int style = GetNativeCell(3);
int stage = GetNativeCell(4); int stage = GetNativeCell(4);
stagetimepb_t pb; float pb;
if (gA_StagePB[client][style][track] != null) if (gA_StagePB[client][style][track] != null)
{ {
gA_StagePB[client][style][track].GetArray(stage, pb); pb = gA_StagePB[client][style][track].Get(stage);
} }
return view_as<int>(pb.fTime); return view_as<int>(pb);
} }
public void SQL_DeleteMap_Callback(Database db, DBResultSet results, const char[] error, any data) public void SQL_DeleteMap_Callback(Database db, DBResultSet results, const char[] error, any data)
@ -2166,13 +2158,13 @@ void SQL_DBConnect()
if(gB_MySQL) if(gB_MySQL)
{ {
FormatEx(sQuery, 1024, FormatEx(sQuery, sizeof(sQuery),
"CREATE TABLE IF NOT EXISTS `%splayertimes` (`id` INT NOT NULL AUTO_INCREMENT, `auth` INT, `map` VARCHAR(128), `time` FLOAT, `jumps` INT, `style` TINYINT, `date` INT, `strafes` INT, `sync` FLOAT, `points` FLOAT NOT NULL DEFAULT 0, `track` TINYINT NOT NULL DEFAULT 0, `perfs` FLOAT DEFAULT 0, `completions` SMALLINT DEFAULT 1, PRIMARY KEY (`id`), INDEX `map` (`map`, `style`, `track`, `time`), INDEX `auth` (`auth`, `date`, `points`), INDEX `time` (`time`), CONSTRAINT `%spt_auth` FOREIGN KEY (`auth`) REFERENCES `%susers` (`auth`) ON UPDATE CASCADE ON DELETE CASCADE) ENGINE=INNODB;", "CREATE TABLE IF NOT EXISTS `%splayertimes` (`id` INT NOT NULL AUTO_INCREMENT, `auth` INT, `map` VARCHAR(128), `time` FLOAT, `jumps` INT, `style` TINYINT, `date` INT, `strafes` INT, `sync` FLOAT, `points` FLOAT NOT NULL DEFAULT 0, `track` TINYINT NOT NULL DEFAULT 0, `perfs` FLOAT DEFAULT 0, `completions` SMALLINT DEFAULT 1, PRIMARY KEY (`id`), INDEX `map` (`map`, `style`, `track`, `time`), INDEX `auth` (`auth`, `date`, `points`), INDEX `time` (`time`), CONSTRAINT `%spt_auth` FOREIGN KEY (`auth`) REFERENCES `%susers` (`auth`) ON UPDATE CASCADE ON DELETE CASCADE) ENGINE=INNODB;",
gS_MySQLPrefix, gS_MySQLPrefix, gS_MySQLPrefix); gS_MySQLPrefix, gS_MySQLPrefix, gS_MySQLPrefix);
} }
else else
{ {
FormatEx(sQuery, 1024, FormatEx(sQuery, sizeof(sQuery),
"CREATE TABLE IF NOT EXISTS `%splayertimes` (`id` INTEGER PRIMARY KEY, `auth` INT, `map` VARCHAR(128), `time` FLOAT, `jumps` INT, `style` TINYINT, `date` INT, `strafes` INT, `sync` FLOAT, `points` FLOAT NOT NULL DEFAULT 0, `track` TINYINT NOT NULL DEFAULT 0, `perfs` FLOAT DEFAULT 0, `completions` SMALLINT DEFAULT 1, CONSTRAINT `%spt_auth` FOREIGN KEY (`auth`) REFERENCES `%susers` (`auth`) ON UPDATE CASCADE ON DELETE CASCADE);", "CREATE TABLE IF NOT EXISTS `%splayertimes` (`id` INTEGER PRIMARY KEY, `auth` INT, `map` VARCHAR(128), `time` FLOAT, `jumps` INT, `style` TINYINT, `date` INT, `strafes` INT, `sync` FLOAT, `points` FLOAT NOT NULL DEFAULT 0, `track` TINYINT NOT NULL DEFAULT 0, `perfs` FLOAT DEFAULT 0, `completions` SMALLINT DEFAULT 1, CONSTRAINT `%spt_auth` FOREIGN KEY (`auth`) REFERENCES `%susers` (`auth`) ON UPDATE CASCADE ON DELETE CASCADE);",
gS_MySQLPrefix, gS_MySQLPrefix, gS_MySQLPrefix); gS_MySQLPrefix, gS_MySQLPrefix, gS_MySQLPrefix);
} }
@ -2180,7 +2172,12 @@ void SQL_DBConnect()
hTransaction.AddQuery(sQuery); hTransaction.AddQuery(sQuery);
FormatEx(sQuery, sizeof(sQuery), FormatEx(sQuery, sizeof(sQuery),
"CREATE TABLE IF NOT EXISTS `%sstagetimes` (`style` TINYINT NOT NULL, `track` TINYINT NOT NULL DEFAULT 0, `map` VARCHAR(128) NOT NULL, `stage` TINYINT NOT NULL, `auth` INT NOT NULL, `time` FLOAT NOT NULL, `vel2d` FLOAT NOT NULL, PRIMARY KEY (`style`, `track`, `auth`, `map`, `stage`))%s;", "CREATE TABLE IF NOT EXISTS `%sstagetimeswr` (`style` TINYINT NOT NULL, `track` TINYINT NOT NULL DEFAULT 0, `map` VARCHAR(128) NOT NULL, `stage` TINYINT NOT NULL, `auth` INT NOT NULL, `time` FLOAT NOT NULL, PRIMARY KEY (`style`, `track`, `map`, `stage`))%s;",
gS_MySQLPrefix, (gB_MySQL)? " ENGINE=INNODB":"");
hTransaction.AddQuery(sQuery);
FormatEx(sQuery, sizeof(sQuery),
"CREATE TABLE IF NOT EXISTS `%sstagetimespb` (`style` TINYINT NOT NULL, `track` TINYINT NOT NULL DEFAULT 0, `map` VARCHAR(128) NOT NULL, `stage` TINYINT NOT NULL, `auth` INT NOT NULL, `time` FLOAT NOT NULL, PRIMARY KEY (`style`, `track`, `auth`, `map`, `stage`))%s;",
gS_MySQLPrefix, (gB_MySQL)? " ENGINE=INNODB":""); gS_MySQLPrefix, (gB_MySQL)? " ENGINE=INNODB":"");
hTransaction.AddQuery(sQuery); hTransaction.AddQuery(sQuery);
@ -2279,43 +2276,37 @@ public void Shavit_OnFinish(int client, int style, float time, int jumps, int st
Shavit_PrintToChat(client, "old: %.01f new: %.01f", fOldWR, time); Shavit_PrintToChat(client, "old: %.01f new: %.01f", fOldWR, time);
#endif #endif
Transaction hTransaction = null; Transaction hTransaction = new Transaction();
char query[512];
FormatEx(query, sizeof(query),
"DELETE FROM `%sstagetimeswr` WHERE style = %d AND track = %d AND map = '%s';",
gS_MySQLPrefix, style, track, gS_Map
);
hTransaction.AddQuery(query);
for (int i = 0; i < MAX_STAGES; i++) for (int i = 0; i < MAX_STAGES; i++)
{ {
stagetimewr_t stagewr; stagetimewr_t stagewr;
stagewr.fTime = gA_StageTimes[client][i].fTime; stagewr.fTime = gA_StageTimes[client][i];
stagewr.fVel2D = gA_StageTimes[client][i].fVel2D; stagewr.iAuth = iSteamID;
stagewr.iAuth = iSteamID;
gA_StageWR[style][track][i] = stagewr; gA_StageWR[style][track][i] = stagewr;
if (gA_StageTimes[client][i].fTime == 0.0) if (stagewr.fTime == 0.0)
{ {
continue; continue;
} }
if (hTransaction == null)
{
hTransaction = new Transaction();
}
char query[512];
FormatEx(query, sizeof(query), FormatEx(query, sizeof(query),
"REPLACE INTO `%sstagetimes` (`style`, `track`, `map`, `auth`, `time`, `vel2d`, `stage`) VALUES (%d, %d, '%s', %d, %f, %f, %d);", "INSERT INTO `%sstagetimeswr` (`style`, `track`, `map`, `auth`, `time`, `stage`) VALUES (%d, %d, '%s', %d, %f, %d);",
gS_MySQLPrefix, style, track, gS_Map, iSteamID, gS_MySQLPrefix, style, track, gS_Map, iSteamID, stagewr.fTime, i
gA_StageTimes[client][i].fTime,
gA_StageTimes[client][i].fVel2D,
i
); );
hTransaction.AddQuery(query); hTransaction.AddQuery(query);
} }
if (hTransaction != null) gH_SQL.Execute(hTransaction, Trans_ReplaceStageTimes_Success, Trans_ReplaceStageTimes_Error, 0, DBPrio_High);
{
gH_SQL.Execute(hTransaction, Trans_ReplaceStageTimes_Success, Trans_ReplaceStageTimes_Error, 0, DBPrio_Low);
}
} }
int iRank = GetRankForTime(style, time, track); int iRank = GetRankForTime(style, time, track);
@ -2556,25 +2547,23 @@ public Action Shavit_OnStageMessage(int client, int stageNumber, char[] message,
int track = Shavit_GetClientTrack(client); int track = Shavit_GetClientTrack(client);
float stageTime = Shavit_GetClientTime(client); float stageTime = Shavit_GetClientTime(client);
float stageTimeWR = gA_StageWR[style][track][stageNumber].fTime; float stageTimeWR = gA_StageWR[style][track][stageNumber].fTime;
float fDifference = (stageTime - stageTimeWR);
float fSpeed[3]; gA_StageTimes[client][stageNumber] = stageTime;
GetEntPropVector(client, Prop_Data, "m_vecAbsVelocity", fSpeed);
gA_StageTimes[client][stageNumber].fVel2D = SquareRoot(Pow(fSpeed[0], 2.0) + Pow(fSpeed[1], 2.0));
gA_StageTimes[client][stageNumber].fTime = stageTime;
if (stageTimeWR == 0.0) if (stageTimeWR == 0.0)
{ {
fDifference = 0.0; return Plugin_Continue;
} }
float fDifference = (stageTime - stageTimeWR);
char sStageTime[16]; char sStageTime[16];
FormatSeconds(stageTime, sStageTime, 16); FormatSeconds(stageTime, sStageTime, 16);
char sDifference[16]; char sDifference[16];
FormatSeconds(fDifference, sDifference, 16); FormatSeconds(fDifference, sDifference, 16);
if(fDifference > 0.0) if(fDifference >= 0.0)
{ {
Format(sDifference, sizeof(sDifference), "+%s", sDifference); Format(sDifference, sizeof(sDifference), "+%s", sDifference);
} }
@ -2584,14 +2573,14 @@ public Action Shavit_OnStageMessage(int client, int stageNumber, char[] message,
return Plugin_Handled; return Plugin_Handled;
} }
public void Shavit_OnRestart(int client, int track) public Action Shavit_OnStart(int client, int track)
{ {
stagetimepb_t emptycache;
for (int i = 0; i < MAX_STAGES; i++) for (int i = 0; i < MAX_STAGES; i++)
{ {
gA_StageTimes[client][i] = emptycache; gA_StageTimes[client][i] = 0.0;
} }
return Plugin_Continue;
} }
int GetRecordAmount(int style, int track) int GetRecordAmount(int style, int track)