cerere plugin sandbags (rezolvat!)

Modificari necesare ale pluginurilor

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Zppp.Mihai94
Membru, skill 0
Membru, skill 0
Posts: 85
Joined: 26 Mar 2018, 17:51
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

08 Jan 2019, 11:44

Plugin Cerut:
| Afiseaza codul
#include <amxmodx> 
#include <amxmisc> 
#include <fakemeta> 
#include <hamsandwich> 
#include <engine> 
#include <xs> 
#include <fun> 
#include <cromchat> 
#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)
#define fm_get_user_noclip(%1) (pev(%1, pev_movetype) == MOVETYPE_NOCLIP) 

// cvars
new pnumplugin, remove_nrnd, maxpallets, phealth;

// 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 g_bag[33]

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}
}

new const g_item_name[] = { "Saci Baricada X10" }
const g_item_bolsas = 35
new g_itemid_bolsas
new ZPSTUCK, g_BINDMODE, g_MSGMODE

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


public plugin_init() 
{
/* Register the plugin */
//register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
	
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_name, g_item_bolsas, ZP_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","150"); // 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");
//cvar[0] = register_cvar("zp_autounstuck","1")
cvar[1] = register_cvar("zp_pb_stuckeffects","1")
cvar[2] = register_cvar("zp_pb_stuckwait","7")
	
register_clcmd("say /buypb","gbuy"); 
register_clcmd("say_team /buypb","gbuy"); 

RegisterHam(Ham_TakeDamage,"func_wall","fw_TakeDamage"); 
RegisterHam(Ham_Killed, "func_wall", "fw_PlayerKilled", 1) 
CC_SetPrefix("&x04[&x01ZP Saci&x04]")
}

//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 lasermine. 
new sz_classname[32] 
entity_get_string( victim , EV_SZ_classname , sz_classname, 31 ) 
if( !equali(sz_classname,"amxx_pallets") ) 
return HAM_IGNORED; 

//Attacker is zombie 
if( zp_get_user_zombie( attacker ) ) 
return HAM_IGNORED; 

//Block Damage 
return HAM_SUPERCEDE; 
} 

public fw_PlayerKilled(victim, attacker, shouldgib) 
{ 
new sz_classname[32], Float: health 
entity_get_string( victim , EV_SZ_classname , sz_classname, charsmax(sz_classname)) 

health = entity_get_float(victim, EV_FL_health) 

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) 
//new name[32];
//get_user_name(id, name, 31);
//CC_SendMessage(0, "&x04Jucatorul &x07%s &x04a spart Sacul lui &x07%s &x04si a castigat &x075 Credite.", name); 
CC_SendMessage(attacker, "&x04Ai Primit &x075 &x04Credite Pentru Ca Ai Distrus Sacii!")
return HAM_IGNORED; 
} 
return HAM_IGNORED; 
} 


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

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_num( pnumplugin ) )
		return PLUGIN_HANDLED;
		
		
	// check if user isn't alive
	if( ! is_user_alive( id ) )
	{
		client_print( id, print_chat, "" ); //msg muerto
		return PLUGIN_HANDLED;
	}
			
	if ( !zp_get_user_zombie(id) )
	{		
		new szMenuBody[256];
		new keys;
		
		new nLen = format( szMenuBody, 255, "\ySand Bags:^n" );
		nLen += format( szMenuBody[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 += format( szMenuBody[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_menu( id, keys, szMenuBody, -1 );

		// depends what you want, if is continue will appear on chat what the admin sayd
		return PLUGIN_HANDLED;
	}
	client_print(id, print_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 < 1 ) 
                { 
                    client_print(id, print_chat, "[RoD|*] 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(id, print_chat, "[RoD|*] The zombies can not use this!!") 
            return PLUGIN_CONTINUE     
        } 
         
        // 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_bolsas[id]+= 1 
                        fm_remove_entity(ent); 
                    } 
                     
                    else 
                        client_print(id, print_chat, "[RoD|*] You are not aiming at a pallet with bags"); 
                } 
                else 
                    client_print(id, print_chat, "[RoD|*] You are not aiming at a valid entity !"); 
                     
                show_the_menu(id,level,cid); 
            } 
        } 
        */ 
         
        // remove all pallets with bags 
        /*case 2: 
        { 
            g_bolsas[id]= 0 
            remove_allpalletswbags(); 
            client_print(id,print_chat,"[AMXX] You removed all pallets with bags !"); 
            show_the_menu(id,level,cid); 
        } 
            */ 
             
    } 
     
    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_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 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_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(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); 

    set_pev(ent, pev_owner, id);
     
    // num .. 
    palletscout++; 
     
    // confirm message 
    client_print(id, print_chat, "[ZP] You have placed a Sandbags, you have %i remaining", g_bolsas[id]) 
    
    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(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()
{
	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) == 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 
            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") 
    } 
} 

public zp_extra_item_selected(player, itemid)
{
	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) == 1 )
		{
			set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0)
			show_hudmessage(player, "Plugin By LARP^n    Chile 2008")
		}
	}

}

public cmd_bind(id)
{
	if ( get_pcvar_num(g_BINDMODE) == 1 )
	{
		client_print(id, print_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(id, print_chat, "[ZP] You have %i sandbags, to use type 'say /pb'", g_bolsas[id])
	return PLUGIN_HANDLED

}

public gbuy(id) 
{ 
if ( zp_get_user_zombie(id) || !is_user_alive(id) ){ 
return PLUGIN_HANDLED 
} 

if (zp_get_user_ammo_packs(id) < g_item_bolsas) { 
client_print(id, print_chat, "You don't have enough ammo pack.") 
return PLUGIN_HANDLED 
} 

//if(!zp_core_is_zombie(id) && is_user_alive(id)) 
{ 
if(g_bag[id] > 1) 
{ 
client_print(id, print_chat, "Max Sandbags reached !!!") 
return ZP_PLUGIN_HANDLED 
} 
g_bolsas[id]+= 1 
g_bag[id]++ 
set_task(0.3,"show_the_menu",id) 
client_print(id, print_chat, "[SACI] You have %i sandbags, to use type 'say / pb'", g_bolsas[id]) 
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - g_item_bolsas) 
} 

return PLUGIN_CONTINUE 

}

Descriere (adica ce face el mai exact): am acest extra items de saci pe sv cand un zombie sparge sacii ei primesc 5 credite si primeste si un mesaj dar il poate vedea doar respectivul care este zombie si a spart sacul se poate face sa apara un mesaj in chat si sa fie vizibil de tot serverul adica sa fie vazut de toti jucatori serverului human si zombie si chiar daca sunt morti, si daca se poate face si la cei care detin VIP flagul T - - - ADMIN_LEVEL_H sa apara un mesaj asemanator dar sa primeasca credite duble adica 10 pentru fiecare sac spart. multumesc
Jucator-ul X a primit 5 credite pentru ca a distrus Sacu-l lui Y.
VIP-UL X a primit 10 credite pentru ca a distrus Sacu-l lui Y.

Serverul ruleaza (HLDS/ReHLD): rehlds
Versiune AMX Mod X: 1.8.3
Modul Serverului: zombie plague
Last edited by VLD00 on 11 Jan 2019, 20:19, edited 1 time in total.
Reason: Marcat ca "rezolvat"
RoyalServer 2
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

08 Jan 2019, 12:41

| Afiseaza codul
#include <amxmodx> 
#include <amxmisc> 
#include <fakemeta> 
#include <hamsandwich> 
#include <engine> 
#include <xs> 
#include <fun> 
#include <cromchat> 
#include <zombie_plague_special>

#pragma tabsize 0

#define VIP_ACCESS ADMIN_LEVEL_H

// 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 pnumplugin, remove_nrnd, maxpallets, phealth;

// 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 g_bag[33]

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}
}

new const g_item_name[] = { "Saci Baricada X10" }
const g_item_bolsas = 35
new g_itemid_bolsas
new ZPSTUCK, g_BINDMODE, g_MSGMODE

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


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

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_name, g_item_bolsas, ZP_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","150"); // 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");
//cvar[0] = register_cvar("zp_autounstuck","1")
cvar[1] = register_cvar("zp_pb_stuckeffects","1")
cvar[2] = register_cvar("zp_pb_stuckwait","7")

register_clcmd("say /buypb","gbuy"); 
register_clcmd("say_team /buypb","gbuy"); 

RegisterHam(Ham_TakeDamage,"func_wall","fw_TakeDamage"); 
RegisterHam(Ham_Killed, "func_wall", "fw_PlayerKilled", 1) 
CC_SetPrefix("&x04[&x01ZP Saci&x04]")
}

//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 lasermine. 
new sz_classname[32] 
entity_get_string( victim , EV_SZ_classname , sz_classname, 31 ) 
if( !equali(sz_classname,"amxx_pallets") ) 
	return HAM_IGNORED; 
	
	//Attacker is zombie 
	if( zp_get_user_zombie( attacker ) ) 
		return HAM_IGNORED; 
	
	//Block Damage 
	return HAM_SUPERCEDE; 
} 

public fw_PlayerKilled(victim, attacker, shouldgib) 
{ 
	new sz_classname[32], Float: health 
	entity_get_string( victim , EV_SZ_classname , sz_classname, charsmax(sz_classname)) 
	
	health = entity_get_float(victim, EV_FL_health) 
	
	if(equal(sz_classname, "amxx_pallets") && is_valid_ent(victim) && zp_get_user_zombie(attacker) && health <= 0.0) 
	{
		new name[32]
		get_user_name(attacker, name, 31);
		if(!(get_user_flags(attacker)&VIP_ACCESS))
		{
			zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 5) 
			CC_SendMessage(0, "&x04%s ai Primit &x075 &x04Credite Pentru Ca A Distrus Sacii!", name);
		}
		else
		{
			zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 10) 
			CC_SendMessage(0, "(VIP)&x04 %s a Primit &x0710 &x04Credite Pentru Ca A Distrus Sacii!", name);
		}
		
		return HAM_IGNORED; 
	} 
	return HAM_IGNORED; 
} 


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

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_num( pnumplugin ) )
		return PLUGIN_HANDLED;
	
	
	// check if user isn't alive
	if( ! is_user_alive( id ) )
	{
		client_print( id, print_chat, "" ); //msg muerto
		return PLUGIN_HANDLED;
	}
	
	if ( !zp_get_user_zombie(id) )
	{		
		new szMenuBody[256];
		new keys;
		
		new nLen = format( szMenuBody, 255, "\ySand Bags:^n" );
		nLen += format( szMenuBody[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 += format( szMenuBody[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_menu( id, keys, szMenuBody, -1 );
		
		// depends what you want, if is continue will appear on chat what the admin sayd
		return PLUGIN_HANDLED;
	}
	client_print(id, print_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 < 1 ) 
				{ 
					client_print(id, print_chat, "[RoD|*] 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(id, print_chat, "[RoD|*] The zombies can not use this!!") 
			return PLUGIN_CONTINUE     
		} 
		
		// 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_bolsas[id]+= 1 
					fm_remove_entity(ent); 
				} 
				
				else 
					client_print(id, print_chat, "[RoD|*] You are not aiming at a pallet with bags"); 
				} 
				else 
					client_print(id, print_chat, "[RoD|*] You are not aiming at a valid entity !"); 
				
				show_the_menu(id,level,cid); 
			} 
		} 
		*/ 
		
		// remove all pallets with bags 
		/*case 2: 
	{ 
		g_bolsas[id]= 0 
		remove_allpalletswbags(); 
		client_print(id,print_chat,"[AMXX] You removed all pallets with bags !"); 
		show_the_menu(id,level,cid); 
	} 
	*/ 
	
} 

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_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 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_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(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); 

