Thread: [Subplugin Submission] [ZP] Extra Item: Sand Bags BETA!
View Single Post
Balage74
Member
Join Date: Dec 2006
Old 09-18-2019 , 16:51   Re: [ZP] Extra Item: Sand Bags BETA!
Reply With Quote #114

I have little modifiation (bugfixes):
Work on zp_special (just try change line 6. for other zombie mod)
and change hungarian lang

Quote:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <xs>
#include <fun>
#include <zombie_plague_special>

// 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)

// cvars
new cvar_enabled, cvar_remround, cvar_pallethealth
new cvar_maxpallets_round,cvar_maxpallets_roundpe rsonal
new cvar_bindmode, cvar_msgmode


/* Models for pallets with bags .
Are available 2 models, will be set a random of them */
new g_models[][] =
{
"models/pallet_with_bags2.mdl",
"models/pallet_with_bags.mdl"
}
// num of pallets with bags
new g_palletcounter_round = 0;

new g_placedpallet[33];
new g_boughtpallet[33];


new const g_item_name[] = { "Sandbag (5x)" }
new g_itemid_bolsas

new g_maxplayers

/********************************************* ****************
************************* AMXX PLUGIN *************************
********************************************* *****************/
public plugin_precache()
{
for(new i;i < sizeof g_models;i++)
engfunc(EngFunc_PrecacheModel,g_models[i]);
}

