in unloze zones fixing warnings and using onmapinit forward for initializing the global variable to be used by natives
This commit is contained in:
parent
79999ec8aa
commit
b57d4982c4
@ -1,7 +1,7 @@
|
||||
#pragma semicolon 1
|
||||
#define DEBUG
|
||||
#define PLUGIN_AUTHOR "jenz"
|
||||
#define PLUGIN_VERSION "1.8"
|
||||
#define PLUGIN_VERSION "1.9"
|
||||
#define g_dLength 400
|
||||
#define g_dIndex 65
|
||||
#include <sourcemod>
|
||||
@ -96,12 +96,13 @@ public Action allow_leaving_again(Handle hTimer, int Serial)
|
||||
int client;
|
||||
if ((client = GetClientFromSerial(Serial)) == 0)
|
||||
{
|
||||
return;
|
||||
return Plugin_Handled;
|
||||
}
|
||||
if (IsValidClient(client))
|
||||
{
|
||||
g_bClient_allowed_to_leave_again[client] = true;
|
||||
}
|
||||
return Plugin_Handled;
|
||||
}
|
||||
public Action Timer_alter_tables(Handle hTimer)
|
||||
{
|
||||
@ -109,6 +110,7 @@ public Action Timer_alter_tables(Handle hTimer)
|
||||
{
|
||||
startTimer();
|
||||
}
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
public void trigger_teleport(const char[] output, int entity_index, int client, float delay)
|
||||
@ -257,62 +259,95 @@ public void SQL_FinishedQuery(Database db, DBResultSet results, const char[] err
|
||||
delete data;
|
||||
}
|
||||
|
||||
//a mysql table can max have 64 keys attached to it without recompiling. Therefore dropping and attaching binary tree index on the given map start, map end,
|
||||
//PluginStart Database connection and PluginEnd.
|
||||
//Adding and removing indexes should be pretty cheap so creating/removing them for only the specific map should be ok
|
||||
//a mysql table can max have 64 keys attached to it without recompiling. Therefore dropping and attaching binary tree index on the given map start
|
||||
//also check that racezones actually exist before making a binary tree index
|
||||
//also handles if the column ends with just mapname or with mapnameS1, mapnameS2 etc etc
|
||||
//its only relevant for sourcemod scripting part, the java backend making rest endpoints uses a cache and does select * statements so it does not need indexing
|
||||
//2025: i eventually want to remake most of the race timer but i dont really have time. therefore i am changing this
|
||||
// with the simple assumption that the plugin only needs to index columns on main ze (port 27015) i will just skip deleting and creating indexes
|
||||
//for dev and ze2 server.
|
||||
public void AddBinarySearchIndex()
|
||||
{
|
||||
int i_port = GetConVarInt(FindConVar("hostport"));
|
||||
//only do stuff on ze
|
||||
if (i_port != 27015)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int race_zone_count = GetTotalRaceZones();
|
||||
int l_iZoneCount = unloze_zoneCount();
|
||||
int l_iZoneCount = unloze_zoneCount(); //need this to check if its one zone or actually two zones with a ZONE_PREFIX_RACE and ZONE_PREFIX_START
|
||||
|
||||
char sQuery[g_dLength];
|
||||
GetCurrentMap(g_cMapname, sizeof(g_cMapname));
|
||||
//if admins dont make dumb random zones without any meaning it works fine
|
||||
if (race_zone_count == 1 && l_iZoneCount == 1)
|
||||
//LogError("race_zone_count: %i. map: %s. l_iZoneCount: %i", race_zone_count, g_cMapname, l_iZoneCount);
|
||||
|
||||
//if admins dont make dumb random zones without any meaning it works fine probably(?)
|
||||
if (race_zone_count == 1 && l_iZoneCount == 1) //there is a ZONE_PREFIX_RACE and its also the only zone on the map.
|
||||
{
|
||||
Format(sQuery, sizeof(sQuery), "ALTER TABLE `zetimer_table_new` add INDEX if not exists `%s` (`%s`)", g_cMapname, g_cMapname);
|
||||
DataPack hDataPack = new DataPack();
|
||||
hDataPack.WriteString(sQuery);
|
||||
g_dDatabase.Query(SQL_FinishedQuery, sQuery, hDataPack, DBPrio_Normal);
|
||||
//LogError("Create index query: %s", sQuery);
|
||||
g_dDatabase.Query(SQL_FinishedQuery, sQuery, hDataPack, DBPrio_High);
|
||||
}
|
||||
else
|
||||
else if (race_zone_count > 0) //finally fixing the false created indexes.
|
||||
{
|
||||
for (int i = 1; i <= race_zone_count; i++)
|
||||
{
|
||||
Format(sQuery, sizeof(sQuery), "ALTER TABLE `zetimer_table_new` add INDEX if not exists `%sS%i` (`%sS%i`)", g_cMapname, i, g_cMapname, i);
|
||||
//LogError("Create index query iteration: %s", sQuery);
|
||||
DataPack hDataPack = new DataPack();
|
||||
hDataPack.WriteString(sQuery);
|
||||
g_dDatabase.Query(SQL_FinishedQuery, sQuery, hDataPack, DBPrio_Normal);
|
||||
g_dDatabase.Query(SQL_FinishedQuery, sQuery, hDataPack, DBPrio_High);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//if ze1 and ze2 both play the same map and one leaves the map then the other will not have index anymore, but otherwise its fine.
|
||||
//2025 edit: as said above its not great, will be kept however until the eventual remake of the racetimer.
|
||||
public void RemoveBinarySearchIndex()
|
||||
{
|
||||
int i_port = GetConVarInt(FindConVar("hostport"));
|
||||
//only do stuff on ze
|
||||
if (i_port != 27015)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//lazy change, just take all indexes from the table that are not the primary key. its what we care about.
|
||||
char sQuery[g_dLength];
|
||||
int race_zone_count = GetTotalRaceZones();
|
||||
int l_iZoneCount = unloze_zoneCount();
|
||||
GetCurrentMap(g_cMapname, sizeof(g_cMapname));
|
||||
if (race_zone_count == 1 && l_iZoneCount == 1)
|
||||
Format(sQuery, sizeof(sQuery), "SELECT `INDEX_NAME` FROM `information_schema`.`STATISTICS` WHERE `TABLE_SCHEMA` = 'unloze_racetimer_css' AND `TABLE_NAME` = 'zetimer_table_new' AND `INDEX_NAME` != 'PRIMARY'");
|
||||
DataPack hDataPack = new DataPack();
|
||||
hDataPack.WriteString(sQuery);
|
||||
g_dDatabase.Query(SQL_GetAllIndexes, sQuery, hDataPack, DBPrio_Normal);
|
||||
}
|
||||
|
||||
public void SQL_GetAllIndexes(Database db, DBResultSet results, const char[] error, DataPack data)
|
||||
{
|
||||
Format(sQuery, sizeof(sQuery), "ALTER TABLE `zetimer_table_new` drop INDEX if exists `%s`", g_cMapname);
|
||||
ResetPack(data);
|
||||
if (!db || strlen(error))
|
||||
{
|
||||
char sQuery[g_dLength];
|
||||
data.ReadString(sQuery, sizeof(sQuery));
|
||||
LogError("Query error in SQL_GetAllIndexes: %s", error);
|
||||
LogError("actual query: %s", sQuery);
|
||||
delete data;
|
||||
delete results;
|
||||
return;
|
||||
}
|
||||
delete data;
|
||||
|
||||
while (results.RowCount && results.FetchRow())
|
||||
{
|
||||
char index_name[256];
|
||||
results.FetchString(0, index_name, sizeof(index_name));
|
||||
//LogError("here mapname: %s", index_name);
|
||||
//just drop the indexes
|
||||
char sQuery[g_dLength];
|
||||
Format(sQuery, sizeof(sQuery), "ALTER TABLE `zetimer_table_new` drop INDEX if exists `%s`", index_name);
|
||||
DataPack hDataPack = new DataPack();
|
||||
hDataPack.WriteString(sQuery);
|
||||
g_dDatabase.Query(SQL_FinishedQuery, sQuery, hDataPack, DBPrio_Normal);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 1; i <= race_zone_count; i++)
|
||||
{
|
||||
Format(sQuery, sizeof(sQuery), "ALTER TABLE `zetimer_table_new` drop INDEX if exists `%sS%i`", g_cMapname, i);
|
||||
DataPack hDataPack = new DataPack();
|
||||
hDataPack.WriteString(sQuery);
|
||||
g_dDatabase.Query(SQL_FinishedQuery, sQuery, hDataPack, DBPrio_Normal);
|
||||
}
|
||||
}
|
||||
delete results;
|
||||
}
|
||||
|
||||
public void OnMapEnd()
|
||||
@ -1090,6 +1125,7 @@ public int MenuHandler1(Menu menu, MenuAction action, int param1, int param2)
|
||||
{
|
||||
if (action == MenuAction_End)
|
||||
delete menu;
|
||||
return 0;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
@ -1123,6 +1159,7 @@ public Action cmd_hideTimerHUD(int client, int args)
|
||||
SetClientCookie(client, g_hClientCookie, "1");
|
||||
PrintToChat(client, "Disabled timer HUD");
|
||||
} else { g_bHideTimer[client] = false; PrintToChat(client, "Enabled timer HUD"); SetClientCookie(client, g_hClientCookie, "0"); }
|
||||
return Plugin_Handled;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
@ -1203,6 +1240,7 @@ public int Stage_menu(Menu menu, MenuAction action, int client, int selection)
|
||||
{
|
||||
delete(menu);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
|
@ -90,6 +90,7 @@ public int Native_ZoneNameBasedOnIndex(Handle handler, int numParams)
|
||||
{
|
||||
int i = GetNativeCell(1);
|
||||
SetNativeString(2, g_cZones[i], sizeof(g_cZones), true);
|
||||
return 0;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose: Displayes zones
|
||||
@ -176,6 +177,7 @@ public int MenuHandler1(Menu menu, MenuAction action, int param1, int choice)
|
||||
{
|
||||
delete menu;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
@ -203,7 +205,7 @@ public Action MenuZoneCounter(int client)
|
||||
public int MenuHandler2(Menu menu, MenuAction action, int param1, int choice)
|
||||
{
|
||||
if (!IsValidClient(param1))
|
||||
return;
|
||||
return 0;
|
||||
float l_fMiddle[MAXZONES][3];
|
||||
float l_fMin1[MAXZONES][3], l_fMax1[MAXZONES][3];
|
||||
if (action == MenuAction_Select)
|
||||
@ -263,6 +265,7 @@ public int MenuHandler2(Menu menu, MenuAction action, int param1, int choice)
|
||||
//experimental
|
||||
g_iAdminSelectOpion[param1] = 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
@ -440,6 +443,7 @@ public int MenuEditExistingZones(Menu menu, MenuAction action, int param1, int c
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
@ -465,6 +469,7 @@ public Action cmd_menuFinishZone(int client)
|
||||
menu.AddItem("", "Restart new Zone");
|
||||
menu.ExitButton = true;
|
||||
menu.Display(client, 0);
|
||||
return Plugin_Handled;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
@ -494,6 +499,7 @@ public int MenuHandlerfinishzone(Menu menu, MenuAction action, int param1, int c
|
||||
cmd_menuFinishZone(param1);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose: simple say hook
|
||||
@ -792,6 +798,12 @@ public bool TraceFilter_NoClients(int entity, int contentsMask, any data)
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose: Mapstart
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void OnMapInit()
|
||||
{
|
||||
resetZones();
|
||||
ReadZoneFile(); //loading zones a bit earlier for the natives sake.
|
||||
}
|
||||
|
||||
public void OnMapStart()
|
||||
{
|
||||
g_bAdminNewZone = false;
|
||||
|
Loading…
Reference in New Issue
Block a user