More efficient way would be.
PHP Code:
/*
Name: Extra Items Pack
Link: http://forums.alliedmods.net/showthread.php?t=185739
Autor: [R]ak
*/
#include <amxmodx>
#include <zombieplague>
#include <hamsandwich>
#include <fakemeta>
#define PLUGIN "Some Items Extra"
#define VERSION "1.0"
#define AUTHOR "[R]ak"
#define MarkUserInAlive(%0) g_bitInAlive |= (1 << (%0 & 31))
#define ClearUserInAlive(%0) g_bitInAlive &= ~(1 << (%0 & 31))
#define IsUserInAlive(%0) g_bitInAlive & (1 << (%0 & 31))
#define MarkUserInConnected(%0) g_bitInConnected |= (1 << (%0 & 31))
#define ClearUserInConnected(%0) g_bitInConnected &= ~(1 << (%0 & 31))
#define IsUserInConnected(%0) g_bitInConnected & (1 << (%0 & 31))
#define MarkUserInDamage(%0) g_bitInDamagePlayers |= (1 << (%0 & 31))
#define ClearUserInDamage(%0) g_bitInDamagePlayers &= ~(1 << (%0 & 31))
#define IsUserInDamage(%0) g_bitInDamagePlayers & (1 << (%0 & 31))
new g_bitInDamagePlayers
,g_bitInConnected
,g_bitInAlive
,g_maxplayers
new item_vida
,item_damage
,item_teleport
,item_nemesis
,item_survivor
new g_tporigin[33][3]
const health_cost = 12 // Cost of Health item
const damage_cost = 25 // Cost of More Damage item
const teleport_cost = 24 // Cost of teleport item
const nemesis_cost = 60 // Cost of Buy Nemesis
const survivor_cost = 80 // Cost of Buy Survivor
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
item_vida = zp_register_extra_item("Health(H +150 | Z +1500)", health_cost, ZP_TEAM_ANY)
item_damage = zp_register_extra_item("Damage Selection(1 Round)", damage_cost, ZP_TEAM_HUMAN)
item_teleport = zp_register_extra_item("Teleport", teleport_cost, ZP_TEAM_HUMAN)
item_nemesis = zp_register_extra_item("Nemesis", nemesis_cost, ZP_TEAM_ANY)
item_survivor = zp_register_extra_item("Survivor", survivor_cost, ZP_TEAM_ANY)
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
g_maxplayers = get_maxplayers()
}
public fw_PlayerKilled(victim, attacker, shouldgib) {
if(IsUserInConnected(victim)) {
ClearUserInAlive(victim)
}
}
public fw_PlayerSpawn_Post(id) {
if(IsUserInConnected(id)) {
MarkUserInAlive(id)
}
if(IsUserInAlive(id)) {
pev(id, pev_origin, g_tporigin[id])
}
}
public fw_TakeDamage(victim, inflictor, attacker) {
if(IsUserInAlive(attacker) && IsUserInAlive(victim) && IsUserInDamage(attacker))
SetHamParamFloat(4, 175.0)
}
public event_round_start(){
for(new id = 1;id <= g_maxplayers;id++) {
ClearUserInConnected(id)
ClearUserInDamage(id)
}
}
public client_putinserver(id) {
MarkUserInConnected(id)
}
public client_disconnect(id) {
ClearUserInConnected(id)
}
public zp_extra_item_selected(id, itemid) {
if(itemid == item_vida)
set_pev(id, pev_health, float(pev(id, pev_health)+(zp_get_user_zombie(id) ? 1500 : 150)))
else if(itemid == item_damage)
MarkUserInDamage(id)
else if(itemid == item_teleport) {
new done, i, hull = (pev(id, pev_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN
while(!done) {
i = random_num(1, 32)
if(!g_tporigin[i][0] || !is_hull_vacant(Float:g_tporigin[i], hull))
continue;
set_pev(id, pev_origin, g_tporigin[i])
done++
}
}
else if(itemid == item_nemesis)
zp_make_user_nemesis(id)
else if(itemid == item_survivor)
zp_make_user_survivor(id)
}
stock is_hull_vacant(Float:origin[3], hull) {
engfunc(EngFunc_TraceHull, origin, origin, 0, hull, 0, 0)
if (!get_tr2(0, TR_StartSolid) && !get_tr2(0, TR_AllSolid) && get_tr2(0, TR_InOpen))
return true;
return false;
}