Raised This Month: $ Target: $400
 0% 

Whats wrong?


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
Vechta
Veteran Member
Join Date: Jun 2010
Old 07-06-2010 , 03:03   Whats wrong?
Reply With Quote #1

I'm not good at scripting so i need your help,

i tried to make if human attack sandbag from attacker and attackers sandbag
health is 0 the attacker get his sandbag back...

But it has compile errors and i dont think it will work...

Code:
public Fwd_TakeDamage(iVictim, iInflictor, iAttacker, Float:flDamage, iDamageBits)
{
	if (!zp_get_user_zombie(iVictim) == g_bolsas[iAttacker]))
	{
		if (g_bolsas[iAttacker] && get_pcvar_float(phealth) > 0)
		{
			g_bolsas[iAttacker] += 1
		}
	}
}
g_bolsas = sandbag

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


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

// The sizes of models
#define PALLET_MINS Float:{ -27.260000, -22.280001, -22.290001 }
#define PALLET_MAXS Float:{  27.340000,  26.629999,  29.020000 }


// from fakemeta util by VEN
#define fm_find_ent_by_class(%1,%2) engfunc(EngFunc_FindEntityByString, %1, "classname", %2)
#define fm_remove_entity(%1) engfunc(EngFunc_RemoveEntity, %1)
// this is mine
#define fm_drop_to_floor(%1) engfunc(EngFunc_DropToFloor,%1)

// cvars
new 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 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[] = { "15 Sandbags" }
const g_item_bolsas = 0
new g_itemid_bolsas
new ZPSTUCK, g_BINDMODE, g_MSGMODE

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


public plugin_init() 
{
	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)

	g_BINDMODE	= register_cvar("zp_pb_bind","1");		//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","0");
	maxpallets = register_cvar("zp_pb_limit","200"); // max number of pallets with bags
	phealth = register_cvar("zp_pb_health","200"); // set the health to a pallet with bags
	
	register_event("HLTV","event_newround", "a","1=0", "2=0"); // it's called every on new round
	RegisterHam(Ham_TakeDamage, "player", "Fwd_TakeDamage")
	
	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","3")
}


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

public show_the_menu(id,level,cid)
{
	// 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^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 );

		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 )
	{
		case 0: 
		{
			if ( !zp_get_user_zombie(id) )
			{
				new money = g_bolsas[id]
				if ( money < 1 )
				{
					if ( get_pcvar_num(g_MSGMODE) == 1 )
					{
						set_hudmessage(255, 0, 0, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0)
						show_hudmessage(id, "You do not have to^nplace sandbags")
						return PLUGIN_CONTINUE
					}
					client_print(id, print_chat, "[ZP] You do not have to place sandbags!")
					return PLUGIN_CONTINUE
				}
				g_bolsas[id]-= 1
				place_palletwbags(id);
				show_the_menu(id,level,cid);
				return PLUGIN_CONTINUE	
			}
			client_print(id, print_chat, "[ZP] The zombies can not use this!!")
			return PLUGIN_CONTINUE	
		}
	}
	return PLUGIN_HANDLED;
}

public Fwd_TakeDamage(iVictim, iInflictor, iAttacker, Float:flDamage, iDamageBits)
{
	if (!zp_get_user_zombie(iVictim) == g_bolsas[iAttacker]))
	{
		if (g_bolsas[iAttacker] && get_pcvar_float(phealth) > 0)
		{
			g_bolsas[iAttacker] += 1
		}
	}
}

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);
	
	// num ..
	palletscout++;
	
	// confirm message
	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(id, "You placed a SandBag^n%i Remaining", g_bolsas[id])
		return PLUGIN_HANDLED
	}
	client_print(id, print_chat, "[ZP] You have placed a Sandbag.")
	return PLUGIN_HANDLED;
}
	
/* ====================================================
get_user_hitpoin stock . Was maked by P34nut, and is 
like get_user_aiming but is with floats and better :o
====================================================*/	
stock get_user_hitpoint(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[i]
			if (is_user_connected(player) && is_user_alive(player)) 
			{
				pev(player, pev_origin, origin)
				hull = pev(player, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
				if (!is_hull_vacant(origin, hull,player) && !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]+= 3
		cmd_bind(player)
		set_task(0.3,"show_the_menu",player)
		if ( get_pcvar_num(g_MSGMODE) == 1 )
		{
			set_hudmessage(255, 0, 0, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0)
			show_hudmessage(player, "[L4D] Sandbags")
		}
	}

}

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

}
Vechta is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


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


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