Плагин для убийства дымовой гранатой

Тема в разделе "Запросы", создана пользователем Сергей Божко, 27 июл 2013.

  1. Сергей Божко

    Сергей Божко

    Сообщения:
    10
    Симпатии:
    0
    Всем привет! Столкнулся с проблемой, дымовой гранатой никого нельзя убить на картах, подскажите пожалуйста плагин для решения этой проблемы.
     
  2. hellgu

    hellgu

    Сообщения:
    119
    Симпатии:
    30
    Наверно дело в Noblock'e. А ты ставил плагин кидание ножей?)
     
  3. Сергей Божко

    Сергей Божко

    Сообщения:
    10
    Симпатии:
    0
    Да, они тоже никого не убивали. Я помню я ставил антифлуд оружием + noblock, но теперь найти его не могу
     
  4. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    Сергей Божко, поставь простой NoBlock, вот код (создать sp файл с ним и скомпилировать)
    PHP:
    #include <sourcemod>
    #include <sdktools>
    new g_offsCollisionGroup=-1;
    public 
    OnPluginStart()
    {
        
    g_offsCollisionGroup FindSendPropOffs("CBaseEntity""m_CollisionGroup");
        if (
    g_offsCollisionGroup == -1)
            
    SetFailState("[NoBlock] Failed to get offset");
        
    HookEvent("player_spawn"OnSpawnEventHookMode_Post);
    }
    public 
    OnSpawn(Handle:event, const String:name[], bool:dontBroadcast)
        
    SetEntData(GetClientOfUserId(GetEventInt(event"userid")), g_offsCollisionGroup24true);
     
  5. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    KorDen, а как сделать, чтобы он только для членов своей команды работал ?
     
  6. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    R1KO, простым способом невозможно
     
    R1KO нравится это.
  7. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.570
    Симпатии:
    1.153
    R1KO, я пользуюсь таким плагом No-collide Team-mate
    PHP:
    /*
    Thanks to VoiDeD for his collisionhook extension which allow us to say good-bye to the mayhem bug ;)
    */

    #include <sourcemod>
    #include <sdktools>
    #include <collisionhook>

    #define VERSION "2.0.0"

    #pragma semicolon 1

    #define COLLIDE_DISABLE_BUTTONS (IN_ATTACK | IN_ATTACK2)

    public Plugin:myinfo =
    {
        
    name "No-collide Team-mate",
        
    author "Mirandor",
        
    description "Players dont collide if there on the same team.",
        
    version VERSION,
        
    url ""
    };

    new 
    Handle:g_NoCollide_Chat     INVALID_HANDLE;
    new 
    Handle:g_NoCollide_Time     INVALID_HANDLE;
    new 
    Handle:g_FriendlyFire         INVALID_HANDLE;
    new 
    NoCollide_FF                 0;
    new 
    NoCollide_Chat                 0;
    new 
    Float:NoCollide_Time         0.0;
    new 
    bool:NoCollide_Disabled     false;
    new 
    bool:NoCollide_Delayed         false;
    new 
    bool:P_Move[MAXPLAYERS+1]    = false;

    public 
    OnPluginStart()
    {
        
    LoadTranslations("no_collide_teammate.phrases");
        
        
    CreateConVar"SM_NoCollideTeammate_version"VERSION"Version of the no-collide team-mate plugin"FCVAR_PLUGIN FCVAR_REPLICATED FCVAR_NOTIFY );
        
        
    g_NoCollide_Chat CreateConVar("SM_NoCollideTeammate_Chat""1""Messages displayed to all players (in chat) or to server console only.\n1 - Print to chat\n0 - Print to server"_true0.0true1.0);
        
    g_NoCollide_Time CreateConVar("SM_NoCollideTeammate_Time""0.0""Number of seconds after round_start with no-collision features.\n-1.0 = Collisions are always enabled\n 0.0 = Collisions are always disabled (default setting)\n>0.0 = Collisions are disabled for x seconds)"FCVAR_NONEtrue, -1.0);
        
    //FriendlyFire does not work as is while collisions are removed, so i've had to add a shitty option to take care of it...
        
    g_FriendlyFire FindConVar("mp_friendlyfire");
        
        
    HookEvent("round_start"EventRoundStart);
        
        
    HookConVarChange(g_NoCollide_ChatOnSettingsChanged);
        
    HookConVarChange(g_NoCollide_TimeOnSettingsChanged);
        
    HookConVarChange(g_FriendlyFireOnSettingsChanged);
        
        
    AutoExecConfig(true"no_collide_teammate");
    }

    public 
    OnMapStart()
    {
        
    NoCollide_Chat GetConVarInt(g_NoCollide_Chat);
        
    NoCollide_Time GetConVarFloat(g_NoCollide_Time);
        if (
    NoCollide_Time 0)
            
    NoCollide_Disabled true;
    }

    public 
    Action:EventRoundStart(Handle:event, const String:name[], bool:dontBroadcast)
    {
        if (
    NoCollide_Time 0)
        {
            if (
    NoCollide_Chat)
                
    PrintToChatAll("[SM] %t""NCTC_P_Enabled");
            else
                
    PrintToServer("Team-mate collisions are permanently Enabled.");
        }
        else
        {
            if (
    NoCollide_Time == 0)
            {
                if (
    NoCollide_Chat)
                    
    PrintToChatAll("\x01[SM] %t""NCTC_P_Disabled");
                else
                    
    PrintToServer("Team-mate collisions are permanently Disabled.");
            }
            else
            {
                for (new 
    1<= MaxClientsi++)
                    if (
    IsClientInGame(i))
                        
    P_Move[i] = false;
                
                if (
    NoCollide_Chat)
                    
    PrintToChatAll("\x01[SM] %t""NCTC_Disabled""\x04"NoCollide_Time"\x01");
                else
                    
    PrintToServer("Team-mate collisions are Disabled for %0.1f seconds."NoCollide_Time);
                
                
    NoCollide_Disabled false;
                
    NoCollide_Delayed false;
                
    CreateTimer(NoCollide_TimeTimer_Check_Collision_TIMER_FLAG_NO_MAPCHANGE);
            }
        }
    }

    public 
    Action:Timer_Check_Collision(Handle:timer)
    {
        
    NoCollide_Delayed true;
        
    CreateTimer(0.1Timer_Disable_Collision_TIMER_FLAG_NO_MAPCHANGE);
    }

    public 
    Action:Timer_Disable_Collision(Handle:timer)
    {
        if (
    NoCollide_Chat)
            
    PrintToChatAll("[SM] %t""NCTC_Enabled");
        else
            
    PrintToServer("[SM] Team-mate collisions are now Enabled.");
        
        
    NoCollide_Disabled true;
    }

    public 
    Action:CH_PassFilter(ent1ent2, &bool:result)
    {    
        if (
    NoCollide_Disabled)
            return 
    Plugin_Continue;
        
        if (
    IsValidClient(ent1) && IsValidClient(ent2))
        {
            if (
    IsSameTeam(ent1ent2))
            {
                
    //If FriendlyFire is ON, we have to check if players are using attack or attack2 buttons...
                
    if(NoCollide_FF)
                    if((
    GetClientButtons(ent1) & COLLIDE_DISABLE_BUTTONS) || (GetClientButtons(ent2) & COLLIDE_DISABLE_BUTTONS))
                        return 
    Plugin_Continue;
                        
                
    //FF is Off or players don't use attack/attack2 buttons so let's remove collisions
                
    result false;
                
                
    //Timer has just ended, so let's check if many players have to be moved...
                
    if (NoCollide_Delayed)
                    
    ShouldMove(ent1ent2);
                    
                return 
    Plugin_Handled;
            }
            return 
    Plugin_Continue;
        }
        return 
    Plugin_Continue;
    }

    ShouldMove(player1player2)
    {
        new 
    Float:vec_player1[3], Float:vec_player2[3];
        
    GetClientAbsOrigin(player1vec_player1);
        
    GetClientAbsOrigin(player2vec_player2);
                
        if(
    GetVectorDistance(vec_player1vec_player2) < 33.0)
        {
            
    //PrintToServer("%N collide with %N", player1, player2);
                    
            
    if (P_Move[player1] && P_Move[player2])
                
    P_Move[player2] = false;
                    
            if (!
    P_Move[player2])
            {
                
    //Force player2 to move backward
                //we hope players won't collide anymore...
                
    vec_player2[0] = FloatSub(vec_player2[0], 65.0);
                
    TeleportEntity(player2vec_player2NULL_VECTORNULL_VECTOR);
                        
                if (
    NoCollide_Chat)
                    
    PrintToChat(player2"[SM] %t""NCTC_Moved");
                else
                    
    PrintToConsole(player2"[SM] You have been moved to prevent a collision with a team-mate.");
                        
                
    P_Move[player1] = true;
                
    P_Move[player2] = true;
            }
        }
    }

    stock bool:IsValidClient(client
    {
        if (
    client <= MaxClients && IsClientInGame(client))
            return 
    true;
            
        return 
    false
    }

    stock bool:IsSameTeam(client1client2
    {
        new 
    team1 GetClientTeam(client1);
        new 
    team2 GetClientTeam(client2);
        
        if (
    team1 == team2 && team1 0
            return 
    true;
            
        return 
    false
    }

    public 
    OnSettingsChanged(Handle:cvar, const String:oldvalue[], const String:newvalue[])
    {
        if(
    cvar == g_NoCollide_Chat)
            
    NoCollide_Chat StringToInt(newvalue);
        
        if(
    cvar == g_NoCollide_Time)
        {
            
    NoCollide_Time StringToFloat(newvalue);
            
            if (
    NoCollide_Time 0)
            {
                
    NoCollide_Time = -1.0;
                
    NoCollide_Disabled true;
            }
            else
                
    NoCollide_Disabled false;
                
            
    NoCollide_Delayed false;
        }
        if(
    cvar == g_FriendlyFire)
            
    NoCollide_FF StringToInt(newvalue);
    }
    Для работы нужно расширение collisionhook.ext
     
    R1KO нравится это.
  8. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    KorDen, как обратно вернуть ? после
    PHP:
    SetEntData(GetClientOfUserId(GetEventInt(event"userid")), g_offsCollisionGroup24true); 
     
  9. ☆★☆БАТЯ☆★☆™

    ☆★☆БАТЯ☆★☆™

    Сообщения:
    2.585
    Симпатии:
    1.341