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: |
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. |
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 |
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 |
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 |
|
|
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." ) |
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 ) |
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 ) |
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 |
{ |
{ |
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 |
} |
} |
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 ) |
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 ) |
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 ) |
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 |
|
|
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 ) |
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 |
{ |
{ |