Начинающий
- Статус
- Оффлайн
- Регистрация
- 31 Дек 2020
- Сообщения
- 398
- Реакции
- 13
Люди помогите обрезать данный исходник граба. (КС 1.6). Мне нужно чтобы в нем не было таких функций: Дать свободный день, Дать розыск. Если обрежите я буду вам ну очень благодарен( да я даун не умею нормально обрезать). Вот исходник данного SMA
Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>
#include <fun>
#include <dhudmessage>
#define PL_NAME "[JBE] Grab"
#define PL_VERSION "0.0.2"
#define PL_AUTHOR "OverGame + RealPlugins"
#define is_user_grab(%0) (get_user_flags(id) & ADMIN_MAP)
#define PL_CHAT_PREFIX "!g[!tJBE!g]!y"
#define PL_MENU_PREFIX "\d[JBE]"
#define PL_DB_MAX_USERS 36
#define TSK_CHKE 50
#define SF_FADEOUT 0
/* -> Информер <- */
native jbe_informer_offset_up( client );
native jbe_informer_offset_down( client );
/* -> Команда игрока <- */
native jbe_get_user_team( client );
native jbe_set_user_team( client, team );
/* -> Разное <- */
native jbe_get_day_mode();
native jbe_get_user_money( client );
/* -> Выходной <- */
native jbe_is_user_free( client );
native jbe_add_user_free( client );
native jbe_sub_user_free( client );
/* -> Розыск <- */
native jbe_is_user_wanted( client );
native jbe_add_user_wanted( client );
native jbe_sub_user_wanted( client );
new client_data[33][5]
#define GRABBED 0
#define GRABBER 1
#define GRAB_LEN 2
#define FLAGS 3
#define HOOK 4
#define m_bitsDamageType 76
#define CDF_IN_PUSH (1<<0)
#define CDF_IN_PULL (1<<1)
#define CDF_NO_CHOKE (1<<2)
new p_enabled, p_players_only
new p_throw_force, p_min_dist, p_speed, p_grab_force
new p_choke_time, p_choke_dmg, p_auto_choke
new p_glow_r, p_glow_b, p_glow_g, p_glow_a
new p_fade, p_glow
new grab_check[33]
new inflash[33];
new MAXPLAYERS
new SVC_SCREENFADE, SVC_SCREENSHAKE, WTF_DAMAGE
new gSprite[] = "sprites/tok2.spr"
new gSound[] = "tok2.wav"
new gSpr, g_axcid
enum DATA
{
AUTH[36], PASS[36], LEVEL[7], TYPE[5]
};
new Array:g_aData, g_PlayerData[DATA], g_PlayerActive[33], g_PlayerFlags[33][7];
public plugin_init()
{
register_plugin(PL_NAME, PL_VERSION, PL_AUTHOR)
p_enabled = register_cvar("gp_enabled", "1")
p_players_only = register_cvar("gp_players_only", "0")
p_min_dist = register_cvar ("gp_min_dist", "90")
p_throw_force = register_cvar("gp_throw_force", "1500")
p_grab_force = register_cvar("gp_grab_force", "8")
p_speed = register_cvar("gp_speed", "5")
p_choke_time = register_cvar("gp_choke_time", "1.5"
p_choke_dmg = register_cvar("gp_choke_dmg", "5")
p_auto_choke = register_cvar("gp_auto_choke", "1")
p_glow_r = register_cvar("gp_glow_r", "80")
p_glow_g = register_cvar("gp_glow_g", "141")
p_glow_b = register_cvar("gp_glow_b", "244")
p_glow_a = register_cvar("gp_glow_a", "200")
p_fade = register_cvar("gp_screen_fade", "0")
p_glow = register_cvar("gp_glow", "1")
register_menu( "grab_menu", 1023, "FuncGrabMenu" );
register_clcmd("amx_grab", "force_grab");
register_clcmd("grab_toggle", "grab_toggle");
register_clcmd("+grab", "grab");
register_clcmd( "-grab", "unset_grabbed");
register_clcmd("+push", "push");
register_clcmd("-push", "push");
register_clcmd("+pull", "pull");
register_clcmd("-pull", "pull");
register_clcmd("push", "push2");
register_clcmd("pull", "pull2");
register_clcmd("drop", "throw");
register_event( "ScreenFade", "FlashEvent", "b", "4=255", "5=255", "6=255", "7>199" )
register_event( "DeathMsg", "DeathMsg", "a" )
register_forward( FM_PlayerPreThink, "fm_player_prethink")
MAXPLAYERS = get_maxplayers()
SVC_SCREENFADE = get_user_msgid("ScreenFade")
SVC_SCREENSHAKE = get_user_msgid("ScreenShake")
WTF_DAMAGE = get_user_msgid("Damage")
return PLUGIN_CONTINUE
}
public plugin_cfg() {
g_aData = ArrayCreate(DATA);
new buff[256], fp = fopen("addons/amxmodx/configs/jbe_grab.ini", "rt");
if(!fp) return set_fail_state("File ^"addons/amxmodx/configs/jbe_grab.ini^" not found");
while(!feof(fp)) {
fgets(fp, buff, charsmax(buff));
if(buff[0] && buff[0] != ';' && parse(buff, g_PlayerData[AUTH], charsmax(g_PlayerData[AUTH]), g_PlayerData[PASS], charsmax(g_PlayerData[PASS]), g_PlayerData[LEVEL], charsmax(g_PlayerData[LEVEL]), g_PlayerData[TYPE], charsmax(g_PlayerData[TYPE])))
ArrayPushArray(g_aData, g_PlayerData);
}
return fclose(fp);
}
public client_putinserver( client ) {
g_PlayerActive[ client ] = SearchClient( client );
return PLUGIN_CONTINUE;
}
public plugin_precache( )
{
precache_sound( "grab_id_mine.wav" );
precache_sound( "grab_victim_xa.wav" );
precache_sound( gSound )
g_axcid = precache_model("sprites/snow_3.spr")
gSpr = precache_model(gSprite)
engfunc(EngFunc_PrecacheModel, "models/jb_engine/v_grab_engine.mdl");
}
public fm_player_prethink( id )
{
new target
//Search for a target
if ( client_data[id][GRABBED] == -1 )
{
new Float:orig[3], Float:ret[3]
get_view_pos( id, orig )
ret = vel_by_aim( id, 9999 )
ret[0] += orig[0]
ret[1] += orig[1]
ret[2] += orig[2]
target = traceline( orig, ret, id, ret )
if( 0 < target <= MAXPLAYERS )
{
if( is_grabbed( target, id ) ) return FMRES_IGNORED
set_grabbed( id, target )
}
else if( !get_pcvar_num( p_players_only ) )
{
new movetype
if( target && pev_valid( target ) )
{
movetype = pev( target, pev_movetype )
if( !( movetype == MOVETYPE_WALK || movetype == MOVETYPE_STEP || movetype == MOVETYPE_TOSS ) )
return FMRES_IGNORED
}
else
{
target = 0
new ent = engfunc( EngFunc_FindEntityInSphere, -1, ret, 12.0 )
while( !target && ent > 0 )
{
movetype = pev( ent, pev_movetype )
if( ( movetype == MOVETYPE_WALK || movetype == MOVETYPE_STEP || movetype == MOVETYPE_TOSS )
&& ent != id )
target = ent
ent = engfunc( EngFunc_FindEntityInSphere, ent, ret, 12.0 )
}
}
if( target )
{
if( is_grabbed( target, id ) ) return FMRES_IGNORED
set_grabbed( id, target )
}
}
}
target = client_data[id][GRABBED]
//If they've grabbed something
if( target > 0 )
{
if( !pev_valid( target ) || ( pev( target, pev_health ) < 1 && pev( target, pev_max_health ) ) )
{
unset_grabbed( id )
return FMRES_IGNORED
}
//Use key choke
if( pev( id, pev_button ) & IN_USE )
do_choke( id )
//Push and pull
new cdf = client_data[id][FLAGS]
if ( cdf & CDF_IN_PULL )
do_pull( id )
else if ( cdf & CDF_IN_PUSH )
do_push( id )
if( target > MAXPLAYERS ) grab_think( id )
}
//If they're grabbed
target = client_data[id][GRABBER]
if( target > 0 ) grab_think( target )
return FMRES_IGNORED
}
public grab_think( id ) {
new target = client_data[id][GRABBED]
if( pev( target, pev_movetype ) == MOVETYPE_FLY && !(pev( target, pev_button ) & IN_JUMP ) ) client_cmd( target, "+jump;wait;-jump" )
new Float:tmpvec[3], Float:tmpvec2[3], Float:torig[3], Float:tvel[3]
get_view_pos( id, tmpvec )
tmpvec2 = vel_by_aim( id, client_data[id][GRAB_LEN] )
torig = get_target_origin_f( target )
new force = get_pcvar_num( p_grab_force )
tvel[0] = ( ( tmpvec[0] + tmpvec2[0] ) - torig[0] ) * force
tvel[1] = ( ( tmpvec[1] + tmpvec2[1] ) - torig[1] ) * force
tvel[2] = ( ( tmpvec[2] + tmpvec2[2] ) - torig[2] ) * force
set_pev( target, pev_velocity, tvel )
if( !client_data[ id ][ HOOK ] ) {
if( (get_entity_flags( target ) & FL_ONGROUND) ) {
RemoveHook( id );
} else {
client_cmd(id, "spk sound/%s", gSound)
client_data[id][HOOK] = true
set_task(0.1, "RemoveHook", id)
CreateHook(id)
}
}
if(is_user_alive(id) && client_data[id][GRABBED])
{
engclient_cmd(id, "weapon_knife");
set_pdata_float(id, 83, 1.0, 5);
set_pev(id, pev_viewmodel2, "models/jb_engine/v_grab_engine.mdl");
}
}
stock Float:get_target_origin_f( id )
{
new Float:orig[3]
pev( id, pev_origin, orig )
//If grabbed is not a player, move origin to center
if( id > MAXPLAYERS )
{
new Float:mins[3], Float:maxs[3]
pev( id, pev_mins, mins )
pev( id, pev_maxs, maxs )
if( !mins[2] ) orig[2] += maxs[2] / 2
}
return orig
}
public grab_toggle( id ) {
if( !g_PlayerActive[ id ] || !SearchFlags( id, "g" ) ) return PLUGIN_HANDLED;
if( !client_data[id][GRABBED] ) grab( id );
else unset_grabbed( id )
return PLUGIN_HANDLED
}
public FlashEvent( id )
{
inflash[id] = true
set_task(3.0, "block_grab", id)
return PLUGIN_CONTINUE
}
public grab( id ) {
if( !g_PlayerActive[ id ] || !SearchFlags( id, "g" ) || !get_pcvar_num( p_enabled ) ) return PLUGIN_HANDLED
if( inflash[id] ) return PLUGIN_HANDLED
if ( !client_data[id][GRABBED] ) client_data[id][GRABBED] = -1
screenfade_in( id )
return PLUGIN_HANDLED
}
public screenfade_in( id )
{
if( get_pcvar_num( p_fade ) )
{
grab_check[id] = true
emessage_begin( MSG_ONE, SVC_SCREENFADE, _, id )
write_short( 10000 ) //duration
write_short( 0 ) //hold
write_short( SF_FADE_IN + SF_FADE_ONLYONE ) //flags
ewrite_byte( get_pcvar_num( p_glow_r ) ) //r
ewrite_byte( get_pcvar_num( p_glow_g ) ) //g
ewrite_byte( get_pcvar_num( p_glow_b ) ) //b
ewrite_byte( get_pcvar_num( p_glow_a ) / 2 ) //a
message_end( )
}
}
public throw( id )
{
new target = client_data[id][GRABBED]
if( target > 0 )
{
set_pev( target, pev_velocity, vel_by_aim( id, get_pcvar_num(p_throw_force) ) )
unset_grabbed( id )
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public unset_grabbed(id)
{
set_pdata_float(id, 83, 0.0, 5);
engclient_cmd(id, "weapon_knife");
switch(get_user_team(id))
{
case 2: set_pev(id, pev_viewmodel2, "models/jb_engine/weapons/v_baton_engine.mdl");
default: set_pev(id, pev_viewmodel2, "models/jb_engine/weapons/v_hand_engine.mdl");
}
show_menu(id, 0, "^n");
new target = client_data[id][GRABBED]
if( target > 0 && pev_valid( target ) )
{
set_pev( target, pev_renderfx, kRenderFxNone )
set_pev( target, pev_rendercolor, {255.0, 255.0, 255.0} )
set_pev( target, pev_rendermode, kRenderNormal )
set_pev( target, pev_renderamt, 16.0 )
if( 0 < target <= MAXPLAYERS )
client_data[target][GRABBER] = 0
}
client_data[id][GRABBED] = 0
if( get_pcvar_num( p_fade ) && grab_check[id] && !(inflash[id]) )
{
grab_check[id] = false
message_begin( MSG_ONE, SVC_SCREENFADE, _, id )
write_short( 10000 ) //duration
write_short( 0 ) //hold
write_short( SF_FADEOUT ) //flags
write_byte( get_pcvar_num( p_glow_r ) ) //r
write_byte( get_pcvar_num( p_glow_g ) ) //g
write_byte( get_pcvar_num( p_glow_b ) ) //b
write_byte( get_pcvar_num( p_glow_a ) / 2 ) //a
message_end( )
}
return PLUGIN_HANDLED
}
public set_grabbed( id, target ) {
if( !is_user_connected( target ) || !is_user_alive( target ) ) return PLUGIN_HANDLED;
if( target > 0 && target <= 32 ) {
if( g_PlayerActive[ target ] && SearchFlags( target, "i" ) ) {
message_begin( MSG_ONE, SVC_SCREENFADE, _, id );
write_short( 9999 );
write_short( 100 );
write_short( SF_FADE_MODULATE );
write_byte( 179 );
write_byte( 37 );
write_byte( 0 );
write_byte( 200 );
message_end();
set_dhudmessage( 255, 255, 255, 0.13, 0.77, 2, 6.0, 3.0, 0.1, 4.0, false );
show_dhudmessage( id, "~ А больше ничего не хочешь? ~" );
return PLUGIN_HANDLED;
}
}
if( get_pcvar_num( p_glow ) )
{
new Float:color[3]
color[0] = get_pcvar_float( p_glow_r )
color[1] = get_pcvar_float( p_glow_g )
color[2] = get_pcvar_float( p_glow_b )
set_pev( target, pev_renderfx, kRenderFxGlowShell )
set_pev( target, pev_rendercolor, color )
set_pev( target, pev_rendermode, kRenderTransColor )
set_pev( target, pev_renderamt, get_pcvar_float( p_glow_a ) )
}
if( 0 < target <= MAXPLAYERS ) client_data[target][GRABBER] = id
client_data[id][FLAGS] = 0
client_data[id][GRABBED] = target
new Float:torig[3], Float:orig[3]
pev( target, pev_origin, torig )
pev( id, pev_origin, orig )
client_data[id][GRAB_LEN] = floatround( get_distance_f( torig, orig ) )
if( client_data[id][GRAB_LEN] < get_pcvar_num( p_min_dist ) ) client_data[id][GRAB_LEN] = get_pcvar_num( p_min_dist )
if( target > 0 && target <= 32 ) {
new name[ 33 ], name2[ 33 ];
get_user_name( id, name, charsmax( name ) );
get_user_name( target, name2, charsmax( name2 ) );
client_cmd( id, "spk sound/grab_id_mine" );
client_cmd( target, "spk sound/grab_victim_xa" );
send_chat( id, "%s !yВы взяли грабом !t%s!y.", PL_CHAT_PREFIX, name2 );
send_chat( target, "%s !yВас взял грабом !t%s!y.", PL_CHAT_PREFIX, name );
effect_snow( target );
ShowGrabMenu( id );
engclient_cmd(id, "weapon_knife");
set_pdata_float(id, 83, 1.0, 5);
set_pev(id, pev_viewmodel2, "models/jb_engine/v_grab_engine.mdl");
}else{
send_chat( id, "%s !yВы взял грабом !tОружие!y.", PL_CHAT_PREFIX );
engclient_cmd(id, "weapon_knife");
set_pdata_float(id, 83, 1.0, 5);
set_pev(id, pev_viewmodel2, "models/jb_engine/v_grab_engine.mdl");
}
return PLUGIN_CONTINUE
}
public push( id )
{
client_data[id][FLAGS] ^= CDF_IN_PUSH
return PLUGIN_HANDLED
}
public pull( id )
{
client_data[id][FLAGS] ^= CDF_IN_PULL
return PLUGIN_HANDLED
}
public push2( id )
{
if( client_data[id][GRABBED] > 0 )
{
do_push( id )
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public pull2( id )
{
if( client_data[id][GRABBED] > 0 )
{
do_pull( id )
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public do_push( id )
if( client_data[id][GRAB_LEN] < 9999 )
client_data[id][GRAB_LEN] += get_pcvar_num( p_speed )
public do_pull( id )
{
new mindist = get_pcvar_num( p_min_dist )
new len = client_data[id][GRAB_LEN]
if( len > mindist )
{
len -= get_pcvar_num( p_speed )
if( len < mindist ) len = mindist
client_data[id][GRAB_LEN] = len
}
else if( get_pcvar_num( p_auto_choke ) )
do_choke( id )
}
public do_choke( id )
{
new target = client_data[id][GRABBED]
if( client_data[id][FLAGS] & CDF_NO_CHOKE || id == target || target > MAXPLAYERS) return
new dmg = get_pcvar_num( p_choke_dmg )
new vec[3]
FVecIVec( get_target_origin_f( target ), vec )
message_begin( MSG_ONE, SVC_SCREENSHAKE, _, target )
write_short( 999999 ) //amount
write_short( 9999 ) //duration
write_short( 999 ) //frequency
message_end( )
message_begin( MSG_ONE, SVC_SCREENFADE, _, target )
write_short( 9999 ) //duration
write_short( 100 ) //hold
write_short( SF_FADE_MODULATE ) //flags
write_byte( get_pcvar_num( p_glow_r ) ) //r
write_byte( get_pcvar_num( p_glow_g ) ) //g
write_byte( get_pcvar_num( p_glow_b ) ) //b
write_byte( 200 ) //a
message_end( )
message_begin( MSG_ONE, WTF_DAMAGE, _, target )
write_byte( 0 ) //damage armor
write_byte( dmg ) //damage health
write_long( DMG_CRUSH ) //damage type
write_coord( vec[0] ) //origin[x]
write_coord( vec[1] ) //origin[y]
write_coord( vec[2] ) //origin[z]
message_end( )
message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
write_byte( TE_BLOODSTREAM )
write_coord( vec[0] ) //pos.x
write_coord( vec[1] ) //pos.y
write_coord( vec[2] + 15 ) //pos.z
write_coord( random_num( 0, 255 ) ) //vec.x
write_coord( random_num( 0, 255 ) ) //vec.y
write_coord( random_num( 0, 255 ) ) //vec.z
write_byte( 70 ) //col index
write_byte( random_num( 50, 250 ) ) //speed
message_end( )
//Thanks to ConnorMcLeod for making this block of code more proper
new Float:health
pev( target, pev_health , health)
health -= dmg
if( health < 1 ) dllfunc( DLLFunc_ClientKill, target )
else {
set_pev( target, pev_health, health )
set_pdata_int(target, m_bitsDamageType, DMG_CRUSH) // m_bitsDamageType = 76 // found by VEN
set_pev(target, pev_dmg_take, dmg)
set_pev(target, pev_dmg_inflictor, id)
}
client_data[id][FLAGS] ^= CDF_NO_CHOKE
set_task( get_pcvar_float( p_choke_time ), "clear_no_choke", TSK_CHKE + id )
}
public clear_no_choke( tskid )
{
new id = tskid - TSK_CHKE
client_data[id][FLAGS] ^= CDF_NO_CHOKE
}
public force_grab(id)
{
if( !g_PlayerActive[ id ] || !SearchFlags( id, "g" ) || !get_pcvar_num( p_enabled ) ) return PLUGIN_HANDLED
new arg[33]
read_argv( 1, arg, 32 )
new targetid = cmd_target( id, arg, 1 )
if( is_grabbed( targetid, id ) ) return PLUGIN_HANDLED
if(!is_user_alive( targetid ) )
{
send_chat( id, "%s Игрок уже мёртв..", PL_CHAT_PREFIX );
return PLUGIN_HANDLED
}
//Safe to tp target to aim spot?
new Float:tmpvec[3], Float:orig[3], Float:torig[3], Float:trace_ret[3]
new bool:safe = false, i
get_view_pos( id, orig )
tmpvec = vel_by_aim( id, get_pcvar_num( p_min_dist ) )
for( new j = 1; j < 11 && !safe; j++ )
{
torig[0] = orig[0] + tmpvec[i] * j
torig[1] = orig[1] + tmpvec[i] * j
torig[2] = orig[2] + tmpvec[i] * j
traceline( tmpvec, torig, id, trace_ret )
if( get_distance_f( trace_ret, torig ) ) break
engfunc( EngFunc_TraceHull, torig, torig, 0, HULL_HUMAN, 0, 0 )
if ( !get_tr2( 0, TR_StartSolid ) && !get_tr2( 0, TR_AllSolid ) && get_tr2( 0, TR_InOpen ) )
safe = true
}
//Still not safe? Then find another safe spot somewhere around the grabber
pev( id, pev_origin, orig )
new try[3]
orig[2] += 2
while( try[2] < 3 && !safe )
{
for( i = 0; i < 3; i++ )
switch( try[i] )
{
case 0 : torig[i] = orig[i] + ( i == 2 ? 80 : 40 )
case 1 : torig[i] = orig[i]
case 2 : torig[i] = orig[i] - ( i == 2 ? 80 : 40 )
}
traceline( tmpvec, torig, id, trace_ret )
engfunc( EngFunc_TraceHull, torig, torig, 0, HULL_HUMAN, 0, 0 )
if ( !get_tr2( 0, TR_StartSolid ) && !get_tr2( 0, TR_AllSolid ) && get_tr2( 0, TR_InOpen )
&& !get_distance_f( trace_ret, torig ) ) safe = true
try[0]++
if( try[0] == 3 )
{
try[0] = 0
try[1]++
if( try[1] == 3 )
{
try[1] = 0
try[2]++
}
}
}
if( safe )
{
set_pev( targetid, pev_origin, torig )
set_grabbed( id, targetid )
screenfade_in( id )
}
else client_print( id, print_chat, "[AMXX] %L", id, "COULDNT" )
return PLUGIN_HANDLED;
}
ShowGrabMenu( client ) {
if(!SearchFlags( client, "m" ))
{
send_chat( client, "%s Не открылось меню? У вас его нет :P", PL_CHAT_PREFIX );
return PLUGIN_HANDLED;
}
jbe_informer_offset_up( client );
new buffer[512], len, target = client_data[client][GRABBED];
new name[33]; get_user_name(target, name, charsmax(name));
/* -> Заголовок меню <- */
len = format( buffer, charsmax( buffer ), "%s \rМеню граба", PL_MENU_PREFIX );
len += format( buffer[ len ], charsmax( buffer ) - len, "^n%s \yИгрок: \r%s", PL_MENU_PREFIX, name );
len += format( buffer[ len ], charsmax( buffer ) - len, "^n%s \dХп: %d | Денег: %d", PL_MENU_PREFIX, get_user_health( target ), jbe_get_user_money( target ) );
/* -> Пункты меню <- */
len += format( buffer[ len ], charsmax( buffer ) - len, "^n^n\d[1]\y ~ %s", SearchFlags( target, "i" ) ? "\dУбить игрока" : "\wУбить игрока" );
len += format( buffer[ len ], charsmax( buffer ) - len, "^n\d[2]\y ~ %s", SearchFlags( target, "i" ) ? "\dКикнуть игрока" : "\wКикнуть игрока" );
len += format( buffer[ len ], charsmax( buffer ) - len, "^n\d[3]\y ~ %s%sПеревести за Зеков", SearchFlags( target, "i" ) ? "\d" : "\w", (jbe_get_user_team( target ) != 2) ? "\d" : "\w" );
len += format( buffer[ len ], charsmax( buffer ) - len, "^n^n\d[4]\y ~ %s", SearchFlags( target, "i" ) ? "\dПеревернуть экран" : "\wПеревернуть экран" );
len += format( buffer[ len ], charsmax( buffer ) - len, "^n\d[5]\y ~ %s", (get_user_health( target ) >= 100) ? "\dВылечить игрока" : "\wВылечить игрока" );
len += format( buffer[ len ], charsmax( buffer ) - len, "^n^n\d[6]\y ~ %s \d[%s\d]", (get_user_flags( client ) & ADMIN_LEVEL_F) ? "\wВыходной игрока" : "\dВыходной игрока", jbe_is_user_free( target ) ? "\rЗабрать" : "\yДать" );
len += format( buffer[ len ], charsmax( buffer ) - len, "^n\d[7]\y ~ %s \d[%s\d]", (get_user_flags( client ) & ADMIN_LEVEL_F) ? "\wРозыск игрока" : "\dРозыск игрока", jbe_is_user_wanted( target ) ? "\rЗабрать" : "\yДать" );
len += format( buffer[ len ], charsmax( buffer ) - len, "^n^n\d[0]\y ~ \rВыход" );
/* -> Различные функции <- */
show_menu( client, MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8, buffer, -1, "grab_menu" );
return PLUGIN_CONTINUE;
}
public FuncGrabMenu(client, key){
jbe_informer_offset_down(client);
new target = client_data[client][ GRABBED ];
if( !is_user_connected( client ) || !is_user_connected(target )) return PLUGIN_HANDLED;
new name[ 33 ], name2[ 33 ];
get_user_name( client, name, charsmax( name ) );
get_user_name( target, name2, charsmax( name2 ) );
switch( key ) {
case 0: {
if( !SearchFlags( target, "i" ) ) {
if( is_user_alive( target ) ) {
user_kill( target, 1 );
send_chat( 0, "%s !t%s!y убил грабом игрока !t%s!y.", PL_CHAT_PREFIX, name, name2 );
} else send_chat( client, "%s Жертва мертва, как ты её убьешь? ._.", PL_CHAT_PREFIX );
} else send_chat( client, "%s А по еб*лу?!", PL_CHAT_PREFIX );
}
case 1: {
if( !SearchFlags( target, "i" ) ) {
if( is_user_alive( target ) ) {
new userid = get_user_userid( target );
server_cmd( "kick #%d ^"Вас кикнул: %s^"", userid, name );
send_chat( 0, "%s !t%s!y кикнул грабом игрока !t%s!y.", PL_CHAT_PREFIX, name, name2 );
} else send_chat( client, "%s Жертва мертва, как ты её убьешь? ._.", PL_CHAT_PREFIX );
} else send_chat( client, "%s А по еб*лу?!", PL_CHAT_PREFIX );
}
case 2: {
if( !SearchFlags( target, "i" ) ) {
if( jbe_get_user_team( target ) == 2 ) {
jbe_set_user_team( target, 1 );
send_chat( 0, "%s !t%s!y перевел игрока !t%s!y.", PL_CHAT_PREFIX, name, name2 );
} else send_chat( client, "%s Как ты переведешь !g^"!tЗека - за зеков?!g^"!y ._.", PL_CHAT_PREFIX );
} else send_chat( client, "%s А по еб*лу?!", PL_CHAT_PREFIX );
}
case 3: {
if( !SearchFlags( target, "i" ) ) {
message_begin( MSG_ONE, SVC_SCREENFADE, _, target );
write_short( 9999 );
write_short( 100 );
write_short( SF_FADE_MODULATE );
write_byte( 179 );
write_byte( 37 );
write_byte( 0 );
write_byte( 200 );
message_end();
set_pev( target, pev_punchangle, {400.0, 999.0, 400.0} );
send_chat( 0, "%s !t%s!y перевернул экран игроку !t%s!y.", PL_CHAT_PREFIX, name, name2 );
} else send_chat( client, "%s А по еб*лу?!", PL_CHAT_PREFIX );
}
case 4: {
if( jbe_get_day_mode() != 3 && get_user_health( target ) < 100 ) {
set_user_health( target, 100 );
send_chat( 0, "%s !t%s!y вылечил игрока !t%s!y.", PL_CHAT_PREFIX, name, name2 );
} else send_chat( client, "%s Произошла ошибка..", PL_CHAT_PREFIX );
}
case 5: {
if( (get_user_flags( client ) & ADMIN_LEVEL_F) && jbe_get_day_mode() != 3 && is_user_alive( target ) ) {
if( jbe_is_user_free( target ) ) jbe_sub_user_free( target );
else jbe_add_user_free( target );
send_chat( 0, "%s !t%s!y %s !t%s!y.", PL_CHAT_PREFIX, name, jbe_is_user_free( target ) ? "отпустил в отпуск игрока" : "забрал выходной у игрока", name2 );
} else send_chat( client, "%s Произошла ошибка..", PL_CHAT_PREFIX );
}
case 6: {
if( (get_user_flags( client ) & ADMIN_LEVEL_F) && jbe_get_day_mode() != 3 && is_user_alive( target ) ) {
if( jbe_is_user_wanted( target ) ) jbe_sub_user_wanted( target );
else jbe_add_user_wanted( target );
send_chat( 0, "%s !t%s!y %s !t%s!y.", PL_CHAT_PREFIX, name, jbe_is_user_wanted( target ) ? "дал !tРозыск!y на игрока" : "отменил !tРозыск!y игрока", name2 );
} else send_chat( client, "%s Произошла ошибка..", PL_CHAT_PREFIX );
}
}
return PLUGIN_HANDLED;
}
public is_grabbed( target, grabber )
{
for( new i = 1; i <= MAXPLAYERS; i++ )
if( client_data[i][GRABBED] == target )
{
send_chat( grabber, "%s Кто-то уже держит его!", PL_CHAT_PREFIX );
unset_grabbed(grabber)
return true
}
return false
}
public DeathMsg( )
{
new id = read_data(2)
if( 1 <= id <= MAXPLAYERS )
kill_grab(id)
}
public client_disconnect( id ) {
inflash[ id ] = false;
kill_grab( id );
return PLUGIN_CONTINUE;
}
public kill_grab( id )
{
//If given client has grabbed, or has a grabber, unset it
if( client_data[id][GRABBED] )
unset_grabbed(id)
else if( client_data[id][GRABBER] )
unset_grabbed(client_data[id][GRABBER])
}
public block_grab( id )
inflash[id] = false
stock traceline( const Float:vStart[3], const Float:vEnd[3], const pIgnore, Float:vHitPos[3] )
{
engfunc( EngFunc_TraceLine, vStart, vEnd, 0, pIgnore, 0 )
get_tr2( 0, TR_vecEndPos, vHitPos )
return get_tr2( 0, TR_pHit )
}
stock get_view_pos( const id, Float:vViewPos[3] )
{
new Float:vOfs[3]
pev( id, pev_origin, vViewPos )
pev( id, pev_view_ofs, vOfs )
vViewPos[0] += vOfs[0]
vViewPos[1] += vOfs[1]
vViewPos[2] += vOfs[2]
}
stock Float:vel_by_aim( id, speed = 1 )
{
new Float:v1[3], Float:vBlah[3]
pev( id, pev_v_angle, v1 )
engfunc( EngFunc_AngleVectors, v1, v1, vBlah, vBlah )
v1[0] *= speed
v1[1] *= speed
v1[2] *= speed
return v1
}
public CreateHook(id)
{
new iTarget = client_data[id][GRABBED]
new Float:fOrigin[3][3]
new iOrigin[3][3]
pev(id, pev_origin, fOrigin[1])
pev(iTarget, pev_origin, fOrigin[2])
FVecIVec(fOrigin[1], iOrigin[1])
FVecIVec(fOrigin[2], iOrigin[2])
//get_user_origin(id, iOrigin[1], 0)
//get_user_origin(iTarget, iOrigin[2], 0)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMPOINTS)
write_coord(iOrigin[1][0])
write_coord(iOrigin[1][1])
write_coord(iOrigin[1][2])
write_coord(iOrigin[2][0])
write_coord(iOrigin[2][1])
write_coord(iOrigin[2][2])
write_short(gSpr)
write_byte(0)
write_byte(1)
write_byte(1)
write_byte(30)
write_byte(30)
write_byte(86)
write_byte(86)
write_byte(86)
write_byte(1000)
write_byte(0)
message_end()
}
public RemoveHook(id)
{
client_data[id][HOOK] = false
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(99)
write_short(id)
message_end()
}
public effect_snow( id ) {
new origin[3];
get_user_origin( id, origin, 0 );
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id);
write_byte(TE_SPRITETRAIL);
write_coord(origin[0]);
write_coord(origin[1]);
write_coord(origin[2]+20);
write_coord(origin[0]);
write_coord(origin[1]);
write_coord(origin[2]+80);
write_short(g_axcid);
write_byte(20);
write_byte(20);
write_byte(4);
write_byte(20);
write_byte(10);
message_end();
return true;
}
stock send_chat( id, const input[], any:... ) {
new count = 1, players[ 32 ];
static msg[ 188 ];
vformat( msg, 187, input, 3 );
replace_all( msg, 187, "!g", "^4" );
replace_all( msg, 187, "!y", "^1" );
replace_all( msg, 187, "!t", "^3" );
if( id ) players[ 0 ] = id; else get_players( players, count, "ch" );
{
for( new i = 0; i < count; i++ ) {
if( is_user_connected( players[ i ] ) ) {
message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "SayText" ), _, players[ i ] );
write_byte( players[ i ] );
write_string( msg );
message_end();
}
}
}
}
stock SearchFlags( client, fls[] ) {
static status[ 33 ]; status[ client ] = false;
if( g_PlayerActive[ client ] ) if( contain( g_PlayerFlags[ client ], fls ) != -1 ) status[ client ] = true;
return status[ client ];
}
stock SearchClient(id) {
if( g_PlayerActive[ id ] ) {
g_PlayerActive[ id ] = false;
format( g_PlayerFlags[ id ], charsmax( g_PlayerFlags[] ), "" );
}
static status[ 33 ]; status[ id ] = false;
for(new i; i < ArraySize( g_aData ); i++) {
ArrayGetArray(g_aData, i, g_PlayerData);
switch( g_PlayerData[ TYPE ] ) {
case 'a': {
static sName[ 33 ], sPass[ 36 ];
get_user_name( id, sName, charsmax( sName ) );
get_user_info( id, "_pw", sPass, charsmax( sPass ) );
if( equal( g_PlayerData[ AUTH ], sName ) ) {
if( equal( g_PlayerData[ PASS ], sPass ) ) {
format( g_PlayerFlags[ id ], charsmax( g_PlayerFlags[] ), g_PlayerData[ LEVEL ] );
status[ id ] = true; break;
} else continue;
} else continue;
}
case 'i': {
static sIP[16]; get_user_ip(id, sIP, charsmax(sIP), 1);
if( equal( sIP, g_PlayerData[ AUTH ] ) ) {
format( g_PlayerFlags[ id ], charsmax( g_PlayerFlags[] ), g_PlayerData[ LEVEL ] );
status[ id ] = true; break;
} else continue;
}
case 's': {
static sAuthid[25]; get_user_authid(id, sAuthid, charsmax(sAuthid));
if( equal( sAuthid, g_PlayerData[ AUTH ] ) ) {
format( g_PlayerFlags[ id ], charsmax( g_PlayerFlags[] ), g_PlayerData[ LEVEL ] );
status[ id ] = true; break;
} else continue;
}
}
}
return status[ id ];
}