[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 25, Tue Nov 20 22:36:56 2007 UTC revision 28, Wed Nov 21 18:04:40 2007 UTC
# Line 1  Line 1 
1  /*  /*
2  Grab+ v1.2.2  Grab+ v1.2.3
3  Copyright (C) 2007 Ian (Juan) Cammarata  Copyright (C) 2007 Ian (Juan) Cammarata
4    
5  This program is free software: you can redistribute it and/or modify  This program is free software: you can redistribute it and/or modify
# Line 17  Line 17 
17  --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
18    
19  http://ian.cammarata.us/projects/grab_plus  http://ian.cammarata.us/projects/grab_plus
20  Nov 16 08:08  Nov 21 11:03
21    
22    
23  Description:  Description:
# Line 102  Line 102 
102  Change Log:  Change Log:
103  Key (+ added | - removed | c changed | f fixed)  Key (+ added | - removed | c changed | f fixed)
104    
105    v1.2.3 (Nov 21, 2007)
106    c: A few more small optimizations.
107    f: Bloodstream for choke wasn't aligned with player.
108    f: Bad message disconnect error when players were choked. ( stupid SVC_DAMAGE define )
109    
110  v1.2.2 (Nov 16, 2007)  v1.2.2 (Nov 16, 2007)
111  c: A few small code optimizations.  c: A few small code optimizations.
112    
# Line 129  Line 134 
134  #include <amxmisc>  #include <amxmisc>
135  #include <fakemeta>  #include <fakemeta>
136    
137  #define VERSION "1.2.2"  new const VERSION[ ] = "1.2.3"
138    new const TRKCVAR[ ] = "grab_plus_version"
139  #define ADMIN ADMIN_LEVEL_A  #define ADMIN ADMIN_LEVEL_A
140    
141  #define TSK_CHKE 50  #define TSK_CHKE 50
142    
 #define SVC_DAMAGE 19  
143  #define SF_FADEOUT 0  #define SF_FADEOUT 0
144    
145  new client_data[33][4]  new client_data[33][4]
# Line 156  Line 161 
161    
162  //Pseudo Constants  //Pseudo Constants
163  new MAXPLAYERS  new MAXPLAYERS
164  new SVC_SCREENFADE, SVC_SCREENSHAKE  new SVC_SCREENFADE, SVC_SCREENSHAKE, WTF_DAMAGE
165    
166  public plugin_init( )  public plugin_init( )
167  {  {
168          register_plugin( "Grab+", VERSION, "Ian Cammarata" )          register_plugin( "Grab+", VERSION, "Ian Cammarata" )
169          register_cvar( "grab_plus_version", VERSION, FCVAR_SERVER )          register_cvar( TRKCVAR, VERSION, FCVAR_SERVER )
170          set_cvar_string( "grab_plus_version", VERSION )          set_cvar_string( TRKCVAR, VERSION )
171    
172          p_enabled = register_cvar( "gp_enabled", "1" )          p_enabled = register_cvar( "gp_enabled", "1" )
173          p_players_only = register_cvar( "gp_players_only", "0" )          p_players_only = register_cvar( "gp_players_only", "0" )
# Line 208  Line 213 
213    
214          SVC_SCREENFADE = get_user_msgid( "ScreenFade" )          SVC_SCREENFADE = get_user_msgid( "ScreenFade" )
215          SVC_SCREENSHAKE = get_user_msgid( "ScreenShake" )          SVC_SCREENSHAKE = get_user_msgid( "ScreenShake" )
216            WTF_DAMAGE = get_user_msgid( "Damage" )
217  }  }
218    
219  public plugin_precache( )  public plugin_precache( )
# Line 217  Line 223 
223    
224  public fm_player_prethink( id )  public fm_player_prethink( id )
225  {  {
226            new target
227          //Search for a target          //Search for a target
228          if ( client_data[id][GRABBED] == -1 )          if ( client_data[id][GRABBED] == -1 )
229          {          {
# Line 228  Line 235 
235                  ret[1] += orig[1]                  ret[1] += orig[1]
236                  ret[2] += orig[2]                  ret[2] += orig[2]
237    
238                  new target = traceline( orig, ret, id, ret )                  target = traceline( orig, ret, id, ret )
239    
240                  if( 0 < target <= MAXPLAYERS )                  if( 0 < target <= MAXPLAYERS )
241                  {                  {
# Line 264  Line 271 
271                          }                          }
272                  }                  }
273          }          }
274    
275            target = client_data[id][GRABBED]
276          //If they've grabbed something          //If they've grabbed something
277          if( client_data[id][GRABBED] > 0 )          if( target > 0 )
278          {          {
                 new target = client_data[id][GRABBED]  
279                  if( !pev_valid( target ) || ( pev( target, pev_health ) < 1 && pev( target, pev_max_health ) ) )                  if( !pev_valid( target ) || ( pev( target, pev_health ) < 1 && pev( target, pev_max_health ) ) )
280                  {                  {
281                          unset_grabbed( id )                          unset_grabbed( id )
# Line 279  Line 287 
287                          do_choke( id )                          do_choke( id )
288    
289                  //Push and pull                  //Push and pull
290                  if ( client_data[id][FLAGS] & CDF_IN_PULL )                  new cdf = client_data[id][FLAGS]
291                    if ( cdf & CDF_IN_PULL )
292                          do_pull( id )                          do_pull( id )
293                  else if ( client_data[id][FLAGS] & CDF_IN_PUSH )                  else if ( cdf & CDF_IN_PUSH )
294                          do_push( id )                          do_push( id )
295    
296                  grab_think( id )                  if( target > MAXPLAYERS ) grab_think( id )
297          }          }
298          if( client_data[id][GRABBER] > 0 ) grab_think( client_data[id][GRABBER] )  
299            //If they're grabbed
300            target = client_data[id][GRABBER]
301            if( target > 0 ) grab_think( target )
302    
303          return FMRES_IGNORED          return FMRES_IGNORED
304  }  }
305    
306  public grab_think ( id )  public grab_think( id ) //id of the grabber
307  {  {
308          new target = client_data[id][GRABBED]          new target = client_data[id][GRABBED]
309    
# Line 493  Line 505 
505          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
506    
507          new dmg = get_pcvar_num( p_choke_dmg )          new dmg = get_pcvar_num( p_choke_dmg )
508          new Float:vec[3]          new vec[3]
509          get_target_origin_f( target )          FVecIVec( get_target_origin_f( target ), vec )
510    
511          message_begin( MSG_ONE, SVC_SCREENSHAKE, _, target )          message_begin( MSG_ONE, SVC_SCREENSHAKE, _, target )
512          write_short( 999999 ) //amount          write_short( 999999 ) //amount
# Line 512  Line 524 
524          write_byte( 200 ) //a          write_byte( 200 ) //a
525          message_end( )          message_end( )
526    
527          message_begin( MSG_ONE, SVC_DAMAGE, _, target )          message_begin( MSG_ONE, WTF_DAMAGE, _, target )
528          write_byte( 0 ) //damage armor          write_byte( 0 ) //damage armor
529          write_byte( dmg ) //damage health          write_byte( dmg ) //damage health
530          write_long( DMG_CRUSH ) //damage type          write_long( DMG_CRUSH ) //damage type
531          write_coord( floatround( vec[0] ) ) //origin[x]          write_coord( vec[0] ) //origin[x]
532          write_coord( floatround( vec[1] ) ) //origin[y]          write_coord( vec[1] ) //origin[y]
533          write_coord( floatround( vec[2] ) ) //origin[z]          write_coord( vec[2] ) //origin[z]
534          message_end( )          message_end( )
535    
536          message_begin( MSG_BROADCAST, SVC_TEMPENTITY )          message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
537          write_byte( TE_BLOODSTREAM )          write_byte( TE_BLOODSTREAM )
538          write_coord( floatround( vec[0] ) ) //pos.x          write_coord( vec[0] ) //pos.x
539          write_coord( floatround( vec[1] ) ) //pos.y          write_coord( vec[1] ) //pos.y
540          write_coord( floatround( vec[2] ) + 15 ) //pos.z          write_coord( vec[2] + 15 ) //pos.z
541          write_coord( random_num( 0, 255 ) ) //vec.x          write_coord( random_num( 0, 255 ) ) //vec.x
542          write_coord( random_num( 0, 255 ) ) //vec.y          write_coord( random_num( 0, 255 ) ) //vec.y
543          write_coord( random_num( 0, 255 ) ) //vec.z          write_coord( random_num( 0, 255 ) ) //vec.z
# Line 671  Line 683 
683    
684  stock get_view_pos( const id, Float:vViewPos[3] )  stock get_view_pos( const id, Float:vViewPos[3] )
685  {  {
686          new Float:ofs[3]          new Float:vOfs[3]
687          pev( id, pev_origin, vViewPos )          pev( id, pev_origin, vViewPos )
688          pev( id, pev_view_ofs, ofs )          pev( id, pev_view_ofs, vOfs )
689    
690          vViewPos[0] += ofs[0]          vViewPos[0] += vOfs[0]
691          vViewPos[1] += ofs[1]          vViewPos[1] += vOfs[1]
692          vViewPos[2] += ofs[2]          vViewPos[2] += vOfs[2]
693  }  }
694    
695  stock Float:vel_by_aim( id, speed = 1 )  stock Float:vel_by_aim( id, speed = 1 )

Legend:
Removed from v.25  
changed lines
  Added in v.28

Contact
ViewVC Help
Powered by ViewVC 1.0.4