public plugin_init()
{
/* Register the plugin */
//register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)

register_plugin("[ZP] Extra item: SandBags", "1.1", "LARP")


/* Register the cvars */
cvar_enabled = register_cvar("zp_pb_enable","1"); // 1 = ON ; 0 = OFF
cvar_bindmode = register_cvar("zp_pb_bind","0"); //Auto bind L Key!
cvar_msgmode = register_cvar("zp_pb_msg","0");
cvar_remround = register_cvar("zp_pb_remround","1");
cvar_maxpallets_round = register_cvar("zp_pb_limit","40"); // max number of pallets with bags
cvar_maxpallets_roundpersonal = register_cvar("zp_pb_personallimit","8");
cvar_pallethealth = register_cvar("zp_pb_health","200"); // set the health to a pallet with bags

/* 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 /zsak","show_the_menu");
register_clcmd("say_team /zsak","show_the_menu");
register_clcmd("say /pb","cmd_buy");
register_clcmd("say_team /pb","cmd_buy");
g_itemid_bolsas = zp_register_extra_item(g_item_name, 5, ZP_TEAM_HUMAN)
g_maxplayers = get_maxplayers()
}



public zp_extra_item_selected_pre(id, itemid)
{

if (itemid == g_itemid_bolsas)
{

if( ! get_pcvar_num( cvar_enabled ) ) return ZP_PLUGIN_SUPERCEDE
if (zp_get_human_special_class(id)) return ZP_PLUGIN_HANDLED
}

return PLUGIN_CONTINUE
}





public zp_extra_item_selected(player, itemid)
{

if (itemid == g_itemid_bolsas)
{
if( ! get_pcvar_num( cvar_enabled ) ) return ZP_PLUGIN_HANDLED
else if (zp_get_human_special_class(player)) return ZP_PLUGIN_HANDLED
else
{
g_boughtpallet[player]+= 5
if ( get_pcvar_num(cvar_bindmode) == 1 )
{
client_cmd(player,"bind l say /zsak ")

}
set_task(0.3,"show_the_menu",player)
if ( get_pcvar_num(cvar_msgmode) == 1 )
{
set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0,-1)
show_hudmessage(player, "A plugint keszitette LARP^n Chile 2008")
}
}
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}



public cmd_buy(id)
{
new iCost = zp_get_extra_item_cost(g_itemid_bolsas)
// check if the plugin cvar is turned off
if( ! get_pcvar_num( cvar_enabled ) ){
return

}
// check if user isn't alive
if( ! is_user_alive( id ) || zp_get_user_zombie(id) || zp_get_human_special_class(id) )
{
return
}
if( zp_get_user_ammo_packs(id) < iCost )
{
return
}
g_boughtpallet[id]+= 2
if ( get_pcvar_num(cvar_bindmode) == 1 )
{
client_cmd(id,"bind l say /zsak")

}

if ( get_pcvar_num(cvar_msgmode) == 1 )
{
// set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0,-1)
// show_hudmessage(id, "A plugint készítette LARP^n Chile 2008")

client_print_color(id, print_team_default, "^4[ZP][SB]^1 Vettél 2 db homokzsákot!");


}
show_the_menu(id)
zp_set_user_ammo_packs(id,zp_get_user_ammo_pa cks(id) - iCost)
}

public client_connect(id)
{
g_placedpallet[id] = 0
}

public client_disconnected(id)
{
g_placedpallet[id] = 0
}

/* ============================================= =======
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()
{
if( get_pcvar_num ( cvar_remround ) == 1)
remove_allpalletswbags();

for ( new id = 1; id <= g_maxplayers; id++)
{
g_placedpallet[id] = 0
}


}








public show_the_menu(id)
{
// check if the plugin cvar is turned off
if( ! get_pcvar_num( cvar_enabled ) ) return
// check if user isn't alive
if( ! is_user_alive( id ) || !is_user_connected(id)|| zp_get_user_zombie(id) || zp_get_human_special_class(id) ) return



new iRemain = get_pcvar_num(cvar_maxpallets_round) - g_palletcounter_round
new MenuName[64]
format(MenuName, 63, "\yHomokzsákok: %i ",iRemain)

new menu = menu_create(MenuName, "menu_handler");


new nLen[100]
if ( g_palletcounter_round >= get_pcvar_num(cvar_maxpallets_round)||g_place dpallet[id] >= get_pcvar_num(cvar_maxpallets_roundpersonal)) format( nLen, 99, "\d Nem lehet többet lerakni (leraktál: %i/%i készlet: %i)", get_pcvar_num(cvar_maxpallets_roundpersonal), g_placedpallet[id], g_boughtpallet[id] );
else if (g_boughtpallet[id] < 1) format( nLen, 99, "\d Nincs készleten (leraktál: %i/%i készlet: %i)",g_placedpallet[id], get_pcvar_num(cvar_maxpallets_roundpersonal), g_boughtpallet[id] );
else format( nLen, 99, "\w Homokzsák elhelyezése (leraktál: %i/%i készlet: %i)",g_placedpallet[id], get_pcvar_num(cvar_maxpallets_roundpersonal), g_boughtpallet[id]);

menu_additem(menu, nLen, "", 0);
menu_additem(menu, "\w Kilépés", "", 0);
//menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, menu, 0);
}



public menu_handler(id,menu,key)
{
// check if the plugin cvar is turned off
if( ! get_pcvar_num( cvar_enabled ) )
{
menu_destroy(menu)
return

}
/* if ( key == MENU_EXIT )
{
menu_destroy(menu);
return ;
}*/

// check if user isn't alive
if( ! is_user_alive( id ) || !is_user_connected(id)|| zp_get_user_zombie(id) || zp_get_human_special_class(id) )
{
menu_destroy(menu)
return
}

switch( key )
{
// place a pallet with bags
case 0:
{
if( g_palletcounter_round >= get_pcvar_num(cvar_maxpallets_round)||g_place dpallet[id] >= get_pcvar_num(cvar_maxpallets_roundpersonal) )
{
if ( get_pcvar_num(cvar_msgmode) == 1 )
{
// set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0,-1)
// show_hudmessage(id, "Nem rakhatsz több homokzsákot ebben a körben!")
client_print_color(id, print_team_default, "^4[ZP][SB]^1 Nem rakhatsz több homokzsákot ebben a körben!");

}


}

else if ( g_boughtpallet[id] < 1 )
{
if ( get_pcvar_num(cvar_msgmode) == 1 )
{
// set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0,-1)
// show_hudmessage(id, "Nincs homokzsákod!")
client_print_color(id, print_team_default, "^4[ZP][SB]^1 Nincs homokzsákod")

}
}


else
{
place_palletwbags(id);


}

menu_destroy(menu)
show_the_menu(id);





}
case 1:
{
menu_destroy(menu)

}
// remove a pallet with bags
/*case 1:
{
if ( !zp_get_user_zombie(id) )
{
new ent, body, class[32];
get_user_aiming(id, ent, body);
if (pev_valid(ent))
{
pev(ent, pev_classname, class, 31);

if (equal(class, "amxx_pallets"))
{
g_boughtpallet[id]+= 1
fm_remove_entity(ent);
}

else
client_print(id, print_chat, "[ZP] You are not aiming at a pallet with bags");
}
else
client_print(id, print_chat, "[ZP] You are not aiming at a valid entity !");

show_the_menu(id,level,cid);
}
}
*/

// remove all pallets with bags
/*case 2:
{
g_boughtpallet[id]= 0
remove_allpalletswbags();
client_print(id,print_chat,"[AMXX] You removed all pallets with bags !");
show_the_menu(id,level,cid);
}
*/

}

}



