Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Sistema básico de salvamento de dados em SQLite no SA-MP.
- O sistema é simples e salva as seguintes informações: ID Fixo, nome, senha, IP, skin, dinheiro, nivel.
- OBS: Apenas tem o salvamento, a parte simples que é anexar isso em sua gamemode fica por sua parte.
- Pode usar? Pode, portanto eu recomendo que você estude e crie um do zero pra si com suas mãos etc...
- O sistema cria automaticamente a database que ficará localizada em 'scriptfiles/database.db' que também poderá ser acessada através de um DB Browser.
- by: Carlos Victor#6045
- -> Eu não coloquei o sistema em prática, mas visualmente é funcional, só basta uma adaptação.
- */
- #include <a_samp>
- enum
- {
- dialog_register,
- dialog_login
- };
- enum E_PLAYER
- {
- E_ID,
- E_NAME[24],
- E_PASSWORD[32],
- E_IP[16],
- E_SKIN,
- E_MONEY,
- E_SCORE,
- E_WRONG,
- bool:E_LOGGED
- };
- new E_DATA[MAX_PLAYERS][E_PLAYER];
- new DB:database;
- main(){}
- public OnGameModeInit()
- {
- if((database = db_open("database.db")) == DB:0)
- {
- print("Falha ao conectar com o banco de dados.");
- }
- else
- {
- print("Sucesso ao conectar com o banco de dados.");
- db_free_result(db_query(database, "CREATE TABLE IF NOT EXISTS `accounts`(\
- `id` INTEGER PRIMARY KEY AUTOINCREMENT,\
- `name` TEXT NOT NULL,\
- `password` TEXT NOT NULL,\
- `ip` TEXT NOT NULL,\
- `skin` INTEGER DEFAULT 60,\
- `money` INTEGER DEFAULT 250,\
- `score` INTEGER DEFAULT 0)"));
- }
- return 1;
- }
- public OnGameModeExit()
- {
- db_close(database);
- return 1;
- }
- public OnPlayerRequestClass(playerid, classid)
- {
- SetSpawnInfo(playerid, NO_TEAM, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- SpawnPlayer(playerid);
- TogglePlayerSpectating(playerid, true);
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- GetPlayerName(playerid, E_DATA[playerid][E_NAME], 24);
- GetPlayerIp(playerid, E_DATA[playerid][E_IP], 16);
- SetTimerEx("OnPlayerMessage", 100, false, "i", playerid);
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- destroyAllPlayerTextDraw(playerid);
- saveData(playerid);
- return 1;
- }
- function OnPlayerMessage(playerid)
- {
- clearChat(playerid);
- SendClientMessage(playerid, -1, "* Carregando informações, aguarde...");
- SetTimerEx("OnLoadingScreen", 1000 * 2, false, "i", playerid);
- return 1;
- }
- function OnLoadingScreen(playerid)
- {
- new query[90];
- format(query, sizeof(query), "SELECT * FROM `accounts` WHERE `name`='%q'", E_DATA[playerid][E_NAME]);
- new DBResult:result = db_query(database, query);
- if(db_num_rows(result))
- {
- db_get_field_assoc(result, "password", E_DATA[playerid][E_PASSWORD], 32);
- E_DATA[playerid][E_ID] = db_get_field_assoc_int(result, "id");
- ShowPlayerDialog(playerid, dialog_login, DIALOG_STYLE_PASSWORD, "Entrando...", "{FFFFFF}Sua conta está {90EE90}REGISTRADA {FFFFFF}no servidor, digite sua senha no campo abaixo:", "Confirmar", "X");
- }
- else
- {
- ShowPlayerDialog(playerid, dialog_register, DIALOG_STYLE_INPUT, "Entrando...", "{FFFFFF}Sua conta não está {FF6347}REGISTRADA {FFFFFF}no servidor, portanto digite uma senha de 6-32 caracateres no campo abaixo:", "Confirmar", "X");
- }
- db_free_result(result);
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- SetPlayerSkin(playerid, E_DATA[playerid][E_SKIN]);
- SetPlayerPos(playerid, 1088.2767, 1074.3389, 10.8382);
- SetPlayerFacingAngle(playerid, 126.0655);
- return 0;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- switch(dialogid)
- {
- case dialog_register:
- {
- if(!response)
- return Kick(playerid);
- if(!strlen(inputtext))
- return ShowPlayerDialog(playerid, dialog_register, DIALOG_STYLE_INPUT, "Entrando...", "{FFFFFF}Sua conta não está {FF6347}REGISTRADA {FFFFFF}no servidor, portanto digite uma senha de 6-32 caracateres no campo abaixo:", "Confirmar", "X");
- if(strlen(inputtext) < 6 || strlen(inputtext) > 32)
- return ShowPlayerDialog(playerid, dialog_register, DIALOG_STYLE_INPUT, "Entrando...", "{FFFFFF}Sua conta não está {FF6347}REGISTRADA {FFFFFF}no servidor, portanto digite uma senha de 6-32 caracateres no campo abaixo:", "Confirmar", "X");
- new query[256];
- format(query, sizeof(query), "INSERT INTO `accounts`(name, password, ip) VALUES('%q', '%q', '%q')", E_DATA[playerid][E_NAME], inputtext, E_DATA[playerid][E_IP]);
- db_query(database, query);
- loadData(playerid);
- }
- case dialog_login:
- {
- if(!response)
- return Kick(playerid);
- if(!strlen(inputtext))
- return ShowPlayerDialog(playerid, dialog_login, DIALOG_STYLE_PASSWORD, "Entrando...", "{FFFFFF}Sua conta está {90EE90}REGISTRADA {FFFFFF}no servidor, digite sua senha no campo abaixo:", "Confirmar", "X");
- if(!strcmp(E_DATA[playerid][E_PASSWORD], inputtext, true))
- {
- loadData(playerid);
- }
- else
- {
- ShowPlayerDialog(playerid, dialog_login, DIALOG_STYLE_PASSWORD, "Entrando...", "{FFFFFF}Sua conta está {90EE90}REGISTRADA {FFFFFF}no servidor, digite sua senha no campo abaixo:", "Confirmar", "X");
- E_DATA[playerid][E_WRONG]++;
- SendErrorMessage(playerid, "Você errou sua senha, portanto possui %d tentativas restantes.", 4 - E_DATA[playerid][E_WRONG]);
- if(E_DATA[playerid][E_WRONG] >= 4)
- return Kick(playerid);
- }
- }
- }
- return 1;
- }
- stock loadData(playerid)
- {
- TogglePlayerSpectating(playerid, false);
- clearChat(playerid);
- new query[140], DBResult:result;
- format(query, sizeof(query), "SELECT * FROM `accounts` WHERE `name`='%q'", E_DATA[playerid][E_NAME]);
- result = db_query(database, query);
- E_DATA[playerid][E_LOGGED] = true;
- E_DATA[playerid][E_SKIN] = db_get_field_assoc_int(result, "skin");
- E_DATA[playerid][E_MONEY] = db_get_field_assoc_int(result, "money");
- E_DATA[playerid][E_SCORE] = db_get_field_assoc_int(result, "score");
- db_free_result(result);
- SetPlayerSkin(playerid, E_DATA[playerid][E_SKIN]);
- GivePlayerMoney(playerid, E_DATA[playerid][E_MONEY]);
- SetPlayerColor(playerid, 0xFFFFFFFF);
- SendClientMessage(playerid, -1, "* Seus dados foram carregados com sucesso.");
- return 1;
- }
- stock saveData(playerid)
- {
- if(!E_DATA[playerid][E_LOGGED])
- return 1;
- new query[140];
- format(query, sizeof(query), "UPDATE `accounts` SET \
- `ip`='%q',\
- `skin`='%d',\
- `money`='%d',\
- `score`='%d' WHERE `id`='%d'",
- E_DATA[playerid][E_IP],
- E_DATA[playerid][E_ADMIN],
- E_DATA[playerid][E_SKIN],
- E_DATA[playerid][E_MONEY],
- E_DATA[playerid][E_SCORE],
- E_DATA[playerid][E_KILLS],
- E_DATA[playerid][E_FIGHT],
- E_DATA[playerid][E_DEATH],
- E_DATA[playerid][E_ID]);
- db_free_result(db_query(database, query));
- resetData(playerid);
- return 1;
- }
- stock resetData(playerid)
- {
- new dummy[E_PLAYER];
- E_DATA[playerid] = dummy;
- return 1;
- }
- stock clearChat(playerid)
- {
- for(new i; i != 30; i++)
- SendClientMessage(playerid, -1, " ");
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement