Raised This Month: $ Target: $400
 0% 

Is the relationship between "pev_v_angle"and "pev_angles" is very special?


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
ColtSky
New Member
Join Date: Feb 2016
Location: Shanghai,China
Old 02-04-2016 , 09:25   Is the relationship between "pev_v_angle"and "pev_angles" is very special?
Reply With Quote #1

I am writting a plugin about "Remote Control Airplane" and I met a problem about "pev_v_angle" and "pev_angles"
I set the view to the plane entity. Now I want to use my crosshair to control it, so I make its model angle(pev_angles) pace with my view angle(pev_v_angle).
I use the method below
Code:
(Ham_Think)
new Float:TargetOrigin[3], Float:VecOrigin[3], Float:VecAngles[3]

pev(pev(iEntity, pev_owner), pev_v_angle, VecAngles)
//VecAngles[0] *= -1.0 
set_pev(iEntity, pev_angles, VecAngles)
engfunc(EngFunc_MakeVectors, VecAngles)

global_get(glb_v_forward, TargetOrigin)
xs_vec_mul_scalar(TargetOrigin, 150.0, VecOrigin)
set_pev(iEntity, pev_velocity, VecOrigin)
Then the problem came: As my mouse slide down, my view also slide down and the plane move down, but it just rotate the plane model upward !?
Just like this in other players' eyes

I know there is something difference between "pev_angles" and "pev_v_angle", so I try to add the code
Code:
VecAngles[0] *= -1.0
It works and... As my mouse slide down, it rotate the plane model downward now, but my view slide up and the plane also move up!!!
I also tried to set the "pev_v_angle" valve again after set the "pev_angles" value, but it didn't work any way.

Is the relationship between "pev_v_angle" and "pev_angles" is very special? Could you tell me how to code them in the right way?
I'm sorry for my broken English
Here is my full-sourcecode(not finished yet)
Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <xs>

#define PLUGIN "miku"
#define VERSION "1.0"
#define AUTHOR "sky"

new g_explode, g_tail
new haveknife[33]

new const g_szMapConditions[][] = 
{
	"func_bomb_target",		
	"info_bomb_target",		
	"func_hostage_rescue",	
	"func_escapezone",		
	"func_vip_safetyzone"	,
	"hostage_entity"
}

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	RegisterHam(Ham_Item_AddToPlayer, "weapon_usp", "HAM_USPAddToPlayer_Post")
	RegisterHam(Ham_Item_AddToPlayer, "weapon_glock18", "HAM_GLOCKAddToPlayer_Post")
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "HAM_PrimaryAttack")
	RegisterHam(Ham_Item_Deploy, "weapon_knife", "HAM_Item_Deploy_Post", 1)
	RegisterHam(Ham_Think, "info_target", "fw_Think")
	register_forward(FM_Spawn, "fw_Spawn")
	register_forward(FM_Touch, "fw_Touch_Post", 1)
	register_event("CurWeapon", "CurrentWeapon", "be", "1=1")
	register_event("HLTV", "Event_Round_Start", "a", "1=0", "2=0")
	register_clcmd("buy", "ClientCommand_Buy")
	server_cmd("sv_restartround 1")
	register_message(get_user_msgid("StatusIcon"), "Message_StatusIcon")
}

public plugin_precache()
{
	precache_model("models/harry.mdl")
	precache_model("models/p_air.mdl")
	precache_model("models/v_air.mdl")
	g_tail = precache_model("sprites/white.spr")
	g_explode = precache_model("sprites/explode1.spr")
	
	new ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_map_parameters"))
	set_pdata_int(ent, 34, 3)
	dllfunc(DLLFunc_Spawn, ent)
	
	register_clcmd("weapon_gauss","weapon_hook")
}

public weapon_hook(id)
{
	engclient_cmd(id,"weapon_knife")
	return PLUGIN_HANDLED
}

public Event_Round_Start()
{
	new iEntity = -1
	while((iEntity = engfunc(EngFunc_FindEntityByString, iEntity, "classname", "airplane"))) engfunc(EngFunc_RemoveEntity, iEntity)
}

public HAM_USPAddToPlayer_Post(iWeapon, this)
	return HAM_SUPERCEDE

public HAM_GLOCKAddToPlayer_Post(iWeapon, this)
	return HAM_SUPERCEDE

