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