Иммунитет плагин для игроков

#include < amxmodx >
#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();
         }
      }
   }
}

Источник

Иммунитет для админов

Сообщений: 66
Благодарностей: 3
Полезность:

Сообщений: 2590
Благодарностей: 669
Полезность: 208

Сообщений: 66
Благодарностей: 3
Полезность:

Сообщений: 746
Благодарностей: 373
Полезность: 628

energydance, не нужно людей вводить в заблуждение это не совсем так

а вообще нужно пользоваться поиском

Сообщений: 2590
Благодарностей: 669
Полезность: 208

Сообщений: 746
Благодарностей: 373
Полезность: 628

Сообщений: 66
Благодарностей: 3
Полезность:

Сообщений: 1428
Благодарностей: 416
Полезность: 422

MeJIoMaH, на вопрос «Как сделать» так и нет ответа. Одной лишь установки плагина недостаточно
ЧТД

Сообщений: 746
Благодарностей: 373
Полезность: 628

Сообщений: 1428
Благодарностей: 416
Полезность: 422

Сообщений: 746
Благодарностей: 373
Полезность: 628

Сообщений: 1428
Благодарностей: 416
Полезность: 422

Сообщений: 746
Благодарностей: 373
Полезность: 628

Сообщений: 66
Благодарностей: 3
Полезность:

Сообщений: 746
Благодарностей: 373
Полезность: 628

Сообщений: 358
Благодарностей: 147
Полезность: 579

вынес линк из под спойлера чтоыб читабельным cnfk

источник

[CS:S][CS:GO] [SM] [VIP] Very Important Person 18.10.2019

#1 GoDtm666

  • Модератор
  • 1 887 сообщений
  • Популярное сообщение!

    Всем привет!
    Разрабатываю VIP плагин для серверов CS:S, и других игр на движке Source.
    На данный момент плагин точится под CS:S v.34, CS:S, CS:GO и CS:S Beta

    Сам плагин разработан недавно, некоторые функции не доделаны.
    Потихоньку плагин буду обновлять.
    Внедрять настройки плагина через команды. и тд.

    Итак: Думаю нет смысла объяснять, что такое VIP.

    Возможности плагина: (Версия 0.0.5)

    1. VIP Чат
    2. Модельки игроков, скины.
    3. Иммунитет от плагинов: антикамп, voteban и тд.
    4. Выносливость
    5. Деньги
    6. Автоматическая установка оружия.
    7. Показ урона.
    8. Антифлеш по команде.
    9. Полный антифлеш.
    10. Отключить повреждения по команде.
    11. BunnyHop
    12. Всегда спавниться с С4.
    13. Усиление урона.
    14. Регенерация.
    15. Медик по команде.
    16. Блокировать повреждения от своей гранаты.
    17. Установка HP.
    18. Установка скорости.
    19. Установка гравитации.
    20. Хвост за гранатой.
    21. Возрождение.
    22. Пониженный урон.
    23. Свободное перемещение между командами.
    24. Звук сердцебиения.
    25. Клан тег.
    26. Блок повреждения, если упал с высоты.
    27. Установка оружия.
    28. Бесконечные патроны.
    29. Дроп гранат и ножа.
    30. Растворять труп, когда убили.
    31. Автоматическая установка глушителя.
    32. Возможность кикнуть игрока с сервера.
    33. Возможность бросить любое оружие у игроков.
    34. Возможность включить/выключить фонарик у игроков.
    35. Возможность нарисовать спрей от лица игроков.
    36. Иммунитет от запрета оружия.
    37. Цветные оружия в руках игрока.
    38. Цветной эффект при убийстве в голову, или с ножа или гранаты.
    39. Измененные world модельки гранат при броске.
    40. Огненная граната при броске.
    41. Поджигающая граната при взрыве на расстоянии 1.5 игрового метра.
    42. Временное ускорение игрока при получении урона.
    43. Озвучка низкого уровня пaтpoнoв для игры CS:S v.34 и CS:S как в игре CSGO
    44. Быcтpaя уcтaнoвкa C4.
    Читайте также:  Фитотерапия и иммунитет детей

    Маленькое превью

    Плагин будет полезен для продажи VIP доступа на сервере

    users_advert_vip_access.ini — Реклама для игроков, которые не имеют доступ к команде vip
    users_activation_keys.ini — Ключи активации VIP доступа.

    users_chat_tags.ini — База чат тегов.

    users_clan_tags.ini — База клан тегов.

    users_weapon_restrict.ini — Лист запрета оружия на определенных картах, совместно работает с Weapon Restrict.

    users_weapon_colors.ini — Лист цветов оружия vip игрока.

    На данный момент плагин будет работать с ключами в файлах .ini

    Ни в коем случаи конфиги любых и данного плагина не редактировать в Блокноте от Windows ни когда ни в какой прошлой или будущей или настоящей жизни.

    vip или vipmenu или vip_menu или vip_settings меню настроек плагина.
    vip_say написать сообщение VIP игрокам.
    vip_cash выдача денег.
    vip_weapon или vip_giveweapon или vip_give выдача оружия.
    vip_health или vip_hp установка HP vip_health 100 или vip_hp 100
    vip_speed установка скорости. (Максимум 3.0)
    vip_users_add Добавление нового VIP игрока.
    vip_groups_users Показать группы для VIP игроков.
    vip_del_users Удалить VIP игрока из базы.
    vip_chat_tag Установка нового VIP тега.

    Список серверных команд:
    vip_users_damage усилитель урона (Насколько умножить урон) для игроков с флагом ‘n’.
    vip_users_max_health Максимальное количество HP для vip игроков.
    vip_users_max_speed Максимальная скорость перемещения для vip игроков.
    vip_users_clan_tag Clan Tag для vip игроков с флагом ‘d’.
    vip_users_max_cash Максимальное количество денег для vip игроков.

    0a VIP Чат.
    0b Модельки игроков, скины.
    0c Иммунитет от плагинов: запрета оружия, антикамп, voteban и тд.
    0d Выносливость
    0e Деньги
    0f Автоматическая установка оружия.
    0g Показ урона.
    0h Антифлеш по команде.
    0i Полный антифлеш.
    0j Отключить повреждения по команде.
    0k BunnyHop
    0l Всегда спавниться с С4.
    0m Усиление урона.
    0n Регенерация.
    0o Медик по команде.
    0p Блокировать повреждения от своей гранаты.
    0q Установка HP.
    0r Установка скорости.
    0s Установка гравитации.
    0t Хвост за гранатой.
    0u Возрождение.
    0v Пониженный урон.
    0w Свободное перемещение между командами.
    0y Звук сердцебиения.
    0x Клан тег.
    0z Блок повреждения, если упал с высоты.
    1a Установка оружия.
    1b Бесконечные патроны.
    1c Дроп гранат и ножа.
    1d Растворять труп, когда убили.
    1e Автоматическая установка глушителя.

    1f Иммунитет от запрета оружия.

    1g Цвета оружия.

    1h Цветной эффект при убийстве в голову, или с ножа или гранаты.

    1i Измененные world модельки гранат при броске.

    1j Огненная граната при броске.

    1k Поджигающая граната при взрыве на расстоянии 1.5 игрового метра.

    1l Временное ускорение игрока при получении урона.

    1m Озвучка низкого уровня пaтpoнoв для игры CS:S v.34 и CS:S как в игре CSGO

    1n Быcтpaя уcтaнoвкa C4.

    2a Возможность кикнуть игрока с сервера.
    2d Возможность бросить любое оружие у игроков.
    2e Возможность включить/выключить фонарик у игроков.
    2f Возможность нарисовать спрей от лица игроков.

    Если у кого-либо есть вопросы, задаем их в этой теме.
    И также принимаются всякие идеи, внедрения новых функций в плагин.
    Отписываемся об ошибках и работе плагина.

    Немножко инфы:
    Требование для работы:
    SourceMod 1.6.3 и выше.
    Socket 3.0.1 и выше.
    Тонну мозгов

    Для работы плагина требуется: SourceMod 1.5.3 и выше! Для тех, у кого CS:S v.34 и старая версия SourceMod, то просто в панели в Плагины переустановите SourceMod

    Плагин имеет автоматическое обновление.

    источник

    Иммунитет плагин для игроков

    VIP [Flags And Immunity] v1.2.6

    _wS_Дата: Четверг, 09.10.2014, 00:22:17 | Сообщение # 1

    VIP [Flags And Immunity] v1.2.6 (модуль для VIP) (csgo, css, css v34)
    СКАЧАТЬ [ как устанавливать VIP модули ]

    flags_and_immunity : флаги : иммунитет

    Пример: flags_and_immunity : cf : 50
    Иммунитет указывайте от 1 до 99, или 0, чтобы его не ставить.
    Его можно и не указывать: flags_and_immunity : cf
    Чтобы выдать иммунитет не выдавая флаги: flags_and_immunity : 0 : 50

    Уверен снова посыпятся сообщения вроде: «ну я дал игроку флаг/иммунитет, но он все равно есть в каком-то меню и тд». Это недочет плуга, который показывает это меню, а именно: он проверяет флаги игрока один раз при входе на сервер и запоминает полученные данные и не учитывает то, что флаги и иммунитет могут меняться в любой момент игры. Единственное (известное мне) решение: это редактировать подобные плуги. Можете прикладывать их в эту тему и просить подправить. Или самих авторов просить.

    Если sourcebans или какой-то плаг перезаписывает группы/флаги, проблема может решиться если дополнительно выдать игроку флаг b.
    Это флаг generic (b), который как написано, обязательно требуется для админов.
    Если после выдачи b флага открывается !admin меню, можно ограничить команду sm_admin в addonssourcemodconfigsadmin_overrides.cfg

    Прикрепления: 4647761.jpg (27.3 Kb) · playersvotes-re.zip (33.1 Kb) · AdminList.zip (6.5 Kb)

    _wS_Дата: Четверг, 06.04.2017, 08:36:17 | Сообщение # 2
    n1berДата: Четверг, 06.04.2017, 11:42:09 | Сообщение # 3
    Сообщений: 30
    Репутация: 0 [ +/- ]
    _wS_Дата: Четверг, 06.04.2017, 13:19:14 | Сообщение # 4

    Ну, если убедишь что от неё есть толк

    1. Купил ключ
    2. Подменил steamid на какой хоч и зашел на сервер (и это вроде ток на 34 роб?)
    3. Активировал ключ и получил логин + пароль
    4. Реальный владелец steamid не может войти на сервер, просит какой-то логин и какой-то пароль.

    Или даже пусть это владелец получил логин + пароль.
    Но парень подменил steamid, пишет тебе и говорит что забыл логин и пароль или ещё что-то в этом роде.

    n1berДата: Четверг, 06.04.2017, 14:41:59 | Сообщение # 5
    Сообщений: 30
    Репутация: 0 [ +/- ]

    _wS_, ты прав, но обычно, у меня, покупка производится через ВК ???? поэтому отследить проблем нет)

    По большей части это защита от школьников)))

    Serjik432Дата: Суббота, 08.04.2017, 14:11:14 | Сообщение # 6
    Сообщений: 158
    Репутация: 5 [ +/- ]

    Прикрепления: weapon-restrict.zip (72.6 Kb)

    chilla_mytkuДата: Суббота, 08.04.2017, 14:38:00 | Сообщение # 7
    Сообщений: 82
    Репутация: 0 [ +/- ]
    _wS_Дата: Суббота, 08.04.2017, 15:49:41 | Сообщение # 8

    Это значит, что sm_weapon_restrict_immunity должно быть в любом случае 1. Затем идет проверка доступа к команде sm_restrict_immunity_level, если она существует, то будет проверяться флаг, с которым была создана эта команда, но этот плуг не создаёт эту команду, и если никакой другой её тож не создаёт, то проверяется флаг reservation ( a ).

    Вывод:
    1. sm_weapon_restrict_immunity 1
    2. Дать флаг a

    chilla_mytkuДата: Суббота, 08.04.2017, 18:36:35 | Сообщение # 9
    Сообщений: 82
    Репутация: 0 [ +/- ]
    Serjik432Дата: Понедельник, 10.04.2017, 12:51:14 | Сообщение # 10
    Сообщений: 158
    Репутация: 5 [ +/- ]
    _wS_Дата: Воскресенье, 23.04.2017, 18:25:30 | Сообщение # 11
    n1berДата: Понедельник, 01.05.2017, 08:22:10 | Сообщение # 12
    Сообщений: 30
    Репутация: 0 [ +/- ]

    После обновления, перестал иммунитет работать. с плагином weapon_restrict.
    В плагине выставил sm_weapon_restrict_immunity 1
    Выдал вип игрокам флаг «а»
    У админов забрал флаг «h» — хочу сделать так, чтобы только вип игроки покупали авп без ограничения ????

    Не работает! Покупать авп продолжают все игроки(Вип и админы)

    ramazan1982Дата: Среда, 25.04.2018, 12:22:21 | Сообщение # 13
    Сообщений: 14
    Репутация: 0 [ +/- ]

    После обновления, перестал иммунитет работать. с плагином weapon_restrict.
    В плагине выставил sm_weapon_restrict_immunity 1
    Выдал вип игрокам флаг «а»
    У админов забрал флаг «h» — хочу сделать так, чтобы только вип игроки покупали авп без ограничения ????

    Не работает! Покупать авп продолжают все игроки(Вип и админы)

    источник

    Источник