Test in ubuntu server and no work :S, no show second dialog.
No save info player when is disconnected and in register. Error appears out of the server:
PHP Code:
#include <a_samp>
#include <rBits>
//----------------------------------------------------------
// FORWARD:
//----------------------------------------------------------
//----------------------------------------------------------
// DEFINE:
//----------------------------------------------------------
// Informacion del servidor:
#define INFO_NOMBRE_SERVIDOR "Server"
#define INFO_VERSION_SERVIDOR "1.0"
//----------------------------------------------------------
// NEW:
//----------------------------------------------------------
// Sistema Mysql:
new Bit1: g_PlayerLogged <MAX_PLAYERS>;
new Bit16: g_AdminLevel <MAX_PLAYERS>;
new DB: Database;
//----------------------------------------------------------
// CODIGO INTERNO DEL SCRIPT:
//----------------------------------------------------------
public OnFilterScriptInit()
{
//--------------------------------------------------------
// Sistema Mysql:
//--------------------------------------------------------
// Conexion con la base de datos del servidor:
Database = db_open("ServerDatabase.db");
// Creacion de tablas en la base de datos, si no existiese:
db_query(Database, "CREATE TABLE IF NOT EXISTS `USERS` (`NAME`, `PASSWORD`, `IP`, `SCORE`, `CASH`, `ADMINLEVEL`)");
// Mensaje de la ejecucion del script:
print("Scripts del Gamemode habilitados correctamente.");
return 1;
}
public OnFilterScriptExit()
{
//--------------------------------------------------------
// Sistema Mysql:
//--------------------------------------------------------
// Desconexion con la base de datos del servidor:
for (new i; i != MAX_PLAYERS; i++) OnPlayerDisconnect(i, 1);
db_close(Database);
//Mensaje de detencion de la ejecucion del script:
print("Scripts del Gamemode deshabilitados correctamente.");
return 1;
}
main()
{
// Mensaje que se mostrara en la consola del servidor:
print("Gamemode cargado correctamente.");
}
//----------------------------------------------------------
// CODIGO EXTERNO DEL SCRIPT:
//----------------------------------------------------------
public OnGameModeInit()
{
// Informacion del Servidor:
SetGameModeText("Server Test");
// Impide que se vean en el mapa los usuarios conectados:
ShowPlayerMarkers(0);
// Las ruedas de los vehiculos pueden ser pinchadas:
EnableTirePopping(0);
// Todos los coches apagados:
// ManualVehicleEngineAndLights();
// Skins disponibles a elegir:
AddPlayerClass(101,1653.5210,-2329.4944,13.5469,1.2957,-1,-1,-1,-1,-1,-1);
AddPlayerClass(10,1653.5210,-2329.4944,13.5469,1.2957,-1,-1,-1,-1,-1,-1);
AddPlayerClass(12,1653.5210,-2329.4944,13.5469,1.2957,-1,-1,-1,-1,-1,-1);
return 1;
}
public OnGameModeExit()
{
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerColor(playerid, COLOR_BLANCO);
SetPlayerPos(playerid, 2370.5166,2165.1321,26.9844);
SetPlayerCameraPos(playerid, 2374.5188,2169.5798,26.9844);
SetPlayerCameraLookAt(playerid, 2370.5166,2165.1321,26.9844);
SetPlayerFacingAngle(playerid,315.9228);
ApplyAnimation(playerid,"DANCING","dnce_M_b",4.1,7,5,1,1,1);
return 1;
}
public OnPlayerConnect(playerid)
{
//--------------------------------------------------------
// Sistema Mysql:
//--------------------------------------------------------
// Nuevas variables:
new Query[ 150 ];
new DBResult: Result;
new name[ MAX_PLAYER_NAME ];
GetPlayerName(playerid, name, sizeof(name));
Bit1_Set(g_PlayerLogged, playerid, false);
// Lectura del usuario en la base de datos:
format(Query, sizeof(Query), "SELECT `NAME` FROM `USERS` WHERE `NAME` = '%s'", DB_Escape(name));
Result = db_query(Database, Query);
// Si el nombre introducido esta registrado:
if (db_num_rows(Result))
{
// Mensaje de logueo para el usuario:
format(Query, sizeof(Query), "Bienvenido al servidor Infernus %s(%d)! Por favor, introduzque la contraseсa de vuestra cuenta para poder loguear.", name, playerid);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "SISTEMA DE LOGUEO", Query, "Conectar", "Salir");
}
// Si el nombre introducido no esta registrado:
else
{
// Mensaje de registro para el nuevo usuario:
format(Query, sizeof(Query), "Bienvenido al servidor Infernus %s(%d)! Para registraros, introduzca la contraseсa para vuestra cuenta.", name, playerid);
ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "SISTEMA DE LOGUEO", Query, "Registrarse", "Salir");
}
db_free_result(Result);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
//--------------------------------------------------------
// Sistema Mysql:
//--------------------------------------------------------
// Nuevas variables:
new Query[ 200 ];
new name[ MAX_PLAYER_NAME ];
GetPlayerName(playerid, name, sizeof(name));
// Almacenamiento de datos cuando se desconecta el jugador:
if (Bit1_Get(g_PlayerLogged, playerid) == 1)
{
// Tablas en las que se almacenara la informacion del jugador:
format(Query,sizeof(Query),"UPDATE `USERS` SET SCORE = '%d', CASH = '%d', ADMINLEVEL = '%d' WHERE `NAME` = '%s'",
GetPlayerScore(playerid), // Puntos del jugador.
GetPlayerMoney(playerid), // Dinero del jugador.
Bit16_Get(g_AdminLevel, playerid), // Accesslevel del jugador.
DB_Escape(name)); // Desconexion del jugador.
// Lectura de la desconexion:
db_query(Database, Query);
Bit1_Set(g_PlayerLogged, playerid, false);
}
return 1;
}
public OnPlayerSpawn(playerid)
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}
public OnVehicleSpawn(vehicleid)
{
return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}
public OnPlayerText(playerid, text[])
{
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
return 1;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}
public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}
public OnRconCommand(cmd[])
{
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
return 1;
}
public OnObjectMoved(objectid)
{
return 1;
}
public OnPlayerObjectMoved(playerid, objectid)
{
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
return 1;
}
public OnVehicleMod(playerid, vehicleid, componentid)
{
return 1;
}
public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
return 1;
}
public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
return 1;
}
public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}
public OnPlayerExitedMenu(playerid)
{
return 1;
}
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
return 1;
}
public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}
public OnPlayerUpdate(playerid)
{
return 1;
}
public OnPlayerStreamIn(playerid, forplayerid)
{
return 1;
}
public OnPlayerStreamOut(playerid, forplayerid)
{
return 1;
}
public OnVehicleStreamIn(vehicleid, forplayerid)
{
return 1;
}
public OnVehicleStreamOut(vehicleid, forplayerid)
{
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
//--------------------------------------------------------
// Sistema Mysql:
//--------------------------------------------------------
// Nuevas variables:
new Query[ 256 ];
new DBResult: Result;
new name[ MAX_PLAYER_NAME ];
new ip[ 16 ];
GetPlayerName(playerid, name, sizeof(name));
GetPlayerIp(playerid, ip, sizeof(ip));
// Codigo de los dialogos (Usuario Registrado):
if (dialogid == 1)
{
// El jugador esta registrado:
if (response)
{
// Lectura del usuario en la base de datos:
format(Query, sizeof(Query), "SELECT * FROM `USERS` WHERE `NAME` = '%s' AND `PASSWORD` = '%s'", DB_Escape(name), DB_Escape(inputtext));
Result = db_query(Database, Query);
// Conexion realizada correctamente:
if (db_num_rows(Result))
{
// Nueva variable:
new Field[ 20 ];
// Carga el score del jugador:
db_get_field_assoc(Result, "SCORE", Field, 30);
SetPlayerScore(playerid, strval(Field));
// Carga el dinero del jugador:
db_get_field_assoc(Result, "CASH", Field, 30);
GivePlayerMoney(playerid, strval(Field));
// Carga el accesslevel del jugador:
db_get_field_assoc(Result, "ADMINLEVEL", Field, 30);
Bit16_Set(g_AdminLevel, playerid, strval(Field));
// El jugador loguea al servidor:
Bit1_Set(g_PlayerLogged, playerid, true);
// Mensaje de logueo en la consola del servidor:
SendClientMessage(playerid, -1, "Conexion realizada correctamente, disfrute! ");
}
// La contraseсa indicada es incorrecta:
else
{
// Mensaje de aviso de la contraseсa incorrecta:
format(Query, sizeof(Query), "Actualmente ya os encontrais registrado, por favor indiquenos su contraseсa para loguear.", name, playerid);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "SISTEMA DE LOGUEO", Query, "Conectar", "Salir");
// Show the player the wrong password message.
SendClientMessage(playerid, -1, "Contraseсa incorrecta , intentelo de nuevo.");
}
// Actualizando base de datos:
db_free_result(Result);
}
else
{
return Kick(playerid);
}
// Codigo de los dialogos (Usuario No Registrado):
if (dialogid == 0)
{
// El jugador no esta registrado:
if (response)
{
// Sistema de seguridad del nombre:
if (strlen(inputtext) > 24 || strlen(inputtext) < 3)
{
// Mensaje de aviso por el uso de un nombre no valido:
format(Query, sizeof(Query), "Actualmente ya os encontrais registrado, por favor indiquenos su contraseсa para loguear.", name, playerid);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "SISTEMA DE LOGUEO", Query, "Conectar", "Salir");
// Send a message about the length of characters used for their password.
SendClientMessage(playerid, -1, "ERROR: Vuestra contraseсa ha de tener entre 3 - 24 caracteres!");
}
else
{
// Creando en la base de datos al nuevo usuario:
format(Query, sizeof(Query), "INSERT INTO `USERS` (`NAME`, `PASSWORD`, `IP`, `SCORE`, `CASH`, `ADMINLEVEL`) VALUES('%s','%s','%s', '0', '0', '0')", DB_Escape(name), DB_Escape(inputtext), DB_Escape(ip));
db_query(Database, Query);
// El jugador loguea al servidor:
Bit1_Set(g_PlayerLogged, playerid, true);
// Valores iniciales del jugador:
GivePlayerMoney(playerid, 500); // Dinero inicial.
SetPlayerScore(playerid, 0); // Score "0"
// Mensaje de conexion con el servidor:
SendClientMessage(playerid, -1, "Felicidades! Habeis creado una cuenta en nuestro servidor, que comienze vuestra aventura!");
}
}
else
{
return Kick(playerid);
}
}
}
return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
//----------------------------------------------------------
// CODIGO ADICIONAL DEL SCRIPT:
//----------------------------------------------------------
// Sistema Mysql:
stock DB_Escape(text[])
{
new
ret[80 * 2],
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;
}
Work, but no save info player is connected: is connected with the assigned database (checked).