The Night Fury

Участник
Сообщения
1,300
Реакции
1,395
Я прекрасно понимаю, что часто названия плагинов можно очень просто забыть. Однако это становится причиной постоянного создания тем рода "помогите найти плагин X".

Так вот, чтобы содержать форум в порядке и чистоте, поступим следующим образом:
  1. В дальнейшем создаваемые темы с "помогите найти плагин" будут удаляться, а авторам — выдаваться предупреждения
  2. Если Вы захотите найти плагин, то сначала воспользуйтесь поиском

Если всё же не удалось найти плагин, заполните следующую форму и ответьте в этой теме:

  • Функции плагина
  • Мод/Игра, которая использует этот плагин

Прежде чем отвечать в теме, воспользуйтесь поиском гугла, который почти всегда находит нужное.

Старые темы будут перемещены в корзину.
 
Последнее редактирование модератором:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@e333, кого он будет просить?
Это серверная переменная
Может лучше сделать, чтобы при изменении значения этого квара на "1" плагин автоматически его менял на "0"?
 

e333

Участник
Сообщения
7
Реакции
1
@e333, кого он будет просить?
Это серверная переменная
Может лучше сделать, чтобы при изменении значения этого квара на "1" плагин автоматически его менял на "0"?
Возможно ошибась но помню заходил на сервер и там было мол смените sv_allowupload 0 на
sv_allowupload 1.
 

e333

Участник
Сообщения
7
Реакции
1
@e333, кого он будет просить?
Это серверная переменная
Может лучше сделать, чтобы при изменении значения этого квара на "1" плагин автоматически его менял на "0"?
Скорей всего ты видел "cl_allowdownload".
Да вот ее видел точно спасибо что напомнили я просто напрочь не мог вспомнить.Спасибо всем)
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@e333, можно так сделать:
PHP:
#pragma semicolon 1
#pragma newdecls required

bool bLate, bVarOff[MAXPLAYERS+1];
Handle hTimer[MAXPLAYERS+1];

public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
    bLate = late;
    return APLRes_Success;
}

public void OnPluginStart()
{
    if(bLate)
    {
        for(int i = 1; i <= MaxClients; i++)
        {
            if(IsClientAuthorized(i)) OnClientPostAdminCheck(i);
        }
        bLate = false;
    }
}

