Sqlite Básico

Iniciado por Swarlog, May 12, 2025, 02:50 PM

Tema anterior - Siguiente tema

Swarlog

Información Adicional:

Se trata ni más ni menos que un gamemode básico que utiliza como almacenamiento una base de datos "user.db" que funciona bajo el sistema de Sqlite. El gamemoda ha sido creado por ViruZz.

Contiene:

- Conexión con base de datos mediante sqlite.
- Almacenamiento de información del jugador (nombre y contraseña).
- Dialogos de registro y login personalizados.

Código:

/*
______________________________________________
|                  2012 Project                |
|                     12/10/12                 |
|             Basic-SQLite-Gamemode            |
|                                              |
| Made by ViruZz & Licensed by Creative Commons|
|                                              |
|______________________________________________|

Copyright License: http://creativecommons.org/licenses/by-sa/3.0/

    No use of any alternive source for example; zcmd & ect..

*/

//--------------------------[ INCLUDES ]--------------------------
#include <a_samp>

//--------------------------[ SCRIPT INFO ]--------------------------
#define         SERVER_VERSION      "v.1"
#define         SERVER_NAME         "Basic-SQLite-Gamemode"
#define         SERVER_SHORT_NAME   "SQLite"

//--------------------------[ DEFINES ]--------------------------
#define DIALOG_LOGIN    1
#define DIALOG_REGISTER     2

//--------------------------[ PLAYER MACROS ]--------------------------
#define IsPlayerLogged(%0) GetPVarInt(%0, "gLogged") // Check to see if the player logged in or not

//--------------------------[ NATIVES ]--------------------------
//native WP_Hash(buffer[], len, const str[]); // Whirlpool Hash -- Temporary Disabled

//--------------------------[ VARIABLES ]--------------------------
new DB:Users; // Users Database

//--------------------------[ FUNCTIONS ]--------------------------
forward OnPlayerConnected(playerid);
forward GetPlayerNameEx(playerid);


main(){
}

public OnGameModeInit()
{
    Users = db_open("users.db"); // Opening the Database
SetGameModeText(""SERVER_SHORT_NAME"");
AddPlayerClass(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
return 1;
}

public OnGameModeExit()
{
db_close(Users); // Closing the database
return 1;
}

public OnPlayerConnect(playerid)
{
new vzMessage[128];
   
format(vzMessage, sizeof(vzMessage), "Welcome to "SERVER_NAME", %s", GetPlayerNameEx(playerid));
SendClientMessage(playerid, -1, vzMessage);
SetTimerEx("OnPlayerConnected", 750, false, "i", playerid);
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
SaveAccount(playerid);
return 1;
}

public OnPlayerConnected(playerid)
{
    if(IsPlayerConnected(playerid)) {
   
        SetPlayerCameraPos(playerid,2211.1460,-1748.3909,29.3744);
SetPlayerCameraLookAt(playerid,2229.4968,-1722.0701,13.5625);
SetPlayerVirtualWorld(playerid, 0);
SetPlayerInterior(playerid, 0);
SetPlayerPos(playerid, 2221.6460, -1733.3965, 13.3983);

new vzString[128],
DBResult:dbresult;

format(vzString, sizeof(vzString), "SELECT NAME FROM `USERS` WHERE `NAME`='%s'", GetPlayerNameEx(playerid));
dbresult = db_query(Users, vzString);
if(db_num_rows(dbresult) > 0) {
      ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Basic SQLite Script Authentication", "Welcome to Basic SQLite Script\nThis account is currently registered, please enter your password to login:", "Login", "Quit");
}else{
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Basic SQLite Script Registration", "Welcome to Basic SQLite Script\nThis account is available for registration, please enter a password to register this account:", "Register", "Quit");
}
db_free_result(dbresult);
}
return 1;
}

public OnPlayerSpawn(playerid)
{
    SetPlayerPos(playerid, 2221.6460, -1733.3965, 13.3983);
return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/credits", cmdtext, true, 10) == 0) {
SendClientMessage(playerid, -1, "=======["SERVER_NAME" "SERVER_VERSION"]=======");
SendClientMessage(playerid, -1, "Script Author: ViruZz");
return 1;
}
return 0;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_LOGIN)
{
    if(!response) return Kick(playerid);
if(IsPlayerConnected(playerid)) {

    new DBResult:query,
vzString[256];
format(vzString, sizeof(vzString), "SELECT * FROM `USERS` WHERE `NAME`='%s' AND `PASSWORD`='%s'", DB_Escape(GetPlayerNameEx(playerid)), (inputtext));
query = db_query(Users, vzString);
if(db_num_rows(query) > 0) { // Player is currently logged in
SpawnPlayer(playerid);
}else{
            ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Basic SQLite Script Registration", "Wrong Password\nPlease enter the correct password:", "Register", "Quit");
}
db_free_result(query);
}
}
else if(dialogid == DIALOG_REGISTER)
{
    if(!response) return Kick(playerid);
if(IsPlayerConnected(playerid)) {
new vzString[256];
format(vzString, sizeof(vzString), "INSERT INTO `USERS` (`NAME`, `PASSWORD`) VALUES ('%s','%s')", DB_Escape(GetPlayerNameEx(playerid)), (inputtext));
db_free_result(db_query(Users, vzString));

    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Basic SQLite Script Authentication", "Welcome to Basic SQLite Script\nThis account is currently registered, please enter your password to login:", "Login", "Quit");
}
}
return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}

GetPlayerNameEx(playerid)
{
    new vzName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, vzName, MAX_PLAYER_NAME);
    return vzName;
}

SaveAccount(playerid)
{
    if(IsPlayerLogged(playerid)) {
return 1;
}
return 0;
}

/*
HashInput(text[])
{
new vzString[129];
WP_Hash(vzString, sizeof(vzString), text);
return vzString;
}
*/


DB_Escape(text[])
{
new
ret[160],
ch,
i,
j;
while ((ch = text[i++]) && j < sizeof (ret)) {
if (ch == '\'') {
if (j < sizeof (ret) - 2) {
ret[j++] = '\'';
ret[j++] = '\'';
}
}else if (j < sizeof (ret)){
ret[j++] = ch;
}else{
j++;
}
}
ret[sizeof (ret) - 1] = '\0';
return ret;
}