Показ кнопок в хинте.

Тема в разделе "Программирование / Скриптинг", создана пользователем 8Ahnenerbe8, 28 июл 2016.

  1. 8Ahnenerbe8

    8Ahnenerbe8

    Сообщения:
    102
    Симпатии:
    11
    Салют!
    Написал плагин,который выводит в хинт кнопки, которые нажимает игрок.
    Получилось так:
    PHP:
    #include <sourcemod>

    public OnPluginStart()
    {
        
    RegConsoleCmd("sm_keys"Show_Keys);
    }

    public 
    Action:Show_Keys(clientargs)
    {
        new 
    String:keys[64];
        
    GetKeysMessage(clientkeyssizeof(keys));
        
    PrintHintText(client"%s"keys);
    }

    void GetKeysMessage(clientString:sKeys[], maxlen)
    {
        new 
    buttons GetClientButtons(client);

        
    Format(sKeysmaxlen"");

        if(
    buttons IN_MOVELEFT)
            
    Format(sKeysmaxlen"%sA"sKeys);
        else
            
    Format(sKeysmaxlen"%s_"sKeys);

        if(
    buttons IN_FORWARD)
            
    Format(sKeysmaxlen"%sW"sKeys);
        else
            
    Format(sKeysmaxlen"%s_"sKeys);

        if(
    buttons IN_BACK)
            
    Format(sKeysmaxlen"%sS"sKeys);
        else
            
    Format(sKeysmaxlen"%s_"sKeys);

        if(
    buttons IN_MOVERIGHT)
            
    Format(sKeysmaxlen"%sD"sKeys);
        else
            
    Format(sKeysmaxlen"%s_"sKeys);

        if(
    buttons IN_DUCK)
          
    Format(sKeysmaxlen"%s - C"sKeys);
        else
          
    Format(sKeysmaxlen"%s - _"sKeys);

        if(
    buttons IN_JUMP)
            
    Format(sKeysmaxlen"%sJ"sKeys);
        else
            
    Format(sKeysmaxlen"%s_"sKeys);

        
    Format(sKeysmaxlen"%s"sKeys);
    }
    Но так как у меня бхоп сервер, на котором стоит автобхоп, кнопка джамп(J) в хинте не отображается(редко проскакивает).
    Может кто-то знает, как пофиксить это?
     
    Последнее редактирование: 28 июл 2016
  2. 8Ahnenerbe8

    8Ahnenerbe8

    Сообщения:
    102
    Симпатии:
    11
  3. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    Делай через:
    PHP:
    public Action:OnPlayerRunCmd(client, &buttons, &impulseFloat:vel[3], Float:angles[3], &weapon, &subtype, &cmdnum, &tickcount, &seedmouse[2])
     
  4. 8Ahnenerbe8

    8Ahnenerbe8

    Сообщения:
    102
    Симпатии:
    11
    @AlmazON, через это тоже не работает, аналогично кнопка проскакивает и все
     
    Последнее редактирование: 28 июл 2016
  5. 8Ahnenerbe8

    8Ahnenerbe8

    Сообщения:
    102
    Симпатии:
    11
    @AlmazON,
    Места хватает, я же говорю,она с определнной переодичностью проскакивает.
    Но на всякий случай я все равно проверил, не помогло.
    Мб я что-то не так сделал?
    PHP:
    #include <sourcemod>

    public Action:OnPlayerRunCmd(client, &buttons, &impulseFloat:vel[3], Float:angles[3], &weapon, &subtype, &cmdnum, &tickcount, &seedmouse[2])
    {
        new 
    String:keys[64];
        
    GetKeysMessage(clientkeyssizeof(keys));
        
    PrintHintText(client"%s"keys);
    }

    void GetKeysMessage(clientString:sKeys[], maxlen)
    {
        new 
    buttons GetClientButtons(client);

        
    Format(sKeysmaxlen"");

    /*    if(buttons & IN_MOVELEFT)
            Format(sKeys, maxlen, "%sA", sKeys);
        else
            Format(sKeys, maxlen, "%s_", sKeys);

        if(buttons & IN_FORWARD)
            Format(sKeys, maxlen, "%sW", sKeys);
        else
            Format(sKeys, maxlen, "%s_", sKeys);

        if(buttons & IN_BACK)
            Format(sKeys, maxlen, "%sS", sKeys);
        else
            Format(sKeys, maxlen, "%s_", sKeys);

        if(buttons & IN_MOVERIGHT)
            Format(sKeys, maxlen, "%sD", sKeys);
        else
            Format(sKeys, maxlen, "%s_", sKeys);

        if(buttons & IN_DUCK)
          Format(sKeys, maxlen, "%s - C", sKeys);
        else
          Format(sKeys, maxlen, "%s - _", sKeys);*/

        
    if(buttons IN_JUMP)
            
    Format(sKeysmaxlen"%sJ"sKeys);
        else
            
    Format(sKeysmaxlen"%s_"sKeys);

    //  Format(sKeys, maxlen, "%s", sKeys);
    }
     
    Последнее редактирование: 29 июл 2016
  6. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    826
    Симпатии:
    195
    Нет, дело в БХОП-Плагине. Он вырубает кнопку, и только тогда, когда игрок на земле, врубает ее.
    Кинь исходник от бхоп-плагина, я попробую немного изменить.
     
  7. 8Ahnenerbe8

    8Ahnenerbe8

    Сообщения:
    102
    Симпатии:
    11
    @inklesspen, вырезал функцию с автобхопом, там в конце это будет.
    PHP:
    public Action:OnPlayerRunCmd(client, &buttons, &impulseFloat:vel[3], Float:angles[3], &weapon)
    {
        
    g_UnaffectedButtons[client] = buttons;
     
        if(
    IsPlayerAlive(client))
        {
            new 
    Style g_Style[client][g_Type[client]];
         
            
    // Key restriction
            
    new bool:bRestrict CheckRestrict(velStyle);
         
            if(
    g_StyleConfig[Style][Special])
            {
                if(
    StrEqual(g_StyleConfig[Style][Special_Key], "hsw"))
                {
                    if(
    vel[0] > && vel[1] != 0)
                        
    g_HSWCounter[client] = GetEngineTime();
                 
                    if(((
    GetEngineTime() - g_HSWCounter[client] > 0.4) || vel[0] <= 0) && !(GetEntityFlags(client) & FL_ONGROUND))
                    {
                        
    bRestrict true;
                    }
                }
                else if (
    StrEqual(g_StyleConfig[Style][Special_Key], "surfhsw-aw-sd"true))
                {
                    if((
    vel[0] > 0.0 && vel[1] < 0.0) || (vel[0] < 0.0 && vel[1] > 0.0)) // If pressing w and a or s and d, keep unrestricted
                    
    {
                        
    g_HSWCounter[client] = GetEngineTime();
                    }
                    else if(
    GetEngineTime() - g_HSWCounter[client] > 0.3// Restrict if player hasn't held the right buttons for too long
                    
    {
                        
    bRestrict true;
                    }
                }
                else if (
    StrEqual(g_StyleConfig[Style][Special_Key], "surfhsw-as-wd"true))
                {
                    if ((
    vel[0] < 0.0 && vel[1] < 0.0) || (vel[0] > 0.0 && vel[1] > 0.0))
                    {
                        
    g_HSWCounter[client] = GetEngineTime();
                    }
                    else if(
    GetEngineTime() - g_HSWCounter[client] > 0.3)
                    {
                        
    bRestrict true;
                    }
                }
            }
         
            if(
    GetEntityMoveType(client) == MOVETYPE_NOCLIP)
                
    bRestrict false;
            else if(
    g_StyleConfig[Style][Freestyle] && g_StyleConfig[Style][Freestyle_Unrestrict])
                if(
    Timer_InsideZone(clientFREESTYLE<< Style) != -1)
                    
    bRestrict false;
         
            if(
    bRestrict == true)
            {
                if(!(
    GetEntityFlags(client) & FL_ATCONTROLS))
                    
    SetEntityFlags(clientGetEntityFlags(client) | FL_ATCONTROLS);
            }
            else
            {
                if(
    GetEntityFlags(client) & FL_ATCONTROLS)
                    
    SetEntityFlags(clientGetEntityFlags(client) &  ~FL_ATCONTROLS);
            }
         
            
    // Count strafes
            
    if(g_StyleConfig[Style][Count_Left_Strafe] && !(g_Buttons[client] & IN_MOVELEFT) && (buttons IN_MOVELEFT))
                
    g_Strafes[client]++;
            if(
    g_StyleConfig[Style][Count_Right_Strafe] && !(g_Buttons[client] & IN_MOVERIGHT) && (buttons IN_MOVERIGHT))
                
    g_Strafes[client]++;
            if(
    g_StyleConfig[Style][Count_Back_Strafe] && !(g_Buttons[client] & IN_BACK) && (buttons IN_BACK))
                
    g_Strafes[client]++;
            if(
    g_StyleConfig[Style][Count_Forward_Strafe] && !(g_Buttons[client] & IN_FORWARD) && (buttons IN_FORWARD))
                
    g_Strafes[client]++;
         
            
    // Calculate sync
            
    if(g_StyleConfig[Style][CalcSync] == true)
            {
                
    CheckSync(clientbuttonsvelangles);
            }
         
            
    // Check gravity
            
    if(g_StyleConfig[Style][Gravity] != 0.0)
            {
                if(
    GetEntityGravity(client) == 0.0)
                {
                    
    SetEntityGravity(clientg_StyleConfig[Style][Gravity]);
                }
            }
             
            if(
    g_bTiming[client] == true)
            {
                
    // Anti +left
                
    if(GetConVarBool(g_hAllowLeftYawspeed) == false)
                {
                    if(
    buttons & (IN_LEFT))
                    {
                        
    StopTimer(client);
                     
                        if(
    Timer_InsideZone(clientMAIN_START, -1) == -&& Timer_InsideZone(clientBONUS_START, -1) == -1)
                        {
                            
    PrintColorText(client"%s%sYour timer was stopped for using %s+left",
                                
    g_msg_start,
                                
    g_msg_textcol,
                                
    g_msg_varcol);
                        }
                    }
                }
             
                
    // Anti +right
                
    if(GetConVarBool(g_hAllowRightYawspeed) == false)
                {
                    if(
    buttons & (IN_RIGHT))
                    {
                        
    StopTimer(client);
                     
                        if(
    Timer_InsideZone(clientMAIN_START, -1) == -&& Timer_InsideZone(clientBONUS_START, -1) == -1)
                        {
                            
    PrintColorText(client"%s%sYour timer was stopped for using %s+right",
                                
    g_msg_start,
                                
    g_msg_textcol,
                                
    g_msg_varcol);
                        }
                    }
                }
             
                
    // Pausing
                
    if(g_bPaused[client] == true)
                {
                    if(
    GetEntityMoveType(client) == MOVETYPE_WALK)
                    {
                        
    SetEntityMoveType(clientMOVETYPE_NONE);
                    }
                }
                else
                {
                    if(
    GetEntityMoveType(client) == MOVETYPE_NONE)
                    {
                        
    SetEntityMoveType(clientMOVETYPE_WALK);
                    }
                }
             
                
    g_fCurrentTime[client] += GetTickInterval();
            }
         
            
    // auto bhop check
            
    if(g_bAllowAuto)
            {
                if(
    g_StyleConfig[Style][Auto] || (g_StyleConfig[Style][Freestyle] && g_StyleConfig[Style][Freestyle_Auto] && Timer_InsideZone(clientFREESTYLE<< Style) != -1))
                {
                    if(
    GetClientSettings(client) & AUTO_BHOP)
                    {
                        if(
    buttons IN_JUMP)
                        {
                            if(!(
    GetEntityFlags(client) & FL_ONGROUND))
                            {
                                if(!(
    GetEntityMoveType(client) & MOVETYPE_LADDER))
                                {
                                    if(
    GetEntProp(clientProp_Data"m_nWaterLevel") <= 1)
                                    {
                                        
    buttons &= ~IN_JUMP;
                                    }
                                }
                            }
                        }
                    }
                }
            }
         
            if(
    g_bJumpInStartZone == false)
            {
                if(
    Timer_InsideZone(clientMAIN_START, -1) != -|| Timer_InsideZone(clientBONUS_START, -1) != -1)
                {
                    
    buttons &= ~IN_JUMP;
                }
            }
        }
     
        
    g_Buttons[client] = buttons;
    }
     
  8. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    826
    Симпатии:
    195
    А! Точно! Ты можешь показывать кнопки через плагин автобхопа! За одно блокировать ниче не будет в твоих хинтах
     
    8Ahnenerbe8 нравится это.
  9. 8Ahnenerbe8

    8Ahnenerbe8

    Сообщения:
    102
    Симпатии:
    11
  10. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    826
    Симпатии:
    195
    Тут можно ловить кнопку для других плагинов. Проблема в другом: Ускорения нету :D
    --- Добавлено позже ---
    Или вот, получать JUMP кнопку у плагина на Бхоп)
    Достаточно в плагин добавить native bool:AbnerBHOP_GetRealJumpButton(int client); И юзать его вместо проверки buttons & IN_JUMP
     

    Вложения:

    Последнее редактирование: 29 июл 2016
    666FoX666 и 8Ahnenerbe8 нравится это.
  11. 8Ahnenerbe8

    8Ahnenerbe8

    Сообщения:
    102
    Симпатии:
    11
  12. skolobes

    skolobes Не раздевайся, я по делу

    Сообщения:
    263
    Симпатии:
    21
    а можно сделать так,чтоб показывало,когда террорист нажимает кнопку,для детран сервера нужно.
     
  13. 8Ahnenerbe8

    8Ahnenerbe8

    Сообщения:
    102
    Симпатии:
    11
    @skolobes, можно
    добавь проверку
    if(GetClientTeam(client) == 2)