set_pev(ent, pev_owner, id);

// num .. 
palletscout++; 

// confirm message 
client_print(id, print_chat, "[ZP] You have placed a Sandbags, you have %i remaining", g_bolsas[id]) 

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(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()
{
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) == 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 
			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") 
	} 
} 

public zp_extra_item_selected(player, itemid)
{
	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) == 1 )
		{
			set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0)
			show_hudmessage(player, "Plugin By LARP^n    Chile 2008")
		}
	}
	
}

public cmd_bind(id)
{
	if ( get_pcvar_num(g_BINDMODE) == 1 )
	{
		client_print(id, print_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(id, print_chat, "[ZP] You have %i sandbags, to use type 'say /pb'", g_bolsas[id])
	return PLUGIN_HANDLED
	
}

public gbuy(id) 
{ 
	if ( zp_get_user_zombie(id) || !is_user_alive(id) ){ 
		return PLUGIN_HANDLED 
	} 
	
	if (zp_get_user_ammo_packs(id) < g_item_bolsas) { 
		client_print(id, print_chat, "You don't have enough ammo pack.") 
		return PLUGIN_HANDLED 
	} 
	
	//if(!zp_core_is_zombie(id) && is_user_alive(id)) 
{ 
	if(g_bag[id] > 1) 
	{ 
		client_print(id, print_chat, "Max Sandbags reached !!!") 
		return ZP_PLUGIN_HANDLED 
	} 
	g_bolsas[id]+= 1 
	g_bag[id]++ 
	set_task(0.3,"show_the_menu",id) 
	client_print(id, print_chat, "[SACI] You have %i sandbags, to use type 'say / pb'", g_bolsas[id]) 
	zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - g_item_bolsas) 
} 

return PLUGIN_CONTINUE 

}
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
Zppp.Mihai94
Membru, skill 0
Membru, skill 0
Posts: 85
Joined: 26 Mar 2018, 17:51
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

08 Jan 2019, 14:36

merge perfect inca ceva se poate face sa apara asa mesajul

Jucatorul X a distrus sacii lui Y si a primit 5 credite!~
la feli si pentru VIP
adica sa apara numele celui care a spart sacul si celui care a pus sacii.
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

08 Jan 2019, 19:36

| Afiseaza codul
#include <amxmodx> 
#include <amxmisc> 
#include <fakemeta> 
#include <hamsandwich> 
#include <engine> 
#include <xs> 
#include <fun> 
#include <cromchat> 
#include <zombie_plague_special>

#pragma tabsize 0

#define VIP_ACCESS ADMIN_LEVEL_H

// 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 pnumplugin, remove_nrnd, maxpallets, phealth;

// 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 g_bag[33]

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}
}

new const g_item_name[] = { "Saci Baricada X10" }
const g_item_bolsas = 35
new g_itemid_bolsas
new ZPSTUCK, g_BINDMODE, g_MSGMODE

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

new OWNER


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

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_name, g_item_bolsas, ZP_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","150"); // 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");
//cvar[0] = register_cvar("zp_autounstuck","1")
cvar[1] = register_cvar("zp_pb_stuckeffects","1")
cvar[2] = register_cvar("zp_pb_stuckwait","7")

register_clcmd("say /buypb","gbuy"); 
register_clcmd("say_team /buypb","gbuy"); 

RegisterHam(Ham_TakeDamage,"func_wall","fw_TakeDamage"); 
RegisterHam(Ham_Killed, "func_wall", "fw_PlayerKilled", 1) 
CC_SetPrefix("&x04[&x01ZP Saci&x04]")
}

//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 lasermine. 
new sz_classname[32] 
entity_get_string( victim , EV_SZ_classname , sz_classname, 31 ) 
if( !equali(sz_classname,"amxx_pallets") ) 
	return HAM_IGNORED; 
	
	//Attacker is zombie 
	if( zp_get_user_zombie( attacker ) ) 
		return HAM_IGNORED; 
	
	//Block Damage 
	return HAM_SUPERCEDE; 
} 

public fw_PlayerKilled(victim, attacker, shouldgib) 
{ 
	new sz_classname[32], Float: health 
	entity_get_string( victim , EV_SZ_classname , sz_classname, charsmax(sz_classname)) 
	
	health = entity_get_float(victim, EV_FL_health) 
	
	if(equal(sz_classname, "amxx_pallets") && is_valid_ent(victim) && zp_get_user_zombie(attacker) && health <= 0.0) 
	{
		new name[32],name2[32]
		get_user_name(attacker, name, 31);
		get_user_name(OWNER, name2, 31);
		if(!(get_user_flags(attacker)&VIP_ACCESS))
		{
			zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 5) 
			CC_SendMessage(0, "&x04%s ai Primit &x075 &x04Credite Pentru Ca A Distrus Sacii lu %s!", name,name2);
		}
		else
		{
			zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 10) 
			CC_SendMessage(0, "(VIP)&x04 %s a Primit &x0710 &x04Credite Pentru Ca A Distrus Sacii lu %s!", name,name2);
		}
		
		return HAM_IGNORED; 
	} 
	return HAM_IGNORED; 
} 


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

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_num( pnumplugin ) )
		return PLUGIN_HANDLED;
	
	
	// check if user isn't alive
	if( ! is_user_alive( id ) )
	{
		client_print( id, print_chat, "" ); //msg muerto
		return PLUGIN_HANDLED;
	}
	
	if ( !zp_get_user_zombie(id) )
	{		
		new szMenuBody[256];
		new keys;
		
		new nLen = format( szMenuBody, 255, "\ySand Bags:^n" );
		nLen += format( szMenuBody[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 += format( szMenuBody[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_menu( id, keys, szMenuBody, -1 );
		
		// depends what you want, if is continue will appear on chat what the admin sayd
		return PLUGIN_HANDLED;
	}
	client_print(id, print_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 < 1 ) 
				{ 
					client_print(id, print_chat, "[RoD|*] 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(id, print_chat, "[RoD|*] The zombies can not use this!!") 
			return PLUGIN_CONTINUE     
		} 
		
		// 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_bolsas[id]+= 1 
					fm_remove_entity(ent); 
				} 
				
				else 
					client_print(id, print_chat, "[RoD|*] You are not aiming at a pallet with bags"); 
				} 
				else 
					client_print(id, print_chat, "[RoD|*] You are not aiming at a valid entity !"); 
				
				show_the_menu(id,level,cid); 
			} 
		} 
		*/ 
		
		// remove all pallets with bags 
		/*case 2: 
	{ 
		g_bolsas[id]= 0 
		remove_allpalletswbags(); 
		client_print(id,print_chat,"[AMXX] You removed all pallets with bags !"); 
		show_the_menu(id,level,cid); 
	} 
	*/ 
	
} 

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_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 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_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(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); 

OWNER=set_pev(ent, pev_owner, id);

// num .. 
palletscout++; 

// confirm message 
client_print(id, print_chat, "[ZP] You have placed a Sandbags, you have %i remaining", g_bolsas[id]) 

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(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()
{
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) == 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 
			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") 
	} 
} 

public zp_extra_item_selected(player, itemid)
{
	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) == 1 )
		{
			set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0)
			show_hudmessage(player, "Plugin By LARP^n    Chile 2008")
		}
	}
	
}

public cmd_bind(id)
{
	if ( get_pcvar_num(g_BINDMODE) == 1 )
	{
		client_print(id, print_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(id, print_chat, "[ZP] You have %i sandbags, to use type 'say /pb'", g_bolsas[id])
	return PLUGIN_HANDLED
	
}

public gbuy(id) 
{ 
	if ( zp_get_user_zombie(id) || !is_user_alive(id) ){ 
		return PLUGIN_HANDLED 
	} 
	
	if (zp_get_user_ammo_packs(id) < g_item_bolsas) { 
		client_print(id, print_chat, "You don't have enough ammo pack.") 
		return PLUGIN_HANDLED 
	} 
	
	//if(!zp_core_is_zombie(id) && is_user_alive(id)) 
{ 
	if(g_bag[id] > 1) 
	{ 
		client_print(id, print_chat, "Max Sandbags reached !!!") 
		return ZP_PLUGIN_HANDLED 
	} 
	g_bolsas[id]+= 1 
	g_bag[id]++ 
	set_task(0.3,"show_the_menu",id) 
	client_print(id, print_chat, "[SACI] You have %i sandbags, to use type 'say / pb'", g_bolsas[id]) 
	zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - g_item_bolsas) 
} 

return PLUGIN_CONTINUE 

}
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
Zppp.Mihai94
Membru, skill 0
Membru, skill 0
Posts: 85
Joined: 26 Mar 2018, 17:51
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

08 Jan 2019, 21:30

este o mica problema, apare numele de la server in loc de numele ownerului.
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

08 Jan 2019, 22:01

| Afiseaza codul
#include <amxmodx> 
#include <amxmisc> 
#include <fakemeta> 
#include <hamsandwich> 
#include <engine> 
#include <xs> 
#include <fun> 
#include <cromchat> 
#include <zombie_plague_special>

#pragma tabsize 0

#define VIP_ACCESS ADMIN_LEVEL_H

// 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 pnumplugin, remove_nrnd, maxpallets, phealth;

// 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 g_bag[33]

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}
}

new const g_item_name[] = { "Saci Baricada X10" }
const g_item_bolsas = 35
new g_itemid_bolsas
new ZPSTUCK, g_BINDMODE, g_MSGMODE

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

new OWNER,ent


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

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_name, g_item_bolsas, ZP_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","150"); // 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");
//cvar[0] = register_cvar("zp_autounstuck","1")
cvar[1] = register_cvar("zp_pb_stuckeffects","1")
cvar[2] = register_cvar("zp_pb_stuckwait","7")

register_clcmd("say /buypb","gbuy"); 
register_clcmd("say_team /buypb","gbuy"); 

RegisterHam(Ham_TakeDamage,"func_wall","fw_TakeDamage"); 
RegisterHam(Ham_Killed, "func_wall", "fw_PlayerKilled", 1) 
CC_SetPrefix("&x04[&x01ZP Saci&x04]")
}

//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 lasermine. 
new sz_classname[32] 
entity_get_string( victim , EV_SZ_classname , sz_classname, 31 ) 
if( !equali(sz_classname,"amxx_pallets") ) 
	return HAM_IGNORED; 
	
	//Attacker is zombie 
	if( zp_get_user_zombie( attacker ) ) 
		return HAM_IGNORED; 
	
	//Block Damage 
	return HAM_SUPERCEDE; 
} 

