AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Prevent take damage (https://forums.alliedmods.net/showthread.php?t=183638)

Killer zm 04-24-2012 11:03

Prevent take damage
 
I have this code
PHP Code:

public plugin_init() 

    
RegisterHam(Ham_TakeDamage,"func_wall","fw_TakeDamage"); 


public 
fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type

    
//Victim is not lasermine. 
    
new sz_classname[32
    
entity_get_stringvictim EV_SZ_classname sz_classname 31 
    if( !
equali(sz_classname,"amxx_pallets") ) 
        return 
HAM_IGNORED
     
    
//Attacker is zombie 
    
if( zp_get_user_zombieattacker )&& is_user_aliveinflictor ) )  
        return 
HAM_IGNORED
     
    
//Block Damage 
    
return HAM_SUPERCEDE


An player put in zombie mode sanbags and zombie can destroy this sandbags and another player human coming and shot in the sandabgs he cant destroy but I want the player who put the sandbags to make can destroy sandbags I put there && is_user_alive( inflictor ) but not working why?

hornet 04-25-2012 02:00

Re: Prevent take damage
 
Okay well I can't understand a word your trying to say. Can you try and reword it or have your request translated if you can't speak English.

Other than that, all I can tell you is that inflictor actually refers to the index of the weapon that dealt the damage. Try changing it to

is_user_alive( attacker )

Or perhaps remove that condition altogether.

fysiks 04-25-2012 02:06

Re: Prevent take damage
 
IIRC, the inflictor is usually the weapon itself and not the player.

Hunter-Digital 04-25-2012 04:46

Re: Prevent take damage
 
I remember that the inflictor is equal to attacker if attacker used a held weapon to shoot/melee the victim, if the attacker used a grenade, then the inflictor is the grenade entity.

You should use attacker for the player that attacked and inflictor to check the weapon and whatever.

If you just want to allow players to destroy the sandbags, this is enough:

Code:

    new sz_classname[32]
    entity_get_string( victim , EV_SZ_classname , sz_classname , 31 )

    if(equali(sz_classname,"amxx_pallets") && !zp_get_user_zombie( attacker ) )
        return HAM_SUPERCEDE

    return HAM_IGNORED

Or if you have a zp_get_user_human() you should use that instead.

hornet 04-25-2012 05:04

Re: Prevent take damage
 
Quote:

Originally Posted by fysiks (Post 1696021)
IIRC, the inflictor is usually the weapon itself and not the player.

Yes sorry, that's what I was trying to say, the actual weapon entity, not the CSW_ if that's how you took it. :)

.Dare Devil. 04-25-2012 06:13

Re: Prevent take damage
 
you need to edit sandbag plugin,
when you create sandbag you must give entity the owner and then check if the owner is attacker and if it is then allow to do dmg to sandbag.

Killer zm 04-26-2012 08:19

Re: Prevent take damage
 
dare davil I tryed what they say up but not worked I think I have to put how you say but I dont know how, can you help me with owner i tried somenthing with pev_owner but not worked
here is the plugin/code

PHP Code:

/*================================================================================
    
    -----------------------------------
    -*- [ZP] Sandbags -*-
    -----------------------------------
    
    ~~~~~~~~~~~~~~~
    - Description -
    ~~~~~~~~~~~~~~~
    
    Original by SAMURAI, Upgraded to zp by LARP
    [email protected] (Chile) Languaje spanish!
    
================================================================================*/


#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#include <xs>
#include <fun>
#include <zombieplague.inc>

// 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 pnumpluginremove_nrndmaxpalletsphealth;

// num of pallets with bags
new palletscout 0;

/* 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"
}

new 
stuck[33]
new 
g_bolsas[33];
new 
cvar[3]

new const 
Float:size[][3] = {
    {
0.00.01.0}, {0.00.0, -1.0}, {0.01.00.0}, {0.0, -1.00.0}, {1.00.00.0}, {-1.00.00.0}, {-1.01.01.0}, {1.01.01.0}, {1.0, -1.01.0}, {1.01.0, -1.0}, {-1.0, -1.01.0}, {1.0, -1.0, -1.0}, {-1.01.0, -1.0}, {-1.0, -1.0, -1.0},
    {
0.00.02.0}, {0.00.0, -2.0}, {0.02.00.0}, {0.0, -2.00.0}, {2.00.00.0}, {-2.00.00.0}, {-2.02.02.0}, {2.02.02.0}, {2.0, -2.02.0}, {2.02.0, -2.0}, {-2.0, -2.02.0}, {2.0, -2.0, -2.0}, {-2.02.0, -2.0}, {-2.0, -2.0, -2.0},
    {
0.00.03.0}, {0.00.0, -3.0}, {0.03.00.0}, {0.0, -3.00.0}, {3.00.00.0}, {-3.00.00.0}, {-3.03.03.0}, {3.03.03.0}, {3.0, -3.03.0}, {3.03.0, -3.0}, {-3.0, -3.03.0}, {3.0, -3.0, -3.0}, {-3.03.0, -3.0}, {-3.0, -3.0, -3.0},
    {
0.00.04.0}, {0.00.0, -4.0}, {0.04.00.0}, {0.0, -4.00.0}, {4.00.00.0}, {-4.00.00.0}, {-4.04.04.0}, {4.04.04.0}, {4.0, -4.04.0}, {4.04.0, -4.0}, {-4.0, -4.04.0}, {4.0, -4.0, -4.0}, {-4.04.0, -4.0}, {-4.0, -4.0, -4.0},
    {
0.00.05.0}, {0.00.0, -5.0}, {0.05.00.0}, {0.0, -5.00.0}, {5.00.00.0}, {-5.00.00.0}, {-5.05.05.0}, {5.05.05.0}, {5.0, -5.05.0}, {5.05.0, -5.0}, {-5.0, -5.05.0}, {5.0, -5.0, -5.0}, {-5.05.0, -5.0}, {-5.0, -5.0, -5.0}
}

new const 
g_item_name[] = { "15 Sandbags" }
const 
g_item_bolsas 0
new g_itemid_bolsas
new ZPSTUCKg_BINDMODEg_MSGMODE

/*************************************************************
************************* AMXX PLUGIN *************************
**************************************************************/


public plugin_init() 
{
    
/* Register the plugin */
    
    
register_plugin("[ZP] Extra: SandBags""1.1""LARP")
    
set_task(0.1,"checkstuck",0,"",0,"b")
    
g_itemid_bolsas zp_register_extra_item(g_item_nameg_item_bolsasZP_TEAM_HUMAN)
    
/* Register the cvars */
    
g_BINDMODE    register_cvar("zp_pb_bind","0");        //Auto bind L Key!
    
g_MSGMODE    register_cvar("zp_pb_msg","1");        //
    
ZPSTUCK register_cvar("zp_pb_stuck","1")
    
pnumplugin register_cvar("zp_pb_enable","1"); // 1 = ON ; 0 = OFF
    
remove_nrnd register_cvar("zp_pb_remround","1");
    
maxpallets register_cvar("zp_pb_limit","200"); // max number of pallets with bags
    
phealth 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_menucmd(register_menuid("\ySand Bags:"), 1023"menu_command" );
    
register_clcmd("say /pb","show_the_menu");
    
register_clcmd("/pb","show_the_menu");
    
    
//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");

    
}
//Here is what I am tryin to make just owner and zombie to be able to destroy sandbags
public fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type)
{
    new 
sz_classname[32]
    
entity_get_stringvictim EV_SZ_classname sz_classname 31 )
    
    if( !
equali(sz_classname,"amxx_pallets") && is_user_alive(attacker))
        return 
HAM_IGNORED;

    
//Attacker is zombie
    
if( zp_get_user_zombieattacker )) 
        return 
HAM_IGNORED

    return 
HAM_SUPERCEDE;
}  

public 
plugin_precache()
{
    for(new 
i;sizeof g_models;i++)
        
engfunc(EngFunc_PrecacheModel,g_models[i]);
}

public 
show_the_menu(id,level,cid)
{
    
// check if user doesen't have admin 
    /*if( ! cmd_access( id,level, cid , 0 ))
        return PLUGIN_HANDLED;
    */
    
    // check if the plugin cvar is turned off
    
if( ! get_pcvar_numpnumplugin ) )
        return 
PLUGIN_HANDLED;
        
        
    
// check if user isn't alive
    
if( ! is_user_aliveid ) )
    {
        
client_printidprint_chat"" ); //msg muerto
        
return PLUGIN_HANDLED;
    }
            
    if ( !
zp_get_user_zombie(id) )
    {        
        new 
szMenuBody[256];
        new 
keys;
        
        new 
nLen formatszMenuBody255"\ySand Bags:^n" );
        
nLen += formatszMenuBody[nLen], 255-nLen"^n\w1. Place a Sandbags (%i Remaining)"g_bolsas[id] );
        
//nLen += format( szMenuBody[nLen], 255-nLen, "^n\w2. Remove a pallet with bags" );
        
nLen += formatszMenuBody[nLen], 255-nLen"^n^n\w0. Exit" );

        
keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<9)

        
show_menuidkeysszMenuBody, -);

        
// depends what you want, if is continue will appear on chat what the admin sayd
        
return PLUGIN_HANDLED;
    }
    
client_print(idprint_chat"[ZP] The zombies can not use this command!")
    return 
PLUGIN_HANDLED;
}

public 
menu_command(id,key,level,cid)
{
    
    switch( 
key )
    {
        
// place a pallet with bags
        
case 0
        {
            if ( !
zp_get_user_zombie(id) )
            {
                new 
money g_bolsas[id]
                if ( 
money )
                {
                    if ( 
get_pcvar_num(g_MSGMODE) == )
                        {
                            
set_hudmessage(001000.800.8006.02.01.01.0)
                            
show_hudmessage(id"You do not have to^nplace sandbags")
                            return 
PLUGIN_CONTINUE
                        
}
                    
client_print(idprint_chat"[ZP] You do not have to place sandbags!")
                    return 
PLUGIN_CONTINUE
                
}
                
g_bolsas[id]-= 1
                place_palletwbags
(id);
                
show_the_menu(id,level,cid);
                return 
PLUGIN_CONTINUE    
            
}
            
client_print(idprint_chat"[ZP] The zombies can not use this!!")
            return 
PLUGIN_CONTINUE    
        
}
        
    }
    
    return 
PLUGIN_HANDLED;
}



