• Добро Пожаловать к нам на Форум Гость! Если вы еще не зарегистрировались просим вас зарегистрироваться!

  • Для того что бы скачивать с нашего форума, нужно зарегистрироватся!

  • Цены на серверах: Админка 35грн/мес Випка 20грн/мес.

  • Девушкам играющим на сервере Випка Бесплатно!

Vip & admin Система(sqlite), интересно

qpi3ik

Создатель
Команда форума
Гл.Администратор
Автор: daywer
Актуальная версия: 1.0

Привелегии активируются НЕ МЕНЯЯ карту.
Создает базу данных игроков VIP & ADMIN(как вам удобно) локальная база sqlite
Добавлены команды:
"vip_login_reg" //Регистрация нового VIP .формат "ник" "пароль" "флаги" "дата окончания" пример "Hell Machine" "qwerty123" "abc" "16.09.2020"
"vip_login" //Вход для игрока "ник" "пароль"
"vip_login_delete" //Удаление игрока "ник"
Доступ к Регистрации и удаление VIP_REG_ADMIN_FLAG
Функция для получения флага пример:if(VIP_Player_Has_Flag(id,"a"))client_print(0,print_chat,"Flag A")
Красивые Цветные сообщения в чат

Сейчас он просто выдает стандартные флаги ,но соотв можно реализовать проверку на доступ попросту с помошью VIP_Player_Has_Flag

Настройка
PHP:
szTableName - Название таблицы
szBDName - Название базы данных
REGISTER_COMMAND_VIP - Регистрация аккаунта
COMMAND_VIP - Вход в аккаунт
DEL_COMMAND_VIP - Удаление аккаунта
MIN_SIMBOL_NICKNAME - мин кол-во символов в нике
MIN_SIMBOL_PASSWORD - мин кол-во символов в пароле
VIP_REG_ADMIN_FLAG - Флаг для регистрации и удаления аккаунта
post-100073-1470566385.jpg post-100073-1470566393.jpg post-100073-1470566404.jpg post-100073-1470566414.jpg
PHP:
#include <amxmodx>
#include <sqlx>
#pragma tabsize 0
#define PLUGIN "Vip system"
new Handle:g_SqlTuple
new g_Error[512]
new const szTableName[] = "vip_player"
new const szBDName[] = "vip_player"
new g_szNamePlayer[33][64];
new g_szPassPlayer[33][64];
new g_szFlagsPlayer[33][24];
new g_szDataPlayer[33][24];
//Для регистрации VIP
new g_szNamePlayer_VIP[64];
new g_szPassPlayer_VIP[64];
new g_szFlagsPlayer_VIP[24];
new g_szDataPlayer_VIP[24];
//Удаление Записи
new g_szNamePlayer_DEL[64];
new bool:IsPlayerLogin[33];                     //Вошел ли игрок в VIP
#define REGISTER_COMMAND_VIP    "vip_login_reg"    //Регистрация нового VIP формат "ник" "пароль" "флаги" "дата окончания" пример "Hell Machine" "qwerty123" "abc" "16.09.2020"
#define COMMAND_VIP            "vip_login"       //Вход для игрока "ник" "пароль"
#define DEL_COMMAND_VIP         "vip_login_delete"    //Вход для игрока "ник" "пароль"
#define MIN_SIMBOL_NICKNAME   3                  //Мин кол-во символов в Нике
#define MIN_SIMBOL_PASSWORD   3                  //Мин кол-во символов в пароле
#define VIP_REG_ADMIN_FLAG ADMIN_RCON            //Флаг для регистрации VIP & удалении VIP
new g_Year,g_Month,g_Day                     //Текущее время(д,м,г)
public plugin_init()
{
    register_plugin(PLUGIN, "1.0", "daywer")
   SQL_SetAffinity( "sqlite" );
   register_clcmd(REGISTER_COMMAND_VIP,"VIP_Register"   )
   register_clcmd(COMMAND_VIP,       "VIP_Login"      )
   register_clcmd(DEL_COMMAND_VIP,    "VIP_Login_Del"   )
   set_task(1.0, "Sql_Init")
   register_clcmd("say /testvip","TestVip")
   Get_CurrTime()
}   
public TestVip(id)
{
   client_print(0,print_chat,"login %s pass %s flags %s data %s",g_szNamePlayer[id],g_szPassPlayer[id],g_szFlagsPlayer[id],g_szDataPlayer[i
d])
   if(VIP_Player_Has_Flag(id,"a"))client_print(0,print_chat,"Flag A")
}
//Удаление Записи
public VIP_Login_Del(id)
{
   if(!(get_user_flags(id) & VIP_REG_ADMIN_FLAG))
      return PLUGIN_HANDLED
      
   new szArg1[64];
   read_argv( 1, szArg1, 63 );
   new len1;
   formatex(g_szNamePlayer_DEL,63,"%s",szArg1)
   len1 = strlen(g_szNamePlayer_DEL)
   //Check Valid Pw
   if(len1 <= MIN_SIMBOL_NICKNAME)
   {
      
      ColoredPrint(id, "!t[VIP]!gМинимальное кол-во символов 3!");
      client_print(id, print_console,"[VIP]Минимальное кол-во символов 3!")
      return PLUGIN_HANDLED;
   }
   if(ChecSpecialSymbol(g_szNamePlayer_DEL))
   {
      ColoredPrint(id, "!t[VIP]!gНельзя использовать спец.символы");
      client_print(id, print_console, "[VIP]Нельзя использовать спец.символы")
      return PLUGIN_HANDLED;   
   }   
   Load_Sql_Delete(id)
   return PLUGIN_HANDLED;
}   
 
 
//Регистрация Аккаунта
public VIP_Register(id)
{
   if(!(get_user_flags(id) & VIP_REG_ADMIN_FLAG))
      return PLUGIN_HANDLED
      
   new szArg1[64], szArg2[64],szArg3[24],szArg4[24]
   read_argv( 1, szArg1, 63 );
   read_argv( 2, szArg2, 63 );
   read_argv( 3, szArg3, 23 );
   read_argv( 4, szArg4, 23 );
   new len1,len2,len3,len4;
   formatex(g_szNamePlayer_VIP,63,"%s",szArg1)
   formatex(g_szPassPlayer_VIP,63,"%s",szArg2)
   formatex(g_szFlagsPlayer_VIP,23,"%s",szArg3)
   formatex(g_szDataPlayer_VIP,23,"%s",szArg4)
   len1 = strlen(g_szNamePlayer_VIP)
   len2 = strlen(g_szPassPlayer_VIP)
   len3 = strlen(g_szFlagsPlayer_VIP)
   len4 = strlen(g_szDataPlayer_VIP)
   //Check Valid Pw
   if(len1 <= MIN_SIMBOL_NICKNAME || len2 <=MIN_SIMBOL_PASSWORD ||len3 <= 1 || len4 <=MIN_SIMBOL_PASSWORD )
   {
      
      ColoredPrint(id, "!t[VIP]!gМинимальное кол-во символов 3!");
      client_print(id, print_console,"[VIP]Минимальное кол-во символов 3!")
      return PLUGIN_HANDLED;
   }
   if(ChecSpecialSymbol(g_szNamePlayer_VIP) || ChecSpecialSymbol(g_szPassPlayer_VIP))
   {
      ColoredPrint(id, "!t[VIP]!gНельзя использовать спец.символы");
      client_print(id, print_console, "[VIP]Нельзя использовать спец.символы")
      return PLUGIN_HANDLED;   
   }   
   Load_Sql_Register(id)
   return PLUGIN_HANDLED;
}   
 
 
//Вход в VIP аккаунт
public VIP_Login(id)
{
   if(IsPlayerLogin[id])
   {
      ColoredPrint(id, "!t[VIP]!gВы уже вошли в акканут!");
      client_print(id, print_console, "[VIP]Вы уже вошли в акканут!")   
      return PLUGIN_HANDLED;
   }
   new szArg1[64], szArg2[64];
   read_argv( 1, szArg1, 63 );
   read_argv( 2, szArg2, 63 );
   new len1,len2;
   format(g_szNamePlayer[id],63,"%s",szArg1)
   format(g_szPassPlayer[id],63,"%s",szArg2)
   len1 = strlen(g_szNamePlayer[id])
   len2 = strlen(g_szPassPlayer[id])
    
   if(CheckUseLogin(id))
   {
      ColoredPrint(id, "!t[VIP]!gАккаунт уже используется!");
      client_print(id, print_console, "[VIP]Аккаунт уже используется!")
      return PLUGIN_HANDLED;
   }   
   //Check Valid Pw
   if(len1 <= MIN_SIMBOL_NICKNAME || len2 <=MIN_SIMBOL_PASSWORD)
   {
      
      ColoredPrint(id, "!t[VIP]!gМинимальное кол-во символов 3!");
      client_print(id, print_console,"[VIP]Минимальное кол-во символов 3!")
      return PLUGIN_HANDLED;
   }
   if(ChecSpecialSymbol(g_szNamePlayer[id]) || ChecSpecialSymbol(g_szPassPlayer[id]))
   {
      ColoredPrint(id, "!t[VIP]!gНельзя использовать спец.символы");
      client_print(id, print_console, "[VIP]Нельзя использовать спец.символы")
      return PLUGIN_HANDLED;   
   }   
   Load_Sql(id)
   return PLUGIN_HANDLED;
}   
//Sql
//Загрузка sqlite базы
public Sql_Init()
{
    g_SqlTuple = SQL_MakeDbTuple( "", "", "", szBDName );
    new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error))
    if(SqlConnection == Empty_Handle)
        set_fail_state(g_Error)
        
    new Handle:Queries
   new szSendQuery[350];
   format(szSendQuery,349,"CREATE TABLE IF NOT EXISTS %s (name varchar(63),password varchar(63),flags varchar(22),time varchar(22))",szTableName)
   Queries = SQL_PrepareQuery(SqlConnection,szSendQuery)
    if(!SQL_Execute(Queries))
    {
        // if there were any problems
        SQL_QueryError(Queries,g_Error,charsmax(g_Error))
        set_fail_state(g_Error)
        
    }
    SQL_FreeHandle(Queries)   
    SQL_FreeHandle(SqlConnection)   
}
public Load_Sql(id)
{
   new Data[1],szTemp[512];
    Data[0] = id 
    format(szTemp,charsmax(szTemp),"SELECT * FROM `%s` WHERE (`%s`.`name` = '%s')",szTableName,szTableName,g_szNamePlayer[id])
    SQL_ThreadQuery(g_SqlTuple,"register_client",szTemp,Data,1)
}
//Удаление записи
//Регистрация
public Load_Sql_Delete(id)
{
   new Data[1],szTemp[512];
    Data[0] = id 
    format(szTemp,charsmax(szTemp),"SELECT * FROM `%s` WHERE (`%s`.`name` = '%s')",szTableName,szTableName,g_szNamePlayer_DEL)
    SQL_ThreadQuery(g_SqlTuple,"register_client3",szTemp,Data,1)
}
//Регистрация
public Load_Sql_Register(id)
{
   new Data[1],szTemp[512];
    Data[0] = id 
    format(szTemp,charsmax(szTemp),"SELECT * FROM `%s` WHERE (`%s`.`name` = '%s')",szTableName,szTableName,g_szNamePlayer_VIP)
    SQL_ThreadQuery(g_SqlTuple,"register_client2",szTemp,Data,1)
}
//Вход в аккаунт
public register_client2(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    if(FailState == TQUERY_CONNECT_FAILED)
    {
        log_amx("Load - Could not connect to SQL database.  [%d] %s", Errcode, Error)
    }
    else if(FailState == TQUERY_QUERY_FAILED)
    {
        log_amx("Load Query failed. [%d] %s", Errcode, Error)
    }
    new id
    id = Data[0]   
    if(SQL_NumResults(Query) < 1)
    {     
      new szTemp[512]
        format(szTemp,charsmax(szTemp),"INSERT INTO `%s` ( `name` , `password`,`flags`,`time`)VALUES ('%s','%s','%s','%s');",
      szTableName,g_szNamePlayer_VIP,g_szPassPlayer_VIP,g_szFlagsPlayer_VIP,g_szDataPl
ayer_VIP)
        SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
      client_print(id, print_console, "[VIP]Аккаунт зарегистрирован!")
      new szMsgTxt[256];
      format(szMsgTxt,255,"!t[VIP]!gАккаунт:!t%s !gпароль:!t%s !gфлаги:!t%s !gЗарегистрирован",g_szNamePlayer_VIP,g_szPassPlayer_VIP,g_szFlagsPlayer_VIP)
      ColoredPrint(id, szMsgTxt);
    }
    else
    {
        new szPW[64];
      SQL_ReadResult(Query, 1, szPW, 63)
      if(!(equal(g_szPassPlayer_VIP[id],szPW)))
      {
         client_print(id, print_console, "[VIP]Аккаунт уже существует")   
         ColoredPrint(id, "!t[VIP]!gАккаунт уже существует!");
      }
      else
      {
         client_print(id, print_console, "[VIP]Аккаунт уже существует")   
         ColoredPrint(id, "!t[VIP]!gАккаунт уже существует!");
      }
    } 
    return PLUGIN_HANDLED
}
 
 
//Вход в аккаунт
public register_client3(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    if(FailState == TQUERY_CONNECT_FAILED)
    {
        log_amx("Load - Could not connect to SQL database.  [%d] %s", Errcode, Error)
    }
    else if(FailState == TQUERY_QUERY_FAILED)
    {
        log_amx("Load Query failed. [%d] %s", Errcode, Error)
    }
    new id
    id = Data[0]   
    if(SQL_NumResults(Query) < 1)
    {     
      client_print(id, print_console, "[VIP]Аккаунт не найден!")
      ColoredPrint(id, "!t[VIP]!gАккаунт не найден!");
    }
    else
    {   
         new szTemp[512]
         formatex(szTemp,511,"DELETE FROM `%s` WHERE `name` = '%s'",szTableName,g_szNamePlayer_DEL)
         SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
         client_print(id, print_console, "[VIP]Аккаунт успешно удален")   
         ColoredPrint(id, "!t[VIP]!gАккаунт успешно удален!");
    } 
    return PLUGIN_HANDLED
}
 
 
 
