Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <amxmodx>
- #include <fakemeta>
- #include <hamsandwich>
- #include <nvault>
- #include <zombieplague>
- new const RANKS_ZOMBIE[][]=
- {
- "Normal Infected", // 0
- "Experimental Zombie", // 1
- "Mutant", // 2
- "Advanced Mutant", // 3
- "Staff Sergeant", // 4
- "Special Infected", // 5
- "Soldier Infected", // 6
- "Umbrella Infected", // 7
- "Majini", // 8
- "Chainsaw Majini", // 9
- "Giant Majini", // 10
- "Gatling Gun Majini", // 11
- "Executioner", // 12
- "Regenerator", // 13
- "Bio-Organic Zombie", // 14
- "Verdugo", // 15
- "Thanatos", // 16
- "Tyrant", // 17
- "Nemesis" // 18
- }
- new const EXP_ZOMBIE[] =
- {
- 0, // 0
- 50, // 1
- 100, // 2
- 200, // 3
- 400, // 4
- 800, // 5
- 1600, // 6
- 3200, // 7
- 6400, // 8
- 12800, // 9
- 25600, // 10
- 51200, // 11
- 102400, // 12
- 204800, // 13
- 409600, // 14
- 819200, // 15
- 1638400, // 16
- 3276800, // 17
- 6553600 // 18
- }
- #define ADMIN_FLAG ADMIN_BAN
- new g_bitConnectedPlayers, g_bitAlivePlayers, g_bitAuthorizedPlayers
- #define MarkUserConnected(%0) g_bitConnectedPlayers |= (1 << (%0 & 31))
- #define ClearUserConnected(%0) g_bitConnectedPlayers &= ~(1 << (%0 & 31))
- #define IsUserConnected(%0) g_bitConnectedPlayers & (1 << (%0 & 31))
- #define MarkUserAlive(%0) g_bitAlivePlayers |= (1 << (%0 & 31))
- #define ClearUserAlive(%0) g_bitAlivePlayers &= ~(1 << (%0 & 31))
- #define IsUserAlive(%0) g_bitAlivePlayers & (1 << (%0 & 31))
- #define MarkUserAllow(%0) g_bitAuthorizedPlayers |= (1 << (%0 & 31))
- #define ClearUserAllow(%0) g_bitAuthorizedPlayers &= ~(1 << (%0 & 31))
- #define IsUserAllow(%0) g_bitAuthorizedPlayers & (1 << (%0 & 31))
- #define IsPlayer(%0) (1 <= %0 <= g_iMaxPlayers)
- new cvar_xp, cvar_hsxp, cvar_assistxp, cvar_divide
- new cached_xp, cached_hsxp, cached_assistxp, cached_divide
- new g_msgSayText, g_iMaxPlayers
- new iXP[33], iRank[33], iMaxHealth[33]
- new iDamage[33][33], iKilledHuman[33][33]
- new iIP[33][32]
- new g_iVault
- public plugin_init()
- {
- register_plugin("[ZP] Addon: Military Ranks", "1.0", "Snaker-Beatter+eXcalibur.007")
- cvar_xp = register_cvar("zp_rank_zombie_kill", "10")
- cvar_hsxp = register_cvar("zp_rank_zombie_hkill", "25")
- cvar_assistxp = register_cvar("zp_rank_zombie_assisth", "15")
- cvar_divide = register_cvar("zp_rank_zombie_assisthpdivide", "5")
- register_concmd("rankzombieclear", "clear_vault", ADMIN_FLAG, "Clears rank database")
- register_clcmd("say", "hook_say")
- register_clcmd("say_team", "hook_say_team")
- register_clcmd("say /showrank_zombie", "show_stats")
- register_clcmd("say_team /showrank_zombie", "show_stats")
- register_event("HLTV", "event_new_round", "a", "1=0", "2=0")
- register_event("Damage", "event_Damage", "be", "2!0", "3=0", "4!0")
- register_event("DeathMsg", "event_DeathMsg", "a", "1>0")
- RegisterHam(Ham_Spawn, "player", "Fw_SpawnPost", 1)
- g_msgSayText = get_user_msgid("SayText")
- g_iMaxPlayers = get_maxplayers()
- g_iVault = nvault_open("zp_vault_rank")
- if(g_iVault == INVALID_HANDLE)
- set_fail_state("Vault file error")
- register_message(g_msgSayText, "message_SayText")
- }
- public plugin_cfg()
- {
- cached_xp = get_pcvar_num(cvar_xp)
- cached_hsxp = get_pcvar_num(cvar_hsxp)
- cached_assistxp = get_pcvar_num(cvar_assistxp)
- cached_divide = get_pcvar_num(cvar_divide)
- }
- public plugin_end()
- {
- new iPlayers[32], iNum
- get_players(iPlayers, iNum)
- new iPlayer
- for(new i = 0; i < iNum; i++)
- {
- iPlayer = iPlayers[i]
- SaveData(iPlayer)
- }
- nvault_close(g_iVault)
- }
- public client_putinserver(id)
- {
- MarkUserConnected(id)
- get_user_ip(id, iIP[id], 31)
- LoadData(id)
- }
- public client_authorized(id)
- {
- MarkUserAllow(id)
- }
- public client_disconnect(id)
- {
- if(IsUserAllow(id))
- SaveData(id)
- iRank[id] = 0
- iXP[id] = 0
- ClearUserConnected(id)
- ClearUserAlive(id)
- ClearUserAllow(id)
- }
- public clear_vault()
- {
- if(g_iVault)
- nvault_prune(g_iVault, 0, get_systime())
- }
- public hook_say(id)
- {
- new szMessage[192], szName[32]
- read_args(szMessage, 191)
- remove_quotes(szMessage)
- get_user_name(id, szName, 31)
- if(equali(szMessage[0], " ") || equali(szMessage[0], "") || !is_valid_msg(szMessage))
- return PLUGIN_HANDLED_MAIN
- if(IsUserAlive(id))
- format(szMessage, 191, "^4[%s] ^3%s : ^1%s", RANKS_ZOMBIE[iRank[id]], szName, szMessage)
- else
- format(szMessage, 191, "^1*DEAD* ^4[%s] ^3%s : ^1%s", RANKS_ZOMBIE[iRank[id]], szName, szMessage)
- new iPlayers[32]
- new iPlayerCount, i, player
- get_players(iPlayers, iPlayerCount, "ch")
- for(i = 0; i < iPlayerCount; i++)
- {
- player = iPlayers[i]
- if(IsUserAlive(id) && IsUserAlive(player) || ~IsUserAlive(id) && ~IsUserAlive(player))
- {
- message_begin(MSG_ONE, g_msgSayText, {0, 0, 0}, player)
- write_byte(id)
- write_string(szMessage)
- message_end()
- }
- }
- return PLUGIN_CONTINUE
- }
- public hook_say_team(id)
- {
- new szMessage[192], szName[32]
- read_args(szMessage, 191)
- remove_quotes(szMessage)
- get_user_name(id, szName, 31)
- if(equali(szMessage[0], " ") || equali(szMessage[0], "") || !is_valid_msg(szMessage))
- return PLUGIN_HANDLED_MAIN
- if(IsUserAlive(id))
- format(szMessage, 191, "^4[%s] ^3%s : ^1%s", RANKS_ZOMBIE[iRank[id]], szName, szMessage)
- else
- format(szMessage, 191, "^1*DEAD* ^4[%s] ^3%s : ^1%s", RANKS_ZOMBIE[iRank[id]], szName, szMessage)
- new teamid = get_user_team(id)
- new iPlayers[32]
- new iPlayerCount, i, player
- get_players(iPlayers, iPlayerCount, "ch")
- for(i = 0; i < iPlayerCount; i++)
- {
- player = iPlayers[i]
- new teami = get_user_team(player)
- if(IsUserAlive(id) && IsUserAlive(player) && teamid == teami || ~IsUserAlive(id) && ~IsUserAlive(player) && teamid == teami)
- {
- message_begin(MSG_ONE, g_msgSayText, {0, 0, 0}, player)
- write_byte(id)
- write_string(szMessage)
- message_end()
- }
- }
- return PLUGIN_CONTINUE
- }
- public show_stats(id)
- {
- if(IsUserConnected(id))
- {
- client_print(id, print_chat, "[ZP] Rank: %s | EXP: %d | EXP needed to next rank: %d", RANKS_ZOMBIE[iRank[id]], iXP[id], (EXP_ZOMBIE[iRank[id] + 1] - iXP[id]))
- }
- }
- public event_new_round()
- {
- cached_xp = get_pcvar_num(cvar_xp)
- cached_hsxp = get_pcvar_num(cvar_hsxp)
- cached_assistxp = get_pcvar_num(cvar_assistxp)
- cached_divide = get_pcvar_num(cvar_divide)
- new iPlayers[32]
- new iPlayerCount, i, player
- get_players(iPlayers, iPlayerCount, "h")
- for(i = 0; i < iPlayerCount; i++)
- {
- player = iPlayers[i]
- iDamage[player][player] = 0
- }
- }
- public event_Damage(iVictim)
- {
- if(IsUserAlive(iVictim) && IsPlayer(iVictim) && !zp_get_user_zombie(iVictim))
- {
- static iAttacker; iAttacker = get_user_attacker(iVictim)
- if(IsPlayer(iAttacker))
- iDamage[iAttacker][iVictim] += read_data(2)
- }
- }
- public event_DeathMsg()
- {
- static iKiller; iKiller = read_data(1)
- static iVictim; iVictim = read_data(2)
- static iIsHeadshot; iIsHeadshot = read_data(3)
- ClearUserAlive(iVictim)
- if(iVictim == iKiller || !zp_get_user_zombie(iKiller) || zp_get_user_zombie(iVictim))
- return PLUGIN_CONTINUE
- if(~IsUserAllow(iKiller))
- {
- client_print(iKiller, print_chat, "[ZP] Your will not gain EXP until you are registered or logged in to save your rank")
- return PLUGIN_CONTINUE
- }
- if(iIsHeadshot)
- {
- iKilledHuman[iKiller][iVictim] = true
- iXP[iKiller] += cached_hsxp
- client_print(iKiller, print_chat, "[ZP] You've gained %d EXP for killing a human with a headshot", cached_hsxp)
- }
- else
- {
- iKilledHuman[iKiller][iVictim] = true
- iXP[iKiller] += cached_xp
- client_print(iKiller, print_chat, "[ZP] You've gained %d EXP for killing a human", cached_xp)
- }
- while((iXP[iKiller] >= EXP_ZOMBIE[iRank[iKiller] + 1] && iRank[iKiller] < 18))
- {
- iRank[iKiller] += 1
- client_print(iKiller, print_chat, "[ZP] Congratulations, your rank is now^x04 %s", RANKS_ZOMBIE[iRank[iKiller]])
- }
- new iPlayers[32]
- new iPlayerCount, i, id
- get_players(iPlayers, iPlayerCount, "h")
- for(i = 0; i < iPlayerCount; i++)
- {
- id = iPlayers[i]
- if(iDamage[id][iVictim] >= iMaxHealth[iVictim] / cached_divide)
- {
- if(!iKilledHuman[id][iVictim])
- {
- iXP[id] += cached_assistxp
- new szName[32]
- get_user_name(iKiller, szName, charsmax(szName))
- client_print(id, print_chat, "[ZP] You've gained %d EXP for assisting %s %s", cached_assistxp, RANKS_ZOMBIE[iRank[iKiller]], szName)
- while((iXP[id] >= EXP_ZOMBIE[iRank[id] + 1] && iRank[id] < 18))
- {
- iRank[id] += 1
- client_print(i, print_chat, "[ZP] Congratulations, your rank is now %s", RANKS_ZOMBIE[iRank[id]])
- }
- iDamage[id][iVictim] = 0
- }
- else
- {
- iKilledHuman[id][iVictim] = false
- }
- }
- }
- return PLUGIN_CONTINUE
- }
- public Fw_SpawnPost(id)
- {
- if(is_user_alive(id))
- MarkUserAlive(id)
- }
- public message_SayText(id)
- {
- return PLUGIN_HANDLED
- }
- public zp_user_infected_post(id)
- {
- iMaxHealth[id] = zp_get_zombie_maxhealth(id)
- }
- SaveData(id)
- {
- new szData[35]
- new szKey[40]
- formatex(szKey, 39, "%s", iIP[id])
- formatex(szData, 34, "%d %d", iRank[id], iXP[id])
- nvault_set(g_iVault, szKey, szData)
- }
- LoadData(id)
- {
- new szData[32]
- new szKey[40]
- formatex(szKey , 39, "%s" , iIP[id])
- if(nvault_get(g_iVault, szKey, szData, 31))
- {
- new iSpacePos = contain(szData, " ")
- if(iSpacePos > -1)
- {
- new szRank[2]
- new szXP[32]
- parse(szData , szRank, 1, szXP, 31)
- iRank[id] = str_to_num(szRank)
- iXP[id] = str_to_num(szXP)
- }
- }
- }
- bool:is_valid_msg(const szMessage[])
- {
- if(szMessage[0] == '@' || szMessage[0] == '/' || szMessage[0] == '!' || !strlen(szMessage))
- return false
- return true
- }
- stock Create_TE_PLAYERATTACHMENT(id, entity, vOffset, iSprite, life)
- {
- message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, id)
- write_byte(TE_PLAYERATTACHMENT)
- write_byte(entity)
- write_coord(vOffset)
- write_short(iSprite)
- write_short(life)
- message_end()
- }
Add Comment
Please, Sign In to add comment