/addons/sourcemod/scripting/mvm_stats.sp
Unknown | 176 lines | 155 code | 21 blank | 0 comment | 0 complexity | 12af98466dae34900908d148a21f5ce3 MD5 | raw file
- #pragma semicolon 1
- #include <sourcemod>
- #include <dbi>
- #include <tf2>
- #define PLUGIN_VERSION "1.0.0"
-
- public Plugin:myinfo =
- {
- name = "MvM Stats",
- author = "kimoto",
- description = "MvM Stats",
- version = PLUGIN_VERSION,
- url = "http://kymt.me/"
- };
-
- new Handle:db = INVALID_HANDLE;
- new bool:alreadySent = false;
- new countRobotKilled = 0;
- new countPickupedCurrency = 0;
-
- PrintLastError()
- {
- decl String:error[256];
- SQL_GetError(db, error, sizeof(error));
- PrintToServer("Failed to query (error: %s)", error);
- }
-
- InitDB()
- {
- alreadySent = false;
- countRobotKilled = 0;
- countPickupedCurrency = 0;
- LogMessage("Try to connect mysql server");
- new String:error[256];
- if((db = SQL_DefConnect(error, sizeof(error))) == INVALID_HANDLE) {
- PrintToServer("Could not connect (enable silent mode): %s", error);
- return;
- }
- LogMessage("connected: %s", error);
- }
-
- IsAliveDB()
- {
- return (db != INVALID_HANDLE);
- }
-
- CountLoaded()
- {
- if(!IsAliveDB()) return;
- decl String:map[256];
- GetCurrentMap(map, sizeof(map));
- SQL_QuoteString(db, map, map, sizeof(map));
- decl String:query[256];
- Format(query, sizeof(query), "insert into game_stats (map_code, loaded) VALUES (\"%s\", 1) ON DUPLICATE KEY UPDATE loaded = loaded + 1;", map);
- if(!SQL_FastQuery(db, query)){
- PrintLastError();
- }
- }
-
- CountPlayed()
- {
- if(!IsAliveDB()) return;
- decl String:map[256];
- GetCurrentMap(map, sizeof(map));
- SQL_QuoteString(db, map, map, sizeof(map));
- decl String:query[256];
- Format(query, sizeof(query), "insert into game_stats (map_code, played) VALUES (\"%s\", 1) ON DUPLICATE KEY UPDATE played = played + 1;", map);
- if(!SQL_FastQuery(db, query)){
- PrintLastError();
- }
- }
-
- CountWin()
- {
- if(!IsAliveDB()) return;
- decl String:map[256];
- GetCurrentMap(map, sizeof(map));
- SQL_QuoteString(db, map, map, sizeof(map));
- decl String:query[256];
- Format(query, sizeof(query), "insert into game_stats (map_code, win) VALUES (\"%s\", 1) ON DUPLICATE KEY UPDATE win = win + 1;", map);
- if(!SQL_FastQuery(db, query)){
- PrintLastError();
- }
- }
-
- SendRobotKilled()
- {
- if(!IsAliveDB()) return;
- decl String:query[256];
- Format(query, sizeof(query), "UPDATE mvm_stats SET total_robot_killed = total_robot_killed + %d, total_amount = total_amount + %d;", countRobotKilled, countPickupedCurrency);
- if(SQL_FastQuery(db, query)){
- countRobotKilled = 0; // reset to zero if SQL query succeed
- countPickupedCurrency = 0; // reset to zero if SQL query succeed
- }else{
- PrintLastError();
- }
- }
-
- CloseDB()
- {
- if(IsAliveDB())
- CloseHandle(db);
- }
-
- public OnPluginStart()
- {
- InitDB();
- RegServerCmd("mvm_stats_killed", Command_MvMStatsKilled);
- HookEvent("mvm_wave_complete", Event_WaveComplete, EventHookMode_PostNoCopy);
- HookEvent("mvm_mission_complete", Event_MissionComplete, EventHookMode_PostNoCopy);
- HookEvent("mvm_pickup_currency", Event_MvMPickupCurrency, EventHookMode_Post);
- HookEvent("teamplay_round_active", Event_RoundActive, EventHookMode_PostNoCopy);
- HookEvent("player_death", Event_PlayerDeath, EventHookMode_Post);
- }
-
- public Action:Command_MvMStatsKilled(args)
- {
- LogMessage("Robot was killed: %d", countRobotKilled);
- LogMessage("Pickuped Amount: %d", countPickupedCurrency);
- }
-
- public Action:Event_RoundActive(Handle:event, const String:name[], bool:dontBroadcast)
- {
- if(alreadySent == false){
- CountPlayed();
- alreadySent = true;
- }
- }
-
- public Action:Event_WaveComplete(Handle:event, const String:name[], bool:dontBroadcast)
- {
- LogMessage("Wave Complete Event");
- LogMessage("Sending robot killed information");
- SendRobotKilled();
- }
-
- public Action:Event_MissionComplete(Handle:event, const String:name[], bool:dontBroadcast)
- {
- LogMessage("event mission complete!!");
- CountWin();
- }
-
- public Action:Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
- {
- new client = GetClientOfUserId(GetEventInt(event, "userid"));
- if(GetClientTeam(client) == _:TFTeam_Blue){
- // count killed
- countRobotKilled++;
- }
- }
-
- public Action:Event_MvMPickupCurrency(Handle:event, const String:name[], bool:dontBroadcast)
- {
- new currency = GetEventInt(event, "currency");
- //LogMessage("pickuped: %d", currency);
- countPickupedCurrency += currency;
- }
-
- public OnPluginEnd()
- {
- CloseDB();
- }
-
- public OnMapStart()
- {
- alreadySent = false;
- countRobotKilled = 0;
- countPickupedCurrency = 0;
- CountLoaded();
- }
-
- public OnMapEnd()
- {
- SendRobotKilled();
- }
-