请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

ESFKAMI

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz

ESFX

ESF: Xenoverse

ESF123

ESF1.2.3

EVM2.1

EVM2.1

ECXSSJ

ECX: TeamSSJ

ECX2.2

ECX RC2

ECX2.3

ECX RC3

查看: 1004|回复: 0

[函数|Function]setWeaponHoming

[复制链接]

211

主题

216

帖子

1142

积分

ESFKAMI

Rank: 8Rank: 8

积分
1142
发表于 2017-7-13 16:51:41 | 显示全部楼层 |阅读模式

  1. stock setWeaponHoming( Weapon, Velocity, Float: DetectableRange )
  2. {
  3.         new Target, Float: Range[33];
  4.         for( new i = 1; i <= 32; i++ )// 存储有效范围内可被探测到的气功波与玩家的距离[] Save the range between the client and the beam if the client is in the detectable range
  5.         {
  6.                 if( is_user_connected( i ) )
  7.                 {
  8.                         if( is_user_alive( i ) && i != pev( Weapon, pev_owner ) )
  9.                         {
  10.                                 if( entity_range( Weapon, i ) <= DetectableRange )
  11.                                 {
  12.                                         Range = entity_range( Weapon, i );
  13.                                         Target = i;
  14.                                 }
  15.                         }
  16.                 }
  17.         }

  18.         for( new n = 1; n <= 32; n++ )// 取出离气功波最近的玩家[] Get the index of the client who is nearest the beam
  19.         {
  20.                 if( Range[n] < Range[Target] && Range[n] != 0.0 )
  21.                 {
  22.                         Target = n;
  23.                 }
  24.         }

  25.         new CORE[3];
  26.         CORE[0] = Weapon;
  27.         CORE[1] = Target;
  28.         CORE[2] = Velocity;
  29.         set_task( 0.1, "WeaponTrackThink", Weapon, CORE, 3, "b" )// 每过0.1秒刷新一次气功波对目标的向量[] Refresh the vector of the beam to the client every 0.1s
  30. }

  31. public WeaponTrackThink( CORE[] )
  32. {
  33.         new Weapon = CORE[0];
  34.         new Target = CORE[1];
  35.         new Velocity = CORE[2];

  36.         if( Target != 0 && is_user_alive( Target ) )
  37.         {
  38.                 /* 获取气功波和目标的坐标[] Get the origins of the beam and the target */
  39.                 new Float: vec[3], Float: WeaponOrg[3], Float: TargetOrg[3];
  40.                 pev( Weapon, pev_origin, WeaponOrg );
  41.                 pev( Target, pev_origin, TargetOrg );

  42.                 /* 通过坐标计算向量[] Calculate velocity by origins */
  43.                 vec[0] = TargetOrg[0] - WeaponOrg[0];
  44.                 vec[1] = TargetOrg[1] - WeaponOrg[1];
  45.                 vec[2] = TargetOrg[2] - WeaponOrg[2];
  46.                 xs_vec_normalize( vec, vec );

  47.                 /* 修正实体角度[] Update the angles of the entity */
  48.                 new Float: ang[3];
  49.                 vector_to_angle( vec, ang );
  50.                 set_pev( Weapon, pev_angles, ang );

  51.                 /* 设置实体速度[] Give velocity to the beam */
  52.                 xs_vec_mul_scalar(vec, float( Velocity ), vec);
  53.                 set_pev( Weapon, pev_velocity, vec );
  54.         }
  55. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|ESFKAMI    

GMT+8, 2018-5-24 02:37 , Processed in 0.296234 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表