Система подтверждения SteamID

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

  1. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Описание:
    Плагин проверяет наличие Steam ID игрока в базе MySQL\SQLite при подключении к серверу.
    Если данный идентификатор найден, происходит его активация\подтверждение. Возможно ограничение по времени в unix формате.

    Возможно, пригодится кому либо для регистрации игроков в каких-нибудь ивентах или розыгрышах.

    Требования:
    SourceMod 1.4.0+
    MySQL\SQLite БД

    Список изменений:
    28.07.12 - v0.0.1 - Первая версия
    07.08.12 - v0.0.2 - Добавлен конфиг файл
    25.08.12 - v0.0.3 - Мелкая корректировка кода
    30.11.12 - v0.0.3 - Мелкая корректировка кода #2

    Настройка:
    Настроить подключение БД (databases.cfg)
    Код:
    "RegSys"
     {
      "driver"   "Тип" //sqlite или mysql
      "host"    "Адрес"
      "database"   "Имя БД"
      "user"    "Логин"
      "pass"    "Пароль"
      //"timeout"   "0"
      //"port"   "3306"
     }

    sm_rs_tb - Имя таблицы
    sm_rs_tb_steamid - Имя колонки со Steam ID
    sm_rs_tb_active - Имя колонки с индикатором активации (1\0)
    sm_rs_tb_te - Имя колонки с временем активации, до скольки
    sm_rs_tb_ta - Имя колонки с временем активации, во сколько

    Код плагина:
    PHP:
    /* -------------------------------------------------------------------------------------
    *    _____             _____ 
    * |  __ \           / ____|
    * | |__) |___  __ _| (___  _   _ ___ 
    * |  _  // _ \/ _` |\___ \| | | / __|  Система регистрации\подтверждения Steam ID
    * | | \ \  __/ (_| |____) | |_| \__ \    (Registration System \ Steam ID confirmation)
    * |_|  \_\___|\__, |_____/ \__, |___/
    *       __/ |        __/ |   
    *    |___/        |___/ 
    * --------------------------------------------------------------------------------------
    * --Change list-------------------------------------------------------------------------
    * - 28.07.12 - v0.0.1 - Первая версия
    * - 07.08.12 - v0.0.2 - Добавлен конфиг файл
    * - 25.08.12 - v0.0.3 - Мелкая корректировка кода
    * - 30.11.12 - v0.0.3 - Мелкая корректировка кода #2
    * --------------------------------------------------------------------------------------
    * --Requirements------------------------------------------------------------------------
    * - SourceMod 1.4.0+
    * - MySQL\SQLite database
    * --------------------------------------------------------------------------------------
    */
    #pragma semicolon 1
     
    #include <sourcemod>
     
    #define PLUGIN_VERSION  "0.0.3"
    #define PHRASES    "translations/RegSys.phrases.txt"
    #define TIME    3.0
    #define DEBUG
     
    // --MySQL-------------------------------------------------------------------------------
    new String:MySQL_SelectTables[] = "SELECT %s, %s FROM %s WHERE %s REGEXP '^STEAM_[0-9]:%s$';";
    new 
    String:MySQL_UpdateTables[] = "UPDATE %s SET %s = '1', %s = '%d' WHERE %s REGEXP '^STEAM_[0-9]:%s$';";
    // --SQLite------------------------------------------------------------------------------
    new String:SQLite_SelectTables[] = "SELECT %s, %s FROM %s WHERE %s = '%s';";
    new 
    String:SQLite_UpdateTables[] = "UPDATE %s SET %s = '1', %s = '%d' WHERE %s = '%s';";
    // --------------------------------------------------------------------------------------
     
    new String:szDatabase[64],
     
    String:szTimeEnd[64],
     
    String:szActive[64],
     
    String:szSteamID[64],
     
    String:szTimeActive[64];
     
    new 
    Handle:ClientRecheck[MAXPLAYERS+1];
     
    new 
    Handle:db      INVALID_HANDLE;
     
    new 
    Handle:sm_rs_tb    INVALID_HANDLE;
    new 
    Handle:sm_rs_tb_steamid  INVALID_HANDLE;
    new 
    Handle:sm_rs_tb_active  INVALID_HANDLE;
    new 
    Handle:sm_rs_tb_te    INVALID_HANDLE;
    new 
    Handle:sm_rs_tb_ta    INVALID_HANDLE;
     
    public 
    Plugin:myinfo 
    {
     
    name "RegSys",
     
    author "duxa",
     
    description "Registration System",
     
    version PLUGIN_VERSION,
     
    url ""
    }
     
    public 
    OnPluginStart()

     
    decl String:szPath[PLATFORM_MAX_PATH];
     
     
    BuildPath(Path_SMszPathsizeof(szPath), "%s"PHRASES);
     if(!
    FileExists(szPath)) 
     {
      
    PrintToServer("[RegSys] Cannot find the translations for \"RegSys\"");
      
    LogError("[RegSys] Cannot find the translations for \"RegSys\"");
      return;
     }
     
    LoadTranslations("RegSys.phrases");
     
     
    CreateConVar("sm_rs_version"PLUGIN_VERSION_FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_DONTRECORD|FCVAR_NOTIFY);
     
     
    sm_rs_tb    CreateConVar("sm_rs_tb",   "reg_data",  "The name table");
     
    sm_rs_tb_steamid  CreateConVar("sm_rs_tb_steamid",  "STEAM_ID",  "The name table with STEAM_ID");
     
    sm_rs_tb_active  CreateConVar("sm_rs_tb_active",  "active",   "The name table with the state of activation");
     
    sm_rs_tb_te    CreateConVar("sm_rs_tb_te",  "time_end",  "The name table with end time");
     
    sm_rs_tb_ta    CreateConVar("sm_rs_tb_ta",  "time_active",  "The name table for activation time");
      
     
    HookConVarChange(sm_rs_tb,    OnSettingChanged);
     
    HookConVarChange(sm_rs_tb_steamid,  OnSettingChanged);
     
    HookConVarChange(sm_rs_tb_activeOnSettingChanged);
     
    HookConVarChange(sm_rs_tb_te,   OnSettingChanged);
     
    HookConVarChange(sm_rs_tb_ta,   OnSettingChanged);
      
     
    AutoExecConfig(true"RegSys");
    }
     
    public 
    OnConfigsExecuted()
    {
     if(!
    SQL_CheckConfig("RegSys"))
     {
      
    PrintToServer("[RegSys] Database failure: Could not find Database conf \"RegSys\"");
      
    LogError("[RegSys] Database failure: Could not find Database conf \"RegSys\"");
      return;
     }
     
     
    GetConVarString(sm_rs_tb,      szDatabase,  sizeof(szDatabase));
     
    GetConVarString(sm_rs_tb_te,    szTimeEnd,  sizeof(szTimeEnd));
     
    GetConVarString(sm_rs_tb_active,  szActive,  sizeof(szActive));
     
    GetConVarString(sm_rs_tb_steamidszSteamIDsizeof(szSteamID));
     
    GetConVarString(sm_rs_tb_ta,   szTimeActivesizeof(szTimeActive));
     
     
    #if defined DEBUG
     
    PrintToServer("OnConfigsExecuted: TB = %s, TE = %s, A = %s, S = %s, TA = %s"szDatabaseszTimeEndszActiveszSteamIDszTimeActive);
     
    #endif
     
     
    SQL_TConnect(GotDatabase"RegSys");
    }
     
    public 
    OnSettingChanged(Handle:convar, const String:oldValue[], const String:newValue[])
    {
     if(
    convar == sm_rs_tb
     {
      if(!
    StrEqual(oldValuenewValue))
      {
       
    GetConVarString(convarszDatabasesizeof(szDatabase));
      }
     } else
     
     if(
    convar == sm_rs_tb_te
     {
      if(!
    StrEqual(oldValuenewValue))
      {
       
    GetConVarString(convarszTimeEndsizeof(szTimeEnd));
      }
     } else
     
     if(
    convar == sm_rs_tb_active
     {
      if(!
    StrEqual(oldValuenewValue))
      {
       
    GetConVarString(convarszActivesizeof(szActive));
      }
     } else
     
     if(
    convar == sm_rs_tb_steamid
     {
      if(!
    StrEqual(oldValuenewValue))
      {
       
    GetConVarString(convarszSteamIDsizeof(szSteamID));
      }
     } else
     
     if(
    convar == sm_rs_tb_ta
     {
      if(!
    StrEqual(oldValuenewValue))
      {
       
    GetConVarString(convarszTimeActivesizeof(szTimeActive));
      }
     }
     
     
    #if defined DEBUG
     
    PrintToServer("OnSettingChanged: TB = %s, TE = %s, A = %s, S = %s, TA = %s"szDatabaseszTimeEndszActiveszSteamIDszTimeActive);
     
    #endif
    }
     
    public 
    GotDatabase(Handle:ownerHandle:hndl, const String:error[], any:data)
    {
     if(
    hndl == INVALID_HANDLE)
     {
      
    PrintToServer("[RegSys] Unable to connect to database");
      
    LogError("[RegSys] Unable to connect to database (%s)"error);
      return;
     }
     
    db hndl;
    }
     
    public 
    OnClientAuthorized(client, const String:auth[])
    {
     if(
    auth[0] == 'B' || auth[9] == 'L' || IsFakeClient(client) || db == INVALID_HANDLE) return;
     
     
    decl String:szQuery[256];
     
     new 
    String:szIdent[16];
     
     
    SQL_ReadDriver(dbszIdentsizeof(szIdent));
      
     if(
    strcmp(szIdent"mysql") == 0)
     {
      
    Format(szQuerysizeof(szQuery), MySQL_SelectTablesszTimeEndszActiveszDatabaseszSteamIDauth[8]);
     } else
     if(
    strcmp(szIdent"sqlite") == 0)
     {
      
    Format(szQuerysizeof(szQuery), SQLite_SelectTablesszTimeEndszActiveszDatabaseszSteamIDauth);
     } else
     {
      
    PrintToServer("[RegSys] Unknown driver type.");
      
    LogError("[RegSys] Unknown driver type.");
      return;
     }
     
    #if defined DEBUG
     
    PrintToServer("OnClientAuthorized(%d): %s"clientszQuery);
     
    #endif
     
    SQL_TQuery(dbT_CheckszQueryclient);
    }
     
    public 
    OnClientDisconnect_Post(client)
    {
     if(
    ClientRecheck[client] != INVALID_HANDLE)
     {
      
    CloseHandle(ClientRecheck[client]);
      
    ClientRecheck[client] = INVALID_HANDLE;
     }
    }
     
    public 
    Action:Recheck(Handle:timerany:client)
    {
     
    decl String:szClientSteamID[21];
      
     
    GetClientAuthString(clientszClientSteamIDsizeof(szClientSteamID));
     
    OnClientAuthorized(clientszClientSteamID);
    }
     
    public 
    T_Check(Handle:ownerHandle:hndl, const String:error[], any:client)
    {
     if(
    hndl == INVALID_HANDLE)
     {
      
    #if defined DEBUG
      
    PrintToServer("T_Check(%d): %s"clienterror);
      
    #endif
      
    KickClient(client"%t""Error Miss");
      return;
     }
     
     if(
    SQL_FetchRow(hndl))
     {
      new 
    time_end,
       
    active;
     
      
    time_end SQL_FetchInt(hndl0);
      
    active   SQL_FetchInt(hndl1);
     
      if(
    active == 1)
      {
       
    KickClient(client"%t""Already Confirmed");
       return;
      }
     
      if(
    time_end GetTime())
      {
       
    decl String:szQuery[256];
       
    decl String:szClientSteamID[21];
     
       new 
    String:szIdent[16];
     
       
    GetClientAuthString(clientszClientSteamIDsizeof(szClientSteamID));
       
    SQL_ReadDriver(dbszIdentsizeof(szIdent));
     
       if(
    strcmp(szIdent"mysql") == 0)
       {
        
    Format(szQuery255MySQL_UpdateTablesszDatabaseszActiveszTimeActiveGetTime(), szSteamIDszClientSteamID[8]);
       } else
       if(
    strcmp(szIdent"sqlite") == 0)
       {
        
    Format(szQuery255SQLite_UpdateTablesszDatabaseszActiveszTimeActiveGetTime(), szSteamIDszClientSteamID);
       } else
       {
        
    PrintToServer("[RegSys] Unknown driver type.");
        
    LogError("[RegSys] Unknown driver type.");
        return;
       }
       
    #if defined DEBUG
       
    PrintToServer("T_Check(%d): %s"clientszQuery);
       
    #endif
       
    SQL_TQuery(dbSQL_CheckCallbackszQueryclient);
      } else
      {
       
    KickClient(client"%t""Error Time");
       return;
      }
     } else
     {
      
    KickClient(client"%t""Error Miss");
      return;
     }
    }
     
    public 
    SQL_CheckCallback(Handle:ownerHandle:hndl, const String:error[], any:client)
    {
     if(
    hndl == INVALID_HANDLE)
     {
      
    ClientRecheck[client] = CreateTimer(TIMERecheckclient);
      return;
     }
     
     
    #if defined DEBUG
     
    decl String:szClientSteamID[21];
     
     
    GetClientAuthString(clientszClientSteamIDsizeof(szClientSteamID));
     
    PrintToServer("SQL_CheckCallback(%d): '%s' was confirmed"clientszClientSteamID);
     
    #endif
     
    KickClient(client"%t""Confirm");
    }

    Содержание RegSys.phrases.txt
    Код:
    "Phrases"
    {
     "Already Confirmed"
     {
      "en"   "Your STEAM_ID been confirmed"
      "ru"   "Ваш STEAM_ID уже подтвержден"
     }
      
     "Error Time"
     {
      "en"   "Time to confirm STEAM_ID expired"
      "ru"   "Время для подтверждения STEAM_ID истекло"
     }
      
     "Error Miss"
     {
      "en"   "This STEAM_ID in the database can not be found"
      "ru"   "Данный STEAM_ID в базе не найден"
     }
      
     "Confirm"
     {
      "en"   "Your STEAM_ID successfully confirmed"
      "ru"   "Ваш STEAM_ID успешно подтвержден"
     }
    }

    Оригинал

    P.S Плагин спокойно компилируется через компилятор.
     

    Вложения:

    • RegSys.rar
      Размер файла:
      8,9 КБ
      Просмотров:
      15
    Последнее редактирование: 23 июн 2014
    ★Сириус★ нравится это.
  2. R1KO

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

    Сообщения:
    5.994
    Симпатии:
    2.990
    Hejter, закинул бы в sp, скомпилировал и выложил бы файлами.
     
  3. artushonok

    artushonok

    Сообщения:
    962
    Симпатии:
    108
    R1KO,
     

    Вложения:

    • RegSys.sp
      Размер файла:
      9,1 КБ
      Просмотров:
      10
    • RegSys.smx
      Размер файла:
      6,2 КБ
      Просмотров:
      0
    R1KO нравится это.