[ayuda] problema con sistema de cuentas mysqlr7
#1

use este tutorial https://sampforum.blast.hk/showthread.php?tid=435485, todo funciona bien mentras esta online el servidor, carga y guarda datos, pero lo apago y lo prendo para probar cosas nuevas y aparece con 0 de vida y posxyz 0,0,0



aca vuelvo a entrar y compruebo que guarda y carga las coordenadas.


aca cierro el servidor


aca lo vuelvo a abrir


aca entro para comprobar si guardo y cargo correctamente y pasa esto...


Reply
#2

Debes poner en la funcion de cargar la cuenta un SetPlayerPos(playerid, x, y, z); de la cuenta, osea, algo mбs o menos asн:
Quote:

SetPlayerPos(playerid, Cuenta[playerid][PosX], Cuenta[playerid][PosY], Cuenta[playerid][PosZ], Cuenta[playerid][Interior], Cuenta[playerid][VWorld]);

Obviamente al spawnear el jugador luego de loguear claro no... entonces eso deberнa de funcionar...
Y la vida lo mismo, si tu vida se guarda correctamente, al cargar nuevamente la cuenta y loguear debes poner un GivePlayerHealth(playerid, Cuenta[playerid][Vida]);
o el chaleco y viceversa, no se va a actualizar solo si tu no lo haces prбcticamente.
Reply
#3

este es el codigo miralo donde va exactamente en ondialog response o en onqueryfinish la verdad no entiendo eso..
Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    new string[256];
    new pName[24], Query[256]; GetPlayerName(playerid, pName, 24);
    switch(dialogid)
    {
        case LOGIN:
        {
            if(!response)
            {
                Kick(playerid);
            }
            if(strcmp(PlayerInfo[playerid][pPassword], inputtext, true, 128) == 0)
            {
                format(Query, sizeof(Query), "SELECT * FROM `usuarios` WHERE `Nombre` = '%s'", pName);
                mysql_function_query(Conecction, Query, true, "OnQueryFinish", "ii", 1, playerid);
                SetSpawnInfo(playerid,0,0,PlayerInfo[playerid][pPosx], PlayerInfo[playerid][pPosy], PlayerInfo[playerid][pPosz],0,0,0,0,0,0,0);
  	 			SetPlayerHealth(playerid, PlayerInfo[playerid][pVida]);
                SetPlayerArmour(playerid, PlayerInfo[playerid][pChaleco]);
                SetPlayerScore(playerid, PlayerInfo[playerid][pScore]);
                SpawnPlayer(playerid);
            }
            else
            {
                SendClientMessage(playerid, -1, "CONTRASEСA INCORRECTA");
                Kick(playerid);
            }
        }
        case REGISTRO:
        {
            if(!response)
            {
                SendClientMessage(playerid, -1, "Kicked");
                Kick(playerid);
            }
            if(response)
            {
                if(!strlen(inputtext))
                {
                    Kick(playerid);
                }
                new string2[128];
                format(string2, sizeof(string2), "%s", inputtext); PlayerInfo[playerid][pPassword] = string2;
                format(Query, sizeof(Query), "INSERT INTO `usuarios` (Nombre, Password) VALUES ('%s', '%s')",pName, PlayerInfo[playerid][pPassword]);
                mysql_function_query(Conecction, Query, true, "OnQueryFinish", "ii", 0, playerid);
                format(string, sizeof(string), "Has registrado el personaje %s en nuestro servidor.\n\nAhora inicia sesiуn", pName);
                ShowPlayerDialog(playerid, LOGIN, DIALOG_STYLE_PASSWORD,"Iniciar sesiуn",string,"Enviar","Salir");
            }
        }
    }
    return 1;
}

forward OnQueryFinish(resultid, extraid, ConnectionHandle);
public OnQueryFinish(resultid, extraid, ConnectionHandle)
{
    new Rows, Field, string[256];
    if(resultid != 0)
    {
        cache_get_data(Rows, Field);
    }
    switch(resultid)
    {
        case 1:
        {
            if(Rows == 1)
            {
                new content[20];
                cache_get_field_content(0, "Password", PlayerInfo[extraid][pPassword]);
                cache_get_field_content(0, "Score", content); PlayerInfo[extraid][pScore] = strval(content);
                cache_get_field_content(0, "Vida", content); PlayerInfo[extraid][pVida] = floatstr(content);
                cache_get_field_content(0, "Chaleco", content); PlayerInfo[extraid][pChaleco] = floatstr(content);
                cache_get_field_content(0, "posX", content); PlayerInfo[extraid][pPosx] = floatstr(content);
                cache_get_field_content(0, "posY", content); PlayerInfo[extraid][pPosy] = floatstr(content);
                cache_get_field_content(0, "posZ", content); PlayerInfo[extraid][pPosz] = floatstr(content);
                SetSpawnInfo(extraid,0,0, PlayerInfo[extraid][pPosx],PlayerInfo[extraid][pPosy],PlayerInfo[extraid][pPosz],0.0,0,0,0,0,0,0);
                SetPlayerScore(extraid,  PlayerInfo[extraid][pScore]);
                SetPlayerArmour(extraid, PlayerInfo[extraid][pChaleco]);
            }
            else if(!Rows)
            {
               //
            }
        }
        case 2:
        {
            if(Rows == 1)
            {
                new pName[24]; GetPlayerName(extraid, pName, 24);
                cache_get_field_content(0, "Password", PlayerInfo[extraid][pPassword]);
                format(string, sizeof(string), "El personaje %s estб registrado en la base de datos. Pon los datos para iniciar sesiуn:", pName);
                ShowPlayerDialog(extraid, LOGIN, DIALOG_STYLE_PASSWORD,"Login",string,"Enviar","Salir");
            }
            else if(!Rows)
            {
                new pName[24]; GetPlayerName(extraid, pName, 24);
                format(string, sizeof(string), "El jugador %s no estб registrado en el servidor, pon aquн la contraseсa para registrarlo:", pName);
                ShowPlayerDialog(extraid, REGISTRO, DIALOG_STYLE_PASSWORD,"Registro:",string,"Enviar","Salir");
            }
        }
    }
    return 1;
}
Reply
#4

Quote:
Originally Posted by Darkay
Посмотреть сообщение
este es el codigo miralo donde va exactamente en ondialog response o en onqueryfinish la verdad no entiendo eso..
Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    new string[256];
    new pName[24], Query[256]; GetPlayerName(playerid, pName, 24);
    switch(dialogid)
    {
        case LOGIN:
        {
            if(!response)
            {
                Kick(playerid);
            }
            if(strcmp(PlayerInfo[playerid][pPassword], inputtext, true, 128) == 0)
            {
                format(Query, sizeof(Query), "SELECT * FROM `usuarios` WHERE `Nombre` = '%s'", pName);
                mysql_function_query(Conecction, Query, true, "OnQueryFinish", "ii", 1, playerid);
                SetSpawnInfo(playerid,0,0,PlayerInfo[playerid][pPosx], PlayerInfo[playerid][pPosy], PlayerInfo[playerid][pPosz],0,0,0,0,0,0,0);
  	 			SetPlayerHealth(playerid, PlayerInfo[playerid][pVida]);
                SetPlayerArmour(playerid, PlayerInfo[playerid][pChaleco]);
                SetPlayerScore(playerid, PlayerInfo[playerid][pScore]);
                SpawnPlayer(playerid);
            }
            else
            {
                SendClientMessage(playerid, -1, "CONTRASEСA INCORRECTA");
                Kick(playerid);
            }
        }
        case REGISTRO:
        {
            if(!response)
            {
                SendClientMessage(playerid, -1, "Kicked");
                Kick(playerid);
            }
            if(response)
            {
                if(!strlen(inputtext))
                {
                    Kick(playerid);
                }
                new string2[128];
                format(string2, sizeof(string2), "%s", inputtext); PlayerInfo[playerid][pPassword] = string2;
                format(Query, sizeof(Query), "INSERT INTO `usuarios` (Nombre, Password) VALUES ('%s', '%s')",pName, PlayerInfo[playerid][pPassword]);
                mysql_function_query(Conecction, Query, true, "OnQueryFinish", "ii", 0, playerid);
                format(string, sizeof(string), "Has registrado el personaje %s en nuestro servidor.\n\nAhora inicia sesiуn", pName);
                ShowPlayerDialog(playerid, LOGIN, DIALOG_STYLE_PASSWORD,"Iniciar sesiуn",string,"Enviar","Salir");
            }
        }
    }
    return 1;
}

