Нужна помощь с блокировкой команды

Тема в разделе "Программирование / Скриптинг", создана пользователем Алексей Кашура, 1 май 2014.

  1. Алексей Кашура

    Алексей Кашура

    Сообщения:
    15
    Симпатии:
    1
    Нужен совет как сделать временную блокировку для игрока, чтобы каждый игрок мог, использовал его только один раз за раунд

    Я сам пытал сделать, но получается, так что блокирует её полностью или вообще не работает :sad:

    вот часть кода которую мне надо сделать:
    HTML:
    public OnPluginStart()
    {
        RegConsoleCmd("sm_weapon", CommandWeapon, "");
    }
    
    public Action:CommandWeapon(client, args)
    {
        if (GetClientTeam(client) == TEAM_SURVIVORS && IsPlayerAlive(client))
        {
            SetWeaponVip(client, "weapon_smg", "weapon_pistol_magnum");
        }
    }
    
    public SetWeaponVip(client, const String:weapon_name_a[], const String:weapon_name_b[])
    {
        for (new i = 0; i < 5; i++)
        {
            if (GetPlayerWeaponSlot(client, i) > -1)
            {
                RemovePlayerItem(client, GetPlayerWeaponSlot(client, i));
            }
        }
        CheatCMD(client, "give", weapon_name_a);
        CheatCMD(client, "give", weapon_name_b);
        CheatCMD(client, "give", "weapon_molotov");
        CheatCMD(client, "give", "weapon_first_aid_kit");
        CheatCMD(client, "give", "weapon_adrenaline");
    }
    За ранние спасибо за помощь
     
  2. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    PHP:
    new bool:g_bIsClientUsedCommand[MAXPLAYERS+1] = {false, ...};

    public 
    OnPluginStart()
    {
        
    RegConsoleCmd("sm_weapon"CommandWeapon"");
        
    HookEvent("round_start"Event_RoundStartEventHookMode_PostNoCopy);
    }

    public 
    Action:CommandWeapon(clientargs)
    {
        if (
    GetClientTeam(client) == TEAM_SURVIVORS && IsPlayerAlive(client))
        {
            
    SetWeaponVip(client"weapon_smg""weapon_pistol_magnum");
        }
    }

    public 
    SetWeaponVip(client, const String:weapon_name_a[], const String:weapon_name_b[])
    {
        if(!
    client || !IsClientInGame(client) || !IsPlayerAlive(client))
            return 
    Plugin_Handled;
        
        if(!
    g_bIsClientUsedCommand[client])
        {
            for (new 
    05i++)
            {
                if (
    GetPlayerWeaponSlot(clienti) > -1)
                {
                    
    RemovePlayerItem(clientGetPlayerWeaponSlot(clienti));
                }
            }
            
    CheatCMD(client"give"weapon_name_a);
            
    CheatCMD(client"give"weapon_name_b);
            
    CheatCMD(client"give""weapon_molotov");
            
    CheatCMD(client"give""weapon_first_aid_kit");
            
    CheatCMD(client"give""weapon_adrenaline");

                    
    g_bIsClientUsedCommand[client] = true;
        }
        else
            
    PrintToChat(client"[SM] You have used this command before");
        
        return 
    Plugin_Handled;
    }

    public 
    Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
    {
        for(new 
    client 1client <= MaxClientsclient++)
            
    g_bIsClientUsedCommand[client] = false;
    }
    Создай массив, при использовании меняй значение элемента массива для клиента. При определенных событиях меняй значение элемента обратно.
    Но вместо события раунд старта придется использовать какое-то свое из л4д2, я не знаю какое именно. Возможно даже два хука для player_bot_replace и player_left_start_area. Я с л4д2 ещё просто дела не имел, тебе виднее что использовать.
     
    Алексей Кашура нравится это.