[GM-SQL] Leer, antes de bajar...
#1

Hola, їalguien que sepa de alguna GM base SQlite para comenzar?

No quiero una completa.

Saludos...
Reply
#2

Si es SQLite tengo esto de hace unos aсos que hice para que no se me olvidara.


Код:
// BASE PARA HACER Y RECORDAR EL USO DE SQLITE

#include <a_samp>

new DB:General; // Nueva variable para almacenar la base de datos

enum UserData
{
	ID,
	Nombre[MAX_PLAYER_NAME],
	Password[128],
	Admin
}
new User[MAX_PLAYERS][UserData];

main() {}

public OnGameModeInit()
{
	General = db_open("general.db"); // Defino la base de datos
	db_query(General, "PRAGMA synchronous = OFF"); // Seguridad ante perdida de datos
	
	// Si no existe la tabla ЋusersЋ la crea con los lugares:
	// userid: Un integer que se autoincrementa
	// username: String de 24 celdas que no distingue entre mayъsculas y minъsculas (ElGuille, elguille)
	// password: String de 128 celdas
	// admin: Un integer que por defecto tiene el valor 0 (cuando se registre serб 0) y no estб nulo
	db_query(General, "CREATE TABLE IF NOT EXISTS users (userid INTEGER PRIMARY KEY AUTOINCREMENT, username VARCHAR(24) COLLATE NOCASE, password VARCHAR(128), admin INTEGER DEFAULT 0 NOT NULL)");
	return 1;
}

public OnGameModeExit()
{
	db_close(General);
	return 1;
}

public OnPlayerConnect( playerid )
{
    for( new i; i < _: UserData; ++i ) User[ playerid ][ UserData: i ] = 0; // Limpia las variables del usuario anterior
	
	GetPlayerName(playerid, User[playerid][Nombre], MAX_PLAYER_NAME); // Obtiene el nombre del jugador y lo guarda
	
	new DBResult:Resultado, Query[512];
	
	// Selecciono ЋpasswordЋ de la tabla ЋusersЋ donde el ЋusernameЋ es el nombre del usuario
	format(Query, sizeof(Query), "SELECT password FROM users WHERE username = '%q' LIMIT 0, 1", User[playerid][Nombre]);
	Resultado = db_query(General, Query); // Almaceno el resultado del Query
	
	if (db_num_rows(Resultado)) // Si hay una fila o mбs con el nombre del usuario significa que estб registrado
	{
		db_get_field_assoc(Resultado, "password", User[playerid][Password], 128); // Almacenamos la contraseсa obtenida de la base de datos a la variable
		// ...
	}
	else
	{
		// El usuario no estб registrado
	}
	
	db_free_result(Resultado); // Libero el resultado
    return 1;
}

public OnPlayerDisconnect( playerid, reason )
{
	new Query[512];
	
	// Actualiza el campo ЋadminЋ al nivel de admin actual
	format(Query, sizeof(Query), "UPDATE users SET admin = %i WHERE username = '%q'", User[playerid][Admin], User[playerid][Nombre]);
	db_query(General, Query);
	
    for( new i; i < _: UserData; ++i ) User[ playerid ][ UserData: i ] = 0; // Limpia las variables del usuario
    return 1;
}

stock Registro() // Esto es una funciуn inъtil y sin funcionalidad correcta, deberнa ser incluida en un diбlogo
{
	new Query[512];
	
	// Inserta en la tabla ЋusersЋ el nombre y contraseсa. El ID de usuario se incrementa automбticamente y el admin se pone en 0
	format(Query, sizeof(Query), "INSERT INTO users (username, password) VALUES ('%q', '%q')", User[playerid][Nombre], User[playerid][Password]);
	db_query(General, Query);
	
	// USUARIO REGISTRADO
}

stock Logeo() // Esto es una funciуn inъtil y sin funcionalidad correcta, deberнa ser incluida en un diбlogo
{
	new DBResult:Resultado, Query[512];
	
	// Selecciono todos los campos de la tabla ЋusersЋ donde el usuario es el nombre del jugador
	format(Query, sizeof(Query), "SELECT * FROM users WHERE username = '%q' LIMIT 0, 1", User[playerid][Nombre]);
	Resultado = db_query(General, Query);
	
	if (db_num_rows(Resultado)) // Si hay filas donde el username sea el Nombre del jugador
	{
		db_get_field_assoc(Resultado, "userid", Query, 5); // Obtengo del resultado el valor de ЋuseridЋ
		User[playerid][ID] = strval(Query); // Y convierto el resultado en integer y lo guardo
		
		db_get_field_assoc(Resultado, "admin", Query, 2);
		User[playerid][Admin] = strval(Query);
		
		// DATOS CARGADOS Y USUARIO LOGEADO
	}
	db_free_result(Resultado); // Libero el resultado (solo liberar cuando se hace SELECT)
}

// BASADO EN EL TUTORIAL DE KONSTANTINOS
// https://sampforum.blast.hk/showthread.php?tid=449536
Reply
#3

Envнame un Mensaje Privado, tengo una base realizada por mн desde hace poco la cual nunca termine ni libere, sera toda tuya en cuanto llegues al Privado.
Reply
#4

Hola revisa estos links :