//Вход в аккаунт
public register_client(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    if(FailState == TQUERY_CONNECT_FAILED)
    {
        log_amx("Load - Could not connect to SQL database.  [%d] %s", Errcode, Error)
    }
    else if(FailState == TQUERY_QUERY_FAILED)
    {
        log_amx("Load Query failed. [%d] %s", Errcode, Error)
    }
    new id
    id = Data[0]   
    if(SQL_NumResults(Query) < 1)
    {     
      client_print(id, print_console, "[VIP]Аккаунт не найден!")   
      ColoredPrint(id, "!t[VIP]!gАккаунт не найден!");   
    }
    else
    {
        new szPW[64];
      SQL_ReadResult(Query, 1, szPW, 63)
      if(!(equal(g_szPassPlayer[id],szPW)))
      {
         client_print(id, print_console, "[VIP]Неправильный пароль!")   
         ColoredPrint(id, "!t[VIP]!gНеправильный пароль");
         IsPlayerLogin[id] = false;
      }
      else
      {
         new szData[24];
         SQL_ReadResult(Query, 3, szData, 23)
         if(!is_player_vip_time(szData))
         {
            client_print(id, print_console, "[VIP]Ваши привелегии закончились!Обратитесь к админу!")   
            ColoredPrint(id, "!t[VIP]!gВаши привелегии закончились!Обратитесь к админу!");
            new szTemp[512]
            formatex(szTemp,511,"DELETE FROM `%s` WHERE `name` = '%s'",szTableName,g_szNamePlayer[id])
            SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
         }
         else
         {
            new szFlags[24];
            SQL_ReadResult(Query, 2, szFlags, 23)
            format(g_szFlagsPlayer[id],23,"%s",szFlags)
            format(g_szDataPlayer[id],23,"%s", szData)
            client_print(id, print_console, "[VIP]Вы успешно вошли в свой аккаунт!")   
            ColoredPrint(id, "!t[VIP]!gВы успешно вошли в свой аккаунт!");
            IsPlayerLogin[id] = true;
            set_user_flags(id, read_flags( g_szFlagsPlayer[id]))   
          
         }   
      }
    } 
    return PLUGIN_HANDLED
}
//Конец карты
public plugin_end()
{
    SQL_FreeHandle(g_SqlTuple)
}
public IgnoreHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    SQL_FreeHandle(Query)
    
    return PLUGIN_HANDLED
}
//Игрок заходит на сервер
public client_putinserver(id)
{
   g_szNamePlayer[id]    = ""
   g_szPassPlayer[id]    = ""
   g_szFlagsPlayer[id] = ""
   g_szDataPlayer[id]  = ""
   IsPlayerLogin[id]    = false;
}
 
//Проверки
public ChecSpecialSymbol(szText[])
{
   new bool:Yes = false;
   new SpecSymbol[5]
   //Check
   SpecSymbol[0] =   containi(szText,"@")
   SpecSymbol[1] =   containi(szText,"-")
   SpecSymbol[2] =   containi(szText,"$")
   SpecSymbol[3] =   containi(szText,"%")
   SpecSymbol[4] =   containi(szText,"#")
   if(SpecSymbol[0] !=-1 ||SpecSymbol[1] !=-1 ||SpecSymbol[2] !=-1
   ||SpecSymbol[3] !=-1 ||SpecSymbol[4] !=-1)
   {
      Yes = true;
   }
   return Yes;
}   
public CheckUseLogin(id)
{
   new players[32], numberofplayers;
   new playerid;
   new bool:isLogin = false;
   get_players( players, numberofplayers, "a" );
    
   for ( new i = 0; i < numberofplayers; i++ )
   {
      playerid = players[i];
      
      if(id!=playerid)
      {
         if(equali(g_szNamePlayer[id],g_szNamePlayer[playerid]))
         {
            isLogin = true;
         }
      }
   }
   return isLogin;
}   
//Немного быдло кода,совсем немножко =)
public Get_CurrTime()
{
   //Data
   new data[20]
   get_time("%d.%m.%Y", data, 19)
   replace_all(data, 19, ".", " ");
   new i_year[5], i_month[5], i_day[5]
   parse(data, i_day, 4, i_month, 4,i_year, 4);
   g_Year = str_to_num(i_year)
   g_Month = str_to_num(i_month)
   g_Day  = str_to_num(i_day)
}
//Что за бред?!
stock is_player_vip_time(DT[])
{
   new yes = 1;
   replace_all(DT, 13, ".", " ");
   new is_year[5], is_month[5], is_day[5]
   parse(DT, is_day, 4, is_month, 4,is_year, 4);
   if(g_Year > str_to_num(is_year)) yes = 0;
   if(g_Month > str_to_num(is_month)) if(g_Year >  str_to_num(is_year)) yes = 0;
   if( g_Month==str_to_num(is_month) && g_Day >= str_to_num(is_day)) yes = 0;
   return yes;
}
public is_Player_Login(id) return IsPlayerLogin[id];
public VIP_Player_Has_Flag(id,flags[])
{
   new bool:flag;
   new Flag = contain(g_szFlagsPlayer[id],flags)
   if(Flag!= - 1)flag = true;
   return flag;
}
 
//Цветной чат
//ColorChat
stock ColoredPrint(const id, const input[], any:...)
{
    new count = 1, players[32]
    static msg[512]
    vformat(msg, 512, input, 3)
    
    replace_all(msg, 512, "!g", "^x04")
    replace_all(msg, 512, "!y", "^x01")
    replace_all(msg, 512, "!t", "^x03")
    
    if (id) players[0] = id; else get_players(players, count, "ch")
    {
        for (new i = 0; i < count; i++)
        {
            if (is_user_connected(players[i]))
            {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
                write_byte(players[i]);
                write_string(msg);
                message_end();
            }
        }
    }
}
 

Вложения

  • 14,8 KB Просмотры: 3
Сверху