Add Shavit_OnWRDeleted

This commit is contained in:
shavitush 2016-07-23 14:31:35 +03:00
parent c0f6883ca5
commit 3286ddcd1d
3 changed files with 47 additions and 2 deletions

View File

@ -149,6 +149,7 @@ Rankings **(NEW!)**
- [x] Recalculate points for every record on the current map when a ROOT admin changes the point value for it. (retroactive!)
- [x] Add natives. `float Shavit_GetPoints(int client)` `int Shavit_GetRank(int client)` `void Shavit_GetMapValues(float &points, float &idealtime)`
- [ ] Add native that checks the total amount of players with over 0 points.
- [ ] Remove deleted records from `playerpoints`.
Web Interface
--

View File

@ -374,6 +374,15 @@ forward void Shavit_OnFinish_Post(int client, BhopStyle style, float time, int j
*/
forward void Shavit_OnWorldRecord(int client, BhopStyle style, float time, int jumps);
/**
* Called when an admin deletes a WR.
*
* @param style Style the record was done on.
* @param id Record ID. -1 if mass deletion.
* @noreturn
*/
forward void Shavit_OnWRDeleted(BhopStyle style, int id);
/**
* Called when a player's timer paused.
*

View File

@ -39,6 +39,7 @@ bool gB_Rankings = false;
// forwards
Handle gH_OnWorldRecord = null;
Handle gH_OnFinish_Post = null;
Handle gH_OnWRDeleted = null;
// database handle
Database gH_SQL = null;
@ -114,6 +115,7 @@ public void OnPluginStart()
// forwards
gH_OnWorldRecord = CreateGlobalForward("Shavit_OnWorldRecord", ET_Event, Param_Cell, Param_Cell, Param_Cell, Param_Cell);
gH_OnFinish_Post = CreateGlobalForward("Shavit_OnFinish_Post", ET_Event, Param_Cell, Param_Cell, Param_Cell, Param_Cell);
gH_OnWRDeleted = CreateGlobalForward("Shavit_OnWRDeleted", ET_Event, Param_Cell, Param_Cell);
// WR command
RegConsoleCmd("sm_wr", Command_WorldRecord, "Usage: sm_wr [map]");
@ -465,6 +467,22 @@ public int MenuHandler_DeleteAll(Menu m, MenuAction action, int param1, int para
return 0;
}
for(int i = 0; i < MAX_STYLES; i++)
{
if(gI_StyleProperties[i] & STYLE_UNRANKED)
{
continue;
}
if(gF_WRTime[i] != 0.0)
{
Call_StartForward(gH_OnWRDeleted);
Call_PushCell(i);
Call_PushCell(-1);
Call_Finish();
}
}
char[] sQuery = new char[256];
FormatEx(sQuery, 256, "DELETE FROM %splayertimes WHERE map = '%s';", gS_MySQLPrefix, gS_Map);
@ -621,16 +639,33 @@ public int DeleteConfirm_Handler(Menu m, MenuAction action, int param1, int para
{
char[] info = new char[16];
m.GetItem(param2, info, 16);
int iRecordID = StringToInt(info);
if(StringToInt(info) == -1)
if(iRecordID == -1)
{
Shavit_PrintToChat(param1, "Aborted deletion.");
return 0;
}
for(int i = 0; i < MAX_STYLES; i++)
{
if(gI_StyleProperties[i] & STYLE_UNRANKED || gI_WRRecordID[i] != iRecordID)
{
continue;
}
if(gF_WRTime[i] != 0.0)
{
Call_StartForward(gH_OnWRDeleted);
Call_PushCell(i);
Call_PushCell(iRecordID);
Call_Finish();
}
}
char[] sQuery = new char[256];
FormatEx(sQuery, 256, "DELETE FROM %splayertimes WHERE id = '%s';", gS_MySQLPrefix, info);
FormatEx(sQuery, 256, "DELETE FROM %splayertimes WHERE id = %d;", gS_MySQLPrefix, iRecordID);
gH_SQL.Query(DeleteConfirm_Callback, sQuery, GetClientSerial(param1), DBPrio_High);
}