public 
place_palletwbags(id)
{
    
    if( 
palletscout == get_pcvar_num(maxpallets) )
    {
        
client_print(id,print_chat,"[ZP] For security reasons only allow %d Sandbags on the server!",get_pcvar_num(maxpallets));
        return 
PLUGIN_HANDLED;
    }
    
    
// create a new entity 
    
new ent engfunc(EngFunc_CreateNamedEntityengfunc(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 Float:xorigin[3];
    
get_user_hitpoint(id,xorigin);
    
    
    
// check if user is aiming at the air 
    
if(engfunc(EngFunc_PointContents,xorigin) == CONTENTS_SKY)
    {
        
client_print(id,print_chat,"[ZP] You can not put sandbags in the sky!");
        return 
PLUGIN_HANDLED;
    }
    
    
    
// set sizes
    
static Float:p_mins[3], Float:p_maxs[3];
    
p_mins PALLET_MINS;
    
p_maxs PALLET_MAXS;
    
engfunc(EngFunc_SetSizeentp_minsp_maxs);
    
set_pev(entpev_minsp_mins);
    
set_pev(entpev_maxsp_maxs );
    
set_pev(entpev_absminp_mins);
    
set_pev(entpev_absmaxp_maxs );

    
    
// set the rock of origin where is user placed
    
engfunc(EngFunc_SetOriginentxorigin);
    
    
    
// 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(phealth);
    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 ..
    
palletscout++;
    
    
// confirm message
    
if ( get_pcvar_num(g_MSGMODE) == )
    {
        
set_hudmessage(001000.800.8006.02.01.01.0)
        
show_hudmessage(id"You placed a SandBag^n%i Remaining"g_bolsas[id])
        return 
PLUGIN_HANDLED
    
}
    
client_print(idprint_chat"[ZP] You have placed a Sandbag.")
    return 
PLUGIN_HANDLED;
}
    
/* ====================================================
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(idFloat:hOrigin[3]) 
{
    if ( ! 
is_user_aliveid ))
        return 
0;
    
    new 
Float:fOrigin[3], Float:fvAngle[3], Float:fvOffset[3], Float:fvOrigin[3], Float:feOrigin[3];
    new 
Float:fTemp[3];
    
    
pev(idpev_originfOrigin);
    
pev(idpev_v_anglefvAngle);
    
pev(idpev_view_ofsfvOffset);
    
    
xs_vec_add(fOriginfvOffsetfvOrigin);
    
    
engfunc(EngFunc_AngleVectorsfvAnglefeOriginfTempfTemp);
    
    
xs_vec_mul_scalar(feOrigin9999.9feOrigin);
    
xs_vec_add(fvOriginfeOriginfeOrigin);
    
    
engfunc(EngFunc_TraceLinefvOriginfeOrigin0id);
    
global_get(glb_trace_endposhOrigin);
    
    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()
{
    if( 
get_pcvar_num remove_nrnd ) == 1)
        
remove_allpalletswbags();
        
}


/* ====================================================
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);
        
    
palletscout 0;
}

public 
checkstuck() {
    if ( 
get_pcvar_num(ZPSTUCK) == )
    {
        static 
players[32], pnumplayer
        get_players
(playerspnum)
        static 
Float:origin[3]
        static 
Float:mins[3], hull
        
static Float:vec[3]
        static 
o,i
        
for(i=0i<pnumi++){
            
player players[i]
            if (
is_user_connected(player) && is_user_alive(player)) {
                
pev(playerpev_originorigin)
                
hull pev(playerpev_flags) & FL_DUCKING HULL_HEAD HULL_HUMAN
                
if (!is_hull_vacant(originhull,player) && !get_user_noclip(player) && !(pev(player,pev_solid) & SOLID_NOT)) {
                    ++
stuck[player]
                    if(
stuck[player] >= get_pcvar_num(cvar[2])) {
                        
pev(playerpev_minsmins)
                        
vec[2] = origin[2]
                        for (
o=0sizeof 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(vechull,player)) {
                                
engfunc(EngFunc_SetOriginplayervec)
                                
effects(player)
                                
set_pev(player,pev_velocity,{0.0,0.0,0.0})
                                
sizeof size
                            
}
                        }
                    }
                }
                else
                {
                    
stuck[player] = 0
                
}
            }
        }
    
    }
    
}

stock bool:is_hull_vacant(const Float:origin[3], hull,id) {
    static 
tr
    engfunc
(EngFunc_TraceHulloriginorigin0hullidtr)
    if (!
get_tr2(trTR_StartSolid) || !get_tr2(trTR_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.00.6506.01.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")
    }
}

public 
zp_extra_item_selected(playeritemid)
{
    if (
itemid == g_itemid_bolsas)
    {
        
g_bolsas[player]+= 15
        cmd_bind
(player)
        
set_task(0.3,"show_the_menu",player)
        if ( 
get_pcvar_num(g_MSGMODE) == )
        {
            
set_hudmessage(001000.800.8006.02.01.01.0)
            
show_hudmessage(player"Plugin By LARP^n    Chile 2008")
        }
    }

}

public 
cmd_bind(id)
{
    if ( 
get_pcvar_num(g_BINDMODE) == )
    {
        
client_print(idprint_chat"[ZP] You have %i sandbags, to use with the key 'L'"g_bolsas[id])
        
client_cmd(id,"bind l /pb")
        return 
PLUGIN_HANDLED
    
}
    
client_print(idprint_chat"[ZP] You have %i sandbags, to use type 'say /pb'"g_bolsas[id])
    return 
PLUGIN_HANDLED




.Dare Devil. 04-26-2012 15:31

Re: Prevent take damage
 
PHP Code:

public plugin_init() 

    
RegisterHam(Ham_TakeDamage,"func_wall","fw_TakeDamage"); 


public 
fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type

    
//Victim is not lasermine. 
    
new sz_classname[32
    
entity_get_stringvictim EV_SZ_classname sz_classname 31 
    if( !
equali(sz_classname,"amxx_pallets") ) 
        return 
HAM_IGNORED
     
   static 
owner
   owner 
pev(entpev_owner)

    
//Attacker is zombie 
    
if( zp_get_user_zombieattacker )&& attacker != owner )  
        return 
HAM_IGNORED
     
    
//Block Damage 
    
return HAM_SUPERCEDE


PHP Code:

/*================================================================================
    
    -----------------------------------
    -*- [ZP] Sandbags -*-
    -----------------------------------
    
    ~~~~~~~~~~~~~~~
    - Description -
    ~~~~~~~~~~~~~~~
    
    Original by SAMURAI, Upgraded to zp by LARP
    [email protected] (Chile) Languaje spanish!
    
================================================================================*/


#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#include <xs>
#include <fun>
#include <zombieplague.inc>

// 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 pnumpluginremove_nrndmaxpalletsphealth;

// num of pallets with bags
new palletscout 0;

/* 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"
}

new 
stuck[33]
new 
g_bolsas[33];
new 
cvar[3]

new const 
Float:size[][3] = {
    {
0.00.01.0}, {0.00.0, -1.0}, {0.01.00.0}, {0.0, -1.00.0}, {1.00.00.0}, {-1.00.00.0}, {-1.01.01.0}, {1.01.01.0}, {1.0, -1.01.0}, {1.01.0, -1.0}, {-1.0, -1.01.0}, {1.0, -1.0, -1.0}, {-1.01.0, -1.0}, {-1.0, -1.0, -1.0},
    {
0.00.02.0}, {0.00.0, -2.0}, {0.02.00.0}, {0.0, -2.00.0}, {2.00.00.0}, {-2.00.00.0}, {-2.02.02.0}, {2.02.02.0}, {2.0, -2.02.0}, {2.02.0, -2.0}, {-2.0, -2.02.0}, {2.0, -2.0, -2.0}, {-2.02.0, -2.0}, {-2.0, -2.0, -2.0},
    {
0.00.03.0}, {0.00.0, -3.0}, {0.03.00.0}, {0.0, -3.00.0}, {3.00.00.0}, {-3.00.00.0}, {-3.03.03.0}, {3.03.03.0}, {3.0, -3.03.0}, {3.03.0, -3.0}, {-3.0, -3.03.0}, {3.0, -3.0, -3.0}, {-3.03.0, -3.0}, {-3.0, -3.0, -3.0},
    {
0.00.04.0}, {0.00.0, -4.0}, {0.04.00.0}, {0.0, -4.00.0}, {4.00.00.0}, {-4.00.00.0}, {-4.04.04.0}, {4.04.04.0}, {4.0, -4.04.0}, {4.04.0, -4.0}, {-4.0, -4.04.0}, {4.0, -4.0, -4.0}, {-4.04.0, -4.0}, {-4.0, -4.0, -4.0},
    {
0.00.05.0}, {0.00.0, -5.0}, {0.05.00.0}, {0.0, -5.00.0}, {5.00.00.0}, {-5.00.00.0}, {-5.05.05.0}, {5.05.05.0}, {5.0, -5.05.0}, {5.05.0, -5.0}, {-5.0, -5.05.0}, {5.0, -5.0, -5.0}, {-5.05.0, -5.0}, {-5.0, -5.0, -5.0}
}

new const 
g_item_name[] = { "15 Sandbags" }
const 
g_item_bolsas 0
new g_itemid_bolsas
new ZPSTUCKg_BINDMODEg_MSGMODE

/*************************************************************
************************* AMXX PLUGIN *************************
**************************************************************/


public plugin_init() 
{
    
/* Register the plugin */
    
    
register_plugin("[ZP] Extra: SandBags""1.1""LARP")
    
set_task(0.1,"checkstuck",0,"",0,"b")
    
g_itemid_bolsas zp_register_extra_item(g_item_nameg_item_bolsasZP_TEAM_HUMAN)
    
/* Register the cvars */
    
g_BINDMODE    register_cvar("zp_pb_bind","0");        //Auto bind L Key!
    
g_MSGMODE    register_cvar("zp_pb_msg","1");        //
    
ZPSTUCK register_cvar("zp_pb_stuck","1")
    
pnumplugin register_cvar("zp_pb_enable","1"); // 1 = ON ; 0 = OFF
    
remove_nrnd register_cvar("zp_pb_remround","1");
    
maxpallets register_cvar("zp_pb_limit","200"); // max number of pallets with bags
    
phealth 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_menucmd(register_menuid("\ySand Bags:"), 1023"menu_command" );
    
register_clcmd("say /pb","show_the_menu");
    
register_clcmd("/pb","show_the_menu");
    
    
//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");

    
}
//Here is what I am tryin to make just owner and zombie to be able to destroy sandbags
public fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type)
{
    new 
sz_classname[32]
    
entity_get_stringvictim EV_SZ_classname sz_classname 31 )
    
    if( !
equali(sz_classname,"amxx_pallets") && is_user_alive(attacker))
        return 
HAM_IGNORED;

    
//Attacker is zombie
    
if( zp_get_user_zombieattacker )) 
        return 