public place_palletwbags(id)
{
// check if the plugin cvar is turned off
if( ! get_pcvar_num( cvar_enabled ) )
return PLUGIN_HANDLED;
// check if user isn't alive
if( ! is_user_alive( id ) || zp_get_user_zombie(id) || zp_get_human_special_class(id) )
{
return PLUGIN_HANDLED;
}
// create a new entity
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_wall"));


// set a name to the entity
set_pev(ent,pev_classname,"amxx_pallets");

// set model
engfunc(EngFunc_SetModel,ent,g_models[random(sizeof g_models)]);

// register a new var. for origin
static Floatorigin[3];
get_user_hitpoint(id,xorigin);


// check if user is aiming at the air
if(engfunc(EngFunc_PointContents,xorigin) == CONTENTS_SKY)
{
client_print_color(id, print_team_default, "^4[ZP][SB]^1 Az égre nem tudsz elhelyezni homokzsákot!");
return PLUGIN_HANDLED;
}


// set sizes
static Float:p_mins[3], Float:p_maxs[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 the rock of origin where is user placed
engfunc(EngFunc_SetOrigin, ent, xorigin);


// make the rock solid
set_pev(ent,pev_solid,SOLID_BBOX); // touch on edge, block

// set the movetype
set_pev(ent,pev_movetype,MOVETYPE_FLY); // no gravity, but still collides with stuff

// now the damage stuff, to set to take it or no
// if you set the cvar "pallets_wbags_health" 0, you can't destroy a pallet with bags
// else, if you want to make it destroyable, just set the health > 0 and will be
// destroyable.
new Float:p_cvar_health = get_pcvar_float(cvar_pallethealth);
switch(p_cvar_health)
{
case 0.0 :
{
set_pev(ent,pev_takedamage,DAMAGE_NO);
}

default :
{
set_pev(ent,pev_health,p_cvar_health);
set_pev(ent,pev_takedamage,DAMAGE_YES);
}
}


static Float:rvec[3];
pev(id,pev_v_angle,rvec);

rvec[0] = 0.0;

set_pev(ent,pev_angles,rvec);

// drop entity to floor
fm_drop_to_floor(ent);

// num ..
g_palletcounter_round++;
g_placedpallet[id]++
g_boughtpallet[id]-= 1
// confirm message
if ( get_pcvar_num(cvar_msgmode) == 1 )
{
set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0,-1)
show_hudmessage(id, "Elhelyeztél egy homokzsákot^n%i Maradt", g_boughtpallet[id])
return PLUGIN_HANDLED
}
client_print_color(id, print_team_default, "^4[ZP][SB]^1 Elhelyeztél egy homokzsákot.")
return PLUGIN_HANDLED;
}

/* ============================================= =======
get_user_hitpoin stock . Was maked by P34nut, and is
like get_user_aiming but is with floats and better
============================================= =======*/
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 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);

g_palletcounter_round = 0;
}




__________________
Balage74 is offline
Send a message via MSN to Balage74 Send a message via Skype™ to Balage74