public void OnClientPostAdminCheck(int client)
{
    if(!IsFakeClient(client)) hTimer[client] = CreateTimer(20.0, Timer_Check, GetClientSerial(client), TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public void OnClientDisconnect(int client)
{
    KillTimer(hTimer[client]);
}

public Action Timer_Check(Handle timer, any serial)
{
    static int client;
    if(!(0 < (client = GetClientFromSerial(serial) <= MaxClients))) return Plugin_Stop;
    CheckVarValue(client);

    return Plugin_Continue;
}

void CheckVarValue(int client)
{
    if (0 < client <= MaxClients)
    {
        QueryClientConVar(client, "cl_allowdownload", CheckVar);
        if(bVarOff[client]) PrintToChat(client, "Please change value of the variable 'cl_allowdownload' to '0'");
    }
}

public void CheckVar(QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvarName, const char[] cvarValue)
{
    if(result != ConVarQuery_Okay) bVarOff[client] = true;
    else bVarOff[client] = (StringToInt(cvarValue) == 1);
}
будет каждые 20 секунд проверять значение этого квара
 
  • Мне нравится
Реакции: e333

Mensi1337

Участник
Сообщения
242
Реакции
16
@e333, можно так сделать:
PHP:
#pragma semicolon 1
#pragma newdecls required

bool bLate, bVarOff[MAXPLAYERS+1];
Handle hTimer[MAXPLAYERS+1];

public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
    bLate = late;
    return APLRes_Success;
}

public void OnPluginStart()
{
    if(bLate)
    {
        for(int i = 1; i <= MaxClients; i++)
        {
            if(IsClientAuthorized(i)) OnClientPostAdminCheck(i);
        }
        bLate = false;
    }
}

public void OnClientPostAdminCheck(int client)
{
    if(!IsFakeClient(client)) hTimer[client] = CreateTimer(20.0, Timer_Check, GetClientSerial(client), TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public void OnClientDisconnect(int client)
{
    KillTimer(hTimer[client]);
}

public Action Timer_Check(Handle timer, any serial)
{
    static int client;
    if(!(0 < (client = GetClientFromSerial(serial) <= MaxClients))) return Plugin_Stop;
    CheckVarValue(client);

    return Plugin_Continue;
}

void CheckVarValue(int client)
{
    if (0 < client <= MaxClients)
    {
        QueryClientConVar(client, "cl_allowdownload", CheckVar);
        if(bVarOff[client]) PrintToChat(client, "Please change value of the variable 'cl_allowdownload' to '0'");
    }
}

public void CheckVar(QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvarName, const char[] cvarValue)
{
    if(result != ConVarQuery_Okay) bVarOff[client] = true;
    else bVarOff[client] = (StringToInt(cvarValue) == 1);
}
будет каждые 20 секунд проверять значение этого квара
Можешь написать код что бы например когда заходишь на сервер кикала с сервера если переменная 1 и в окошки писало "Смените переменную на cl_minmodels 0" ?
 
A

...aDDidas...

@e333, можно так сделать:
PHP:
#pragma semicolon 1
#pragma newdecls required

bool bLate, bVarOff[MAXPLAYERS+1];
Handle hTimer[MAXPLAYERS+1];

public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
    bLate = late;
    return APLRes_Success;
}

public void OnPluginStart()
{
    if(bLate)
    {
        for(int i = 1; i <= MaxClients; i++)
        {
            if(IsClientAuthorized(i)) OnClientPostAdminCheck(i);
        }
        bLate = false;
    }
}

public void OnClientPostAdminCheck(int client)
{
    if(!IsFakeClient(client)) hTimer[client] = CreateTimer(20.0, Timer_Check, GetClientSerial(client), TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public void OnClientDisconnect(int client)
{
    KillTimer(hTimer[client]);
}

public Action Timer_Check(Handle timer, any serial)
{
    static int client;
    if(!(0 < (client = GetClientFromSerial(serial) <= MaxClients))) return Plugin_Stop;
    CheckVarValue(client);

    return Plugin_Continue;
}

void CheckVarValue(int client)
{
    if (0 < client <= MaxClients)
    {
        QueryClientConVar(client, "cl_allowdownload", CheckVar);
        if(bVarOff[client]) PrintToChat(client, "Please change value of the variable 'cl_allowdownload' to '0'");
    }
}

public void CheckVar(QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvarName, const char[] cvarValue)
{
    if(result != ConVarQuery_Okay) bVarOff[client] = true;
    else bVarOff[client] = (StringToInt(cvarValue) == 1);
}
будет каждые 20 секунд проверять значение этого квара
Для css v34 пойдет?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Grey83, не будет работать.
QueryClientConVar() отправляет запрос как минимум в следующем тике, и ответ получает тоже не сразу. Т.е. во время, когда функция уже завершилась. Оставьте проверки включенности переменной на каллбек.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@...aDDidas..., ну если у тебя SM1.7+, то скомпилироваться должно, вроде бы
А так надо будет на старый синтаксис переводить.

@Kruzya, ничего не понял из сказанного
У меня таким же образом работала проверка квара cl_disablehtmlmotd, правда он проверялся при вызове команды, а не таймером.
Всё работало, кстати.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Grey83, у меня не работало сразу на двух играх. Немного посидев с PrintToServer(), выяснил, что на OB конвара приходит позже, чем заканчивается выполнение функции. Потому для надёжности проверять значение и делать действия имеет смысл только в каллбеке.

Kruzya/Radio
 

Mensi1337

Участник
Сообщения
242
Реакции
16
Можете убрать вторую причину кика?

PHP:
#include <regex>

new String:sInfoVar[32];

public OnPluginStart()
{
    if (!GetPassInfoVar(sInfoVar, sizeof(sInfoVar)))
    {
        SetFailState("PassInfoVar не найден в файле core.cfg");
    }
}

public Action:OnClientPreAdminCheck(client)
{
    if (client > 0)
    {
        decl String:sBuff[64], String:sPassword[64];
        GetClientAuthId(client, AuthId_Engine, sBuff, sizeof(sBuff));
        new AdminId:admin = FindAdminByIdentity(AUTHMETHOD_STEAM, sBuff);
        if (admin != INVALID_ADMIN_ID)
        {
            if (GetAdminPassword(admin, sPassword, sizeof(sPassword)))
            {
                if(GetClientInfo(client, sInfoVar, sBuff, sizeof(sBuff)) && sBuff[0] != 0)
                {
                    if (!StrEqual(sPassword, sBuff))
                    {
                        KickClient(client, "Введите пароль в консоль setinfo _pw 'ПАРОЛЬ'", sInfoVar);
                    }
                }
                else
                {
                    KickClient(client, "Вы ввели не верный пароль", sInfoVar);
                }
            }
        }
    }
}

bool:GetPassInfoVar(String:value[], maxlength)
{
    new Handle:file = OpenFile("addons/sourcemod/configs/core.cfg", "rt");
    if (file != INVALID_HANDLE)
    {
        new Handle:re = CompileRegex("^\\s+\"PassInfoVar\"\\s+\"(\\w+)\""); // ([^\"]*)
        if (re != INVALID_HANDLE)
        {
            decl String:buffer[PLATFORM_MAX_PATH];
            while (!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer)))
            {
                if (MatchRegex(re, buffer) > 0 && GetRegexSubString(re, 1, value, maxlength))
                {
                    CloseHandle(re);
                    CloseHandle(file);
                    return true;
                }
            }
            CloseHandle(re);
        }
        CloseHandle(file);
    }
    return false;
}
 

Rostu

Добрая душа
Сообщения
986
Реакции
622
@Seton1447, Если я правильно понял тебя то так


PHP:
#include <regex>

new String:sInfoVar[32];

public OnPluginStart()
{
    if (!GetPassInfoVar(sInfoVar, sizeof(sInfoVar)))
    {
        SetFailState("PassInfoVar не найден в файле core.cfg");
    }
}

public Action:OnClientPreAdminCheck(client)
{
    if (client > 0)
    {
        decl String:sBuff[64], String:sPassword[64];
        GetClientAuthId(client, AuthId_Engine, sBuff, sizeof(sBuff));
        new AdminId:admin = FindAdminByIdentity(AUTHMETHOD_STEAM, sBuff);
        if (admin != INVALID_ADMIN_ID)
        {
            if (GetAdminPassword(admin, sPassword, sizeof(sPassword)))
            {
                if(GetClientInfo(client, sInfoVar, sBuff, sizeof(sBuff)) && sBuff[0] != 0)
                {
                    if (!StrEqual(sPassword, sBuff))
                    {
                        KickClient(client, "Введите пароль в консоль setinfo _pw 'ПАРОЛЬ'", sInfoVar);
                    }
                }
            }
        }
    }
}

bool:GetPassInfoVar(String:value[], maxlength)
{
    new Handle:file = OpenFile("addons/sourcemod/configs/core.cfg", "rt");
    if (file != INVALID_HANDLE)
    {
        new Handle:re = CompileRegex("^\\s+\"PassInfoVar\"\\s+\"(\\w+)\""); // ([^\"]*)
        if (re != INVALID_HANDLE)
        {
            decl String:buffer[PLATFORM_MAX_PATH];
            while (!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer)))
            {
                if (MatchRegex(re, buffer) > 0 && GetRegexSubString(re, 1, value, maxlength))
                {
                    CloseHandle(re);
                    CloseHandle(file);
                    return true;
                }
            }
            CloseHandle(re);
        }
        CloseHandle(file);
    }
    return false;
}
 