HAM_IGNORED

    return 
HAM_SUPERCEDE;
}  

public 
plugin_precache()
{
    for(new 
i;sizeof g_models;i++)
        
engfunc(EngFunc_PrecacheModel,g_models[i]);
}

public 
show_the_menu(id,level,cid)
{
    
// check if user doesen't have admin 
    /*if( ! cmd_access( id,level, cid , 0 ))
        return PLUGIN_HANDLED;
    */
    
    // check if the plugin cvar is turned off
    
if( ! get_pcvar_numpnumplugin ) )
        return 
PLUGIN_HANDLED;
        
        
    
// check if user isn't alive
    
if( ! is_user_aliveid ) )
    {
        
client_printidprint_chat"" ); //msg muerto
        
return PLUGIN_HANDLED;
    }
            
    if ( !
zp_get_user_zombie(id) )
    {        
        new 
szMenuBody[256];
        new 
keys;
        
        new 
nLen formatszMenuBody255"\ySand Bags:^n" );
        
nLen += formatszMenuBody[nLen], 255-nLen"^n\w1. Place a Sandbags (%i Remaining)"g_bolsas[id] );
        
//nLen += format( szMenuBody[nLen], 255-nLen, "^n\w2. Remove a pallet with bags" );
        
nLen += formatszMenuBody[nLen], 255-nLen"^n^n\w0. Exit" );

        
keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<9)

        
show_menuidkeysszMenuBody, -);

        
// depends what you want, if is continue will appear on chat what the admin sayd
        
