Skip to content

Instantly share code, notes, and snippets.

@ziggi
Last active June 21, 2021 18:39
Show Gist options
  • Save ziggi/ef37b916efd7ced12b99 to your computer and use it in GitHub Desktop.
Save ziggi/ef37b916efd7ced12b99 to your computer and use it in GitHub Desktop.
MySQL ORM Register System
/*
About: mysql orm register system
Author: ziggi
*/
#include <a_samp>
#include "a_mysql"
/*
Defines
*/
#define DB_LOG LOG_ALL
#define DB_HOST "127.0.0.1"
#define DB_USER "root"
#define DB_DATABASE "samp"
#define DB_PASS "root"
#define MIN_PLAYER_PASSWORD 3
#define MAX_PLAYER_PASSWORD 16
/*
Enums
*/
enum {
DIALOG_LOGIN,
DIALOG_REGISTER,
}
enum e_Player_Info {
ORM:e_ORM,
e_ID,
e_Name[MAX_PLAYER_NAME + 1],
e_Password[MAX_PLAYER_PASSWORD + 1],
e_Money,
e_Kills,
e_Deaths,
bool:e_Logged,
}
/*
Vars
*/
static
gPlayer[MAX_PLAYERS][e_Player_Info],
gPlayerNULL[e_Player_Info],
gConnectionHandle;
/*
Forwards
*/
forward OnPlayerRegistered(playerid);
forward OnPlayerDataLoad(playerid);
/*
Publics
*/
public OnFilterScriptInit() {
mysql_log(DB_LOG);
gConnectionHandle = mysql_connect(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
return 1;
}
public OnFilterScriptExit() {
mysql_close(gConnectionHandle);
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
if (!IsPlayerLogged(playerid)) {
return 0;
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (!strcmp(cmdtext, "/add", true)) {
gPlayer[playerid][e_Kills]++;
gPlayer[playerid][e_Deaths]++;
return 1;
}
if (!strcmp(cmdtext, "/stats", true)) {
new string[128];
format(string, sizeof(string),
"Убийств: %d, Смертей: %d, Денег: %d",
gPlayer[playerid][e_Kills], gPlayer[playerid][e_Deaths], gPlayer[playerid][e_Money]
);
SendClientMessage(playerid, -1, string);
return 1;
}
return 0;
}
public OnPlayerConnect(playerid)
{
GetPlayerName(playerid, gPlayer[playerid][e_Name], MAX_PLAYER_NAME + 1);
new ORM:ormid = orm_create("players", gConnectionHandle);
gPlayer[playerid][e_ORM] = ormid;
orm_addvar_int(ormid, gPlayer[playerid][e_ID], "ID");
orm_addvar_string(ormid, gPlayer[playerid][e_Name], MAX_PLAYER_NAME + 1, "Name");
orm_addvar_string(ormid, gPlayer[playerid][e_Password], MAX_PLAYER_PASSWORD + 1, "Password");
orm_addvar_int(ormid, gPlayer[playerid][e_Money], "Money");
orm_addvar_int(ormid, gPlayer[playerid][e_Kills], "Kills");
orm_addvar_int(ormid, gPlayer[playerid][e_Deaths], "Deaths");
orm_setkey(ormid, "Name");
orm_select(ormid, "OnPlayerDataLoad", "d", playerid);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
if (IsPlayerLogged(playerid)) {
orm_update(gPlayer[playerid][e_ORM]);
}
orm_destroy(gPlayer[playerid][e_ORM]);
gPlayer[playerid] = gPlayerNULL;
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch (dialogid) {
case DIALOG_LOGIN: {
new length = strlen(inputtext);
if (length < MIN_PLAYER_PASSWORD || length > MAX_PLAYER_PASSWORD) {
new string[64];
format(string, sizeof(string), "Ошибка: длина пароля должна быть между %d и %d символов.", MIN_PLAYER_PASSWORD, MAX_PLAYER_PASSWORD);
ShowLoginDialog(playerid, string);
return 1;
}
if (!strcmp(inputtext, gPlayer[playerid][e_Password], false)) {
OnPlayerLogged(playerid);
SendClientMessage(playerid, -1, "Вы успешно вошли в аккаунт.");
} else {
ShowLoginDialog(playerid, "Ошибка: неверный пароль.");
}
return 1;
}
case DIALOG_REGISTER: {
new length = strlen(inputtext);
if (length < MIN_PLAYER_PASSWORD || length > MAX_PLAYER_PASSWORD) {
new string[64];
format(string, sizeof(string), "Ошибка: длина пароля должна быть между %d и %d символов.", MIN_PLAYER_PASSWORD, MAX_PLAYER_PASSWORD);
ShowRegisterDialog(playerid, string);
return 1;
}
strmid(gPlayer[playerid][e_Password], inputtext, 0, length, MAX_PLAYER_PASSWORD);
orm_insert(gPlayer[playerid][e_ORM], "OnPlayerRegistered", "d", playerid);
return 1;
}
}
return 1;
}
/*
OnPlayerLogged
*/
stock OnPlayerLogged(playerid)
{
gPlayer[playerid][e_Logged] = true;
}
/*
OnPlayerRegistered
*/
public OnPlayerRegistered(playerid)
{
OnPlayerLogged(playerid);
SendClientMessage(playerid, -1, "Вы успешно создали аккаунт.");
return 1;
}
/*
OnPlayerDataLoad
*/
public OnPlayerDataLoad(playerid)
{
switch (orm_errno(gPlayer[playerid][e_ORM])) {
case ERROR_OK: {
ShowLoginDialog(playerid);
}
case ERROR_NO_DATA: {
ShowRegisterDialog(playerid);
}
}
orm_setkey(gPlayer[playerid][e_ORM], "ID");
return 1;
}
/*
ShowLoginDialog
*/
stock ShowLoginDialog(playerid, msg[] = "")
{
new string[512];
strcat(string, "Введите пароль для входа в аккаунт.");
if (strlen(msg) != 0) {
strcat(string, "\n");
strcat(string, msg);
}
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Вход", string, "Войти", "");
return 1;
}
/*
ShowRegisterDialog
*/
stock ShowRegisterDialog(playerid, msg[] = "")
{
new string[512];
strcat(string, "Введите пароль для регистрации аккаунта.");
if (strlen(msg) != 0) {
strcat(string, "\n");
strcat(string, msg);
}
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Регистрация", string, "Зарегать", "");
return 1;
}
/*
IsPlayerLogged
*/
stock IsPlayerLogged(playerid)
{
return gPlayer[playerid][e_Logged];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment