1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 | #include <amxmodx> #include <hamsandwich> #include <zombieplague> #include <dhudmessage> #define zp_give_user_ammo_packs(%0,%1) zp_set_user_ammo_packs(%0, zp_get_user_ammo_packs(%0) + %1) #define MAX_CLIENTS 32 #define EACH_INFECT 5 // За каждые 5 заражений будет вознаграждение #define EACH_KILL 7 // За каждые 7 убийств будет вознаграждение #define EACH_DAMAGE 5000 // За каждые 5000 урона будет вознаграждение #define INFECT_BONUS 1 // Сколько давать аммо за каждые EACH_INFECT заражений #define KILL_BONUS 1 // Сколько давать аммо за каждые EACH_KILL заражений #define DAMAGE_BONUS 1 // Сколько давать аммо за каждые EACH_DAMAGE заражений enum _ : e_TotalData { INFECTIONS = 0 , KILLED, DAMAGE }; enum _ : e_DataType { TYPE = 0 , BONUS, LEADER }; new g_iMaxPlayers; new g_iData[e_DataType][e_TotalData]; new iUserData[e_TotalData][MAX_CLIENTS + 1 ]; public plugin_init () { register_plugin ( "[ZP] Addon: Round Leaders" , "1.1" , "xUnicorn" ); register_dictionary ( "zp_round_leaders.txt" ) g_iMaxPlayers = get_maxplayers (); RegisterHam (Ham_Killed, "player" , "CBasePlayer__Killed_Pre" , false ); RegisterHam (Ham_TakeDamage, "player" , "CBasePlayer__TakeDamage_Pre" , false ); } public zp_round_ended() { Func_GetLeaders(); } public Func_GetLeaders() { for ( new iPlayer = 1 ; iPlayer <= g_iMaxPlayers; iPlayer++) { if (! is_user_connected (iPlayer)) continue ; if (iUserData[INFECTIONS][iPlayer] > g_iData[TYPE][INFECTIONS]) { g_iData[TYPE][INFECTIONS] = iUserData[INFECTIONS][iPlayer]; g_iData[LEADER][INFECTIONS] = iPlayer; } if (iUserData[KILLED][iPlayer] > g_iData[TYPE][KILLED]) { g_iData[TYPE][KILLED] = iUserData[KILLED][iPlayer]; g_iData[LEADER][KILLED] = iPlayer; } if (iUserData[DAMAGE][iPlayer] > g_iData[TYPE][DAMAGE]) { g_iData[TYPE][DAMAGE] = iUserData[DAMAGE][iPlayer]; g_iData[LEADER][DAMAGE] = iPlayer; } iUserData[INFECTIONS][iPlayer] = 0 ; iUserData[KILLED][iPlayer] = 0 ; iUserData[DAMAGE][iPlayer] = 0 ; } static szName[ 32 ]; static szInfector[ 256 ], szKiller[ 256 ], szDamager[ 256 ]; if (g_iData[LEADER][INFECTIONS]) { get_user_name (g_iData[LEADER][INFECTIONS], szName, charsmax(szName)); if (g_iData[TYPE][INFECTIONS] >= EACH_INFECT) { g_iData[BONUS][INFECTIONS] = INFECT_BONUS * (g_iData[TYPE][INFECTIONS] / EACH_INFECT); zp_give_user_ammo_packs(g_iData[LEADER][INFECTIONS], g_iData[BONUS][INFECTIONS]); formatex (szInfector, charsmax(szInfector), "%L (+%i)^n" , LANG_PLAYER, "ML_TOP_INFECTOR" , szName, g_iData[TYPE][INFECTIONS], g_iData[BONUS][INFECTIONS]); } else formatex (szInfector, charsmax(szInfector), "%L^n" , LANG_PLAYER, "ML_TOP_INFECTOR" , szName, g_iData[TYPE][INFECTIONS]); } if (g_iData[LEADER][KILLED]) { get_user_name (g_iData[LEADER][KILLED], szName, charsmax(szName)); if (g_iData[TYPE][KILLED] >= EACH_KILL) { g_iData[BONUS][KILLED] = KILL_BONUS * (g_iData[TYPE][KILLED] / EACH_KILL); zp_give_user_ammo_packs(g_iData[LEADER][KILLED], g_iData[BONUS][KILLED]); formatex (szKiller, charsmax(szKiller), "%L (+%i)^n" , LANG_PLAYER, "ML_TOP_KILLER" , szName, g_iData[TYPE][KILLED], g_iData[BONUS][KILLED]); } else formatex (szKiller, charsmax(szKiller), "%L^n" , LANG_PLAYER, "ML_TOP_KILLER" , szName, g_iData[TYPE][KILLED]); } if (g_iData[LEADER][DAMAGE]) { get_user_name (g_iData[LEADER][DAMAGE], szName, charsmax(szName)); if (g_iData[TYPE][DAMAGE] >= EACH_DAMAGE) { g_iData[BONUS][DAMAGE] = DAMAGE_BONUS * (g_iData[TYPE][DAMAGE] / EACH_DAMAGE); zp_give_user_ammo_packs(g_iData[LEADER][DAMAGE], g_iData[BONUS][DAMAGE]); formatex (szDamager, charsmax(szDamager), "%L (+%i)" , LANG_PLAYER, "ML_TOP_DAMAGER" , szName, g_iData[TYPE][DAMAGE], g_iData[BONUS][DAMAGE]); } else formatex (szDamager, charsmax(szDamager), "%L" , LANG_PLAYER, "ML_TOP_DAMAGER" , szName, g_iData[TYPE][DAMAGE]); } if (g_iData[LEADER][INFECTIONS] || g_iData[LEADER][KILLED] || g_iData[LEADER][DAMAGE]) { set_dhudmessage( 128 , 128 , 128 , 0.65 , 0.25 , 1 , 5.0 , 5.0 , 0.035 , 0.05 ); show_dhudmessage( 0 , "%L^n^n%s%s%s" , LANG_PLAYER, "ML_TOP_PLAYERS" , szInfector, szKiller, szDamager); } g_iData[TYPE] = { 0 , 0 , 0 }; g_iData[BONUS] = { 0 , 0 , 0 }; g_iData[LEADER] = { 0 , 0 , 0 }; } public client_putinserver (iPlayer) { iUserData[INFECTIONS][iPlayer] = 0 ; iUserData[KILLED][iPlayer] = 0 ; iUserData[DAMAGE][iPlayer] = 0 ; } public zp_user_infected_post(iPlayer, iInfector) { if (! is_user_connected (iInfector)) return ; iUserData[INFECTIONS][iInfector]++; } public CBasePlayer__Killed_Pre(iVictim, iAttacker, iGib) { if (! is_user_connected (iAttacker) || zp_get_user_zombie(iAttacker) || iVictim == iAttacker) return HAM_IGNORED; if (zp_get_user_zombie(iVictim) && !zp_get_user_zombie(iAttacker)) { iUserData[KILLED][iAttacker]++; } return HAM_IGNORED; } public CBasePlayer__TakeDamage_Pre(iVictim, iInflictor, iAttacker, Float : flDamage) { if (! is_user_connected (iAttacker) || zp_get_user_zombie(iAttacker) || iVictim == iAttacker) return HAM_IGNORED; if (zp_get_user_zombie(iVictim) && !zp_get_user_zombie(iAttacker)) { iUserData[DAMAGE][iAttacker] += floatround (flDamage); } return HAM_IGNORED; } |