Guest User

natives.sp

a guest
Jul 15th, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.83 KB | None | 0 0
  1. /* Plugin Template generated by Pawn Studio */
  2.  
  3. char g_sql_loadplayer[] =
  4. "SELECT name, steamid, score, kills, deaths, shots, hits, time_played, headshots FROM players WHERE steamid = '%s'";
  5.  
  6. char g_sql_top[] =
  7. "SELECT name, steamid, score, kills, deaths, shots, hits, time_played, headshots FROM players ORDER BY score DESC LIMIT %i OFFSET %i";
  8.  
  9. char g_sql_rank[] =
  10. "SELECT DISTINCT score FROM players WHERE score >= %i ORDER BY score ASC;";
  11.  
  12. //char g_sql_rank_kills[] =
  13. //"SELECT DISTINCT score FROM players WHERE kills >= %i ORDER BY kills ASC;";
  14.  
  15. public int Native_Stats_GetPlayerSession(Handle plugin, int numParams)
  16. {
  17. int client = GetNativeCell(1);
  18. StatsCallback callback = GetNativeCell(2);
  19. any data = GetNativeCell(3);
  20. int stats[MAX_STATS];
  21.  
  22. stats[STAT_KILLS] = g_session_kills[client];
  23. stats[STAT_DEATHS] = g_session_deaths[client];
  24. stats[STAT_HITS] = g_session_hits[client];
  25. stats[STAT_SHOTS] = g_session_shots[client];
  26. stats[STAT_SCORE] = g_session_score[client];
  27. stats[STAT_HEADSHOTS] = g_session_headshots[client];
  28. stats[STAT_TIME_PLAYED] = GetTime() - g_time_joined[client];
  29.  
  30. CallStatsCallback(g_name[client], g_steamid[client], stats, callback, data, 0);
  31. }
  32.  
  33. public int Native_Stats_GetPlayersByRank(Handle plugin, int numParams)
  34. {
  35. int rank = GetNativeCell(1);
  36. int count = GetNativeCell(2);
  37. StatsCallback callback = GetNativeCell(3);
  38. any data = GetNativeCell(4);
  39.  
  40. Handle pack = CreateDataPack();
  41.  
  42. // WritePackCell(pack, view_as<int>(callback));
  43. WritePackFunction(pack, callback);
  44. WritePackCell(pack, data);
  45.  
  46. char query[192];
  47.  
  48. Format(query, sizeof(query), g_sql_top, count, rank - 1);
  49. SQL_TQuery(stats_db, SQL_TopCallback, query, pack);
  50. }
  51.  
  52. public void SQL_TopCallback(Handle owner, Handle hndl, const char[] error, any data)
  53. {
  54. Handle pack = data;
  55. ResetPack(pack);
  56. StatsCallback callback = view_as<StatsCallback>(ReadPackCell(pack));
  57. any args = ReadPackCell(pack);
  58. CloseHandle(pack);
  59.  
  60. char name[MAX_NAME_LENGTH];
  61. char steamid[MAX_STEAMID_LENGTH];
  62.  
  63. int stats[MAX_STATS];
  64. int index = 0;
  65.  
  66. if(SQL_HasResultSet(hndl))
  67. {
  68. while(SQL_FetchRow(hndl))
  69. {
  70. index++;
  71. SQL_FetchString(hndl, 0, name, sizeof(name));
  72. SQL_FetchString(hndl, 1, steamid, sizeof(steamid));
  73. stats[STAT_SCORE] = SQL_FetchInt(hndl, 2);
  74. stats[STAT_KILLS] = SQL_FetchInt(hndl, 3);
  75. stats[STAT_DEATHS] = SQL_FetchInt(hndl, 4);
  76. stats[STAT_SHOTS] = SQL_FetchInt(hndl, 5);
  77. stats[STAT_HITS] = SQL_FetchInt(hndl, 6);
  78. stats[STAT_TIME_PLAYED] = SQL_FetchInt(hndl, 7);
  79. stats[STAT_HEADSHOTS] = SQL_FetchInt(hndl, 8);
  80.  
  81. CallStatsCallback(name, steamid, stats, callback, args, index);
  82. }
  83. }
  84. CallStatsCallback("", "", stats, callback, args, 0);
  85. }
  86.  
  87. public int Native_Stats_GetPlayerById(Handle plugin, int numParams)
  88. {
  89. int client = GetNativeCell(1);
  90. StatsCallback callback = GetNativeCell(2);
  91. any data = GetNativeCell(3);
  92. int stats[MAX_STATS];
  93.  
  94. stats[STAT_KILLS] = g_kills[client];
  95. stats[STAT_DEATHS] = g_deaths[client];
  96. stats[STAT_HITS] = g_hits[client];
  97. stats[STAT_SHOTS] = g_shots[client];
  98. stats[STAT_SCORE] = g_score[client];
  99. stats[STAT_TIME_PLAYED] = g_time_played[client] +
  100. (GetTime() -
  101. g_time_joined[client]);
  102. stats[STAT_HEADSHOTS] = g_headshots[client];
  103.  
  104. CallStatsCallback(g_name[client], g_steamid[client], stats, callback, data, 0);
  105. }
  106.  
  107. public int Native_Stats_GetPlayerBySteamId(Handle plugin, int numParams)
  108. {
  109. char steamid[MAX_STEAMID_LENGTH];
  110. GetNativeString(1, steamid, sizeof(steamid));
  111. StatsCallback callback = GetNativeCell(2);
  112. any data = GetNativeCell(3);
  113.  
  114. GetPlayerBySteamId(steamid, callback, data);
  115. }
  116.  
  117. public void SQL_LoadPlayerCallback(Handle owner, Handle hndl, const char[] error, any data)
  118. {
  119. Handle pack = data;
  120. ResetPack(pack);
  121. StatsCallback callback = view_as<StatsCallback>(ReadPackCell(pack));
  122. any args = ReadPackCell(pack);
  123. CloseHandle(pack);
  124.  
  125. if(hndl == INVALID_HANDLE)
  126. {
  127. LogError("[SoD-Stats] SQL_LoadPlayerCallback failure: %s", error);
  128. return;
  129. }
  130.  
  131. int stats[MAX_STATS];
  132. char name[MAX_NAME_LENGTH];
  133. char steamid[MAX_STEAMID_LENGTH];
  134. int callback_error = ERROR_PLAYER_NOT_FOUND;
  135.  
  136. if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl))
  137. {
  138. SQL_FetchString(hndl, 0, name, sizeof(name));
  139. SQL_FetchString(hndl, 1, steamid, sizeof(steamid));
  140. stats[STAT_SCORE] = SQL_FetchInt(hndl, 2);
  141. stats[STAT_KILLS] = SQL_FetchInt(hndl, 3);
  142. stats[STAT_DEATHS] = SQL_FetchInt(hndl, 4);
  143. stats[STAT_SHOTS] = SQL_FetchInt(hndl, 5);
  144. stats[STAT_HITS] = SQL_FetchInt(hndl, 6);
  145. stats[STAT_TIME_PLAYED] = SQL_FetchInt(hndl, 7);
  146. stats[STAT_HEADSHOTS] = SQL_FetchInt(hndl, 8);
  147. callback_error = 0;
  148. }
  149.  
  150. CallStatsCallback(name, steamid, stats, callback, args, callback_error);
  151. }
  152.  
  153. public int Native_Stats_GetPlayerRank(Handle plugin, int numParams)
  154. {
  155. int client = GetNativeCell(1);
  156. StatsCallback callback = GetNativeCell(2);
  157. any data = GetNativeCell(3);
  158.  
  159. Handle pack = CreateDataPack();
  160.  
  161. WritePackFunction(pack, callback);
  162. WritePackCell(pack, data);
  163.  
  164. char query[192];
  165.  
  166. Format(query, sizeof(query), g_sql_rank, g_score[client]);
  167. SQL_TQuery(stats_db, SQL_RankCallback, query, pack);
  168. }
  169.  
  170. public void SQL_RankCallback(Handle owner, Handle hndl, const char[] error, any data)
  171. {
  172. Handle pack = data;
  173. ResetPack(pack);
  174. StatsCallback callback = view_as<StatsCallback>(ReadPackCell(pack));
  175. any args = ReadPackCell(pack);
  176. CloseHandle(pack);
  177.  
  178. if(hndl == INVALID_HANDLE)
  179. {
  180. LogError("[SoD-Stats] SQL_LoadPlayerCallback failure: %s", error);
  181. CallRankCallback(0, 0, callback, args, ERROR_PLAYER_NOT_FOUND);
  182. return;
  183. }
  184.  
  185. int rank = SQL_GetRowCount(hndl);
  186. int current_score = 0;
  187. int next_score = 0;
  188.  
  189. if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl))
  190. {
  191. current_score = SQL_FetchInt(hndl, 0);
  192. if(SQL_FetchRow(hndl))
  193. {
  194. next_score = SQL_FetchInt(hndl, 0);
  195. CallRankCallback(rank, next_score - current_score, callback, args, 0);
  196. return;
  197. }
  198. }
  199.  
  200. CallRankCallback(rank, 0, callback, args, 0);
  201. }
  202.  
  203. public int Native_Stats_GetPlayerCount(Handle plugin, int numParams)
  204. {
  205. return g_player_count;
  206. }
  207.  
  208. public int Native_Stats_Reset(Handle plugin, int numParams)
  209. {
  210. ResetStats();
  211. }
  212.  
  213. void ResetStats()
  214. {
  215. if(stats_db == INVALID_HANDLE)
  216. {
  217. LogError("[SoD-Stats] Error: Invalid database handle");
  218. return;
  219. }
  220.  
  221. SQL_LockDatabase(stats_db);
  222.  
  223. SQL_FastQuery(stats_db, g_sql_droptable_players);
  224. switch(g_dbtype)
  225. {
  226. case DBTYPE_MYSQL:
  227. SQL_FastQuery(stats_db, g_mysql_createtable_players);
  228. case DBTYPE_SQLITE:
  229. SQL_FastQuery(stats_db, g_sqlite_createtable_players);
  230. }
  231.  
  232. g_player_count = 0;
  233.  
  234. SQL_UnlockDatabase(stats_db);
  235.  
  236. int max_clients = MAXPLAYERS+1;
  237.  
  238. for(int i = 1; i < max_clients; i++)
  239. {
  240. if(g_initialized[i])
  241. {
  242. g_kills[i] = 0;
  243. g_deaths[i] = 0;
  244. g_shots[i] = 0;
  245. g_hits[i] = 0;
  246. g_score[i] = 0;
  247. g_time_played[i] = 0;
  248. g_headshots[i] = 0;
  249.  
  250. g_session_score[i] = 0;
  251. g_session_kills[i] = 0;
  252. g_session_deaths[i] = 0;
  253. g_session_hits[i] = 0;
  254. g_session_shots[i] = 0;
  255. g_session_headshots[i] = 0;
  256.  
  257. g_time_joined[i] = GetTime();
  258.  
  259. CreatePlayer(i, g_steamid[i]);
  260. }
  261. }
  262. }
  263.  
  264. void CallStatsCallback(const char[] name, const char[] steamid, int[] stats, StatsCallback callback, any data, int retval)
  265. {
  266. Call_StartFunction(INVALID_HANDLE, callback);
  267. Call_PushString(name);
  268. Call_PushString(steamid);
  269. Call_PushArray(stats, MAX_STATS);
  270. Call_PushCell(data);
  271. Call_PushCell(retval);
  272. Call_Finish();
  273. }
  274.  
  275. void CallRankCallback(int rank, int delta, StatsCallback callback, any data, int error)
  276. {
  277. Call_StartFunction(INVALID_HANDLE, callback);
  278. Call_PushCell(rank);
  279. Call_PushCell(delta);
  280. Call_PushCell(data);
  281. Call_PushCell(error);
  282. Call_Finish();
  283. }
  284.  
  285. void GetPlayerBySteamId(const char[] steamid, StatsCallback callback, any data)
  286. {
  287. char query[192];
  288.  
  289. Handle pack = CreateDataPack();
  290.  
  291. WritePackFunction(pack, callback);
  292. WritePackCell(pack, data);
  293.  
  294. Format(query, sizeof(query), g_sql_loadplayer, steamid);
  295. SQL_TQuery(stats_db, SQL_LoadPlayerCallback, query, pack);
  296. }
  297.  
  298. public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
  299. {
  300. CreateNative("Stats_GetPlayerCount", Native_Stats_GetPlayerCount);
  301. CreateNative("Stats_GetPlayerSession", Native_Stats_GetPlayerSession);
  302. CreateNative("Stats_GetPlayersByRank", Native_Stats_GetPlayersByRank);
  303. CreateNative("Stats_GetPlayerById", Native_Stats_GetPlayerById);
  304. CreateNative("Stats_GetPlayerBySteamId", Native_Stats_GetPlayerBySteamId);
  305. CreateNative("Stats_GetPlayerRank", Native_Stats_GetPlayerRank);
  306. CreateNative("Stats_Reset", Native_Stats_Reset);
  307.  
  308. return APLRes_Success;
  309. }
Add Comment
Please, Sign In to add comment