Discuz! Board
标题:
[函数|Function]setWeaponHoming
[打印本页]
作者:
Jerry小坏
时间:
2017-7-13 16:51
标题:
[函数|Function]setWeaponHoming
stock setWeaponHoming( Weapon, Velocity, Float: DetectableRange )
{
new Target, Float: Range[33];
for( new i = 1; i <= 32; i++ )// 存储有效范围内可被探测到的气功波与玩家的距离[] Save the range between the client and the beam if the client is in the detectable range
{
if( is_user_connected( i ) )
{
if( is_user_alive( i ) && i != pev( Weapon, pev_owner ) )
{
if( entity_range( Weapon, i ) <= DetectableRange )
{
Range = entity_range( Weapon, i );
Target = i;
}
}
}
}
for( new n = 1; n <= 32; n++ )// 取出离气功波最近的玩家[] Get the index of the client who is nearest the beam
{
if( Range[n] < Range[Target] && Range[n] != 0.0 )
{
Target = n;
}
}
new CORE[3];
CORE[0] = Weapon;
CORE[1] = Target;
CORE[2] = Velocity;
set_task( 0.1, "WeaponTrackThink", Weapon, CORE, 3, "b" )// 每过0.1秒刷新一次气功波对目标的向量[] Refresh the vector of the beam to the client every 0.1s
}
public WeaponTrackThink( CORE[] )
{
new Weapon = CORE[0];
new Target = CORE[1];
new Velocity = CORE[2];
if( Target != 0 && is_user_alive( Target ) )
{
/* 获取气功波和目标的坐标[] Get the origins of the beam and the target */
new Float: vec[3], Float: WeaponOrg[3], Float: TargetOrg[3];
pev( Weapon, pev_origin, WeaponOrg );
pev( Target, pev_origin, TargetOrg );
/* 通过坐标计算向量[] Calculate velocity by origins */
vec[0] = TargetOrg[0] - WeaponOrg[0];
vec[1] = TargetOrg[1] - WeaponOrg[1];
vec[2] = TargetOrg[2] - WeaponOrg[2];
xs_vec_normalize( vec, vec );
/* 修正实体角度[] Update the angles of the entity */
new Float: ang[3];
vector_to_angle( vec, ang );
set_pev( Weapon, pev_angles, ang );
/* 设置实体速度[] Give velocity to the beam */
xs_vec_mul_scalar(vec, float( Velocity ), vec);
set_pev( Weapon, pev_velocity, vec );
}
}
复制代码
欢迎光临 Discuz! Board (https://esfbbs.foxnyx.top/)
Powered by Discuz! X3.2