return PLUGIN_HANDLED;
    }
    
client_print(idprint_chat"[ZP] The zombies can not use this command!")
    return 
PLUGIN_HANDLED;
}

public 
menu_command(id,key,level,cid)
{
    
    switch( 
key )
    {
        
// place a pallet with bags
        
case 0
        {
            if ( !
zp_get_user_zombie(id) )
            {
                new 
money g_bolsas[id]
                if ( 
money )
                {
                    if ( 
get_pcvar_num(g_MSGMODE) == )
                        {
                            
set_hudmessage(001000.800.8006.02.01.01.0)
                            
show_hudmessage(id"You do not have to^nplace sandbags")
                            return 
PLUGIN_CONTINUE
                        
}
                    
client_print(idprint_chat"[ZP] You do not have to place sandbags!")
                    return 
PLUGIN_CONTINUE
                
}
                
g_bolsas[id]-= 1
                place_palletwbags
(id);
                
show_the_menu(id,level,cid);
                return 
PLUGIN_CONTINUE    
            
}
            
client_print(idprint_chat"[ZP] The zombies can not use this!!")
            return 
PLUGIN_CONTINUE    
        
}
        
    }
    
    return 
PLUGIN_HANDLED;
}



public 
place_palletwbags(id)
{
    
    if( 
palletscout == get_pcvar_num(maxpallets) )
    {
        
client_print(id,print_chat,"[ZP] For security reasons only allow %d Sandbags on the server!",get_pcvar_num(maxpallets));
        return 
PLUGIN_HANDLED;
    }
    
    
// create a new entity 
    
new ent engfunc(EngFunc_CreateNamedEntityengfunc(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 Float:xorigin[3];
    
get_user_hitpoint(id,xorigin);
    
    
set_pev(entpev_ownerid)
    
    
// check if user is aiming at the air 
    
if(engfunc(EngFunc_PointContents,xorigin) == CONTENTS_SKY)
    {
        
client_print(id,print_chat,"[ZP] You can not put sandbags in the sky!");
        return 
PLUGIN_HANDLED;
    }
    
    
    
// set sizes
    
static Float:p_mins[3], Float:p_maxs[3];
    
p_mins PALLET_MINS;
    
p_maxs PALLET_MAXS;
    
engfunc(EngFunc_SetSizeentp_minsp_maxs);
    
set_pev(entpev_minsp_mins);
    
set_pev(entpev_maxsp_maxs );
    
set_pev(entpev_absminp_mins);
    
set_pev(entpev_absmaxp_maxs );

    
    
// set the rock of origin where is user placed
    
engfunc(EngFunc_SetOriginentxorigin);
    
    
    
// 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(phealth);
    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 ..
    
palletscout++;
    
    
// confirm message
    
if ( get_pcvar_num(g_MSGMODE) == )
    {
        
set_hudmessage(001000.800.8006.02.01.01.0)
        
show_hudmessage(id"You placed a SandBag^n%i Remaining"g_bolsas[id])
        return 
PLUGIN_HANDLED
    
}
    
client_print(idprint_chat"[ZP] You have placed a Sandbag.")
    return 
PLUGIN_HANDLED;
}
    
/* ====================================================
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(idFloat:hOrigin[3]) 
{
    if ( ! 
is_user_aliveid ))
        return 
0;
    
    new 
Float:fOrigin[3], Float:fvAngle[3], Float:fvOffset[3], Float:fvOrigin[3], Float:feOrigin[3];
    new 
Float:fTemp[3];
    
    
pev(idpev_originfOrigin);
    
pev(idpev_v_anglefvAngle);
    
pev(idpev_view_ofsfvOffset);
    
    
xs_vec_add(fOriginfvOffsetfvOrigin);
    
    
engfunc(EngFunc_AngleVectorsfvAnglefeOriginfTempfTemp);
    
    
xs_vec_mul_scalar(feOrigin9999.9feOrigin);
    
xs_vec_add(fvOriginfeOriginfeOrigin);
    
    
engfunc(EngFunc_TraceLinefvOriginfeOrigin0id);
    
global_get(glb_trace_endposhOrigin);
    
    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()
{
    if( 
get_pcvar_num remove_nrnd ) == 1)
        
remove_allpalletswbags();
        
}


/* ====================================================
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);
        
    
palletscout 0;
}

public 
checkstuck() {
    if ( 
get_pcvar_num(ZPSTUCK) == )
    {
        static 
players[32], pnumplayer
        get_players
(playerspnum)
        static 
Float:origin[3]
        static 
Float:mins[3], hull
        
static Float:vec[3]
        static 
o,i
        
for(i=0i<pnumi++){
            
player players[i]
            if (
is_user_connected(player) && is_user_alive(player)) {
                
pev(playerpev_originorigin)
                
hull pev(playerpev_flags) & FL_DUCKING HULL_HEAD HULL_HUMAN
                
if (!is_hull_vacant(originhull,player) && !get_user_noclip(player) && !(pev(player,pev_solid) & SOLID_NOT)) {
                    ++
stuck[player]
                    if(
stuck[player] >= get_pcvar_num(cvar[2])) {
                        
pev(playerpev_minsmins)
                        
vec[2] = origin[2]
                        for (
o=0sizeof 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(vechull,player)) {
                                
engfunc(EngFunc_SetOriginplayervec)
                                
effects(player)
                                
set_pev(player,pev_velocity,{0.0,0.0,0.0})
                                
sizeof size
                            
}
                        }
                    }
                }
                else
                {
                    
stuck[player] = 0
                
}
            }
        }
    
    }
    
}

stock bool:is_hull_vacant(const Float:origin[3], hull,id) {
    static 
tr
    engfunc
(EngFunc_TraceHulloriginorigin0hullidtr)
    if (!
get_tr2(trTR_StartSolid) || !get_tr2(trTR_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.00.6506.01.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")
    }
}

public 
zp_extra_item_selected(playeritemid)
{
    if (
itemid == g_itemid_bolsas)
    {
        
g_bolsas[player]+= 15
        cmd_bind
(player)
        
set_task(0.3,"show_the_menu",player)
        if ( 
get_pcvar_num(g_MSGMODE) == )
        {
            
set_hudmessage(001000.800.8006.02.01.01.0)
            
show_hudmessage(player"Plugin By LARP^n    Chile 2008")
        }
    }

}

public 
cmd_bind(id)
{
    if ( 
get_pcvar_num(g_BINDMODE) == )
    {
        
client_print(idprint_chat"[ZP] You have %i sandbags, to use with the key 'L'"g_bolsas[id])
        
client_cmd(id,"bind l /pb")
        return 
PLUGIN_HANDLED
    
}
    
client_print(idprint_chat"[ZP] You have %i sandbags, to use type 'say /pb'"g_bolsas[id])
    return 
PLUGIN_HANDLED




Killer zm 04-27-2012 07:06

Re: Prevent take damage
 
is not working still other humans can destroy

H.RED.ZONE 04-27-2012 08:32

Re: Prevent take damage
 
PHP Code:

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#include <xs>
#include <fun>
#include <zombieplague>

// 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 pnumpluginremove_nrndmaxpalletsphealth;

// num of pallets with bags
new palletscout 0;

/* 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"
}

new 
stuck[33]
new 
g_bolsas[33];
new 
cvar[3]

new const 
Float:size[][3] = {
    {
0.00.01.0}, {0.00.0, -1.0}, {0.01.00.0}, {0.0, -1.00.0}, {1.00.00.0}, {-1.00.00.0}, {-1.01.01.0}, {1.01.01.0}, {1.0, -1.01.0}, {1.01.0, -1.0}, {-1.0, -1.01.0}, {1.0, -1.0, -1.0}, {-1.01.0, -1.0}, {-1.0, -1.0, -1.0},
    {
0.00.02.0}, {0.00.0, -2.0}, {0.02.00.0}, {0.0, -2.00.0}, {2.00.00.0}, {-2.00.00.0}, {-2.02.02.0}, {2.02.02.0}, {2.0, -2.02.0}, {2.02.0, -2.0}, {-2.0, -2.02.0}, {2.0, -2.0, -2.0}, {-2.02.0, -2.0}, {-2.0, -2.0, -2.0},
    {
0.00.03.0}, {0.00.0, -3.0}, {0.03.00.0}, {0.0, -3.00.0}, {3.00.00.0}, {-3.00.00.0}, {-3.03.03.0}, {3.03.03.0}, {3.0, -3.03.0}, {3.03.0, -3.0}, {-3.0, -3.03.0}, {3.0, -3.0, -3.0}, {-3.03.0, -3.0}, {-3.0, -3.0, -3.0},
    {
0.00.04.0}, {0.00.0, -4.0}, {0.04.00.0}, {0.0, -4.00.0}, {4.00.00.0}, {-4.00.00.0}, {-4.04.04.0}, {4.04.04.0}, {4.0, -4.04.0}, {4.04.0, -4.0}, {-4.0, -4.04.0}, {4.0, -4.0, -4.0}, {-4.04.0, -4.0}, {-4.0, -4.0, -4.0},
    {
0.00.05.0}, {0.00.0, -5.0}, {0.05.00.0}, {0.0, -5.00.0}, {5.00.00.0}, {-5.00.00.0}, {-5.05.05.0}, {5.05.05.0}, {5.0, -5.05.0}, {5.05.0, -5.0}, {-5.0, -5.05.0}, {5.0, -5.0, -5.0}, {-5.05.0, -5.0}, {-5.0, -5.0, -5.0}
}

new const 
g_item_name[] = { "15 Sandbags" }
const 
g_item_bolsas 0
new g_itemid_bolsas
new ZPSTUCKg_BINDMODEg_MSGMODE

/*************************************************************
************************* AMXX PLUGIN *************************
**************************************************************/


public plugin_init() 
{
    
/* Register the plugin */
    
    
register_plugin("[ZP] Extra: SandBags""1.1""LARP")
    
set_task(0.1,"checkstuck",0,"",0,"b")
    
g_itemid_bolsas zp_register_extra_item(g_item_nameg_item_bolsasZP_TEAM_HUMAN)
    
/* Register the cvars */
    
g_BINDMODE    register_cvar("zp_pb_bind","0");        //Auto bind L Key!
    
g_MSGMODE    register_cvar("zp_pb_msg","1");        //
    
ZPSTUCK register_cvar("zp_pb_stuck","1")
    
pnumplugin register_cvar("zp_pb_enable","1"); // 1 = ON ; 0 = OFF
    
remove_nrnd register_cvar("zp_pb_remround","1");
    
maxpallets register_cvar("zp_pb_limit","200"); // max number of pallets with bags
    
phealth 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_menucmd(register_menuid("\ySand Bags:"), 1023"menu_command" );
    
register_clcmd("say /pb","show_the_menu");
    
register_clcmd("/pb","show_the_menu");
    
    
//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");

    
}
//Here is what I am tryin to make just owner and zombie to be able to destroy sandbags
public fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type)
{
    new 
sz_classname[32]
    
entity_get_stringvictim EV_SZ_classname sz_classname 31 )
    
    if( !
equali(sz_classname,"amxx_pallets") && is_user_alive(attacker))
        return 
HAM_IGNORED;
    
    new 
ent engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"func_wall"));    
    static 
