/* Damage Ranking v1.0 by d!nk */
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#define MAXPLAYERS 32
public plugin_init() {
register_plugin("Damage Ranking", "1.0", "d!nk")
set_task(2.0,"the_main", 0, _, _, "b")
register_event("Damage", "damage_event", "b", "2!0", "3=0", "4!0")
register_event("DeathMsg","death_event","a" )
register_cvar("amx_info", "1")
}
new damage_done[MAXPLAYERS + 1] = 0
new damage_received[MAXPLAYERS + 1] = 0
new damage_ranking_values[MAXPLAYERS + 1] = 0
new damage_ranking_ids[MAXPLAYERS + 1] = 0
new headshots[MAXPLAYERS + 1] = 0
public client_putinserver(id) {
damage_done[id] = 0
damage_received[id] = 0
headshots[id] = 0
}
public client_disconnect(id) {
damage_done[id] = 0
damage_received[id] = 0
headshots[id] = 0
}
public damage_event(id)
{
new team[33]
new attacker_id = get_user_attacker(id)
new attacker_team[33]
new damage = read_data(2)
get_user_team(attacker_id, attacker_team, 1)
get_user_team(id, team, 1)
if (equal(team, attacker_team)) {
damage_done[attacker_id] -= damage
}
else {
damage_done[attacker_id] += damage
}
damage_received[id] += damage
}
public death_event(id)
{
new killer_id = read_data(1)
if ( ( read_data(3) == 1 ) && ( read_data(5) == 0 ) ) headshots[killer_id]++
}
sort_get_largest(ia_values[], i_from, i_to) {
new i
new li = i_from
new lv = ia_values[li]
for(i = i_from; i <= i_to; i++) {
if (ia_values[i] > lv) {
li = i
lv = ia_values[li]
}
}
return li
}
sort_swap(ia_values[], i_id1, i_id2) {
new v = ia_values[i_id1]
ia_values[i_id1] = ia_values[i_id2]
ia_values[i_id2] = v
}
sort_array(ia_values[], ia_ids[], i_count) {
new i
for(i = 0; i < i_count; i++) {
new largest_id = sort_get_largest(ia_values, i, i_count - 1)
sort_swap(ia_values, i, largest_id)
sort_swap(ia_ids, i, largest_id)
}
}
public the_main() {
if(!get_cvar_num("amx_info")) {
return PLUGIN_HANDLED
}
new players[MAXPLAYERS]
new players_count
new i
new message[2048]
new username[33]
new team[33]
new id
new team_players_count = 0
new indent[3]
copy(message, 15, "Damage Ranking")
get_players(players, players_count)
for(i = 0; i <= players_count; i++) {
id = players[i]
if(is_user_connected(id)) {
get_user_team(id, team, 1)
if(equal(team, "T") || equal(team, "C")) {
damage_ranking_ids[team_players_count] = id
damage_ranking_values[team_players_count++] = damage_done[id]
}
}
}
sort_array(damage_ranking_values, damage_ranking_ids, team_players_count)
for(i = 0; i < team_players_count; i++) {
id = damage_ranking_ids[i]
if(is_user_connected(id)) {
get_user_name(id, username, 32)
get_user_team(id, team, 1)
strcat(message, "^n%s%i. %s %s (d:%i hs:%i)", 2048)
if (i < 9) { copy(indent, 1, " "); } else { copy(indent, 0, " "); }
format(message, 2048, message, indent, i + 1, team, username, damage_done[id], headshots[id])
}
}
for(i = 0; i <= players_count; i++)
{
id = players[i]
if(is_user_connected(id)) {
set_hudmessage (0, 100, 200, 0.01, 0.2, 0, 6.0, 2.0, 0.1, 0.5, 4 )
show_hudmessage(id, message)
}
}
return PLUGIN_CONTINUE
}