[Half-Life AMXX] / grab_plus.sma Repository:
ViewVC logotype

Diff of /grab_plus.sma

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 9, Fri Nov 2 01:14:09 2007 UTC revision 10, Sun Nov 4 03:44:10 2007 UTC
# Line 16  Line 16 
16  --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
17    
18  http://ian.cammarata.us/projects/grab_plus  http://ian.cammarata.us/projects/grab_plus
19  Nov 01 04:16  Nov 02 01:52
20    
21    
22  Description:  Description:
# Line 47  Line 47 
47    
48  +pull/+push (or invnext/invprev): Pulls/pushes the grabbed towards/away from you as you hold the button.  +pull/+push (or invnext/invprev): Pulls/pushes the grabbed towards/away from you as you hold the button.
49    
50  +use : Chokes the grabbed (it damages the grabbed with 5 (cvar: gp_chokedmg) hp per 1.5 (cvar: gp_choketime) seconds)  +use : Chokes the grabbed (it damages the grabbed with 5 (cvar: gp_choke_dmg) hp per 1.5 (cvar: gp_choke_time) seconds)
51  drop - Throws the grabbed with 1500 velocity. (cvar: gp_throwforce)  drop - Throws the grabbed with 1500 velocity. (cvar: gp_throw_force)
52    
53    
54  Cvars (First value is default):  Cvars (First value is default):
55  gp_enabled <1|0> Enables all plugin functionality.  gp_enabled <1|0> Enables all plugin functionality.
56  gp_playersonly <0|1> Disables admins grabbing entities other than players.  gp_players_only <0|1> Disables admins grabbing entities other than players.
57    
58  gp_min_dist <90|...> Min distance between the grabber and grabbed.  gp_min_dist <90|...> Min distance between the grabber and grabbed.
59  gp_grabforce <8|...> Sets the amount of force used when grabbing players.  gp_grab_force <8|...> Sets the amount of force used when grabbing players.
60  gp_throwforce <1500|...> Sets the power used when throwing players.  gp_throw_force <1500|...> Sets the power used when throwing players.
61  gp_speed <5|...> How fast the grabbed moves when using push and pull.  gp_speed <5|...> How fast the grabbed moves when using push and pull.
62    
63  gp_choketime <1.5|...> Time frequency for choking.  gp_choke_time <1.5|...> Time frequency for choking.
64  gp_chokedmg <5|...> Amount of damage done with each choke.  gp_choke_dmg <5|...> Amount of damage done with each choke.
65    gp_auto_choke <1|0> Enable/disable choking automatically with +pull command.
66    
67  gp_screenfade <1|0> Enables/disables screenfade when grabbing.  gp_screen_fade <1|0> Enables/disables screenfade when grabbing.
68  gp_glow <1|0> Enables/disables glowing for grabbed objects.  gp_glow <1|0> Enables/disables glowing for grabbed objects.
69    
70  gp_glow_r <50|0-255> Sets red amount for glow and screenfade.  gp_glow_r <50|0-255> Sets red amount for glow and screenfade.
# Line 104  Line 105 
105  Change Log:  Change Log:
106  Key (+ added | - removed | c changed | f fixed)  Key (+ added | - removed | c changed | f fixed)
107    
108  v1.2 (Nov ??, 2007)  v1.2 (Nov 02, 2007)
109  +: Cvars gp_screenfade and gp_glow to enable/disable these features.  +: Cvars gp_screen_fade and gp_glow to enable/disable these features.
110  +: Cvar gp_glow_a controls to control alpha of screenfade and glow.  +: Cvar gp_glow_a controls to control alpha of screenfade and glow.
111    +: Cvar gp_auto_choke to enable/disable choking automatically with +pull command.
112  c: Removed dependency of engine and fun modules.  Thanks to vittu for doing all the work.  c: Removed dependency of engine and fun modules.  Thanks to vittu for doing all the work.
113    c: Made cvar names more consistent by adding more underscores.
114  f: Fixed compile bug with amxx 1.8.0 (Compiles with 1.7x as well).  f: Fixed compile bug with amxx 1.8.0 (Compiles with 1.7x as well).
115    
116  v1.1 (Oct 16, 2007)  v1.1 (Oct 16, 2007)
117  +: Grab a few types of entities other than players.  +: Grab a few types of entities other than players.
118  +: Cvar gp_playersonly.  +: Cvar gp_players_only.
119    
120  v1.0 (Oct 13, 2007)  v1.0 (Oct 13, 2007)
121  !: Initial release  !: Initial release
# Line 123  Line 126 
126  #include <amxmisc>  #include <amxmisc>
127  #include <fakemeta>  #include <fakemeta>
128    
129  #define VERSION "1.2b5"  #define VERSION "1.2b6"
130  #define ADMIN ADMIN_LEVEL_A  #define ADMIN ADMIN_LEVEL_A
131    
132  #define TSK_CHKE 50  #define TSK_CHKE 50
# Line 142  Line 145 
145  #define CDF_NO_CHOKE  (1<<2)  #define CDF_NO_CHOKE  (1<<2)
146    
147  //Cvar Pointers  //Cvar Pointers
148  new p_enabled, p_playersonly  new p_enabled, p_players_only
149  new p_throwforce, p_mindist, p_speed, p_grabforce  new p_throw_force, p_min_dist, p_speed, p_grab_force
150  new p_choketime, p_chokedmg  new p_choke_time, p_choke_dmg, p_auto_choke
151  new p_glow_r, p_glow_b, p_glow_g, p_glow_a  new p_glow_r, p_glow_b, p_glow_g, p_glow_a
152  new p_fade, p_glow  new p_fade, p_glow
153    
# Line 159  Line 162 
162          set_cvar_string( "grab_plus_version", VERSION )          set_cvar_string( "grab_plus_version", VERSION )
163    
164          p_enabled = register_cvar( "gp_enabled", "1" )          p_enabled = register_cvar( "gp_enabled", "1" )
165          p_playersonly = register_cvar( "gp_playersonly", "0" )          p_players_only = register_cvar( "gp_players_only", "0" )
166    
167          p_mindist = register_cvar ( "gp_min_dist", "90" )          p_min_dist = register_cvar ( "gp_min_dist", "90" )
168          p_throwforce = register_cvar( "gp_throwforce", "1500" )          p_throw_force = register_cvar( "gp_throw_force", "1500" )
169          p_grabforce = register_cvar( "gp_grabforce", "8" )          p_grab_force = register_cvar( "gp_grab_force", "8" )
170          p_speed = register_cvar( "gp_speed", "5" )          p_speed = register_cvar( "gp_speed", "5" )
171    
172          p_choketime = register_cvar( "gp_choketime", "1.5" )          p_choke_time = register_cvar( "gp_choke_time", "1.5" )
173          p_chokedmg = register_cvar( "gp_chokedmg", "5" )          p_choke_dmg = register_cvar( "gp_choke_dmg", "5" )
174            p_auto_choke = register_cvar( "gp_auto_choke", "1" )
175    
176          p_glow_r = register_cvar( "gp_glow_r", "50" )          p_glow_r = register_cvar( "gp_glow_r", "50" )
177          p_glow_g = register_cvar( "gp_glow_g", "0" )          p_glow_g = register_cvar( "gp_glow_g", "0" )
178          p_glow_b = register_cvar( "gp_glow_b", "0" )          p_glow_b = register_cvar( "gp_glow_b", "0" )
179          p_glow_a = register_cvar( "gp_glow_a", "200" )          p_glow_a = register_cvar( "gp_glow_a", "200" )
180    
181          p_fade = register_cvar( "gp_screenfade", "1" )          p_fade = register_cvar( "gp_screen_fade", "1" )
182          p_glow = register_cvar( "gp_glow", "1" )          p_glow = register_cvar( "gp_glow", "1" )
183    
184          register_clcmd( "amx_grab", "force_grab", ADMIN, "Grab client & teleport to you." )          register_clcmd( "amx_grab", "force_grab", ADMIN, "Grab client & teleport to you." )
# Line 221  Line 225 
225                  pev( id, pev_view_ofs, ret )                  pev( id, pev_view_ofs, ret )
226    
227                  for( new i = 0; i < 3; i++ ) orig[i] += ret[i]                  for( new i = 0; i < 3; i++ ) orig[i] += ret[i]
228                  velocity_by_aim( id, 1, ret )                  //velocity_by_aim( id, 1, ret )
229                    pev( id, pev_v_angle, ret )
230                  for( new i = 0; i < 3; i++ ) ret[i] = orig[i] + ( ret[i] * 9999 )                  for( new i = 0; i < 3; i++ ) ret[i] = orig[i] + ( ret[i] * 9999 )
231    
232                  engfunc( EngFunc_TraceLine, orig, ret, 0, id, 0 )                  engfunc( EngFunc_TraceLine, orig, ret, 0, id, 0 )
# Line 233  Line 238 
238                          if( is_grabbed( target, id ) ) return PLUGIN_CONTINUE                          if( is_grabbed( target, id ) ) return PLUGIN_CONTINUE
239                          set_grabbed( id, target )                          set_grabbed( id, target )
240                  }                  }
241                  else if( !get_pcvar_num( p_playersonly ) )                  else if( !get_pcvar_num( p_players_only ) )
242                  {                  {
243                          new movetype                          new movetype
244                          if( target )                          if( target )
# Line 301  Line 306 
306    
307          pev( id, pev_origin, dest )          pev( id, pev_origin, dest )
308          pev( id, pev_view_ofs, tmpvec )          pev( id, pev_view_ofs, tmpvec )
309          velocity_by_aim( id, len, tmpvec2 )  
310            //velocity_by_aim( id, len, tmpvec2 )
311            pev( id, pev_v_angle, tmpvec2 )
312            for( new i = 0; i < 3; i++ ) tmpvec2[i] *= len
313    
314          torig = get_target_origin_f( target )          torig = get_target_origin_f( target )
315    
316          new force = get_pcvar_num( p_grabforce )          new force = get_pcvar_num( p_grab_force )
317    
318          for( new i = 0; i < 3; i++ )          for( new i = 0; i < 3; i++ )
319          {          {
# Line 372  Line 381 
381          new target = client_data[id][GRABBED]          new target = client_data[id][GRABBED]
382          if( target > 0 )          if( target > 0 )
383          {          {
384                  new Float:pVelocity[3]                  new Float:vel[3]
385                  velocity_by_aim( id, get_pcvar_num(p_throwforce), pVelocity )                  new len = get_pcvar_num(p_throw_force)
386                  set_pev( target, pev_velocity, pVelocity )  
387                    //velocity_by_aim( id, get_pcvar_num(p_throw_force), vel )
388                    pev( id, pev_v_angle, vel )
389                    for( new i = 0; i < 3; i++ ) vel[i] *= len
390    
391                    set_pev( target, pev_velocity, vel )
392                  unset_grabbed( id )                  unset_grabbed( id )
393                  return PLUGIN_HANDLED                  return PLUGIN_HANDLED
394          }          }
# Line 433  Line 447 
447          pev( target, pev_origin, torig )          pev( target, pev_origin, torig )
448          pev( id, pev_origin, orig )          pev( id, pev_origin, orig )
449          client_data[id][GRAB_LEN] = floatround( get_distance_f( torig, orig ) )          client_data[id][GRAB_LEN] = floatround( get_distance_f( torig, orig ) )
450          if( client_data[id][GRAB_LEN] < get_pcvar_num( p_mindist ) ) client_data[id][GRAB_LEN] = get_pcvar_num( p_mindist )          if( client_data[id][GRAB_LEN] < get_pcvar_num( p_min_dist ) ) client_data[id][GRAB_LEN] = get_pcvar_num( p_min_dist )
451  }  }
452    
453  public push( id )  public push( id )
# Line 474  Line 488 
488    
489  public do_pull( id )  public do_pull( id )
490  {  {
491          new mindist = get_pcvar_num( p_mindist )          new mindist = get_pcvar_num( p_min_dist )
492          new len = client_data[id][GRAB_LEN]          new len = client_data[id][GRAB_LEN]
493    
494          if( len > mindist )          if( len > mindist )
# Line 483  Line 497 
497                  if( len < mindist ) len = mindist                  if( len < mindist ) len = mindist
498                  client_data[id][GRAB_LEN] = len                  client_data[id][GRAB_LEN] = len
499          }          }
500          else do_choke( id )          else if( get_pcvar_num( p_auto_choke ) )
501                    do_choke( id )
502  }  }
503    
504  public do_choke( id )  public do_choke( id )
# Line 491  Line 506 
506          new target = client_data[id][GRABBED]          new target = client_data[id][GRABBED]
507          if( client_data[id][FLAGS] & CDF_NO_CHOKE || id == target || target > MAXPLAYERS) return          if( client_data[id][FLAGS] & CDF_NO_CHOKE || id == target || target > MAXPLAYERS) return
508    
509          new dmg = get_pcvar_num( p_chokedmg )          new dmg = get_pcvar_num( p_choke_dmg )
510          new Float:vec[3]          new Float:vec[3]
511          get_target_origin_f( target )          get_target_origin_f( target )
512    
# Line 539  Line 554 
554          emit_sound( target, CHAN_BODY, "player/PL_PAIN2.WAV", VOL_NORM, ATTN_NORM, 0, PITCH_NORM )          emit_sound( target, CHAN_BODY, "player/PL_PAIN2.WAV", VOL_NORM, ATTN_NORM, 0, PITCH_NORM )
555    
556          client_data[id][FLAGS] ^= CDF_NO_CHOKE          client_data[id][FLAGS] ^= CDF_NO_CHOKE
557          set_task( get_pcvar_float( p_choketime ), "clear_no_choke", TSK_CHKE + id )          set_task( get_pcvar_float( p_choke_time ), "clear_no_choke", TSK_CHKE + id )
558  }  }
559    
560  public clear_no_choke( tskid )  public clear_no_choke( tskid )
# Line 572  Line 587 
587          pev( id, pev_origin, orig )          pev( id, pev_origin, orig )
588          pev( id, pev_view_ofs, tmpvec )          pev( id, pev_view_ofs, tmpvec )
589          for( i = 0; i < 3; i++ ) tmpvec[i] += orig[i]          for( i = 0; i < 3; i++ ) tmpvec[i] += orig[i]
590          velocity_by_aim( id, get_pcvar_num( p_mindist ), tmpvec2 )  
591            //velocity_by_aim( id, get_pcvar_num( p_min_dist ), tmpvec2 )
592            new min_dist = get_pcvar_num( p_min_dist )
593            pev( id, pev_v_angle, tmpvec2 )
594            for( new i = 0; i < 3; i++ ) tmpvec2[i] *= min_dist
595    
596          for( new j = 1; j < 11 && !safe; j++ )          for( new j = 1; j < 11 && !safe; j++ )
597          {          {

Legend:
Removed from v.9  
changed lines
  Added in v.10

Contact
ViewVC Help
Powered by ViewVC 1.0.4