https://sampforum.blast.hk/showthread.php?tid=415501
https://sampforum.blast.hk/showthread.php?tid=171064
https://sampforum.blast.hk/showthread.php?tid=584148
https://sampforum.blast.hk/showthread.php?tid=567024

O tambiйn la secciуn de gamemodes tiene varias bases SQL que te puedan servir,saludos.
Reply
#5

Gracias por la ayuda, pero no Mysql :c
Reply
#6

revivo.
Reply
#7

Quote:
Originally Posted by FixFl0w
Посмотреть сообщение
revivo.
Ya te dejaron un modo de juego con el que puedas empezar, їAcaso quieres un GM completo?
Reply
#8

Код:
// BASE PARA HACER Y RECORDAR EL USO DE SQLITE

#include <a_samp>

new DB:General; // Nueva variable para almacenar la base de datos

enum UserData
{
	ID,
	Nombre[MAX_PLAYER_NAME],
	Password[128],
	Admin
}
new User[MAX_PLAYERS][UserData];

main() {}

public OnGameModeInit()
{
	General = db_open("general.db"); // Defino la base de datos
	db_query(General, "PRAGMA synchronous = OFF"); // Seguridad ante perdida de datos
	
	// Si no existe la tabla ЋusersЋ la crea con los lugares:
	// userid: Un integer que se autoincrementa
	// username: String de 24 celdas que no distingue entre mayъsculas y minъsculas (ElGuille, elguille)
	// password: String de 128 celdas
	// admin: Un integer que por defecto tiene el valor 0 (cuando se registre serб 0) y no estб nulo
	db_query(General, "CREATE TABLE IF NOT EXISTS users (userid INTEGER PRIMARY KEY AUTOINCREMENT, username VARCHAR(24) COLLATE NOCASE, password VARCHAR(128), admin INTEGER DEFAULT 0 NOT NULL)");
	return 1;
}

public OnGameModeExit()
{
	db_close(General);
	return 1;
}

public OnPlayerConnect( playerid )
{
    for( new i; i < _: UserData; ++i ) User[ playerid ][ UserData: i ] = 0; // Limpia las variables del usuario anterior
	
	GetPlayerName(playerid, User[playerid][Nombre], MAX_PLAYER_NAME); // Obtiene el nombre del jugador y lo guarda
	
	new DBResult:Resultado, Query[512];
	
	// Selecciono ЋpasswordЋ de la tabla ЋusersЋ donde el ЋusernameЋ es el nombre del usuario
	format(Query, sizeof(Query), "SELECT password FROM users WHERE username = '%q' LIMIT 0, 1", User[playerid][Nombre]);
	Resultado = db_query(General, Query); // Almaceno el resultado del Query
	
	if (db_num_rows(Resultado)) // Si hay una fila o mбs con el nombre del usuario significa que estб registrado
	{
		db_get_field_assoc(Resultado, "password", User[playerid][Password], 128); // Almacenamos la contraseсa obtenida de la base de datos a la variable
		// ...
	}
	else
	{
		// El usuario no estб registrado
	}
	
	db_free_result(Resultado); // Libero el resultado
    return 1;
}

public OnPlayerDisconnect( playerid, reason )
{
	new Query[512];
	
	// Actualiza el campo ЋadminЋ al nivel de admin actual
	format(Query, sizeof(Query), "UPDATE users SET admin = %i WHERE username = '%q'", User[playerid][Admin], User[playerid][Nombre]);
	db_query(General, Query);
	
    for( new i; i < _: UserData; ++i ) User[ playerid ][ UserData: i ] = 0; // Limpia las variables del usuario
    return 1;
}

stock Registro() // Esto es una funciуn inъtil y sin funcionalidad correcta, deberнa ser incluida en un diбlogo
{
	new Query[512];
	
	// Inserta en la tabla ЋusersЋ el nombre y contraseсa. El ID de usuario se incrementa automбticamente y el admin se pone en 0
	format(Query, sizeof(Query), "INSERT INTO users (username, password) VALUES ('%q', '%q')", User[playerid][Nombre], User[playerid][Password]);
	db_query(General, Query);
	
	// USUARIO REGISTRADO
}

stock Logeo() // Esto es una funciуn inъtil y sin funcionalidad correcta, deberнa ser incluida en un diбlogo
{
	new DBResult:Resultado, Query[512];
	
	// Selecciono todos los campos de la tabla ЋusersЋ donde el usuario es el nombre del jugador
	format(Query, sizeof(Query), "SELECT * FROM users WHERE username = '%q' LIMIT 0, 1", User[playerid][Nombre]);
	Resultado = db_query(General, Query);
	
	if (db_num_rows(Resultado)) // Si hay filas donde el username sea el Nombre del jugador
	{
		db_get_field_assoc(Resultado, "userid", Query, 5); // Obtengo del resultado el valor de ЋuseridЋ
		User[playerid][ID] = strval(Query); // Y convierto el resultado en integer y lo guardo
		
		db_get_field_assoc(Resultado, "admin", Query, 2);
		User[playerid][Admin] = strval(Query);
		
		// DATOS CARGADOS Y USUARIO LOGEADO
	}
	db_free_result(Resultado); // Libero el resultado (solo liberar cuando se hace SELECT)
}

// BASADO EN EL TUTORIAL DE KONSTANTINOS
// https://sampforum.blast.hk/showthread.php?tid=449536
Con esto puedes empezar.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)