Напишите простенький плагин

Тема в разделе "Запросы", создана пользователем Lominad, 12 июн 2015.

  1. Lominad

    Lominad

    Сообщения:
    135
    Симпатии:
    27
    Привет всем, можете, пожалуйста, написать простенький плагин?
    Его суть: Когда в какой-либо команде осталось в живых 2 и менее игроков выполнялась команда sv_alltalk 0, и после победы одной из команд сразу ставилось обратно sv_alltalk 1. При этом, чтобы была проверка на кол-во игроков на сервере. Если в общем меньше 10, плаг не срабатывал.
    Заранее спасибо
     
    Последнее редактирование: 19 авг 2015
  2. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.978
  3. Lominad

    Lominad

    Сообщения:
    135
    Симпатии:
    27
  4. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.978
    Lominad, я понял, скинул как основу для тех кто будет делать. Немного изменить и будет то что нужно
     
    Lominad нравится это.
  5. DarklSide

    DarklSide

    Сообщения:
    679
    Симпатии:
    170
    Lominad, не проверял:
    PHP:
    #include <sourcemod>
    const int imaximum 10;
    const 
    int ilife 2;
    Handle h_Cvar_Alltalk INVALID_HANDLE;
    bool binmin false;
    public 
    void OnPluginStart()
    {
        
    HookEvent("player_death"Event_OnPlayerDeathEventHookMode_PostNoCopy);
        
    HookEvent("round_end"Event_OnRoundEndEventHookMode_PostNoCopy);
        
    h_Cvar_Alltalk FindConVar("sv_alltalk");
    }
    public 
    Action Event_OnPlayerDeath(Event event, const char[] namebool dontBroadcast)
    {
        if (!
    binmin)
        {
            
    checks();
        }
        return 
    Plugin_Continue;
    }
    public 
    void Event_OnRoundEnd(Event event, const char[] namebool dontBroadcast)
    {
        if (!
    binmin)
        {
            
    SetConVarBool(h_Cvar_Alltalktrue);
            
    PrintToChatAll("Конец");
        }
        
    binmin false;
    }
    public 
    void OnClientDisconnect(int client)
    {
        if (!
    binmin)
        {
            
    checks();
        }
    }
    stock void checks()
    {
        
    int iplayer 0iteamt 0iteamct 0;
        for (
    int i 1<= MaxClients; ++i)
        {
            if (
    IsClientInGame(i))
            {
                
    iplayer++;
                if (
    IsPlayerAlive(i))
                {
                    if (
    GetClientTeam(i) == 2)
                    {
                        
    iteamt++;
                    }
                    else if (
    GetClientTeam(i) == 3)
                    {
                        
    iteamct++;
                    }
                }
            }
        }
        if (
    iplayer imaximum)
        {
            if (
    iteamt <= ilife || iteamct <= ilife)
            {
                
    SetConVarBool(h_Cvar_Alltalkfalse);
                
    PrintToChatAll("Talk = 0");
            }
        }
        else
        {
            
    binmin true;
        }
    }
     
    Последнее редактирование: 16 июн 2015
    Lominad нравится это.
  6. Lominad

    Lominad

    Сообщения:
    135
    Симпатии:
    27
    DarklSide, сейчас проверим
    Не компилится, ругается на строчки 2, 3, 5, 11
    Фотка - http://c2n.me/3jcv0ar
     
  7. DarklSide

    DarklSide

    Сообщения:
    679
    Симпатии:
    170
    sm version - в консоль сервера.
     
  8. Lominad

    Lominad

    Сообщения:
    135
    Симпатии:
    27
    DarklSide, Забыл упомянуть v34
    Код:
     SourceMod Version Information:
        SourceMod Version: 1.5.3
        SourcePawn Engine: SourcePawn 1.1, jit-x86 (build 1.5.3)
        SourcePawn API: v1 = 4, v2 = 4
        Compiled on: May 26 2014 13:53:29
        Build ID: 3946:238c41726d73
     
  9. DarklSide

    DarklSide

    Сообщения:
    679
    Симпатии:
    170
    Lominad, sm1.7.0-

    PHP:
    #include <sourcemod>
    new const imaximum 10;
    new const 
    ilife 2;
    new 
    Handle:h_Cvar_Alltalk INVALID_HANDLE;
    new 
    bool:binmin false;
    public 
    OnPluginStart()
    {
        
    HookEvent("player_death"Event_OnPlayerDeathEventHookMode_PostNoCopy);
        
    HookEvent("round_end"Event_OnRoundEndEventHookMode_PostNoCopy);
        
    h_Cvar_Alltalk FindConVar("sv_alltalk");
    }
    public 
    Action:Event_OnPlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
    {
        if (!
    binmin)
        {
            
    checks();
        }
        return 
    Plugin_Continue;
    }
    public 
    Event_OnRoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
    {
        if (!
    binmin)
        {
            
    SetConVarBool(h_Cvar_Alltalktrue);
            
    PrintToChatAll("Конец");
        }
        
    binmin false;
    }
    public 
    OnClientDisconnect(client)
    {
        if (!
    binmin)
        {
            
    checks();
        }
    }
    stock checks()
    {
        new 
    iplayer 0iteamt 0iteamct 0;
        for (new 
    1<= MaxClients; ++i)
        {
            if (
    IsClientInGame(i))
            {
                
    iplayer++;
                if (
    IsPlayerAlive(i))
                {
                    if (
    GetClientTeam(i) == 2)
                    {
                        
    iteamt++;
                    }
                    else if (
    GetClientTeam(i) == 3)
                    {
                        
    iteamct++;
                    }
                }
            }
        }
        if (
    iplayer imaximum)
        {
            if (
    iteamt <= ilife || iteamct <= ilife)
            {
                
    SetConVarBool(h_Cvar_Alltalkfalse);
                
    PrintToChatAll("Talk = 0");
            }
        }
        else
        {
            
    binmin true;
        }
    }
     
    Последнее редактирование: 16 июн 2015
    Lominad нравится это.
  10. Lominad

    Lominad

    Сообщения:
    135
    Симпатии:
    27
    DarklSide, поставил, работает без ошибок, но ничего не делает. На момент проверки на сервере 19 человек
    При изменении sv_alltalk, в чате это отобразится?
     
  11. DarklSide

    DarklSide

    Сообщения:
    679
    Симпатии:
    170
    Нет

    замени
    PHP:
    iplayer <= imaximum

    на
    PHP:
    iplayer imaximum
     
    Lominad нравится это.
  12. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.978
    PHP:
    public OnPluginStart()
    {
        
    HookEvent("player_death"Event_OnPlayerDeathEventHookMode_PostNoCopy);
        
    HookEvent("round_start"Event_OnRoundEndEventHookMode_PostNoCopy);
        
    h_Cvar_Alltalk FindConVar("sv_alltalk");
        new 
    iFlags GetConVarFlags(h_Cvar_Alltalk)
        if(!(
    iFlags FCVAR_NOTIFY))
        {
            
    iFlags |= FCVAR_NOTIFY
            SetConVarFlags
    (h_Cvar_AlltalkiFlags);
        }
    }
    Так должно уведомлять в чат

    up
     
    Последнее редактирование: 12 июн 2015
  13. Lominad

    Lominad

    Сообщения:
    135
    Симпатии:
    27
    DarklSide, Все работает, спасибо.

    R1KO, "hndl" как неизвестная

    Добавлено через 6 минут
    DarklSide, А можно ли сделать, чтобы sv_alltalk 1 вкл сразу после смерти последнего игрока проигравшей команды, а не в сл. раунде после победы?
     
    Последнее редактирование: 12 июн 2015
  14. DarklSide

    DarklSide

    Сообщения:
    679
    Симпатии:
    170
    Lominad нравится это.
  15. Lominad

    Lominad

    Сообщения:
    135
    Симпатии:
    27
    R1KO, уведомление не работает)
    PrintTochat можете сделать? Чтобы свое вписать
     
  16. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.978
    Lominad нравится это.
  17. DarklSide

    DarklSide

    Сообщения:
    679
    Симпатии:
    170
    SetConVarBool, его 4-ый параметр - для его англ. уведомления.

    После каждого (2) SetConVarBool ->
    PrintToChatAll("Здесь что-то там");
     
    Lominad нравится это.
  18. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.978
    Оффтоп
     
  19. Lominad

    Lominad

    Сообщения:
    135
    Симпатии:
    27
    Грасиас ребят =)

    Добавлено через 49 минут
    DarklSide, cvar не возвращается после взрыва,обезвреживания бомбы(
     
    Последнее редактирование: 12 июн 2015
  20. DarklSide

    DarklSide

    Сообщения:
    679
    Симпатии:
    170
    Добавил (bool:binmin = false), чтобы не считал когда игроков < 10.
    А если if(binmin == true) //в конце раунда -> то по логике cvar и не изменился.
     
    Lominad нравится это.