Post by ShaunCraft15 on Jan 12, 2022 10:06:53 GMT
You Right i fix this and take this plugin from me
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#include <xs>
#include <fun>
#include <beams>
//If use zp50 keep this , if use zp43 remove it
#define USE_ZP50
#if defined USE_ZP50
#include <zp50_core>
#include <zp50_items>
#include <zp50_ammopacks>
#include <zp50_gamemodes>
#include <zp50_grenade_frost>
#include <zp50_colorchat>
#else
#include <zombieplague>
#define PREFIX "^x01[^x04ZP^x01] "
#endif
// The sizes of models
#define PALLET_MINS Float:{ -27.260000, -22.280001, -22.290001 }
#define PALLET_MAXS Float:{ 27.340000, 26.629999, 29.020000 }
// from fakemeta util by VEN
#define fm_find_ent_by_class(%1,%2) engfunc(EngFunc_FindEntityByString, %1, "classname", %2)
#define fm_remove_entity(%1) engfunc(EngFunc_RemoveEntity, %1)
// this is mine
#define fm_drop_to_floor(%1) engfunc(EngFunc_DropToFloor,%1)
#define fm_get_user_noclip(%1) (pev(%1, pev_movetype) == MOVETYPE_NOCLIP)
// cvars
new remove_nrnd
#if defined USE_ZP50
new g_GameModeInfectionID
new g_GameModeMultiID
#endif
const OFFSET_CSMENUCODE = 205;
new const SB_CLASSNAME[] = "FakeSandBag"
// num of pallets with bags
/* Models for pallets with bags .
Are available 2 models, will be set a random of them */
new g_models[][] =
{
"models/zombie_plague/lgk_sandbags.mdl"
}
new stuck[33]
new g_bolsas[33];
new g_MaxSB[33]
new cvar[3]
new const Float:size[][3] = {
{0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}, {0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0}, {-1.0, -1.0, 1.0}, {1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {-1.0, -1.0, -1.0},
{0.0, 0.0, 2.0}, {0.0, 0.0, -2.0}, {0.0, 2.0, 0.0}, {0.0, -2.0, 0.0}, {2.0, 0.0, 0.0}, {-2.0, 0.0, 0.0}, {-2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, -2.0, 2.0}, {2.0, 2.0, -2.0}, {-2.0, -2.0, 2.0}, {2.0, -2.0, -2.0}, {-2.0, 2.0, -2.0}, {-2.0, -2.0, -2.0},
{0.0, 0.0, 3.0}, {0.0, 0.0, -3.0}, {0.0, 3.0, 0.0}, {0.0, -3.0, 0.0}, {3.0, 0.0, 0.0}, {-3.0, 0.0, 0.0}, {-3.0, 3.0, 3.0}, {3.0, 3.0, 3.0}, {3.0, -3.0, 3.0}, {3.0, 3.0, -3.0}, {-3.0, -3.0, 3.0}, {3.0, -3.0, -3.0}, {-3.0, 3.0, -3.0}, {-3.0, -3.0, -3.0},
{0.0, 0.0, 4.0}, {0.0, 0.0, -4.0}, {0.0, 4.0, 0.0}, {0.0, -4.0, 0.0}, {4.0, 0.0, 0.0}, {-4.0, 0.0, 0.0}, {-4.0, 4.0, 4.0}, {4.0, 4.0, 4.0}, {4.0, -4.0, 4.0}, {4.0, 4.0, -4.0}, {-4.0, -4.0, 4.0}, {4.0, -4.0, -4.0}, {-4.0, 4.0, -4.0}, {-4.0, -4.0, -4.0},
{0.0, 0.0, 5.0}, {0.0, 0.0, -5.0}, {0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}, {5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {-5.0, 5.0, 5.0}, {5.0, 5.0, 5.0}, {5.0, -5.0, 5.0}, {5.0, 5.0, -5.0}, {-5.0, -5.0, 5.0}, {5.0, -5.0, -5.0}, {-5.0, 5.0, -5.0}, {-5.0, -5.0, -5.0}
}
const g_item_bolsas = 30
new g_itemid_bolsas
new ZPSTUCK
new Sb_owner[33]
new cvar_units, g_iMaxPlayers;
new iSandBagHealth[33]
new iTeamLimit, gAlreadyBought[33];
new g_pSB[33], g_pBeam[33], iSBCanBePlaced[33]
/*************************************************************
************************* AMXX PLUGIN *************************
**************************************************************/
public plugin_init()
{
/* Register the plugin */
register_plugin("[ZP] Extra: SandBags", "1.1", "LARP")
#if defined USE_ZP50
g_itemid_bolsas = zp_items_register("Sandbag", 30)
#else
g_itemid_bolsas = zp_register_extra_item("Sandbag", 30, ZP_TEAM_HUMAN)
#endif
/* Register the cvars */
ZPSTUCK = register_cvar("zp_pb_stuck","1")
remove_nrnd = register_cvar("zp_pb_remround","1");
cvar_units = register_cvar("zp_sandbag_units", "42")
g_iMaxPlayers = get_maxplayers();
/* Game Events */
register_event("HLTV","event_newround", "a","1=0", "2=0"); // it's called every on new round
/* This is for menuz: */
register_clcmd("say /sb","show_the_menu");
register_clcmd("say_team /sb","show_the_menu");
register_think(SB_CLASSNAME, "SB_Think");
// Register Commands
//register_clcmd("say /sb", "showMenuLasermine");
//register_clcmd("say_team /sb", "showMenuLasermine");
//RegisterHam(Ham_TakeDamage,"func_wall","fw_TakeDamage");
//cvar[0] = register_cvar("zp_autounstuck","1")
cvar[1] = register_cvar("zp_pb_stuckeffects","1")
cvar[2] = register_cvar("zp_pb_stuckwait","7")
RegisterHam(Ham_TakeDamage, "func_wall", "fw_TakeDamage_Pre")
RegisterHam(Ham_TakeDamage,"func_wall","fw_TakeDamage", 1);
RegisterHam(Ham_Killed, "func_wall", "fw_PlayerKilled", 1)
register_forward(FM_OnFreeEntPrivateData, "OnFreeEntPrivateData");
}
public plugin_cfg()
{
#if defined USE_ZP50
g_GameModeInfectionID = zp_gamemodes_get_id("Infection Mode")
g_GameModeMultiID = zp_gamemodes_get_id("Multiple Infection Mode")
#endif
}
public OnFreeEntPrivateData(this)
{
if (!FClassnameIs(this, SB_CLASSNAME))
return FMRES_IGNORED;
new pOwner = pev(this, pev_owner);
if ((1 <= pOwner <= g_iMaxPlayers))
{
if (g_pBeam[pOwner] && is_valid_ent(g_pBeam[pOwner]))
remove_entity(g_pBeam[pOwner]);
g_pBeam[pOwner] = 0;
g_pSB[pOwner] = 0;
}
return FMRES_IGNORED;
}
public fw_TakeDamage_Pre(this, pInflictor, pAttacker)
{
if (!FClassnameIs(this, "amxx_pallets"))
return HAM_IGNORED;
if (!is_user_alive(pAttacker))
return HAM_SUPERCEDE;
#if defined USE_ZP50
if (!zp_core_is_zombie(pAttacker))
return HAM_SUPERCEDE;
if(zp_grenade_frost_get(pAttacker))
return HAM_SUPERCEDE;
#else
if (!zp_get_user_zombie(pAttacker))
return HAM_SUPERCEDE;
static Float:_PlayersMaxSpeed
pev(pAttacker, pev_maxspeed, _PlayersMaxSpeed )
if( _PlayersMaxSpeed == 1.0 )
return HAM_SUPERCEDE;
#endif
return HAM_IGNORED;
}
//Here is what I am tryin to make just owner and zombie to be able to destroy sandbags
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
//Victim is not aa sandbag.
new sz_classname[32]
entity_get_string( victim , EV_SZ_classname , sz_classname, 31 )
new iHealth = pev( victim, pev_health )-floatround(damage);
if(iHealth<=0)
{
iHealth=1;
}
if( !equali(sz_classname,"amxx_pallets") )
return HAM_IGNORED;
/*else if( iHealth < 400 ) // more than 200 glow a bit blue
{
set_rendering ( victim, kRenderFxGlowShell, 242, 38, 206, kRenderNormal, 16)
}
else if( iHealth < 600 ) // More than 400 glow green
{
set_rendering ( victim, kRenderFxGlowShell, 255, 203, 26, kRenderNormal, 16)
}
if( iHealth <= 600 ) // less than 200 glow red
{
set_rendering ( victim, kRenderFxGlowShell, 255-255*iHealth/600, 255*iHealth/600, 0, kRenderNormal, 16)
}
else
if( iHealth <= 800 ) // More than 400 glow green
{
set_rendering ( victim, kRenderFxGlowShell, 0, 255-(255*iHealth-600)/200,255*(iHealth-600)/200, kRenderNormal, 16)
}*/
//Attacker is zombie
#if defined USE_ZP50
if( zp_core_is_zombie( attacker ))
return HAM_IGNORED;
if(zp_grenade_frost_get(attacker))
return HAM_SUPERCEDE;
#else
if( zp_get_user_zombie( attacker ))
return HAM_IGNORED;
static Float:_PlayersMaxSpeed
pev(attacker, pev_maxspeed, _PlayersMaxSpeed )
if( _PlayersMaxSpeed == 1.0 )
return HAM_SUPERCEDE;
#endif
//Block Damage
return HAM_SUPERCEDE;
}
public fw_PlayerKilled(victim, attacker, shouldgib)
{
new sz_classname[32], name[32], Float: health
entity_get_string(victim , EV_SZ_classname , sz_classname, charsmax(sz_classname))
get_user_name(attacker, name, charsmax(name))
health = entity_get_float(victim, EV_FL_health)
#if defined USE_ZP50
if(equal(sz_classname, "amxx_pallets") && is_valid_ent(victim) && zp_core_is_zombie(attacker) && health <= 0.0)
{
zp_ammopacks_set(attacker, zp_ammopacks_get(attacker) + 5)
zp_colored_print(0, "^03%s ^01Has Won^4 5 ^1AmmoPacks ^01by destroying sandbag!", name)
return HAM_IGNORED;
}
#else
if(equal(sz_classname, "amxx_pallets") && is_valid_ent(victim) && zp_get_user_zombie(attacker) && health <= 0.0)
{
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 5)
zp_color_print(0, "^03%s ^01Has Won^4 5 ^1AmmoPacks ^01by destroying sandbag!", name)
return HAM_IGNORED;
}
#endif
return HAM_IGNORED;
}
public plugin_precache()
{
for(new i;i < sizeof g_models;i++)
engfunc(EngFunc_PrecacheModel,g_models[i]);
}
public show_the_menu(id)
{
new szText[64]
formatex(szText, charsmax(szText), "\r2. \ySandbag Count: \r%d", g_bolsas[id])
new Menu = menu_create("\y[LgK | Sandbag]", "menu_command")
menu_additem(Menu, "Buy/Place \y[SandBag]");
menu_addtext(Menu, szText)
menu_setprop( Menu, MPROP_EXIT, MEXIT_ALL );
#if defined USE_ZP50
if(g_bolsas[id] > 0 && !zp_core_is_zombie(id))
{
menu_display(id, Menu, 0 );
CreateFakeSandBag(id)
}
#else
if(g_bolsas[id] > 0 && !zp_get_user_zombie(id))
{
menu_display(id, Menu, 0 );
CreateFakeSandBag(id)
}
#endif
}
public zp_user_infected_post(id){
if (g_pSB[id] && is_valid_ent(g_pSB[id]))
remove_entity(g_pSB[id]);
if (g_pBeam[id] && is_valid_ent(g_pBeam[id]))
remove_entity(g_pBeam[id])
new ent = -1
while((ent = find_ent_by_class(ent, "amxx_pallets")))
{
new pOwner = pev(ent, pev_iuser1);
if(id==pOwner)
{
set_pev(ent,pev_owner,0);
}
}
}
public free_sb(id)
{
g_bolsas[id] = 10
}
public menu_command(id, menu, item)
{
menu_destroy(menu);
if (!g_pSB[id] || !is_valid_ent(g_pSB[id]))
return PLUGIN_HANDLED;
switch(item)
{
case 0:
{
#if defined USE_ZP50
if ( !zp_core_is_zombie(id) )
{
if(iSBCanBePlaced[id] == 2)
{
show_the_menu(id);
client_printcolor(id, "!y[!gLgK!y] You Can't Place !gSandbag !yAt This !tLocation")
return PLUGIN_CONTINUE;
}
new money = g_bolsas[id]
if ( money < 1 )
{
client_printcolor(id, "!y[!gLgK!y] You do not have enough sandbags to place sandbags!")
return PLUGIN_CONTINUE
}
g_bolsas[id]-= 1
place_palletwbags(id);
zp_ammopacks_set(id, zp_ammopacks_get(id) + -15)
show_the_menu(id);
if(Sb_owner[id] > 0)
{
Sb_owner[id] -= 1
}
}
#else
if ( !zp_get_user_zombie(id) )
{
if(iSBCanBePlaced[id] == 2)
{
show_the_menu(id);
client_printcolor(id, "!y[!gLgK!y] You Can't Place !gSandbag !yAt This !tLocation")
return PLUGIN_CONTINUE;
}
new money = g_bolsas[id]
if ( money < 1 )
{
client_printcolor(id, "!y[!gLgK!y] You do not have enough sandbags to place sandbags!")
return PLUGIN_CONTINUE
}
g_bolsas[id]-= 1
place_palletwbags(id);
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + -15)
show_the_menu(id);
if(Sb_owner[id] > 0)
{
Sb_owner[id] -= 1
}
}
#endif
else client_printcolor(id, "!y[!gLgK!y] Zombies Can't Use This")
return PLUGIN_CONTINUE
}
case MENU_EXIT:
{
if (g_pSB[id] && is_valid_ent(g_pSB[id]))
remove_entity(g_pSB[id]);
if (g_pBeam[id] && is_valid_ent(g_pBeam[id]))
remove_entity(g_pBeam[id]);
}
}
return PLUGIN_HANDLED;
}
public CreateFakeSandBag(id)
{
if (g_pSB[id] && is_valid_ent(g_pSB[id]))
remove_entity(g_pSB[id]);
if (g_pBeam[id] && is_valid_ent(g_pBeam[id]))
remove_entity(g_pBeam[id]);
new iSB = create_entity("info_target")
if (!iSB)
return;
static Float:vecAngles[3], Float:vecOrigin[3]
GetOriginAimEndEyes(id, 128, vecOrigin, vecAngles)
engfunc(EngFunc_SetModel, iSB,g_models[random(sizeof g_models)]);
static Float:p_mins[3], Float:p_maxs[3]
p_mins = PALLET_MINS;
p_maxs = PALLET_MAXS;
engfunc(EngFunc_SetSize, iSB, p_mins, p_maxs);
set_pev(iSB, pev_mins, p_mins);
set_pev(iSB, pev_maxs, p_maxs );
set_pev(iSB, pev_absmin, p_mins);
set_pev(iSB, pev_absmax, p_maxs );
engfunc(EngFunc_SetOrigin, iSB, vecOrigin);
set_pev(iSB, pev_classname, SB_CLASSNAME);
set_pev(iSB, pev_owner, id);
set_pev(iSB, pev_rendermode, kRenderTransAdd);
set_pev(iSB, pev_renderamt, 200.0);
set_pev(iSB, pev_body, 1);
set_pev(iSB, pev_nextthink, get_gametime());
set_pev(iSB,pev_movetype,MOVETYPE_FLYMISSILE); // Movestep <- for Preview
new pBeam = Beam_Create("sprites/laserbeam.spr", 6.0);
if (pBeam != FM_NULLENT)
{
Beam_EntsInit(pBeam, iSB, id);
Beam_SetColor(pBeam, Float:{150.0, 0.0, 0.0});
Beam_SetScrollRate(pBeam, 255.0);
Beam_SetBrightness(pBeam, 200.0);
}
else
{
pBeam = 0;
}
if(Sb_owner[id] > 0)
{
Sb_owner[id] -= 1
}
g_pBeam[id] = pBeam;
g_pSB[id] = iSB;
}
public SB_Think(SandBag)
{
if (pev_valid(SandBag) != 2)
return;
static pOwner;
pOwner = pev(SandBag, pev_owner);
if (!(1 <= pOwner <= g_iMaxPlayers) || !is_user_alive(pOwner))
return;
static iBody, Float:vecColor[3], Float:vecAngles[3], Float:vecOrigin[3];
GetOriginAimEndEyes(pOwner, 128, vecOrigin, vecAngles);
iBody = 2
xs_vec_set(vecColor, 250.0, 0.0, 0.0);
engfunc(EngFunc_SetOrigin, SandBag, vecOrigin);
vecOrigin[2] -= 8.0;
if (!IsHullVacant(vecOrigin, HULL_HEAD, SandBag))
{
if(CheckSandBag() || CheckSandBagFake())
{
iBody = 1
xs_vec_set(vecColor, 0.0, 250.0, 0.0);
}
}
if (g_pBeam[pOwner] && is_valid_ent(g_pBeam[pOwner]))
{
Beam_RelinkBeam(g_pBeam[pOwner]);
Beam_SetColor(g_pBeam[pOwner], vecColor);
}
iSBCanBePlaced[pOwner] = iBody
set_pev(SandBag, pev_angles, vecAngles);
set_pev(SandBag, pev_body, iBody);
set_pev(SandBag, pev_nextthink, get_gametime() + 0.01);
return;
}
public place_palletwbags(id)
{
new Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_wall"));
set_pev(Ent,pev_classname,"amxx_pallets");
engfunc(EngFunc_SetModel,Ent,g_models[random(sizeof g_models)]);
static Float:p_mins[3], Float:p_maxs[3], Float:vecOrigin[3], Float:vecAngles[3];
p_mins = PALLET_MINS;
p_maxs = PALLET_MAXS;
engfunc(EngFunc_SetSize, Ent, p_mins, p_maxs);
set_pev(Ent, pev_mins, p_mins);
set_pev(Ent, pev_maxs, p_maxs );
set_pev(Ent, pev_absmin, p_mins);
set_pev(Ent, pev_absmax, p_maxs );
set_pev(Ent, pev_body, 3);
//vecOrigin[2] -= 8.0;
GetOriginAimEndEyes(id, 128, vecOrigin, vecAngles);
engfunc(EngFunc_SetOrigin, Ent, vecOrigin);
set_pev(Ent,pev_solid,SOLID_BBOX); // touch on edge, block
set_pev(Ent,pev_movetype,MOVETYPE_FLY); // no gravity, but still collides with stuff
new Float:p_cvar_health = float(iSandBagHealth[id])
set_pev(Ent,pev_health,p_cvar_health);
set_pev(Ent,pev_takedamage,DAMAGE_YES);
static Float:rvec[3];
pev(Ent,pev_v_angle,rvec);
rvec[0] = 0.0;
set_pev(Ent,pev_angles,rvec);
set_pev(Ent, pev_owner, id);
set_pev(Ent,pev_iuser1,id);
if (g_pBeam[id] && is_valid_ent(g_pBeam[id]))
remove_entity(g_pBeam[id]);
if (g_pSB[id] && is_valid_ent(g_pSB[id]))
remove_entity(g_pSB[id]);
new player_name[34]
get_user_name(id, player_name, charsmax(player_name))
//ColorChat(id, RED,"^03%s ^03 has placed a sandbag!", player_name)
client_printcolor(0, "!y[!gLgK!y] %s has placed a !gSandbag", player_name)
set_task(0.1, "glow_sandbags", Ent, _,_, "b")
}
/* ====================================================
get_user_hitpoin stock . Was maked by P34nut, and is
like get_user_aiming but is with floats and better :o
====================================================*/
stock get_user_hitpoint(id, Float:hOrigin[3])
{
if ( ! is_user_alive( id ))
return 0;
new Float:fOrigin[3], Float:fvAngle[3], Float:fvOffset[3], Float:fvOrigin[3], Float:feOrigin[3];
new Float:fTemp[3];
pev(id, pev_origin, fOrigin);
pev(id, pev_v_angle, fvAngle);
pev(id, pev_view_ofs, fvOffset);
xs_vec_add(fOrigin, fvOffset, fvOrigin);
engfunc(EngFunc_AngleVectors, fvAngle, feOrigin, fTemp, fTemp);
xs_vec_mul_scalar(feOrigin, 9999.9, feOrigin);
xs_vec_add(fvOrigin, feOrigin, feOrigin);
engfunc(EngFunc_TraceLine, fvOrigin, feOrigin, 0, id);
global_get(glb_trace_endpos, hOrigin);
return 1;
}
/* ====================================================
This is called on every round, at start up,
with HLTV logevent. So if the "pallets_wbags_nroundrem"
cvar is set to 1, all placed pallets with bugs will be
removed.
====================================================*/
public event_newround()
{
iTeamLimit = 0
for ( new id; id <= get_maxplayers(); id++)
{
if( get_pcvar_num ( remove_nrnd ) == 1)
remove_allpalletswbags();
g_bolsas[id] = 0
g_MaxSB[id] = 0
Sb_owner[id] = 0
gAlreadyBought[id] = 0
if (g_pBeam[id] && is_valid_ent(g_pBeam[id]))
remove_entity(g_pBeam[id])
if (g_pSB[id] && is_valid_ent(g_pSB[id]))
remove_entity(g_pSB[id]);
}
}
/* ====================================================
This is a stock to help for remove all pallets with
bags placed . Is called on new round if the cvar
"pallets_wbags_nroundrem" is set 1.
====================================================*/
stock remove_allpalletswbags()
{
new pallets = -1;
while((pallets = fm_find_ent_by_class(pallets, "amxx_pallets")))
fm_remove_entity(pallets);
}
public checkstuck() {
if ( get_pcvar_num(ZPSTUCK) == 1 )
{
static players[32], pnum, player
get_players(players, pnum)
static Float:origin[3]
static Float:mins[3], hull
static Float:vec[3]
static o,i
for(i=0; i<pnum; i++){
player = players[i]
if (is_user_connected(player) && is_user_alive(player)) {
pev(player, pev_origin, origin)
hull = pev(player, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
if (!is_hull_vacant(origin, hull,player) && !fm_get_user_noclip(player) && !(pev(player,pev_solid) &
SOLID_NOT)) {
++stuck[player]
if(stuck[player] >= get_pcvar_num(cvar[2])) {
pev(player, pev_mins, mins)
vec[2] = origin[2]
for (o=0; o < sizeof size; ++o) {
vec[0] = origin[0] - mins[0] * size[o][0]
vec[1] = origin[1] - mins[1] * size[o][1]
vec[2] = origin[2] - mins[2] * size[o][2]
if (is_hull_vacant(vec, hull,player)) {
engfunc(EngFunc_SetOrigin, player, vec)
effects(player)
set_pev(player,pev_velocity,{0.0,0.0,0.0})
o = sizeof size
}
}
}
}
else
{
stuck[player] = 0
}
}
}
}
}
stock bool:is_hull_vacant(const Float:origin[3], hull,id) {
static tr
engfunc(EngFunc_TraceHull, origin, origin, 0, hull, id, tr)
if (!get_tr2(tr, TR_StartSolid) || !get_tr2(tr, TR_AllSolid)) //get_tr2(tr, TR_InOpen))
return true
return false
}
public effects(id) {
if(get_pcvar_num(cvar[1])) {
set_hudmessage(255,150,50, -1.0, 0.65, 0, 6.0, 1.5,0.1,0.7) // HUDMESSAGE
show_hudmessage(id,"Automatic Unstuck!") // HUDMESSAGE
message_begin(MSG_ONE_UNRELIABLE,105,{0,0,0},id )
write_short(1<<10) // fade lasts this long duration
write_short(1<<10) // fade lasts this long hold time
write_short(1<<1) // fade type (in / out)
write_byte(20) // fade red
write_byte(255) // fade green
write_byte(255) // fade blue
write_byte(255) // fade alpha
message_end()
client_cmd(id,"spk fvox/blip.wav")
}
}
#if defined USE_ZP50
public zp_fw_items_select_pre(id, itemid, ignorecost)
{
// This is not our item
if (itemid != g_itemid_bolsas)
return ZP_ITEM_AVAILABLE;
if (zp_core_is_zombie(id))
return ZP_ITEM_DONT_SHOW;
if(g_MaxSB[id] > 1) return ZP_ITEM_NOT_AVAILABLE;
new current_mode = zp_gamemodes_get_current()
if (current_mode != g_GameModeInfectionID && current_mode != g_GameModeMultiID)
return ZP_ITEM_NOT_AVAILABLE;
zp_items_menu_text_add("\y[Free To All]")
return ZP_ITEM_AVAILABLE;
}
public zp_fw_items_select_post(id, itemid)
{
if (itemid == g_itemid_bolsas)
{
g_bolsas[id]+= 2
g_MaxSB[id]+= 2
gAlreadyBought[id] = 1
iTeamLimit++
set_task(0.3,"show_the_menu",id)
zp_ammopacks_set(id, zp_ammopacks_get(id) + 30)
client_printcolor(id, "!y[!gLgK!y] You have !g%i !ysandbags, to use type !g'say / sb'", g_bolsas[id])
Sb_owner[id] = 2
iSandBagHealth[id] = 750
}
}
#else
public zp_extra_item_selected(id, itemid)
{
if (itemid == g_itemid_bolsas)
{
if(g_MaxSB[id] > 1)
{
zp_color_print(id, "Max Sandbags reached !!!")
return PLUGIN_HANDLED
}
g_bolsas[id]+= 2
g_MaxSB[id]+= 2
gAlreadyBought[id] = 1
iTeamLimit++
set_task(0.3,"show_the_menu",id)
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + 30)
client_printcolor(id, "!y[!gLgK!y] You have !g%i !ysandbags, to use type !g'say / sb'", g_bolsas[id])
Sb_owner[id] = 2
iSandBagHealth[id] = 750
}
return PLUGIN_CONTINUE
}
#endif
public client_disconnect(id)
{
if (g_pSB[id] && is_valid_ent(g_pSB[id]))
remove_entity(g_pSB[id]);
if (g_pBeam[id] && is_valid_ent(g_pBeam[id]))
remove_entity(g_pBeam[id]);
}
public zp_fw_core_infect(id)
{
if (g_pSB[id] && is_valid_ent(g_pSB[id]))
remove_entity(g_pSB[id]);
if (g_pBeam[id] && is_valid_ent(g_pBeam[id]))
remove_entity(g_pBeam[id]);
}
public zp_fw_core_cure(id)
{
if (g_pSB[id] && is_valid_ent(g_pSB[id]))
remove_entity(g_pSB[id]);
if (g_pBeam[id] && is_valid_ent(g_pBeam[id]))
remove_entity(g_pBeam[id]);
new ent = -1
while((ent = find_ent_by_class(ent, "amxx_pallets")))
{
new pOwner = pev(ent, pev_iuser1);
if(id==pOwner)
{
set_pev(ent,pev_owner,pOwner);
}
}
}
bool:IsHullVacant(const Float:vecSrc[3], iHull, pEntToSkip = 0)
{
engfunc(EngFunc_TraceHull, vecSrc, vecSrc, DONT_IGNORE_MONSTERS, iHull, pEntToSkip, 0);
return bool:(!get_tr2(0, TR_AllSolid) && !get_tr2(0, TR_StartSolid) && get_tr2(0, TR_InOpen));
}
GetOriginAimEndEyes(this, iDistance, Float:vecOut[3], Float:vecAngles[3])
{
static Float:vecSrc[3], Float:vecEnd[3], Float:vecViewOfs[3], Float:vecVelocity[3];
static Float:flFraction;
pev(this, pev_origin, vecSrc);
pev(this, pev_view_ofs, vecViewOfs);
xs_vec_add(vecSrc, vecViewOfs, vecSrc);
velocity_by_aim(this, iDistance, vecVelocity);
xs_vec_add(vecSrc, vecVelocity, vecEnd);
engfunc(EngFunc_TraceLine, vecSrc, vecEnd, DONT_IGNORE_MONSTERS, this, 0);
get_tr2(0, TR_flFraction, flFraction);
if (flFraction < 1.0)
{
static Float:vecPlaneNormal[3];
get_tr2(0, TR_PlaneNormal, vecPlaneNormal);
get_tr2(0, TR_vecEndPos, vecOut);
xs_vec_mul_scalar(vecPlaneNormal, 1.0, vecPlaneNormal);
xs_vec_add(vecOut, vecPlaneNormal, vecOut);
}
else
{
xs_vec_copy(vecEnd, vecOut);
}
vecVelocity[2] = 0.0;
vector_to_angle(vecVelocity, vecAngles);
}
public CheckSandBag()
{
static victim
victim = -1
static Float:vecOrigin[3]
while ( ( victim = find_ent_in_sphere(victim,vecOrigin,get_pcvar_float(cvar_units))) != 0 )
{
new sz_classname[32]
entity_get_string( victim , EV_SZ_classname , sz_classname, 31 )
if( !equali(sz_classname,"amxx_pallets") )
{
//our dude has sandbags and wants to place them near to him
if(is_user_connected(victim) && is_user_alive(victim) && Sb_owner[victim] == 0)
return false;
}
}
return true
}
public CheckSandBagFake()
{
static victim
victim = -1
static Float:vecOrigin[3]
while ( ( victim = find_ent_in_sphere(victim,vecOrigin,get_pcvar_float(cvar_units))) != 0 )
{
new sz_classname[32]
entity_get_string( victim , EV_SZ_classname , sz_classname, 31 )
if( !equali(sz_classname,"FakeSandBag") )
{
//our dude has sandbags and wants to place them near to him
if(is_user_connected(victim) && is_user_alive(victim) && Sb_owner[victim] == 0)
return false;
}
}
return true
}
public showMenuLasermine(id)
{
new menuid = menu_create("\y[ZoD* | Sandbags]", "menuLasermine");
menu_additem(menuid, "Buy/place from Extra Items.");
menu_display(id, menuid, 0);
}
/*public menuLasermine(id, menuid, item)
{
if (!is_user_alive(id))
return PLUGIN_HANDLED;
if (zp_core_is_zombie(id))
return PLUGIN_HANDLED;
switch(item)
{
case MENU_EXIT:
{
menu_destroy(menuid);
return PLUGIN_HANDLED;
}
case 0:
{
if (!g_bolsas[id])
{
if(!zp_items_force_buy(id, g_itemid_bolsas))
{
client_printcolor(id, "!y[!gLgK!y] Couldn't buy a !tSandbag!y!")
}
else
{
showMenuLasermine(id);
}
return PLUGIN_HANDLED;
}
if (g_bolsas[id])
{
}
showMenuLasermine(id);
}
case 1:
{
showMenuLasermine(id);
}
}
return PLUGIN_HANDLED;
}
*/
public glow_sandbags(Ent)
{
if (!pev_valid(Ent)) return PLUGIN_HANDLED
new sz_classname[32]
entity_get_string( Ent , EV_SZ_classname , sz_classname, 31 )
if (!equali(sz_classname, "amxx_pallets")) return PLUGIN_HANDLED
if (pev(Ent, pev_health) >= 600)
set_rendering(Ent, kRenderFxGlowShell, 0, 255, 0, kRenderNormal, 5)
return PLUGIN_CONTINUE
}
FClassnameIs(this, const szClassName[])
{
if (pev_valid(this) != 2)
return 0;
new szpClassName[32];
pev(this, pev_classname, szpClassName, charsmax(szpClassName));
return equal(szClassName, szpClassName);
}
stock client_printcolor(const id,const input[], any:...)
{
new msg[191], players[32], count = 1; vformat(msg,190,input,3);
replace_all(msg,190,"!g","^4"); // green
replace_all(msg,190,"!y","^1"); // normal
replace_all(msg,190,"!t","^3"); // team
if (id) players[0] = id; else get_players(players,count,"ch");
for (new i=0;i<count;i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
//ZP50 Colorchat stock
stock zp_color_print(target, const message[], any:...)
{
static buffer[512], msg_SayText = 0
if( !msg_SayText ) msg_SayText = get_user_msgid("SayText")
// Send to everyone
if (!target)
{
static player, maxplayers, argscount
maxplayers = get_maxplayers()
argscount = numargs()
for (player = 1; player <= maxplayers; player++)
{
// Not connected
if (!is_user_connected(player))
continue;
// Remember changed arguments
static arg_index, changed_args[20], changedcount // [20] = max LANG_PLAYER occurencies
changedcount = 0
// Replace LANG_PLAYER with player id
for (arg_index = 2; arg_index < argscount; arg_index++)
{
if (getarg(arg_index) == LANG_PLAYER && arg_index + 1 < argscount)
{
// Check if next param string is a registered language translation
static lang_key[64], arg_subindex
arg_subindex = 0
while ((lang_key[arg_subindex] = getarg(arg_index + 1, arg_subindex++))) { /* keep looping */ }
if (GetLangTransKey(lang_key) != TransKey_Bad)
{
setarg(arg_index, 0, player)
changed_args[changedcount++] = arg_index
arg_index++ // skip next argument since we know it's a translation key
}
}
}
// Format message for player (+add ZP prefix)
vformat(buffer, charsmax(buffer), message, 3)
format(buffer, charsmax(buffer), "%s%s", PREFIX, buffer)
// Send it
message_begin(MSG_ONE_UNRELIABLE, msg_SayText, _, player)
write_byte(player)
write_string(buffer)
message_end()
// Replace back player id's with LANG_PLAYER
for (arg_index = 0; arg_index < changedcount; arg_index++)
setarg(changed_args[arg_index], 0, LANG_PLAYER)
}
}
// Send to specific target
else
{
// Format message for player (+add ZP prefix)
vformat(buffer, charsmax(buffer), message, 3)
format(buffer, charsmax(buffer), "%s%s", PREFIX, buffer)
// Send it
message_begin(MSG_ONE, msg_SayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}