diff --git a/create_seasons.py b/create_seasons.py new file mode 100644 index 0000000..11c4c90 --- /dev/null +++ b/create_seasons.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +""" +Generate a given number of one month seasons. + +Use the `-n ` to specify the number of +seasons to add. + +Author: Sarrus - September 2022 +""" + +import mysql.connector +import os +from datetime import datetime +import argparse +from dotenv import load_dotenv + + +def main(seasons_to_add: int): + current_month = datetime.now().month + current_year = datetime.now().year + last_id = 0 + with mysql.connector.connect( + host=os.getenv("DB_HOST"), + user=os.getenv("DB_USER"), + passwd=os.getenv("DB_PASS"), + database=os.getenv("DB_NAME") + ) as db: + cursor = db.cursor() + cursor.execute( + "SELECT * FROM rankme_season_id WHERE season_id = ( SELECT MAX(season_id) FROM rankme_season_id );") + res = cursor.fetchone() + if res is not None: + last_id = int(res[0]) + current_month = res[2].month + current_year = res[2].year + for i in range(last_id+1, last_id+1+seasons_to_add): + start_date = datetime(current_year, current_month, 1, 0, 0, 1) + current_month += 1 + if current_month > 12: + current_month = 1 + current_year += 1 + end_date = datetime(current_year, current_month, 1, 0, 0, 0) + cursor.execute( + f"INSERT INTO `rankme_season_id` (`season_id`, `start_date`, `end_date`) VALUES ('{i}', '{start_date.isoformat()}', '{end_date.isoformat()}');") + db.commit() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument( + '-n', '--number', help="Number of seasons to add.", default=0, type=int) + args = parser.parse_args() + + load_dotenv() + + main(args.number) diff --git a/plugins/kento_rankme.smx b/plugins/kento_rankme.smx index 637caa9..2eec89b 100644 Binary files a/plugins/kento_rankme.smx and b/plugins/kento_rankme.smx differ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e84d791 Binary files /dev/null and b/requirements.txt differ diff --git a/scripting/include/kento_rankme/cmds.inc b/scripting/include/kento_rankme/cmds.inc index 19b2d6c..f6b1533 100644 --- a/scripting/include/kento_rankme/cmds.inc +++ b/scripting/include/kento_rankme/cmds.inc @@ -60,11 +60,11 @@ public Action CMD_ResetRank(int client, int args){ //ReplaceString(arg1,sizeof(arg1),"\"",""); char query[2000]; if(g_RankBy == 1){ - Format(query,sizeof(query),"DELETE FROM `%s` WHERE name='%s'",g_sSQLTable,sEscapeArg1); + Format(query,sizeof(query),"DELETE FROM `%s` WHERE name='%s'",g_sSQLTableGlobal,sEscapeArg1); } else if (g_RankBy == 0){ - Format(query,sizeof(query),"DELETE FROM `%s` WHERE steam='%s'",g_sSQLTable,sEscapeArg1); + Format(query,sizeof(query),"DELETE FROM `%s` WHERE steam='%s'",g_sSQLTableGlobal,sEscapeArg1); } else if (g_RankBy == 2){ - Format(query,sizeof(query),"DELETE FROM `%s` WHERE lastip='%s'",g_sSQLTable,sEscapeArg1); + Format(query,sizeof(query),"DELETE FROM `%s` WHERE lastip='%s'",g_sSQLTableGlobal,sEscapeArg1); } SQL_TQuery(g_hStatsDb,SQL_NothingCallback,query); LogAction(client,-1,"[RankMe]: Rank has been reset (%s)",arg1); @@ -97,7 +97,7 @@ public Action CMD_ResetRankAll(int client, int args){ return Plugin_Handled; char query[2000]; - Format(query,sizeof(query),"DELETE FROM `%s` WHERE 1=1",g_sSQLTable); + Format(query,sizeof(query),"DELETE FROM `%s` WHERE 1=1",g_sSQLTableGlobal); SQL_TQuery(g_hStatsDb,SQL_NothingCallback,query); LogAction(client,-1,"[RankMe]: All rank data has been reset"); @@ -128,21 +128,21 @@ public Action CMD_Purge(int client, int args){ } deletebefore = GetTime() - (StringToInt(arg1)*86400); char query[2000]; - Format(query,sizeof(query),"DELETE FROM `%s` WHERE lastconnect < '%d'",g_sSQLTable,deletebefore); + Format(query,sizeof(query),"DELETE FROM `%s` WHERE lastconnect < '%d'",g_sSQLTableGlobal,deletebefore); SQL_TQuery(g_hStatsDb,SQL_PurgeCallback,query); LogAction(client,-1,"[RankMe]: Purged rank (%s days inactivity)",arg1); CPrintToChat(client, "%s %T", MSG, "Purged",client); return Plugin_Handled; } -public void SQL_GetPlayersCallback(Handle owner, Handle hndl, const char[] error, any Datapack){ - if(hndl == INVALID_HANDLE) +public void SQL_GetPlayersSeasonCallback(Handle owner, Handle hndl, const char[] error, any Datapack){ + if(hndl == INVALID_HANDLE || !SQL_FetchRow(hndl)) { LogError("[RankMe] Query Fail: %s", error); PrintToServer(error); return; } - g_TotalPlayers =SQL_GetRowCount(hndl); + g_iTotalPlayersSeason = SQL_FetchInt(hndl, 0); } public Action CMD_TopWeapon(int client, int args){ @@ -229,7 +229,7 @@ public void SQL_TopWeaponCallback(Handle owner, Handle hndl, const char[] error, CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTOPWeapon(client,weapon,g_TotalPlayers-9); + ShowTOPWeapon(client,weapon,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -237,7 +237,7 @@ public void SQL_TopWeaponCallback(Handle owner, Handle hndl, const char[] error, Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio), MenuHandler_TopWeapon); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; @@ -350,7 +350,7 @@ public void SQL_TopCallback(Handle owner, Handle hndl, const char[] error, any D int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTOP(client,g_TotalPlayers-9); + ShowTOP(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -359,7 +359,7 @@ public void SQL_TopCallback(Handle owner, Handle hndl, const char[] error, any D Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_Top); float kdr; - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) @@ -469,7 +469,7 @@ public void SQL_TopHSCallback(Handle owner, Handle hndl, const char[] error, any int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTopHS(client,g_TotalPlayers-9); + ShowTopHS(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -477,7 +477,7 @@ public void SQL_TopHSCallback(Handle owner, Handle hndl, const char[] error, any Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopHS); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) @@ -582,7 +582,7 @@ public void SQL_TopKillsCallback(Handle owner, Handle hndl, const char[] error, int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTopKills(client,g_TotalPlayers-9); + ShowTopKills(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -590,7 +590,7 @@ public void SQL_TopKillsCallback(Handle owner, Handle hndl, const char[] error, Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopKills); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) @@ -695,7 +695,7 @@ public void SQL_TopDeathsCallback(Handle owner, Handle hndl, const char[] error, int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTopDeaths(client,g_TotalPlayers-9); + ShowTopDeaths(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -703,7 +703,7 @@ public void SQL_TopDeathsCallback(Handle owner, Handle hndl, const char[] error, Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio), MenuHandler_TopDeaths); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) @@ -813,7 +813,7 @@ public void SQL_TopAccCallback(Handle owner, Handle hndl, const char[] error, an int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTopAcc(client,g_TotalPlayers-9); + ShowTopAcc(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -821,7 +821,7 @@ public void SQL_TopAccCallback(Handle owner, Handle hndl, const char[] error, an Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopAcc); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); int shots; int hits; @@ -932,7 +932,7 @@ public void SQL_TopTimeCallback(Handle owner, Handle hndl, const char[] error, a int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTopTime(client,g_TotalPlayers-9); + ShowTopTime(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -940,7 +940,7 @@ public void SQL_TopTimeCallback(Handle owner, Handle hndl, const char[] error, a Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopTime); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; int time; @@ -1010,12 +1010,105 @@ public int MenuHandler_DoNothing(Menu menu, MenuAction action, int param1, int p } } -public Action CMD_Rank(int client, int args){ +public Action CMD_Rank_Global(int client, int args){ if(!g_bEnabled || client == 0 || !IsClientInGame(client)) return Plugin_Handled; //LogToFile("rankme.debug.log","\"sm_rank\" command called by client %d.",client); - if(g_aStats[client].KILLS < g_MinimalKills){ - CPrintToChat(client,"%s %T",MSG,"NotRanked",client,g_aStats[client].KILLS,g_MinimalKills); + if(g_aStatsGlobal[client].KILLS < g_MinimalKills){ + CPrintToChat(client,"%s %T",MSG,"NotRanked",client,g_aStatsGlobal[client].KILLS,g_MinimalKills); + return Plugin_Handled; + } + + // check cooldown + if(g_bShowRankAll && hRankTimer[client] != INVALID_HANDLE) + { + CPrintToChat(client,"%s %T",MSG,"RankCooldown",client); + return Plugin_Handled; + } + + char query[2000]; + MakeSelectQuery(query,sizeof(query), _, true); + + if(g_RankMode == 1) + Format(query,sizeof(query), "SELECT id,steam, name,lastip,1+(%s AND rankme.score > b.score) as `rank`,score FROM rankme b WHERE steam='%s';", query, g_aClientSteam[client]); + else if(g_RankMode == 2){ + if(g_bMysql) + Format(query,sizeof(query),"%s ORDER BY CAST(kills as DECIMAL)/CAST(Case when deaths=0 then 1 ELSE deaths END as DECIMAL) DESC, score DESC",query); + else + Format(query,sizeof(query),"%s ORDER BY CAST(kills as float)/CAST(Case when deaths=0 then 1 ELSE deaths END as float) DESC, score DESC",query); + } + SQL_TQuery(g_hStatsDb,SQL_RankCallback_Global,query,client); + return Plugin_Handled; +} + +public void SQL_RankCallback_Global(Handle owner, Handle hndl, const char[] error, any client){ + if(hndl == INVALID_HANDLE) + { + LogError("[RankMe] Query Fail: %s", error); + return; + } + if(client == 0 || !IsClientInGame(client)) + { + return; + } + + //LogToFile("rankme.debug.log","Rank SQL callback called by client %d.",client); + + char Name_receive[MAX_NAME_LENGTH]; + char Auth_receive[64]; + char Ip_receive[64]; + + int ikills = g_aStatsGlobal[client].KILLS; + int ideaths=g_aStatsGlobal[client].DEATHS; + + int deaths; + if(ideaths == 0) + deaths = 1; + else + deaths=ideaths; + + float kills = IntToFloat(ikills); + + if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) + { + SQL_FetchString(hndl,2,Name_receive,MAX_NAME_LENGTH); + SQL_FetchString(hndl,1,Auth_receive,64); + SQL_FetchString(hndl,3,Ip_receive,64); + int iRank = SQL_FetchInt(hndl, 4); + //if(DEBUGGING) PrintToServer("%d %s %s",i, Name_receive, Auth_receive); + //PrintToServer("%d %s %s",i, Name_receive, Auth_receive); + if((g_RankBy == 1 && StrEqual(Name_receive,g_aClientName[client],false)) || (g_RankBy == 0 && StrEqual(Auth_receive,g_aClientSteam[client],false)) || (g_RankBy == 2 && StrEqual(Ip_receive,g_aClientIp[client],false))){ + if(g_bShowRankAll) + { + for(int j = 1; j <= MaxClients;j++) + { + if(IsClientInGame(j)) + { + if(client == j || !hidechat[j]) + CPrintToChat(j,"%s %T",MSG,"IsRankedAtGlobal",j,g_aClientName[client],iRank,g_iTotalPlayersGlobal,g_aStatsGlobal[client].SCORE,g_aStatsGlobal[client].KILLS,g_aStatsGlobal[client].DEATHS,g_aStatsGlobal[client].ASSISTS,kills/deaths,g_aStatsGlobal[client].TK,g_aStatsGlobal[client].MVP); + if(g_fRankAllTimer > 0.0) hRankTimer[j] = CreateTimer(g_fRankAllTimer, KillRankAllTimer, j); + } + } + } + else + { + CPrintToChat(client,"%s %T",MSG,"IsRankedAtGlobal",client,g_aClientName[client],iRank,g_iTotalPlayersGlobal,g_aStatsGlobal[client].SCORE,g_aStatsGlobal[client].KILLS,g_aStatsGlobal[client].DEATHS,g_aStatsGlobal[client].ASSISTS,kills/deaths,g_aStatsGlobal[client].TK,g_aStatsGlobal[client].MVP); + } + } + } +} + +public Action CMD_Rank(int client, int args){ + if(!g_bEnabled || client == 0 || !IsClientInGame(client)) + { + #if DEBUGGING + PrintToServer("Player is not here"); + #endif + return Plugin_Handled; + } + //LogToFile("rankme.debug.log","\"sm_rank\" command called by client %d.",client); + if(g_aStatsSeason[client].KILLS < g_MinimalKills){ + CPrintToChat(client,"%s %T",MSG,"NotRanked",client,g_aStatsSeason[client].KILLS,g_MinimalKills); return Plugin_Handled; } @@ -1027,19 +1120,21 @@ public Action CMD_Rank(int client, int args){ } char query[2000]; - MakeSelectQuery(query,sizeof(query)); + MakeSelectQuery(query,sizeof(query), true, true); if(g_RankMode == 1) - Format(query,sizeof(query),"%s ORDER BY score DESC",query); + Format(query,sizeof(query), "SELECT id,steam, name,lastip,1+(%s AND rankme_season.score > b.score) as `rank`,score, season_id FROM rankme_season b WHERE steam='%s' AND season_id = %d;", query, g_aClientSteam[client], g_iSeasonID); else if(g_RankMode == 2){ if(g_bMysql) Format(query,sizeof(query),"%s ORDER BY CAST(kills as DECIMAL)/CAST(Case when deaths=0 then 1 ELSE deaths END as DECIMAL) DESC, score DESC",query); else Format(query,sizeof(query),"%s ORDER BY CAST(kills as float)/CAST(Case when deaths=0 then 1 ELSE deaths END as float) DESC, score DESC",query); } - - SQL_TQuery(g_hStatsDb,SQL_RankCallback,query,client); - return Plugin_Handled; + #if DEBUGGING + PrintToServer(query); + #endif + SQL_TQuery(g_hStatsDb,SQL_RankCallback,query,client); + return Plugin_Handled; } public void SQL_RankCallback(Handle owner, Handle hndl, const char[] error, any client){ @@ -1051,15 +1146,14 @@ public void SQL_RankCallback(Handle owner, Handle hndl, const char[] error, any if(client == 0 || !IsClientInGame(client)) return; //LogToFile("rankme.debug.log","Rank SQL callback called by client %d.",client); - int i; - g_TotalPlayers =SQL_GetRowCount(hndl); + //g_iTotalPlayersGlobal = SQL_GetRowCount(hndl); char Name_receive[MAX_NAME_LENGTH]; char Auth_receive[64]; char Ip_receive[64]; - int ikills = g_aStats[client].KILLS; - int ideaths=g_aStats[client].DEATHS; + int ikills = g_aStatsSeason[client].KILLS; + int ideaths=g_aStatsSeason[client].DEATHS; int deaths; if(ideaths == 0) @@ -1069,15 +1163,14 @@ public void SQL_RankCallback(Handle owner, Handle hndl, const char[] error, any float kills = IntToFloat(ikills); - while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) + if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) { - i++; SQL_FetchString(hndl,2,Name_receive,MAX_NAME_LENGTH); SQL_FetchString(hndl,1,Auth_receive,64); SQL_FetchString(hndl,3,Ip_receive,64); + int iRank = SQL_FetchInt(hndl, 4); // PrintToServer("%d %s %s",i, Name_receive, Auth_receive); if((g_RankBy == 1 && StrEqual(Name_receive,g_aClientName[client],false)) || (g_RankBy == 0 && StrEqual(Auth_receive,g_aClientSteam[client],false)) || (g_RankBy == 2 && StrEqual(Ip_receive,g_aClientIp[client],false))){ - if(g_bShowRankAll) { for(int j = 1; j <= MaxClients;j++) @@ -1085,16 +1178,15 @@ public void SQL_RankCallback(Handle owner, Handle hndl, const char[] error, any if(IsClientInGame(j)) { if(client == j || !hidechat[j]) - CPrintToChat(j,"%s %T",MSG,"IsRankedAt",j,g_aClientName[client],i,g_TotalPlayers,g_aStats[client].SCORE,g_aStats[client].KILLS,g_aStats[client].DEATHS,g_aStats[client].ASSISTS,kills/deaths,g_aStats[client].TK,g_aStats[client].MVP); + CPrintToChat(j,"%s %T",MSG,"IsRankedAtSeason",j,g_iSeasonID,g_aClientName[client],iRank,g_iTotalPlayersSeason,g_aStatsSeason[client].SCORE,g_aStatsSeason[client].KILLS,g_aStatsSeason[client].DEATHS,g_aStatsSeason[client].ASSISTS,kills/deaths,g_aStatsSeason[client].TK,g_aStatsSeason[client].MVP); if(g_fRankAllTimer > 0.0) hRankTimer[j] = CreateTimer(g_fRankAllTimer, KillRankAllTimer, j); } } } else { - CPrintToChat(client,"%s %T",MSG,"IsRankedAt",client,g_aClientName[client],i,g_TotalPlayers,g_aStats[client].SCORE,g_aStats[client].KILLS,g_aStats[client].DEATHS,g_aStats[client].ASSISTS,kills/deaths,g_aStats[client].TK,g_aStats[client].MVP); + CPrintToChat(client,"%s %T",MSG,"IsRankedAtSeason",client,g_iSeasonID,g_aClientName[client],iRank,g_iTotalPlayersSeason,g_aStatsSeason[client].SCORE,g_aStatsSeason[client].KILLS,g_aStatsSeason[client].DEATHS,g_aStatsSeason[client].ASSISTS,kills/deaths,g_aStatsSeason[client].TK,g_aStatsSeason[client].MVP); } - break; } } } @@ -1227,7 +1319,7 @@ public Action CMD_HitBox(int client, int args){ char temp[255]; int ihits; float hits; - ihits = g_aHitBox[client].Sum(); + ihits = g_aHitBoxGlobal[client].Sum(); char text[255]; if(ihits == 0) hits= 1.0; @@ -1236,19 +1328,19 @@ public Action CMD_HitBox(int client, int args){ Format(temp,sizeof(temp),"HitBox:\n"); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d (%.2f%%)\n","Head",client,g_aHitBox[client].HEAD,(g_aHitBox[client].HEAD/hits)*100); + Format(temp,sizeof(temp),"%T: %d (%.2f%%)\n","Head",client,g_aHitBoxGlobal[client].HEAD,(g_aHitBoxGlobal[client].HEAD/hits)*100); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d (%.2f%%)\n","Chest",client,g_aHitBox[client].CHEST,(g_aHitBox[client].CHEST/hits)*100); + Format(temp,sizeof(temp),"%T: %d (%.2f%%)\n","Chest",client,g_aHitBoxGlobal[client].CHEST,(g_aHitBoxGlobal[client].CHEST/hits)*100); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d (%.2f%%)\n","Stomach",client,g_aHitBox[client].STOMACH,(g_aHitBox[client].STOMACH/hits)*100); + Format(temp,sizeof(temp),"%T: %d (%.2f%%)\n","Stomach",client,g_aHitBoxGlobal[client].STOMACH,(g_aHitBoxGlobal[client].STOMACH/hits)*100); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d (%.2f%%)\n","LeftArm",client,g_aHitBox[client].LEFT_ARM,(g_aHitBox[client].LEFT_ARM/hits)*100); + Format(temp,sizeof(temp),"%T: %d (%.2f%%)\n","LeftArm",client,g_aHitBoxGlobal[client].LEFT_ARM,(g_aHitBoxGlobal[client].LEFT_ARM/hits)*100); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d (%.2f%%)\n","RightArm",client,g_aHitBox[client].RIGHT_ARM,(g_aHitBox[client].RIGHT_ARM/hits)*100); + Format(temp,sizeof(temp),"%T: %d (%.2f%%)\n","RightArm",client,g_aHitBoxGlobal[client].RIGHT_ARM,(g_aHitBoxGlobal[client].RIGHT_ARM/hits)*100); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d (%.2f%%)\n","LeftLeg",client,g_aHitBox[client].LEFT_LEG,(g_aHitBox[client].LEFT_LEG/hits)*100); + Format(temp,sizeof(temp),"%T: %d (%.2f%%)\n","LeftLeg",client,g_aHitBoxGlobal[client].LEFT_LEG,(g_aHitBoxGlobal[client].LEFT_LEG/hits)*100); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d (%.2f%%)","RightLeg",client,g_aHitBox[client].RIGHT_LEG,(g_aHitBox[client].RIGHT_LEG/hits)*100); + Format(temp,sizeof(temp),"%T: %d (%.2f%%)","RightLeg",client,g_aHitBoxGlobal[client].RIGHT_LEG,(g_aHitBoxGlobal[client].RIGHT_LEG/hits)*100); StrCat(text,sizeof(text),temp); panel.AddItem("",text); @@ -1261,9 +1353,9 @@ public Action CMD_WeaponMe(int client, int args){ if(!g_bEnabled || client == 0 || !IsClientInGame(client)) return Plugin_Handled; int weapons_a[42]; - g_aWeapons[client].GetData(weapons_a); + g_aWeaponsGlobal[client].GetData(weapons_a); // for(int a=0;a<42;a++){ - // weapons_a[a] = g_aWeapons[client][a]; + // weapons_a[a] = g_aWeaponsGlobal[client][a]; // } int weapons_b[42][2]; int index; @@ -1292,7 +1384,7 @@ public Action CMD_WeaponMe(int client, int args){ } Menu panel = CreateMenu(MenuHandler_DoNothing); - int ikills =g_aStats[client].KILLS; + int ikills =g_aStatsGlobal[client].KILLS; float hits; if(ikills == 0) @@ -1370,8 +1462,8 @@ public Action CMD_StatsMe2(int client, int args){ WritePackCell(hDatapack,1); - if(StringToInt(arg1[1]) > g_TotalPlayers) - Format(arg1,sizeof(arg1),"#%d",g_TotalPlayers); + if(StringToInt(arg1[1]) > g_iTotalPlayersGlobal) + Format(arg1,sizeof(arg1),"#%d",g_iTotalPlayersGlobal); Format(query,sizeof(query),"%s %s LIMIT %d, 1",query,order, StringToInt(arg1[1]) - 1); @@ -1499,7 +1591,7 @@ public void SQL_StatsMe2Callback(Handle owner, Handle hndl, const char[] error, if(i == 0) Format(temp,sizeof(temp),"%T: %i\n","Points",client,SQL_FetchInt(hndl,4)); else - Format(temp,sizeof(temp),"Rank: %i/%i %T: %i\n",i,g_TotalPlayers,"Points",client,SQL_FetchInt(hndl,4)); + Format(temp,sizeof(temp),"Rank: %i/%i %T: %i\n",i,g_iTotalPlayersGlobal,"Points",client,SQL_FetchInt(hndl,4)); StrCat(text,sizeof(text),temp); Format(temp,sizeof(temp),"%T KDR: %.2f\n","KillsDeathsAssists",client,ikills,ideaths,SQL_FetchInt(hndl,7),kills/deaths); StrCat(text,sizeof(text),temp); @@ -1592,11 +1684,11 @@ public void SQL_StatsMeCallback(Handle owner, Handle hndl, const char[] error, a return; int i; - g_TotalPlayers =SQL_GetRowCount(hndl); + //g_iTotalPlayersGlobal =SQL_GetRowCount(hndl); char Auth_receive[64]; char Name_receive[MAX_NAME_LENGTH]; char Ip_receive[64]; - if(g_aStats[client].KILLS >= g_MinimalKills){ + if(g_aStatsGlobal[client].KILLS >= g_MinimalKills){ while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) { @@ -1615,8 +1707,8 @@ public void SQL_StatsMeCallback(Handle owner, Handle hndl, const char[] error, a } Menu panel = CreateMenuEx(_,MenuHandler_DoNothing,MENU_ACTIONS_ALL); char text[512]; - int ikills = g_aStats[client].KILLS; - int ideaths=g_aStats[client].DEATHS; + int ikills = g_aStatsGlobal[client].KILLS; + int ideaths=g_aStatsGlobal[client].DEATHS; int deaths; if(ideaths == 0) deaths = 1; @@ -1624,75 +1716,75 @@ public void SQL_StatsMeCallback(Handle owner, Handle hndl, const char[] error, a deaths=ideaths; float kills = IntToFloat(ikills); int shots; - if(g_aStats[client].SHOTS == 0) + if(g_aStatsGlobal[client].SHOTS == 0) shots = 1; else - shots = g_aStats[client].SHOTS; + shots = g_aStatsGlobal[client].SHOTS; - int rounds = g_aStats[client].ROUNDS_TR + g_aStats[client].ROUNDS_CT; - if((g_aStats[client].ROUNDS_TR ==0) && (g_aStats[client].ROUNDS_CT == 0)) + int rounds = g_aStatsGlobal[client].ROUNDS_TR + g_aStatsGlobal[client].ROUNDS_CT; + if((g_aStatsGlobal[client].ROUNDS_TR ==0) && (g_aStatsGlobal[client].ROUNDS_CT == 0)) { rounds = 1; } - int idamage = g_aStats[client].DAMAGE; + int idamage = g_aStatsGlobal[client].DAMAGE; float damage = IntToFloat(idamage); char temp[255]; Format(temp,sizeof(temp),"- %T\n","BasicStats",client); StrCat(text,sizeof(text),temp); if(i == 0) - Format(temp,sizeof(temp),"%T: %i [%i]\n","Points",client,g_aStats[client].SCORE,g_aSession[client].SCORE); + Format(temp,sizeof(temp),"%T: %i [%i]\n","Points",client,g_aStatsGlobal[client].SCORE,g_aSession[client].SCORE); else - Format(temp,sizeof(temp),"Rank: %i/%i %T: %i [%i]\n",i,SQL_GetRowCount(hndl),"Points",client,g_aStats[client].SCORE,g_aSession[client].SCORE); + Format(temp,sizeof(temp),"Rank: %i/%i %T: %i [%i]\n",i,SQL_GetRowCount(hndl),"Points",client,g_aStatsGlobal[client].SCORE,g_aSession[client].SCORE); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T KDR: %.2f\n","KillsDeathsAssists",client,ikills,ideaths,g_aStats[client].ASSISTS,kills/deaths); + Format(temp,sizeof(temp),"%T KDR: %.2f\n","KillsDeathsAssists",client,ikills,ideaths,g_aStatsGlobal[client].ASSISTS,kills/deaths); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d \n","AssistTeams", client, g_aStats[client].ATK); + Format(temp,sizeof(temp),"%T: %d \n","AssistTeams", client, g_aStatsGlobal[client].ATK); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d %T: %d %T: %d\n","Headshots",client,g_aStats[client].HEADSHOTS,"Suicides",client,g_aStats[client].SUICIDES,"TKs",client,g_aStats[client].TK); + Format(temp,sizeof(temp),"%T: %d %T: %d %T: %d\n","Headshots",client,g_aStatsGlobal[client].HEADSHOTS,"Suicides",client,g_aStatsGlobal[client].SUICIDES,"TKs",client,g_aStatsGlobal[client].TK); StrCat(text,sizeof(text),temp); Format(temp,sizeof(temp),"%T: %d %T: %.2f %T: %.2f\n","Damage", client, idamage,"KPR", client, kills/rounds, "DPR", client, damage/rounds); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d \n","First Bloods", client, g_aStats[client].FB); + Format(temp,sizeof(temp),"%T: %d \n","First Bloods", client, g_aStatsGlobal[client].FB); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d %T: %d\n","Thru Smokes", client, g_aStats[client].SMOKE, "Flashed Kills", client, g_aStats[client].BLIND); + Format(temp,sizeof(temp),"%T: %d %T: %d\n","Thru Smokes", client, g_aStatsGlobal[client].SMOKE, "Flashed Kills", client, g_aStatsGlobal[client].BLIND); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d\n","AssistFlashes", client, g_aStats[client].AF); + Format(temp,sizeof(temp),"%T: %d\n","AssistFlashes", client, g_aStatsGlobal[client].AF); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d\n","AssistTeamFlashes", client, g_aStats[client].ATF); + Format(temp,sizeof(temp),"%T: %d\n","AssistTeamFlashes", client, g_aStatsGlobal[client].ATF); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d\n","Wallbangs", client, g_aStats[client].WALL); + Format(temp,sizeof(temp),"%T: %d\n","Wallbangs", client, g_aStatsGlobal[client].WALL); StrCat(text,sizeof(text),temp); panel.AddItem("",text); text=""; Format(temp,sizeof(temp),"- %T\n","RoundStats",client); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d/%d %T: %d/%d %T: %d\n%T: %d %T: %d %T: %d \n","TRWins",client,g_aStats[client].TR_WIN,g_aStats[client].ROUNDS_TR,"CTWins",client,g_aStats[client].CT_WIN,g_aStats[client].ROUNDS_CT,"MVPs",client,g_aStats[client].MVP, "MatchWins", client, g_aStats[client].MATCH_WIN, "MatchDraws", client, g_aStats[client].MATCH_DRAW, "MatchLosses", client, g_aStats[client].MATCH_LOSE); + Format(temp,sizeof(temp),"%T: %d/%d %T: %d/%d %T: %d\n%T: %d %T: %d %T: %d \n","TRWins",client,g_aStatsGlobal[client].TR_WIN,g_aStatsGlobal[client].ROUNDS_TR,"CTWins",client,g_aStatsGlobal[client].CT_WIN,g_aStatsGlobal[client].ROUNDS_CT,"MVPs",client,g_aStatsGlobal[client].MVP, "MatchWins", client, g_aStatsGlobal[client].MATCH_WIN, "MatchDraws", client, g_aStatsGlobal[client].MATCH_DRAW, "MatchLosses", client, g_aStatsGlobal[client].MATCH_LOSE); StrCat(text,sizeof(text),temp); panel.AddItem("",text); text=""; Format(temp,sizeof(temp),"- %T\n","HitStats",client); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d %T: %d %T: %.2f%%\n","Shots",client,shots,"Hits",client,g_aStats[client].HITS,"Accuracy",client,IntToFloat(g_aStats[client].HITS)/shots*100); + Format(temp,sizeof(temp),"%T: %d %T: %d %T: %.2f%%\n","Shots",client,shots,"Hits",client,g_aStatsGlobal[client].HITS,"Accuracy",client,IntToFloat(g_aStatsGlobal[client].HITS)/shots*100); StrCat(text,sizeof(text),temp); panel.AddItem("",text); text=""; Format(temp,sizeof(temp),"- %T\n","NoScopeStats",client); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d %T: %.2fm \n","NoScopes",client,g_aStats[client].NS, "Farthest", client, IntToFloat(g_aStats[client].NSD)/100 ); + Format(temp,sizeof(temp),"%T: %d %T: %.2fm \n","NoScopes",client,g_aStatsGlobal[client].NS, "Farthest", client, IntToFloat(g_aStatsGlobal[client].NSD)/100 ); StrCat(text,sizeof(text),temp); panel.AddItem("",text); text=""; Format(temp,sizeof(temp),"- %T\n","BombHostagesStats",client); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d %T: %d %T: %d\n","PlantedBombs",client,g_aStats[client].C4_PLANTED,"ExplodedBombs",client,g_aStats[client].C4_EXPLODED,"DefusedBombs",client,g_aStats[client].C4_DEFUSED); + Format(temp,sizeof(temp),"%T: %d %T: %d %T: %d\n","PlantedBombs",client,g_aStatsGlobal[client].C4_PLANTED,"ExplodedBombs",client,g_aStatsGlobal[client].C4_EXPLODED,"DefusedBombs",client,g_aStatsGlobal[client].C4_DEFUSED); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d \n","RescuedHostages",client,g_aStats[client].HOSTAGES_RESCUED); + Format(temp,sizeof(temp),"%T: %d \n","RescuedHostages",client,g_aStatsGlobal[client].HOSTAGES_RESCUED); StrCat(text,sizeof(text),temp); panel.AddItem("",text); text=""; @@ -1700,7 +1792,7 @@ public void SQL_StatsMeCallback(Handle owner, Handle hndl, const char[] error, a if(g_bVipEnabled){ Format(temp,sizeof(temp),"- %T\n","VIPStats",client); StrCat(text,sizeof(text),temp); - Format(temp,sizeof(temp),"%T: %d/%d %T: %d\n","VIPEscapes",client,g_aStats[client].VIP_ESCAPED,g_aStats[client].VIP_PLAYED,"VIPsKilled",client,g_aStats[client].VIP_KILLED); + Format(temp,sizeof(temp),"%T: %d/%d %T: %d\n","VIPEscapes",client,g_aStatsGlobal[client].VIP_ESCAPED,g_aStatsGlobal[client].VIP_PLAYED,"VIPsKilled",client,g_aStatsGlobal[client].VIP_KILLED); StrCat(text,sizeof(text),temp); panel.AddItem("",text); text=""; @@ -1708,7 +1800,7 @@ public void SQL_StatsMeCallback(Handle owner, Handle hndl, const char[] error, a Format(temp,sizeof(temp),"- %T\n","OtherStats",client); StrCat(text,sizeof(text),temp); - int time = g_aStats[client].CONNECTED + GetTime()-g_aSession[client].CONNECTED; + int time = g_aStatsGlobal[client].CONNECTED + GetTime()-g_aSession[client].CONNECTED; int hours = RoundToFloor(time/3600.0); time = time-(hours*3600); @@ -1757,7 +1849,7 @@ public void SQL_NextCallback(Handle owner, Handle hndl, const char[] error, any return; int i; int a; - g_TotalPlayers =SQL_GetRowCount(hndl); + //g_iTotalPlayersGlobal =SQL_GetRowCount(hndl); char next_players_name[10][MAX_NAME_LENGTH]; int next_players_score[10]; bool dobreak; @@ -1811,7 +1903,7 @@ public void SQL_NextCallback(Handle owner, Handle hndl, const char[] error, any } for(int b=0;b<=max;b++){ if(!StrEqual(next_players_name[b],"",false)){ - Format(temp,sizeof(temp),"- %s (%d) => +%d\n",next_players_name[b],next_players_score[b],next_players_score[b]-g_aStats[client].SCORE); + Format(temp,sizeof(temp),"- %s (%d) => +%d\n",next_players_name[b],next_players_score[b],next_players_score[b]-g_aStatsGlobal[client].SCORE); StrCat(text,500,temp); } @@ -1830,11 +1922,11 @@ public Action CMD_ResetOwnRank(int client, int args){ if(g_RankBy == 1){ char sEscape[MAX_NAME_LENGTH*2+1]; SQL_EscapeString(g_hStatsDb,g_aClientName[client],sEscape,sizeof(sEscape)); - Format(query,sizeof(query),"DELETE FROM `%s` WHERE name='%s'",g_sSQLTable,sEscape); + Format(query,sizeof(query),"DELETE FROM `%s` WHERE name='%s'",g_sSQLTableGlobal,sEscape); } else if(g_RankBy == 0){ - Format(query,sizeof(query),"DELETE FROM `%s` WHERE steam='%s'",g_sSQLTable,g_aClientSteam[client]); + Format(query,sizeof(query),"DELETE FROM `%s` WHERE steam='%s'",g_sSQLTableGlobal,g_aClientSteam[client]); } else if(g_RankBy == 2){ - Format(query,sizeof(query),"DELETE FROM `%s` WHERE lastip='%s'",g_sSQLTable,g_aClientIp[client]); + Format(query,sizeof(query),"DELETE FROM `%s` WHERE lastip='%s'",g_sSQLTableGlobal,g_aClientIp[client]); } SQL_TQuery(g_hStatsDb,SQL_NothingCallback,query); LogAction(client,-1,"[RankMe]: Reseted own rank (%s - %s - %s)",g_aClientName[client],g_aClientSteam[client],g_aClientIp[client]); @@ -2177,7 +2269,7 @@ public void SQL_TopAssistsCallback(Handle owner, Handle hndl, const char[] error int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTopAssists(client,g_TotalPlayers-9); + ShowTopAssists(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -2185,7 +2277,7 @@ public void SQL_TopAssistsCallback(Handle owner, Handle hndl, const char[] error Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopAssists); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) @@ -2289,7 +2381,7 @@ public void SQL_TopTKCallback(Handle owner, Handle hndl, const char[] error, any int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTopTK(client,g_TotalPlayers-9); + ShowTopTK(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -2297,7 +2389,7 @@ public void SQL_TopTKCallback(Handle owner, Handle hndl, const char[] error, any Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopTK); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) @@ -2403,7 +2495,7 @@ public void SQL_TopMVPCallback(Handle owner, Handle hndl, const char[] error, an int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTopMVP(client,g_TotalPlayers-9); + ShowTopMVP(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -2411,7 +2503,7 @@ public void SQL_TopMVPCallback(Handle owner, Handle hndl, const char[] error, an Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopMVP); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) @@ -2517,7 +2609,7 @@ public void SQL_TopDamageCallback(Handle owner, Handle hndl, const char[] error, int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTopDamage(client,g_TotalPlayers-9); + ShowTopDamage(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -2525,7 +2617,7 @@ public void SQL_TopDamageCallback(Handle owner, Handle hndl, const char[] error, Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopDamage); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) @@ -2634,7 +2726,7 @@ public void SQL_TopKDRCallback(Handle owner, Handle hndl, const char[] error, an int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTOPKDR(client,g_TotalPlayers-9); + ShowTOPKDR(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -2643,7 +2735,7 @@ public void SQL_TopKDRCallback(Handle owner, Handle hndl, const char[] error, an Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopKDR); float kdr; - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) @@ -2754,7 +2846,7 @@ public void SQL_TopPointsCallback(Handle owner, Handle hndl, const char[] error, int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTOPPoints(client,g_TotalPlayers-9); + ShowTOPPoints(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -2763,7 +2855,7 @@ public void SQL_TopPointsCallback(Handle owner, Handle hndl, const char[] error, Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopPoints); float kdr; - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) @@ -2875,7 +2967,7 @@ public void SQL_TopFBCallback(Handle owner, Handle hndl, const char[] error, any int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTOPFB(client,g_TotalPlayers-9); + ShowTOPFB(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -2883,7 +2975,7 @@ public void SQL_TopFBCallback(Handle owner, Handle hndl, const char[] error, any Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopFB); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) @@ -2984,7 +3076,7 @@ public void SQL_TopNSCallback(Handle owner, Handle hndl, const char[] error, any int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTOPNS(client,g_TotalPlayers-9); + ShowTOPNS(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -2992,7 +3084,7 @@ public void SQL_TopNSCallback(Handle owner, Handle hndl, const char[] error, any Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopNS); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) @@ -3093,7 +3185,7 @@ public void SQL_TopNSDCallback(Handle owner, Handle hndl, const char[] error, an int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTOPNSD(client,g_TotalPlayers-9); + ShowTOPNSD(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -3101,7 +3193,7 @@ public void SQL_TopNSDCallback(Handle owner, Handle hndl, const char[] error, an Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopNSD); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) @@ -3203,7 +3295,7 @@ public void SQL_TopBlindCallback(Handle owner, Handle hndl, const char[] error, int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTOPBlind(client,g_TotalPlayers-9); + ShowTOPBlind(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -3211,7 +3303,7 @@ public void SQL_TopBlindCallback(Handle owner, Handle hndl, const char[] error, Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopBlind); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) @@ -3312,7 +3404,7 @@ public void SQL_TopSmokeCallback(Handle owner, Handle hndl, const char[] error, int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTOPSmoke(client,g_TotalPlayers-9); + ShowTOPSmoke(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -3320,7 +3412,7 @@ public void SQL_TopSmokeCallback(Handle owner, Handle hndl, const char[] error, Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopSmoke); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) @@ -3421,7 +3513,7 @@ public void SQL_TopWallCallback(Handle owner, Handle hndl, const char[] error, a int at = ReadPackCell(Datapack); CloseHandle(Datapack); if(!SQL_HasResultSet(hndl) || SQL_GetRowCount(hndl) ==0){ - ShowTOPWall(client,g_TotalPlayers-9); + ShowTOPWall(client,g_iTotalPlayersGlobal-9); return; } char name[256]; @@ -3429,7 +3521,7 @@ public void SQL_TopWallCallback(Handle owner, Handle hndl, const char[] error, a Menu menu = CreateMenuEx(GetMenuStyleHandle(MenuStyle_Radio),MenuHandler_TopWall); - Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_TotalPlayers); + Format(temp,sizeof(temp)," %T\n","Showing",client,at+1,at+10,g_iTotalPlayersGlobal); menu.SetTitle(""); char sBuffer[200]; while(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) diff --git a/scripting/include/kento_rankme/cvars.inc b/scripting/include/kento_rankme/cvars.inc index 73bc63d..0f311be 100644 --- a/scripting/include/kento_rankme/cvars.inc +++ b/scripting/include/kento_rankme/cvars.inc @@ -74,7 +74,9 @@ ConVar g_cvarRankCache; ConVar g_cvarRankMode; ConVar g_cvarRankbots; ConVar g_cvarResetOwnRank; -ConVar g_cvarSQLTable; +ConVar g_cvarSQLTableGlobal; +ConVar g_cvarSQLTableSeason; +ConVar g_cvarSQLTableSeasonID; ConVar g_cvarShowBotsOnRank; ConVar g_cvarShowRankAll; ConVar g_cvarVipEnabled; @@ -217,7 +219,9 @@ void CreateCvars() g_cvarGatherStats = CreateConVar("rankme_gather_stats", "1", "Gather Statistics (a.k.a count points)? (turning this off won't disallow to see the stats already gathered) 1 = true 0 = false", _, true, 0.0, true, 1.0); g_cvarDaysToNotShowOnRank = CreateConVar("rankme_days_to_not_show_on_rank", "0", "Days inactive to not be shown on rank? X = days 0 = off", _, true, 0.0); g_cvarRankMode = CreateConVar("rankme_rank_mode", "1", "Rank by what? 1 = by points 2 = by KDR ", _, true, 1.0, true, 2.0); - g_cvarSQLTable = CreateConVar("rankme_sql_table", "rankme", "The name of the table that will be used. (Max: 100)"); + g_cvarSQLTableGlobal = CreateConVar("rankme_sql_table", "rankme", "The name of the table that will be used. (Max: 100)"); + g_cvarSQLTableSeason = CreateConVar("rankme_sql_table_season", "rankme_season", "The name of the table that will be used for seasons (Max: 100)"); + g_cvarSQLTableSeasonID = CreateConVar("rankme_sql_table_season_id", "rankme_season_id", "The name of the table that will be used for seasons' id (Max: 100)"); g_cvarChatTriggers = CreateConVar("rankme_chat_triggers", "1", "Enable (non-command) chat triggers. (e.g: rank, statsme, top) Recommended to be set to 0 when running with EventScripts for avoiding double responses. 1 = true 0 = false", _, true, 0.0, true, 1.0); g_cvarPointsMvpCt = CreateConVar("rankme_points_mvp_ct", "1", "How many points a CT got for being the MVP?", _, true, 0.0); g_cvarPointsMvpTr = CreateConVar("rankme_points_mvp_tr", "1", "How many points a TR got for being the MVP?", _, true, 0.0); @@ -299,7 +303,9 @@ void CreateCvars() g_cvarDaysToNotShowOnRank.AddChangeHook(OnConVarChanged); g_cvarRankMode.AddChangeHook(OnConVarChanged); g_cvarMysql.AddChangeHook(OnConVarChanged_MySQL); - g_cvarSQLTable.AddChangeHook(OnConVarChanged_SQLTable); + g_cvarSQLTableGlobal.AddChangeHook(OnConVarChanged_SQLTable); + g_cvarSQLTableSeason.AddChangeHook(OnConVarChanged_SQLTable); + g_cvarSQLTableSeasonID.AddChangeHook(OnConVarChanged_SQLTable); g_cvarChatTriggers.AddChangeHook(OnConVarChanged); g_cvarPointsMvpCt.AddChangeHook(OnConVarChanged); g_cvarPointsMvpTr.AddChangeHook(OnConVarChanged); @@ -686,7 +692,9 @@ public void OnConVarChanged(Handle convar, const char[] oldValue, const char[] n if (g_bQueryPlayerCount && g_hStatsDb != INVALID_HANDLE) { char query[10000]; - MakeSelectQuery(query, sizeof(query)); - SQL_TQuery(g_hStatsDb, SQL_GetPlayersCallback, query); + MakeSelectQuery(query, sizeof(query), true, true); + SQL_TQuery(g_hStatsDb, SQL_GetPlayersSeasonCallback, query); + MakeSelectQuery(query, sizeof(query), false, true); + SQL_TQuery(g_hStatsDb, SQL_GetPlayersGlobalCallback, query); } } \ No newline at end of file diff --git a/scripting/include/kento_rankme/natives.inc b/scripting/include/kento_rankme/natives.inc index 6187f63..d54ef2f 100644 --- a/scripting/include/kento_rankme/natives.inc +++ b/scripting/include/kento_rankme/natives.inc @@ -32,7 +32,7 @@ public int Native_GivePoint(Handle plugin, int numParams) GetNativeString(3, Reason, len + 1); int iPrintToPlayer = GetNativeCell(4); int iPrintToAll = GetNativeCell(5); - g_aStats[client].SCORE += iPoints; + g_aStatsGlobal[client].SCORE += iPoints; g_aSession[client].SCORE += iPoints; GetClientName(client, Name, sizeof(Name)); if (!g_bChatChange) @@ -40,11 +40,11 @@ public int Native_GivePoint(Handle plugin, int numParams) if (iPrintToAll == 1) { for (int i = 1; i <= MaxClients; i++) if (IsClientInGame(i)) - //CPrintToChatEx(i,i,"%s %T",MSG,"GotPointsBy",Name,g_aStats[client].SCORE,iPoints,Reason); - if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "GotPointsBy", i, Name, g_aStats[client].SCORE, iPoints, Reason); + //CPrintToChatEx(i,i,"%s %T",MSG,"GotPointsBy",Name,g_aStatsGlobal[client].SCORE,iPoints,Reason); + if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "GotPointsBy", i, Name, g_aStatsGlobal[client].SCORE, iPoints, Reason); } else if (iPrintToPlayer == 1) { - //CPrintToChatEx(client,client,"%s %T",MSG,"GotPointsBy",Name,g_aStats[client].SCORE,iPoints,Reason); - if(!hidechat[client]) CPrintToChat(client, "%s %T", MSG, "GotPointsBy", client, Name, g_aStats[client].SCORE, iPoints, Reason); + //CPrintToChatEx(client,client,"%s %T",MSG,"GotPointsBy",Name,g_aStatsGlobal[client].SCORE,iPoints,Reason); + if(!hidechat[client]) CPrintToChat(client, "%s %T", MSG, "GotPointsBy", client, Name, g_aStatsGlobal[client].SCORE, iPoints, Reason); } } @@ -133,7 +133,7 @@ public void SQL_GetRankCallback(Handle owner, Handle hndl, const char[] error, a return; } int i; - g_TotalPlayers = SQL_GetRowCount(hndl); + //g_iTotalPlayersGlobal = SQL_GetRowCount(hndl); char Receive[64]; @@ -179,14 +179,21 @@ void CallRankCallback(int client, int rank, Function callback, any data, Handle public int Native_GetPoints(Handle plugin, int numParams) { int client = GetNativeCell(1); - return g_aStats[client].SCORE; + if(numParams>1) + { + if(GetNativeCell(2)) + { + return g_aStatsGlobal[client].SCORE; + } + } + return g_aStatsSeason[client].SCORE; } public int Native_GetStats(Handle plugin, int numParams) { int client = GetNativeCell(1); int array[35]; - g_aStats[client].GetData(array); + g_aStatsGlobal[client].GetData(array); SetNativeArray(2, array, 35); } @@ -202,7 +209,7 @@ public int Native_GetWeaponStats(Handle plugin, int numParams) { int client = GetNativeCell(1); int array[42]; - g_aWeapons[client].GetData(array); + g_aWeaponsGlobal[client].GetData(array); SetNativeArray(2, array, 42); } @@ -210,12 +217,12 @@ public int Native_GetHitbox(Handle plugin, int numParams) { int client = GetNativeCell(1); int array[8]; - g_aHitBox[client].GetData(array); + g_aHitBoxGlobal[client].GetData(array); SetNativeArray(2, array, 8); } public int Native_IsPlayerLoaded(Handle plugin, int numParams) { int client = GetNativeCell(1); - return OnDB[client]; + return OnDBGlobal[client]; } \ No newline at end of file diff --git a/scripting/include/kento_rankme/rankme.inc b/scripting/include/kento_rankme/rankme.inc index 674394d..9a0f17c 100644 --- a/scripting/include/kento_rankme/rankme.inc +++ b/scripting/include/kento_rankme/rankme.inc @@ -463,11 +463,11 @@ native void RankMe_GetRank(int client, RankCallback callback, any data = 0); /********************************************************* * Get the score (points) of a player on the server * - * @param client The client index of the player to get the rank - * @param data Any data you would like that return on the callback + * @param client The client index of the player to get the rank. + * @param global Whether or not to get the global points for the client. * @return The score of the client *********************************************************/ -native int RankMe_GetPoints(int client); +native int RankMe_GetPoints(int client, bool global = false); /********************************************************* * Get stats of a player on the server diff --git a/scripting/kento_rankme.sp b/scripting/kento_rankme.sp index 67e37f2..aac7654 100644 --- a/scripting/kento_rankme.sp +++ b/scripting/kento_rankme.sp @@ -21,21 +21,37 @@ #define SENDER_WORLD 0 #define MAX_LENGTH_MENU 470 -static const char g_sSqliteCreate[] = "CREATE TABLE IF NOT EXISTS `%s` (id INTEGER PRIMARY KEY, steam VARCHAR(40) NOT NULL, name TEXT, lastip TEXT, score NUMERIC, kills NUMERIC, deaths NUMERIC, assists NUMERIC, suicides NUMERIC, tk NUMERIC, shots NUMERIC, hits NUMERIC, headshots NUMERIC, connected NUMERIC, rounds_tr NUMERIC, rounds_ct NUMERIC, lastconnect NUMERIC,knife NUMERIC,glock NUMERIC,hkp2000 NUMERIC,usp_silencer NUMERIC,p250 NUMERIC,deagle NUMERIC,elite NUMERIC,fiveseven NUMERIC,tec9 NUMERIC,cz75a NUMERIC,revolver NUMERIC,nova NUMERIC,xm1014 NUMERIC,mag7 NUMERIC,sawedoff NUMERIC,bizon NUMERIC,mac10 NUMERIC,mp9 NUMERIC,mp7 NUMERIC,ump45 NUMERIC,p90 NUMERIC,galilar NUMERIC,ak47 NUMERIC,scar20 NUMERIC,famas NUMERIC,m4a1 NUMERIC,m4a1_silencer NUMERIC,aug NUMERIC,ssg08 NUMERIC,sg556 NUMERIC,awp NUMERIC,g3sg1 NUMERIC,m249 NUMERIC,negev NUMERIC,hegrenade NUMERIC,flashbang NUMERIC,smokegrenade NUMERIC,inferno NUMERIC,decoy NUMERIC,taser NUMERIC,mp5sd NUMERIC,breachcharge NUMERIC,head NUMERIC, chest NUMERIC, stomach NUMERIC, left_arm NUMERIC, right_arm NUMERIC, left_leg NUMERIC, right_leg NUMERIC,c4_planted NUMERIC,c4_exploded NUMERIC,c4_defused NUMERIC,ct_win NUMERIC, tr_win NUMERIC, hostages_rescued NUMERIC, vip_killed NUMERIC, vip_escaped NUMERIC, vip_played NUMERIC, mvp NUMERIC, damage NUMERIC, match_win NUMERIC, match_draw NUMERIC, match_lose NUMERIC, first_blood NUMERIC, no_scope NUMERIC, no_scope_dis NUMERIC, thru_smoke NUMERIC, blind NUMERIC, assist_flash NUMERIC, assist_team_flash NUMERIC, assist_team_kill NUMERIC, wallbang NUMERIC)"; -static const char g_sMysqlCreate[] = "CREATE TABLE IF NOT EXISTS `%s` (id INTEGER PRIMARY KEY, steam TEXT, name TEXT, lastip TEXT, score NUMERIC, kills NUMERIC, deaths NUMERIC, assists NUMERIC, suicides NUMERIC, tk NUMERIC, shots NUMERIC, hits NUMERIC, headshots NUMERIC, connected NUMERIC, rounds_tr NUMERIC, rounds_ct NUMERIC, lastconnect NUMERIC,knife NUMERIC,glock NUMERIC,hkp2000 NUMERIC,usp_silencer NUMERIC,p250 NUMERIC,deagle NUMERIC,elite NUMERIC,fiveseven NUMERIC,tec9 NUMERIC,cz75a NUMERIC,revolver NUMERIC,nova NUMERIC,xm1014 NUMERIC,mag7 NUMERIC,sawedoff NUMERIC,bizon NUMERIC,mac10 NUMERIC,mp9 NUMERIC,mp7 NUMERIC,ump45 NUMERIC,p90 NUMERIC,galilar NUMERIC,ak47 NUMERIC,scar20 NUMERIC,famas NUMERIC,m4a1 NUMERIC,m4a1_silencer NUMERIC,aug NUMERIC,ssg08 NUMERIC,sg556 NUMERIC,awp NUMERIC,g3sg1 NUMERIC,m249 NUMERIC,negev NUMERIC,hegrenade NUMERIC,flashbang NUMERIC,smokegrenade NUMERIC,inferno NUMERIC,decoy NUMERIC,taser NUMERIC,mp5sd NUMERIC,breachcharge NUMERIC,head NUMERIC, chest NUMERIC, stomach NUMERIC, left_arm NUMERIC, right_arm NUMERIC, left_leg NUMERIC, right_leg NUMERIC,c4_planted NUMERIC,c4_exploded NUMERIC,c4_defused NUMERIC,ct_win NUMERIC, tr_win NUMERIC, hostages_rescued NUMERIC, vip_killed NUMERIC, vip_escaped NUMERIC, vip_played NUMERIC, mvp NUMERIC, damage NUMERIC, match_win NUMERIC, match_draw NUMERIC, match_lose NUMERIC, first_blood NUMERIC, no_scope NUMERIC, no_scope_dis NUMERIC, thru_smoke NUMERIC, blind NUMERIC, assist_flash NUMERIC, assist_team_flash NUMERIC, assist_team_kill NUMERIC, wallbang NUMERIC) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"; -static const char g_sSqlInsert[] = "INSERT INTO `%s` VALUES (NULL,'%s','%s','%s','%d','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0');"; +static const char g_sSqliteCreateGlobal[] = "CREATE TABLE IF NOT EXISTS `%s` (id INTEGER PRIMARY KEY, steam VARCHAR(40) NOT NULL, name TEXT, lastip TEXT, score NUMERIC, kills NUMERIC, deaths NUMERIC, assists NUMERIC, suicides NUMERIC, tk NUMERIC, shots NUMERIC, hits NUMERIC, headshots NUMERIC, connected NUMERIC, rounds_tr NUMERIC, rounds_ct NUMERIC, lastconnect NUMERIC,knife NUMERIC,glock NUMERIC,hkp2000 NUMERIC,usp_silencer NUMERIC,p250 NUMERIC,deagle NUMERIC,elite NUMERIC,fiveseven NUMERIC,tec9 NUMERIC,cz75a NUMERIC,revolver NUMERIC,nova NUMERIC,xm1014 NUMERIC,mag7 NUMERIC,sawedoff NUMERIC,bizon NUMERIC,mac10 NUMERIC,mp9 NUMERIC,mp7 NUMERIC,ump45 NUMERIC,p90 NUMERIC,galilar NUMERIC,ak47 NUMERIC,scar20 NUMERIC,famas NUMERIC,m4a1 NUMERIC,m4a1_silencer NUMERIC,aug NUMERIC,ssg08 NUMERIC,sg556 NUMERIC,awp NUMERIC,g3sg1 NUMERIC,m249 NUMERIC,negev NUMERIC,hegrenade NUMERIC,flashbang NUMERIC,smokegrenade NUMERIC,inferno NUMERIC,decoy NUMERIC,taser NUMERIC,mp5sd NUMERIC,breachcharge NUMERIC,head NUMERIC, chest NUMERIC, stomach NUMERIC, left_arm NUMERIC, right_arm NUMERIC, left_leg NUMERIC, right_leg NUMERIC,c4_planted NUMERIC,c4_exploded NUMERIC,c4_defused NUMERIC,ct_win NUMERIC, tr_win NUMERIC, hostages_rescued NUMERIC, vip_killed NUMERIC, vip_escaped NUMERIC, vip_played NUMERIC, mvp NUMERIC, damage NUMERIC, match_win NUMERIC, match_draw NUMERIC, match_lose NUMERIC, first_blood NUMERIC, no_scope NUMERIC, no_scope_dis NUMERIC, thru_smoke NUMERIC, blind NUMERIC, assist_flash NUMERIC, assist_team_flash NUMERIC, assist_team_kill NUMERIC, wallbang NUMERIC)"; +static const char g_sMysqlCreateGlobal[] = "CREATE TABLE IF NOT EXISTS `%s` (id INTEGER PRIMARY KEY, steam TEXT, name TEXT, lastip TEXT, score NUMERIC, kills NUMERIC, deaths NUMERIC, assists NUMERIC, suicides NUMERIC, tk NUMERIC, shots NUMERIC, hits NUMERIC, headshots NUMERIC, connected NUMERIC, rounds_tr NUMERIC, rounds_ct NUMERIC, lastconnect NUMERIC,knife NUMERIC,glock NUMERIC,hkp2000 NUMERIC,usp_silencer NUMERIC,p250 NUMERIC,deagle NUMERIC,elite NUMERIC,fiveseven NUMERIC,tec9 NUMERIC,cz75a NUMERIC,revolver NUMERIC,nova NUMERIC,xm1014 NUMERIC,mag7 NUMERIC,sawedoff NUMERIC,bizon NUMERIC,mac10 NUMERIC,mp9 NUMERIC,mp7 NUMERIC,ump45 NUMERIC,p90 NUMERIC,galilar NUMERIC,ak47 NUMERIC,scar20 NUMERIC,famas NUMERIC,m4a1 NUMERIC,m4a1_silencer NUMERIC,aug NUMERIC,ssg08 NUMERIC,sg556 NUMERIC,awp NUMERIC,g3sg1 NUMERIC,m249 NUMERIC,negev NUMERIC,hegrenade NUMERIC,flashbang NUMERIC,smokegrenade NUMERIC,inferno NUMERIC,decoy NUMERIC,taser NUMERIC,mp5sd NUMERIC,breachcharge NUMERIC,head NUMERIC, chest NUMERIC, stomach NUMERIC, left_arm NUMERIC, right_arm NUMERIC, left_leg NUMERIC, right_leg NUMERIC,c4_planted NUMERIC,c4_exploded NUMERIC,c4_defused NUMERIC,ct_win NUMERIC, tr_win NUMERIC, hostages_rescued NUMERIC, vip_killed NUMERIC, vip_escaped NUMERIC, vip_played NUMERIC, mvp NUMERIC, damage NUMERIC, match_win NUMERIC, match_draw NUMERIC, match_lose NUMERIC, first_blood NUMERIC, no_scope NUMERIC, no_scope_dis NUMERIC, thru_smoke NUMERIC, blind NUMERIC, assist_flash NUMERIC, assist_team_flash NUMERIC, assist_team_kill NUMERIC, wallbang NUMERIC) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"; +static const char g_sSqliteCreateSeason[] = "CREATE TABLE IF NOT EXISTS `%s` (id INTEGER PRIMARY KEY, season_id INTEGER,steam VARCHAR(40) NOT NULL, name TEXT, lastip TEXT, score NUMERIC, kills NUMERIC, deaths NUMERIC, assists NUMERIC, suicides NUMERIC, tk NUMERIC, shots NUMERIC, hits NUMERIC, headshots NUMERIC, connected NUMERIC, rounds_tr NUMERIC, rounds_ct NUMERIC, lastconnect NUMERIC,knife NUMERIC,glock NUMERIC,hkp2000 NUMERIC,usp_silencer NUMERIC,p250 NUMERIC,deagle NUMERIC,elite NUMERIC,fiveseven NUMERIC,tec9 NUMERIC,cz75a NUMERIC,revolver NUMERIC,nova NUMERIC,xm1014 NUMERIC,mag7 NUMERIC,sawedoff NUMERIC,bizon NUMERIC,mac10 NUMERIC,mp9 NUMERIC,mp7 NUMERIC,ump45 NUMERIC,p90 NUMERIC,galilar NUMERIC,ak47 NUMERIC,scar20 NUMERIC,famas NUMERIC,m4a1 NUMERIC,m4a1_silencer NUMERIC,aug NUMERIC,ssg08 NUMERIC,sg556 NUMERIC,awp NUMERIC,g3sg1 NUMERIC,m249 NUMERIC,negev NUMERIC,hegrenade NUMERIC,flashbang NUMERIC,smokegrenade NUMERIC,inferno NUMERIC,decoy NUMERIC,taser NUMERIC,mp5sd NUMERIC,breachcharge NUMERIC,head NUMERIC, chest NUMERIC, stomach NUMERIC, left_arm NUMERIC, right_arm NUMERIC, left_leg NUMERIC, right_leg NUMERIC,c4_planted NUMERIC,c4_exploded NUMERIC,c4_defused NUMERIC,ct_win NUMERIC, tr_win NUMERIC, hostages_rescued NUMERIC, vip_killed NUMERIC, vip_escaped NUMERIC, vip_played NUMERIC, mvp NUMERIC, damage NUMERIC, match_win NUMERIC, match_draw NUMERIC, match_lose NUMERIC, first_blood NUMERIC, no_scope NUMERIC, no_scope_dis NUMERIC, thru_smoke NUMERIC, blind NUMERIC, assist_flash NUMERIC, assist_team_flash NUMERIC, assist_team_kill NUMERIC, wallbang NUMERIC)"; +static const char g_sMysqlCreateSeason[] = "CREATE TABLE IF NOT EXISTS `%s` (id INTEGER PRIMARY KEY, season_id INTEGER, steam TEXT, name TEXT, lastip TEXT, score NUMERIC, kills NUMERIC, deaths NUMERIC, assists NUMERIC, suicides NUMERIC, tk NUMERIC, shots NUMERIC, hits NUMERIC, headshots NUMERIC, connected NUMERIC, rounds_tr NUMERIC, rounds_ct NUMERIC, lastconnect NUMERIC,knife NUMERIC,glock NUMERIC,hkp2000 NUMERIC,usp_silencer NUMERIC,p250 NUMERIC,deagle NUMERIC,elite NUMERIC,fiveseven NUMERIC,tec9 NUMERIC,cz75a NUMERIC,revolver NUMERIC,nova NUMERIC,xm1014 NUMERIC,mag7 NUMERIC,sawedoff NUMERIC,bizon NUMERIC,mac10 NUMERIC,mp9 NUMERIC,mp7 NUMERIC,ump45 NUMERIC,p90 NUMERIC,galilar NUMERIC,ak47 NUMERIC,scar20 NUMERIC,famas NUMERIC,m4a1 NUMERIC,m4a1_silencer NUMERIC,aug NUMERIC,ssg08 NUMERIC,sg556 NUMERIC,awp NUMERIC,g3sg1 NUMERIC,m249 NUMERIC,negev NUMERIC,hegrenade NUMERIC,flashbang NUMERIC,smokegrenade NUMERIC,inferno NUMERIC,decoy NUMERIC,taser NUMERIC,mp5sd NUMERIC,breachcharge NUMERIC,head NUMERIC, chest NUMERIC, stomach NUMERIC, left_arm NUMERIC, right_arm NUMERIC, left_leg NUMERIC, right_leg NUMERIC,c4_planted NUMERIC,c4_exploded NUMERIC,c4_defused NUMERIC,ct_win NUMERIC, tr_win NUMERIC, hostages_rescued NUMERIC, vip_killed NUMERIC, vip_escaped NUMERIC, vip_played NUMERIC, mvp NUMERIC, damage NUMERIC, match_win NUMERIC, match_draw NUMERIC, match_lose NUMERIC, first_blood NUMERIC, no_scope NUMERIC, no_scope_dis NUMERIC, thru_smoke NUMERIC, blind NUMERIC, assist_flash NUMERIC, assist_team_flash NUMERIC, assist_team_kill NUMERIC, wallbang NUMERIC) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"; +static const char g_sSqliteCreateSeasonID[] = "CREATE TABLE IF NOT EXISTS `%s` (season_id INTEGER PRIMARY KEY, start_date DATETIME, end_date DATETIME)"; +static const char g_sMysqlCreateSeasonID[] = "CREATE TABLE IF NOT EXISTS `%s` (season_id INTEGER PRIMARY KEY, start_date DATETIME, end_date DATETIME) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"; +static const char g_sSqlInsertGlobal[] = "INSERT INTO `%s` VALUES (NULL,'%s','%s','%s','%d','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0');"; +static const char g_sSqlInsertSeason[] = "INSERT INTO `%s` VALUES (NULL,'%d','%s','%s','%s','%d','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0');"; /* SM1.9 Fix */ -static const char g_sSqlSave[] = "UPDATE `%s` SET score = '%i', kills = '%i', deaths='%i', assists='%i',suicides='%i',tk='%i',shots='%i',hits='%i',headshots='%i', rounds_tr = '%i', rounds_ct = '%i',lastip='%s',name='%s'%s,head='%i',chest='%i', stomach='%i',left_arm='%i',right_arm='%i',left_leg='%i',right_leg='%i' WHERE steam = '%s';"; -static const char g_sSqlSaveName[] = "UPDATE `%s` SET score = '%i', kills = '%i', deaths='%i', assists='%i',suicides='%i',tk='%i',shots='%i',hits='%i',headshots='%i', rounds_tr = '%i', rounds_ct = '%i',lastip='%s',name='%s'%s,head='%i',chest='%i', stomach='%i',left_arm='%i',right_arm='%i',left_leg='%i',right_leg='%i' WHERE name = '%s';"; -static const char g_sSqlSaveIp[] = "UPDATE `%s` SET score = '%i', kills = '%i', deaths='%i', assists='%i',suicides='%i',tk='%i',shots='%i',hits='%i',headshots='%i', rounds_tr = '%i', rounds_ct = '%i',lastip='%s',name='%s'%s,head='%i',chest='%i', stomach='%i',left_arm='%i',right_arm='%i',left_leg='%i',right_leg='%i' WHERE lastip = '%s';"; -static const char g_sSqlSave2[] = "UPDATE `%s` SET c4_planted='%i',c4_exploded='%i',c4_defused='%i',ct_win='%i',tr_win='%i', hostages_rescued='%i',vip_killed = '%d',vip_escaped = '%d',vip_played = '%d', mvp='%i', damage='%i', match_win='%i', match_draw='%i', match_lose='%i', first_blood='%i', no_scope='%i', no_scope_dis='%i', thru_smoke='%i', blind='%i', assist_flash='%i', assist_team_flash='%i', assist_team_kill='%i', wallbang='%i', lastconnect='%i', connected='%i' WHERE steam = '%s';"; -static const char g_sSqlSaveName2[] = "UPDATE `%s` SET c4_planted='%i',c4_exploded='%i',c4_defused='%i',ct_win='%i',tr_win='%i', hostages_rescued='%i',vip_killed = '%d',vip_escaped = '%d',vip_played = '%d', mvp='%i', damage='%i', match_win='%i', match_draw='%i', match_lose='%i', first_blood='%i', no_scope='%i', no_scope_dis='%i', thru_smoke='%i', blind='%i', assist_flash='%i', assist_team_flash='%i', assist_team_kill='%i', wallbang='%i', lastconnect='%i', connected='%i' WHERE name = '%s';"; -static const char g_sSqlSaveIp2[] = "UPDATE `%s` SET c4_planted='%i',c4_exploded='%i',c4_defused='%i',ct_win='%i',tr_win='%i', hostages_rescued='%i',vip_killed = '%d',vip_escaped = '%d',vip_played = '%d', mvp='%i', damage='%i', match_win='%i', match_draw='%i', match_lose='%i', first_blood='%i', no_scope='%i', no_scope_dis='%i', thru_smoke='%i', blind='%i', assist_flash='%i', assist_team_flash='%i', assist_team_kill='%i', wallbang='%i', lastconnect='%i', connected='%i' WHERE lastip = '%s';"; - -static const char g_sSqlRetrieveClient[] = "SELECT * FROM `%s` WHERE steam='%s';"; -static const char g_sSqlRetrieveClientName[] = "SELECT * FROM `%s` WHERE name='%s';"; -static const char g_sSqlRetrieveClientIp[] = "SELECT * FROM `%s` WHERE lastip='%s';"; +static const char g_sSqlSaveGlobal[] = "UPDATE `%s` SET score = '%i', kills = '%i', deaths='%i', assists='%i',suicides='%i',tk='%i',shots='%i',hits='%i',headshots='%i', rounds_tr = '%i', rounds_ct = '%i',lastip='%s',name='%s'%s,head='%i',chest='%i', stomach='%i',left_arm='%i',right_arm='%i',left_leg='%i',right_leg='%i' WHERE steam = '%s';"; +static const char g_sSqlSaveSeason[] = "UPDATE `%s` SET score = '%i', kills = '%i', deaths='%i', assists='%i',suicides='%i',tk='%i',shots='%i',hits='%i',headshots='%i', rounds_tr = '%i', rounds_ct = '%i',lastip='%s',name='%s'%s,head='%i',chest='%i', stomach='%i',left_arm='%i',right_arm='%i',left_leg='%i',right_leg='%i' WHERE steam = '%s' AND season_id = '%d';"; +static const char g_sSqlSaveNameGlobal[] = "UPDATE `%s` SET score = '%i', kills = '%i', deaths='%i', assists='%i',suicides='%i',tk='%i',shots='%i',hits='%i',headshots='%i', rounds_tr = '%i', rounds_ct = '%i',lastip='%s',name='%s'%s,head='%i',chest='%i', stomach='%i',left_arm='%i',right_arm='%i',left_leg='%i',right_leg='%i' WHERE name = '%s';"; +static const char g_sSqlSaveNameSeason[] = "UPDATE `%s` SET score = '%i', kills = '%i', deaths='%i', assists='%i',suicides='%i',tk='%i',shots='%i',hits='%i',headshots='%i', rounds_tr = '%i', rounds_ct = '%i',lastip='%s',name='%s'%s,head='%i',chest='%i', stomach='%i',left_arm='%i',right_arm='%i',left_leg='%i',right_leg='%i' WHERE name = '%s' AND season_id = '%d';"; +static const char g_sSqlSaveIpGlobal[] = "UPDATE `%s` SET score = '%i', kills = '%i', deaths='%i', assists='%i',suicides='%i',tk='%i',shots='%i',hits='%i',headshots='%i', rounds_tr = '%i', rounds_ct = '%i',lastip='%s',name='%s'%s,head='%i',chest='%i', stomach='%i',left_arm='%i',right_arm='%i',left_leg='%i',right_leg='%i' WHERE lastip = '%s';"; +static const char g_sSqlSaveIpSeason[] = "UPDATE `%s` SET score = '%i', kills = '%i', deaths='%i', assists='%i',suicides='%i',tk='%i',shots='%i',hits='%i',headshots='%i', rounds_tr = '%i', rounds_ct = '%i',lastip='%s',name='%s'%s,head='%i',chest='%i', stomach='%i',left_arm='%i',right_arm='%i',left_leg='%i',right_leg='%i' WHERE lastip = '%s' AND season_id = '%d';"; +static const char g_sSqlSave2Global[] = "UPDATE `%s` SET c4_planted='%i',c4_exploded='%i',c4_defused='%i',ct_win='%i',tr_win='%i', hostages_rescued='%i',vip_killed = '%d',vip_escaped = '%d',vip_played = '%d', mvp='%i', damage='%i', match_win='%i', match_draw='%i', match_lose='%i', first_blood='%i', no_scope='%i', no_scope_dis='%i', thru_smoke='%i', blind='%i', assist_flash='%i', assist_team_flash='%i', assist_team_kill='%i', wallbang='%i', lastconnect='%i', connected='%i' WHERE steam = '%s';"; +static const char g_sSqlSave2Season[] = "UPDATE `%s` SET c4_planted='%i',c4_exploded='%i',c4_defused='%i',ct_win='%i',tr_win='%i', hostages_rescued='%i',vip_killed = '%d',vip_escaped = '%d',vip_played = '%d', mvp='%i', damage='%i', match_win='%i', match_draw='%i', match_lose='%i', first_blood='%i', no_scope='%i', no_scope_dis='%i', thru_smoke='%i', blind='%i', assist_flash='%i', assist_team_flash='%i', assist_team_kill='%i', wallbang='%i', lastconnect='%i', connected='%i' WHERE steam = '%s' AND season_id = '%d';"; +static const char g_sSqlSaveName2Global[] = "UPDATE `%s` SET c4_planted='%i',c4_exploded='%i',c4_defused='%i',ct_win='%i',tr_win='%i', hostages_rescued='%i',vip_killed = '%d',vip_escaped = '%d',vip_played = '%d', mvp='%i', damage='%i', match_win='%i', match_draw='%i', match_lose='%i', first_blood='%i', no_scope='%i', no_scope_dis='%i', thru_smoke='%i', blind='%i', assist_flash='%i', assist_team_flash='%i', assist_team_kill='%i', wallbang='%i', lastconnect='%i', connected='%i' WHERE name = '%s';"; +static const char g_sSqlSaveName2Season[] = "UPDATE `%s` SET c4_planted='%i',c4_exploded='%i',c4_defused='%i',ct_win='%i',tr_win='%i', hostages_rescued='%i',vip_killed = '%d',vip_escaped = '%d',vip_played = '%d', mvp='%i', damage='%i', match_win='%i', match_draw='%i', match_lose='%i', first_blood='%i', no_scope='%i', no_scope_dis='%i', thru_smoke='%i', blind='%i', assist_flash='%i', assist_team_flash='%i', assist_team_kill='%i', wallbang='%i', lastconnect='%i', connected='%i' WHERE name = '%s' AND season_id = '%d';"; +static const char g_sSqlSaveIp2Global[] = "UPDATE `%s` SET c4_planted='%i',c4_exploded='%i',c4_defused='%i',ct_win='%i',tr_win='%i', hostages_rescued='%i',vip_killed = '%d',vip_escaped = '%d',vip_played = '%d', mvp='%i', damage='%i', match_win='%i', match_draw='%i', match_lose='%i', first_blood='%i', no_scope='%i', no_scope_dis='%i', thru_smoke='%i', blind='%i', assist_flash='%i', assist_team_flash='%i', assist_team_kill='%i', wallbang='%i', lastconnect='%i', connected='%i' WHERE lastip = '%s';"; +static const char g_sSqlSaveIp2Season[] = "UPDATE `%s` SET c4_planted='%i',c4_exploded='%i',c4_defused='%i',ct_win='%i',tr_win='%i', hostages_rescued='%i',vip_killed = '%d',vip_escaped = '%d',vip_played = '%d', mvp='%i', damage='%i', match_win='%i', match_draw='%i', match_lose='%i', first_blood='%i', no_scope='%i', no_scope_dis='%i', thru_smoke='%i', blind='%i', assist_flash='%i', assist_team_flash='%i', assist_team_kill='%i', wallbang='%i', lastconnect='%i', connected='%i' WHERE lastip = '%s' AND season_id = '%d';"; + +static const char g_sSqlRetrieveClientGlobal[] = "SELECT * FROM `%s` WHERE steam='%s';"; +static const char g_sSqlRetrieveClientSeason[] = "SELECT * FROM `%s` WHERE steam='%s' AND season_id='%d';"; +static const char g_sSqlRetrieveClientNameGlobal[] = "SELECT * FROM `%s` WHERE name='%s';"; +static const char g_sSqlRetrieveClientNameSeason[] = "SELECT * FROM `%s` WHERE name='%s' AND season_id=%d;"; +static const char g_sSqlRetrieveClientIpGlobal[] = "SELECT * FROM `%s` WHERE lastip='%s';"; +static const char g_sSqlRetrieveClientIpSeason[] = "SELECT * FROM `%s` WHERE lastip='%s' AND season_id=%d;"; +static const char g_sSqlRetrieveSeasonIDMySQL[] = "SELECT * FROM `%s` WHERE `start_date` <= NOW() AND `end_date` >= NOW() ;"; +static const char g_sSqlRetrieveSeasonIDSQLite[] = "SELECT * FROM `%s` WHERE `start_date` <= DATE() AND `end_date` >= DATE() ;"; static const char g_sSqlRemoveDuplicateSQLite[] = "delete from `%s` where `%s`.id > (SELECT min(id) from `%s` as t2 WHERE t2.steam=`%s`.steam);"; static const char g_sSqlRemoveDuplicateNameSQLite[] = "delete from `%s` where `%s`.id > (SELECT min(id) from `%s` as t2 WHERE t2.name=`%s`.name);"; static const char g_sSqlRemoveDuplicateIpSQLite[] = "delete from `%s` where `%s`.id > (SELECT min(id) from `%s` as t2 WHERE t2.lastip=`%s`.lastip);"; @@ -45,19 +61,27 @@ static const char g_sSqlRemoveDuplicateIpMySQL[] = "delete from `%s` USING `%s`, stock const char g_sWeaponsNamesGame[42][] = { "knife", "glock", "hkp2000", "usp_silencer", "p250", "deagle", "elite", "fiveseven", "tec9", "cz75a", "revolver", "nova", "xm1014", "mag7", "sawedoff", "bizon", "mac10", "mp9", "mp7", "ump45", "p90", "galilar", "ak47", "scar20", "famas", "m4a1", "m4a1_silencer", "aug", "ssg08", "sg556", "awp", "g3sg1", "m249", "negev", "hegrenade", "flashbang", "smokegrenade", "inferno", "decoy", "taser", "mp5sd", "breachcharge"}; stock const char g_sWeaponsNamesFull[42][] = { "Knife", "Glock", "P2000", "USP-S", "P250", "Desert Eagle", "Dual Berettas", "Five-Seven", "Tec 9", "CZ75-Auto", "R8 Revolver", "Nova", "XM1014", "Mag 7", "Sawed-off", "PP-Bizon", "MAC-10", "MP9", "MP7", "UMP45", "P90", "Galil AR", "AK-47", "SCAR-20", "Famas", "M4A4", "M4A1-S", "AUG", "SSG 08", "SG 553", "AWP", "G3SG1", "M249", "Negev", "HE Grenade", "Flashbang", "Smoke Grenade", "Inferno", "Decoy", "Zeus x27", "MP5-SD", "Breach Charges"}; -char g_sSQLTable[200]; +char g_sSQLTableGlobal[200]; +char g_sSQLTableSeason[200]; +char g_sSQLTableSeasonID[200]; Handle g_hStatsDb; -bool OnDB[MAXPLAYERS + 1]; +bool OnDBGlobal[MAXPLAYERS + 1]; +bool OnDBSeason[MAXPLAYERS + 1]; STATS_NAMES g_aSession[MAXPLAYERS + 1]; -STATS_NAMES g_aStats[MAXPLAYERS + 1]; -WEAPONS_ENUM g_aWeapons[MAXPLAYERS + 1]; -HITBOXES g_aHitBox[MAXPLAYERS + 1]; -int g_TotalPlayers; +STATS_NAMES g_aStatsGlobal[MAXPLAYERS + 1]; +STATS_NAMES g_aStatsSeason[MAXPLAYERS + 1]; +WEAPONS_ENUM g_aWeaponsGlobal[MAXPLAYERS + 1]; +WEAPONS_ENUM g_aWeaponsSeason[MAXPLAYERS + 1]; +HITBOXES g_aHitBoxGlobal[MAXPLAYERS + 1]; +HITBOXES g_aHitBoxSeason[MAXPLAYERS + 1]; +int g_iTotalPlayersGlobal; +int g_iTotalPlayersSeason; +int g_iSeasonID = 0; Handle g_fwdOnPlayerLoaded; Handle g_fwdOnPlayerSaved; -bool DEBUGGING = false; +#define DEBUGGING false; int g_C4PlantedBy; char g_sC4PlantedByName[MAX_NAME_LENGTH]; @@ -121,7 +145,8 @@ public void OnPluginStart() { // PLAYER COMMANDS RegConsoleCmd("sm_session", CMD_Session, "RankMe: Shows the stats of your current session"); - RegConsoleCmd("sm_rank", CMD_Rank, "RankMe: Shows your rank"); + RegConsoleCmd("sm_rank", CMD_Rank, "RankMe: Shows your rank for this season"); + RegConsoleCmd("sm_rank_global", CMD_Rank_Global, "RankMe: Shows your global rank"); RegConsoleCmd("sm_top", CMD_Top, "RankMe: Shows the TOP"); RegConsoleCmd("sm_topweapon", CMD_TopWeapon, "RankMe: Shows the TOP ordered by kills with a specific weapon"); RegConsoleCmd("sm_topacc", CMD_TopAcc, "RankMe: Shows the TOP ordered by accuracy"); @@ -175,11 +200,12 @@ public void OnPluginStart() { hidechatcookie = RegClientCookie("rankme_hidechat", "Hide rankme chat messages", CookieAccess_Private); Format(MSG, sizeof(MSG), "%t", "Chat Prefix"); + // Late loading + OnConfigsExecuted(); } public void OnConVarChanged_SQLTable(Handle convar, const char[] oldValue, const char[] newValue) { - g_cvarSQLTable.GetString(g_sSQLTable, sizeof(g_sSQLTable)); DB_Connect(true); // Force reloading the stats } @@ -188,10 +214,14 @@ public void OnConVarChanged_MySQL(Handle convar, const char[] oldValue, const ch } public void DB_Connect(bool firstload) { - - if (g_bMysql != g_cvarMysql.BoolValue || firstload) { // NEEDS TO CONNECT IF CHANGED MYSQL CVAR OR NEVER CONNECTED + #if DEBUGGING + PrintToServer("Connecting to database..."); + #endif + if (g_bMysql != g_cvarMysql.BoolValue || firstload) { // NEEDS TO CONNECT IF CHANGED MYSQL CVAR OR NEVER CONNECTED g_bMysql = g_cvarMysql.BoolValue; - g_cvarSQLTable.GetString(g_sSQLTable, sizeof(g_sSQLTable)); + g_cvarSQLTableGlobal.GetString(g_sSQLTableGlobal, sizeof(g_sSQLTableGlobal)); + g_cvarSQLTableSeason.GetString(g_sSQLTableSeason, sizeof(g_sSQLTableSeason)); + g_cvarSQLTableSeasonID.GetString(g_sSQLTableSeasonID, sizeof(g_sSQLTableSeasonID)); char sError[256]; if (g_bMysql) { g_hStatsDb = SQL_Connect("rankme", false, sError, sizeof(sError)); @@ -203,67 +233,86 @@ public void DB_Connect(bool firstload) { { SetFailState("[RankMe] Unable to connect to the database (%s)", sError); } - + #if DEBUGGING + PrintToServer("Connected!"); + #endif // SQL_LockDatabase is redundent for SQL_SetCharset if(!SQL_SetCharset(g_hStatsDb, "utf8mb4")){ SQL_SetCharset(g_hStatsDb, "utf8"); } char sQuery[9999]; - + #if DEBUGGING + PrintToServer("Creating tables!"); + #endif if(g_bMysql) { - Format(sQuery, sizeof(sQuery), g_sMysqlCreate, g_sSQLTable); + Format(sQuery, sizeof(sQuery), g_sMysqlCreateGlobal, g_sSQLTableGlobal); }else{ - Format(sQuery, sizeof(sQuery), g_sSqliteCreate, g_sSQLTable); + Format(sQuery, sizeof(sQuery), g_sSqliteCreateGlobal, g_sSQLTableGlobal); } SQL_LockDatabase(g_hStatsDb); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` MODIFY id INTEGER AUTO_INCREMENT", g_sSQLTable); + if(g_bMysql) + { + Format(sQuery, sizeof(sQuery), g_sMysqlCreateSeason, g_sSQLTableSeason); + }else{ + Format(sQuery, sizeof(sQuery), g_sSqliteCreateSeason, g_sSQLTableSeasonID); + } SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN vip_killed NUMERIC", g_sSQLTable); + + if(g_bMysql) + { + Format(sQuery, sizeof(sQuery), g_sMysqlCreateSeasonID, g_sSQLTableSeasonID); + }else{ + Format(sQuery, sizeof(sQuery), g_sSqliteCreateSeasonID, g_sSQLTableSeasonID); + } + SQL_FastQuery(g_hStatsDb, sQuery); + + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` MODIFY id INTEGER AUTO_INCREMENT", g_sSQLTableGlobal); + SQL_FastQuery(g_hStatsDb, sQuery); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN vip_killed NUMERIC", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN vip_escaped NUMERIC", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN vip_escaped NUMERIC", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN vip_played NUMERIC", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN vip_played NUMERIC", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN match_win NUMERIC", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN match_win NUMERIC", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN match_draw NUMERIC", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN match_draw NUMERIC", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN match_lose NUMERIC", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN match_lose NUMERIC", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN mp5sd NUMERIC AFTER taser", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN mp5sd NUMERIC AFTER taser", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN breachcharge NUMERIC AFTER mp5sd", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN breachcharge NUMERIC AFTER mp5sd", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN first_blood NUMERIC", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN first_blood NUMERIC", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN no_scope NUMERIC", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN no_scope NUMERIC", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN no_scope_dis NUMERIC", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN no_scope_dis NUMERIC", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN thru_smoke NUMERIC", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN thru_smoke NUMERIC", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN blind NUMERIC", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN blind NUMERIC", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN assist_flash NUMERIC", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN assist_flash NUMERIC", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN assist_team_flash NUMERIC", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN assist_team_flash NUMERIC", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN assist_team_kill NUMERIC", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN assist_team_kill NUMERIC", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN wallbang NUMERIC", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD COLUMN wallbang NUMERIC", g_sSQLTableGlobal); SQL_FastQuery(g_hStatsDb, sQuery); - Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` CHANGE steam steam VARCHAR(40)", g_sSQLTable); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` CHANGE steam steam VARCHAR(40)", g_sSQLTableGlobal); + SQL_FastQuery(g_hStatsDb, sQuery); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` MODIFY id INTEGER AUTO_INCREMENT", g_sSQLTableSeason); + SQL_FastQuery(g_hStatsDb, sQuery); + Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` MODIFY season_id INTEGER AUTO_INCREMENT", g_sSQLTableSeasonID); SQL_FastQuery(g_hStatsDb, sQuery); SQL_UnlockDatabase(g_hStatsDb); - - for (int i = 1; i <= MaxClients; i++) { - if (IsClientInGame(i)) - OnClientPutInServer(i); - } } } @@ -277,17 +326,29 @@ public void OnConfigsExecuted() { char sQuery[1000]; if (g_AutoPurge > 0) { int DeleteBefore = GetTime() - (g_AutoPurge * 86400); - Format(sQuery, sizeof(sQuery), "DELETE FROM `%s` WHERE lastconnect < '%d'", g_sSQLTable, DeleteBefore); + Format(sQuery, sizeof(sQuery), "DELETE FROM `%s` WHERE lastconnect < '%d'", g_sSQLTableGlobal, DeleteBefore); SQL_TQuery(g_hStatsDb, SQL_PurgeCallback, sQuery); } + if(g_bMysql) + Format(sQuery, sizeof(sQuery), g_sSqlRetrieveSeasonIDMySQL, g_sSQLTableSeasonID); + else + Format(sQuery, sizeof(sQuery), g_sSqlRetrieveSeasonIDSQLite, g_sSQLTableSeasonID); + #if DEBUGGING + PrintToServer(sQuery); + #endif + SQL_TQuery(g_hStatsDb, SQL_GetSeasonIDCallback, sQuery); + if (g_bRankBots){ - Format(sQuery, sizeof(sQuery), "SELECT * FROM `%s` WHERE kills >= '%d'", g_sSQLTable, g_MinimalKills); + Format(sQuery, sizeof(sQuery), "SELECT COUNT(*) FROM `%s` WHERE kills >= '%d'", g_sSQLTableGlobal, g_MinimalKills); } else{ - Format(sQuery, sizeof(sQuery), "SELECT * FROM `%s` WHERE kills >= '%d' AND steam <> 'BOT'", g_sSQLTable, g_MinimalKills); + Format(sQuery, sizeof(sQuery), "SELECT COUNT(*) FROM `%s` WHERE kills >= '%d' AND steam <> 'BOT'", g_sSQLTableGlobal, g_MinimalKills); } - SQL_TQuery(g_hStatsDb, SQL_GetPlayersCallback, sQuery); + #if DEBUGGING + PrintToServer("Count query %s", sQuery); + #endif + SQL_TQuery(g_hStatsDb, SQL_GetPlayersGlobalCallback, sQuery); CheckUnique(); BuildRankCache(); @@ -295,8 +356,8 @@ public void OnConfigsExecuted() { void CheckUnique(){ char sQuery[1000]; - if(g_bMysql) Format(sQuery, sizeof(sQuery), "SHOW INDEX FROM `%s` WHERE Key_name = 'steam'", g_sSQLTable); - else Format(sQuery, sizeof(sQuery), "PRAGMA INDEX_LIST('%s')", g_sSQLTable); + if(g_bMysql) Format(sQuery, sizeof(sQuery), "SHOW INDEX FROM `%s` WHERE Key_name = 'steam'", g_sSQLTableGlobal); + else Format(sQuery, sizeof(sQuery), "PRAGMA INDEX_LIST('%s')", g_sSQLTableGlobal); SQL_TQuery(g_hStatsDb, SQL_SetUniqueCallback, sQuery); } @@ -315,24 +376,63 @@ public void SQL_SetUniqueCallback(Handle owner, Handle hndl, const char[] error, if (g_bRankBots){ //only drop it when theres unique key if(hasunique){ - if(g_bMysql) Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` DROP INDEX steam", g_sSQLTable); + if(g_bMysql) Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` DROP INDEX steam", g_sSQLTableGlobal); else Format(sQuery, sizeof(sQuery), "DROP INDEX steam"); SQL_TQuery(g_hStatsDb, SQL_NothingCallback, sQuery); } } else{ - Format(sQuery, sizeof(sQuery), "DELETE FROM `%s` WHERE steam = 'BOT'" ,g_sSQLTable); + Format(sQuery, sizeof(sQuery), "DELETE FROM `%s` WHERE steam = 'BOT'" ,g_sSQLTableGlobal); SQL_TQuery(g_hStatsDb, SQL_NothingCallback, sQuery); // check unique key is exists or not if(SQL_GetRowCount(hndl) < 1){ - if(g_bMysql) Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD UNIQUE(steam)" ,g_sSQLTable); - else Format(sQuery, sizeof(sQuery), "CREATE UNIQUE INDEX steam ON `%s`(steam)" ,g_sSQLTable); + if(g_bMysql) Format(sQuery, sizeof(sQuery), "ALTER TABLE `%s` ADD UNIQUE(steam)" ,g_sSQLTableGlobal); + else Format(sQuery, sizeof(sQuery), "CREATE UNIQUE INDEX steam ON `%s`(steam)" ,g_sSQLTableGlobal); SQL_TQuery(g_hStatsDb, SQL_NothingCallback, sQuery); } } } +public void SQL_GetSeasonIDCallback(Handle owner, Handle hndl, const char[] error, any Datapack){ + if (hndl == INVALID_HANDLE) + { + LogError("[RankMe] Get Season ID failed: %s", error); + return; + } + if (SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) + { + g_iSeasonID = SQL_FetchInt(hndl, 0); + } + #if DEBUGGING + PrintToServer("Season ID is %d", g_iSeasonID); + #endif + for (int i = 1; i <= MaxClients; i++) { + if (IsClientInGame(i)) + OnClientPutInServer(i); + } + char sQuery[400]; + if (g_bRankBots){ + Format(sQuery, sizeof(sQuery), "SELECT COUNT(*) FROM `%s` WHERE kills >= '%d' AND season_id = %d", g_sSQLTableSeason, g_MinimalKills, g_iSeasonID); + } + else{ + Format(sQuery, sizeof(sQuery), "SELECT COUNT(*) FROM `%s` WHERE kills >= '%d' AND steam <> 'BOT' AND season_id = %d", g_sSQLTableSeason, g_MinimalKills, g_iSeasonID); + } + SQL_TQuery(g_hStatsDb, SQL_GetPlayersSeasonCallback, sQuery); +} + +public void SQL_GetPlayersGlobalCallback(Handle owner, Handle hndl, const char[] error, any Datapack){ + if(hndl == INVALID_HANDLE || !SQL_FetchRow(hndl)) + { + LogError("[RankMe] Query Fail: %s", error); + PrintToServer(error); + return; + } + g_iTotalPlayersGlobal = SQL_FetchInt(hndl, 0); +} + + + void BuildRankCache() { if(!g_bRankCache) @@ -400,31 +500,45 @@ public Action OnClientChangeName(Handle event, const char[] name, bool dontBroad //ReplaceString(clientnewname, sizeof(clientnewname), "'", ""); char query[10000]; + char query2[10000]; if (g_RankBy == 1) { - OnDB[client] = false; + OnDBGlobal[client] = false; + OnDBSeason[client] = false; g_aSession[client].Reset(); - g_aStats[client].Reset(); - g_aStats[client].SCORE = g_PointsStart; - g_aWeapons[client].Reset(); + g_aStatsGlobal[client].Reset(); + g_aStatsGlobal[client].SCORE = g_PointsStart; + g_aStatsSeason[client].Reset(); + g_aStatsSeason[client].SCORE = g_PointsStart; + g_aWeaponsGlobal[client].Reset(); + g_aWeaponsSeason[client].Reset(); g_aSession[client].CONNECTED = GetTime(); strcopy(g_aClientName[client], MAX_NAME_LENGTH, clientnewname); - Format(query, sizeof(query), g_sSqlRetrieveClientName, g_sSQLTable, Eclientnewname); - if (DEBUGGING) { + Format(query, sizeof(query), g_sSqlRetrieveClientNameGlobal, g_sSQLTableGlobal, Eclientnewname); + Format(query2, sizeof(query2), g_sSqlRetrieveClientNameSeason, g_sSQLTableSeason, Eclientnewname, g_iSeasonID); + #if DEBUGGING PrintToServer(query); LogError("%s", query); - } - SQL_TQuery(g_hStatsDb, SQL_LoadPlayerCallback, query, client); + PrintToServer(query2); + LogError("%s", query2); + #endif + SQL_TQuery(g_hStatsDb, SQL_LoadPlayerCallbackGlobal, query, client); + SQL_TQuery(g_hStatsDb, SQL_LoadPlayerCallbackSeason, query2, client); } else { - if (g_RankBy == 0) - Format(query, sizeof(query), "UPDATE `%s` SET name='%s' WHERE steam = '%s';", g_sSQLTable, Eclientnewname, g_aClientSteam[client]); - else - Format(query, sizeof(query), "UPDATE `%s` SET name='%s' WHERE lastip = '%s';", g_sSQLTable, Eclientnewname, g_aClientIp[client]); - + if (g_RankBy == 0){ + Format(query, sizeof(query), "UPDATE `%s` SET name='%s' WHERE steam = '%s';", g_sSQLTableGlobal, Eclientnewname, g_aClientSteam[client]); + Format(query2, sizeof(query2), "UPDATE `%s` SET name='%s' WHERE steam = '%s' AND season_id = '%d';", g_sSQLTableSeason, Eclientnewname, g_aClientSteam[client], g_iSeasonID); + } + else{ + Format(query, sizeof(query), "UPDATE `%s` SET name='%s' WHERE lastip = '%s';", g_sSQLTableGlobal, Eclientnewname, g_aClientIp[client]); + Format(query2, sizeof(query2), "UPDATE `%s` SET name='%s' WHERE lastip = '%s' AND season_id = '%d';", g_sSQLTableSeason, Eclientnewname, g_aClientIp[client], g_iSeasonID); + } + SQL_TQuery(g_hStatsDb, SQL_NothingCallback, query); + SQL_TQuery(g_hStatsDb, SQL_NothingCallback, query2); } } return Plugin_Continue; @@ -459,7 +573,7 @@ public void OnPluginEnd() { char weapons_query[2000] = ""; int weapon_array[42]; - g_aWeapons[client].GetData(weapon_array); + g_aWeaponsGlobal[client].GetData(weapon_array); for (int i = 0; i < 42; i++) { Format(weapons_query, sizeof(weapons_query), "%s,%s='%d'", weapons_query, g_sWeaponsNamesGame[i], weapon_array[i]); } @@ -470,44 +584,44 @@ public void OnPluginEnd() { if (g_RankBy == 0) { - Format(query, sizeof(query), g_sSqlSave, g_sSQLTable, g_aStats[client].SCORE, g_aStats[client].KILLS, g_aStats[client].DEATHS, g_aStats[client].ASSISTS, g_aStats[client].SUICIDES, g_aStats[client].TK, - g_aStats[client].SHOTS, g_aStats[client].HITS, g_aStats[client].HEADSHOTS, g_aStats[client].ROUNDS_TR, g_aStats[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, - g_aHitBox[client].HEAD, g_aHitBox[client].CHEST, g_aHitBox[client].STOMACH, g_aHitBox[client].LEFT_ARM, g_aHitBox[client].RIGHT_ARM, g_aHitBox[client].LEFT_LEG, g_aHitBox[client].RIGHT_LEG, g_aClientSteam[client]); - - Format(query2, sizeof(query2), g_sSqlSave2, g_sSQLTable, g_aStats[client].C4_PLANTED, g_aStats[client].C4_EXPLODED, g_aStats[client].C4_DEFUSED, g_aStats[client].CT_WIN, g_aStats[client].TR_WIN, - g_aStats[client].HOSTAGES_RESCUED, g_aStats[client].VIP_KILLED, g_aStats[client].VIP_ESCAPED, g_aStats[client].VIP_PLAYED, g_aStats[client].MVP, g_aStats[client].DAMAGE, - g_aStats[client].MATCH_WIN, g_aStats[client].MATCH_DRAW, g_aStats[client].MATCH_LOSE, - g_aStats[client].FB, g_aStats[client].NS, g_aStats[client].NSD, - g_aStats[client].SMOKE, g_aStats[client].BLIND, g_aStats[client].AF, g_aStats[client].ATF, g_aStats[client].ATK, g_aStats[client].WALL, - GetTime(), g_aStats[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, g_aClientSteam[client]); + Format(query, sizeof(query), g_sSqlSaveGlobal, g_sSQLTableGlobal, g_aStatsGlobal[client].SCORE, g_aStatsGlobal[client].KILLS, g_aStatsGlobal[client].DEATHS, g_aStatsGlobal[client].ASSISTS, g_aStatsGlobal[client].SUICIDES, g_aStatsGlobal[client].TK, + g_aStatsGlobal[client].SHOTS, g_aStatsGlobal[client].HITS, g_aStatsGlobal[client].HEADSHOTS, g_aStatsGlobal[client].ROUNDS_TR, g_aStatsGlobal[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, + g_aHitBoxGlobal[client].HEAD, g_aHitBoxGlobal[client].CHEST, g_aHitBoxGlobal[client].STOMACH, g_aHitBoxGlobal[client].LEFT_ARM, g_aHitBoxGlobal[client].RIGHT_ARM, g_aHitBoxGlobal[client].LEFT_LEG, g_aHitBoxGlobal[client].RIGHT_LEG, g_aClientSteam[client]); + + Format(query2, sizeof(query2), g_sSqlSave2Global, g_sSQLTableGlobal, g_aStatsGlobal[client].C4_PLANTED, g_aStatsGlobal[client].C4_EXPLODED, g_aStatsGlobal[client].C4_DEFUSED, g_aStatsGlobal[client].CT_WIN, g_aStatsGlobal[client].TR_WIN, + g_aStatsGlobal[client].HOSTAGES_RESCUED, g_aStatsGlobal[client].VIP_KILLED, g_aStatsGlobal[client].VIP_ESCAPED, g_aStatsGlobal[client].VIP_PLAYED, g_aStatsGlobal[client].MVP, g_aStatsGlobal[client].DAMAGE, + g_aStatsGlobal[client].MATCH_WIN, g_aStatsGlobal[client].MATCH_DRAW, g_aStatsGlobal[client].MATCH_LOSE, + g_aStatsGlobal[client].FB, g_aStatsGlobal[client].NS, g_aStatsGlobal[client].NSD, + g_aStatsGlobal[client].SMOKE, g_aStatsGlobal[client].BLIND, g_aStatsGlobal[client].AF, g_aStatsGlobal[client].ATF, g_aStatsGlobal[client].ATK, g_aStatsGlobal[client].WALL, + GetTime(), g_aStatsGlobal[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, g_aClientSteam[client]); } else if (g_RankBy == 1) { - Format(query, sizeof(query), g_sSqlSaveName, g_sSQLTable, g_aStats[client].SCORE, g_aStats[client].KILLS, g_aStats[client].DEATHS, g_aStats[client].ASSISTS, g_aStats[client].SUICIDES, g_aStats[client].TK, - g_aStats[client].SHOTS, g_aStats[client].HITS, g_aStats[client].HEADSHOTS, g_aStats[client].ROUNDS_TR, g_aStats[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, - g_aHitBox[client].HEAD, g_aHitBox[client].CHEST, g_aHitBox[client].STOMACH, g_aHitBox[client].LEFT_ARM, g_aHitBox[client].RIGHT_ARM, g_aHitBox[client].LEFT_LEG, g_aHitBox[client].RIGHT_LEG, sEscapeName); - - Format(query2, sizeof(query2), g_sSqlSaveName2, g_sSQLTable, g_aStats[client].C4_PLANTED, g_aStats[client].C4_EXPLODED, g_aStats[client].C4_DEFUSED, g_aStats[client].CT_WIN, g_aStats[client].TR_WIN, - g_aStats[client].HOSTAGES_RESCUED, g_aStats[client].VIP_KILLED, g_aStats[client].VIP_ESCAPED, g_aStats[client].VIP_PLAYED, g_aStats[client].MVP, g_aStats[client].DAMAGE, - g_aStats[client].MATCH_WIN, g_aStats[client].MATCH_DRAW, g_aStats[client].MATCH_LOSE, - g_aStats[client].FB, g_aStats[client].NS, g_aStats[client].NSD, - g_aStats[client].SMOKE, g_aStats[client].BLIND, g_aStats[client].AF, g_aStats[client].ATF, g_aStats[client].ATK, g_aStats[client].WALL, - GetTime(), g_aStats[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, sEscapeName); + Format(query, sizeof(query), g_sSqlSaveNameGlobal, g_sSQLTableGlobal, g_aStatsGlobal[client].SCORE, g_aStatsGlobal[client].KILLS, g_aStatsGlobal[client].DEATHS, g_aStatsGlobal[client].ASSISTS, g_aStatsGlobal[client].SUICIDES, g_aStatsGlobal[client].TK, + g_aStatsGlobal[client].SHOTS, g_aStatsGlobal[client].HITS, g_aStatsGlobal[client].HEADSHOTS, g_aStatsGlobal[client].ROUNDS_TR, g_aStatsGlobal[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, + g_aHitBoxGlobal[client].HEAD, g_aHitBoxGlobal[client].CHEST, g_aHitBoxGlobal[client].STOMACH, g_aHitBoxGlobal[client].LEFT_ARM, g_aHitBoxGlobal[client].RIGHT_ARM, g_aHitBoxGlobal[client].LEFT_LEG, g_aHitBoxGlobal[client].RIGHT_LEG, sEscapeName); + + Format(query2, sizeof(query2), g_sSqlSaveName2Global, g_sSQLTableGlobal, g_aStatsGlobal[client].C4_PLANTED, g_aStatsGlobal[client].C4_EXPLODED, g_aStatsGlobal[client].C4_DEFUSED, g_aStatsGlobal[client].CT_WIN, g_aStatsGlobal[client].TR_WIN, + g_aStatsGlobal[client].HOSTAGES_RESCUED, g_aStatsGlobal[client].VIP_KILLED, g_aStatsGlobal[client].VIP_ESCAPED, g_aStatsGlobal[client].VIP_PLAYED, g_aStatsGlobal[client].MVP, g_aStatsGlobal[client].DAMAGE, + g_aStatsGlobal[client].MATCH_WIN, g_aStatsGlobal[client].MATCH_DRAW, g_aStatsGlobal[client].MATCH_LOSE, + g_aStatsGlobal[client].FB, g_aStatsGlobal[client].NS, g_aStatsGlobal[client].NSD, + g_aStatsGlobal[client].SMOKE, g_aStatsGlobal[client].BLIND, g_aStatsGlobal[client].AF, g_aStatsGlobal[client].ATF, g_aStatsGlobal[client].ATK, g_aStatsGlobal[client].WALL, + GetTime(), g_aStatsGlobal[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, sEscapeName); } else if (g_RankBy == 2) { - Format(query, sizeof(query), g_sSqlSaveIp, g_sSQLTable, g_aStats[client].SCORE, g_aStats[client].KILLS, g_aStats[client].DEATHS, g_aStats[client].ASSISTS, g_aStats[client].SUICIDES, g_aStats[client].TK, - g_aStats[client].SHOTS, g_aStats[client].HITS, g_aStats[client].HEADSHOTS, g_aStats[client].ROUNDS_TR, g_aStats[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, - g_aHitBox[client].HEAD, g_aHitBox[client].CHEST, g_aHitBox[client].STOMACH, g_aHitBox[client].LEFT_ARM, g_aHitBox[client].RIGHT_ARM, g_aHitBox[client].LEFT_LEG, g_aHitBox[client].RIGHT_LEG, g_aClientIp[client]); - - Format(query2, sizeof(query2), g_sSqlSaveIp2, g_aStats[client].C4_PLANTED, g_aStats[client].C4_EXPLODED, g_aStats[client].C4_DEFUSED, g_aStats[client].CT_WIN, g_aStats[client].TR_WIN, - g_aStats[client].HOSTAGES_RESCUED, g_aStats[client].VIP_KILLED, g_aStats[client].VIP_ESCAPED, g_aStats[client].VIP_PLAYED, g_aStats[client].MVP, g_aStats[client].DAMAGE, - g_aStats[client].MATCH_WIN, g_aStats[client].MATCH_DRAW, g_aStats[client].MATCH_LOSE, - g_aStats[client].FB, g_aStats[client].NS, g_aStats[client].NSD, - g_aStats[client].SMOKE, g_aStats[client].BLIND, g_aStats[client].AF, g_aStats[client].ATF, g_aStats[client].ATK, g_aStats[client].WALL, - GetTime(), g_aStats[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, g_aClientIp[client]); + Format(query, sizeof(query), g_sSqlSaveIpGlobal, g_sSQLTableGlobal, g_aStatsGlobal[client].SCORE, g_aStatsGlobal[client].KILLS, g_aStatsGlobal[client].DEATHS, g_aStatsGlobal[client].ASSISTS, g_aStatsGlobal[client].SUICIDES, g_aStatsGlobal[client].TK, + g_aStatsGlobal[client].SHOTS, g_aStatsGlobal[client].HITS, g_aStatsGlobal[client].HEADSHOTS, g_aStatsGlobal[client].ROUNDS_TR, g_aStatsGlobal[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, + g_aHitBoxGlobal[client].HEAD, g_aHitBoxGlobal[client].CHEST, g_aHitBoxGlobal[client].STOMACH, g_aHitBoxGlobal[client].LEFT_ARM, g_aHitBoxGlobal[client].RIGHT_ARM, g_aHitBoxGlobal[client].LEFT_LEG, g_aHitBoxGlobal[client].RIGHT_LEG, g_aClientIp[client]); + + Format(query2, sizeof(query2), g_sSqlSaveIp2Global, g_aStatsGlobal[client].C4_PLANTED, g_aStatsGlobal[client].C4_EXPLODED, g_aStatsGlobal[client].C4_DEFUSED, g_aStatsGlobal[client].CT_WIN, g_aStatsGlobal[client].TR_WIN, + g_aStatsGlobal[client].HOSTAGES_RESCUED, g_aStatsGlobal[client].VIP_KILLED, g_aStatsGlobal[client].VIP_ESCAPED, g_aStatsGlobal[client].VIP_PLAYED, g_aStatsGlobal[client].MVP, g_aStatsGlobal[client].DAMAGE, + g_aStatsGlobal[client].MATCH_WIN, g_aStatsGlobal[client].MATCH_DRAW, g_aStatsGlobal[client].MATCH_LOSE, + g_aStatsGlobal[client].FB, g_aStatsGlobal[client].NS, g_aStatsGlobal[client].NSD, + g_aStatsGlobal[client].SMOKE, g_aStatsGlobal[client].BLIND, g_aStatsGlobal[client].AF, g_aStatsGlobal[client].ATF, g_aStatsGlobal[client].ATK, g_aStatsGlobal[client].WALL, + GetTime(), g_aStatsGlobal[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, g_aClientIp[client]); } LogMessage(query); @@ -515,6 +629,58 @@ public void OnPluginEnd() { SQL_FastQuery(g_hStatsDb, query); SQL_FastQuery(g_hStatsDb, query2); + g_aWeaponsSeason[client].GetData(weapon_array); + for (int i = 0; i < 42; i++) { + Format(weapons_query, sizeof(weapons_query), "%s,%s='%d'", weapons_query, g_sWeaponsNamesGame[i], weapon_array[i]); + } + + if (g_RankBy == 0) + { + Format(query, sizeof(query), g_sSqlSaveSeason, g_sSQLTableSeason, g_aStatsSeason[client].SCORE, g_aStatsSeason[client].KILLS, g_aStatsSeason[client].DEATHS, g_aStatsSeason[client].ASSISTS, g_aStatsSeason[client].SUICIDES, g_aStatsSeason[client].TK, + g_aStatsSeason[client].SHOTS, g_aStatsSeason[client].HITS, g_aStatsSeason[client].HEADSHOTS, g_aStatsSeason[client].ROUNDS_TR, g_aStatsSeason[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, + g_aHitBoxSeason[client].HEAD, g_aHitBoxSeason[client].CHEST, g_aHitBoxSeason[client].STOMACH, g_aHitBoxSeason[client].LEFT_ARM, g_aHitBoxSeason[client].RIGHT_ARM, g_aHitBoxSeason[client].LEFT_LEG, g_aHitBoxSeason[client].RIGHT_LEG, g_aClientSteam[client], g_iSeasonID); + + Format(query2, sizeof(query2), g_sSqlSave2Season, g_sSQLTableSeason, g_aStatsSeason[client].C4_PLANTED, g_aStatsSeason[client].C4_EXPLODED, g_aStatsSeason[client].C4_DEFUSED, g_aStatsSeason[client].CT_WIN, g_aStatsSeason[client].TR_WIN, + g_aStatsSeason[client].HOSTAGES_RESCUED, g_aStatsSeason[client].VIP_KILLED, g_aStatsSeason[client].VIP_ESCAPED, g_aStatsSeason[client].VIP_PLAYED, g_aStatsSeason[client].MVP, g_aStatsSeason[client].DAMAGE, + g_aStatsSeason[client].MATCH_WIN, g_aStatsSeason[client].MATCH_DRAW, g_aStatsSeason[client].MATCH_LOSE, + g_aStatsSeason[client].FB, g_aStatsSeason[client].NS, g_aStatsSeason[client].NSD, + g_aStatsSeason[client].SMOKE, g_aStatsSeason[client].BLIND, g_aStatsSeason[client].AF, g_aStatsSeason[client].ATF, g_aStatsSeason[client].ATK, g_aStatsSeason[client].WALL, + GetTime(), g_aStatsSeason[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, g_aClientSteam[client], g_iSeasonID); + } + + else if (g_RankBy == 1) + { + Format(query, sizeof(query), g_sSqlSaveNameSeason, g_sSQLTableSeason, g_aStatsSeason[client].SCORE, g_aStatsSeason[client].KILLS, g_aStatsSeason[client].DEATHS, g_aStatsSeason[client].ASSISTS, g_aStatsSeason[client].SUICIDES, g_aStatsSeason[client].TK, + g_aStatsSeason[client].SHOTS, g_aStatsSeason[client].HITS, g_aStatsSeason[client].HEADSHOTS, g_aStatsSeason[client].ROUNDS_TR, g_aStatsSeason[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, + g_aHitBoxSeason[client].HEAD, g_aHitBoxSeason[client].CHEST, g_aHitBoxSeason[client].STOMACH, g_aHitBoxSeason[client].LEFT_ARM, g_aHitBoxSeason[client].RIGHT_ARM, g_aHitBoxSeason[client].LEFT_LEG, g_aHitBoxSeason[client].RIGHT_LEG, sEscapeName, g_iSeasonID); + + Format(query2, sizeof(query2), g_sSqlSaveName2Season, g_sSQLTableSeason, g_aStatsSeason[client].C4_PLANTED, g_aStatsSeason[client].C4_EXPLODED, g_aStatsSeason[client].C4_DEFUSED, g_aStatsSeason[client].CT_WIN, g_aStatsSeason[client].TR_WIN, + g_aStatsSeason[client].HOSTAGES_RESCUED, g_aStatsSeason[client].VIP_KILLED, g_aStatsSeason[client].VIP_ESCAPED, g_aStatsSeason[client].VIP_PLAYED, g_aStatsSeason[client].MVP, g_aStatsSeason[client].DAMAGE, + g_aStatsSeason[client].MATCH_WIN, g_aStatsSeason[client].MATCH_DRAW, g_aStatsSeason[client].MATCH_LOSE, + g_aStatsSeason[client].FB, g_aStatsSeason[client].NS, g_aStatsSeason[client].NSD, + g_aStatsSeason[client].SMOKE, g_aStatsSeason[client].BLIND, g_aStatsSeason[client].AF, g_aStatsSeason[client].ATF, g_aStatsSeason[client].ATK, g_aStatsSeason[client].WALL, + GetTime(), g_aStatsSeason[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, sEscapeName, g_iSeasonID); + } + + else if (g_RankBy == 2) + { + Format(query, sizeof(query), g_sSqlSaveIpSeason, g_sSQLTableSeason, g_aStatsSeason[client].SCORE, g_aStatsSeason[client].KILLS, g_aStatsSeason[client].DEATHS, g_aStatsSeason[client].ASSISTS, g_aStatsSeason[client].SUICIDES, g_aStatsSeason[client].TK, + g_aStatsSeason[client].SHOTS, g_aStatsSeason[client].HITS, g_aStatsSeason[client].HEADSHOTS, g_aStatsSeason[client].ROUNDS_TR, g_aStatsSeason[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, + g_aHitBoxSeason[client].HEAD, g_aHitBoxSeason[client].CHEST, g_aHitBoxSeason[client].STOMACH, g_aHitBoxSeason[client].LEFT_ARM, g_aHitBoxSeason[client].RIGHT_ARM, g_aHitBoxSeason[client].LEFT_LEG, g_aHitBoxSeason[client].RIGHT_LEG, g_aClientIp[client], g_iSeasonID); + + Format(query2, sizeof(query2), g_sSqlSaveIp2Season, g_aStatsSeason[client].C4_PLANTED, g_aStatsSeason[client].C4_EXPLODED, g_aStatsSeason[client].C4_DEFUSED, g_aStatsSeason[client].CT_WIN, g_aStatsSeason[client].TR_WIN, + g_aStatsSeason[client].HOSTAGES_RESCUED, g_aStatsSeason[client].VIP_KILLED, g_aStatsSeason[client].VIP_ESCAPED, g_aStatsSeason[client].VIP_PLAYED, g_aStatsSeason[client].MVP, g_aStatsSeason[client].DAMAGE, + g_aStatsSeason[client].MATCH_WIN, g_aStatsSeason[client].MATCH_DRAW, g_aStatsSeason[client].MATCH_LOSE, + g_aStatsSeason[client].FB, g_aStatsSeason[client].NS, g_aStatsSeason[client].NSD, + g_aStatsSeason[client].SMOKE, g_aStatsSeason[client].BLIND, g_aStatsSeason[client].AF, g_aStatsSeason[client].ATF, g_aStatsSeason[client].ATK, g_aStatsSeason[client].WALL, + GetTime(), g_aStatsSeason[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, g_aClientIp[client], g_iSeasonID); + } + + LogMessage(query); + LogMessage(query2); + SQL_FastQuery(g_hStatsDb, query); + SQL_FastQuery(g_hStatsDb, query2); + /** Start the forward OnPlayerSaved */ @@ -549,17 +715,21 @@ public Action Event_VipEscaped(Handle event, const char[] name, bool dontBroadca for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && GetClientTeam(i) == CT) { - g_aStats[i].SCORE += g_PointsVipEscapedTeam; + g_aStatsGlobal[i].SCORE += g_PointsVipEscapedTeam; + g_aStatsSeason[i].SCORE += g_PointsVipEscapedTeam; g_aSession[i].SCORE += g_PointsVipEscapedTeam; } } - g_aStats[client].VIP_PLAYED++; + g_aStatsGlobal[client].VIP_PLAYED++; + g_aStatsSeason[client].VIP_PLAYED++; g_aSession[client].VIP_PLAYED++; - g_aStats[client].VIP_ESCAPED++; + g_aStatsGlobal[client].VIP_ESCAPED++; + g_aStatsSeason[client].VIP_ESCAPED++; g_aSession[client].VIP_ESCAPED++; - g_aStats[client].SCORE += g_PointsVipEscapedPlayer; + g_aStatsGlobal[client].SCORE += g_PointsVipEscapedPlayer; + g_aStatsSeason[client].SCORE += g_PointsVipEscapedPlayer; g_aSession[client].SCORE += g_PointsVipEscapedPlayer; if (!g_bChatChange) @@ -570,7 +740,7 @@ public Action Event_VipEscaped(Handle event, const char[] name, bool dontBroadca if (client != 0 && (g_bRankBots && !IsFakeClient(client))) for (int i = 1; i <= MaxClients; i++) if (IsClientInGame(i)) - if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "VIPEscaped", i, g_aClientName[client], g_aStats[client].SCORE, g_PointsVipEscapedTeam + g_PointsVipEscapedPlayer); + if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "VIPEscaped", i, g_aClientName[client], g_aStatsGlobal[client].SCORE, g_PointsVipEscapedTeam + g_PointsVipEscapedPlayer); } public Action Event_VipKilled(Handle event, const char[] name, bool dontBroadcast) { @@ -582,17 +752,21 @@ public Action Event_VipKilled(Handle event, const char[] name, bool dontBroadcas for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && GetClientTeam(i) == TR) { - g_aStats[i].SCORE += g_PointsVipKilledTeam; + g_aStatsGlobal[i].SCORE += g_PointsVipKilledTeam; + g_aStatsSeason[i].SCORE += g_PointsVipKilledTeam; g_aSession[i].SCORE += g_PointsVipKilledTeam; } } - g_aStats[client].VIP_PLAYED++; + g_aStatsGlobal[client].VIP_PLAYED++; + g_aStatsSeason[client].VIP_PLAYED++; g_aSession[client].VIP_PLAYED++; - g_aStats[killer].VIP_KILLED++; + g_aStatsGlobal[killer].VIP_KILLED++; + g_aStatsSeason[killer].VIP_KILLED++; g_aSession[killer].VIP_KILLED++; - g_aStats[killer].SCORE += g_PointsVipKilledPlayer; + g_aStatsGlobal[killer].SCORE += g_PointsVipKilledPlayer; + g_aStatsSeason[killer].SCORE += g_PointsVipKilledPlayer; g_aSession[killer].SCORE += g_PointsVipKilledPlayer; if (!g_bChatChange) @@ -603,7 +777,7 @@ public Action Event_VipKilled(Handle event, const char[] name, bool dontBroadcas if (client != 0 && (g_bRankBots && !IsFakeClient(client))) for (int i = 1; i <= MaxClients; i++) if (IsClientInGame(i)) - if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "VIPKilled", i, g_aClientName[client], g_aStats[client].SCORE, g_PointsVipKilledTeam + g_PointsVipKilledPlayer); + if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "VIPKilled", i, g_aClientName[client], g_aStatsGlobal[client].SCORE, g_PointsVipKilledTeam + g_PointsVipKilledPlayer); } public Action Event_HostageRescued(Handle event, const char[] name, bool dontBroadcast) { @@ -615,15 +789,18 @@ public Action Event_HostageRescued(Handle event, const char[] name, bool dontBro for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && GetClientTeam(i) == CT) { - g_aStats[i].SCORE += g_PointsHostageRescTeam; + g_aStatsGlobal[i].SCORE += g_PointsHostageRescTeam; + g_aStatsSeason[i].SCORE += g_PointsHostageRescTeam; g_aSession[i].SCORE += g_PointsHostageRescTeam; } } g_aSession[client].HOSTAGES_RESCUED++; - g_aStats[client].HOSTAGES_RESCUED++; - g_aStats[client].SCORE += g_PointsHostageRescPlayer; + g_aStatsGlobal[client].HOSTAGES_RESCUED++; + g_aStatsSeason[client].HOSTAGES_RESCUED++; + g_aStatsGlobal[client].SCORE += g_PointsHostageRescPlayer; + g_aStatsSeason[client].SCORE += g_PointsHostageRescPlayer; g_aSession[client].SCORE += g_PointsHostageRescPlayer; if (!g_bChatChange) @@ -636,7 +813,7 @@ public Action Event_HostageRescued(Handle event, const char[] name, bool dontBro if (g_PointsHostageRescPlayer > 0 && client != 0 && (g_bRankBots && !IsFakeClient(client))) for (int i = 1; i <= MaxClients; i++) if (IsClientInGame(i)) - if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "Hostage", i, g_aClientName[client], g_aStats[client].SCORE, g_PointsHostageRescPlayer + g_PointsHostageRescTeam); + if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "Hostage", i, g_aClientName[client], g_aStatsGlobal[client].SCORE, g_PointsHostageRescPlayer + g_PointsHostageRescTeam); } @@ -653,22 +830,25 @@ public Action Event_RoundMVP(Handle event, const char[] name, bool dontBroadcast if (team == 2) { - g_aStats[client].SCORE += g_PointsMvpTr; + g_aStatsGlobal[client].SCORE += g_PointsMvpTr; + g_aStatsSeason[client].SCORE += g_PointsMvpTr; g_aSession[client].SCORE += g_PointsMvpTr; for (int i = 1; i <= MaxClients; i++) if (IsClientInGame(i)) - if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "MVP", i, g_aClientName[client], g_aStats[client].SCORE, g_PointsMvpTr); + if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "MVP", i, g_aClientName[client], g_aStatsGlobal[client].SCORE, g_PointsMvpTr); } else { - g_aStats[client].SCORE += g_PointsMvpCt; + g_aStatsGlobal[client].SCORE += g_PointsMvpCt; + g_aStatsSeason[client].SCORE += g_PointsMvpCt; g_aSession[client].SCORE += g_PointsMvpCt; for (int i = 1; i <= MaxClients; i++) if (IsClientInGame(i)) - if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "MVP", i, g_aClientName[client], g_aStats[client].SCORE, g_PointsMvpCt); + if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "MVP", i, g_aClientName[client], g_aStatsGlobal[client].SCORE, g_PointsMvpCt); } } - g_aStats[client].MVP++; + g_aStatsGlobal[client].MVP++; + g_aStatsSeason[client].MVP++; g_aSession[client].MVP++; } public Action Event_RoundEnd(Handle event, const char[] name, bool dontBroadcast) { @@ -683,10 +863,12 @@ public Action Event_RoundEnd(Handle event, const char[] name, bool dontBroadcast if (Winner == TR) { if(GetClientTeam(i) == TR){ g_aSession[i].TR_WIN++; - g_aStats[i].TR_WIN++; + g_aStatsGlobal[i].TR_WIN++; + g_aStatsSeason[i].TR_WIN++; if (g_PointsRoundWin[TR] > 0) { g_aSession[i].SCORE += g_PointsRoundWin[TR]; - g_aStats[i].SCORE += g_PointsRoundWin[TR]; + g_aStatsGlobal[i].SCORE += g_PointsRoundWin[TR]; + g_aStatsSeason[i].SCORE += g_PointsRoundWin[TR]; if (!announced && g_bChatChange) { for (int j = 1; j <= MaxClients; j++) if (IsClientInGame(j)) @@ -696,17 +878,25 @@ public Action Event_RoundEnd(Handle event, const char[] name, bool dontBroadcast } else if(GetClientTeam(i) == CT){ if (g_PointsRoundLose[CT] > 0) { - g_aStats[i].SCORE -= g_PointsRoundLose[CT]; + g_aStatsGlobal[i].SCORE -= g_PointsRoundLose[CT]; + g_aStatsSeason[i].SCORE -= g_PointsRoundLose[CT]; /* Min points */ - if (g_bPointsMinEnabled && g_aStats[i].SCORE < g_PointsMin) + if (g_bPointsMinEnabled) { - int diff = g_PointsMin - g_aStats[i].SCORE; - g_aStats[i].SCORE = g_PointsMin; - g_aSession[i].SCORE -= diff; - } - else{ - g_aSession[i].SCORE -= g_PointsRoundLose[CT]; + if(g_aStatsGlobal[i].SCORE < g_PointsMin) + { + int diff = g_PointsMin - g_aStatsGlobal[i].SCORE; + g_aStatsGlobal[i].SCORE = g_PointsMin; + g_aSession[i].SCORE -= diff; + } + else{ + g_aSession[i].SCORE -= g_PointsRoundLose[CT]; + } + if(g_aStatsSeason[i].SCORE < g_PointsMin) + { + g_aStatsSeason[i].SCORE = g_PointsMin; + } } if (!announced && g_bChatChange) { @@ -721,10 +911,12 @@ public Action Event_RoundEnd(Handle event, const char[] name, bool dontBroadcast } else if (Winner == CT) { if(GetClientTeam(i) == CT){ g_aSession[i].CT_WIN++; - g_aStats[i].CT_WIN++; + g_aStatsGlobal[i].CT_WIN++; + g_aStatsSeason[i].CT_WIN++; if (g_PointsRoundWin[CT] > 0) { g_aSession[i].SCORE += g_PointsRoundWin[CT]; - g_aStats[i].SCORE += g_PointsRoundWin[CT]; + g_aStatsGlobal[i].SCORE += g_PointsRoundWin[CT]; + g_aStatsSeason[i].SCORE += g_PointsRoundWin[CT]; if (!announced && g_bChatChange) { for (int j = 1; j <= MaxClients; j++) if (IsClientInGame(j)) @@ -734,17 +926,25 @@ public Action Event_RoundEnd(Handle event, const char[] name, bool dontBroadcast } else if(GetClientTeam(i) == TR){ if (g_PointsRoundLose[TR] > 0) { - g_aStats[i].SCORE -= g_PointsRoundLose[TR]; + g_aStatsGlobal[i].SCORE -= g_PointsRoundLose[TR]; + g_aStatsSeason[i].SCORE -= g_PointsRoundLose[TR]; /* Min points */ - if (g_bPointsMinEnabled && g_aStats[i].SCORE < g_PointsMin) + if (g_bPointsMinEnabled) { - int diff = g_PointsMin - g_aStats[i].SCORE; - g_aStats[i].SCORE = g_PointsMin; - g_aSession[i].SCORE -= diff; - } - else{ - g_aSession[i].SCORE -= g_PointsRoundLose[TR]; + if(g_aStatsGlobal[i].SCORE < g_PointsMin) + { + int diff = g_PointsMin - g_aStatsGlobal[i].SCORE; + g_aStatsGlobal[i].SCORE = g_PointsMin; + g_aSession[i].SCORE -= diff; + } + else { + g_aSession[i].SCORE -= g_PointsRoundLose[TR]; + } + if(g_aStatsSeason[i].SCORE < g_PointsMin) + { + g_aStatsSeason[i].SCORE = g_PointsMin; + } } if (!announced && g_bChatChange) { @@ -774,10 +974,10 @@ public void EventPlayerSpawn(Handle event, const char[] name, bool dontBroadcast if (!g_bRankBots && IsFakeClient(client)) return; if (GetClientTeam(client) == TR) { - g_aStats[client].ROUNDS_TR++; + g_aStatsGlobal[client].ROUNDS_TR++; g_aSession[client].ROUNDS_TR++; } else if (GetClientTeam(client) == CT) { - g_aStats[client].ROUNDS_CT++; + g_aStatsGlobal[client].ROUNDS_CT++; g_aSession[client].ROUNDS_CT++; } */ @@ -796,12 +996,14 @@ public void Event_RoundStart(Handle event, const char[] name, bool dontBroadcast { if (IsClientInGame(i) && GetClientTeam(i) == TR) { - g_aStats[i].ROUNDS_TR++; + g_aStatsGlobal[i].ROUNDS_TR++; + g_aStatsSeason[i].ROUNDS_TR++; g_aSession[i].ROUNDS_TR++; } else if (IsClientInGame(i) && GetClientTeam(i) == CT) { - g_aStats[i].ROUNDS_CT++; + g_aStatsGlobal[i].ROUNDS_CT++; + g_aStatsSeason[i].ROUNDS_CT++; g_aSession[i].ROUNDS_CT++; } } @@ -819,15 +1021,18 @@ public Action Event_BombPlanted(Handle event, const char[] name, bool dontBroadc for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && GetClientTeam(i) == TR) { - g_aStats[i].SCORE += g_PointsBombPlantedTeam; + g_aStatsGlobal[i].SCORE += g_PointsBombPlantedTeam; + g_aStatsSeason[i].SCORE += g_PointsBombPlantedTeam; g_aSession[i].SCORE += g_PointsBombPlantedTeam; } } - g_aStats[client].C4_PLANTED++; + g_aStatsGlobal[client].C4_PLANTED++; + g_aStatsSeason[client].C4_PLANTED++; g_aSession[client].C4_PLANTED++; - g_aStats[client].SCORE += g_PointsBombPlantedPlayer; + g_aStatsGlobal[client].SCORE += g_PointsBombPlantedPlayer; + g_aStatsSeason[client].SCORE += g_PointsBombPlantedPlayer; g_aSession[client].SCORE += g_PointsBombPlantedPlayer; strcopy(g_sC4PlantedByName, sizeof(g_sC4PlantedByName), g_aClientName[client]); @@ -840,7 +1045,7 @@ public Action Event_BombPlanted(Handle event, const char[] name, bool dontBroadc if (g_PointsBombPlantedPlayer > 0 && client != 0 && (g_bRankBots || !IsFakeClient(client))) for (int i = 1; i <= MaxClients; i++) if (IsClientInGame(i)) - if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "Planting", i, g_aClientName[client], g_aStats[client].SCORE, g_PointsBombPlantedTeam + g_PointsBombPlantedPlayer); + if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "Planting", i, g_aClientName[client], g_aStatsGlobal[client].SCORE, g_PointsBombPlantedTeam + g_PointsBombPlantedPlayer); } @@ -853,15 +1058,18 @@ public Action Event_BombDefused(Handle event, const char[] name, bool dontBroadc for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && GetClientTeam(i) == CT) { - g_aStats[i].SCORE += g_PointsBombDefusedTeam; + g_aStatsGlobal[i].SCORE += g_PointsBombDefusedTeam; + g_aStatsSeason[i].SCORE += g_PointsBombDefusedTeam; g_aSession[i].SCORE += g_PointsBombDefusedTeam; } } - g_aStats[client].C4_DEFUSED++; + g_aStatsGlobal[client].C4_DEFUSED++; + g_aStatsSeason[client].C4_DEFUSED++; g_aSession[client].C4_DEFUSED++; - g_aStats[client].SCORE += g_PointsBombDefusedPlayer; + g_aStatsGlobal[client].SCORE += g_PointsBombDefusedPlayer; + g_aStatsSeason[client].SCORE += g_PointsBombDefusedPlayer; g_aSession[client].SCORE += g_PointsBombDefusedPlayer; if (!g_bChatChange) @@ -873,7 +1081,7 @@ public Action Event_BombDefused(Handle event, const char[] name, bool dontBroadc if (g_PointsBombDefusedPlayer > 0 && client != 0 && (g_bRankBots || !IsFakeClient(client))) for (int i = 1; i <= MaxClients; i++) if (IsClientInGame(i)) - if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "Defusing", i, g_aClientName[client], g_aStats[client].SCORE, g_PointsBombDefusedTeam + g_PointsBombDefusedPlayer); + if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "Defusing", i, g_aClientName[client], g_aStatsGlobal[client].SCORE, g_PointsBombDefusedTeam + g_PointsBombDefusedPlayer); } public Action Event_BombExploded(Handle event, const char[] name, bool dontBroadcast) @@ -889,15 +1097,18 @@ public Action Event_BombExploded(Handle event, const char[] name, bool dontBroad for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && GetClientTeam(i) == TR) { - g_aStats[i].SCORE += g_PointsBombExplodeTeam; + g_aStatsGlobal[i].SCORE += g_PointsBombExplodeTeam; + g_aStatsSeason[i].SCORE += g_PointsBombExplodeTeam; g_aSession[i].SCORE += g_PointsBombExplodeTeam; } } - g_aStats[client].C4_EXPLODED++; + g_aStatsGlobal[client].C4_EXPLODED++; + g_aStatsSeason[client].C4_EXPLODED++; g_aSession[client].C4_EXPLODED++; - g_aStats[client].SCORE += g_PointsBombExplodePlayer; + g_aStatsGlobal[client].SCORE += g_PointsBombExplodePlayer; + g_aStatsSeason[client].SCORE += g_PointsBombExplodePlayer; g_aSession[client].SCORE += g_PointsBombExplodePlayer; if (!g_bChatChange) @@ -909,7 +1120,7 @@ public Action Event_BombExploded(Handle event, const char[] name, bool dontBroad if (g_PointsBombExplodePlayer > 0 && client != 0 && (g_bRankBots || !IsFakeClient(client))) for (int i = 1; i <= MaxClients; i++) if (IsClientInGame(i)) - if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "Exploding", i, g_sC4PlantedByName, g_aStats[client].SCORE, g_PointsBombExplodeTeam + g_PointsBombExplodePlayer); + if(!hidechat[i]) CPrintToChat(i, "%s %T", MSG, "Exploding", i, g_sC4PlantedByName, g_aStatsGlobal[client].SCORE, g_PointsBombExplodeTeam + g_PointsBombExplodePlayer); } public Action Event_BombPickup(Handle event, const char[] name, bool dontBroadcast) @@ -919,13 +1130,14 @@ public Action Event_BombPickup(Handle event, const char[] name, bool dontBroadca int client = GetClientOfUserId(GetEventInt(event, "userid")); - g_aStats[client].SCORE += g_PointsBombPickup; + g_aStatsGlobal[client].SCORE += g_PointsBombPickup; + g_aStatsSeason[client].SCORE += g_PointsBombPickup; g_aSession[client].SCORE += g_PointsBombPickup; if (!g_bChatChange) return; if (g_PointsBombPickup > 0) - if(!hidechat[client]) CPrintToChat(client, "%s %T", MSG, "BombPickup", client, g_aClientName[client], g_aStats[client].SCORE, g_PointsBombPickup); + if(!hidechat[client]) CPrintToChat(client, "%s %T", MSG, "BombPickup", client, g_aClientName[client], g_aStatsGlobal[client].SCORE, g_PointsBombPickup); } @@ -936,23 +1148,31 @@ public Action Event_BombDropped(Handle event, const char[] name, bool dontBroadc int client = GetClientOfUserId(GetEventInt(event, "userid")); - g_aStats[client].SCORE -= g_PointsBombDropped; + g_aStatsGlobal[client].SCORE -= g_PointsBombDropped; + g_aStatsSeason[client].SCORE -= g_PointsBombDropped; /* Min points */ - if (g_bPointsMinEnabled && g_aStats[client].SCORE < g_PointsMin) + if (g_bPointsMinEnabled) { - int diff = g_PointsMin - g_aStats[client].SCORE; - g_aStats[client].SCORE = g_PointsMin; - g_aSession[client].SCORE -= diff; - } - else{ - g_aSession[client].SCORE -= g_PointsBombDropped; + if(g_aStatsGlobal[client].SCORE < g_PointsMin) + { + int diff = g_PointsMin - g_aStatsGlobal[client].SCORE; + g_aStatsGlobal[client].SCORE = g_PointsMin; + g_aSession[client].SCORE -= diff; + } + else{ + g_aSession[client].SCORE -= g_PointsBombDropped; + } + if(g_aStatsSeason[client].SCORE < g_PointsMin) + { + g_aStatsSeason[client].SCORE = g_PointsMin; + } } if (!g_bChatChange) return; if (g_PointsBombDropped > 0 && client == 0) - if(!hidechat[client]) CPrintToChat(client, "%s %T", MSG, "BombDropped", client, g_aClientName[client], g_aStats[client].SCORE, g_PointsBombDropped); + if(!hidechat[client]) CPrintToChat(client, "%s %T", MSG, "BombDropped", client, g_aClientName[client], g_aStatsGlobal[client].SCORE, g_PointsBombDropped); } @@ -961,7 +1181,6 @@ public Action EventPlayerDeath(Handle event, const char [] name, bool dontBroadc { if (!g_bEnabled || !g_bGatherStats || g_MinimumPlayers > GetCurrentPlayers()) return; - int victim = GetClientOfUserId(GetEventInt(event, "userid")); int attacker = GetClientOfUserId(GetEventInt(event, "attacker")); int assist = GetClientOfUserId(GetEventInt(event, "assister")); @@ -972,48 +1191,65 @@ public Action EventPlayerDeath(Handle event, const char [] name, bool dontBroadc if (!g_bRankBots && attacker != 0 && (IsFakeClient(victim) || IsFakeClient(attacker))) return; - if (victim == attacker || attacker == 0) { - g_aStats[victim].SUICIDES++; + g_aStatsGlobal[victim].SUICIDES++; + g_aStatsSeason[victim].SUICIDES++; g_aSession[victim].SUICIDES++; - g_aStats[victim].SCORE -= g_PointsLoseSuicide; + g_aStatsGlobal[victim].SCORE -= g_PointsLoseSuicide; + g_aStatsSeason[victim].SCORE -= g_PointsLoseSuicide; /* Min points */ - if (g_bPointsMinEnabled && g_aStats[victim].SCORE < g_PointsMin) + if (g_bPointsMinEnabled) { - int diff = g_PointsMin - g_aStats[victim].SCORE; - g_aStats[victim].SCORE = g_PointsMin; - g_aSession[victim].SCORE -= diff; - } - else{ - g_aSession[victim].SCORE -= g_PointsLoseSuicide; + if(g_aStatsGlobal[victim].SCORE < g_PointsMin) + { + int diff = g_PointsMin - g_aStatsGlobal[victim].SCORE; + g_aStatsGlobal[victim].SCORE = g_PointsMin; + g_aSession[victim].SCORE -= diff; + } + else{ + g_aSession[victim].SCORE -= g_PointsLoseSuicide; + } + if(g_aStatsSeason[victim].SCORE < g_PointsMin) + { + g_aStatsSeason[victim].SCORE = g_PointsMin; + } } if (g_PointsLoseSuicide > 0 && g_bChatChange) { - if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "LostSuicide", victim, g_aClientName[victim], g_aStats[victim].SCORE, g_PointsLoseSuicide); + if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "LostSuicide", victim, g_aClientName[victim], g_aStatsGlobal[victim].SCORE, g_PointsLoseSuicide); } } else if (!g_bFfa && (GetClientTeam(victim) == GetClientTeam(attacker))) { if (attacker < MAXPLAYERS) { - g_aStats[attacker].TK++; + g_aStatsGlobal[attacker].TK++; + g_aStatsSeason[attacker].TK++; g_aSession[attacker].TK++; - g_aStats[attacker].SCORE -= g_PointsLoseTk; + g_aStatsGlobal[attacker].SCORE -= g_PointsLoseTk; + g_aStatsSeason[attacker].SCORE -= g_PointsLoseTk; /* Min points */ - if (g_bPointsMinEnabled && g_aStats[attacker].SCORE < g_PointsMin) + if (g_bPointsMinEnabled) { - int diff = g_PointsMin - g_aStats[attacker].SCORE; - g_aStats[attacker].SCORE = g_PointsMin; - g_aSession[attacker].SCORE -= diff; - } - else{ - g_aSession[attacker].SCORE -= g_PointsLoseTk; + if(g_aStatsGlobal[attacker].SCORE < g_PointsMin) + { + int diff = g_PointsMin - g_aStatsGlobal[attacker].SCORE; + g_aStatsGlobal[attacker].SCORE = g_PointsMin; + g_aSession[attacker].SCORE -= diff; + } + else{ + g_aSession[attacker].SCORE -= g_PointsLoseTk; + } + if(g_aStatsSeason[attacker].SCORE < g_PointsMin) + { + g_aStatsSeason[attacker].SCORE = g_PointsMin; + } } if (g_PointsLoseTk > 0 && g_bChatChange) { - if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "LostTK", victim, g_aClientName[attacker], g_aStats[attacker].SCORE, g_PointsLoseTk, g_aClientName[victim]); - if(!hidechat[attacker]) CPrintToChat(attacker, "%s %T", MSG, "LostTK", attacker, g_aClientName[attacker], g_aStats[attacker].SCORE, g_PointsLoseTk, g_aClientName[victim]); + if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "LostTK", victim, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, g_PointsLoseTk, g_aClientName[victim]); + if(!hidechat[attacker]) CPrintToChat(attacker, "%s %T", MSG, "LostTK", attacker, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, g_PointsLoseTk, g_aClientName[victim]); } } } @@ -1042,174 +1278,304 @@ public Action EventPlayerDeath(Handle event, const char [] name, bool dontBroadc /* diversion = decoy, and decoy has projectile */ if (StrContains(weapon, "diversion") != -1 || StrContains(weapon, "decoy") != -1) weapon = "decoy"; - int score_dif; + int score_dif_global, score_dif_season; if (attacker < MAXPLAYERS) - score_dif = g_aStats[victim].SCORE - g_aStats[attacker].SCORE; + { + score_dif_season = g_aStatsSeason[victim].SCORE - g_aStatsSeason[attacker].SCORE; + score_dif_global = g_aStatsGlobal[victim].SCORE - g_aStatsGlobal[attacker].SCORE; + } + - if (score_dif < 0 || attacker >= MAXPLAYERS) { - score_dif = g_PointsKill[team]; + if (score_dif_global < 0 || attacker >= MAXPLAYERS) { + score_dif_global = g_PointsKill[team]; } else { if (g_PointsKillBonusDif[team] == 0) - score_dif = g_PointsKill[team] + ((g_aStats[victim].SCORE - g_aStats[attacker].SCORE) * g_PointsKillBonus[team]); + score_dif_global = g_PointsKill[team] + ((g_aStatsGlobal[victim].SCORE - g_aStatsGlobal[attacker].SCORE) * g_PointsKillBonus[team]); else - score_dif = g_PointsKill[team] + (((g_aStats[victim].SCORE - g_aStats[attacker].SCORE) / g_PointsKillBonusDif[team]) * g_PointsKillBonus[team]); + score_dif_global = g_PointsKill[team] + (((g_aStatsGlobal[victim].SCORE - g_aStatsGlobal[attacker].SCORE) / g_PointsKillBonusDif[team]) * g_PointsKillBonus[team]); } + + if (score_dif_season < 0 || attacker >= MAXPLAYERS) { + score_dif_season = g_PointsKill[team]; + } else { + if (g_PointsKillBonusDif[team] == 0) + score_dif_season = g_PointsKill[team] + ((g_aStatsSeason[victim].SCORE - g_aStatsSeason[attacker].SCORE) * g_PointsKillBonus[team]); + else + score_dif_season = g_PointsKill[team] + (((g_aStatsSeason[victim].SCORE - g_aStatsSeason[attacker].SCORE) / g_PointsKillBonusDif[team]) * g_PointsKillBonus[team]); + } + if (StrEqual(weapon, "knife")) { - score_dif = RoundToCeil(score_dif * g_fPointsKnifeMultiplier); + score_dif_global = RoundToCeil(score_dif_global * g_fPointsKnifeMultiplier); } else if (StrEqual(weapon, "taser")) { - score_dif = RoundToCeil(score_dif * g_fPointsTaserMultiplier); + score_dif_global = RoundToCeil(score_dif_global * g_fPointsTaserMultiplier); + } + + if (StrEqual(weapon, "knife")) { + score_dif_season = RoundToCeil(score_dif_season * g_fPointsKnifeMultiplier); + } + else if (StrEqual(weapon, "taser")) { + score_dif_season = RoundToCeil(score_dif_season * g_fPointsTaserMultiplier); } - g_aStats[victim].DEATHS++; + g_aStatsGlobal[victim].DEATHS++; + g_aStatsSeason[victim].DEATHS++; g_aSession[victim].DEATHS++; if (attacker < MAXPLAYERS) { - g_aStats[attacker].KILLS++; + g_aStatsGlobal[attacker].KILLS++; + g_aStatsSeason[attacker].KILLS++; g_aSession[attacker].KILLS++; } if (g_bPointsLoseRoundCeil) { - g_aStats[victim].SCORE -= RoundToCeil(score_dif * g_fPercentPointsLose); + g_aStatsGlobal[victim].SCORE -= RoundToCeil(score_dif_global * g_fPercentPointsLose); + g_aStatsSeason[victim].SCORE -= RoundToCeil(score_dif_season * g_fPercentPointsLose); /* Min points */ - if (g_bPointsMinEnabled && g_aStats[victim].SCORE < g_PointsMin) + if (g_bPointsMinEnabled) { - int diff = g_PointsMin - g_aStats[victim].SCORE; - g_aStats[victim].SCORE = g_PointsMin; - g_aSession[victim].SCORE -= diff; - } - else{ - g_aSession[victim].SCORE -= RoundToCeil(score_dif * g_fPercentPointsLose); + if(g_aStatsGlobal[victim].SCORE < g_PointsMin) + { + int diff = g_PointsMin - g_aStatsGlobal[victim].SCORE; + g_aStatsGlobal[victim].SCORE = g_PointsMin; + g_aSession[victim].SCORE -= diff; + } + else{ + g_aSession[victim].SCORE -= RoundToCeil(score_dif_global * g_fPercentPointsLose); + } + if(g_aStatsSeason[victim].SCORE < g_PointsMin) + { + g_aStatsSeason[victim].SCORE = g_PointsMin; + } } } else { - g_aStats[victim].SCORE -= RoundToFloor(score_dif * g_fPercentPointsLose); - g_aSession[victim].SCORE -= RoundToFloor(score_dif * g_fPercentPointsLose); + g_aStatsGlobal[victim].SCORE -= RoundToFloor(score_dif_global * g_fPercentPointsLose); + g_aStatsSeason[victim].SCORE -= RoundToFloor(score_dif_global * g_fPercentPointsLose); + g_aSession[victim].SCORE -= RoundToFloor(score_dif_global * g_fPercentPointsLose); /* Min points */ - if (g_bPointsMinEnabled && g_aStats[victim].SCORE < g_PointsMin) + if (g_bPointsMinEnabled) { - int diff = g_PointsMin - g_aStats[victim].SCORE; - g_aStats[victim].SCORE = g_PointsMin; - g_aSession[victim].SCORE -= diff; - } - else{ - g_aSession[victim].SCORE -= RoundToFloor(score_dif * g_fPercentPointsLose); + if(g_aStatsGlobal[victim].SCORE < g_PointsMin) + { + int diff = g_PointsMin - g_aStatsGlobal[victim].SCORE; + g_aStatsGlobal[victim].SCORE = g_PointsMin; + g_aSession[victim].SCORE -= diff; + } + else { + g_aSession[victim].SCORE -= RoundToFloor(score_dif_global * g_fPercentPointsLose); + } + if(g_aStatsSeason[victim].SCORE < g_PointsMin) + { + g_aStatsSeason[victim].SCORE = g_PointsMin; + } } + } if (attacker < MAXPLAYERS) { - g_aStats[attacker].SCORE += score_dif; - g_aSession[attacker].SCORE += score_dif; + g_aStatsGlobal[attacker].SCORE += score_dif_global; + g_aStatsSeason[attacker].SCORE += score_dif_global; + g_aSession[attacker].SCORE += score_dif_global; int num = GetWeaponNum(weapon); - if (num < 42) g_aWeapons[attacker].AddKill(num); + if (num < 42){ + g_aWeaponsGlobal[attacker].AddKill(num); + g_aWeaponsSeason[attacker].AddKill(num); + } + } - - if (g_MinimalKills == 0 || (g_aStats[victim].KILLS >= g_MinimalKills && g_aStats[attacker].KILLS >= g_MinimalKills)) { + /* + if (g_MinimalKills == 0 || (g_aStatsGlobal[victim].KILLS >= g_MinimalKills && g_aStatsGlobal[attacker].KILLS >= g_MinimalKills)) { if (g_bChatChange) { - //PrintToServer("%s %T",MSG,"Killing",g_aClientName[attacker],g_aStats[attacker].SCORE,score_dif,g_aClientName[victim],g_aStats[victim].SCORE); + //PrintToServer("%s %T",MSG,"Killing",g_aClientName[attacker],g_aStatsGlobal[attacker].SCORE,score_dif_global,g_aClientName[victim],g_aStatsGlobal[victim].SCORE); if(!hidechat[victim]) { - CPrintToChat(victim, "%s %T", MSG, "Killing", victim, g_aClientName[attacker], g_aStats[attacker].SCORE, score_dif, g_aClientName[victim], g_aStats[victim].SCORE); + CPrintToChat(victim, "%s %T", MSG, "Killing", victim, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, score_dif_global, g_aClientName[victim], g_aStatsGlobal[victim].SCORE); } if (attacker < MAXPLAYERS) { if(!hidechat[attacker]) { - CPrintToChat(attacker, "%s %T", MSG, "Killing", attacker, g_aClientName[attacker], g_aStats[attacker].SCORE, score_dif, g_aClientName[victim], g_aStats[victim].SCORE); + CPrintToChat(attacker, "%s %T", MSG, "Killing", attacker, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, score_dif_global, g_aClientName[victim], g_aStatsGlobal[victim].SCORE); } } } } else { - if (g_aStats[victim].KILLS < g_MinimalKills && g_aStats[attacker].KILLS < g_MinimalKills) { + if (g_aStatsGlobal[victim].KILLS < g_MinimalKills && g_aStatsGlobal[attacker].KILLS < g_MinimalKills) { if (g_bChatChange) { - if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "KillingBothNotRanked", victim, g_aClientName[attacker], g_aStats[attacker].SCORE, score_dif, g_aClientName[victim], g_aStats[victim].SCORE, g_aStats[attacker].KILLS, g_MinimalKills, g_aStats[victim].KILLS, g_MinimalKills); + if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "KillingBothNotRanked", victim, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, score_dif_global, g_aClientName[victim], g_aStatsGlobal[victim].SCORE, g_aStatsGlobal[attacker].KILLS, g_MinimalKills, g_aStatsGlobal[victim].KILLS, g_MinimalKills); if (attacker < MAXPLAYERS) - if(!hidechat[attacker]) CPrintToChat(attacker, "%s %T", MSG, "KillingBothNotRanked", attacker, g_aClientName[attacker], g_aStats[attacker].SCORE, score_dif, g_aClientName[victim], g_aStats[victim].SCORE, g_aStats[attacker].KILLS, g_MinimalKills, g_aStats[victim].KILLS, g_MinimalKills); + if(!hidechat[attacker]) CPrintToChat(attacker, "%s %T", MSG, "KillingBothNotRanked", attacker, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, score_dif_global, g_aClientName[victim], g_aStatsGlobal[victim].SCORE, g_aStatsGlobal[attacker].KILLS, g_MinimalKills, g_aStatsGlobal[victim].KILLS, g_MinimalKills); } - } else if (g_aStats[victim].KILLS < g_MinimalKills) { + } else if (g_aStatsGlobal[victim].KILLS < g_MinimalKills) { if (g_bChatChange) { - if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "KillingVictimNotRanked", victim, g_aClientName[attacker], g_aStats[attacker].SCORE, score_dif, g_aClientName[victim], g_aStats[victim].SCORE, g_aStats[victim].KILLS, g_MinimalKills); + if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "KillingVictimNotRanked", victim, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, score_dif_global, g_aClientName[victim], g_aStatsGlobal[victim].SCORE, g_aStatsGlobal[victim].KILLS, g_MinimalKills); if (attacker < MAXPLAYERS) - if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "KillingVictimNotRanked", victim, g_aClientName[attacker], g_aStats[attacker].SCORE, score_dif, g_aClientName[victim], g_aStats[victim].SCORE, g_aStats[victim].KILLS, g_MinimalKills); + if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "KillingVictimNotRanked", victim, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, score_dif_global, g_aClientName[victim], g_aStatsGlobal[victim].SCORE, g_aStatsGlobal[victim].KILLS, g_MinimalKills); } } else { if (g_bChatChange) { - if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "KillingKillerNotRanked", victim, g_aClientName[attacker], g_aStats[attacker].SCORE, score_dif, g_aClientName[victim], g_aStats[victim].SCORE, g_aStats[attacker].KILLS, g_MinimalKills); + if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "KillingKillerNotRanked", victim, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, score_dif_global, g_aClientName[victim], g_aStatsGlobal[victim].SCORE, g_aStatsGlobal[attacker].KILLS, g_MinimalKills); if (attacker < MAXPLAYERS) - if(!hidechat[attacker]) CPrintToChat(attacker, "%s %T", MSG, "KillingKillerNotRanked", attacker, g_aClientName[attacker], g_aStats[attacker].SCORE, score_dif, g_aClientName[victim], g_aStats[victim].SCORE, g_aStats[attacker].KILLS, g_MinimalKills); + if(!hidechat[attacker]) CPrintToChat(attacker, "%s %T", MSG, "KillingKillerNotRanked", attacker, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, score_dif_global, g_aClientName[victim], g_aStatsGlobal[victim].SCORE, g_aStatsGlobal[attacker].KILLS, g_MinimalKills); + } + } + } + */ + if (g_MinimalKills == 0 || (g_aStatsSeason[victim].KILLS >= g_MinimalKills && g_aStatsSeason[attacker].KILLS >= g_MinimalKills)) { + if (g_bChatChange) { + //PrintToServer("%s %T",MSG,"Killing",g_aClientName[attacker],g_aStatsSeason[attacker].SCORE,score_dif_season,g_aClientName[victim],g_aStatsSeason[victim].SCORE); + if(!hidechat[victim]) + { + CPrintToChat(victim, "%s %T", MSG, "Killing", victim, g_aClientName[attacker], g_aStatsSeason[attacker].SCORE, score_dif_season, g_aClientName[victim], g_aStatsSeason[victim].SCORE); + } + if (attacker < MAXPLAYERS) + { + if(!hidechat[attacker]) + { + CPrintToChat(attacker, "%s %T", MSG, "Killing", attacker, g_aClientName[attacker], g_aStatsSeason[attacker].SCORE, score_dif_season, g_aClientName[victim], g_aStatsSeason[victim].SCORE); + } + } + } + } else { + if (g_aStatsSeason[victim].KILLS < g_MinimalKills && g_aStatsSeason[attacker].KILLS < g_MinimalKills) { + if (g_bChatChange) { + if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "KillingBothNotRanked", victim, g_aClientName[attacker], g_aStatsSeason[attacker].SCORE, score_dif_season, g_aClientName[victim], g_aStatsSeason[victim].SCORE, g_aStatsSeason[attacker].KILLS, g_MinimalKills, g_aStatsSeason[victim].KILLS, g_MinimalKills); + if (attacker < MAXPLAYERS) + if(!hidechat[attacker]) CPrintToChat(attacker, "%s %T", MSG, "KillingBothNotRanked", attacker, g_aClientName[attacker], g_aStatsSeason[attacker].SCORE, score_dif_season, g_aClientName[victim], g_aStatsSeason[victim].SCORE, g_aStatsSeason[attacker].KILLS, g_MinimalKills, g_aStatsSeason[victim].KILLS, g_MinimalKills); + } + } else if (g_aStatsSeason[victim].KILLS < g_MinimalKills) { + if (g_bChatChange) { + if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "KillingVictimNotRanked", victim, g_aClientName[attacker], g_aStatsSeason[attacker].SCORE, score_dif_season, g_aClientName[victim], g_aStatsSeason[victim].SCORE, g_aStatsSeason[victim].KILLS, g_MinimalKills); + if (attacker < MAXPLAYERS) + if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "KillingVictimNotRanked", victim, g_aClientName[attacker], g_aStatsSeason[attacker].SCORE, score_dif_season, g_aClientName[victim], g_aStatsSeason[victim].SCORE, g_aStatsSeason[victim].KILLS, g_MinimalKills); + } + } else { + if (g_bChatChange) { + if(!hidechat[victim]) CPrintToChat(victim, "%s %T", MSG, "KillingKillerNotRanked", victim, g_aClientName[attacker], g_aStatsSeason[attacker].SCORE, score_dif_season, g_aClientName[victim], g_aStatsSeason[victim].SCORE, g_aStatsSeason[attacker].KILLS, g_MinimalKills); + if (attacker < MAXPLAYERS) + if(!hidechat[attacker]) CPrintToChat(attacker, "%s %T", MSG, "KillingKillerNotRanked", attacker, g_aClientName[attacker], g_aStatsSeason[attacker].SCORE, score_dif_season, g_aClientName[victim], g_aStatsSeason[victim].SCORE, g_aStatsSeason[attacker].KILLS, g_MinimalKills); } } } /* Headshot */ if (headshot && attacker < MAXPLAYERS) { - g_aStats[attacker].HEADSHOTS++; + g_aStatsGlobal[attacker].HEADSHOTS++; + g_aStatsSeason[attacker].HEADSHOTS++; g_aSession[attacker].HEADSHOTS++; - g_aStats[attacker].SCORE += g_PointsHs; + g_aStatsGlobal[attacker].SCORE += g_PointsHs; + g_aStatsSeason[attacker].SCORE += g_PointsHs; g_aSession[attacker].SCORE += g_PointsHs; if (g_bChatChange && g_PointsHs > 0) - if(!hidechat[attacker]) CPrintToChat(attacker, "%s %T", MSG, "Headshot", attacker, g_aClientName[attacker], g_aStats[attacker].SCORE, g_PointsHs); + { + if(!hidechat[attacker]) + { + //CPrintToChat(attacker, "%s %T", MSG, "Headshot", attacker, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, g_PointsHs); + CPrintToChat(attacker, "%s %T", MSG, "Headshot", attacker, g_aClientName[attacker], g_aStatsSeason[attacker].SCORE, g_PointsHs); + } + } + } if (attackerblind) { - g_aStats[attacker].BLIND++; + g_aStatsGlobal[attacker].BLIND++; + g_aStatsSeason[attacker].BLIND++; g_aSession[attacker].BLIND++; - g_aStats[attacker].SCORE += g_PointsBlind; + g_aStatsGlobal[attacker].SCORE += g_PointsBlind; + g_aStatsSeason[attacker].SCORE += g_PointsBlind; g_aSession[attacker].SCORE += g_PointsBlind; if (g_bChatChange && g_PointsBlind > 0) - if(!hidechat[attacker]) CPrintToChat(attacker, "%s %T", MSG, "Flashed Kill", attacker, g_aClientName[attacker], g_aStats[attacker].SCORE, g_PointsBlind); + { + if(!hidechat[attacker]) + { + //CPrintToChat(attacker, "%s %T", MSG, "Flashed Kill", attacker, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, g_PointsBlind); + CPrintToChat(attacker, "%s %T", MSG, "Flashed Kill", attacker, g_aClientName[attacker], g_aStatsSeason[attacker].SCORE, g_PointsBlind); + } + } + } if (thrusmoke) { - g_aStats[attacker].SMOKE++; + g_aStatsGlobal[attacker].SMOKE++; + g_aStatsSeason[attacker].SMOKE++; g_aSession[attacker].SMOKE++; - g_aStats[attacker].SCORE += g_PointsSmoke; + g_aStatsGlobal[attacker].SCORE += g_PointsSmoke; + g_aStatsSeason[attacker].SCORE += g_PointsSmoke; g_aSession[attacker].SCORE += g_PointsSmoke; if (g_bChatChange && g_PointsSmoke > 0) - if(!hidechat[attacker]) CPrintToChat(attacker, "%s %T", MSG, "Thru Smoke", attacker, g_aClientName[attacker], g_aStats[attacker].SCORE, g_PointsSmoke); + { + if(!hidechat[attacker]) + { + //CPrintToChat(attacker, "%s %T", MSG, "Thru Smoke", attacker, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, g_PointsSmoke); + CPrintToChat(attacker, "%s %T", MSG, "Thru Smoke", attacker, g_aClientName[attacker], g_aStatsSeason[attacker].SCORE, g_PointsSmoke); + } + } + } if(penetrated > 0) { - g_aStats[attacker].WALL++; + g_aStatsGlobal[attacker].WALL++; + g_aStatsSeason[attacker].WALL++; g_aSession[attacker].WALL++; - g_aStats[attacker].SCORE += g_PointsWall; + g_aStatsGlobal[attacker].SCORE += g_PointsWall; + g_aStatsSeason[attacker].SCORE += g_PointsWall; g_aSession[attacker].SCORE += g_PointsWall; if (g_bChatChange && g_PointsWall > 0) - if(!hidechat[attacker]) CPrintToChat(attacker, "%s %T", MSG, "Wallbang", attacker, g_aClientName[attacker], g_aStats[attacker].SCORE, g_PointsWall); + { + if(!hidechat[attacker]) + { + //CPrintToChat(attacker, "%s %T", MSG, "Wallbang", attacker, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, g_PointsWall); + CPrintToChat(attacker, "%s %T", MSG, "Wallbang", attacker, g_aClientName[attacker], g_aStatsSeason[attacker].SCORE, g_PointsWall); + } + } } /* First blood */ if (!firstblood && attacker < MAXPLAYERS) { - g_aStats[attacker].SCORE += g_PointsFb; + g_aStatsGlobal[attacker].SCORE += g_PointsFb; + g_aStatsSeason[attacker].SCORE += g_PointsFb; g_aSession[attacker].SCORE += g_PointsFb; - g_aStats[attacker].FB ++; + g_aStatsGlobal[attacker].FB ++; + g_aStatsSeason[attacker].FB ++; g_aSession[attacker].FB ++; if (g_bChatChange && g_PointsFb > 0) - if(!hidechat[attacker]) CPrintToChat(attacker, "%s %T", MSG, "First Blood", attacker, g_aClientName[attacker], g_aStats[attacker].SCORE, g_PointsFb); + { + if(!hidechat[attacker]) + { + //CPrintToChat(attacker, "%s %T", MSG, "First Blood", attacker, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, g_PointsFb); + CPrintToChat(attacker, "%s %T", MSG, "First Blood", attacker, g_aClientName[attacker], g_aStatsSeason[attacker].SCORE, g_PointsFb); + } + } } /* No scope */ if( attacker < MAXPLAYERS && ((StrContains(weapon, "awp") != -1 || StrContains(weapon, "ssg08") != -1) || (g_bNSAllSnipers && (StrContains(weapon, "g3sg1") != -1 || StrContains(weapon, "scar20") != -1))) && (GetEntProp(attacker, Prop_Data, "m_iFOV") <= 0 || GetEntProp(attacker, Prop_Data, "m_iFOV") == GetEntProp(attacker, Prop_Data, "m_iDefaultFOV"))) { - g_aStats[attacker].SCORE+= g_PointsNS; + g_aStatsGlobal[attacker].SCORE+= g_PointsNS; + g_aStatsSeason[attacker].SCORE+= g_PointsNS; g_aSession[attacker].SCORE+= g_PointsNS; - g_aStats[attacker].NS++; + g_aStatsGlobal[attacker].NS++; + g_aStatsSeason[attacker].NS++; g_aSession[attacker].NS++; float fNSD = Math_UnitsToMeters(Entity_GetDistance(victim, attacker)); // stats are int, so we change it from m to cm int iNSD = RoundToFloor(fNSD * 100); - if(iNSD > g_aStats[attacker].NSD) g_aStats[attacker].NSD = iNSD; + if(iNSD > g_aStatsGlobal[attacker].NSD) g_aStatsGlobal[attacker].NSD = iNSD; + if(iNSD > g_aStatsSeason[attacker].NSD) g_aStatsSeason[attacker].NSD = iNSD; if(iNSD > g_aSession[attacker].NSD) g_aSession[attacker].NSD = iNSD; - if(g_bChatChange && g_PointsNS > 0){ + if(g_bChatChange && g_PointsNS > 0) + { if(!hidechat[attacker]) { - CPrintToChat(attacker, "%s %T", MSG, "No Scope", attacker, g_aClientName[attacker], g_aStats[attacker].SCORE, g_PointsNS, g_aClientName[victim], weapon, fNSD); + //CPrintToChat(attacker, "%s %T", MSG, "No Scope", attacker, g_aClientName[attacker], g_aStatsGlobal[attacker].SCORE, g_PointsNS, g_aClientName[victim], weapon, fNSD); + CPrintToChat(attacker, "%s %T", MSG, "No Scope", attacker, g_aClientName[attacker], g_aStatsSeason[attacker].SCORE, g_PointsNS, g_aClientName[victim], weapon, fNSD); } } } @@ -1224,23 +1590,36 @@ public Action EventPlayerDeath(Handle event, const char [] name, bool dontBroadc if(GetClientTeam(victim) == GetClientTeam(assist) && !g_bFfa) { if(assistedflash) { - g_aStats[assist].SCORE -= g_PointsAssistTeamFlash; + g_aStatsGlobal[assist].SCORE -= g_PointsAssistTeamFlash; + g_aStatsSeason[assist].SCORE -= g_PointsAssistTeamFlash; g_aSession[assist].SCORE -= g_PointsAssistTeamFlash; - g_aStats[assist].ATF++; + g_aStatsGlobal[assist].ATF++; + g_aStatsSeason[assist].ATF++; g_aSession[assist].ATF++; - if(g_bChatChange && g_PointsAssistKill > 0){ - if(!hidechat[assist]) CPrintToChat(assist, "%s %T", MSG, "AssistTeamFlash", assist, g_aClientName[assist], g_aStats[assist].SCORE, g_PointsAssistTeamFlash, g_aClientName[attacker], g_aClientName[victim]); + if(g_bChatChange && g_PointsAssistKill > 0) + { + if(!hidechat[assist]) + { + //CPrintToChat(assist, "%s %T", MSG, "AssistTeamFlash", assist, g_aClientName[assist], g_aStatsGlobal[assist].SCORE, g_PointsAssistTeamFlash, g_aClientName[attacker], g_aClientName[victim]); + CPrintToChat(assist, "%s %T", MSG, "AssistTeamFlash", assist, g_aClientName[assist], g_aStatsSeason[assist].SCORE, g_PointsAssistTeamFlash, g_aClientName[attacker], g_aClientName[victim]); + } } } else { - g_aStats[assist].SCORE -= g_PointsLoseATk; + g_aStatsGlobal[assist].SCORE -= g_PointsLoseATk; + g_aStatsSeason[assist].SCORE -= g_PointsLoseATk; g_aSession[assist].SCORE -= g_PointsLoseATk; - g_aStats[assist].ATK++; + g_aStatsGlobal[assist].ATK++; + g_aStatsSeason[assist].ATK++; g_aSession[assist].ATK++; if(g_bChatChange && g_PointsAssistKill > 0){ - if(!hidechat[assist]) CPrintToChat(assist, "%s %T", MSG, "AssistTeamKill", assist, g_aClientName[assist], g_aStats[assist].SCORE, g_PointsLoseATk, g_aClientName[attacker], g_aClientName[victim]); + if(!hidechat[assist]) + { + //CPrintToChat(assist, "%s %T", MSG, "AssistTeamKill", assist, g_aClientName[assist], g_aStatsGlobal[assist].SCORE, g_PointsLoseATk, g_aClientName[attacker], g_aClientName[victim]); + CPrintToChat(assist, "%s %T", MSG, "AssistTeamKill", assist, g_aClientName[assist], g_aStatsSeason[assist].SCORE, g_PointsLoseATk, g_aClientName[attacker], g_aClientName[victim]); + } } } } @@ -1248,32 +1627,46 @@ public Action EventPlayerDeath(Handle event, const char [] name, bool dontBroadc else { if(assistedflash) { - g_aStats[assist].SCORE += g_PointsAssistFlash; + g_aStatsGlobal[assist].SCORE += g_PointsAssistFlash; + g_aStatsSeason[assist].SCORE += g_PointsAssistFlash; g_aSession[assist].SCORE += g_PointsAssistFlash; - g_aStats[assist].AF++; + g_aStatsGlobal[assist].AF++; + g_aStatsSeason[assist].AF++; g_aSession[assist].AF++; - if(g_bChatChange && g_PointsAssistKill > 0){ - if(!hidechat[assist]) CPrintToChat(assist, "%s %T", MSG, "AssistFlash", assist, g_aClientName[assist], g_aStats[assist].SCORE, g_PointsAssistFlash, g_aClientName[attacker], g_aClientName[victim]); + if(g_bChatChange && g_PointsAssistKill > 0) + { + if(!hidechat[assist]) + { + //CPrintToChat(assist, "%s %T", MSG, "AssistFlash", assist, g_aClientName[assist], g_aStatsGlobal[assist].SCORE, g_PointsAssistFlash, g_aClientName[attacker], g_aClientName[victim]); + CPrintToChat(assist, "%s %T", MSG, "AssistFlash", assist, g_aClientName[assist], g_aStatsSeason[assist].SCORE, g_PointsAssistFlash, g_aClientName[attacker], g_aClientName[victim]); + } } } else { - g_aStats[assist].SCORE+= g_PointsAssistKill; + g_aStatsGlobal[assist].SCORE+= g_PointsAssistKill; + g_aStatsSeason[assist].SCORE+= g_PointsAssistKill; g_aSession[assist].SCORE+= g_PointsAssistKill; - g_aStats[assist].ASSISTS++; + g_aStatsGlobal[assist].ASSISTS++; + g_aStatsSeason[assist].ASSISTS++; g_aSession[assist].ASSISTS++; - if(g_bChatChange && g_PointsAssistKill > 0){ - if(!hidechat[assist]) CPrintToChat(assist, "%s %T", MSG, "AssistKill", assist, g_aClientName[assist], g_aStats[assist].SCORE, g_PointsAssistKill, g_aClientName[attacker], g_aClientName[victim]); + if(g_bChatChange && g_PointsAssistKill > 0) + { + if(!hidechat[assist]) + { + //CPrintToChat(assist, "%s %T", MSG, "AssistKill", assist, g_aClientName[assist], g_aStatsGlobal[assist].SCORE, g_PointsAssistKill, g_aClientName[attacker], g_aClientName[victim]); + CPrintToChat(assist, "%s %T", MSG, "AssistKill", assist, g_aClientName[assist], g_aStatsSeason[assist].SCORE, g_PointsAssistKill, g_aClientName[attacker], g_aClientName[victim]); + } } } } } - + /* if (attacker < MAXPLAYERS) - if (g_aStats[attacker].KILLS == 50) - g_TotalPlayers++; - + if (g_aStatsGlobal[attacker].KILLS == 50) + g_iTotalPlayersGlobal++; + */ firstblood = true; } @@ -1294,45 +1687,54 @@ public Action EventPlayerHurt(Handle event, const char [] name, bool dontBroadca if(hitgroup == 8) hitgroup = 1; - g_aStats[attacker].HITS++; + g_aStatsGlobal[attacker].HITS++; + g_aStatsSeason[attacker].HITS++; g_aSession[attacker].HITS++; switch(hitgroup) { case 1: { - g_aHitBox[attacker].HEAD++; + g_aHitBoxGlobal[attacker].HEAD++; + g_aHitBoxSeason[attacker].HEAD++; } case 2: { - g_aHitBox[attacker].CHEST++; + g_aHitBoxGlobal[attacker].CHEST++; + g_aHitBoxSeason[attacker].CHEST++; } case 3: { - g_aHitBox[attacker].STOMACH++; + g_aHitBoxGlobal[attacker].STOMACH++; + g_aHitBoxSeason[attacker].STOMACH++; } case 4: { - g_aHitBox[attacker].LEFT_ARM++; + g_aHitBoxGlobal[attacker].LEFT_ARM++; + g_aHitBoxSeason[attacker].LEFT_ARM++; } case 5: { - g_aHitBox[attacker].RIGHT_ARM++; + g_aHitBoxGlobal[attacker].RIGHT_ARM++; + g_aHitBoxSeason[attacker].RIGHT_ARM++; } case 6: { - g_aHitBox[attacker].LEFT_LEG++; + g_aHitBoxGlobal[attacker].LEFT_LEG++; + g_aHitBoxSeason[attacker].LEFT_LEG++; } case 7: { - g_aHitBox[attacker].RIGHT_LEG++; + g_aHitBoxGlobal[attacker].RIGHT_LEG++; + g_aHitBoxSeason[attacker].RIGHT_LEG++; } } int damage = GetEventInt(event, "dmg_health"); - g_aStats[attacker].DAMAGE += damage; + g_aStatsGlobal[attacker].DAMAGE += damage; + g_aStatsSeason[attacker].DAMAGE += damage; g_aSession[attacker].DAMAGE += damage; - //PrintToChat(attacker, "Hitgroup %i: %i hits", hitgroup, g_aHitBox[attacker][hitgroup]); - //PrintToServer("Stats Hits: %i\nSession Hits: %i\nHitBox %i -> %i",g_aStats[attacker].HITS,g_aSession[attacker].HITS,hitgroup,g_aHitBox[attacker][hitgroup]); + //PrintToChat(attacker, "Hitgroup %i: %i hits", hitgroup, g_aHitBoxGlobal[attacker][hitgroup]); + //PrintToServer("Stats Hits: %i\nSession Hits: %i\nHitBox %i -> %i",g_aStatsGlobal[attacker].HITS,g_aSession[attacker].HITS,hitgroup,g_aHitBoxGlobal[attacker][hitgroup]); } } @@ -1367,7 +1769,8 @@ public Action EventWeaponFire(Handle event, const char[] name, bool dontBroadcas StrContains(sWeaponUsed, "breachcharge") != -1) return; - g_aStats[client].SHOTS++; + g_aStatsGlobal[client].SHOTS++; + g_aStatsSeason[client].SHOTS++; g_aSession[client].SHOTS++; } @@ -1376,7 +1779,7 @@ public void SalvarPlayer(int client) { return; if (!g_bRankBots && (!IsValidClient(client) || IsFakeClient(client))) return; - if (!OnDB[client]) + if (!OnDBGlobal[client]) return; char sEscapeName[MAX_NAME_LENGTH * 2 + 1]; @@ -1388,7 +1791,7 @@ public void SalvarPlayer(int client) { char weapons_query[2000] = ""; int weapon_array[42]; - g_aWeapons[client].GetData(weapon_array); + g_aWeaponsGlobal[client].GetData(weapon_array); for (int i = 0; i < 42; i++) { Format(weapons_query, sizeof(weapons_query), "%s,%s='%d'", weapons_query, g_sWeaponsNamesGame[i], weapon_array[i]); } @@ -1399,55 +1802,112 @@ public void SalvarPlayer(int client) { if (g_RankBy == 0) { - Format(query, sizeof(query), g_sSqlSave, g_sSQLTable, g_aStats[client].SCORE, g_aStats[client].KILLS, g_aStats[client].DEATHS, g_aStats[client].ASSISTS, g_aStats[client].SUICIDES, g_aStats[client].TK, - g_aStats[client].SHOTS, g_aStats[client].HITS, g_aStats[client].HEADSHOTS, g_aStats[client].ROUNDS_TR, g_aStats[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, - g_aHitBox[client].HEAD, g_aHitBox[client].CHEST, g_aHitBox[client].STOMACH, g_aHitBox[client].LEFT_ARM, g_aHitBox[client].RIGHT_ARM, g_aHitBox[client].LEFT_LEG, g_aHitBox[client].RIGHT_LEG, g_aClientSteam[client]); - - Format(query2, sizeof(query2), g_sSqlSave2, g_sSQLTable, g_aStats[client].C4_PLANTED, g_aStats[client].C4_EXPLODED, g_aStats[client].C4_DEFUSED, g_aStats[client].CT_WIN, g_aStats[client].TR_WIN, - g_aStats[client].HOSTAGES_RESCUED, g_aStats[client].VIP_KILLED, g_aStats[client].VIP_ESCAPED, g_aStats[client].VIP_PLAYED, g_aStats[client].MVP, g_aStats[client].DAMAGE, - g_aStats[client].MATCH_WIN, g_aStats[client].MATCH_DRAW, g_aStats[client].MATCH_LOSE, - g_aStats[client].FB, g_aStats[client].NS, g_aStats[client].NSD, - g_aStats[client].SMOKE, g_aStats[client].BLIND, g_aStats[client].AF, g_aStats[client].ATF, g_aStats[client].ATK, g_aStats[client].WALL, - GetTime(), g_aStats[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, g_aClientSteam[client]); + Format(query, sizeof(query), g_sSqlSaveGlobal, g_sSQLTableGlobal, g_aStatsGlobal[client].SCORE, g_aStatsGlobal[client].KILLS, g_aStatsGlobal[client].DEATHS, g_aStatsGlobal[client].ASSISTS, g_aStatsGlobal[client].SUICIDES, g_aStatsGlobal[client].TK, + g_aStatsGlobal[client].SHOTS, g_aStatsGlobal[client].HITS, g_aStatsGlobal[client].HEADSHOTS, g_aStatsGlobal[client].ROUNDS_TR, g_aStatsGlobal[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, + g_aHitBoxGlobal[client].HEAD, g_aHitBoxGlobal[client].CHEST, g_aHitBoxGlobal[client].STOMACH, g_aHitBoxGlobal[client].LEFT_ARM, g_aHitBoxGlobal[client].RIGHT_ARM, g_aHitBoxGlobal[client].LEFT_LEG, g_aHitBoxGlobal[client].RIGHT_LEG, g_aClientSteam[client]); + + Format(query2, sizeof(query2), g_sSqlSave2Global, g_sSQLTableGlobal, g_aStatsGlobal[client].C4_PLANTED, g_aStatsGlobal[client].C4_EXPLODED, g_aStatsGlobal[client].C4_DEFUSED, g_aStatsGlobal[client].CT_WIN, g_aStatsGlobal[client].TR_WIN, + g_aStatsGlobal[client].HOSTAGES_RESCUED, g_aStatsGlobal[client].VIP_KILLED, g_aStatsGlobal[client].VIP_ESCAPED, g_aStatsGlobal[client].VIP_PLAYED, g_aStatsGlobal[client].MVP, g_aStatsGlobal[client].DAMAGE, + g_aStatsGlobal[client].MATCH_WIN, g_aStatsGlobal[client].MATCH_DRAW, g_aStatsGlobal[client].MATCH_LOSE, + g_aStatsGlobal[client].FB, g_aStatsGlobal[client].NS, g_aStatsGlobal[client].NSD, + g_aStatsGlobal[client].SMOKE, g_aStatsGlobal[client].BLIND, g_aStatsGlobal[client].AF, g_aStatsGlobal[client].ATF, g_aStatsGlobal[client].ATK, g_aStatsGlobal[client].WALL, + GetTime(), g_aStatsGlobal[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, g_aClientSteam[client]); } else if (g_RankBy == 1) { - Format(query, sizeof(query), g_sSqlSaveName, g_sSQLTable, g_aStats[client].SCORE, g_aStats[client].KILLS, g_aStats[client].DEATHS, g_aStats[client].ASSISTS, g_aStats[client].SUICIDES, g_aStats[client].TK, - g_aStats[client].SHOTS, g_aStats[client].HITS, g_aStats[client].HEADSHOTS, g_aStats[client].ROUNDS_TR, g_aStats[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, - g_aHitBox[client].HEAD, g_aHitBox[client].CHEST, g_aHitBox[client].STOMACH, g_aHitBox[client].LEFT_ARM, g_aHitBox[client].RIGHT_ARM, g_aHitBox[client].LEFT_LEG, g_aHitBox[client].RIGHT_LEG, sEscapeName); - - Format(query2, sizeof(query2), g_sSqlSaveName2, g_sSQLTable, g_aStats[client].C4_PLANTED, g_aStats[client].C4_EXPLODED, g_aStats[client].C4_DEFUSED, g_aStats[client].CT_WIN, g_aStats[client].TR_WIN, - g_aStats[client].HOSTAGES_RESCUED, g_aStats[client].VIP_KILLED, g_aStats[client].VIP_ESCAPED, g_aStats[client].VIP_PLAYED, g_aStats[client].MVP, g_aStats[client].DAMAGE, - g_aStats[client].MATCH_WIN, g_aStats[client].MATCH_DRAW, g_aStats[client].MATCH_LOSE, - g_aStats[client].FB, g_aStats[client].NS, g_aStats[client].NSD, - g_aStats[client].SMOKE, g_aStats[client].BLIND, g_aStats[client].AF, g_aStats[client].ATF, g_aStats[client].ATK, g_aStats[client].WALL, - GetTime(), g_aStats[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, sEscapeName); + Format(query, sizeof(query), g_sSqlSaveNameGlobal, g_sSQLTableGlobal, g_aStatsGlobal[client].SCORE, g_aStatsGlobal[client].KILLS, g_aStatsGlobal[client].DEATHS, g_aStatsGlobal[client].ASSISTS, g_aStatsGlobal[client].SUICIDES, g_aStatsGlobal[client].TK, + g_aStatsGlobal[client].SHOTS, g_aStatsGlobal[client].HITS, g_aStatsGlobal[client].HEADSHOTS, g_aStatsGlobal[client].ROUNDS_TR, g_aStatsGlobal[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, + g_aHitBoxGlobal[client].HEAD, g_aHitBoxGlobal[client].CHEST, g_aHitBoxGlobal[client].STOMACH, g_aHitBoxGlobal[client].LEFT_ARM, g_aHitBoxGlobal[client].RIGHT_ARM, g_aHitBoxGlobal[client].LEFT_LEG, g_aHitBoxGlobal[client].RIGHT_LEG, sEscapeName); + + Format(query2, sizeof(query2), g_sSqlSaveName2Global, g_sSQLTableGlobal, g_aStatsGlobal[client].C4_PLANTED, g_aStatsGlobal[client].C4_EXPLODED, g_aStatsGlobal[client].C4_DEFUSED, g_aStatsGlobal[client].CT_WIN, g_aStatsGlobal[client].TR_WIN, + g_aStatsGlobal[client].HOSTAGES_RESCUED, g_aStatsGlobal[client].VIP_KILLED, g_aStatsGlobal[client].VIP_ESCAPED, g_aStatsGlobal[client].VIP_PLAYED, g_aStatsGlobal[client].MVP, g_aStatsGlobal[client].DAMAGE, + g_aStatsGlobal[client].MATCH_WIN, g_aStatsGlobal[client].MATCH_DRAW, g_aStatsGlobal[client].MATCH_LOSE, + g_aStatsGlobal[client].FB, g_aStatsGlobal[client].NS, g_aStatsGlobal[client].NSD, + g_aStatsGlobal[client].SMOKE, g_aStatsGlobal[client].BLIND, g_aStatsGlobal[client].AF, g_aStatsGlobal[client].ATF, g_aStatsGlobal[client].ATK, g_aStatsGlobal[client].WALL, + GetTime(), g_aStatsGlobal[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, sEscapeName); } else if (g_RankBy == 2) { - Format(query, sizeof(query), g_sSqlSaveIp, g_sSQLTable, g_aStats[client].SCORE, g_aStats[client].KILLS, g_aStats[client].DEATHS, g_aStats[client].ASSISTS, g_aStats[client].SUICIDES, g_aStats[client].TK, - g_aStats[client].SHOTS, g_aStats[client].HITS, g_aStats[client].HEADSHOTS, g_aStats[client].ROUNDS_TR, g_aStats[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, - g_aHitBox[client].HEAD, g_aHitBox[client].CHEST, g_aHitBox[client].STOMACH, g_aHitBox[client].LEFT_ARM, g_aHitBox[client].RIGHT_ARM, g_aHitBox[client].LEFT_LEG, g_aHitBox[client].RIGHT_LEG, g_aClientIp[client]); - - Format(query2, sizeof(query2), g_sSqlSaveIp2, g_aStats[client].C4_PLANTED, g_aStats[client].C4_EXPLODED, g_aStats[client].C4_DEFUSED, g_aStats[client].CT_WIN, g_aStats[client].TR_WIN, - g_aStats[client].HOSTAGES_RESCUED, g_aStats[client].VIP_KILLED, g_aStats[client].VIP_ESCAPED, g_aStats[client].VIP_PLAYED, g_aStats[client].MVP, g_aStats[client].DAMAGE, - g_aStats[client].MATCH_WIN, g_aStats[client].MATCH_DRAW, g_aStats[client].MATCH_LOSE, - g_aStats[client].FB, g_aStats[client].NS, g_aStats[client].NSD, - g_aStats[client].SMOKE, g_aStats[client].BLIND, g_aStats[client].AF, g_aStats[client].ATF, g_aStats[client].ATK, g_aStats[client].WALL, - GetTime(), g_aStats[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, g_aClientIp[client]); + Format(query, sizeof(query), g_sSqlSaveIpGlobal, g_sSQLTableGlobal, g_aStatsGlobal[client].SCORE, g_aStatsGlobal[client].KILLS, g_aStatsGlobal[client].DEATHS, g_aStatsGlobal[client].ASSISTS, g_aStatsGlobal[client].SUICIDES, g_aStatsGlobal[client].TK, + g_aStatsGlobal[client].SHOTS, g_aStatsGlobal[client].HITS, g_aStatsGlobal[client].HEADSHOTS, g_aStatsGlobal[client].ROUNDS_TR, g_aStatsGlobal[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, + g_aHitBoxGlobal[client].HEAD, g_aHitBoxGlobal[client].CHEST, g_aHitBoxGlobal[client].STOMACH, g_aHitBoxGlobal[client].LEFT_ARM, g_aHitBoxGlobal[client].RIGHT_ARM, g_aHitBoxGlobal[client].LEFT_LEG, g_aHitBoxGlobal[client].RIGHT_LEG, g_aClientIp[client]); + + Format(query2, sizeof(query2), g_sSqlSaveIp2Global, g_aStatsGlobal[client].C4_PLANTED, g_aStatsGlobal[client].C4_EXPLODED, g_aStatsGlobal[client].C4_DEFUSED, g_aStatsGlobal[client].CT_WIN, g_aStatsGlobal[client].TR_WIN, + g_aStatsGlobal[client].HOSTAGES_RESCUED, g_aStatsGlobal[client].VIP_KILLED, g_aStatsGlobal[client].VIP_ESCAPED, g_aStatsGlobal[client].VIP_PLAYED, g_aStatsGlobal[client].MVP, g_aStatsGlobal[client].DAMAGE, + g_aStatsGlobal[client].MATCH_WIN, g_aStatsGlobal[client].MATCH_DRAW, g_aStatsGlobal[client].MATCH_LOSE, + g_aStatsGlobal[client].FB, g_aStatsGlobal[client].NS, g_aStatsGlobal[client].NSD, + g_aStatsGlobal[client].SMOKE, g_aStatsGlobal[client].BLIND, g_aStatsGlobal[client].AF, g_aStatsGlobal[client].ATF, g_aStatsGlobal[client].ATK, g_aStatsGlobal[client].WALL, + GetTime(), g_aStatsGlobal[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, g_aClientIp[client]); } SQL_TQuery(g_hStatsDb, SQL_SaveCallback, query, client, DBPrio_High); SQL_TQuery(g_hStatsDb, SQL_SaveCallback, query2, client, DBPrio_High); - if (DEBUGGING) { + #if DEBUGGING PrintToServer(query); PrintToServer(query2); LogError("%s", query); LogError("%s", query2); + #endif + + g_aWeaponsSeason[client].GetData(weapon_array); + for (int i = 0; i < 42; i++) { + Format(weapons_query, sizeof(weapons_query), "%s,%s='%d'", weapons_query, g_sWeaponsNamesGame[i], weapon_array[i]); } + + if (g_RankBy == 0) + { + Format(query, sizeof(query), g_sSqlSaveSeason, g_sSQLTableSeason, g_aStatsSeason[client].SCORE, g_aStatsSeason[client].KILLS, g_aStatsSeason[client].DEATHS, g_aStatsSeason[client].ASSISTS, g_aStatsSeason[client].SUICIDES, g_aStatsSeason[client].TK, + g_aStatsSeason[client].SHOTS, g_aStatsSeason[client].HITS, g_aStatsSeason[client].HEADSHOTS, g_aStatsSeason[client].ROUNDS_TR, g_aStatsSeason[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, + g_aHitBoxSeason[client].HEAD, g_aHitBoxSeason[client].CHEST, g_aHitBoxSeason[client].STOMACH, g_aHitBoxSeason[client].LEFT_ARM, g_aHitBoxSeason[client].RIGHT_ARM, g_aHitBoxSeason[client].LEFT_LEG, g_aHitBoxSeason[client].RIGHT_LEG, g_aClientSteam[client], g_iSeasonID); + + Format(query2, sizeof(query2), g_sSqlSave2Season, g_sSQLTableSeason, g_aStatsSeason[client].C4_PLANTED, g_aStatsSeason[client].C4_EXPLODED, g_aStatsSeason[client].C4_DEFUSED, g_aStatsSeason[client].CT_WIN, g_aStatsSeason[client].TR_WIN, + g_aStatsSeason[client].HOSTAGES_RESCUED, g_aStatsSeason[client].VIP_KILLED, g_aStatsSeason[client].VIP_ESCAPED, g_aStatsSeason[client].VIP_PLAYED, g_aStatsSeason[client].MVP, g_aStatsSeason[client].DAMAGE, + g_aStatsSeason[client].MATCH_WIN, g_aStatsSeason[client].MATCH_DRAW, g_aStatsSeason[client].MATCH_LOSE, + g_aStatsSeason[client].FB, g_aStatsSeason[client].NS, g_aStatsSeason[client].NSD, + g_aStatsSeason[client].SMOKE, g_aStatsSeason[client].BLIND, g_aStatsSeason[client].AF, g_aStatsSeason[client].ATF, g_aStatsSeason[client].ATK, g_aStatsSeason[client].WALL, + GetTime(), g_aStatsSeason[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, g_aClientSteam[client], g_iSeasonID); + } + + else if (g_RankBy == 1) + { + Format(query, sizeof(query), g_sSqlSaveNameSeason, g_sSQLTableSeason, g_aStatsSeason[client].SCORE, g_aStatsSeason[client].KILLS, g_aStatsSeason[client].DEATHS, g_aStatsSeason[client].ASSISTS, g_aStatsSeason[client].SUICIDES, g_aStatsSeason[client].TK, + g_aStatsSeason[client].SHOTS, g_aStatsSeason[client].HITS, g_aStatsSeason[client].HEADSHOTS, g_aStatsSeason[client].ROUNDS_TR, g_aStatsSeason[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, + g_aHitBoxSeason[client].HEAD, g_aHitBoxSeason[client].CHEST, g_aHitBoxSeason[client].STOMACH, g_aHitBoxSeason[client].LEFT_ARM, g_aHitBoxSeason[client].RIGHT_ARM, g_aHitBoxSeason[client].LEFT_LEG, g_aHitBoxSeason[client].RIGHT_LEG, sEscapeName); + + Format(query2, sizeof(query2), g_sSqlSaveName2Season, g_sSQLTableSeason, g_aStatsSeason[client].C4_PLANTED, g_aStatsSeason[client].C4_EXPLODED, g_aStatsSeason[client].C4_DEFUSED, g_aStatsSeason[client].CT_WIN, g_aStatsSeason[client].TR_WIN, + g_aStatsSeason[client].HOSTAGES_RESCUED, g_aStatsSeason[client].VIP_KILLED, g_aStatsSeason[client].VIP_ESCAPED, g_aStatsSeason[client].VIP_PLAYED, g_aStatsSeason[client].MVP, g_aStatsSeason[client].DAMAGE, + g_aStatsSeason[client].MATCH_WIN, g_aStatsSeason[client].MATCH_DRAW, g_aStatsSeason[client].MATCH_LOSE, + g_aStatsSeason[client].FB, g_aStatsSeason[client].NS, g_aStatsSeason[client].NSD, + g_aStatsSeason[client].SMOKE, g_aStatsSeason[client].BLIND, g_aStatsSeason[client].AF, g_aStatsSeason[client].ATF, g_aStatsSeason[client].ATK, g_aStatsSeason[client].WALL, + GetTime(), g_aStatsSeason[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, sEscapeName); + } + + else if (g_RankBy == 2) + { + Format(query, sizeof(query), g_sSqlSaveIpSeason, g_sSQLTableSeason, g_aStatsSeason[client].SCORE, g_aStatsSeason[client].KILLS, g_aStatsSeason[client].DEATHS, g_aStatsSeason[client].ASSISTS, g_aStatsSeason[client].SUICIDES, g_aStatsSeason[client].TK, + g_aStatsSeason[client].SHOTS, g_aStatsSeason[client].HITS, g_aStatsSeason[client].HEADSHOTS, g_aStatsSeason[client].ROUNDS_TR, g_aStatsSeason[client].ROUNDS_CT, g_aClientIp[client], sEscapeName, weapons_query, + g_aHitBoxSeason[client].HEAD, g_aHitBoxSeason[client].CHEST, g_aHitBoxSeason[client].STOMACH, g_aHitBoxSeason[client].LEFT_ARM, g_aHitBoxSeason[client].RIGHT_ARM, g_aHitBoxSeason[client].LEFT_LEG, g_aHitBoxSeason[client].RIGHT_LEG, g_aClientIp[client]); + + Format(query2, sizeof(query2), g_sSqlSaveIp2Season, g_aStatsSeason[client].C4_PLANTED, g_aStatsSeason[client].C4_EXPLODED, g_aStatsSeason[client].C4_DEFUSED, g_aStatsSeason[client].CT_WIN, g_aStatsSeason[client].TR_WIN, + g_aStatsSeason[client].HOSTAGES_RESCUED, g_aStatsSeason[client].VIP_KILLED, g_aStatsSeason[client].VIP_ESCAPED, g_aStatsSeason[client].VIP_PLAYED, g_aStatsSeason[client].MVP, g_aStatsSeason[client].DAMAGE, + g_aStatsSeason[client].MATCH_WIN, g_aStatsSeason[client].MATCH_DRAW, g_aStatsSeason[client].MATCH_LOSE, + g_aStatsSeason[client].FB, g_aStatsSeason[client].NS, g_aStatsSeason[client].NSD, + g_aStatsSeason[client].SMOKE, g_aStatsSeason[client].BLIND, g_aStatsSeason[client].AF, g_aStatsSeason[client].ATF, g_aStatsSeason[client].ATK, g_aStatsSeason[client].WALL, + GetTime(), g_aStatsSeason[client].CONNECTED + GetTime() - g_aSession[client].CONNECTED, g_aClientIp[client]); + } + + SQL_TQuery(g_hStatsDb, SQL_SaveCallback, query, client, DBPrio_High); + SQL_TQuery(g_hStatsDb, SQL_SaveCallback, query2, client, DBPrio_High); + + #if DEBUGGING + PrintToServer(query); + PrintToServer(query2); + LogError("%s", query); + LogError("%s", query2); + #endif } @@ -1491,16 +1951,20 @@ public void OnClientPutInServer(int client) { public void LoadPlayer(int client) { - OnDB[client] = false; + OnDBGlobal[client] = false; // stats g_aSession[client].Reset(); - g_aStats[client].Reset(); - g_aStats[client].SCORE = g_PointsStart; + g_aStatsGlobal[client].Reset(); + g_aStatsGlobal[client].SCORE = g_PointsStart; + g_aStatsSeason[client].Reset(); + g_aStatsSeason[client].SCORE = g_PointsStart; // weapons - g_aWeapons[client].Reset(); + g_aWeaponsGlobal[client].Reset(); + g_aWeaponsSeason[client].Reset(); g_aSession[client].CONNECTED = GetTime(); //hitboxes - g_aHitBox[client].Reset(); + g_aHitBoxGlobal[client].Reset(); + g_aHitBoxSeason[client].Reset(); char name[MAX_NAME_LENGTH]; GetClientName(client, name, sizeof(name)); @@ -1515,23 +1979,37 @@ public void LoadPlayer(int client) { GetClientIP(client, ip, sizeof(ip)); strcopy(g_aClientIp[client], sizeof(g_aClientIp[]), ip); char query[10000]; - if (g_RankBy == 1) - FormatEx(query, sizeof(query), g_sSqlRetrieveClientName, g_sSQLTable, sEscapeName); + char query2[10000]; + if (g_RankBy == 1){ + Format(query, sizeof(query), g_sSqlRetrieveClientNameGlobal, g_sSQLTableGlobal, sEscapeName); + Format(query2, sizeof(query2), g_sSqlRetrieveClientNameSeason, g_sSQLTableSeason, sEscapeName, g_iSeasonID); + } else if (g_RankBy == 0) - FormatEx(query, sizeof(query), g_sSqlRetrieveClient, g_sSQLTable, auth); - else if (g_RankBy == 2) - FormatEx(query, sizeof(query), g_sSqlRetrieveClientIp, g_sSQLTable, ip); + { + Format(query, sizeof(query), g_sSqlRetrieveClientGlobal, g_sSQLTableGlobal, auth); + Format(query2, sizeof(query2), g_sSqlRetrieveClientSeason, g_sSQLTableSeason, auth, g_iSeasonID); + } + + else if (g_RankBy == 2){ + Format(query, sizeof(query), g_sSqlRetrieveClientIpGlobal, g_sSQLTableGlobal, ip); + Format(query2, sizeof(query2), g_sSqlRetrieveClientIpSeason, g_sSQLTableSeason, ip, g_iSeasonID); + } + - if (DEBUGGING) { + #if DEBUGGING PrintToServer(query); LogError("%s", query); + PrintToServer(query2); + LogError("%s", query2); + #endif + if (g_hStatsDb != INVALID_HANDLE){ + SQL_TQuery(g_hStatsDb, SQL_LoadPlayerCallbackGlobal, query, client); + SQL_TQuery(g_hStatsDb, SQL_LoadPlayerCallbackSeason, query2, client); } - if (g_hStatsDb != INVALID_HANDLE) - SQL_TQuery(g_hStatsDb, SQL_LoadPlayerCallback, query, client); - + } -public void SQL_LoadPlayerCallback(Handle owner, Handle hndl, const char[] error, any client) +public void SQL_LoadPlayerCallbackGlobal(Handle owner, Handle hndl, const char[] error, any client) { if (!g_bRankBots && (!IsValidClient(client) || IsFakeClient(client))) return; @@ -1563,96 +2041,96 @@ public void SQL_LoadPlayerCallback(Handle owner, Handle hndl, const char[] error if (SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) { //Player infos - g_aStats[client].SCORE = SQL_FetchInt(hndl, 4); - g_aStats[client].KILLS = SQL_FetchInt(hndl, 5); - g_aStats[client].DEATHS = SQL_FetchInt(hndl, 6); - g_aStats[client].ASSISTS = SQL_FetchInt(hndl, 7); - g_aStats[client].SUICIDES = SQL_FetchInt(hndl, 8); - g_aStats[client].TK = SQL_FetchInt(hndl, 9); - g_aStats[client].SHOTS = SQL_FetchInt(hndl, 10); - g_aStats[client].HITS = SQL_FetchInt(hndl, 11); - g_aStats[client].HEADSHOTS = SQL_FetchInt(hndl, 12); - g_aStats[client].CONNECTED = SQL_FetchInt(hndl, 13); - g_aStats[client].ROUNDS_TR = SQL_FetchInt(hndl, 14); - g_aStats[client].ROUNDS_CT = SQL_FetchInt(hndl, 15); + g_aStatsGlobal[client].SCORE = SQL_FetchInt(hndl, 4); + g_aStatsGlobal[client].KILLS = SQL_FetchInt(hndl, 5); + g_aStatsGlobal[client].DEATHS = SQL_FetchInt(hndl, 6); + g_aStatsGlobal[client].ASSISTS = SQL_FetchInt(hndl, 7); + g_aStatsGlobal[client].SUICIDES = SQL_FetchInt(hndl, 8); + g_aStatsGlobal[client].TK = SQL_FetchInt(hndl, 9); + g_aStatsGlobal[client].SHOTS = SQL_FetchInt(hndl, 10); + g_aStatsGlobal[client].HITS = SQL_FetchInt(hndl, 11); + g_aStatsGlobal[client].HEADSHOTS = SQL_FetchInt(hndl, 12); + g_aStatsGlobal[client].CONNECTED = SQL_FetchInt(hndl, 13); + g_aStatsGlobal[client].ROUNDS_TR = SQL_FetchInt(hndl, 14); + g_aStatsGlobal[client].ROUNDS_CT = SQL_FetchInt(hndl, 15); //Weapons - g_aWeapons[client].KNIFE = SQL_FetchInt(hndl, 17); - g_aWeapons[client].GLOCK = SQL_FetchInt(hndl, 18); - g_aWeapons[client].HKP2000 = SQL_FetchInt(hndl, 19); - g_aWeapons[client].USP_SILENCER = SQL_FetchInt(hndl, 20); - g_aWeapons[client].P250 = SQL_FetchInt(hndl, 21); - g_aWeapons[client].DEAGLE = SQL_FetchInt(hndl, 22); - g_aWeapons[client].ELITE = SQL_FetchInt(hndl, 23); - g_aWeapons[client].FIVESEVEN = SQL_FetchInt(hndl, 24); - g_aWeapons[client].TEC9 = SQL_FetchInt(hndl, 25); - g_aWeapons[client].CZ75A = SQL_FetchInt(hndl, 26); - g_aWeapons[client].REVOLVER = SQL_FetchInt(hndl, 27); - g_aWeapons[client].NOVA = SQL_FetchInt(hndl, 28); - g_aWeapons[client].XM1014 = SQL_FetchInt(hndl, 29); - g_aWeapons[client].MAG7 = SQL_FetchInt(hndl, 30); - g_aWeapons[client].SAWEDOFF = SQL_FetchInt(hndl, 31); - g_aWeapons[client].BIZON = SQL_FetchInt(hndl, 32); - g_aWeapons[client].MAC10 = SQL_FetchInt(hndl, 33); - g_aWeapons[client].MP9 = SQL_FetchInt(hndl, 34); - g_aWeapons[client].MP7 = SQL_FetchInt(hndl, 35); - g_aWeapons[client].UMP45 = SQL_FetchInt(hndl, 36); - g_aWeapons[client].P90 = SQL_FetchInt(hndl, 37); - g_aWeapons[client].GALILAR = SQL_FetchInt(hndl, 38); - g_aWeapons[client].AK47 = SQL_FetchInt(hndl, 39); - g_aWeapons[client].SCAR20 = SQL_FetchInt(hndl, 40); - g_aWeapons[client].FAMAS = SQL_FetchInt(hndl, 41); - g_aWeapons[client].M4A1 = SQL_FetchInt(hndl, 42); - g_aWeapons[client].M4A1_SILENCER = SQL_FetchInt(hndl, 43); - g_aWeapons[client].AUG = SQL_FetchInt(hndl, 44); - g_aWeapons[client].SSG08 = SQL_FetchInt(hndl, 45); - g_aWeapons[client].SG556 = SQL_FetchInt(hndl, 46); - g_aWeapons[client].AWP = SQL_FetchInt(hndl, 47); - g_aWeapons[client].G3SG1 = SQL_FetchInt(hndl, 48); - g_aWeapons[client].M249 = SQL_FetchInt(hndl, 49); - g_aWeapons[client].NEGEV = SQL_FetchInt(hndl, 50); - g_aWeapons[client].HEGRENADE = SQL_FetchInt(hndl, 51); - g_aWeapons[client].FLASHBANG = SQL_FetchInt(hndl, 52); - g_aWeapons[client].SMOKEGRENADE = SQL_FetchInt(hndl, 53); - g_aWeapons[client].INFERNO = SQL_FetchInt(hndl, 54); - g_aWeapons[client].DECOY = SQL_FetchInt(hndl, 55); - g_aWeapons[client].TASER = SQL_FetchInt(hndl, 56); - g_aWeapons[client].MP5SD = SQL_FetchInt(hndl, 57); - g_aWeapons[client].BREACHCHARGE = SQL_FetchInt(hndl, 58); + g_aWeaponsGlobal[client].KNIFE = SQL_FetchInt(hndl, 17); + g_aWeaponsGlobal[client].GLOCK = SQL_FetchInt(hndl, 18); + g_aWeaponsGlobal[client].HKP2000 = SQL_FetchInt(hndl, 19); + g_aWeaponsGlobal[client].USP_SILENCER = SQL_FetchInt(hndl, 20); + g_aWeaponsGlobal[client].P250 = SQL_FetchInt(hndl, 21); + g_aWeaponsGlobal[client].DEAGLE = SQL_FetchInt(hndl, 22); + g_aWeaponsGlobal[client].ELITE = SQL_FetchInt(hndl, 23); + g_aWeaponsGlobal[client].FIVESEVEN = SQL_FetchInt(hndl, 24); + g_aWeaponsGlobal[client].TEC9 = SQL_FetchInt(hndl, 25); + g_aWeaponsGlobal[client].CZ75A = SQL_FetchInt(hndl, 26); + g_aWeaponsGlobal[client].REVOLVER = SQL_FetchInt(hndl, 27); + g_aWeaponsGlobal[client].NOVA = SQL_FetchInt(hndl, 28); + g_aWeaponsGlobal[client].XM1014 = SQL_FetchInt(hndl, 29); + g_aWeaponsGlobal[client].MAG7 = SQL_FetchInt(hndl, 30); + g_aWeaponsGlobal[client].SAWEDOFF = SQL_FetchInt(hndl, 31); + g_aWeaponsGlobal[client].BIZON = SQL_FetchInt(hndl, 32); + g_aWeaponsGlobal[client].MAC10 = SQL_FetchInt(hndl, 33); + g_aWeaponsGlobal[client].MP9 = SQL_FetchInt(hndl, 34); + g_aWeaponsGlobal[client].MP7 = SQL_FetchInt(hndl, 35); + g_aWeaponsGlobal[client].UMP45 = SQL_FetchInt(hndl, 36); + g_aWeaponsGlobal[client].P90 = SQL_FetchInt(hndl, 37); + g_aWeaponsGlobal[client].GALILAR = SQL_FetchInt(hndl, 38); + g_aWeaponsGlobal[client].AK47 = SQL_FetchInt(hndl, 39); + g_aWeaponsGlobal[client].SCAR20 = SQL_FetchInt(hndl, 40); + g_aWeaponsGlobal[client].FAMAS = SQL_FetchInt(hndl, 41); + g_aWeaponsGlobal[client].M4A1 = SQL_FetchInt(hndl, 42); + g_aWeaponsGlobal[client].M4A1_SILENCER = SQL_FetchInt(hndl, 43); + g_aWeaponsGlobal[client].AUG = SQL_FetchInt(hndl, 44); + g_aWeaponsGlobal[client].SSG08 = SQL_FetchInt(hndl, 45); + g_aWeaponsGlobal[client].SG556 = SQL_FetchInt(hndl, 46); + g_aWeaponsGlobal[client].AWP = SQL_FetchInt(hndl, 47); + g_aWeaponsGlobal[client].G3SG1 = SQL_FetchInt(hndl, 48); + g_aWeaponsGlobal[client].M249 = SQL_FetchInt(hndl, 49); + g_aWeaponsGlobal[client].NEGEV = SQL_FetchInt(hndl, 50); + g_aWeaponsGlobal[client].HEGRENADE = SQL_FetchInt(hndl, 51); + g_aWeaponsGlobal[client].FLASHBANG = SQL_FetchInt(hndl, 52); + g_aWeaponsGlobal[client].SMOKEGRENADE = SQL_FetchInt(hndl, 53); + g_aWeaponsGlobal[client].INFERNO = SQL_FetchInt(hndl, 54); + g_aWeaponsGlobal[client].DECOY = SQL_FetchInt(hndl, 55); + g_aWeaponsGlobal[client].TASER = SQL_FetchInt(hndl, 56); + g_aWeaponsGlobal[client].MP5SD = SQL_FetchInt(hndl, 57); + g_aWeaponsGlobal[client].BREACHCHARGE = SQL_FetchInt(hndl, 58); //ALL 8 Hitboxes - g_aHitBox[client].HEAD = SQL_FetchInt(hndl, 59); - g_aHitBox[client].CHEST = SQL_FetchInt(hndl, 60); - g_aHitBox[client].STOMACH = SQL_FetchInt(hndl, 61); - g_aHitBox[client].LEFT_ARM = SQL_FetchInt(hndl, 62); - g_aHitBox[client].RIGHT_ARM = SQL_FetchInt(hndl, 63); - g_aHitBox[client].LEFT_LEG = SQL_FetchInt(hndl, 64); - g_aHitBox[client].RIGHT_LEG = SQL_FetchInt(hndl, 65); + g_aHitBoxGlobal[client].HEAD = SQL_FetchInt(hndl, 59); + g_aHitBoxGlobal[client].CHEST = SQL_FetchInt(hndl, 60); + g_aHitBoxGlobal[client].STOMACH = SQL_FetchInt(hndl, 61); + g_aHitBoxGlobal[client].LEFT_ARM = SQL_FetchInt(hndl, 62); + g_aHitBoxGlobal[client].RIGHT_ARM = SQL_FetchInt(hndl, 63); + g_aHitBoxGlobal[client].LEFT_LEG = SQL_FetchInt(hndl, 64); + g_aHitBoxGlobal[client].RIGHT_LEG = SQL_FetchInt(hndl, 65); // other stats - g_aStats[client].C4_PLANTED = SQL_FetchInt(hndl, 66); - g_aStats[client].C4_EXPLODED = SQL_FetchInt(hndl, 67); - g_aStats[client].C4_DEFUSED = SQL_FetchInt(hndl, 68); - g_aStats[client].CT_WIN = SQL_FetchInt(hndl, 69); - g_aStats[client].TR_WIN = SQL_FetchInt(hndl, 70); - g_aStats[client].HOSTAGES_RESCUED = SQL_FetchInt(hndl, 71); - g_aStats[client].VIP_KILLED = SQL_FetchInt(hndl, 72); - g_aStats[client].VIP_ESCAPED = SQL_FetchInt(hndl, 73); - g_aStats[client].VIP_PLAYED = SQL_FetchInt(hndl, 74); - g_aStats[client].MVP = SQL_FetchInt(hndl, 75); - g_aStats[client].DAMAGE = SQL_FetchInt(hndl, 76); - g_aStats[client].MATCH_WIN = SQL_FetchInt(hndl, 77); - g_aStats[client].MATCH_DRAW = SQL_FetchInt(hndl, 78); - g_aStats[client].MATCH_LOSE = SQL_FetchInt(hndl, 79); - g_aStats[client].FB = SQL_FetchInt(hndl, 80); - g_aStats[client].NS = SQL_FetchInt(hndl, 81); - g_aStats[client].NSD = SQL_FetchInt(hndl, 82); - g_aStats[client].SMOKE = SQL_FetchInt(hndl, 83); - g_aStats[client].BLIND = SQL_FetchInt(hndl, 84); - g_aStats[client].AF = SQL_FetchInt(hndl, 85); - g_aStats[client].ATF = SQL_FetchInt(hndl, 86); - g_aStats[client].ATK = SQL_FetchInt(hndl, 87); - g_aStats[client].WALL = SQL_FetchInt(hndl, 88); + g_aStatsGlobal[client].C4_PLANTED = SQL_FetchInt(hndl, 66); + g_aStatsGlobal[client].C4_EXPLODED = SQL_FetchInt(hndl, 67); + g_aStatsGlobal[client].C4_DEFUSED = SQL_FetchInt(hndl, 68); + g_aStatsGlobal[client].CT_WIN = SQL_FetchInt(hndl, 69); + g_aStatsGlobal[client].TR_WIN = SQL_FetchInt(hndl, 70); + g_aStatsGlobal[client].HOSTAGES_RESCUED = SQL_FetchInt(hndl, 71); + g_aStatsGlobal[client].VIP_KILLED = SQL_FetchInt(hndl, 72); + g_aStatsGlobal[client].VIP_ESCAPED = SQL_FetchInt(hndl, 73); + g_aStatsGlobal[client].VIP_PLAYED = SQL_FetchInt(hndl, 74); + g_aStatsGlobal[client].MVP = SQL_FetchInt(hndl, 75); + g_aStatsGlobal[client].DAMAGE = SQL_FetchInt(hndl, 76); + g_aStatsGlobal[client].MATCH_WIN = SQL_FetchInt(hndl, 77); + g_aStatsGlobal[client].MATCH_DRAW = SQL_FetchInt(hndl, 78); + g_aStatsGlobal[client].MATCH_LOSE = SQL_FetchInt(hndl, 79); + g_aStatsGlobal[client].FB = SQL_FetchInt(hndl, 80); + g_aStatsGlobal[client].NS = SQL_FetchInt(hndl, 81); + g_aStatsGlobal[client].NSD = SQL_FetchInt(hndl, 82); + g_aStatsGlobal[client].SMOKE = SQL_FetchInt(hndl, 83); + g_aStatsGlobal[client].BLIND = SQL_FetchInt(hndl, 84); + g_aStatsGlobal[client].AF = SQL_FetchInt(hndl, 85); + g_aStatsGlobal[client].ATF = SQL_FetchInt(hndl, 86); + g_aStatsGlobal[client].ATK = SQL_FetchInt(hndl, 87); + g_aStatsGlobal[client].WALL = SQL_FetchInt(hndl, 88); } else { char query[10000]; char sEscapeName[MAX_NAME_LENGTH * 2 + 1]; @@ -1660,15 +2138,16 @@ public void SQL_LoadPlayerCallback(Handle owner, Handle hndl, const char[] error //SQL_EscapeString(g_hStatsDb,name,name,sizeof(name)); //ReplaceString(name, sizeof(name), "'", ""); - Format(query, sizeof(query), g_sSqlInsert, g_sSQLTable, g_aClientSteam[client], sEscapeName, g_aClientIp[client], g_PointsStart); + Format(query, sizeof(query), g_sSqlInsertGlobal, g_sSQLTableGlobal, g_aClientSteam[client], sEscapeName, g_aClientIp[client], g_PointsStart); SQL_TQuery(g_hStatsDb, SQL_NothingCallback, query, _, DBPrio_High); - if (DEBUGGING) { + #if DEBUGGING PrintToServer(query); LogError("%s", query); - } + #endif } - OnDB[client] = true; + + OnDBGlobal[client] = true; /** Start the forward OnPlayerLoaded */ @@ -1683,6 +2162,146 @@ public void SQL_LoadPlayerCallback(Handle owner, Handle hndl, const char[] error } } +public void SQL_LoadPlayerCallbackSeason(Handle owner, Handle hndl, const char[] error, any client) +{ + if (!g_bRankBots && (!IsValidClient(client) || IsFakeClient(client))) + return; + + if (hndl == INVALID_HANDLE) + { + LogError("[RankMe] Load Player Season Fail: %s", error); + return; + } + if (!IsClientInGame(client)) + return; + + if (g_RankBy == 1) { + char name[MAX_NAME_LENGTH]; + GetClientName(client, name, sizeof(name)); + if (!StrEqual(name, g_aClientName[client])) + return; + } else if (g_RankBy == 0) { + char auth[64]; + GetClientAuthId(client, AuthId_Steam2, auth, sizeof(auth)); + if (!StrEqual(auth, g_aClientSteam[client])) + return; + } else if (g_RankBy == 2) { + char ip[64]; + GetClientIP(client, ip, sizeof(ip)); + if (!StrEqual(ip, g_aClientIp[client])) + return; + } + if (SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) + { + //Player infos + g_aStatsSeason[client].SCORE = SQL_FetchInt(hndl, 5); + g_aStatsSeason[client].KILLS = SQL_FetchInt(hndl, 6); + g_aStatsSeason[client].DEATHS = SQL_FetchInt(hndl, 7); + g_aStatsSeason[client].ASSISTS = SQL_FetchInt(hndl, 8); + g_aStatsSeason[client].SUICIDES = SQL_FetchInt(hndl, 9); + g_aStatsSeason[client].TK = SQL_FetchInt(hndl, 10); + g_aStatsSeason[client].SHOTS = SQL_FetchInt(hndl, 11); + g_aStatsSeason[client].HITS = SQL_FetchInt(hndl, 12); + g_aStatsSeason[client].HEADSHOTS = SQL_FetchInt(hndl, 13); + g_aStatsSeason[client].CONNECTED = SQL_FetchInt(hndl, 14); + g_aStatsSeason[client].ROUNDS_TR = SQL_FetchInt(hndl, 15); + g_aStatsSeason[client].ROUNDS_CT = SQL_FetchInt(hndl, 16); + + //Weapons + g_aWeaponsSeason[client].KNIFE = SQL_FetchInt(hndl, 18); + g_aWeaponsSeason[client].GLOCK = SQL_FetchInt(hndl, 19); + g_aWeaponsSeason[client].HKP2000 = SQL_FetchInt(hndl, 20); + g_aWeaponsSeason[client].USP_SILENCER = SQL_FetchInt(hndl, 21); + g_aWeaponsSeason[client].P250 = SQL_FetchInt(hndl, 22); + g_aWeaponsSeason[client].DEAGLE = SQL_FetchInt(hndl, 23); + g_aWeaponsSeason[client].ELITE = SQL_FetchInt(hndl, 24); + g_aWeaponsSeason[client].FIVESEVEN = SQL_FetchInt(hndl, 25); + g_aWeaponsSeason[client].TEC9 = SQL_FetchInt(hndl, 26); + g_aWeaponsSeason[client].CZ75A = SQL_FetchInt(hndl, 27); + g_aWeaponsSeason[client].REVOLVER = SQL_FetchInt(hndl, 28); + g_aWeaponsSeason[client].NOVA = SQL_FetchInt(hndl, 29); + g_aWeaponsSeason[client].XM1014 = SQL_FetchInt(hndl, 30); + g_aWeaponsSeason[client].MAG7 = SQL_FetchInt(hndl, 31); + g_aWeaponsSeason[client].SAWEDOFF = SQL_FetchInt(hndl, 32); + g_aWeaponsSeason[client].BIZON = SQL_FetchInt(hndl, 33); + g_aWeaponsSeason[client].MAC10 = SQL_FetchInt(hndl, 34); + g_aWeaponsSeason[client].MP9 = SQL_FetchInt(hndl, 35); + g_aWeaponsSeason[client].MP7 = SQL_FetchInt(hndl, 36); + g_aWeaponsSeason[client].UMP45 = SQL_FetchInt(hndl, 37); + g_aWeaponsSeason[client].P90 = SQL_FetchInt(hndl, 38); + g_aWeaponsSeason[client].GALILAR = SQL_FetchInt(hndl, 39); + g_aWeaponsSeason[client].AK47 = SQL_FetchInt(hndl, 40); + g_aWeaponsSeason[client].SCAR20 = SQL_FetchInt(hndl, 41); + g_aWeaponsSeason[client].FAMAS = SQL_FetchInt(hndl, 42); + g_aWeaponsSeason[client].M4A1 = SQL_FetchInt(hndl, 43); + g_aWeaponsSeason[client].M4A1_SILENCER = SQL_FetchInt(hndl, 44); + g_aWeaponsSeason[client].AUG = SQL_FetchInt(hndl, 45); + g_aWeaponsSeason[client].SSG08 = SQL_FetchInt(hndl, 46); + g_aWeaponsSeason[client].SG556 = SQL_FetchInt(hndl, 47); + g_aWeaponsSeason[client].AWP = SQL_FetchInt(hndl, 48); + g_aWeaponsSeason[client].G3SG1 = SQL_FetchInt(hndl, 49); + g_aWeaponsSeason[client].M249 = SQL_FetchInt(hndl, 50); + g_aWeaponsSeason[client].NEGEV = SQL_FetchInt(hndl, 51); + g_aWeaponsSeason[client].HEGRENADE = SQL_FetchInt(hndl, 52); + g_aWeaponsSeason[client].FLASHBANG = SQL_FetchInt(hndl, 53); + g_aWeaponsSeason[client].SMOKEGRENADE = SQL_FetchInt(hndl, 54); + g_aWeaponsSeason[client].INFERNO = SQL_FetchInt(hndl, 55); + g_aWeaponsSeason[client].DECOY = SQL_FetchInt(hndl, 56); + g_aWeaponsSeason[client].TASER = SQL_FetchInt(hndl, 57); + g_aWeaponsSeason[client].MP5SD = SQL_FetchInt(hndl, 58); + g_aWeaponsSeason[client].BREACHCHARGE = SQL_FetchInt(hndl, 59); + + //ALL 8 Hitboxes + g_aHitBoxSeason[client].HEAD = SQL_FetchInt(hndl, 60); + g_aHitBoxSeason[client].CHEST = SQL_FetchInt(hndl, 61); + g_aHitBoxSeason[client].STOMACH = SQL_FetchInt(hndl, 62); + g_aHitBoxSeason[client].LEFT_ARM = SQL_FetchInt(hndl, 63); + g_aHitBoxSeason[client].RIGHT_ARM = SQL_FetchInt(hndl, 64); + g_aHitBoxSeason[client].LEFT_LEG = SQL_FetchInt(hndl, 65); + g_aHitBoxSeason[client].RIGHT_LEG = SQL_FetchInt(hndl, 66); + + // other stats + g_aStatsSeason[client].C4_PLANTED = SQL_FetchInt(hndl, 67); + g_aStatsSeason[client].C4_EXPLODED = SQL_FetchInt(hndl, 68); + g_aStatsSeason[client].C4_DEFUSED = SQL_FetchInt(hndl, 69); + g_aStatsSeason[client].CT_WIN = SQL_FetchInt(hndl, 70); + g_aStatsSeason[client].TR_WIN = SQL_FetchInt(hndl, 71); + g_aStatsSeason[client].HOSTAGES_RESCUED = SQL_FetchInt(hndl, 72); + g_aStatsSeason[client].VIP_KILLED = SQL_FetchInt(hndl, 73); + g_aStatsSeason[client].VIP_ESCAPED = SQL_FetchInt(hndl, 74); + g_aStatsSeason[client].VIP_PLAYED = SQL_FetchInt(hndl, 75); + g_aStatsSeason[client].MVP = SQL_FetchInt(hndl, 76); + g_aStatsSeason[client].DAMAGE = SQL_FetchInt(hndl, 77); + g_aStatsSeason[client].MATCH_WIN = SQL_FetchInt(hndl, 78); + g_aStatsSeason[client].MATCH_DRAW = SQL_FetchInt(hndl, 79); + g_aStatsSeason[client].MATCH_LOSE = SQL_FetchInt(hndl, 80); + g_aStatsSeason[client].FB = SQL_FetchInt(hndl, 81); + g_aStatsSeason[client].NS = SQL_FetchInt(hndl, 82); + g_aStatsSeason[client].NSD = SQL_FetchInt(hndl, 83); + g_aStatsSeason[client].SMOKE = SQL_FetchInt(hndl, 84); + g_aStatsSeason[client].BLIND = SQL_FetchInt(hndl, 85); + g_aStatsSeason[client].AF = SQL_FetchInt(hndl, 86); + g_aStatsSeason[client].ATF = SQL_FetchInt(hndl, 87); + g_aStatsSeason[client].ATK = SQL_FetchInt(hndl, 88); + g_aStatsSeason[client].WALL = SQL_FetchInt(hndl, 89); + } else { + char query[10000]; + char sEscapeName[MAX_NAME_LENGTH * 2 + 1]; + SQL_EscapeString(g_hStatsDb, g_aClientName[client], sEscapeName, sizeof(sEscapeName)); + //SQL_EscapeString(g_hStatsDb,name,name,sizeof(name)); + //ReplaceString(name, sizeof(name), "'", ""); + + Format(query, sizeof(query), g_sSqlInsertSeason, g_sSQLTableSeason, g_iSeasonID, g_aClientSteam[client], sEscapeName, g_aClientIp[client], g_PointsStart); + SQL_TQuery(g_hStatsDb, SQL_NothingCallback, query, _, DBPrio_High); + + #if DEBUGGING + PrintToServer(query); + LogError("%s", query); + #endif + } + OnDBSeason[client] = true; +} + public void SQL_PurgeCallback(Handle owner, Handle hndl, const char[] error, any client) { if (hndl == INVALID_HANDLE) @@ -1714,14 +2333,15 @@ public void OnClientDisconnect(int client) { if (!g_bRankBots && (!IsValidClient(client) || IsFakeClient(client))) return; SalvarPlayer(client); - OnDB[client] = false; + OnDBGlobal[client] = false; + OnDBSeason[client] = false; } public void DumpDB() { if (!g_bDumpDB || g_bMysql) return; char sQuery[1000]; - FormatEx(sQuery, sizeof(sQuery), "SELECT * from `%s`", g_sSQLTable); + FormatEx(sQuery, sizeof(sQuery), "SELECT * from `%s`", g_sSQLTableGlobal); SQL_TQuery(g_hStatsDb, SQL_DumpCallback, sQuery); } @@ -1752,13 +2372,13 @@ public void SQL_DumpCallback(Handle owner, Handle hndl, const char[] error, any if(g_bMysql) { - WriteFileLine(File1, g_sMysqlCreate, g_sSQLTable); + WriteFileLine(File1, g_sMysqlCreateGlobal, g_sSQLTableGlobal); WriteFileLine(File1, ""); } if(!g_bMysql) { - WriteFileLine(File1, g_sSqliteCreate, g_sSQLTable); + WriteFileLine(File1, g_sSqliteCreateGlobal, g_sSQLTableGlobal); WriteFileLine(File1, ""); } @@ -1781,7 +2401,7 @@ public void SQL_DumpCallback(Handle owner, Handle hndl, const char[] error, any Format(fields_values, sizeof(fields_values), "%s,\"%s\"", fields_values, prepared_field); } - WriteFileLine(File1, "INSERT INTO `%s` VALUES (%s);", g_sSQLTable, fields_values); + WriteFileLine(File1, "INSERT INTO `%s` VALUES (%s);", g_sSQLTableGlobal, fields_values); } CloseHandle(File1); } @@ -1795,18 +2415,23 @@ stock bool IsValidClient(int client, bool nobots = true) return IsClientInGame(client); } -stock void MakeSelectQuery(char[] sQuery, int strsize) { +stock void MakeSelectQuery(char[] sQuery, int strsize, bool bIsSeason=false, bool bCount=false) { // Make basic query - Format(sQuery, strsize, "SELECT * FROM `%s` WHERE kills >= '%d'", g_sSQLTable, g_MinimalKills); - - // Append check for bots + if(bIsSeason) + Format(sQuery, strsize, "SELECT %s FROM `%s` WHERE kills >= '%d' AND season_id = '%d'", bCount? "COUNT(*)": "*", g_sSQLTableSeason, g_MinimalKills, g_iSeasonID); + else + Format(sQuery, strsize, "SELECT %s FROM `%s` WHERE kills >= '%d'", bCount? "COUNT(*)": "*", g_sSQLTableGlobal, g_MinimalKills); + // Append check for bot if (!g_bShowBotsOnRank) Format(sQuery, strsize, "%s AND steam <> 'BOT'", sQuery); // Append check for inactivity if (g_DaysToNotShowOnRank > 0) Format(sQuery, strsize, "%s AND lastconnect >= '%d'", sQuery, GetTime() - (g_DaysToNotShowOnRank * 86400)); + #if DEBUGGING + PrintToServer(sQuery); + #endif } public Action RankMe_OnPlayerLoaded(int client){ @@ -1944,24 +2569,35 @@ public Action Event_WinPanelMatch(Handle event, const char[] name, bool dontBroa if(GetClientTeam(i) == TR) { - g_aStats[i].MATCH_LOSE++; - g_aStats[i].SCORE -= g_PointsMatchLose; + g_aStatsGlobal[i].MATCH_LOSE++; + g_aStatsSeason[i].MATCH_LOSE++; + g_aStatsGlobal[i].SCORE -= g_PointsMatchLose; + g_aStatsSeason[i].SCORE -= g_PointsMatchLose; /* Min points */ - if (g_bPointsMinEnabled && g_aStats[i].SCORE < g_PointsMin) + if (g_bPointsMinEnabled) { - int diff = g_PointsMin - g_aStats[i].SCORE; - g_aStats[i].SCORE = g_PointsMin; - g_aSession[i].SCORE -= diff; - } - else{ - g_aSession[i].SCORE -= g_PointsMatchLose; + if(g_aStatsGlobal[i].SCORE < g_PointsMin) + { + int diff = g_PointsMin - g_aStatsGlobal[i].SCORE; + g_aStatsGlobal[i].SCORE = g_PointsMin; + g_aSession[i].SCORE -= diff; + } + else{ + g_aSession[i].SCORE -= g_PointsMatchLose; + } + if(g_aStatsSeason[i].SCORE < g_PointsMin) + { + g_aStatsSeason[i].SCORE = g_PointsMin; + } } } else if (GetClientTeam(i) == CT) { - g_aStats[i].MATCH_WIN++; - g_aStats[i].SCORE += g_PointsMatchWin; + g_aStatsGlobal[i].MATCH_WIN++; + g_aStatsSeason[i].MATCH_WIN++; + g_aStatsGlobal[i].SCORE += g_PointsMatchWin; + g_aStatsSeason[i].SCORE += g_PointsMatchWin; g_aSession[i].SCORE += g_PointsMatchWin; } } @@ -1974,8 +2610,10 @@ public Action Event_WinPanelMatch(Handle event, const char[] name, bool dontBroa { if (IsClientInGame(i) && (GetClientTeam(i) == TR || GetClientTeam(i) == CT)) { - g_aStats[i].MATCH_DRAW++; - g_aStats[i].SCORE += g_PointsMatchDraw; + g_aStatsGlobal[i].MATCH_DRAW++; + g_aStatsSeason[i].MATCH_DRAW++; + g_aStatsGlobal[i].SCORE += g_PointsMatchDraw; + g_aStatsSeason[i].SCORE += g_PointsMatchDraw; g_aSession[i].SCORE += g_PointsMatchDraw; if(!hidechat[i]) CPrintToChat(i, "%T", "Draw", i, g_PointsMatchDraw); @@ -1997,24 +2635,35 @@ public Action Event_WinPanelMatch(Handle event, const char[] name, bool dontBroa if(GetClientTeam(i) == TR) { - g_aStats[i].MATCH_WIN++; - g_aStats[i].SCORE += g_PointsMatchWin; + g_aStatsGlobal[i].MATCH_WIN++; + g_aStatsSeason[i].MATCH_WIN++; + g_aStatsGlobal[i].SCORE += g_PointsMatchWin; + g_aStatsSeason[i].SCORE += g_PointsMatchWin; g_aSession[i].SCORE += g_PointsMatchWin; } else if (GetClientTeam(i) == CT) { - g_aStats[i].MATCH_LOSE++; - g_aStats[i].SCORE -= g_PointsMatchLose; + g_aStatsGlobal[i].MATCH_LOSE++; + g_aStatsSeason[i].MATCH_LOSE++; + g_aStatsGlobal[i].SCORE -= g_PointsMatchLose; + g_aStatsSeason[i].SCORE -= g_PointsMatchLose; /* Min points */ - if (g_bPointsMinEnabled && g_aStats[i].SCORE < g_PointsMin) + if (g_bPointsMinEnabled) { - int diff = g_PointsMin - g_aStats[i].SCORE; - g_aStats[i].SCORE = g_PointsMin; - g_aSession[i].SCORE -= diff; - } - else{ + if(g_aStatsGlobal[i].SCORE < g_PointsMin) + { + int diff = g_PointsMin - g_aStatsGlobal[i].SCORE; + g_aStatsGlobal[i].SCORE = g_PointsMin; + g_aSession[i].SCORE -= diff; + } + else{ g_aSession[i].SCORE -= g_PointsMatchLose; + } + if(g_aStatsSeason[i].SCORE < g_PointsMin) + { + g_aStatsSeason[i].SCORE = g_PointsMin; + } } } } @@ -2038,24 +2687,24 @@ public Action CMD_Duplicate(int client, int args) { if (g_bMysql) { if (g_RankBy == 0) - FormatEx(sQuery, sizeof(sQuery), g_sSqlRemoveDuplicateMySQL, g_sSQLTable, g_sSQLTable, g_sSQLTable, g_sSQLTable, g_sSQLTable); + FormatEx(sQuery, sizeof(sQuery), g_sSqlRemoveDuplicateMySQL, g_sSQLTableGlobal, g_sSQLTableGlobal, g_sSQLTableGlobal, g_sSQLTableGlobal, g_sSQLTableGlobal); else if (g_RankBy == 1) - FormatEx(sQuery, sizeof(sQuery), g_sSqlRemoveDuplicateNameMySQL, g_sSQLTable, g_sSQLTable, g_sSQLTable, g_sSQLTable, g_sSQLTable); + FormatEx(sQuery, sizeof(sQuery), g_sSqlRemoveDuplicateNameMySQL, g_sSQLTableGlobal, g_sSQLTableGlobal, g_sSQLTableGlobal, g_sSQLTableGlobal, g_sSQLTableGlobal); else if (g_RankBy == 2) - FormatEx(sQuery, sizeof(sQuery), g_sSqlRemoveDuplicateIpMySQL, g_sSQLTable, g_sSQLTable, g_sSQLTable, g_sSQLTable, g_sSQLTable); + FormatEx(sQuery, sizeof(sQuery), g_sSqlRemoveDuplicateIpMySQL, g_sSQLTableGlobal, g_sSQLTableGlobal, g_sSQLTableGlobal, g_sSQLTableGlobal, g_sSQLTableGlobal); } else { if (g_RankBy == 0) - FormatEx(sQuery, sizeof(sQuery), g_sSqlRemoveDuplicateSQLite, g_sSQLTable, g_sSQLTable, g_sSQLTable, g_sSQLTable); + FormatEx(sQuery, sizeof(sQuery), g_sSqlRemoveDuplicateSQLite, g_sSQLTableGlobal, g_sSQLTableGlobal, g_sSQLTableGlobal, g_sSQLTableGlobal); else if (g_RankBy == 1) - FormatEx(sQuery, sizeof(sQuery), g_sSqlRemoveDuplicateNameSQLite, g_sSQLTable, g_sSQLTable, g_sSQLTable, g_sSQLTable); + FormatEx(sQuery, sizeof(sQuery), g_sSqlRemoveDuplicateNameSQLite, g_sSQLTableGlobal, g_sSQLTableGlobal, g_sSQLTableGlobal, g_sSQLTableGlobal); else if (g_RankBy == 2) - FormatEx(sQuery, sizeof(sQuery), g_sSqlRemoveDuplicateIpSQLite, g_sSQLTable, g_sSQLTable, g_sSQLTable, g_sSQLTable); + FormatEx(sQuery, sizeof(sQuery), g_sSqlRemoveDuplicateIpSQLite, g_sSQLTableGlobal, g_sSQLTableGlobal, g_sSQLTableGlobal, g_sSQLTableGlobal); } diff --git a/translations/fr/kento.rankme.phrases.txt b/translations/fr/kento.rankme.phrases.txt index 27224f8..593ed96 100644 --- a/translations/fr/kento.rankme.phrases.txt +++ b/translations/fr/kento.rankme.phrases.txt @@ -80,12 +80,19 @@ "fr" "{PINK}{1}{PURPLE} ({2}) {LIGHTGREEN}a reçu {3} point(s) {NORMAL}pour avoir {RED}{4}{NORMAL}." } - "IsRankedAt" + "IsRankedAtGlobal" { "#format" "{1:s},{2:d},{3:d},{4:d},{5:d},{6:d},{7:d},{8:.2f},{9:d},{10:d}" - "fr" "Player{PINK} {1} {NORMAL}est classé {GREEN}{2}/{3} {NORMAL}, {PURPLE}{4} point(s){NORMAL},{LIGHTGREEN} {5} tués{NORMAL},{RED} {6} morts{NORMAL},{ORANGE} {7} assistances{NORMAL}, {BLUE} KDR {8} {NORMAL}, {DARKRED}{9} tks {NORMAL}et {YELLOW}{10} MVPs{NORMAL}." + "fr" "{PINK} {1} {NORMAL}est au rang {GREEN}{2}/{3} {NORMAL}, {PURPLE}{4} point(s){NORMAL},{LIGHTGREEN} {5} kills{NORMAL},{RED} {6} morts{NORMAL},{ORANGE} {7} assistances{NORMAL}, {BLUE} KDR {8} {NORMAL}, {DARKRED}{9} tks {NORMAL}et {YELLOW}{10} MVPs{NORMAL}." } + "IsRankedAtSeason" + { + "#format" "{1:d},{2:s},{3:d},{4:d},{5:d},{6:d},{7:d},{8:d},{9:.2f},{10:d},{11:d}" + "fr" "{NORMAL}Pour la saison {RED}{1}{NORMAL}, {PINK} {2} {NORMAL}est au rang {GREEN}{3}/{4}{NORMAL}, {PURPLE}{5} points{NORMAL}, {LIGHTGREEN}{6} kills{NORMAL}, {RED}{7} morts{NORMAL}, {ORANGE}{8} assistances{NORMAL}, {BLUE}KDR {9}{NORMAL}, {DARKRED}{10} TKs {NORMAL}et {YELLOW}{11} MVPs{NORMAL}." + } + + "Killing" { "#format" "{1:s},{2:d},{3:d},{4:s},{5:d}" diff --git a/translations/kento.rankme.phrases.txt b/translations/kento.rankme.phrases.txt index 4c5da58..47dc3be 100644 --- a/translations/kento.rankme.phrases.txt +++ b/translations/kento.rankme.phrases.txt @@ -80,12 +80,18 @@ "en" "{PINK}{1}{PURPLE} ({2}) {LIGHTGREEN}got {3} point(s) {NORMAL}for {RED}{4}{NORMAL}." } - "IsRankedAt" + "IsRankedAtGlobal" { "#format" "{1:s},{2:d},{3:d},{4:d},{5:d},{6:d},{7:d},{8:.2f},{9:d},{10:d}" "en" "Player{PINK} {1} {NORMAL}is ranked at {GREEN}{2}/{3}{NORMAL}, {PURPLE}{4} points{NORMAL}, {LIGHTGREEN}{5} kills{NORMAL}, {RED}{6} deaths{NORMAL}, {ORANGE}{7} assists{NORMAL}, {BLUE}KDR {8}{NORMAL}, {DARKRED}{9} TKs {NORMAL}and {YELLOW}{10} MVPs{NORMAL}." } + "IsRankedAtSeason" + { + "#format" "{1:d},{2:s},{3:d},{4:d},{5:d},{6:d},{7:d},{8:d},{9:.2f},{10:d},{11:d}" + "en" "{NORMAL}For season {RED}{1}{NORMAL}, player{PINK} {2} {NORMAL}is ranked at {GREEN}{3}/{4}{NORMAL}, {PURPLE}{5} points{NORMAL}, {LIGHTGREEN}{6} kills{NORMAL}, {RED}{7} deaths{NORMAL}, {ORANGE}{8} assists{NORMAL}, {BLUE}KDR {9}{NORMAL}, {DARKRED}{10} TKs {NORMAL}and {YELLOW}{11} MVPs{NORMAL}." + } + "Killing" { "#format" "{1:s},{2:d},{3:d},{4:s},{5:d}"