Mensi1337

Участник
Сообщения
242
Реакции
16
@Seton1447, Если я правильно понял тебя то так


PHP:
#include <regex>

new String:sInfoVar[32];

public OnPluginStart()
{
    if (!GetPassInfoVar(sInfoVar, sizeof(sInfoVar)))
    {
        SetFailState("PassInfoVar не найден в файле core.cfg");
    }
}

public Action:OnClientPreAdminCheck(client)
{
    if (client > 0)
    {
        decl String:sBuff[64], String:sPassword[64];
        GetClientAuthId(client, AuthId_Engine, sBuff, sizeof(sBuff));
        new AdminId:admin = FindAdminByIdentity(AUTHMETHOD_STEAM, sBuff);
        if (admin != INVALID_ADMIN_ID)
        {
            if (GetAdminPassword(admin, sPassword, sizeof(sPassword)))
            {
                if(GetClientInfo(client, sInfoVar, sBuff, sizeof(sBuff)) && sBuff[0] != 0)
                {
                    if (!StrEqual(sPassword, sBuff))
                    {
                        KickClient(client, "Введите пароль в консоль setinfo _pw 'ПАРОЛЬ'", sInfoVar);
                    }
                }
            }
        }
    }
}

bool:GetPassInfoVar(String:value[], maxlength)
{
    new Handle:file = OpenFile("addons/sourcemod/configs/core.cfg", "rt");
    if (file != INVALID_HANDLE)
    {
        new Handle:re = CompileRegex("^\\s+\"PassInfoVar\"\\s+\"(\\w+)\""); // ([^\"]*)
        if (re != INVALID_HANDLE)
        {
            decl String:buffer[PLATFORM_MAX_PATH];
            while (!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer)))
            {
                if (MatchRegex(re, buffer) > 0 && GetRegexSubString(re, 1, value, maxlength))
                {
                    CloseHandle(re);
                    CloseHandle(file);
                    return true;
                }
            }
            CloseHandle(re);
        }
        CloseHandle(file);
    }
    return false;
}
Спасибо xD
 

xek

Рыба клоун
Сообщения
1,652
Реакции
636
Добрый день, ищю плагин для смены скайбокса по времени и по идеалу админкой. Оффтоп
 

NoVa41

Участник
Сообщения
61
Реакции
8
Не могу вспомнить как называется плагин на bhop сервер, который делает так чтоб плитки не прожимались.
Напомните пожалуйста.
 
Сверху Снизу