public fw_PlayerKilled(victim, attacker, shouldgib) 
{ 
	new sz_classname[32], Float: health 
	entity_get_string( victim , EV_SZ_classname , sz_classname, charsmax(sz_classname)) 
	
	health = entity_get_float(victim, EV_FL_health) 
	
	if(equal(sz_classname, "amxx_pallets") && is_valid_ent(victim) && zp_get_user_zombie(attacker) && health <= 0.0) 
	{
		new name[32],name2[32]
		get_user_name(attacker, name, 31);
new OWNER=pev(ent,pev_owner)
		if(!is_user_bot(OWNER)||!is_user_hltv(OWNER))
		{
get_user_name(OWNER, name2, 31);
}
		if(!(get_user_flags(attacker)&VIP_ACCESS))
		{
			zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 5) 
			CC_SendMessage(0, "&x04%s ai Primit &x075 &x04Credite Pentru Ca A Distrus Sacii lu %s!", name,name2);
		}
		else
		{
			zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 10) 
			CC_SendMessage(0, "(VIP)&x04 %s a Primit &x0710 &x04Credite Pentru Ca A Distrus Sacii lu %s!", name,name2);
		}
		
		return HAM_IGNORED; 
	} 
	return HAM_IGNORED; 
} 


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

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_num( pnumplugin ) )
		return PLUGIN_HANDLED;
	
	
	// check if user isn't alive
	if( ! is_user_alive( id ) )
	{
		client_print( id, print_chat, "" ); //msg muerto
		return PLUGIN_HANDLED;
	}
	
	if ( !zp_get_user_zombie(id) )
	{		
		new szMenuBody[256];
		new keys;
		
		new nLen = format( szMenuBody, 255, "\ySand Bags:^n" );
		nLen += format( szMenuBody[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 += format( szMenuBody[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_menu( id, keys, szMenuBody, -1 );
		
		// depends what you want, if is continue will appear on chat what the admin sayd
		return PLUGIN_HANDLED;
	}
	client_print(id, print_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 < 1 ) 
				{ 
					client_print(id, print_chat, "[RoD|*] 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(id, print_chat, "[RoD|*] The zombies can not use this!!") 
			return PLUGIN_CONTINUE     
		} 
		
		// 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_bolsas[id]+= 1 
					fm_remove_entity(ent); 
				} 
				
				else 
					client_print(id, print_chat, "[RoD|*] You are not aiming at a pallet with bags"); 
				} 
				else 
					client_print(id, print_chat, "[RoD|*] You are not aiming at a valid entity !"); 
				
				show_the_menu(id,level,cid); 
			} 
		} 
		*/ 
		
		// remove all pallets with bags 
		/*case 2: 
	{ 
		g_bolsas[id]= 0 
		remove_allpalletswbags(); 
		client_print(id,print_chat,"[AMXX] You removed all pallets with bags !"); 
		show_the_menu(id,level,cid); 
	} 
	*/ 
	
} 

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  
ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_wall")); 

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

if( ent <= get_maxplayers() )	return FMRES_IGNORED;


// 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_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(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); 

/*OWNER=*/set_pev(ent, pev_owner, id);

// num .. 
palletscout++; 

// confirm message 
client_print(id, print_chat, "[ZP] You have placed a Sandbags, you have %i remaining", g_bolsas[id]) 

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(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()
{
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) == 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 
			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") 
	} 
} 

public zp_extra_item_selected(player, itemid)
{
	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) == 1 )
		{
			set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0)
			show_hudmessage(player, "Plugin By LARP^n    Chile 2008")
		}
	}
	
}

public cmd_bind(id)
{
	if ( get_pcvar_num(g_BINDMODE) == 1 )
	{
		client_print(id, print_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(id, print_chat, "[ZP] You have %i sandbags, to use type 'say /pb'", g_bolsas[id])
	return PLUGIN_HANDLED
	
}

public gbuy(id) 
{ 
	if ( zp_get_user_zombie(id) || !is_user_alive(id) ){ 
		return PLUGIN_HANDLED 
	} 
	
	if (zp_get_user_ammo_packs(id) < g_item_bolsas) { 
		client_print(id, print_chat, "You don't have enough ammo pack.") 
		return PLUGIN_HANDLED 
	} 
	
	//if(!zp_core_is_zombie(id) && is_user_alive(id)) 
{ 
	if(g_bag[id] > 1) 
	{ 
		client_print(id, print_chat, "Max Sandbags reached !!!") 
		return ZP_PLUGIN_HANDLED 
	} 
	g_bolsas[id]+= 1 
	g_bag[id]++ 
	set_task(0.3,"show_the_menu",id) 
	client_print(id, print_chat, "[SACI] You have %i sandbags, to use type 'say / pb'", g_bolsas[id]) 
	zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - g_item_bolsas) 
} 

return PLUGIN_CONTINUE 

}
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
Zppp.Mihai94
Membru, skill 0
Membru, skill 0
Posts: 85
Joined: 26 Mar 2018, 17:51
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

09 Jan 2019, 12:00

se poate rezolva acel warning?
zp_extra_sandbags.sma(551) : warning 203: symbol is never used: "OWNER"
Header size: 1820 bytes
Code size: 15712 bytes
Data size: 9404 bytes
Stack/heap size: 16384 bytes; estimated max. usage=782 cells (3128 bytes)
Total requirements: 43320 bytes

1 Warning.
Done.

imi da eroare in consola la sv. in rest acuma merge totul normal.

se poate remedia eroarea aceasta, o primesc in consola la server.

Displaying debug trace (plugin "zp_extra_sandbags.amxx", version "1.1")
L 01/09/2019 - 15:48:44: [AMXX] Run time error 10: native error (native "pev")
L 01/09/2019 - 15:48:44: [AMXX] [0] o8hl805w.sma.p::fw_PlayerKilled (line 129)
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

09 Jan 2019, 18:15

| Afiseaza codul
[code]
#include <amxmodx> 
#include <amxmisc> 
#include <fakemeta> 
#include <hamsandwich> 
#include <engine> 
#include <xs> 
#include <fun> 
#include <cromchat> 
#include <zombie_plague_special>

#pragma tabsize 0

#define VIP_ACCESS ADMIN_LEVEL_H

// 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 pnumplugin, remove_nrnd, maxpallets, phealth;

// 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 g_bag[33]

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}
}

new const g_item_name[] = { "Saci Baricada X10" }
const g_item_bolsas = 35
new g_itemid_bolsas
new ZPSTUCK, g_BINDMODE, g_MSGMODE

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

new ent/*,OWNER*/


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

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_name, g_item_bolsas, ZP_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","150"); // 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");
//cvar[0] = register_cvar("zp_autounstuck","1")
cvar[1] = register_cvar("zp_pb_stuckeffects","1")
cvar[2] = register_cvar("zp_pb_stuckwait","7")

register_clcmd("say /buypb","gbuy"); 
register_clcmd("say_team /buypb","gbuy"); 

RegisterHam(Ham_TakeDamage,"func_wall","fw_TakeDamage"); 
RegisterHam(Ham_Killed, "func_wall", "fw_PlayerKilled", 1) 
CC_SetPrefix("&x04[&x01ZP Saci&x04]")
}

//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 lasermine. 
new sz_classname[32] 
entity_get_string( victim , EV_SZ_classname , sz_classname, 31 ) 
if( !equali(sz_classname,"amxx_pallets") ) 
	return HAM_IGNORED; 
	
	//Attacker is zombie 
	if( zp_get_user_zombie( attacker ) ) 
		return HAM_IGNORED; 
	
	//Block Damage 
	return HAM_SUPERCEDE; 
} 

public fw_PlayerKilled(victim, attacker, shouldgib) 
{ 
	new sz_classname[32], Float: health 
	entity_get_string( victim , EV_SZ_classname , sz_classname, charsmax(sz_classname)) 
	
	health = entity_get_float(victim, EV_FL_health) 
	
	if(equal(sz_classname, "amxx_pallets") && is_valid_ent(victim) && zp_get_user_zombie(attacker) && health <= 0.0 &&pev_valid(ent)) 
	{
		new name[32],name2[32]
		get_user_name(attacker, name, 31);
new OWNER=pev(ent,pev_owner)
		if(!is_user_bot(OWNER)||!is_user_hltv(OWNER))
		{
get_user_name(OWNER, name2, 31);
}
		if(!(get_user_flags(attacker)&VIP_ACCESS))
		{
			zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 5) 
			CC_SendMessage(0, "&x04%s ai Primit &x075 &x04Credite Pentru Ca A Distrus Sacii lu %s!", name,name2);
		}
		else
		{
			zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 10) 
			CC_SendMessage(0, "(VIP)&x04 %s a Primit &x0710 &x04Credite Pentru Ca A Distrus Sacii lu %s!", name,name2);
		}
		
		return HAM_IGNORED; 
	} 
	return HAM_IGNORED; 
} 


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

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_num( pnumplugin ) )
		return PLUGIN_HANDLED;
	
	
	// check if user isn't alive
	if( ! is_user_alive( id ) )
	{
		client_print( id, print_chat, "" ); //msg muerto
		return PLUGIN_HANDLED;
	}
	
	if ( !zp_get_user_zombie(id) )
	{		
		new szMenuBody[256];
		new keys;
		
		new nLen = format( szMenuBody, 255, "\ySand Bags:^n" );
		nLen += format( szMenuBody[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 += format( szMenuBody[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_menu( id, keys, szMenuBody, -1 );
		
		// depends what you want, if is continue will appear on chat what the admin sayd
		return PLUGIN_HANDLED;
	}
	client_print(id, print_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 < 1 ) 
				{ 
					client_print(id, print_chat, "[RoD|*] 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(id, print_chat, "[RoD|*] The zombies can not use this!!") 
			return PLUGIN_CONTINUE     
		} 
		
		// 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_bolsas[id]+= 1 
					fm_remove_entity(ent); 
				} 
				
				else 
					client_print(id, print_chat, "[RoD|*] You are not aiming at a pallet with bags"); 
				} 
				else 
					client_print(id, print_chat, "[RoD|*] You are not aiming at a valid entity !"); 
				
				show_the_menu(id,level,cid); 
			} 
		} 
		*/ 
		
		// remove all pallets with bags 
		/*case 2: 
	{ 
		g_bolsas[id]= 0 
		remove_allpalletswbags(); 
		client_print(id,print_chat,"[AMXX] You removed all pallets with bags !"); 
		show_the_menu(id,level,cid); 
	} 
	*/ 
	
} 

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  
ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_wall")); 

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

if( ent <= get_maxplayers() )	return FMRES_IGNORED;


// 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_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(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); 

/*OWNER=*/set_pev(ent, pev_owner, id);

// num .. 
palletscout++; 

// confirm message 
client_print(id, print_chat, "[ZP] You have placed a Sandbags, you have %i remaining", g_bolsas[id]) 

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(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()
{
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) == 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 
			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") 
	} 
} 

public zp_extra_item_selected(player, itemid)
{
	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) == 1 )
		{
			set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0)
			show_hudmessage(player, "Plugin By LARP^n    Chile 2008")
		}
	}
	
}

public cmd_bind(id)
{
	if ( get_pcvar_num(g_BINDMODE) == 1 )
	{
		client_print(id, print_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(id, print_chat, "[ZP] You have %i sandbags, to use type 'say /pb'", g_bolsas[id])
	return PLUGIN_HANDLED
	
}

public gbuy(id) 
{ 
	if ( zp_get_user_zombie(id) || !is_user_alive(id) ){ 
		return PLUGIN_HANDLED 
	} 
	
	if (zp_get_user_ammo_packs(id) < g_item_bolsas) { 
		client_print(id, print_chat, "You don't have enough ammo pack.") 
		return PLUGIN_HANDLED 
	} 
	
	//if(!zp_core_is_zombie(id) && is_user_alive(id)) 
{ 
	if(g_bag[id] > 1) 
	{ 
		client_print(id, print_chat, "Max Sandbags reached !!!") 
		return ZP_PLUGIN_HANDLED 
	} 
	g_bolsas[id]+= 1 
	g_bag[id]++ 
	set_task(0.3,"show_the_menu",id) 
	client_print(id, print_chat, "[SACI] You have %i sandbags, to use type 'say / pb'", g_bolsas[id]) 
	zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - g_item_bolsas) 
} 

return PLUGIN_CONTINUE 

}
[/code]
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
Zppp.Mihai94
Membru, skill 0
Membru, skill 0
Posts: 85
Joined: 26 Mar 2018, 17:51
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

10 Jan 2019, 16:34

Adryyy se poate face ca aunci cand un human planteaza un laser-mine sa nu mai poata pune saci? sis a apara un mesaj in chat Nu poti pune saci, daca ai deja pus lasermine.
Last edited by Zppp.Mihai94 on 11 Jan 2019, 09:45, edited 2 times in total.
User avatar
Laurentiu P.
Fost moderator
Fost moderator
Posts: 2549
Joined: 10 Jul 2013, 21:26
Detinator Steam: Da
Reputatie: Fost super moderator
Fond eXtream: 100
Has thanked: 26 times
Been thanked: 62 times
Contact:

11 Jan 2019, 09:22

Zppp.Mihai94 foloseste functia de „edit” cand mai ai ceva de adaugat.
no...
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

11 Jan 2019, 16:42

dă plg de lasere
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
Zppp.Mihai94
Membru, skill 0
Membru, skill 0
Posts: 85
Joined: 26 Mar 2018, 17:51
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

11 Jan 2019, 17:36

| Afiseaza codul
#include <amxmodx> 
#include <fakemeta> 
#include <hamsandwich> 
#include <xs> 
#include <zombie_plague_special>
#include <engine>
#include <cromchat>

#if defined BIOHAZARD_SUPPORT 
#include <biohazard> 
#endif 

#if defined UL_MONEY_SUPPORT 
#include <money_ul> 
#endif 

#define VIP_ACCESS ADMIN_LEVEL_H

#if AMXX_VERSION_NUM < 180 
#assert AMX Mod X v1.8.0 or greater library required! 
#endif 

#if defined BIOHAZARD_SUPPORT 
#define PLUGIN "LTM for BIOHAZARD" 
#define VERSION "+1.4" 
#else 
#define PLUGIN "Laser/Tripmine Entity" 
#define VERSION "2.3" 
#endif 
#define AUTHOR "SandStriker" 

#define RemoveEntity(%1) engfunc(EngFunc_RemoveEntity,%1) 
//#define ACCESSLEVEL ADMIN_LEVEL_H 
#define TASK_PLANT 15100 
#define TASK_RESET 15500 
#define TASK_RELEASE 15900 

#define LASERMINE_TEAM pev_iuser1//EV_INT_iuser1 
#define LASERMINE_OWNER pev_iuser2 //EV_INT_iuser3 
#define LASERMINE_STEP pev_iuser3 
#define LASERMINE_HITING pev_iuser4 
#define LASERMINE_COUNT pev_fuser1 

#define LASERMINE_POWERUP pev_fuser2 
#define LASERMINE_BEAMTHINK pev_fuser3 

#define LASERMINE_BEAMENDPOINT pev_vuser1 
#define MAX_MINES 10 
#define MODE_LASERMINE 0 
#define OFFSET_TEAM 114 
#define OFFSET_MONEY 115 
#define OFFSET_DEATH 444 

#define cs_get_user_team(%1) CsTeams:get_offset_value(%1,OFFSET_TEAM) 
#define cs_get_user_deaths(%1) get_offset_value(%1,OFFSET_DEATH) 
#define cs_get_user_money(%1) get_offset_value(%1,OFFSET_MONEY) 
#define cs_set_user_money(%1,%2) set_offset_value(%1,OFFSET_MONEY,%2) 



enum CsTeams { 
CS_TEAM_UNASSIGNED = 0, 
CS_TEAM_T = 1, 
CS_TEAM_CT = 2, 
CS_TEAM_SPECTATOR = 3 
}; 

enum tripmine_e { 
TRIPMINE_IDLE1 = 0, 
TRIPMINE_IDLE2, 
TRIPMINE_ARM1, 
TRIPMINE_ARM2, 
TRIPMINE_FIDGET, 
TRIPMINE_HOLSTER, 
TRIPMINE_DRAW, 
TRIPMINE_WORLD, 
TRIPMINE_GROUND, 
}; 

enum 
{ 
POWERUP_THINK, 
BEAMBREAK_THINK, 
EXPLOSE_THINK 
}; 

enum 
{ 
POWERUP_SOUND, 
ACTIVATE_SOUND, 
STOP_SOUND 
}; 

new const 
ENT_MODELS[] = "models/zombie_plague/LaserMines/v_laser_mine.mdl", 
ENT_SOUND1[]	= "weapons/mine_deploy.wav", 
ENT_SOUND2[]	= "weapons/mine_charge.wav", 
ENT_SOUND3[]	= "weapons/mine_activate.wav", 
ENT_SOUND4[]	= "debris/beamstart9.wav", 
ENT_SOUND5[]	= "items/gunpickup2.wav", 
ENT_SOUND6[]	= "debris/bustglass1.wav", 
ENT_SOUND7[]	= "debris/bustglass2.wav", 
ENT_SPRITE1[]   = "sprites/lgtning.spr", 
ENT_SPRITE2[]   = "sprites/lm_explode.spr"; 

new const 
ENT_CLASS_NAME[] = "lasermine", 
//ENT_CLASS_NAME2[] = "info_target", 
ENT_CLASS_NAME3[] = "func_breakable"; 

new const 
#if defined BIOHAZARD_SUPPORT 
CHATTAG[] = "[BioLaser]", 
#else 
CHATTAG[] = "[ZP][LM]", 
#endif 
//STR_MINEDETNATED[] = "Mina ta a fost detonata.", 
//STR_MINEDETNATED2[] = "a detonat mina ta.", 
STR_NOTACTIVE[] = "Laserele nu sunt activate.", 
STR_DONTHAVEMINE[] = "Nu ai nici un laser.", 
//STR_CANTDEPLOY[] = "Echipa ta nu paote planta lasere!", 
STR_MAXDEPLOY[] = "Numarul maxim de lasere a fost atins.", 
STR_MANYPPL[] = "Prea multe lasere in echipa ta...", 
STR_PLANTWALL[] = "Trebuie sa plantezi laserul pe zid!", 
STR_REF[] = "Refer to a lasermine rule with this server. say 'lasermine'", 
#if defined BIOHAZARD_SUPPORT 
STR_CBT[] = "Esti Zombie!Nu poti cumpara si planta un laser.", 
#else 
STR_CBT[] = "Echipa ta nu poate cumpara si planta lasere!", 
#endif 
STR_CANTBUY[] = "Nu poti cumpara pe acest server.", 
STR_HAVEMAX[] = "Ai numarul maxim de lasere.", 
STR_NOMONEY[] = "Nu ai destui bani sa cumperi un laser! ($", 
STR_NEEDED[] = "needed)", 
STR_DELAY[] = "Poti cumpara si planta lasere in", 
STR_SECONDS[] = "secunde.", 
STR_BOUGHT[] = "Tocmai ai cumparat un laser.", 
STR_STATE[] = "LaserMine Detinute:", 
STR_NOACCESS[] = "Nu ai acces la aceasta comanda."; 

new g_EntMine; 
new beam, boom 
new 
g_LENABLE,g_LFMONEY,g_LAMMO,g_LDMG, 
g_LTMAX,g_LCOST,g_LHEALTH,g_LMODE,g_LRADIUS,g_LRDMG,g_LFF,g_LCBT; 
new 
g_LDELAY,/*g_LTHINK,*/g_LVISIBLE, 
g_LSTAMMO,g_LACCESS,g_LGLOW,g_LDMGMODE,g_LCLMODE,g_LCBRIGHT,g_LDSEC,g_LCMDMODE,g_LBUYMODE,g_NEMROUND,g_SURVROUND, g_SNIPROUND, g_ASSASROUND; 

new g_dcount[33],g_nowtime,g_MaxPL 
new bool:g_settinglaser[33] 
new g_msgDeathMsg,g_msgScoreInfo,g_msgDamage,g_msgStatusText,g_msgMoney; 
new Float:plspeed[33] 
new plsetting[33] 
new g_havemine[33]; 
new g_deployed[33]; 

public plugin_init() { 
register_plugin(PLUGIN, VERSION, AUTHOR); 

CC_SetPrefix("&x04[&x01ZP Laser&x04]")

// Add your code here... 
register_clcmd("+setlaser","CreateLaserMine_Progress_b"); 
register_clcmd("-setlaser","StopCreateLaserMine"); 
register_clcmd("+dellaser","ReturnLaserMine_Progress"); 
register_clcmd("-dellaser","StopReturnLaserMine"); 
register_clcmd("say","say_lasermine"); 
register_clcmd("buy_lasermine","BuyLasermine"); 

#if defined BIOHAZARD_SUPPORT 
g_LENABLE = register_cvar("bio_ltm","1"); 
g_LACCESS = register_cvar("bio_ltm_acs","0"); //0 all, 1 admin 
g_LMODE = register_cvar("bio_ltm_mode","0"); //0 lasermine, 1 tripmine 
g_LAMMO = register_cvar("bio_ltm_ammo","2"); 
g_LDMG = register_cvar("bio_ltm_dmg","100000"); //laser hit dmg 
g_LCOST = register_cvar("bio_ltm_cost","6000"); 
g_LFMONEY = register_cvar("bio_ltm_fragmoney","400"); 
g_LHEALTH = register_cvar("bio_ltm_health","850"); 
g_LTMAX = register_cvar("bio_ltm_teammax","15"); 
g_LRADIUS = register_cvar("bio_ltm_radius","320.0"); 
g_LRDMG = register_cvar("bio_ltm_rdmg","10000"); //radius damage 
g_LFF = register_cvar("bio_ltm_ff","0"); 
g_LCBT = register_cvar("bio_ltm_cbt","ALL"); 
g_LBUYMODE = register_cvar("bio_ltm_buymode","1"); 
g_LDELAY = register_cvar("bio_ltm_delay","31"); 
//g_LTHINK = register_cvar("bio_ltm_think","0.01"); 
g_LVISIBLE = register_cvar("bio_ltm_line","1"); 
g_LGLOW = register_cvar("bio_ltm_glow","0"); 
g_LCBRIGHT = register_cvar("bio_ltm_bright","255"); //laser line brightness. 
g_LCLMODE = register_cvar("bio_ltm_color","0"); //0 is team color,1 is green 
g_LDMGMODE = register_cvar("bio_ltm_ldmgmode","0"); //0 - frame dmg, 1 - once dmg, 2 - 1 second dmg 
g_LDSEC = register_cvar("bio_ltm_ldmgseconds","1"); //mode 2 only, damage / seconds. default 1 (sec) 
g_LSTAMMO = register_cvar("bio_ltm_startammo","2"); 
g_LCMDMODE = register_cvar("bio_ltm_cmdmode","1"); //0 is +USE key, 1 is bind, 2 is each. 
#else 
g_LENABLE = register_cvar("amx_ltm","1"); 
g_LACCESS = register_cvar("amx_ltm_acs","0"); //0 all, 1 admin 
g_LMODE = register_cvar("amx_ltm_mode","0"); //0 lasermine, 1 tripmine 
g_LAMMO = register_cvar("amx_ltm_ammo","2"); 
g_LDMG = register_cvar("amx_ltm_dmg","100000"); //laser hit dmg 
g_LCOST = register_cvar("amx_ltm_cost","0"); 
g_LFMONEY = register_cvar("amx_ltm_fragmoney","400"); 
g_LHEALTH = register_cvar("amx_ltm_health","850"); 
g_LTMAX = register_cvar("amx_ltm_teammax","15"); 
g_LRADIUS = register_cvar("amx_ltm_radius","320.0"); 
g_LRDMG = register_cvar("amx_ltm_rdmg","10000"); //radius damage 
g_LFF = register_cvar("amx_ltm_ff","0"); 
g_LCBT = register_cvar("amx_ltm_cbt","ALL"); 
g_LBUYMODE = register_cvar("amx_ltm_buymode","1"); 
g_LDELAY = register_cvar("amx_ltm_delay","33"); 
//g_LTHINK = register_cvar("amx_ltm_think","0.01") 
g_LVISIBLE = register_cvar("amx_ltm_line","1"); 
g_LGLOW = register_cvar("amx_ltm_glow","0"); 
g_LCBRIGHT = register_cvar("amx_ltm_bright","255"); //laser line brightness. 
g_LCLMODE = register_cvar("amx_ltm_color","0"); //0 is team color,1 is green 
g_LDMGMODE = register_cvar("amx_ltm_ldmgmode","0"); //0 - frame dmg, 1 - once dmg, 2 - 1 second dmg 
g_LDSEC = register_cvar("amx_ltm_ldmgseconds","1"); //mode 2 only, damage / seconds. default 1 (sec) 
g_LSTAMMO = register_cvar("amx_ltm_startammo","2"); 
g_LCMDMODE = register_cvar("amx_ltm_cmdmode","1"); //0 is +USE key, 1 is bind, 2 is each. 
g_NEMROUND	= register_cvar("zp_ltm_nemround","0"); 
g_SURVROUND	= register_cvar("zp_ltm_survround","1"); 
g_SNIPROUND = register_cvar("zp_ltm_snipround", "1"); 
g_ASSASROUND = register_cvar("zp_ltm_assasround", "1");
#endif 
register_event("DeathMsg", "DeathEvent", "a"); 
register_event("CurWeapon", "standing", "be", "1=1"); 
register_event("ResetHUD", "delaycount", "a"); 
register_event("ResetHUD", "newround", "b"); 
register_event("Damage","CutDeploy_onDamage","b"); 
g_msgDeathMsg = get_user_msgid("DeathMsg"); 
g_msgScoreInfo = get_user_msgid("ScoreInfo"); 
g_msgDamage = get_user_msgid("Damage"); 
g_msgStatusText = get_user_msgid("StatusText"); 
g_msgMoney = get_user_msgid("Money"); 
// -- Forward. 
register_forward(FM_Think, "ltm_Think" ); 
register_forward(FM_PlayerPostThink, "ltm_PostThink" ); 
register_forward(FM_PlayerPreThink, "ltm_PreThink"); 
RegisterHam(Ham_TakeDamage, "func_breakable", "fwHamTakeDamageBreakablePost", 1); 
} 

public plugin_precache() 
{ 
precache_sound(ENT_SOUND1); 
precache_sound(ENT_SOUND2); 
precache_sound(ENT_SOUND3); 
precache_sound(ENT_SOUND4); 
precache_sound(ENT_SOUND5); 
precache_sound(ENT_SOUND6); 
precache_sound(ENT_SOUND7); 
precache_model(ENT_MODELS); 
beam = precache_model(ENT_SPRITE1); 
boom = precache_model(ENT_SPRITE2); 

return PLUGIN_CONTINUE; 
} 

public plugin_modules() 
{ 
require_module("fakemeta"); 
require_module("cstrike"); 
//require_module("fun") 
} 

public plugin_cfg() 
{ 
g_EntMine = engfunc(EngFunc_AllocString,ENT_CLASS_NAME3); 
arrayset(g_havemine,0,sizeof(g_havemine)); 
arrayset(g_deployed,0,sizeof(g_deployed)); 
g_MaxPL = get_maxplayers(); 

new file[64]; get_localinfo("amxx_configsdir",file,63); 
#if defined BIOHAZARD_SUPPORT 
format(file, 63, "%s/bhltm_cvars.cfg", file); 
#else 
format(file, 63, "%s/ltm_cvars.cfg", file); 
#endif 
if(file_exists(file)) server_cmd("exec %s", file), server_exec(); 

} 
public fwHamTakeDamageBreakablePost(iVictim, iInflictor, iAttacker, Float:fDamage) 
{ 
if (!is_valid_ent(iVictim) || entity_get_float(iVictim, EV_FL_health) > 0.0 
|| !is_user_connected(iAttacker)) 
return HAM_IGNORED; 

static szTempString[32]; 
entity_get_string(iVictim, EV_SZ_classname, szTempString, charsmax(szTempString)); 

if (!equali(szTempString, ENT_CLASS_NAME)) 
return HAM_IGNORED; 

new ownerName[32]; 
new own = pev(iVictim,LASERMINE_OWNER); 
get_user_name(iAttacker, szTempString, charsmax(szTempString)); 
get_user_name(own, ownerName, charsmax(ownerName)); 

if(!(get_user_flags(iAttacker)&VIP_ACCESS))
{
zp_set_user_ammo_packs(iAttacker, zp_get_user_ammo_packs(iAttacker) + 10) 
CC_SendMessage(0, "&x04Jucator-ul &x07%s &x04a distrus lasermine-ul lui &x07%s &x04si a castigat &x0710 &x04Credite!",szTempString, ownerName);
}
else
{
zp_set_user_ammo_packs(iAttacker, zp_get_user_ammo_packs(iAttacker) + 20) 
CC_SendMessage(0, "&x04GoldMembr-ul &x07%s &x04a distrus lasermine-ul lui &x07%s &x04si a castigat &x0720 &x04Credite.!",szTempString, ownerName);
}	
return HAM_IGNORED; 
} 

public delaycount(id) 
{ 
g_dcount[id] = floatround(get_gametime()); 
} 

bool:CheckTime(id) 
{ 
g_nowtime = floatround(get_gametime()) - g_dcount[id]; 
if(g_nowtime >= get_pcvar_num(g_LDELAY)) 
return true; 
return false; 
} 

public CreateLaserMine_Progress_b(id) 
{ 
if(get_pcvar_num(g_LCMDMODE) != 0) 
CreateLaserMine_Progress(id); 
return PLUGIN_HANDLED; 
} 

public CreateLaserMine_Progress(id) 
{ 

if (!CreateCheck(id)) 
return PLUGIN_HANDLED; 
g_settinglaser[id] = true; 

message_begin(MSG_ONE, 108, {0,0,0}, id); 
write_byte(1); 
write_byte(0); 
message_end();

set_task(1.2, "Spawn", (TASK_PLANT + id)); 

return PLUGIN_HANDLED; 
} 

public ReturnLaserMine_Progress(id) 
{ 
new tgt,body; 
get_user_aiming(id,tgt,body); 

if(!ReturnCheck(id)) 
return PLUGIN_HANDLED; 
g_settinglaser[id] = true; 

message_begin(MSG_ONE, 108, {0,0,0}, id); 
write_byte(1); 
write_byte(0); 
message_end(); 

set_task(1.2, "ReturnMine", (TASK_RELEASE + id)); 

return PLUGIN_HANDLED; 
} 

public StopCreateLaserMine(id) 
{ 

DeleteTask(id); 
message_begin(MSG_ONE, 108, {0,0,0}, id); 
write_byte(0); 
write_byte(0); 
message_end(); 

return PLUGIN_HANDLED; 
} 

public StopReturnLaserMine(id) 
{ 

DeleteTask(id); 
message_begin(MSG_ONE, 108, {0,0,0}, id); 
write_byte(0); 
write_byte(0); 
message_end(); 

return PLUGIN_HANDLED;  
} 

public ReturnMine(id) 
{ 
id -= TASK_RELEASE; 
new tgt,body,Float:vo[3],Float:to[3]; 
get_user_aiming(id,tgt,body); 
if(!pev_valid(tgt)) return; 
pev(id,pev_origin,vo); 
pev(tgt,pev_origin,to); 
if(get_distance_f(vo,to) > 70.0) return; 

new EntityName[32]; 
pev(tgt, pev_classname, EntityName, 31); 
if(!equal(EntityName, ENT_CLASS_NAME)) return; 
if(pev(tgt,LASERMINE_OWNER) != id) return; 
RemoveEntity(tgt); 

g_havemine[id] ++; 
g_deployed[id] --; 
emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) 
ShowAmmo(id) 

return;  
} 

