[Ayuda] Como guardar posicion al desloguear (MySQL)
#1

Buenas.
Me gustaria que me echaran una mano para saber como hago para guardar las posiciones al desloguear, y a poder ser que me orientasen un poco sobre como aсadir mas columnas a la base de datos para guardar mas cosas del server.
El gamemode que estoy haciendo es este:

http://pastebin.com/NHvMBYp5

PD: Al cargar el server la consola me tira un error que pone : Script: [gamemodes\migamemode.amx]: Run time error 20: "Invalid index parameter (bad entry point)". їA que se debe?
PD2: Muchas gracias.
Reply
#2

Para el error de la consola:

Код:
main(){}
Abajo de los includes.

Para agregar mбs datos en las tablas tenйs 2 posibilidades, desde la consola de MySQL o desde phpMyAdmin.

Desde la consola:

pawn Код:
ALTER table nombre_tabla ADD Campo tipo_dato
En el caso tuyo tendrнa que ser:

pawn Код:
ALTER table playerdata ADD pos_x float
ALTER table playerdata ADD pos_y float
ALTER table playerdata ADD pos_z float
Y luego:

pawn Код:
public OnPlayerDisconnect(playerid, reason)
{
    //Sistema de registro y db MySQL.
    if(Logged[playerid] == 1)
    {
        new score = GetPlayerScore(playerid);
        new money = GetPlayerMoney(playerid);
        new Float:pos[3];
        GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
        new query[200], pname[24];
        GetPlayerName(playerid, pname, 24);
        format(query, sizeof(query), "UPDATE playerdata SET score=%d, money=%d, pos_x=%f, pos_y=%f, pos_z=%f WHERE user='%s'", score, money, pos[0], pos[1], pos[2], pname);
        mysql_query(query);
    }
    return 1;
}
Reply
#3

Oh! gracias por la pronta respuesta no uso phpmyadmin uso navicat de todos modos lo de ip money y tal lo crea solo desde el gamemode me gustaria saber como hacer para hacerlo desde ahi.
Reply
#4

Si quieres que te guarde la posicion X Y Z tienes que hacer las columnas en la tabla de la base de datos, el gamemode no te guardara la posicion o talvez al momento si pero cuando te desconectes no, de todos modos en el gamemode seria algo asi:

pawn Код:
enum pInfo
{
    Float:pPosX, //posicion x
    Float:pPosY, //posicion y
    Float:pPosZ, //posicion z
    Float:pPosA // angulo
}

new PlayerInfo[MAX_PLAYERS][pInfo];


CMD:guardarpos(playerid, params[])
{
    new Float:x, Float:y, Float:z, Float:a;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);
    PlayerInfo[playerid][pPosX] = x;
    PlayerInfo[playerid][pPosY] = y;
    PlayerInfo[playerid][pPosZ] = z;
    PlayerInfo[playerid][pPosA] = a;
    return 1;
}

CMD:irpos(playerid, params[])
{
    SetPlayerPos(playerid, PlayerInfo[playerid][pPosX], PlayerInfo[playerid][pPosY], PlayerInfo[playerid][pPosZ]);
    SetPlayerFacingAngle(playerid, PlayerInfo[playerid][pPosA]);
    return 1;
}
Eso sin crear la columna en la tabla de la base de datos. Bueno no he testeado.
Reply
#5

El plugin mysql tiene una opcion para que cree la columna si no existe, lo que pasa es que el tutorial que segui estaba en ingles y no me entere muy bien... (bastante que anda), me gustaria aprender que es lo que tengo que hacer cada vez que quiera crear una columna para almacenar datos desde el gamemode como lo hace con money,IP,user, etc. Y me seria muy util si es con un ejemplo para que guarde la ultima posicion
PD:Error de consola solucionado gracias
PD2:Este es el tutorial https://sampforum.blast.hk/showthread.php?tid=159785
Reply
#6

Cambiб:

pawn Код:
mysql_query("CREATE TABLE IF NOT EXISTS playerdata(user VARCHAR(24), password VARCHAR(40), score INT(20), money INT(20), IP VARCHAR(16) )");
Por

pawn Код:
mysql_query("CREATE TABLE IF NOT EXISTS playerdata(user VARCHAR(24), password VARCHAR(40), score INT(20), money INT(20), IP VARCHAR(16), pos_x FLOAT, pos_y FLOAT, pos_z FLOAT)");
Y fijate.
Reply
#7

Hola de nuevo.
Tube un pequeсo problema y es que no me creaba las columnas nuevas (Solucionado borrando la auntigua tabla).
Bien ahora me guarda las cordenadas pero no spawnea donde estaba, їcomo hago para eso?
pawn Код:
public OnPlayerSpawn(playerid)
{
//Sistema de registro y db MySQL.
if(MoneyGiven[playerid] != -1)
{
GivePlayerMoney(playerid, MoneyGiven[playerid]);
MoneyGiven[playerid] = -1;
}
return 1;
}
їQue debo de escribir aqui?
Muchas gracias al menos ya aprendi como hacer que cree la tabla con las columnas nuevas que necesite.
PD:їLa funcion GivePlayerMoney es para que me de el dinero que tenia antes de desconectar o para que?
Reply
#8

pawn Код:
enum sInfo
{
    Float:x,
    Float:y,
    Float:z,
    EsMuerte
};
new SpawnInfo[MAX_PLAYERS][sInfo]; // Esto arriba de todo.

//Y de acб para abajo remplazб:
stock MySQL_Login(playerid)
{
    new query[300], pname[24], savingstring[20];
    GetPlayerName(playerid, pname, 24);
    format(query, sizeof(query), "SELECT * FROM playerdata WHERE user = '%s'", pname);
    mysql_query(query);
    mysql_store_result();
    while(mysql_fetch_row_format(query,"|"))
    {
        mysql_fetch_field_row(savingstring, "score"); SetPlayerScore(playerid, strval(savingstring));
        mysql_fetch_field_row(savingstring, "money"); MoneyGiven[playerid] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "pos_x"); SpawnInfo[playerid][x] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "pos_y"); SpawnInfo[playerid][y] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "pos_z"); SpawnInfo[playerid][z] = strval(savingstring);
    }
}

public OnPlayerSpawn(playerid)
{
    if(SpawnInfo[playerid][EsMuerte]) SetPlayerPos(playerid, SpawnInfo[playerid][x], SpawnInfo[playerid][y], SpawnInfo[playerid][z]);
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    if(SpawnInfo[playerid][EsMuerte] != 0)
    {
        SpawnInfo[playerid][EsMuerte] = 1;
    }
    return 1;
}
Reply
#9

Tengo una duda en

pawn Код:
public OnPlayerSpawn(playerid)
{
    //Sistema de registro y db MySQL.
    if(MoneyGiven[playerid] != -1)
    {
        GivePlayerMoney(playerid, MoneyGiven[playerid]);
        MoneyGiven[playerid] = -1;
    }
    return 1;
}
Dejo solo lo que tu me has puesto?? No perdere entonces la opcion de que guarde el dinero?? O simplemente aсado esta linea??

pawn Код:
if(SpawnInfo[playerid][EsMuerte]) SetPlayerPos(playerid, SpawnInfo[playerid][x], SpawnInfo[playerid][y], SpawnInfo[playerid][z]);
Reply
#10

Aсadi esa linea. Asн:

pawn Код:
public OnPlayerSpawn(playerid)
{
linea esa
lo que siga...
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)