PDA

View Full Version : Spray Event Last Request


JoaoVieira
12-28-2016, 18:39
Hello , i would like you to help me with this:


public EventSpray( )
{
if( g_iCurrentGame == LR_SPRAY )
{

new iOrigin[ 3 ];
iOrigin[ 0 ] = read_data( 3 );
iOrigin[ 1 ] = read_data( 4 );
iOrigin[ 2 ] = read_data( 5 );

new Float:vecSprayOrigin[ 3 ];
IVecFVec( iOrigin, vecSprayOrigin );

new iPlayerCT = read_data( 2 );
new iPlayerT = read_data( 2 );

new Float:vecPlayerOrigin[ 3 ];
get_user_origin( iPlayerT, iOrigin, 1 );
get_user_origin( iPlayerCT, iOrigin, 1 );
IVecFVec( iOrigin, vecPlayerOrigin );

new Float:vecDirection[ 3 ];
xs_vec_sub( vecSprayOrigin, vecPlayerOrigin, vecDirection );

xs_vec_mul_scalar( vecDirection, 10.0 / vector_length( vecDirection ), vecDirection );

new Float:vecStop[ 3 ];
xs_vec_add( vecSprayOrigin, vecDirection, vecStop );
xs_vec_mul_scalar( vecDirection, -1.0, vecDirection );

new Float:vecStart[ 3 ];
xs_vec_add( vecSprayOrigin, vecDirection, vecStart );

engfunc( EngFunc_TraceLine, vecStart, vecStop, IGNORE_MONSTERS, -1, 0 );

get_tr2( 0, TR_vecPlaneNormal, vecDirection );

vecDirection[ 2 ] = 0.0;

xs_vec_mul_scalar( vecDirection, 5.0 / vector_length( vecDirection ), vecDirection );
xs_vec_add( vecSprayOrigin, vecDirection, vecStart );
xs_vec_copy( vecStart, vecStop );
vecStop[ 2 ] -= 9999.0;

engfunc( EngFunc_TraceLine, vecStart, vecStop, IGNORE_MONSTERS, -1, 0 );

get_tr2( 0, TR_vecEndPos, vecStop );

new szNameT[ 32 ], Float:SprayDistance[33]
get_user_name( iPlayerT, szNameT, charsmax( szNameT ) );

new szNameCT[ 32 ]
get_user_name( iPlayerCT, szNameCT, charsmax( szNameCT ) );

SprayDistance[iPlayerT] = ( vecStart[ 2 ] - vecStop[ 2 ] );
SprayDistance[iPlayerCT] = ( vecStart[ 2 ] - vecStop[ 2 ] );

give_item( iPlayerT, "weapon_knife" )
give_item( iPlayerCT, "weapon_knife" )

if( iPlayerT == g_iLastRequest[ LR_PRISONER ] )
{
g_spray++

}
else if( iPlayerCT == g_iLastRequest[ LR_GUARD ] )
{

g_spray++

}

if(SprayDistance[ g_iLastRequest[ LR_PRISONER ] ] > SprayDistance[ g_iLastRequest[ LR_GUARD ] ])
{
if(g_spray == 2)
{
user_kill(g_iLastRequest[ LR_GUARD ], 1 );
}
}
else (SprayDistance[ g_iLastRequest[ LR_PRISONER ] ] < SprayDistance[ g_iLastRequest[ LR_GUARD ] ])
{
if(g_spray == 2)
{
user_kill(g_iLastRequest[ LR_PRISONER ], 1 );
}

}
}
return PLUGIN_CONTINUE;
}

I have tryed and i though this is fine , but it does not work , and i dont know why.

I want it to do: If last guard spray more high than prisoner , the prisoner die , and if prisoner spray more high than guard , the guard dies.
Thanks.

OciXCrom
12-28-2016, 19:08
You used read_data(2) for both players, so they are the same. Also, in the end you have else instead of else if.

JoaoVieira
12-28-2016, 19:16
You used read_data(2) for both players, so they are the same. Also, in the end you have else instead of else if.

Didnt get noticed of the read_data , so , should i do like this?:


public EventSpray( )
{
if( g_iCurrentGame == LR_SPRAY )
{

new iOrigin[ 3 ];
iOrigin[ 0 ] = read_data( 3 );
iOrigin[ 1 ] = read_data( 4 );
iOrigin[ 2 ] = read_data( 5 );

new Float:vecSprayOrigin[ 3 ];
IVecFVec( iOrigin, vecSprayOrigin );

new iPlayerT = read_data( 1 );
new iPlayerCT = read_data( 2 );

new Float:vecPlayerOrigin[ 3 ];
get_user_origin( iPlayerT, iOrigin, 1 );
get_user_origin( iPlayerCT, iOrigin, 1 );
IVecFVec( iOrigin, vecPlayerOrigin );

new Float:vecDirection[ 3 ];
xs_vec_sub( vecSprayOrigin, vecPlayerOrigin, vecDirection );

xs_vec_mul_scalar( vecDirection, 10.0 / vector_length( vecDirection ), vecDirection );

new Float:vecStop[ 3 ];
xs_vec_add( vecSprayOrigin, vecDirection, vecStop );
xs_vec_mul_scalar( vecDirection, -1.0, vecDirection );

new Float:vecStart[ 3 ];
xs_vec_add( vecSprayOrigin, vecDirection, vecStart );

engfunc( EngFunc_TraceLine, vecStart, vecStop, IGNORE_MONSTERS, -1, 0 );

get_tr2( 0, TR_vecPlaneNormal, vecDirection );

vecDirection[ 2 ] = 0.0;

xs_vec_mul_scalar( vecDirection, 5.0 / vector_length( vecDirection ), vecDirection );
xs_vec_add( vecSprayOrigin, vecDirection, vecStart );
xs_vec_copy( vecStart, vecStop );
vecStop[ 2 ] -= 9999.0;

engfunc( EngFunc_TraceLine, vecStart, vecStop, IGNORE_MONSTERS, -1, 0 );

get_tr2( 0, TR_vecEndPos, vecStop );

new szNameT[ 32 ], Float:SprayDistance[33]
get_user_name( iPlayerT, szNameT, charsmax( szNameT ) );

new szNameCT[ 32 ]
get_user_name( iPlayerCT, szNameCT, charsmax( szNameCT ) );

SprayDistance[iPlayerT] = ( vecStart[ 2 ] - vecStop[ 2 ] );
SprayDistance[iPlayerCT] = ( vecStart[ 2 ] - vecStop[ 2 ] );

give_item( iPlayerT, "weapon_knife" )
give_item( iPlayerCT, "weapon_knife" )

if( iPlayerT == g_iLastRequest[ LR_PRISONER ] )
{
g_spray++

}
else if( iPlayerCT == g_iLastRequest[ LR_GUARD ] )
{
g_spray++

}

if(SprayDistance[ LR_PRISONER ] > SprayDistance[ LR_GUARD ])
{
if(g_spray == 2)
{
user_kill(g_iLastRequest[ LR_GUARD ], 1 );
}
}
else if(SprayDistance[ LR_PRISONER ] < SprayDistance[ LR_GUARD ])
{
if(g_spray == 2)
{
user_kill(g_iLastRequest[ LR_PRISONER ], 1 );
}

}
}
return PLUGIN_CONTINUE;
}

JoaoVieira
12-28-2016, 19:49
I realize that i can just do 1 read_data , new iPlayer = read_data(2). but still not killing the lowest spray