/* 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 /* reserved for future use */ 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 /* punish for friendly fire */ } 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]++ /* increase headshot counter */ } 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, 32, "Top 5 Graczy Mapy") get_players(players, players_count) /* copy damage table to damage ranking table, skip SPECTATORs */ for(i = 0; i <= players_count; i++) { id = players[i] if(is_user_connected(id)) { get_user_team(id, team, 1) if(equal(team, "C") || 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) /* format damage ranking */ 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 [Zadal %i DMG]", 2048) if (i < 9) { copy(indent, 1, " "); } else { copy(indent, 0, " "); } format(message, 2048, message, indent, i + 1, username, damage_done[id], headshots[id]) } } for(i = 0; i <= players_count; i++) { id = players[i] if(is_user_connected(id)) { set_hudmessage (255, 170, 42, 0.01, 0.2, 0, 6.0, 2.0, 0.1, 0.5, 4 ) show_hudmessage(id, message) } } return PLUGIN_CONTINUE }
Z góry dziękuję za pomoc i pozdrawiam.