Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.68 KB | None | 0 0
  1. #define GAMEMESTATS // Comment this line if you are not going to use GameMe
  2.  
  3. #if defined GAMEMESTATS
  4. #include <amxmodx>
  5. #include <amxmisc>
  6. #include <nvault>
  7. #include <gameme>
  8. #define QUERY_TYPE_ONCLIENTPUTINSERVER 1
  9. new MyRank[MAX_PLAYERS + 1]
  10. #else
  11. #include <amxmodx>
  12. #include <amxmisc>
  13. #include <nvault>
  14. #include <csstats>
  15. #endif
  16.  
  17. #if AMXX_VERSION_NUM < 190
  18. #assert "This plugin requires AMXX 1.9 or above"
  19. #endif
  20.  
  21. new VarRank, VarFlags[MAX_NAME_LENGTH], VarRestrict[MAX_NAME_LENGTH], Float:VarUpdateTime, bool:isTop[MAX_PLAYERS + 1], VarDaysToReset, VarReset, VarSkipAdmins
  22.  
  23. public plugin_init()
  24. {
  25. register_plugin( "Top Flags", "3.0", "iceeedR" )
  26. register_cvar("TopFlags", "3.0", FCVAR_SERVER | FCVAR_SPONLY)
  27. register_dictionary("TopFlags.txt")
  28.  
  29. bind_pcvar_num(create_cvar("tf_ranks", "10", .description = "Range of players that will receive the flags^nbased on rank. (Top 1, 2, 5, 10, 15 etc"), VarRank)
  30. bind_pcvar_string(create_cvar("tf_flags", "k", .description = "The flags that TOP players will receive."), VarFlags, charsmax(VarFlags ))
  31. bind_pcvar_string(create_cvar("tf_restricted", "a", .description = "Players with any of the flags set there will be ignored."), VarRestrict, charsmax(VarRestrict))
  32. bind_pcvar_float(create_cvar("tf_update_rank_time", "120", .description = "Time interval to update ranks", .has_min = true, .min_val = 40.0), VarUpdateTime)
  33.  
  34. #if defined GAMEMESTATS
  35. bind_pcvar_num(create_cvar("tf_rank_reset", "1", .description = "A simple way to choose if you wanna reset^nyour rank or not", .has_min = true, .min_val = 0.0, .has_max = true, .max_val = 1.0), VarReset)
  36. bind_pcvar_num(create_cvar("tf_days_toreset", "30", .description = "Set an interval in days for resetting cs stats.", .has_min = true, .min_val = 1.0), VarDaysToReset)
  37. bind_pcvar_num(create_cvar("tf_skipadmins", "1", .description = "SkipAdmins to count topX ?", .has_min = true, .min_val = 0.0, .has_max = true, .max_val = 1.0), VarSkipAdmins)
  38. #endif
  39.  
  40. set_task_ex(VarUpdateTime, "UpdateRanks", .flags = SetTask_Repeat)
  41.  
  42. AutoExecConfig(.autoCreate = true, .name = "TopFlags")
  43. }
  44.  
  45. #if defined GAMEMESTATS
  46.  
  47. public UpdateRanks()
  48. {
  49. new iPlayers[MAX_PLAYERS], iNum, id
  50. get_players_ex(iPlayers, iNum, GetPlayers_ExcludeBots | GetPlayers_ExcludeHLTV)
  51. for(new i; i < iNum; i++)
  52. {
  53. id = iPlayers[i]
  54.  
  55. if(has_flag(id, VarRestrict))
  56. continue
  57.  
  58. QueryGameMEStats("playerinfo", id, "QuerygameMEStatsCallback", QUERY_TYPE_ONCLIENTPUTINSERVER)
  59.  
  60. if(MyRank[id] && MyRank[id] > 0 && MyRank[id] <= VarRank)
  61. {
  62. if(!isTop[id])
  63. {
  64. client_print_color(0, print_team_default,"%L", id, "ONTOP", id, VarRank)
  65. remove_user_flags(id, ADMIN_USER)
  66. set_user_flags(id, read_flags(VarFlags))
  67. isTop[id] = true
  68. return PLUGIN_HANDLED
  69. }
  70. }
  71. else
  72. {
  73. if(isTop[id])
  74. {
  75. client_print_color(0, print_team_default,"%L", id, "TOPOUT", id, VarRank)
  76. remove_user_flags(id, read_flags(VarFlags))
  77. set_user_flags(id, ADMIN_USER)
  78. isTop[id] = false
  79. return PLUGIN_HANDLED
  80. }
  81. }
  82. }
  83. return PLUGIN_HANDLED
  84. }
  85.  
  86. public QuerygameMEStatsCallback(command, payload, client, &DataPack:datapack)
  87. {
  88. if ((command == RAW_MESSAGE_CALLBACK_PLAYER) && (client > 0))
  89. {
  90. ResetPack(datapack)
  91. new iRank = ReadPackCell(datapack)
  92. SetPackPosition(datapack, 18)
  93.  
  94. DestroyDataPack(datapack)
  95.  
  96. if (payload == QUERY_TYPE_ONCLIENTPUTINSERVER)
  97. {
  98. MyRank[client] = iRank
  99. }
  100. }
  101. return PLUGIN_HANDLED;
  102. }
  103.  
  104. #else
  105.  
  106. public plugin_cfg()
  107. {
  108. if(VarReset)
  109. CheckDate()
  110. }
  111.  
  112. public CheckDate()
  113. {
  114. new iVault , iTimeStamp , iRecordExists
  115.  
  116. iVault = nvault_open( "TopFlags" )
  117.  
  118. iRecordExists = nvault_lookup( iVault , "StatsReset" , "" , 0 , iTimeStamp )
  119.  
  120. if ( !iRecordExists || ( iRecordExists && ( ( get_systime() - iTimeStamp ) >= ( VarDaysToReset * 86400 ) ) ) )
  121. {
  122. server_cmd( "amx_cvar csstats_reset 1" )
  123. nvault_set( iVault , "StatsReset" , "" )
  124. }
  125.  
  126. nvault_close( iVault )
  127. }
  128.  
  129. public getAdminCount()
  130. {
  131. new AdminCount = 0
  132. new izStats[STATSX_MAX_STATS], izBody[MAX_BODYHITS], iRankPos
  133.  
  134. new iPlayers[MAX_PLAYERS], iNum
  135. get_players_ex(iPlayers, iNum, GetPlayers_ExcludeBots | GetPlayers_ExcludeHLTV)
  136.  
  137. for(new i; i < iNum; i++)
  138. {
  139. iRankPos = get_user_stats(iPlayers[i], izStats, izBody)
  140.  
  141. if(has_flag(iPlayers[i], VarRestrict) && iRankPos && iRankPos <= VarRank)
  142. {
  143. AdminCount ++
  144. }
  145. }
  146.  
  147. return AdminCount
  148. }
  149.  
  150. public UpdateRanks()
  151. {
  152. new izStats[STATSX_MAX_STATS], izBody[MAX_BODYHITS], iPlayers[MAX_PLAYERS], iNum, id, iRankPos
  153.  
  154. new MaxCount = VarRank + (VarSkipAdmins == 1 ? getAdminCount() : 0)
  155.  
  156. get_players_ex(iPlayers, iNum, GetPlayers_ExcludeBots | GetPlayers_ExcludeHLTV)
  157. for(new i; i < iNum; i++)
  158. {
  159. id = iPlayers[i]
  160.  
  161. iRankPos = get_user_stats(id, izStats, izBody)
  162.  
  163. if(has_flag(id, VarRestrict))
  164. continue
  165.  
  166. if(iRankPos && iRankPos <= MaxCount)
  167. {
  168. if(!isTop[id])
  169. {
  170. client_print_color(0, print_team_default,"%L", id, "ONTOP", id, VarRank)
  171. remove_user_flags(id, ADMIN_USER)
  172. set_user_flags(id, read_flags(VarFlags))
  173. isTop[id] = true
  174. return PLUGIN_HANDLED
  175. }
  176. }
  177. else
  178. {
  179. if(isTop[id])
  180. {
  181. client_print_color(0, print_team_default,"%L", id, "TOPOUT", id, VarRank)
  182. remove_user_flags(id, read_flags(VarFlags))
  183. set_user_flags(id, ADMIN_USER)
  184. isTop[id] = false
  185. return PLUGIN_HANDLED
  186. }
  187. }
  188. }
  189. return PLUGIN_HANDLED
  190. }
  191.  
  192. #endif
  193.  
  194. public client_putinserver(id)
  195. isTop[id] = false
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement