Raised This Month: $51 Target: $400
 12% 

Making a preview of an entity


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
LordDeath
Member
Join Date: Feb 2019
Old 02-15-2019 , 11:10   Making a preview of an entity
Reply With Quote #1

Hey, I was trying to make a preview of an entity before placing it, I tried to fake it and then when the player chooses to place it from the menu. the fake one disappears. I've set the fake entity to spawn once the player opens the menu but once it spawns it doesn't move with the mouse/aim movement, how can I solve this? or what did I do wrong?
Code:
#include <amxmodx> 
#include <amxmisc> 
#include <fakemeta> 
#include <hamsandwich> 
#include <engine> 
#include <xs> 
#include <fun> 
#include <zombieplague> 
#include <zp50_items>
#include <zp50_gamemodes>
#include <zmvip>

// 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; 
new g_MaxSBs[33], g_MaxSBs_VIP[33]
new g_GameModeInfectionID
new g_GameModeMultiID
// num of pallets with bags 
new palletscout = 0; 
new bool:done[33] 
/* 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} 
} 
const g_item_bolsas = 30 
new g_itemid_bolsas, g_itemid_bolsas_VIP
new ZPSTUCK 
new g_PlacingSB[33]
new g_iSpriteLaser
/************************************************************* 
************************* AMXX PLUGIN ************************* 
**************************************************************/ 
public plugin_init()  
{ 
	/* Register the plugin */ 
	
	register_plugin("[ZP] Extra: SandBags", "1.1", "LARP") 
	g_itemid_bolsas = zp_items_register("Sandbags", 0) 
	g_itemid_bolsas_VIP = zv_register_extra_item("Sandbags","Discount",15,ZP_TEAM_HUMAN)
	/* Register the cvars */ 
	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","8"); // max number of pallets with bags 
	phealth = register_cvar("zp_pb_health","650"); // 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 /sb","show_the_menu"); 
	register_clcmd("say_team /sb","show_the_menu"); 
	register_clcmd("say /buy_sb","gbuy"); 
	register_clcmd("say_team /buy_sb","gbuy");

	//RegisterHam(Ham_TakeDamage,"func_wall","fw_TakeDamage");  
	//cvar[0] = register_cvar("zp_autounstuck","1") 
	cvar[1] = register_cvar("zp_pb_stuckeffects","1") 
	cvar[2] = register_cvar("zp_pb_stuckwait","7") 
	
	register_forward( FM_CmdStart, "fw_CmdStart" )
	RegisterHam(Ham_TakeDamage,"func_wall","fw_TakeDamage"); 
	RegisterHam(Ham_Killed, "func_wall", "fw_PlayerKilled", 1)
	
} 
//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 )
	new iHealth = pev( victim, pev_health );
	if( !equali(sz_classname,"amxx_pallets") ) 
	return HAM_IGNORED; 
	if( iHealth < 200 ) // less than 200 glow red
	{
		set_rendering ( victim, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 16)
	}
	else if( iHealth < 400 ) // more than 200 glow a bit blue
	{
		set_rendering ( victim, kRenderFxGlowShell, 0, 200, 200, kRenderNormal, 16)
	}
	else if( iHealth < 600 ) // More than 400 glow green
	{
		set_rendering ( victim, kRenderFxGlowShell, 0, 255, 0, kRenderNormal, 16)
	}
	//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)
		client_print(attacker, print_chat, "[ZP] You earned 5 ammopacks by destroy sandbag!") 
		return HAM_IGNORED;
	} 
	return HAM_IGNORED;
} 
public plugin_precache() 
{ 
	for(new i;i < sizeof g_models;i++) 
	engfunc(EngFunc_PrecacheModel,g_models[i]); 
	g_iSpriteLaser = precache_model( "sprites/Newlightning.spr");
}
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" ); 
		nLen += format( szMenuBody[nLen], 255-nLen, "^n\w2. Remove Preview" ); 
		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 
		g_PlacingSB[id] = 1
		create_fake(id)
		preview(id)
		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, "[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     
		} 
		
		// remove a pallet with bags 
		case 1: 
		{ 
			remove_fake_pallet(id)
			g_PlacingSB[id] =0
		} 
		// 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 
	new iHealth = pev( ent, pev_health );
		set_rendering ( ent, kRenderFxGlowShell, 0, 255, 0, kRenderNormal, 16)
	
	// 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]) 
	remove_2(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() 
{ 
	for ( new id; id <= get_maxplayers(); id++) 
	{ 
		if( get_pcvar_num ( remove_nrnd ) == 1) 
		remove_allpalletswbags(); 
		done[id] = false 
		g_bolsas[id] = 0  
		g_MaxSBs[id] = 0
		g_MaxSBs_VIP[id] = 0
		g_PlacingSB[id] = 0
	} 
	
}  
/* ==================================================== 
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) && !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 plugin_cfg()
{
	g_GameModeInfectionID = zp_gamemodes_get_id("Infection Mode")
	g_GameModeMultiID = zp_gamemodes_get_id("Multiple Infection Mode")
}
public zv_extra_item_selected(id, itemid)
{
	// This is not our item
	if (itemid != g_itemid_bolsas_VIP)
	return;
	if(g_MaxSBs_VIP[id] >= 1)
	return;
	g_bolsas[id]+= 2 
	set_task(0.3,"show_the_menu",id) 
	client_print(id, print_chat, "[ZP] You have %i sandbags, to use type 'say / sb'", g_bolsas[id]) 
     g_MaxSBs_VIP[id] += 1
}
public zp_fw_items_select_pre(id, itemid, ignorecost)
{
	// This is not our item
	if (itemid != g_itemid_bolsas)
	return ZP_ITEM_AVAILABLE;
	
	// Antidote only available to zombies
	if (zp_core_is_zombie(id))
	return ZP_ITEM_DONT_SHOW;
	
	//Antidote only available during infection modes
	new current_mode = zp_gamemodes_get_current()
	if (current_mode != g_GameModeInfectionID && current_mode != g_GameModeMultiID)
	return ZP_ITEM_DONT_SHOW;
	// Display remaining item count for this round
	static text[32]
	formatex(text, charsmax(text), "[%d/1]", g_MaxSBs[id])
	zp_items_menu_text_add(text)
	
	// Reached antidote limit for this round
	if (g_MaxSBs[id] >= 1)
	return ZP_ITEM_NOT_AVAILABLE;
	if(done[id])
	return ZP_ITEM_NOT_AVAILABLE;
	return ZP_ITEM_AVAILABLE;
}
public zp_fw_items_select_post(id, itemid, ignorecost)
{
	// This is not our item
	if (itemid != g_itemid_bolsas)
	return;
	g_bolsas[id]+= 2 
	set_task(0.3,"show_the_menu",id) 
	client_print(id, print_chat, "[ZP] You have %i sandbags, to use type 'say / sb'", g_bolsas[id]) 
	g_MaxSBs[id] += 1
	done[id] = true 
}
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(!done[id]) 
		{ 
			g_bolsas[id]+= 2 
			set_task(0.3,"show_the_menu",id) 
			client_print(id, print_chat, "[ZP] You have %i sandbags, to use type 'say / sb'", g_bolsas[id]) 
			done[id] = true 
			zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - g_item_bolsas)
			return PLUGIN_CONTINUE
		}
		
		else { 
			
			client_print(id, print_chat, "Max Sandbags reached !!!") 
			return PLUGIN_HANDLED
		} 
	}
	return PLUGIN_CONTINUE   
}
stock create_tracer_water(id, Float:fVec1[3], Float:fVec2[3])
{
	static iVec1[3]
	FVecIVec(fVec1, iVec1)

	static Float:origin[3], Float:vSrc[3], Float:angles[3], Float:v_forward[3], Float:v_right[3], Float:v_up[3], Float:gun_position[3], Float:player_origin[3], Float:player_view_offset[3]
	pev(id, pev_v_angle, angles)
	engfunc(EngFunc_MakeVectors, angles)
	global_get(glb_v_forward, v_forward)
	global_get(glb_v_right, v_right)
	global_get(glb_v_up, v_up)

	//m_pPlayer->GetGunPosition( ) = pev->origin + pev->view_ofs
	pev(id, pev_origin, player_origin)
	pev(id, pev_view_ofs, player_view_offset)
	xs_vec_add(player_origin, player_view_offset, gun_position)

	xs_vec_mul_scalar(v_forward, 24.0, v_forward)
	xs_vec_mul_scalar(v_right, 3.0, v_right)

	if ((pev(id, pev_flags) & FL_DUCKING) == FL_DUCKING)
		xs_vec_mul_scalar(v_up, 6.0, v_up)
	else
		xs_vec_mul_scalar(v_up, -2.0, v_up)

	xs_vec_add(gun_position, v_forward, origin)
	xs_vec_add(origin, v_right, origin)
	xs_vec_add(origin, v_up, origin)

	vSrc[0] = origin[0]
	vSrc[1] = origin[1]
	vSrc[2] = origin[2]

	message_begin(MSG_PAS, SVC_TEMPENTITY, iVec1)
	write_byte(TE_BEAMPOINTS)
	engfunc(EngFunc_WriteCoord, fVec2[0])
	engfunc(EngFunc_WriteCoord, fVec2[1])
	engfunc(EngFunc_WriteCoord, fVec2[2])
	engfunc(EngFunc_WriteCoord, vSrc[0])
	engfunc(EngFunc_WriteCoord, vSrc[1])
	engfunc(EngFunc_WriteCoord, vSrc[2])
	write_short(g_iSpriteLaser)
	write_byte(6)
	write_byte(200) 
	write_byte(1)
	write_byte(100)
	write_byte(0)
	write_byte(0); write_byte(255); write_byte(0);
	write_byte(192)
	write_byte(250) 
	message_end()
}

public create_fake(id)
{
	// create a new entity  
	new pent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_wall")); 
	
	
	// set a name to the entity 
	set_pev(pent,pev_classname,"fake_pallets"); 
	
	// set model         
	engfunc(EngFunc_SetModel,pent,g_models[random(sizeof g_models)]);
	// register a new var. for origin 
	static Float:xorigin[3]; 
	get_user_hitpoint(id,xorigin); 
	// set sizes 
	static Float:p_mins[3], Float:p_maxs[3]; 
	p_mins = PALLET_MINS; 
	p_maxs = PALLET_MAXS; 
	engfunc(EngFunc_SetSize, pent, p_mins, p_maxs); 
	set_pev(pent, pev_mins, p_mins); 
	set_pev(pent, pev_maxs, p_maxs ); 
	set_pev(pent, pev_absmin, p_mins); 
	set_pev(pent, pev_absmax, p_maxs ); 
	
	// set the rock of origin where is user placed 
	engfunc(EngFunc_SetOrigin, pent, xorigin); 
	// glow it 
	if(g_bolsas[id] >= 1)
	set_rendering ( pent, kRenderFxGlowShell, 0, 255, 0, kRenderNormal, 16)
	else set_rendering ( pent, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 16)
	// set the movetype 
	set_pev(pent,pev_movetype,MOVETYPE_FOLLOW); // no gravity, but still collides with stuff 
	static Float:rvec[3]; 
	pev(id,pev_v_angle,rvec); 
	
	rvec[0] = 0.0; 
	
	set_pev(pent,pev_angles,rvec); 
	
	// drop entity to floor 
	set_pev(pent, pev_owner, id);
	


}

public preview(Player)
{
	static Float:plrViewAngles[3], Float:VecEnd[3], Float:VecDir[3], Float:PlrOrigin[3]
	pev(Player, pev_v_angle, plrViewAngles)

	static Float:VecSrc[3], Float:VecDst[3]
	
	//VecSrc = pev->origin + pev->view_ofs
	pev(Player, pev_origin, PlrOrigin)
	pev(Player, pev_view_ofs, VecSrc)
	xs_vec_add(VecSrc, PlrOrigin, VecSrc)

	//VecDst = VecDir * 8192.0
	angle_vector(plrViewAngles, ANGLEVECTOR_FORWARD, VecDir);
	xs_vec_mul_scalar(VecDir, 8192.0, VecDst);
	xs_vec_add(VecDst, VecSrc, VecDst);
	
	new hTrace = create_tr2()
	engfunc(EngFunc_TraceLine, VecSrc, VecDst, 0, Player, hTrace)
	get_tr2(hTrace, TR_vecEndPos, VecEnd);

	create_tracer_water(Player, VecSrc, VecEnd)	
	client_print(Player,print_chat,"debug")
}
public remove_2(id)
{
	if(g_bolsas[id] == 0) remove_fake_pallet(id)
}
public fw_CmdStart( id, uc_handle, seed )
{

	if(g_PlacingSB[id] == 1)
	{
		preview(id)
	}

}

stock remove_fake_pallet(id) 
{ 
if(!zp_core_is_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, "fake_pallets"))  
	{ 
	fm_remove_entity(ent); 
	} 	
}
		} 
}
This is what I tried to make the fake entity move with my aim, but it doesn't
Code:
	set_pev(pent,pev_movetype,MOVETYPE_FOLLOW); // no gravity, but still collides with stuff
LordDeath is offline
Reply



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 15:22.


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