forward OnQueryFinish(resultid, extraid, ConnectionHandle);
public OnQueryFinish(resultid, extraid, ConnectionHandle)
{
    new Rows, Field, string[256];
    if(resultid != 0)
    {
        cache_get_data(Rows, Field);
    }
    switch(resultid)
    {
        case 1:
        {
            if(Rows == 1)
            {
                new content[20];
                cache_get_field_content(0, "Password", PlayerInfo[extraid][pPassword]);
                cache_get_field_content(0, "Score", content); PlayerInfo[extraid][pScore] = strval(content);
                cache_get_field_content(0, "Vida", content); PlayerInfo[extraid][pVida] = floatstr(content);
                cache_get_field_content(0, "Chaleco", content); PlayerInfo[extraid][pChaleco] = floatstr(content);
                cache_get_field_content(0, "posX", content); PlayerInfo[extraid][pPosx] = floatstr(content);
                cache_get_field_content(0, "posY", content); PlayerInfo[extraid][pPosy] = floatstr(content);
                cache_get_field_content(0, "posZ", content); PlayerInfo[extraid][pPosz] = floatstr(content);
                SetSpawnInfo(extraid,0,0, PlayerInfo[extraid][pPosx],PlayerInfo[extraid][pPosy],PlayerInfo[extraid][pPosz],0.0,0,0,0,0,0,0);
                SetPlayerScore(extraid,  PlayerInfo[extraid][pScore]);
                SetPlayerArmour(extraid, PlayerInfo[extraid][pChaleco]);
            }
            else if(!Rows)
            {
               //
            }
        }
        case 2:
        {
            if(Rows == 1)
            {
                new pName[24]; GetPlayerName(extraid, pName, 24);
                cache_get_field_content(0, "Password", PlayerInfo[extraid][pPassword]);
                format(string, sizeof(string), "El personaje %s estб registrado en la base de datos. Pon los datos para iniciar sesiуn:", pName);
                ShowPlayerDialog(extraid, LOGIN, DIALOG_STYLE_PASSWORD,"Login",string,"Enviar","Salir");
            }
            else if(!Rows)
            {
                new pName[24]; GetPlayerName(extraid, pName, 24);
                format(string, sizeof(string), "El jugador %s no estб registrado en el servidor, pon aquн la contraseсa para registrarlo:", pName);
                ShowPlayerDialog(extraid, REGISTRO, DIALOG_STYLE_PASSWORD,"Registro:",string,"Enviar","Salir");
            }
        }
    }
    return 1;
}
Compaсero creo que debes poner el codigo que te han dicho mas arriba aqui

Код:
public OnPlayerSpawn(playerid)
debajo de {

Este callback es una vez que el usuario ha spawneado se le hacen ciertas funciones, metiendo el codigo que el compaсero ha dicho mas arriba no deberias tener problema alguno.
Reply
#5

En ninguno de dos, en la funciуn de spawnear el jugador o en OnPlayerSpawn, la que uses.
Reply
#6

lo puse asi y ahora ni cargan las coordenadas si salgo y entro (sin cerrar el sv) , por lo que vi si seteo la pos en el onplayerspawn no guarda, pero sigue dando el error principal que reinicio el sv y carg en 0,0,0, si vez los comentarios del treadh de este sistema de cuentas a algunos les pasa ese mismo error algunos lo solucionaron pero no dejaron solucion


Код:
public OnPlayerSpawn(playerid)
{
    TextDrawShowForPlayer(playerid, Rojo);//Funciуn que es que aparece el textdraw al Spawnear
   	TextDrawShowForPlayer(playerid, Rojo1);
   	TextDrawShowForPlayer(playerid, Tnw);
   	TextDrawShowForPlayer(playerid, Tnw2);

 	//SetPlayerPos(playerid, -1982.2260,137.6877,27.6875);
 	SetPlayerPos(playerid, PlayerInfo[playerid][pPosx], PlayerInfo[playerid][pPosy], PlayerInfo[playerid][pPosz]);
  	//SetPlayerFacingAngle(playerid, 87.2715);
   	SetPlayerSkin(playerid, 60);
    //GivePlayerMoney(playerid, 20000);
    SetPlayerHealth(playerid, PlayerInfo[playerid][pVida]);
    

    return 1;
}
Reply
#7

Dйjalo todo como estaba antes, el problema es que el campo en la db tiene un nombre diferente al que estбs usando en el gm.
Reply
#8

Te equivocas, es exactamente el mismo, eso fue lo primero que comprobe
Reply
#9

Pasa la funciуn donde se guardan los datos antes de desconectarse.
Reply
#10

pero mira, guarda y carga bien el problema es al reiniciar el servidor, cuando lo apago y lo prendo se descontrola el spawn y la vida todo en 0,0,0
Код:
forward SaveAccount(playerid);public SaveAccount(playerid)
{
    new query[200];GetPlayerPos(playerid, PlayerInfo[playerid][pPosx], PlayerInfo[playerid][pPosy], PlayerInfo[playerid][pPosz]);
    new pName[24]; GetPlayerName(playerid, pName, 24); GetPlayerHealth(playerid, PlayerInfo[playerid][pVida]), GetPlayerArmour(playerid, PlayerInfo[playerid][pChaleco]);
    format(query, 200, "UPDATE `usuarios` SET `Vida`='%f', `Chaleco`='%f', `Admin`='%d', `Score`='%d', `Posx`='%f', `Posy`='%f', `Posz`='%f' WHERE `Nombre`='%s'", PlayerInfo[playerid][pVida], PlayerInfo[playerid][pChaleco],
    PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][pScore], PlayerInfo[playerid][pPosx], PlayerInfo[playerid][pPosy], PlayerInfo[playerid][pPosz], pName);
    mysql_function_query(Conecction, query, true, "OnQueryFinish", "ii", 0, playerid);
    return 1;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)