owner
    owner 
pev(entpev_owner
    
//Attacker is zombie
    
if( is_user_aliveattacker )) 
        return 
HAM_IGNORED

    if( 
is_user_aliveowner )) 
        return 
HAM_SUPERCEDE;     
    
    return 
HAM_SUPERCEDE;
}  

public 
plugin_precache()
{
    for(new 
i;sizeof g_models;i++)
        
engfunc(EngFunc_PrecacheModel,g_models[i]);
}

public 
show_the_menu(id,level,cid)
{
    
// check if user doesen't have admin 
    /*if( ! cmd_access( id,level, cid , 0 ))
        return PLUGIN_HANDLED;
    */
    
    // check if the plugin cvar is turned off
    
if( ! get_pcvar_numpnumplugin ) )
        return 
PLUGIN_HANDLED;
        
        
    
// check if user isn't alive
    
if( ! is_user_aliveid ) )
    {
        
client_printidprint_chat"" ); //msg muerto
        
return PLUGIN_HANDLED;
    }
            
    if ( !
zp_get_user_zombie(id) )
    {        
        new 
szMenuBody[256];
        new 
keys;
        
        new 
nLen formatszMenuBody255"\ySand Bags:^n" );
        
nLen += formatszMenuBody[nLen], 255-nLen"^n\w1. Place a Sandbags (%i Remaining)"g_bolsas[id] );
        
