HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /* Damage Ranking v1.0 by d!nk */
  2.  
  3. #include <amxmodx>
  4. #include <amxmisc>
  5. #include <cstrike>
  6.  
  7. #define MAXPLAYERS 32
  8.  
  9. public plugin_init() {
  10. register_plugin("Damage Ranking", "1.0", "d!nk")
  11. set_task(2.0,"the_main", 0, _, _, "b")
  12. register_event("Damage", "damage_event", "b", "2!0", "3=0", "4!0")
  13. register_event("DeathMsg","death_event","a" )
  14. register_cvar("amx_info", "1")
  15. }
  16.  
  17. new damage_done[MAXPLAYERS + 1] = 0
  18. new damage_received[MAXPLAYERS + 1] = 0
  19. new damage_ranking_values[MAXPLAYERS + 1] = 0
  20. new damage_ranking_ids[MAXPLAYERS + 1] = 0
  21. new headshots[MAXPLAYERS + 1] = 0
  22.  
  23. public client_putinserver(id) {
  24. damage_done[id] = 0
  25. damage_received[id] = 0
  26. headshots[id] = 0
  27. }
  28.  
  29. public client_disconnect(id) {
  30. damage_done[id] = 0
  31. damage_received[id] = 0
  32. headshots[id] = 0
  33. }
  34.  
  35. public damage_event(id)
  36. {
  37. new team[33]
  38. new attacker_id = get_user_attacker(id)
  39. new attacker_team[33]
  40. new damage = read_data(2)
  41.  
  42. get_user_team(attacker_id, attacker_team, 1)
  43. get_user_team(id, team, 1)
  44.  
  45. if (equal(team, attacker_team)) {
  46. damage_done[attacker_id] -= damage
  47. }
  48. else {
  49. damage_done[attacker_id] += damage
  50. }
  51.  
  52. damage_received[id] += damage
  53. }
  54.  
  55. public death_event(id)
  56. {
  57. new killer_id = read_data(1)
  58. if ( ( read_data(3) == 1 ) && ( read_data(5) == 0 ) ) headshots[killer_id]++
  59. }
  60.  
  61. sort_get_largest(ia_values[], i_from, i_to) {
  62.  
  63. new i
  64. new li = i_from
  65. new lv = ia_values[li]
  66.  
  67. for(i = i_from; i <= i_to; i++) {
  68. if (ia_values[i] > lv) {
  69. li = i
  70. lv = ia_values[li]
  71. }
  72. }
  73.  
  74. return li
  75. }
  76.  
  77. sort_swap(ia_values[], i_id1, i_id2) {
  78.  
  79. new v = ia_values[i_id1]
  80. ia_values[i_id1] = ia_values[i_id2]
  81. ia_values[i_id2] = v
  82. }
  83.  
  84. sort_array(ia_values[], ia_ids[], i_count) {
  85.  
  86. new i
  87.  
  88. for(i = 0; i < i_count; i++) {
  89.  
  90. new largest_id = sort_get_largest(ia_values, i, i_count - 1)
  91. sort_swap(ia_values, i, largest_id)
  92. sort_swap(ia_ids, i, largest_id)
  93. }
  94. }
  95.  
  96. public the_main() {
  97.  
  98. if(!get_cvar_num("amx_info")) {
  99. return PLUGIN_HANDLED
  100. }
  101.  
  102. new players[MAXPLAYERS]
  103. new players_count
  104. new i
  105. new message[2048]
  106. new username[33]
  107. new team[33]
  108. new id
  109. new team_players_count = 0
  110. new indent[3]
  111.  
  112. copy(message, 15, "Damage Ranking")
  113.  
  114. get_players(players, players_count)
  115.  
  116. for(i = 0; i <= players_count; i++) {
  117.  
  118. id = players[i]
  119.  
  120. if(is_user_connected(id)) {
  121. get_user_team(id, team, 1)
  122. if(equal(team, "T") || equal(team, "C")) {
  123. damage_ranking_ids[team_players_count] = id
  124. damage_ranking_values[team_players_count++] = damage_done[id]
  125. }
  126. }
  127. }
  128.  
  129. sort_array(damage_ranking_values, damage_ranking_ids, team_players_count)
  130.  
  131. for(i = 0; i < team_players_count; i++) {
  132.  
  133. id = damage_ranking_ids[i]
  134.  
  135. if(is_user_connected(id)) {
  136. get_user_name(id, username, 32)
  137. get_user_team(id, team, 1)
  138. strcat(message, "^n%s%i. %s %s (d:%i hs:%i)", 2048)
  139. if (i < 9) { copy(indent, 1, " "); } else { copy(indent, 0, " "); }
  140. format(message, 2048, message, indent, i + 1, team, username, damage_done[id], headshots[id])
  141. }
  142. }
  143.  
  144. for(i = 0; i <= players_count; i++)
  145. {
  146. id = players[i]
  147.  
  148. if(is_user_connected(id)) {
  149. set_hudmessage (0, 100, 200, 0.01, 0.2, 0, 6.0, 2.0, 0.1, 0.5, 4 )
  150. show_hudmessage(id, message)
  151. }
  152. }
  153. return PLUGIN_CONTINUE
  154. }