Last active
June 21, 2021 18:39
-
-
Save ziggi/ef37b916efd7ced12b99 to your computer and use it in GitHub Desktop.
MySQL ORM Register System
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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