Глобальная переменная или функция

Тема в разделе "Программирование / Скриптинг", создана пользователем sith999, 9 июн 2015.

  1. sith999

    sith999

    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте уважаемые форумчани.
    Мне требуется помощь в объявлении глобальной переменной или функции.
    Суть такова.
    Сделал плагин авторизации из бд. В данном плагине есть переменная,которая объявлена перед всеми функциями
    PHP:
    /* Plugin Template generated by Pawn Studio */

    #include <sourcemod>

    new Bool:IsClientLogin[MAXPLAYERS//Переменная для проверки авторизации
    new IsClientTryL[MAXPLAYERS]

    public 
    OnClientConnectd(client)
    {
        
    IsClientLogin[client] = false;
        
    IsClientTryL[client] = 0;
    }
    Теперь мне нужно сделать ее доступной для остальных плагинов. В них будет проверка на 'IsClientLogin'
    Я нашел,при поиске, что это можно сделать через NameFile.inc.И через 'Консольные переменные'.Но это не то,наверное.
    NameFile.inc - я не понял как через это можно сделать,если там все стоковое(т.е. менять нельзя).
    'Консольные переменные' - Это вариант к которому я склоняюсь.
    Но хотел бы узнать у вас как можно это реализовать.
    У меня есть вариант через public функцию сделать
    PHP:
    public GetIsClientLogin(client)
    {
        return 
    IsClientLogin[client];
    }
    Но как подключить этот плагин к другим.
    Вообщем жду ваших советов.
     
  2. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.977
    sith999, https://wiki.alliedmods.net/Creating_Natives_(SourceMod_Scripting)

    PHP:
    public APLRes:AskPluginLoad2(Handle:myselfbool:lateString:error[], err_max)
    {
        
    CreateNative("IsClientLogin"Native_IsClientLogin);
        return 
    APLRes_Success;
    }

    public 
    Native_IsClientLogin(Handle:pluginnumParams)
    {
        new 
    iClient GetNativeCell(1);
        if(
    iClient <= MaxClients && IsClientInGame(iClient))
        {
            return 
    IsClientLogin[iClient];
        }

        
    ThrowNativeError(SP_ERROR_NATIVE"Invalid client index (%i)"iClient);
        return 
    false;
    }
    inc файл

    PHP:
    native bool:IsClientLogin(iClient);
     
    sith999 и Серый™ нравится это.
  3. sith999

    sith999

    Сообщения:
    2
    Симпатии:
    0
    R1KO, Что-то нифига не понял."Курил вики,курил видео урок на youtube".Может я не понял,а может и вы не поняли,что мне нужно.
    Мне нужно хранить значение переменной пока включен сервер. То есть игрок заходит на сервер.В консоле пишет команду "login nickname password". После этого отправляются запросы в бд. Если такой пользователь найден и пароль совпадает,то значение переменной "IsClientLogin[client] = true", если не найден, то соответственно "IsClientLogin[client] = false". После этого при использовании команды из другого плагина, там должна быть проверка на эту переменную. Если true, то выполняется. Вопрос как раз таки и заключается в передаче это переменной со значением.
    Сам плагин реализован, но как переменную передать я не знаю.
     
  4. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.977
    sith999, в плагине, который получает данные из бд и хранит переменную:
    PHP:
    new bool:g_bIsClientLogin[MAXPLAYERS+1]; // твоя переменная

    /*
    Тут получаешь из бд и устанавливаешь значения
    */

    public APLRes:AskPluginLoad2(Handle:myselfbool:lateString:error[], err_max)
    {
        
    CreateNative("IsClientLogin"Native_IsClientLogin); // регистрирует глобальную ф-ю

        
    return APLRes_Success;
    }

    public 
    Native_IsClientLogin(Handle:pluginnumParams// Обрабатываем её при вызове
    {
    /*
    Ф-я будет иметь вид bool:IsClientLogin(iClient);
    */
        
    new iClient GetNativeCell(1); // получаем 1-й агрумент в ф-и (у нас всего 1)
        
    if(iClient <= MaxClients && IsClientInGame(iClient)) // проверяем валиден ли игрок
        
    {
            return 
    g_bIsClientLogin[iClient]; // Возвращаем значение твоей переменной
        
    }

        
    ThrowNativeError(SP_ERROR_NATIVE"Invalid client index (%i)"iClient);
        return 
    false;
    }
    в inc файл пишем

    PHP:
    native bool:IsClientLogin(iClient);
    Назовем его my_plug.inc

    В другом плагине пишем

    PHP:
    #include <my_plug> // подключам твой inc


    // Далее просто в нужный момент проверяем:
    if(IsClientLogin(iClient))
    {
        
    // ...
    }
    Ф-я IsClientLogin(iClient) будет возвращать значение твоей переменной в любом плагине
     
    Крабос и sith999 нравится это.