public Spawn( id ) 
{ 
id -= TASK_PLANT 
// motor 
new i_Ent = engfunc(EngFunc_CreateNamedEntity,g_EntMine); 
if(!i_Ent) 
{ 
client_print(id,print_chat,"[Laesrmine Debug] Can't Create Entity"); 
return PLUGIN_HANDLED_MAIN; 
} 
set_pev(i_Ent,pev_classname,ENT_CLASS_NAME); 

engfunc(EngFunc_SetModel,i_Ent,ENT_MODELS); 

set_pev(i_Ent,pev_solid,SOLID_NOT); 
set_pev(i_Ent,pev_movetype,MOVETYPE_FLY); 

set_pev(i_Ent,pev_frame,0); 
set_pev(i_Ent,pev_body,3); 
set_pev(i_Ent,pev_sequence,TRIPMINE_WORLD); 
set_pev(i_Ent,pev_framerate,0); 

set_pev(i_Ent,pev_takedamage,DAMAGE_YES); 

set_pev(i_Ent,pev_dmg,100.0); 
set_user_health(i_Ent,get_pcvar_num(g_LHEALTH)); 
new Float:vOrigin[3]; 
new Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3], 
Float:vTraceEnd[3],Float:vEntAngles[3]; 
pev( id, pev_origin, vOrigin ); 
velocity_by_aim( id, 128, vTraceDirection ); 
xs_vec_add( vTraceDirection, vOrigin, vTraceEnd ); 

engfunc( EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0 ); 

new Float:fFraction; 
get_tr2( 0, TR_flFraction, fFraction ); 


// -- We hit something! 
if ( fFraction < 1.0 ) 
{ 
// -- Save results to be used later. 
get_tr2( 0, TR_vecEndPos, vTraceEnd ); 
get_tr2( 0, TR_vecPlaneNormal, vNormal ); 
} 


xs_vec_mul_scalar( vNormal, 8.0, vNormal ); 
xs_vec_add( vTraceEnd, vNormal, vNewOrigin ); 

engfunc(EngFunc_SetSize, i_Ent, Float:{ -4.0, -4.0, -4.0 }, Float:{ 4.0, 4.0, 4.0 } ); 
engfunc(EngFunc_SetOrigin, i_Ent, vNewOrigin ); 

// -- Rotate tripmine. 
vector_to_angle(vNormal,vEntAngles ); 
set_pev(i_Ent,pev_angles,vEntAngles ); 

// -- Calculate laser end origin. 
new Float:vBeamEnd[3], Float:vTracedBeamEnd[3]; 

xs_vec_mul_scalar(vNormal, 8192.0, vNormal ); 
xs_vec_add( vNewOrigin, vNormal, vBeamEnd ); 

engfunc( EngFunc_TraceLine, vNewOrigin, vBeamEnd, IGNORE_MONSTERS, -1, 0 ); 

get_tr2( 0, TR_vecPlaneNormal, vNormal ); 
get_tr2( 0, TR_vecEndPos, vTracedBeamEnd ); 

// -- Save results to be used later. 
set_pev(i_Ent, LASERMINE_OWNER, id ); 
set_pev(i_Ent,LASERMINE_BEAMENDPOINT,vTracedBeamEnd); 
set_pev(i_Ent,LASERMINE_TEAM,int:cs_get_user_team(id)); 
new Float:fCurrTime = get_gametime(); 

set_pev(i_Ent,LASERMINE_POWERUP, fCurrTime + 2.5 ); 

set_pev(i_Ent,LASERMINE_STEP,POWERUP_THINK); 
set_pev(i_Ent,pev_nextthink, fCurrTime + 0.2 ); 

PlaySound(i_Ent,POWERUP_SOUND ); 
g_deployed[id]++; 
g_havemine[id]--; 
DeleteTask(id); 
ShowAmmo(id); 
return 1; 
} 

stock TeamDeployedCount(id) 
{ 
//new tid[32]; 

static i; 
static CsTeams:t;t = cs_get_user_team(id); 
static cnt;cnt=0; 

for(i = 1;i <= g_MaxPL;i++) 
{ 
if(is_user_connected(i)) 
if(t == cs_get_user_team(i)) 
cnt += g_deployed; 
} 

return cnt; 
} 


bool:CheckCanTeam(id) 
{ 
new arg[5],CsTeam:num; 
get_pcvar_string(g_LCBT,arg,3); 
if(equali(arg,"T")) 
{ 
num = CsTeam:CS_TEAM_T; 
} 
else if(equali(arg,"CT")) 
{ 
num = CsTeam:CS_TEAM_CT; 
} 
else if(equali(arg,"ALL")) 
{ 
num = CsTeam:CS_TEAM_UNASSIGNED; 
} 
else 
{ 
num = CsTeam:CS_TEAM_UNASSIGNED; 
} 
if(num != CsTeam:CS_TEAM_UNASSIGNED && num != CsTeam:cs_get_user_team(id)) 
return false; 
return true; 
} 

bool:CanCheck(id,mode) 
{ 
if( !get_pcvar_num( g_LENABLE ) ) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_NOTACTIVE); 
return false; 
} 
if( get_pcvar_num(g_LACCESS) != 0) 
if(!(get_user_flags(id) & ADMIN_IMMUNITY)) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_NOACCESS); 
return false; 
} 
if(!pev_user_alive(id)) return false; 
#if defined BIOHAZARD_SUPPORT 
if(is_user_zombie(id)) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_CBT); 
return false; 
} 
#endif 
if (!CheckCanTeam(id)) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_CBT); 
return false; 
} 
if( mode == 0) 
{ 
if(g_havemine[id] <= 0) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_DONTHAVEMINE); 
return false; 
} 
} 
if (mode == 1) 
{ 
if (get_pcvar_num(g_LBUYMODE) == 0) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_CANTBUY); 
return false; 
} 
if (g_havemine[id] >= get_pcvar_num(g_LAMMO)) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_HAVEMAX); 
return false; 
} 
if (cs_get_user_money(id) < get_pcvar_num(g_LCOST)) 
{ 
client_print(id, print_chat, "%s %s%d %s",CHATTAG, STR_NOMONEY,get_pcvar_num(g_LCOST),STR_NEEDED); 
return false; 
} 
} 
if(!CheckTime(id)) 
{ 
client_print(id,print_chat, "%s %s %d %s",CHATTAG,STR_DELAY,get_pcvar_num(g_LDELAY)-g_nowtime,STR_SECONDS); 
return false; 
} 

return true; 
} 

bool:ReturnCheck( id ) 
{ 
if(!CanCheck(id,-1)) return false; 
if(g_havemine[id] + 1 > get_pcvar_num(g_LAMMO)) return false; 
new tgt,body,Float:vo[3],Float:to[3]; 
get_user_aiming(id,tgt,body); 
if(!pev_valid(tgt)) return false; 
pev(id,pev_origin,vo); 
pev(tgt,pev_origin,to); 
if(get_distance_f(vo,to) > 70.0) return false; 

new EntityName[32]; 
pev(tgt, pev_classname, EntityName, 31); 
if(!equal(EntityName, ENT_CLASS_NAME)) return false; 
if(pev(tgt,LASERMINE_OWNER) != id) return false; 

return true; 
} 

bool:CreateCheck( id ) 
{ 
if (!CanCheck(id,0)) return false; 

if(zp_is_nemesis_round() && get_pcvar_num(g_NEMROUND)) 
{ 
client_print(id, print_chat, "Nu poti plata Laser la runda Nemesis"); 
return false; 
} 

if(zp_is_survivor_round() && get_pcvar_num(g_SURVROUND)) 
{ 
client_print(id, print_chat, "Nu poti plata Laser la runda Survivor"); 
return false; 
} 
if(zp_is_sniper_round() && get_pcvar_num(g_SNIPROUND)) 
{ 
client_print(id, print_chat, "Nu poti plata Laser la runda Sniper"); 
return false; 
} 
if(zp_is_assassin_round() && get_pcvar_num(g_ASSASROUND)) 
{ 
client_print(id, print_chat, "Nu poti plata Laser la runda Assassin"); 
return false; 
} 
if (g_deployed[id] >= get_pcvar_num(g_LAMMO)) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_MAXDEPLOY); 
return false; 
} 

//client_print(id,print_chat,"[Lasermine] your team deployed %d",TeamDeployedCount(id)) 
if(TeamDeployedCount(id) >= get_pcvar_num(g_LTMAX)) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_MANYPPL); 
return false; 
} 

new Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vOrigin[3]; 

pev( id, pev_origin, vOrigin ); 
velocity_by_aim( id, 128, vTraceDirection ); 
xs_vec_add( vTraceDirection, vOrigin, vTraceEnd ); 

engfunc( EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0 ); 

new Float:fFraction,Float:vTraceNormal[3]; 
get_tr2( 0, TR_flFraction, fFraction ); 

// -- We hit something! 
if ( fFraction < 1.0 ) 
{ 
// -- Save results to be used later. 
get_tr2( 0, TR_vecEndPos, vTraceEnd ); 
get_tr2( 0, TR_vecPlaneNormal, vTraceNormal ); 

//get_tr2( 0, TR_pHit ); 

return true; 
} 

client_print(id, print_chat, "%s %s",CHATTAG,STR_PLANTWALL) 
DeleteTask(id); 
// -- Did not touched something. (not solid) 
return false; 
} 

public ltm_Think( i_Ent ) 
{ 
if ( !pev_valid( i_Ent ) ) 
return FMRES_IGNORED; 
new EntityName[32]; 
pev( i_Ent, pev_classname, EntityName, 31); 
if(!get_pcvar_num(g_LENABLE)) return FMRES_IGNORED; 
// -- Entity is not a tripmine, ignoring the next... 
if ( !equal( EntityName, ENT_CLASS_NAME ) ) 
return FMRES_IGNORED; 

static Float:fCurrTime; 
fCurrTime = get_gametime(); 

switch( pev( i_Ent, LASERMINE_STEP ) ) 
{ 
case POWERUP_THINK : 
{ 
new Float:fPowerupTime; 
pev( i_Ent, LASERMINE_POWERUP, fPowerupTime ); 

if( fCurrTime > fPowerupTime ) 
{ 
set_pev( i_Ent, pev_solid, SOLID_BBOX ); 
set_pev( i_Ent, LASERMINE_STEP, BEAMBREAK_THINK ); 

PlaySound( i_Ent, ACTIVATE_SOUND ); 
} 
if(get_pcvar_num(g_LGLOW)!=0) 
{ 
if(get_pcvar_num(g_LCLMODE)==0) 
{ 
new r,g,b; 
r = random_num(0,255) 
g = random_num(0,255) 
b = random_num(0,255) 

set_rendering(i_Ent,kRenderFxGlowShell,r,g,b,kRenderNormal,5); 

switch (pev(i_Ent,LASERMINE_TEAM)) 
{ 
//case CS_TEAM_T: set_rendering(i_Ent,kRenderFxGlowShell,255,0,0,kRenderNormal,5); 
//case CS_TEAM_CT:set_rendering(i_Ent,kRenderFxGlowShell,0,0,255,kRenderNormal,5); 
} 
}else 
{ 
set_rendering(i_Ent,kRenderFxGlowShell,random_num(50 , 200),random_num(50 , 200),random_num(50 , 200),kRenderNormal,5); 
} 
} 
set_pev( i_Ent, pev_nextthink, fCurrTime + 0.1 ); 
} 
case BEAMBREAK_THINK : 
{ 
static Float:vEnd[3],Float:vOrigin[3]; 
pev( i_Ent, pev_origin, vOrigin ); 
pev( i_Ent, LASERMINE_BEAMENDPOINT, vEnd ); 

static iHit, Float:fFraction; 
engfunc( EngFunc_TraceLine, vOrigin, vEnd, DONT_IGNORE_MONSTERS, i_Ent, 0 ); 

get_tr2( 0, TR_flFraction, fFraction ); 
iHit = get_tr2( 0, TR_pHit ); 

// -- Something has passed the laser. 
if ( fFraction < 1.0 ) 
{ 
// -- Ignoring others tripmines entity. 
if(pev_valid(iHit)) 
{ 
pev( iHit, pev_classname, EntityName, 31 ); 

if( !equal( EntityName, ENT_CLASS_NAME ) ) 
{ 
set_pev( i_Ent, pev_enemy, iHit ); 
if(get_pcvar_num(g_LMODE) == MODE_LASERMINE) 
CreateLaserDamage(i_Ent,iHit); 
else 
if(get_pcvar_num(g_LFF) || CsTeams:pev(i_Ent,LASERMINE_TEAM) != cs_get_user_team(iHit)) 
set_pev( i_Ent, LASERMINE_STEP, EXPLOSE_THINK ); 

set_pev( i_Ent, pev_nextthink, fCurrTime + random_float( 0.1, 0.3 ) ); 
} 
} 
} 
if(get_pcvar_num(g_LDMGMODE)!=0) 
if(pev(i_Ent,LASERMINE_HITING) != iHit) 
set_pev(i_Ent,LASERMINE_HITING,iHit); 

// -- Tripmine is still there. 
if ( pev_valid( i_Ent )) 
{ 
static Float:fHealth; 
pev( i_Ent, pev_health, fHealth ); 

if( fHealth <= 0.0 || (pev(i_Ent,pev_flags) & FL_KILLME)) 
{ 
set_pev( i_Ent, LASERMINE_STEP, EXPLOSE_THINK ); 
set_pev( i_Ent, pev_nextthink, fCurrTime + random_float( 0.1, 0.3 ) ); 
} 

static Float:fBeamthink; 
pev( i_Ent, LASERMINE_BEAMTHINK, fBeamthink ); 

if( fBeamthink < fCurrTime && get_pcvar_num(g_LVISIBLE)) 
{ 
DrawLaser(i_Ent, vOrigin, vEnd ); 
set_pev( i_Ent, LASERMINE_BEAMTHINK, fCurrTime + 0.1 ); 
} 
set_pev( i_Ent, pev_nextthink, fCurrTime + 0.01 ); 
} 
} 
case EXPLOSE_THINK : 
{ 
// -- Stopping entity to think 
set_pev( i_Ent, pev_nextthink, 0.0 ); 
PlaySound( i_Ent, STOP_SOUND ); 
g_deployed[pev(i_Ent,LASERMINE_OWNER)]--; 
CreateExplosion( i_Ent ); 
CreateDamage(i_Ent,get_pcvar_float(g_LRDMG),get_pcvar_float(g_LRADIUS)) 
RemoveEntity ( i_Ent ); 
} 
} 

return FMRES_IGNORED; 
} 

PlaySound( i_Ent, i_SoundType ) 
{ 
switch ( i_SoundType ) 
{ 
case POWERUP_SOUND : 
{ 
emit_sound( i_Ent, CHAN_VOICE, ENT_SOUND1, VOL_NORM, ATTN_NORM, 0, PITCH_NORM ); 
emit_sound( i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, 0, PITCH_NORM ); 
} 
case ACTIVATE_SOUND : 
{ 
emit_sound( i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, 1, 75 ); 
} 
case STOP_SOUND : 
{ 
emit_sound( i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, SND_STOP, PITCH_NORM ); 
emit_sound( i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, SND_STOP, 75 ); 
} 
} 
} 

DrawLaser(i_Ent, const Float:v_Origin[3], const Float:v_EndOrigin[3] ) 
{ 
new tcolor[3]; 
new teamid = pev(i_Ent, LASERMINE_TEAM); 
if(get_pcvar_num(g_LCLMODE) == 0) 
{ 
switch(teamid){ 
case 1:{ 
tcolor[0] = random_num(0,255) 
tcolor[1] = random_num(0,255) 
tcolor[2] = random_num(0,255)  
} 
case 2:{ 
tcolor[0] = random_num(0,255) 
tcolor[1] = random_num(0,255) 
tcolor[2] = random_num(0,255)  
} 
} 
}else 
{ 
tcolor[0] = random_num(50 , 200); 
tcolor[1] = random_num(50 , 200); 
tcolor[2] = random_num(50 , 200); 
} 
message_begin(MSG_BROADCAST,SVC_TEMPENTITY); 
write_byte(TE_BEAMPOINTS); 
engfunc(EngFunc_WriteCoord,v_Origin[0]); 
engfunc(EngFunc_WriteCoord,v_Origin[1]); 
engfunc(EngFunc_WriteCoord,v_Origin[2]); 
engfunc(EngFunc_WriteCoord,v_EndOrigin[0]); //Random 
engfunc(EngFunc_WriteCoord,v_EndOrigin[1]); //Random 
engfunc(EngFunc_WriteCoord,v_EndOrigin[2]); //Random 
write_short(beam); 
write_byte(0); 
write_byte(0); 
write_byte(1); //Life 
write_byte(5); //Width 
write_byte(0); //wave 
write_byte(tcolor[0]); // r 
write_byte(tcolor[1]); // g 
write_byte(tcolor[2]); // b 
write_byte(get_pcvar_num(g_LCBRIGHT)); 
write_byte(255); 
message_end(); 
} 


CreateDamage(iCurrent,Float:DmgMAX,Float:Radius) 
{ 
// Get given parameters 

new Float:vecSrc[3]; 
pev(iCurrent, pev_origin, vecSrc); 

new AtkID =pev(iCurrent,LASERMINE_OWNER); 
new TeamID=pev(iCurrent,LASERMINE_TEAM); 

new ent = -1; 
new Float:tmpdmg = DmgMAX; 

new Float:kickback = 0.0; 

// Needed for doing some nice calculations - 
new Float:Tabsmin[3], Float:Tabsmax[3]; 
new Float:vecSpot[3]; 
new Float:Aabsmin[3], Float:Aabsmax[3]; 
new Float:vecSee[3]; 
new trRes; 
new Float:flFraction; 
new Float:vecEndPos[3]; 
new Float:distance; 
new Float:origin[3], Float:vecPush[3]; 
new Float:invlen; 
new Float:velocity[3]; 
new iHitHP,iHitTeam; 
// Calculate falloff 
new Float:falloff; 
if (Radius > 0.0) 
{ 
falloff = DmgMAX / Radius; 
} else { 
falloff = 1.0; 
} 

// Find monsters and players inside a specifiec radius 
while((ent = engfunc(EngFunc_FindEntityInSphere, ent, vecSrc, Radius)) != 0) 
{ 
if(!pev_valid(ent)) continue; 
if(!(pev(ent, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER))) 
{ 
// Entity is not a player or monster, ignore it 
continue; 
} 
if(!pev_user_alive(ent)) continue; 
// Reset data 
kickback = 1.0; 
tmpdmg = DmgMAX; 

// The following calculations are provided by Orangutanz, THANKS! 
// We use absmin and absmax for the most accurate information 
pev(ent, pev_absmin, Tabsmin); 
pev(ent, pev_absmax, Tabsmax); 
xs_vec_add(Tabsmin,Tabsmax,Tabsmin); 
xs_vec_mul_scalar(Tabsmin,0.5,vecSpot); 

pev(iCurrent, pev_absmin, Aabsmin); 
pev(iCurrent, pev_absmax, Aabsmax); 
xs_vec_add(Aabsmin,Aabsmax,Aabsmin); 
xs_vec_mul_scalar(Aabsmin,0.5,vecSee); 

engfunc(EngFunc_TraceLine, vecSee, vecSpot, 0, iCurrent, trRes); 
get_tr2(trRes, TR_flFraction, flFraction); 
// Explosion can 'see' this entity, so hurt them! (or impact through objects has been enabled xD) 
if (flFraction >= 0.9 || get_tr2(trRes, TR_pHit) == ent) 
{ 
// Work out the distance between impact and entity 
get_tr2(trRes, TR_vecEndPos, vecEndPos); 

distance = get_distance_f(vecSrc, vecEndPos) * falloff; 
tmpdmg -= distance; 
if(tmpdmg < 0.0) 
tmpdmg = 0.0; 

// Kickback Effect 
if(kickback != 0.0) 
{ 
xs_vec_sub(vecSpot,vecSee,origin); 

invlen = 1.0/get_distance_f(vecSpot, vecSee); 

xs_vec_mul_scalar(origin,invlen,vecPush); 
pev(ent, pev_velocity, velocity) 
xs_vec_mul_scalar(vecPush,tmpdmg,vecPush); 
xs_vec_mul_scalar(vecPush,kickback,vecPush); 
xs_vec_add(velocity,vecPush,velocity); 

if(tmpdmg < 60.0) 
{ 
xs_vec_mul_scalar(velocity,12.0,velocity); 
} else { 
xs_vec_mul_scalar(velocity,4.0,velocity); 
} 

if(velocity[0] != 0.0 || velocity[1] != 0.0 || velocity[2] != 0.0) 
{ 
// There's some movement todo - 
set_pev(ent, pev_velocity, velocity) 
} 
} 

iHitHP = pev_user_health(ent) - floatround(tmpdmg) 
iHitTeam = int:cs_get_user_team(ent) 
if(iHitHP <= 0) 
{ 
if(iHitTeam != TeamID) 
{ 
cs_set_user_money(AtkID,cs_get_user_money(AtkID) + get_pcvar_num(g_LFMONEY)) 
set_score(AtkID,ent,1,iHitHP) 
}else 
{ 
if(get_pcvar_num(g_LFF)) 
{ 
cs_set_user_money(AtkID,cs_get_user_money(AtkID) - get_pcvar_num(g_LFMONEY)) 
set_score(AtkID,ent,-1,iHitHP) 
} 
} 
}else 
{ 
if(iHitTeam != TeamID || get_pcvar_num(g_LFF)) 
{ 
//set_pev(Player,pev_health,iHitHP) 
set_user_health(ent, iHitHP) 
engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},ent); 
write_byte(floatround(tmpdmg)) 
write_byte(floatround(tmpdmg)) 
write_long(DMG_BULLET) 
engfunc(EngFunc_WriteCoord,vecSrc[0]) 
engfunc(EngFunc_WriteCoord,vecSrc[1]) 
engfunc(EngFunc_WriteCoord,vecSrc[2]) 
message_end() 
} 
} 
} 
} 

return 
} 

bool:pev_user_alive(ent) 
{ 
new deadflag = pev(ent,pev_deadflag); 
if(deadflag != DEAD_NO) 
return false; 
return true; 
} 

CreateExplosion(iCurrent) 
{ 

new Float:vOrigin[3]; 
pev(iCurrent,pev_origin,vOrigin); 

message_begin(MSG_BROADCAST, SVC_TEMPENTITY); 
write_byte(99); //99 = KillBeam 
write_short(iCurrent); 
message_end(); 

engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vOrigin, 0); 
write_byte(TE_EXPLOSION); 
engfunc(EngFunc_WriteCoord,vOrigin[0]); 
engfunc(EngFunc_WriteCoord,vOrigin[1]); 
engfunc(EngFunc_WriteCoord,vOrigin[2]); 
write_short(boom); 
write_byte(30); 
write_byte(15); 
write_byte(0); 
message_end(); 
} 

CreateLaserDamage(iCurrent,isHit) 
{ 
if(isHit < 0 ) return PLUGIN_CONTINUE 
switch(get_pcvar_num(g_LDMGMODE)) 
{ 
case 1: 
{ 
if(pev(iCurrent,LASERMINE_HITING) == isHit) 
return PLUGIN_CONTINUE 
} 
case 2: 
{ 
if(pev(iCurrent,LASERMINE_HITING) == isHit) 
{ 
static Float:cnt 
static now,htime;now = floatround(get_gametime()) 

pev(iCurrent,LASERMINE_COUNT,cnt) 
htime = floatround(cnt) 
if(now - htime < get_pcvar_num(g_LDSEC)) 
{ 
return PLUGIN_CONTINUE; 
}else{ 
set_pev(iCurrent,LASERMINE_COUNT,get_gametime()) 
} 
}else 
{ 
set_pev(iCurrent,LASERMINE_COUNT,get_gametime()) 
} 
} 
} 

new Float:vOrigin[3],Float:vEnd[3] 
pev(iCurrent,pev_origin,vOrigin) 
pev(iCurrent,pev_vuser1,vEnd) 

new teamid = pev(iCurrent, LASERMINE_TEAM) 

new szClassName[32] 
new Alive,God 
new iHitTeam,iHitHP,id 
new hitscore 


szClassName[0] = '^0' 
pev(isHit,pev_classname,szClassName,32) 

if((pev(isHit, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER))) 
{ 
Alive = pev_user_alive(isHit) 
God = get_user_godmode(isHit) 
if(!Alive || God) return PLUGIN_CONTINUE 

iHitTeam = int:cs_get_user_team(isHit) 
iHitHP = pev_user_health(isHit) - get_pcvar_num(g_LDMG) 
id = pev(iCurrent,LASERMINE_OWNER)//, szNetName[32] 
if(iHitHP <= 0) 
{ 
if(iHitTeam != teamid) 
{ 
emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM ) 
hitscore = 1 
cs_set_user_money(id,cs_get_user_money(id) + get_pcvar_num(g_LFMONEY)) 
set_score(id,isHit,hitscore,iHitHP) 
}else 
{ 
if(get_pcvar_num(g_LFF)) 
{ 
emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM ) 
hitscore = -1 
cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(g_LFMONEY)) 
set_score(id,isHit,hitscore,iHitHP) 
} 
} 
}else if(iHitTeam != teamid || get_pcvar_num(g_LFF)) 
{ 
emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM ) 
set_user_health(isHit,iHitHP) 
set_pev(iCurrent,LASERMINE_HITING,isHit); 

engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},isHit); 
write_byte(get_pcvar_num(g_LDMG)) 
write_byte(get_pcvar_num(g_LDMG)) 
write_long(DMG_BULLET) 
engfunc(EngFunc_WriteCoord,vOrigin[0]) 
engfunc(EngFunc_WriteCoord,vOrigin[1]) 
engfunc(EngFunc_WriteCoord,vOrigin[2]) 
message_end() 
} 
}else if(equal(szClassName, ENT_CLASS_NAME3)) 
{ 
new hl; 
hl = pev_user_health(isHit); 
set_user_health(isHit,hl-get_pcvar_num(g_LDMG)); 
} 
return PLUGIN_CONTINUE 
} 

stock pev_user_health(id) 
{ 
new Float:health 
pev(id,pev_health,health) 
return floatround(health) 
} 

stock set_user_health(id,health) 
{ 
health > 0 ? set_pev(id, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, id); 
} 

stock get_user_godmode(index) { 
new Float:val 
pev(index, pev_takedamage, val) 

return (val == DAMAGE_NO) 
} 

stock set_user_frags(index, frags) 
{ 
set_pev(index, pev_frags, float(frags)) 

return 1 
} 

stock pev_user_frags(index) 
{ 
new Float:frags; 
pev(index,pev_frags,frags); 
return floatround(frags); 
} 

set_score(id,target,hitscore,HP){ 

new idfrags = pev_user_frags(id) + hitscore// get_user_frags(id) + hitscore 
set_user_frags(id,idfrags) 
//set_user_frags(id, idfrags) 
//entity_set_float(id, EV_FL_frags, float(idfrags)) 

new tarfrags = pev_user_frags(target) + 1 //get_user_frags(target) + 1 
set_user_frags(target,tarfrags) 
//set_user_frags(target,tarfrags) 
//entity_set_float(target, EV_FL_frags, float(tarfrags)) 

new idteam = int:cs_get_user_team(id) 
new iddeaths = cs_get_user_deaths(id) 


message_begin(MSG_ALL, g_msgDeathMsg, {0, 0, 0} ,0) 
write_byte(id) 
write_byte(target) 
write_byte(0) 
write_string(ENT_CLASS_NAME) 
message_end() 

message_begin(MSG_ALL, g_msgScoreInfo) 
write_byte(id) 
write_short(idfrags) 
write_short(iddeaths) 
write_short(0) 
write_short(idteam) 
message_end() 

set_msg_block(g_msgDeathMsg, BLOCK_ONCE) 

//entity_set_float(target, EV_FL_health,float(HP)) 
set_user_health(target, HP) 
//set_pev(target,pev_health,HP) 

} 

public BuyLasermine(id) 
{ 
if( !CanCheck(id,1) ) return PLUGIN_CONTINUE 
cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(g_LCOST)) 
g_havemine[id]++; 
client_print(id, print_chat, "%s %s",CHATTAG,STR_BOUGHT) 
emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) 
ShowAmmo(id) 
return PLUGIN_HANDLED 
} 

ShowAmmo(id) 
{ 
new ammo[51] 
formatex(ammo, 50, "%s %i/%i",STR_STATE, g_havemine[id],get_pcvar_num(g_LAMMO)) 

message_begin(MSG_ONE, g_msgStatusText, {0,0,0}, id) 
write_byte(0) 
write_string(ammo) 
message_end() 
} 

public showInfo(id) 
{ 
client_print(id, print_chat, STR_REF) 
} 

public say_lasermine(id){ 
new said[32] 
read_argv(1,said,31); 
if( !get_pcvar_num( g_LENABLE ) ){ 
// client_print(id, print_chat, "%s Lasermines are not currently active.",CHATTAG) 
return PLUGIN_CONTINUE 
} 

if (equali(said,"/buy lasermine")||equali(said,"/lm")){ 
BuyLasermine(id) 
}else if (equali(said, "lasermine") || equali(said, "/lasermine")){ 
const SIZE = 1024 
new msg[SIZE+1],len = 0; 
len += formatex(msg[len], SIZE - len, "<html><body>") 
len += formatex(msg[len], SIZE - len, "<p><b>LaserMine</b></p><br/><br/>") 
len += formatex(msg[len], SIZE - len, "<p>You can be setting the mine on the wall.</p><br/>") 
len += formatex(msg[len], SIZE - len, "<p>That laser will give what touched it damage.</p><br/><br/>") 
len += formatex(msg[len], SIZE - len, "<p><b>LaserMine Commands</b></p><br/><br/>") 
len += formatex(msg[len], SIZE - len, "<p><b>Say /buy lasermine</b> or <b>Say /lm</b> //buying lasermine<br/>") 
len += formatex(msg[len], SIZE - len, "<b>buy_lasermine</b> //bind ^"F2^" buy_lasermine : using F2 buying lasermine<br/>") 
len += formatex(msg[len], SIZE - len, "<b>+setlaser</b> //bind mouse3 +setlaser : using mouse3 set lasermine on wall<br/>") 
len += formatex(msg[len], SIZE - len, "</body></html>") 
show_motd(id, msg, "Lasermine Entity help") 
return PLUGIN_CONTINUE 
} 
else if (containi(said, "laser") != -1) { 
showInfo(id) 
return PLUGIN_CONTINUE 
} 
return PLUGIN_CONTINUE 
} 

public standing(id) 
{ 
if (!g_settinglaser[id]) 
return PLUGIN_CONTINUE 

set_pev(id, pev_maxspeed, 1.0) 
// ShowAmmo(id) 

return PLUGIN_CONTINUE 
} 

public ltm_PostThink(id) 
{ 
if (!g_settinglaser[id] && plsetting[id]){ 
resetspeed(id) 
} 
else if (g_settinglaser[id] && !plsetting[id]) { 
pev(id, pev_maxspeed,plspeed[id]) 
set_pev(id, pev_maxspeed, 1.0) 
} 
plsetting[id] = g_settinglaser[id] 
return FMRES_IGNORED 
} 

public ltm_PreThink(id) 
{ 
// if (!pev_user_alive(id) || g_settinglaser[id] == true || is_user_bot(id) || get_pcvar_num(g_LCMDMODE) == 1) 
// return; 

// if(pev(id, pev_button ) & IN_USE && !(pev(id, pev_oldbuttons ) & IN_USE )) 
// CreateLaserMine_Progress(id) 


new tgt,body,Float:vo[3],Float:to[3]; 
get_user_aiming(id,tgt,body); 
if(pev_valid(tgt)) { 
pev(id,pev_origin,vo); 
pev(tgt,pev_origin,to); 
new EntityName[32]; 
pev(tgt, pev_classname, EntityName, 31); 
if(equal(EntityName, ENT_CLASS_NAME)) { 
new OwnerName[32]; 
get_user_name(pev(tgt, LASERMINE_OWNER), OwnerName, 31); 
switch (pev(tgt,LASERMINE_TEAM)) 
{ 
case CS_TEAM_T: set_hudmessage(200, 0, 0, -1.0, 0.60, 0, 6.0, 1.1, 0.0, 0.0, -1) 
case CS_TEAM_CT:set_hudmessage(0, 200, 230, -1.0, 0.60, 0, 6.0, 1.1, 0.0, 0.0, -1) 
} 
show_hudmessage(id, "Detinator: %s^nViata: %d ", OwnerName, pev(tgt,pev_health)) 
} 
} 
} 

resetspeed(id) 
{ 
set_pev(id, pev_maxspeed, plspeed[id]) 
} 

public client_putinserver(id){ 
g_deployed[id] = 0; 
g_havemine[id] = 0; 
DeleteTask(id); 
return PLUGIN_CONTINUE 
} 

public client_disconnect(id){ 
if(!get_pcvar_num( g_LENABLE )) 
return PLUGIN_CONTINUE 
DeleteTask(id); 
RemoveAllTripmines(id); 
return PLUGIN_CONTINUE 
} 


public newround(id){ 
if(!get_pcvar_num( g_LENABLE )) 
return PLUGIN_CONTINUE 
pev(id, pev_maxspeed,plspeed[id]) 
DeleteTask(id); 
RemoveAllTripmines(id); 
delaycount(id); 
SetStartAmmo(id); 
return PLUGIN_CONTINUE 
} 

public DeathEvent(){ 
if(!get_pcvar_num( g_LENABLE )) 
return PLUGIN_CONTINUE 

new id = read_data(2) 
if(is_user_connected(id)) DeleteTask(id); 
return PLUGIN_CONTINUE 
} 

public RemoveAllTripmines( i_Owner ) 
{ 
new iEnt = g_MaxPL + 1; 
new clsname[32]; 
while( ( iEnt = engfunc( EngFunc_FindEntityByString, iEnt, "classname", ENT_CLASS_NAME ) ) ) 
{ 
if ( i_Owner ) 
{ 
if( pev( iEnt, LASERMINE_OWNER ) != i_Owner ) 
continue; 
clsname[0] = '^0' 
pev( iEnt, pev_classname, clsname, sizeof(clsname)-1 ); 

if ( equali( clsname, ENT_CLASS_NAME ) ) 
{ 
PlaySound( iEnt, STOP_SOUND ); 
RemoveEntity( iEnt ); 
} 
} 
else 
set_pev( iEnt, pev_flags, FL_KILLME ); 
} 
g_deployed[i_Owner]=0; 
} 

SetStartAmmo(id) 
{ 
new stammo = get_pcvar_num(g_LSTAMMO); 
if(stammo <= 0) return PLUGIN_CONTINUE; 
g_havemine[id] = (g_havemine[id] <= stammo) ? stammo : g_havemine[id]; 
return PLUGIN_CONTINUE; 
} 

public CutDeploy_onDamage(id) 
{ 
if(get_user_health(id) < 1) 
DeleteTask(id); 
} 

#if defined BIOHAZARD_SUPPORT 
public event_infect2(id) 
{ 
DeleteTask(id); 
return PLUGIN_CONTINUE 
} 
#endif 

DeleteTask(id) 
{ 
if (task_exists((TASK_PLANT + id))) 
{ 
remove_task((TASK_PLANT + id)) 
} 
if (task_exists((TASK_RELEASE + id))) 
{ 
remove_task((TASK_RELEASE + id)) 
} 
g_settinglaser[id] = false 
return PLUGIN_CONTINUE; 
} 

// Gets offset data 
get_offset_value(id, type) 
{ 
new key = -1; 
switch(type) 
{ 
case OFFSET_TEAM: key = OFFSET_TEAM; 
case OFFSET_MONEY: 
{ 
#if defined UL_MONEY_SUPPORT 
return cs_get_user_money_ul(id); 
#else 
key = OFFSET_MONEY; 
#endif 
} 
case OFFSET_DEATH: key = OFFSET_DEATH; 
} 

if(key != -1) 
{ 
if(is_amd64_server()) key += 25; 
return get_pdata_int(id, key); 
} 

return -1; 
} 

// Sets offset data 
set_offset_value(id, type, value) 
{ 
new key = -1; 
switch(type) 
{ 
case OFFSET_TEAM: key = OFFSET_TEAM; 
case OFFSET_MONEY: 
{ 
#if defined UL_MONEY_SUPPORT 
return cs_set_user_money_ul(id, value); 
#else 
key = OFFSET_MONEY; 

// Send Money message to update player's HUD 
message_begin(MSG_ONE_UNRELIABLE, g_msgMoney, {0,0,0}, id); 
write_long(value); 
write_byte(1); // Flash (difference between new and old money) 
message_end(); 
#endif 
} 
case OFFSET_DEATH: key = OFFSET_DEATH; 
} 

if(key != -1) 
{ 
if(is_amd64_server()) key += 25; 
set_pdata_int(id, key, value); 
} 

return PLUGIN_CONTINUE; 
}
Post Reply

Return to “Modificari pluginuri”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 16 guests