public HAM_Item_Deploy_Post(iEntity)
{
	new id = get_pdata_cbase(iEntity, 41, 4)
	
	UTIL_PlayWeaponAnimation(id, 1)
	set_pdata_float(id, 83, 0.62, 5)
	set_pev(id, pev_viewmodel2, "models/v_air.mdl")
	set_pev(id, pev_weaponmodel2, "models/p_air.mdl")
}

public CurrentWeapon(id)
{
	if (!is_user_alive(id))
		return

	new iEntity = pev(id, pev_euser1)
	if (iEntity <= 0)
		return
	
	set_pev(id, pev_viewmodel2, "models/v_air.mdl")
	set_pev(id, pev_weaponmodel2, "models/p_air.mdl")
}

public HAM_PrimaryAttack(this)
{
	new iPlayer = get_pdata_cbase(this, 41, 4)
	
	 new classname[32]
	 pev(iPlayer, pev_classname, classname, 31)
	
	new Float:origin[3]//, Float:angles[3]
    //pev(iPlayer, pev_v_angle, angles)
    get_aim_origin_vector(iPlayer, 20.0, 0.0, 10.0, origin)
    new iEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
	set_pev(iPlayer, pev_euser1, iEntity)
    set_pev(iEntity, pev_classname, "airplane")
	set_pev(iEntity, pev_nextthink, get_gametime()+0.1)
    set_pev(iEntity, pev_solid, SOLID_TRIGGER)
    set_pev(iEntity, pev_movetype, MOVETYPE_TOSS)
    set_pev(iEntity, pev_owner, iPlayer)
    //set_pev(iEntity, pev_v_angle, angles)
    engfunc(EngFunc_SetModel, iEntity, "models/harry.mdl")
	set_pev(iEntity, pev_euser1, 1)
    set_pev(iEntity, pev_renderfx, kRenderFxGlowShell)
    set_pev(iEntity, pev_rendercolor, {255.0, 0.0, 0.0})
    set_pev(iEntity, pev_renderamt, 10.0)
    set_pev(iEntity, pev_rendermode, kRenderNormal)
    engfunc(EngFunc_SetSize, iEntity, {-1.0, -1.0, -1.0}, {1.0, 1.0, 1.0})
    engfunc(EngFunc_SetOrigin, iEntity, origin)

    /*new Float:start[3], Float:view_ofs[3], Float:end[3]
    pev(iPlayer, pev_origin, start)
    pev(iPlayer, pev_view_ofs, view_ofs)
    xs_vec_add(start, view_ofs, start)
    
    pev(iPlayer, pev_v_angle, end)
    engfunc(EngFunc_MakeVectors, end)
    global_get(glb_v_forward, end)
    xs_vec_mul_scalar(end, 8120.0, end)
    xs_vec_add(start, end, end)
    engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, iPlayer, 0)
    get_tr2(0, TR_vecEndPos, end)
    
    new Float:velocity[3]
    get_speed_vector(origin, end, 300.0, velocity)
    set_pev(iEntity, pev_velocity, velocity)*/
    new Float:fl_iNewVelocity[3] 
	velocity_by_aim(iPlayer, 150, fl_iNewVelocity)
	set_pev(iEntity, pev_velocity, fl_iNewVelocity)
	
	
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    write_byte(TE_BEAMFOLLOW)
    write_short(iEntity) 
    write_short(g_tail)
    write_byte(32)
    write_byte(4)
    write_byte(255)
    write_byte(0)
    write_byte(0)
    write_byte(255)
    message_end()
	
	fm_strip_user_weapons(iPlayer)
	haveknife[iPlayer] = 0
	engfunc(EngFunc_SetView, iPlayer, iEntity)
	return HAM_SUPERCEDE
}

public fw_Spawn(iEntity)
{
	static szClassName[32];
	pev(iEntity, pev_classname, szClassName, charsmax(szClassName));
	for(new i = 0; i < sizeof(g_szMapConditions); ++i)
	{
		if(equal(szClassName, g_szMapConditions[i]))
		{
			engfunc(EngFunc_RemoveEntity, iEntity);
			return FMRES_SUPERCEDE;
		}
	}
	
	return FMRES_IGNORED;
}

