H.RED.ZONE |
05-24-2012 12:02 |
Re: [ZP] +Health | Damage Selection | Teleport | Nemesis | Survivor
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; }
|