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

ESFKAMI

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

ESFX

ESF: Xenoverse

ESF123

ESF1.2.3

EVM2.1

EVM2.1

ECXSSJ

ECX: TeamSSJ

ECX2.2

ECX RC2

ECX2.3

ECX RC3

查看: 1543|回复: 0

[代码|Code]气功波分离和跟踪|SetBeamDetachable&Trackable

[复制链接]

212

主题

217

帖子

1195

积分

ESFKAMI

Rank: 8Rank: 8

积分
1195
发表于 2017-7-13 17:18:46 | 显示全部楼层 |阅读模式



CCI:

  1. /* MOD.Weapon.core */

  2. stock MOD_Weapon_PreCache () {}

  3. public @WeaponBeam ( Client, Weapon, const Class[], Size )
  4. {
  5.         register_message( get_user_msgid("KillTrail"), "@KillTrail" );//我们最好在"PluginInit"里进行注册[] We had better register in 'PluginInit' tho

  6.         set_task( 0.5, "@BeamDetach", Weapon );// 设置气功波分离时间[] Set detachment time
  7. }

  8. public @BeamDetach( Weapon )
  9. {
  10.         set_pdata_int( pev( Weapon, pev_owner ), 202, false );// bool: AttackShooting

  11.         /* 分离气功波[] Detach the Beam */
  12.         message_begin( MSG_ALL, get_user_msgid( "DetachTrail" ) );
  13.         write_long( Weapon );
  14.         message_end( );

  15.         setWeaponHOMING( Weapon, 550.0, 1, 1 | 2);// 设置气功波速度并给它跟踪功能[] Set weapon speed and trackable
  16. }

  17. public @KillTrail( MsgID, dest )
  18. {
  19.         new Weapon = get_msg_arg_int( 1 );
  20.         remove_task( Weapon );
  21. }
复制代码
AMX Mod X 1.0.0:

  1. #include <amxmodx>
  2. #include <engine>
  3. #include <fakemeta>
  4. #include <xs>

  5. public plugin_init()
  6. {
  7.         register_plugin( "Set Beam Detachable And Trackable", "1.0", "ESFKAMI" );
  8.         register_message( get_user_msgid( "EETrail" ), "@EETrail" );// Hook气功波被发出后[] Hook when a beam has been shot out
  9.         register_message( get_user_msgid("KillTrail"), "@KillTrail" );// Hook气功波爆炸后[] Hook when the beem has been killed
  10. }

  11. public @EETrail( MsgID, dest )
  12. {
  13.         /**
  14.         1 - LONG - Client ??? - do not edit
  15.         2 - LONG - Weapon - do not edit
  16.         3 - BYTE - Client ??? - do not edit
  17.         4 - SHORT - Head Start A
  18.         5 - SHORT - Head Start B
  19.         6 - SHORT - Head End A
  20.         7 - SHORT - Head End B
  21.         8 - SHORT - Trail
  22.         9 - BYTE - Size
  23.         10 - BYTE - Segement Length ???
  24.         11 - COORD - X - do not edit
  25.         12 - COORD - Y - do not edit
  26.         13 - COORD - Z - do not edit
  27.         **/

  28.         new Client = get_msg_arg_int( 1 );
  29.         new Weapon = get_msg_arg_int( 2 );
  30.         static WeaponClip, WeaponAmmo;
  31.         new WeaponIndex = get_user_weapon( Client, WeaponClip, WeaponAmmo );

  32.         if( WeaponIndex == 15 )
  33.         {
  34.                 set_task( 0.5, "@BeamDetach", Weapon );// 设置气功波分离时间[] Set detachment time
  35.         }
  36. }

  37. public @BeamDetach( Weapon )
  38. {
  39.         set_pdata_int( pev( Weapon, pev_owner ), 202, false );// bool: AttackShooting

  40.         /* 分离气功波[] Detach the Beam */
  41.         message_begin( MSG_ALL, get_user_msgid( "DetachTrail" ) );
  42.         write_long( Weapon );
  43.         message_end( );

  44.         setWeaponHoming( Weapon, 500, 5000.0 );// 设置气功波速度并给它跟踪功能[] Set weapon speed and trackable
  45. }

  46. stock setWeaponHoming( Weapon, Velocity, Float: DetectableRange )
  47. {
  48.         new Target, Float: Range[33];
  49.         for( new i = 1; i <= 32; i++ )// 存储有效范围内可被探测到的气功波与玩家的距离[] Save the range between the client and the beam if the client is in the detectable range
  50.         {
  51.                 if( is_user_connected( i ) )
  52.                 {
  53.                         if( is_user_alive( i ) && i != pev( Weapon, pev_owner ) )
  54.                         {
  55.                                 if( entity_range( Weapon, i ) <= DetectableRange )
  56.                                 {
  57.                                         Range[i] = entity_range( Weapon, i );
  58.                                         Target = i;
  59.                                 }
  60.                         }
  61.                 }
  62.         }

  63.         for( new n = 1; n <= 32; n++ )// 取出离气功波最近的玩家[] Get the index of the client who is nearest the beam
  64.         {
  65.                 if( Range[n] < Range[Target] && Range[n] != 0.0 )
  66.                 {
  67.                         Target = n;
  68.                 }
  69.         }

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

  76. public WeaponTrackThink( CORE[] )
  77. {
  78.         new Weapon = CORE[0];
  79.         new Target = CORE[1];
  80.         new Velocity = CORE[2];

  81.         if( Target != 0 && is_user_alive( Target ) )
  82.         {
  83.                 /* 获取气功波和目标的坐标[] Get the origins of the beam and the target */
  84.                 new Float: vec[3], Float: WeaponOrg[3], Float: TargetOrg[3];
  85.                 pev( Weapon, pev_origin, WeaponOrg );
  86.                 pev( Target, pev_origin, TargetOrg );

  87.                 /* 通过坐标计算向量[] Compute velocity by origins */
  88.                 vec[0] = TargetOrg[0] - WeaponOrg[0];
  89.                 vec[1] = TargetOrg[1] - WeaponOrg[1];
  90.                 vec[2] = TargetOrg[2] - WeaponOrg[2];
  91.                 xs_vec_normalize( vec, vec );

  92.                 /* 修正实体角度[] Update the angles of the entity */
  93.                 new Float: ang[3];
  94.                 vector_to_angle( vec, ang );
  95.                 set_pev( Weapon, pev_angles, ang );

  96.                 /* 设置实体速度[] Give velocity to the beam */
  97.                 xs_vec_mul_scalar(vec, float( Velocity ), vec);
  98.                 set_pev( Weapon, pev_velocity, vec );
  99.         }
  100. }

  101. public @KillTrail( MsgID, dest )
  102. {
  103.         new Weapon = get_msg_arg_int( 1 );
  104.         remove_task( Weapon );
  105. }
复制代码
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|ESFKAMI    

GMT+8, 2018-7-20 18:23 , Processed in 0.301750 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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