Иммунитет на другую флаг amx
#include < amxmisc >
#include < fakemeta >
#include < hamsandwich >
#define PLUGIN «[All mod] Grab»
#define VERSION «2.1»
#define AUTHOR «Ian Cammarata / Opo4uMapy»
// Options
#define ADMIN ADMIN_LEVEL_F //Флаг админа
#define ADMIN_IMMUN ADMIN_LEVEL_H //Флаг админа с иммунитетом
#define RESON_KICK «Kick by plugin grab» //Причина кика
#define GRAB_MENU //Открывать меню граба или нет. Если нет сделайте так //#define GRAB_MENU (Стандартно открыто)
#define JB_PREFIX «!y[ !gГраб !y]»
enum //Цвет граба
{
r = 0.0, //Red
g = 0.0, //Green
b = 255.0, //Blue
a = 200.0 //Alpha
};
//
new const Menu[][] =
{
«»,
«MENU_1»,
«MENU_2»,
«MENU_3»,
«MENU_4»,
«MENU_5»,
«MENU_6»,
«MENU_7»
};
#define TSK_CHKE 50
#define SF_FADEOUT 0
new client_data[33][4]
#define GRABBED 0
#define GRABBER 1
#define GRAB_LEN 2
#define FLAGS 3
#define CDF_IN_PUSH (1<<0)
#define CDF_IN_PULL (1<<1)
#define CDF_NO_CHOKE (1<<2)
//Cvar Pointers
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
new speed_off[33]
//Pseudo Constants
new MAXPLAYERS
new SVC_SCREENSHAKE, SVC_SCREENFADE, WTF_DAMAGE
new name[32]
new name2[32]
public plugin_init( )
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event(«CurWeapon», «CurrentWeapon», «be», «1=1»)
RegisterHam(Ham_Spawn, «player», «SpawnPlayer»)
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 = register_cvar( «gp_glow», «1» )
register_clcmd( «amx_grab», «force_grab», ADMIN, «Grab client & teleport to you.» )
register_clcmd( «+grab», «grab», ADMIN, «bind a key to +bub_grab» )
register_clcmd( «-grab», «unset_grabbed» )
register_clcmd( «+push», «push», ADMIN, «bind a key to +bub_push» )
register_clcmd( «-push», «push» )
register_clcmd( «+pull», «pull», ADMIN, «bind a key to +bub_pull» )
register_clcmd( «-pull», «pull» )
register_clcmd( «push», «push2» )
register_clcmd( «pull», «pull2» )
register_clcmd( «drop» ,»throw» )
register_event( «DeathMsg», «DeathMsg», «a» )
register_forward( FM_PlayerPreThink, «fm_player_prethink» )
register_dictionary( «grab_plus.txt» )
MAXPLAYERS = get_maxplayers()
SVC_SCREENFADE = get_user_msgid( «ScreenFade» )
SVC_SCREENSHAKE = get_user_msgid( «ScreenShake» )
WTF_DAMAGE = get_user_msgid( «Damage» )
register_dictionary(«grab_new.txt»);
}
public plugin_precache( )
precache_sound( «player/PL_PAIN2.WAV» )
public fm_player_prethink( id )
{
new target
get_user_name(target, name, 32)
get_user_name(id, name2, 32)
//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
get_user_name(target, name, 32)
get_user_name(id, name2, 32)
if(get_user_flags(id) & ADMIN_IMMUN)
{
ChatColor(id, «%s !g%s !teamИмеет иммунитет», JB_PREFIX, name)
ChatColor(target, «%s !g%s !teamПытался взять вас !gГрабом», JB_PREFIX, name2)
}
else
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
get_user_name(target, name, 32)
get_user_name(id, name2, 32)
if(get_user_flags(id) & ADMIN_IMMUN)
{
ChatColor(id, «%s !g%s !teamИмеет иммунитет», JB_PREFIX, name)
ChatColor(target, «%s !g%s !teamПытался взять вас !gГрабом», JB_PREFIX, name2)
}
else
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 ) //id of the grabber
{
new target = client_data[id][GRABBED]
//Keep grabbed clients from sticking to ladders
if( pev( target, pev_movetype ) == MOVETYPE_FLY && !(pev( target, pev_button ) & IN_JUMP ) ) client_cmd( target, «+jump;wait;-jump» )
//Move targeted client
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 )
}
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( id, level, cid )
{
if( !cmd_access( id, level, cid, 1 ) || !get_pcvar_num( p_enabled ) ) return PLUGIN_HANDLED
if ( !client_data[id][GRABBED] ) client_data[id][GRABBED] = -1
return PLUGIN_HANDLED
}
public SpawnPlayer(id)
speed_off[id] = false
public CurrentWeapon(id)
{
if(speed_off[id])
set_pev(id, pev_maxspeed, 00000.0)
}
public grab_menu(id)
{
new name[32]
new target = client_data[id][GRABBED]
if(target && is_user_alive(target))
{
get_user_name(target, name, charsmax(name))
}
new Item[512], Str[10], menu;
formatex(Item, charsmax(Item), «%L», id, «MENU_NAME», name);
menu = menu_create(Item, «menu_handler»)
for(new i = 1; i <= charsmax(Menu); i++)
{
num_to_str(i, Str, charsmax(Str));
formatex(Item, charsmax(Item), «%L», id, Menu[i]);
menu_additem(menu, Item, Str, 0);
}
formatex(Item, charsmax(Item), «%L», id, «MENU_EXIT»);
menu_setprop(menu, MPROP_EXITNAME, Item);
menu_display(id, menu, 0);
return PLUGIN_HANDLED;
}
public menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[6], iName[64], access, callback
menu_item_getinfo(menu, item, access, data, 5, iName, 63, callback)
new key = str_to_num(data)
new target = client_data[id][GRABBED]
switch(key)
{
case 1:
{
if(target && is_user_alive(target))
{
server_cmd(«kick #%d ^»%s^»», get_user_userid(target), RESON_KICK)
}
}
case 2:
{
if(target && is_user_alive(target))
{
user_kill(target)
}
}
case 3:
{
if(target && is_user_alive(target))
{
fm_strip_user_weapons(target)
fm_give_item(target, «weapon_knife»)
}
}
case 4:
{
if(target && is_user_alive(target))
{
set_pev(target, pev_maxspeed, 00000.0)
speed_off[target] = true
}
}
case 5:
{
if(target && is_user_alive(target))
{
set_pev(target, pev_maxspeed, 240.0)
speed_off[target] = false
}
}
case 6:
{
if(target && is_user_alive(target))
{
set_pev(target, pev_health, 1.0)
}
}
case 7:
{
if(target && is_user_alive(target))
{
set_pev(target, pev_punchangle, { 400.0, 999.0, 400.0 })
}
}
}
return PLUGIN_HANDLED
}
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 )
{
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
}
show_menu(id, 0, «^n», 1)
client_data[id][GRABBED] = 0
}
//Grabs onto someone
public set_grabbed( id, target )
{
if( get_pcvar_num( p_glow ) )
{
set_pev( target, pev_renderfx, kRenderFxGlowShell )
set_pev( target, pev_rendercolor, {r, g, b})
set_pev( target, pev_rendermode, kRenderTransColor )
set_pev( target, pev_renderamt, a )
}
if( 0 < target <= MAXPLAYERS )
client_data[target][GRABBER] = id
client_data[id][FLAGS] = 0
client_data[id][GRABBED] = target
new name[33], name2[33]
get_user_name(id, name, 32)
get_user_name(target, name2, 32)
if(get_user_team(target)==1 || get_user_team(target)==2)
{
ChatColor(target, «%L», target, «CHAT_1», name)
ChatColor(id, «%L», id, «CHAT_2», name2)
#if defined GRAB_MENU
grab_menu(id)
#endif
}
else
{
ChatColor(id, «%L», id, «CHAT_3»)
}
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 )
}
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( 200 ) //r
write_byte( 0 ) //g
write_byte( 0 ) //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( )
new health = pev( target, pev_health ) — dmg
set_pev( target, pev_health, float( health ) )
if( health < 1 ) dllfunc( DLLFunc_ClientKill, target )
emit_sound( target, CHAN_BODY, «player/PL_PAIN2.WAV», VOL_NORM, ATTN_NORM, 0, PITCH_NORM )
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
}
//Grabs the client and teleports them to the admin
public force_grab(id, level, cid)
{
if( !cmd_access( id, level, cid, 1 ) || !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 ) )
{
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]++
}
}
}
get_user_name(targetid, name, 32)
get_user_name(id, name2, 32)
if( safe )
{
set_pev( targetid, pev_origin, torig )
set_grabbed( id, targetid )
}
return PLUGIN_HANDLED
}
public is_grabbed( target, grabber )
{
for( new i = 1; i <= MAXPLAYERS; i++ )
if( client_data[i][GRABBED] == target )
{
unset_grabbed( grabber )
return true
}
return false
}
public DeathMsg( )
kill_grab( read_data( 2 ) )
public client_disconnect( id )
{
kill_grab( id )
speed_off[id] = false
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] )
}
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
}
stock fm_give_item(index, const item[])
{
if (!equal(item, «weapon_», 7) && !equal(item, «ammo_», 5) && !equal(item, «item_», 5) && !equal(item, «tf_weapon_», 10))
return 0
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item))
if (!pev_valid(ent))
return 0
new Float:origin[3];
pev(index, pev_origin, origin)
set_pev(ent, pev_origin, origin)
set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN)
dllfunc(DLLFunc_Spawn, ent)
new save = pev(ent, pev_solid)
dllfunc(DLLFunc_Touch, ent, index)
if (pev(ent, pev_solid) != save)
return ent
engfunc(EngFunc_RemoveEntity, ent)
return -1
}
stock fm_strip_user_weapons(id)
{
static ent
ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, «player_weaponstrip»))
if (!pev_valid(ent)) return;
dllfunc(DLLFunc_Spawn, ent)
dllfunc(DLLFunc_Use, ent, id)
engfunc(EngFunc_RemoveEntity, ent)
}
stock ChatColor(const id, const input[], any:…)
{
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, «!g», «^4»);
replace_all(msg, 190, «!y», «^1»);
replace_all(msg, 190, «!team», «^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();
}
}
}
}
Источник
Иммунитет на другую флаг amx
shel писал(а): Yopta, za bazar otvechau, skazal v sosedneu teme tupo vukladuvayte odobru a teper zadnuu podrybul? Tak delo ne poydet, bablo na stol yoba
Иммунитет в плагине!
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела «Болтовня».
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
Иммунитет в плагине!
Прошу Вас добавить в этот плагин имуну для админов!
Заранее спасибо!
#define MIN_AFK_TIME 30 // I use this incase stupid admins accidentally set mp_afktime to something silly.
#define WARNING_TIME 15 // Start warning the user this many seconds before they are about to be kicked.
#define CHECK_FREQ 5 // This is also the warning message frequency.
new g_oldangles[33][3]new g_afktime[33]new bool:g_spawned[33] =
public plugin_init() register_plugin(«AFK Kicker»,»1.0b»,»Cheesy Peteza»)
register_cvar(«afk_version», «1.0b», FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY)
register_cvar(«mp_afktime», «45») // Kick people AFK longer than this time
register_cvar(«mp_afkminplayers», «1») // Only kick AFKs when there is atleast this many players on the server
set_task(float(CHECK_FREQ),»checkPlayers»,_,_,_,»b»)
register_event(«ResetHUD», «playerSpawned», «be»)
>
public checkPlayers() for (new i = 1; i = minplayers) new maxafktime = get_cvar_num(«mp_afktime»)
if (maxafktime maxafktime) new name[32]
get_user_name(id, name, 31)
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, «!g[VZ18]!y Игрок !t%s!y был кикнут. Причина: !gAFK», name, maxafktime)
log_amx(«%s was kicked for being AFK longer than %i seconds», name, maxafktime)
server_cmd(«kick #%d ^»Причина: AFK^»», get_user_userid(id), maxafktime)
>
>
>
public client_connect(id) g_afktime[ > return PLUGIN_HANDLED
>
public client_putinserver(id) g_afktime[ > return PLUGIN_HANDLED
>
public playerSpawned(id) g_spawned[ > new sid[1]
s > set_task(0.75, «delayedSpawn»,_, sid, 1) // Give the player time to drop to the floor when spawning
return PLUGIN_HANDLED
>
public delayedSpawn(sid[]) get_user_origin(sid[0], g_oldangles[sid[0]])
g_spawned[s > return PLUGIN_HANDLED
>[/spoiler]
источник
contra.net.ua
Сайт посвящен культовой игре – Counter-Strike 1.6
Сайт посвящен культовой игре – Counter-Strike 1.6
Наши сервера CS 1.6
Графики загрузки серверов
cs.contra.net.ua:27021
Флаги доступа – как для users.ini, так и для всех версий amxbans и им подобным скриптам управления сервером.
a – этот флаг дает иммунитет (против человека с флагом а не могут быть использованы серверные команды kick, ban, slay, slap, он не может быть выкинут за флуд, за высокий пинг и так далее).
b – резервация слота, обычно дают уважаемым игрокам сервера.
c – amx_kick – доступ к команде amx_kick. Дает возможность кикать игроков.
d – amx_ban and amx_unban commands – доступ к команде amx_ban и amx_unban. Соответственно админ имеет возможность как ставить так и снимать баны.
e – amx_slay and amx_slap commands – флаг дает доступ к командам amx_slay и amx_slap. Убить игрока или “подергать” игрока в воздухе.
f – amx_map command – админ имеет доступ к команде amx_map – смена карты на сервере.
g – amx_cvar command – доступ к команде amx_cvar, менять переменные и настройки сервера (не все переменные могут быть доступны). Очень не советую давай этот доступ каждому встречному. Только проверенным людям!
h – amx_cfg command – флаг дает доступ к команде серверных настроек amx_cfg. Давать только проверенным людям!
i – amx_chat and other chat commands – доступ к команде amx_csay, администраторскому чату и другим командам, имеющим отношение к чату.
j – amx_vote and other vote commands – дает админу доступ к командам голосования, и команде amx_vote.k – access to sv_password cvar – доступ к серверной переменной sv_password (работает через команду amx_cvar). Этот флаг так же ставим исключительно проверенным админам.
l – access to amx_rcon command and rcon_password cvar – доступ к переменной RCON пароля amx_rcon и rcon_password (через команду amx_cvar). Управление паролем RCON – этот флаг не давать никому вообще кроме владельца сервера!
m – произвольный уровень доступа A (если на вашем сервере стоят какие-то нестандартные плагины amx, которые требуют эти уровни доступа)
n – произвольный уровень доступа B
o – произвольный уровень доступа C
p – произвольный уровень доступа D
q – произвольный уровень доступа E
r – произвольный уровень доступа F
s – произвольный уровень доступа G
t – произвольный уровень доступа H
u – админ получает доступ к меню управления amxmodmenu
z – флаг обычного пользователя (который не является админом)
Флаги аккаунта – проверка на доступ с определенного IP адреса или с определенным логином. Например флаги de – означают что права прописаны на IP адрес и пароль не проверяется (идентификация только по IP).
a – флаг не пускает на сервер игрока с неправильно введенным паролем (setinfo _pw пароль)
b – регистрация клан тега
c – администратор зайдет на сервер исключительно со значениями authid/wonid
d – администратор заходит только с этого ip адресса
e – пароль не проверяется (необходимо только совпадение name/ip/wonid)
Сам файл users.ini находится в папке
Что нужно знать игроку/администратору?
Настройка переменной пароля для доступа прописывается просто. В консоли сервера либо у себя в файле autoexec.cfg пропишите строчку
setinfo _pw “тут ваш пароль”
Вместо _pw может быть любое значение amx_password_field из файла amxx.cfg
Формат администраторского аккаунта:
или по-русски это будет так:
Пример администраторских аккаунтов:
; тут мы видим как прописывается аккаунт если у человека есть STEAM
“STEAM_0:0:123456” “” “abcdefghijklmnopqrstu” “ce”
; а здесь – прописка на IP
“123.45.67.89” “” “abcdefghijklmnopqrstu” “de”
; а тут – на логин/пароль
“My Name” “my_password” “abcdefghijklmnopqrstu” “a”
источник
Иммунитет на другую флаг amx
Решил сегодня написать для вас очень важную памятку, которая пригодится любому администратору игрового сервера Counter-Strike 1.6. Я собрал все флаги доступа к админке и подробно пояснил каждый из них. Читайте эту информацию очень внимательно, ведь от грамотной настройки игрового сервера CS 1.6 и администраторских прав к нему зависит и работа сервера в целом.
Данный флаги доступа актуальны и для файла users.ini, и для всех систем администрирования и управления игровым сервером (таких как amxbans и им подобные). То есть, если вы поймете принцип назначения флагов доступа, вы сможете работать с какой угодно системой.
a — данный флаг доступа дает для игроков и администраторов иммунитет (против такого игрока нельзя использовать никакие серверные команды, такие как ban, kick, slap, slay и все остальные, такого игрока нельзя выкинуть, например, за высокий пинг или флуд).
b — флаг для резервации слота. Можно дать и админу, и уважаемому игроку.
c — флаг дает доступ к команде amx_kick, с помощью которой можно кикать игроков с сервера.
d — доступы к очень важным командам amx_ban и amx_unban. Дают возможность как банить игроков, так и снимать им баны.
e — а это доступ к серверным командам amx_slay и amx_slap. Команды не особо важные, первая — убьет игрока, вторая — пнет его, да так, что игрок будет подпрыгивать от каждого пинка этой командой.
f — флаг дает доступ к очень важной команде amx_map, с помощью которой можно поменять карту на сервере. Рекомендую давать букву f только опытным администраторам, чтобы новички не меняли карту каждые пять минут.
g — а это очень важный флаг — доступ к серверной команде amx_cvar, которая дает возможность вносить изменения в настройки вашего игрового сервера, его переменные. Эту букву советую выдавать исключительно вашему другу, с которым вы держите сервер или вообще не давать никому.
h — amx_cfg — команда, как и предыдущая, отвечает за настройки сервера. Ее так же не нужно никому давать, за исключением вашего компаньона.
i — флаг дает доступ к командам amx_chat и amx_csay, а так же остальным командам, относящимся к игровому чату и цветным текстовым надписям, которые видны игрокам.
j — эта буква даст администратору доступ к команде amx_vote (голосование) и ко всем другим командам голосования.
k — флаг дает доступ к переменной sv_password (которая работает через amx_cvar). Позволяет устанавливать и менять пароль доступа на игровой сервер. Никому не давайте этот флаг, только себе!
l — эта буква даст доступ к команде amx_rcon и соответственно к RCON, с помощью которого можно управлять всем сервером. А так же к команде rcon_password, с помощью которой можно управлять RCON паролем. Надеюсь, вы поняли, что давать это флаг можно только себе и самому лучшему и проверенному другу ????
m — свободный флаг для произвольного доступа A. Объясню что это значит. Есть некоторые плагины для amxx, которые требуют какой-то произвольный уровень доступа. Вот каждый из таких плагинов можно «посадить» на все это уровни. Как это и те флаги, что будут описаны ниже.
n — свободный флаг произвольного уровня доступа B.
o — свободный флаг произвольного уровня доступа C.
p — свободный флаг произвольного уровня доступа D.
q — свободный флаг произвольного уровня доступа E.
r — свободный флаг произвольного уровня доступа F.
s — свободный флаг произвольного уровня доступа G.
t — свободный флаг произвольного уровня доступа H.
u — флаг дает доступ к удобному администраторскому меню управления сервером amxmodmenu.
z — а этот флаг, который обычно ставят (или не ставят, по желанию) обычным игрокам, не админам.
Флаги аккаута — проверка на доступ с определенного IP адреса или с определенным логином. Например флаги de — означают что права прописаны на IP адрес и пароль не проверяется (идентификация только по IPу).
a — флаг не пускает на сервер игрока с неправильно введенным паролем (setinfo _pw пароль)
b — регистрация клан тега
c — администратор зайдет на сервер исключительно со значениями authid/wonid
d — администратор заходит только с этого ip адресса
e — пароль не проверяется (необходимо только совпадение name/ip/wonid)
Настройка users.ini
Файл users.ini вашего игрового сервера находится в папке /ваш__крутой_сервер/addons/amxmodx/configs/users.ini
О том, как его настраивать, как прописывать доступ на IP, STEAM или логин/пароль, я расскажу дальше.
Полезная информация о том, что необходимо уметь делать игроку (если у него есть слот) и игровому администратору
Чтобы аккаунт игрока/админа получил свои права, если они прописаны на ник и пароль, нужно в консоли прописать строчку, которую вы увидите ниже. Ну или, чтобы не прописывать ее каждый раз, можно просто один раз добавить ее в файле autoexec.cfg вашего игрового клиента. Внимание, это строчку прописывать не нужно, если аккаунт прописан на IP или на STEAM ID.
Значение _pw можно изменить на совершенно любое, за него отвечает переменная amx_password_field, которую можно найти и настроить в файле amxx.cfg
Вот в таким формате прописывается аккаунт администратора:
или в переводе на русский строчка будет выглядеть так:
Давайте рассмотрим на конкретных примерах, как выглядят администраторские аккаунты:
источник
Иммунитет на другую флаг amx
Papo4ka
Пользователь
SKAJIbnEJIb
visibility
Papo4ka
Пользователь
// Адрес
amxbans_host «127.0.0.1»
// Логин
amxbans_user «»
// Пароль
amxbans_pass «»
// Имя базы данных
amxbans_db «»
// Префикс таблиц (обычно у всех «amx»)
amxbans_prefix «gm»
// Таймаут запросов в секундах
amxbans_timeout «10»
// Откуда загружать админов
// 0 — MySQL (база данных)
// 1 — Из файла users.ini
// 2 — Не загружать админов
amxbans_load_admins «0»
// Если у Вас в БД все пароли лежат закодированы в MD5, то поставьте 1
// Поменяйте квар на 0, если при входе на сервер у Вас пишет: Не правильный пароль!
amxbans_passowrd_md5 «1»
// Отключить все Бан функции (оставить только загрузку админов)
amxbans_disable_bans «0»
// Вести лог
// 0 — полностью отключить лог
// a — логировать заходы админов(удачные и нет)
// b — логировать баны админов
// c — логировать попытки захода забаненных игроков
// d — логировать разбаны
// e — логировать пометки
amxbans_logs «abcde»
// Ссылка на бан
// Переменная %bid%, это номер бана
// Примеры для разных систем бана:
// «site.ru/amxbans/ban_list.php?b > // «site.ru/csbans/bans/%bid%.html» — csbans
// «site.ru/banlist» — gamecms (у этой системы нет отдельной странички для конкретного бана, поэтому указываем просто ссылку на весь банлист)
amxbans_ban_link «site.ru/amxbans/ban_list.php?b >
// Ссылка на motd окно (показывает при бане)
// «auto» — автоматически загрузит из Веб панели (не забудьте в веб части, в настройках сервера указать ссылку)
// «custom» — покажет мотд окно из файла amxbans_rbs.ini
// «https://site,ru/amxbans/motd.php?s > amxbans_motd_link «custom»
// Причины банов
// По умолчанию причины грузятся из Веб части и настраиваются там
// Если Вы хотите загружать причины из этого конфига, раскомментируйте команды ниже
//
// 60:1 час 1440:1 день 10080:7 дней 43200:30 дней 525600:365 дней
//amxbans_reason_add «Читер» «43200»
//amxbans_reason_add «Неадекват» «1440»
//amxbans_reason_add «Оскорбления» «360»
//amxbans_reason_add «Кемпер» «60»
// Имя админа, если банил сервер
// Что бы использовать имя сервера, оставьте поле пустым
amxbans_server_nick «CS-Fantastic.ru»
// IP ORT сервера. Найдет автоматически если стоит пустое значение
// Вы можете сами указать IP и порт по примеру: «123.123.123.123:27015»
amxbans_server_address «»
// Чтобы дать бан подсети айпишника 123.123.123.123, нужно забанить 123.123.123.0
// Желательно это делать в веб панели. Выбрать ТИП БАНА по айпи и указать в конце айпишника ноль.
// Для бана и разбана подсети, требуется флаг L(ADMIN_RCON)
// Значения квара:
// 0 — выключить бан подсети
// 1 — не дает войти на сервер пользователям с забаненной подсети, кроме админов с любым флагом
// 2 — тоже что и «1», но еще дает возможность войти STEAM игрокам на сервер
amxbans_subnet «0»
// Число игроков, отображаемых в меню отключенных/последних игроков
// 0 — выключить это меню
amxbans_disconnect_players «16»
// Включить меню наблюдения за игроком?
// вызывается командой: amx_flaggingmenu
amxbans_flagged «0»
// Включение меню истории банов
amxbans_history «1»
// Флаг админа, который может разбанивать все баны, а не только свои (в меню amx_unbanmenu)
// 0 — все админы могут разбанивать все баны
amxbans_flag_unban «r»
// Пункт выбора количества показа забаненных игроков, в меню amx_unbanmenu
// 0 — показать всех
amxbans_unban_step «5 10 20 50 0»
// Флаг иммунитета
amxbans_flag_immunity «r»
// Флаг главного админа.
// Главного админа никто не может забанить(кроме самого сервера),
// а сам главный админ может забанить даже тех, у кого иммунитет (amxbans_flag_immunity)
// 0 — отключить
amxbans_flag_main «k»
// Флаг админа, для использования команды amx_addadmin
// 0 — отключить
amxbans_flag_addadmin «0»
// Тип бана
// По умолчанию бан идет по SteamID
// Если у игрока STEAM_ID_LAN, то бан идет по IP
// Админ с флагом amxbans_flag_bantype, может выбирать тип бана сам (в меню выбора причин бана)
amxbans_bantype_option «IP+SteamID»
// Тип бана, если банит сервер (через команду amx_ban)
// Значения: «SteamID» или «IP+SteamID»
amxbans_bantype_server «IP+SteamID»
// Флаг админа, который может выбирать тип бана (в меню выбора причин бана)
// 0 — выключить
amxbans_flag_bantype «c»
// Добавлять кики игрока в базу данных?
// То есть сколько раз игрок был кикнут с сервера(когда он был забанен и пытался войти)
// По умолчанию функция отключена, так как я считаю это лишним запросом в базу данных
amxbans_add_kick «0»
// Флаг админа, который может использовать собственную причину бана
// 0 — отключить собственные баны
amxbans_custom_flag «c»
// Время бана, используемое при собственной причине бана.
// Значение используется, если у админа статическое значение времени бана. Указывать в минутах
// 0 — навсегда
// -1 — показывать меню с выбором времени
amxbans_custom_statictime «1440»
// Расположение в меню пункта «Своя причина»
// 0 — в начале (первым пунктом)
// 1 — в конце
amxbans_custom_place «0»
// Причина бана по-умолчанию.
amxbans_default_ban_reason «unknown»
// Если игрок ранее был забанен N раз, то при заходе его на сервер будет отображаться инфа админам в чат
// 0 — отключить
// N — количество предыдущих банов
amxbans_show_prebanned «0»
// Наказание игрока перед баном
// 0 — отключить
// 1 — обездвижить
// 2 — убить молнией
amxbans_punish «2»
// Задержка перед киком
// ВАЖНО! В веб панеле есть пункт: «Задержка перед показом MOTD», так вот это не совсем так
// На самом деле это задержка перед киком, неизвестно почему во всех веб панелях так, но мы оставили так же
// Для задержки именно motd окна, смотрите квар ниже
// -1 — Брать из веб панели
amxbans_kick_delay «4»
// Задержка перед показом MOTD
// 0 — не показывать motd окно
amxbans_motd_delay «0»
// Добавлять пункты в меню amxmodmenu?
amxbans_add_menus «0»
// Если Вы добавляете админа без указанного срока бана (в веб часте есть пункт «Установленное время бана»)
// то система покажет меню выбора времени(на сколько банить игрока)
// Тут Вы можете настроить это время
// Кому из админов будет показываться меню с выбором времени бана
// -1 — информация будет браться из веб части («Установленное время бана»)
// 0 — никому не показывать такое меню
// flag — укажите флаг админа(например «l»), который будет иметь возможность выставить время
// d — всем показывать меню
amxbans_established_time «d»
// ВАЖНО: Сначала вводите значения от меньшего к большему. Количество значений — от 1 до 12.
// «0 m» — навсегда
// Допустимые значения:
// 1 — 59 может использоваться с флагом m (минуты)
// 1 — 23 может использоваться с флагом h (часы)
// 1 — 6 может использоваться с флагом d (дни)
// 1 — 999 может использоваться с флагом w (недели)
// Примеры:
// «5 m» — 5 минут
// «1 h» — 1 час
// «1 d» — 1 день
// «2 w» — 2 недели
// Время бана для обычных админов (с флагом «d»)
amxbans_setlowbantimes «10 m» «1 h» «1 d» «7 d»
// Какой флаг доступа должен иметь админ, чтобы получить доступ к банам с большой длительностью
amxbans_hightime_flag «c»
// Время бана для админов с amxbans_hightime_flag флагом.
amxbans_sethighbantimes «10 m» «1 h» «1 d» «7 d» «4 w» «0 m»
// Время наблюдения за игроком в меню
amxbans_setflagtimes «1 h» «4 h» «10 h» «1 d» «1 w» «4 w» «12 w» «0»
// Список консольных команд
// (здесь они написаны просто так, как памятка)
// say /ban [время бана в минутах] — быстрый бан игрока
// или /fb разницы нет
//
// amx_banmenu — открыть бан меню
// amx_banhistorymenu — открыть меню истории банов
// amx_bandisconnectedmenu — открыть меню вышедших игроков
// amx_flaggingmenu — открыть меню помеченных игроков
// amx_unbanmenu — открыть меню разбана игроков
// amx_bansubnetmenu — открыть меню бана подсетей
//
// amx_ban — забанить игрока или подсеть
// amx_banip и fb_ban — аналоги команды amx_ban
// amx_unban — разбан игрока (доступ только для админа с флагом l(ADMIN_RCON))
// amx_addadmin [password] [name|authid|ip] [nick] [show (yes|no)] [expired] [comment] — добавить админа
//
// amx_reloadreasons — Перезагрузка причин
// amx_reloadsubnet — Перезагрузка банов подсети
// amx_reloadadmins — Перезагрузка админов
источник
Источник