public fw_Think(iEntity)
{
    if(!pev_valid(iEntity))
		return HAM_IGNORED
    
    new classname[32]
    pev(iEntity, pev_classname, classname, charsmax(classname))
    
    if(strcmp(classname, "airplane"))
		return HAM_IGNORED
	
	if(pev(iEntity, pev_euser1)  != 1)
		return HAM_IGNORED
	
	new Float:TargetOrigin[3], Float:VecOrigin[3], Float:VecAngles[3]//, Float:FixAngles[3]
	
	pev(pev(iEntity, pev_owner), pev_v_angle, VecAngles)
	//VecAngles[0] *= -1.0
	set_pev(iEntity, pev_angles, VecAngles)
	pev(iEntity, pev_v_angle, FixAngles)
	//FixAngles[0] *= -1.0
	set_pev(pev(iEntity, pev_owner), pev_v_angle, FixAngles)
	
	engfunc(EngFunc_MakeVectors, VecAngles)
	global_get(glb_v_forward, TargetOrigin)
	xs_vec_mul_scalar(TargetOrigin, 150.0, VecOrigin)
	set_pev(iEntity, pev_velocity, VecOrigin)
	
	/*new owner = pev(iEntity, pev_owner)
	new Float:fl_iNewVelocity[3] 
	velocity_by_aim(owner, 300, fl_iNewVelocity)
	set_pev(iEntity, pev_velocity, fl_iNewVelocity)*/
	
	set_pev(iEntity, pev_nextthink, get_gametime()+0.01)
	/*new Float:fVelocity[3], Float:fAngle[3]
	pev(iEntity, pev_velocity, fVelocity)
	vector_to_angle(fVelocity,fAngle)*/

    return HAM_IGNORED
}

public fw_Touch_Post(iEntity, iptr)
{
	if(!pev_valid(iEntity))
		return 
	new classname[32];
	pev(iEntity, pev_classname, classname, 31);
	if(strcmp(classname, "airplane") )
		return
	
	new fvelocity
	pev(iEntity, pev_velocity, fvelocity)
	
	new Float:vecOrigin[3];
	pev(iEntity, pev_origin, vecOrigin);
		
	new classname_2[32];
	pev(iptr, pev_classname, classname_2, 31); 
	if(!strcmp(classname_2, "worldspawn") )
	{
		set_task(0.1, "TASK_TOUCH", iEntity + 100)
		message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, pev(iEntity, pev_owner))
		write_short((1<<12)*1)
		write_short((1<<12)*1)
		write_short(0x0002)
		write_byte(0)
		write_byte(0)
		write_byte(0)
		write_byte(255)
		message_end()
	}
	else if(iptr <= 32 && haveknife[iptr] == 0 && is_user_alive(iptr) && pev(iEntity, pev_flags)&FL_ONGROUND  == 512)
	{
		haveknife[iptr] = 1
		fm_give_item(iptr, "weapon_knife")
		engfunc(EngFunc_RemoveEntity, iEntity)
		return
	}
}

public TASK_TOUCH(sbhl)
{
	new iEntity = sbhl - 100
	if(pev(iEntity, pev_flags)&FL_ONGROUND != 512)
		return
	new Float:vecOrigin[3];
	pev(iEntity, pev_origin, vecOrigin);
	
	new id = pev(iEntity, pev_owner)
	engfunc(EngFunc_SetView, id, id)

	message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
	write_byte(TE_EXPLOSION);
	engfunc(EngFunc_WriteCoord, vecOrigin[0]);
	engfunc(EngFunc_WriteCoord, vecOrigin[1]);
	engfunc(EngFunc_WriteCoord, vecOrigin[2]);
	write_short(g_explode);
	write_byte(25);
	write_byte(30);
	write_byte(0);
	message_end();
	set_pev(iEntity, pev_euser1, 2)
	new iVicim = -1
	while((iVicim = engfunc(EngFunc_FindEntityInSphere, iVicim, vecOrigin, 10)) > 0)
	{
		if (!pev_valid(iVicim))
			continue
		if(iVicim == pev(iEntity, pev_owner))
			continue
		if (pev(iVicim, pev_takedamage) == DAMAGE_NO)
			continue
		if(get_user_team(iVicim) == get_user_team(pev(iEntity, pev_owner)))
			continue
		
		new Ptdclassname[32]
		pev(iVicim, pev_classname, Ptdclassname, charsmax(Ptdclassname))
		if (!strcmp(Ptdclassname, "func_breakable")) dllfunc(DLLFunc_Use, iVicim, iEntity)
		
		ExecuteHam(Ham_TakeDamage, iVicim, iEntity,pev(iEntity, pev_owner), 15, DMG_CLUB)
	}
	return
}

stock get_speed_vector(const Float:origin1[3], const Float:origin2[3], Float:speed, Float:new_velocity[3])
{
    xs_vec_sub(origin2, origin1, new_velocity)
    new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
    xs_vec_mul_scalar(new_velocity, num, new_velocity)
}

stock get_aim_origin_vector(iPlayer, Float:forw, Float:right, Float:up, Float:vStart[])
{
    new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
    
    pev(iPlayer, pev_origin, vOrigin)
    pev(iPlayer, pev_view_ofs, vUp)
    xs_vec_add(vOrigin, vUp, vOrigin)
    pev(iPlayer, pev_v_angle, vAngle)
    
    angle_vector(vAngle, ANGLEVECTOR_FORWARD, vForward)
    angle_vector(vAngle, ANGLEVECTOR_RIGHT, vRight)
    angle_vector(vAngle, ANGLEVECTOR_UP, vUp)
    
    vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
    vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
    vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
}

stock fm_get_aim_origin(id, Float:origin[3])
{
	new Float:start[3], Float:view_ofs[3], Float:TargetOrigin[3]
	pev(id, pev_origin, start)
	pev(id, pev_view_ofs, view_ofs)
	xs_vec_add(start, view_ofs, start)
	pev(id, pev_v_angle, TargetOrigin)
	engfunc(EngFunc_MakeVectors, TargetOrigin)
	global_get(glb_v_forward, TargetOrigin)
	xs_vec_mul_scalar(TargetOrigin, 9999.0, TargetOrigin)
	xs_vec_add(start, TargetOrigin, TargetOrigin)
	engfunc(EngFunc_TraceLine, start, TargetOrigin, 0, id, 0)
	get_tr2(0, TR_vecEndPos, origin)
	return 1
}

stock drop_weapons(iPlayer, Slot)
{
	new item = get_pdata_cbase(iPlayer, 367+Slot, 4)
	while(item > 0)
	{
		static classname[24]
		pev(item, pev_classname, classname, charsmax(classname))
		engclient_cmd(iPlayer, "drop", classname)
		item = get_pdata_cbase(item, 42, 5)
	}
	set_pdata_cbase(iPlayer, 367, -1, 4)
}

stock fm_strip_user_weapons(index)
{
    new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString,"player_weaponstrip"))
    if(!pev_valid(ent))
    return 0

    dllfunc(DLLFunc_Spawn, ent)
    dllfunc(DLLFunc_Use, ent, index)
    engfunc(EngFunc_RemoveEntity, ent)

    return 1
}

stock fm_give_item(index, const wEntity[])
{
	new iEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, wEntity))
	new Float:origin[3]
	pev(index, pev_origin, origin)
	set_pev(iEntity, pev_origin, origin)
	set_pev(iEntity, pev_spawnflags, pev(iEntity, pev_spawnflags) | SF_NORESPAWN)
	dllfunc(DLLFunc_Spawn, iEntity)
	new save = pev(iEntity, pev_solid)
	dllfunc(DLLFunc_Touch, iEntity, index)
	if(pev(iEntity, pev_solid) != save) return iEntity
	engfunc(EngFunc_RemoveEntity, iEntity)
	return -1
}

stock fm_find_ent_by_model(index, const classname[], const model[]) 
{
	new ent = index, mdl[72];
	while ((ent = fm_find_ent_by_class(ent, classname))) {
		pev(ent, pev_model, mdl, sizeof mdl - 1);
		if (equal(mdl, model))
			return ent;
	}

	return 0;
}
 stock fm_find_ent_by_class(index, const classname[]) return engfunc(EngFunc_FindEntityByString, index, "classname", classname) 

 stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
	set_pev(Player, pev_weaponanim, Sequence)
	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
	write_byte(Sequence)
	write_byte(pev(Player, pev_body))
	message_end()
}

public ClientCommand_Buy() return PLUGIN_HANDLED_MAIN

public Message_StatusIcon(msgid, msg_TargetOrigin, id)
{
	new icon[5]
	get_msg_arg_string(2, icon, 4)
	if (icon[0]=='b' && icon[2]=='y' && icon[3]=='z')
	{
		if (get_msg_arg_int(1))
		{
			set_pdata_int(id, 235, get_pdata_int(id,235)&~(1<<0))
			return PLUGIN_HANDLED
		}
	}
	return PLUGIN_CONTINUE
}
ColtSky is offline
Reply


Thread Tools
Display Modes

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 09:23.


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