//nLen += format( szMenuBody[nLen], 255-nLen, "^n\w2. Remove a pallet with bags" );
        
nLen += formatszMenuBody[nLen], 255-nLen"^n^n\w0. Exit" );

        
keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<9)

        
show_menuidkeysszMenuBody, -);

        
// depends what you want, if is continue will appear on chat what the admin sayd
        
return PLUGIN_HANDLED;
    }
    
client_print(idprint_chat"[ZP] The zombies can not use this command!")
    return 
PLUGIN_HANDLED;
}

public 
menu_command(id,key,level,cid)
{
    
    switch( 
key )
    {
        
// place a pallet with bags
        
case 0
        {
            if ( !
zp_get_user_zombie(id) )
            {
                new 
money g_bolsas[id]
                if ( 
money )
                {
                    if ( 
get_pcvar_num(g_MSGMODE) == )
                        {
                            
set_hudmessage(001000.800.8006.02.01.01.0)
                            
show_hudmessage(id"You do not have to^nplace sandbags")
                            return 
PLUGIN_CONTINUE
                        
}
                    
client_print(idprint_chat"[ZP] You do not have to place sandbags!")
                    return 
PLUGIN_CONTINUE
                
}
                
g_bolsas[id]-= 1
                place_palletwbags
(id);
                
show_the_menu(id,level,cid);
                return 
PLUGIN_CONTINUE    
            
}
            
client_print(idprint_chat"[ZP] The zombies can not use this!!")
            return 
PLUGIN_CONTINUE    
        
}
        
    }
    
    return 
PLUGIN_HANDLED;
}



public 
place_palletwbags(id)
{
    
    if( 
palletscout == get_pcvar_num(maxpallets) )
    {
        
client_print(id,print_chat,"[ZP] For security reasons only allow %d Sandbags on the server!",get_pcvar_num(maxpallets));
        return 
PLUGIN_HANDLED;
    }
    
    
// create a new entity 
    
new ent engfunc(EngFunc_CreateNamedEntityengfunc(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 Float:xorigin[3];
    
get_user_hitpoint(id,xorigin);
    
    
set_pev(entpev_ownerid)
    
    
// check if user is aiming at the air 
    
if(engfunc(EngFunc_PointContents,xorigin) == CONTENTS_SKY)
    {
        
client_print(id,print_chat,"[ZP] You can not put sandbags in the sky!");
        return 
PLUGIN_HANDLED;
    }
    
    
    
// set sizes
    
static Float:p_mins[3], Float:p_maxs[3];
    
p_mins PALLET_MINS;
    
p_maxs PALLET_MAXS;
    
engfunc(EngFunc_SetSizeentp_minsp_maxs);
    
set_pev(entpev_minsp_mins);
    
set_pev(entpev_maxsp_maxs );
    
set_pev(entpev_absminp_mins);
    
set_pev(entpev_absmaxp_maxs );

    
    
// set the rock of origin where is user placed
    
engfunc(EngFunc_SetOriginentxorigin);
    
    
    
// 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(phealth);
    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 ..
    
palletscout++;
    
    
// confirm message
    
if ( get_pcvar_num(g_MSGMODE) == )
    {
        
set_hudmessage(001000.800.8006.02.01.01.0)
        
show_hudmessage(id"You placed a SandBag^n%i Remaining"g_bolsas[id])
        return 
PLUGIN_HANDLED
    
}
    
client_print(idprint_chat"[ZP] You have placed a Sandbag.")
    return 
PLUGIN_HANDLED;
}
    
/* ====================================================
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(idFloat:hOrigin[3]) 
{
    if ( ! 
is_user_aliveid ))
        return 
0;
    
    new 
Float:fOrigin[3], Float:fvAngle[3], Float:fvOffset[3], Float:fvOrigin[3], Float:feOrigin[3];
    new 
Float:fTemp[3];
    
    
pev(idpev_originfOrigin);
    
pev(idpev_v_anglefvAngle);
    
pev(idpev_view_ofsfvOffset);
    
    
xs_vec_add(fOriginfvOffsetfvOrigin);
    
    
engfunc(EngFunc_AngleVectorsfvAnglefeOriginfTempfTemp);
    
    
xs_vec_mul_scalar(feOrigin9999.9feOrigin);
    
xs_vec_add(fvOriginfeOriginfeOrigin);
    
    
engfunc(EngFunc_TraceLinefvOriginfeOrigin0id);
    
global_get(glb_trace_endposhOrigin);
    
    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()
{
    if( 
get_pcvar_num remove_nrnd ) == 1)
        
remove_allpalletswbags();
        
}


/* ====================================================
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);
        
    
palletscout 0;
}

public 
checkstuck() {
    if ( 
get_pcvar_num(ZPSTUCK) == )
    {
        static 
players[32], pnumplayer
        get_players
(playerspnum)
        static 
Float:origin[3]
        static 
Float:mins[3], hull
        
static Float:vec[3]
        static 
o,i
        
for(i=0i<pnumi++){
            
player players[i]
            if (
is_user_connected(player) && is_user_alive(player)) {
                
pev(playerpev_originorigin)
                
hull pev(playerpev_flags) & FL_DUCKING HULL_HEAD HULL_HUMAN
                
if (!is_hull_vacant(originhull,player) && !get_user_noclip(player) && !(pev(player,pev_solid) & SOLID_NOT)) {
                    ++
stuck[player]
                    if(
stuck[player] >= get_pcvar_num(cvar[2])) {
                        
pev(playerpev_minsmins)
                        
vec[2] = origin[2]
                        for (
o=0sizeof 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(vechull,player)) {
                                
engfunc(EngFunc_SetOriginplayervec)
                                
effects(player)
                                
set_pev(player,pev_velocity,{0.0,0.0,0.0})
                                
sizeof size
                            
}
                        }
                    }
                }
                else
                {
                    
stuck[player] = 0
                
}
            }
        }
    
    }
    
}

stock bool:is_hull_vacant(const Float:origin[3], hull,id) {
    static 
tr
    engfunc
(EngFunc_TraceHulloriginorigin0hullidtr)
    if (!
get_tr2(trTR_StartSolid) || !get_tr2(trTR_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.00.6506.01.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")
    }
}

public 
zp_extra_item_selected(playeritemid)
{
    if (
itemid == g_itemid_bolsas)
    {
        
g_bolsas[player]+= 15
        cmd_bind
(player)
        
set_task(0.3,"show_the_menu",player)
        if ( 
get_pcvar_num(g_MSGMODE) == )
        {
            
set_hudmessage(001000.800.8006.02.01.01.0)
            
show_hudmessage(player"Plugin By LARP^n    Chile 2008")
        }
    }

}

public 
cmd_bind(id)
{
    if ( 
get_pcvar_num(g_BINDMODE) == )
    {
        
client_print(idprint_chat"[ZP] You have %i sandbags, to use with the key 'L'"g_bolsas[id])
        
client_cmd(id,"bind l /pb")
        return 
PLUGIN_HANDLED
    
}
    
client_print(idprint_chat"[ZP] You have %i sandbags, to use type 'say /pb'"g_bolsas[id])
    return 
PLUGIN_HANDLED





All times are GMT -4. The time now is 07:52.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.