[Ayuda] Guardar posiciуn del jugador
#1

Buenas,

Querнa hacer un sistema guardado de posiciуn del jugador, para cuando se desconectara, se guardara su posiciуn; ya que siempre que se conecta, cae al vacнo.

He creado estas variables globales:

pawn Код:
new Float:GlobalX, Float:GlobalY, Float:GlobalZ, Float:GlobalAng;
Luego, he creado un timer para que cada 10 milisegundos, revise su posiciуn:

pawn Код:
SetTimer("SavePlayerPos",10, true);

//funciуn:

forward SavePlayerPos(playerid);
public SavePlayerPos(playerid)
{
    GetPlayerPos(playerid, GlobalX,GlobalY,GlobalZ);
    GetPlayerFacingAngle(playerid, GlobalAng);
    PlayerInfo[playerid][pX] = GlobalX;
    PlayerInfo[playerid][pY] = GlobalY;
    PlayerInfo[playerid][pZ] = GlobalZ;
    PlayerInfo[playerid][pAngl] = GlobalAng;
    return 1;
}
En el enum del pInfo, puse esto:

pawn Код:
pX,
    pY,
    pZ,
    pAngl
Luego en la base de datos, en LoadUser_data, he puesto:

pawn Код:
INI_Float("pX",PlayerInfo[playerid][pX] = GlobalX); //Lнnia 2745
    INI_Float("pY",PlayerInfo[playerid][pY] = GlobalY); //Lнnia 2746
    INI_Float("pZ",PlayerInfo[playerid][pZ] = GlobalZ); //Lнnia 2747
    INI_Float("pAngl",PlayerInfo[playerid][pAngl] = GlobalAng); //Lнnia 2748
En el guardado del personaje, puse esto:

pawn Код:
INI_WriteFloat(File,"pX",PlayerInfo[playerid][pX]); //Lнnia 3083
    INI_WriteFloat(File,"pY",PlayerInfo[playerid][pY]); //Lнnia 3084
    INI_WriteFloat(File,"pZ",PlayerInfo[playerid][pZ]); //Lнnia 3085
    INI_WriteFloat(File,"pAngl",PlayerInfo[playerid][pAngl]); //Lнnia 3086
Y en OnPlayerSpawn, puse esto:

pawn Код:
SetPlayerPos(playerid, PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ]);
Pero cuando lo compilo, me dб estos warning:
pawn Код:
(2745) : warning 213: tag mismatch
(2746) : warning 213: tag mismatch
(2747) : warning 213: tag mismatch
(2748) : warning 213: tag mismatch
(3083) : warning 213: tag mismatch
(3084) : warning 213: tag mismatch
(3085) : warning 213: tag mismatch
(3086) : warning 213: tag mismatch

8 Warnings.
Ya tuve anteriormente problemas con los Tags del INI, pero esta vez, no sй que hacer para solucionar estos warnings...

Espero sus respuestas, gracias de antemano.
Reply
#2

No sera asн? las posiciones guardan siempre numeros con coma

pawn Код:
Float:pX,
    Float:pY,
    Float:pZ,
    Float:pAngl
Reply
#3

Quote:
Originally Posted by Pipe98
Посмотреть сообщение
No sera asн? las posiciones guardan siempre numeros con coma

pawn Код:
Float:pX,
    Float:pY,
    Float:pZ,
    Float:pAngl
Gracias, ahora me compila bien; ya sabнa que me dejaba algъn tag en alguna parte...

Pero cuando miro la base de datos del jugador, no aparecen guardadas las variables (pX, pY, pZ y pAngl) y teoricamente estбn puestas en el INI_WriteFloat.

їA quй se debe?
Reply
#4

Esto estб muy mal...

pawn Код:
SetTimer("SavePlayerPos", 10, true);
Para quй cada 10 milisegundos? es demaciada demanda para una funciуn que no necesita tanto, con que actualizes cada 10 segundos anda bien, ademбs podrнas actualizarla al desconectarse el jugador nada mбs... Tampoco funcionarнa asн el timer, debe ser asн:

pawn Код:
SetTimerEx("SavePlayerPos", 10, true, "i", playerid);
Acб tambiйn, no es necesario crear una variable para almacenar las coordenadas y volver a almacenar esas coordenadas de X variable en otra variable...

pawn Код:
forward SavePlayerPos(playerid);
public SavePlayerPos(playerid)
{
    GetPlayerPos(playerid, GlobalX,GlobalY,GlobalZ);
    GetPlayerFacingAngle(playerid, GlobalAng);
    PlayerInfo[playerid][pX] = GlobalX;
    PlayerInfo[playerid][pY] = GlobalY;
    PlayerInfo[playerid][pZ] = GlobalZ;
    PlayerInfo[playerid][pAngl] = GlobalAng;
    return 1;
}
Mбs sencillo:

pawn Код:
forward SavePlayerPos(playerid);
public SavePlayerPos(playerid)
{
    GetPlayerPos(playerid, PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ]);
    GetPlayerFacingAngle(playerid, PlayerInfo[playerid][pAngl]);
    return 1;
}
Y en el cargado:

pawn Код:
INI_Float("pX", PlayerInfo[playerid][pX]); // Aquн estб fijando el valor de la variable "pX" en el valor de "pX" del archivo
    INI_Float("pY", PlayerInfo[playerid][pY]); // Aquн estб fijando el valor de la variable "pY" en el valor de "pY" del archivo
    INI_Float("pZ", PlayerInfo[playerid][pZ]); // Aquн estб fijando el valor de la variable "pZ" en el valor de "pZ" del archivo
    INI_Float("pAngl", PlayerInfo[playerid][pAngl]); // Aquн estб fijando el valor de la variable "pAngl" en el valor de "pAngl" del archivo
Reply
#5

pawn Код:
new Float:X, Float:Y, Float:Z, Float:A;
GetPlayerPos(playerid, X, Y, Z);
GetPlayerFacingAngle(playerid, A);
INI_WriteFloat(File,"pX",X);
INI_WriteFloat(File,"pY",Y);
INI_WriteFloat(File,"pZ",Z);
INI_WriteFloat(File,"pAngl",A);
intentaste asi?
Reply
#6

Lo he hecho como me ha dicho LiMPiTo y ahora se me guardan en la base de datos.

El problema es que cuando se conecta, no pone la posiciуn que se habнa guardado sino que cae al vacнo...
He probado de poner:
pawn Код:
SetPlayerPos(playerid, PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ]);
en OnPlayerConnect, en OnPlayerSpawn y en la funciуn del dialog cuando se loguea pero sigue sin posicionarse.
Reply
#7

Quote:
Originally Posted by MrNatrio
Посмотреть сообщение
Lo he hecho como me ha dicho LiMPiTo y ahora se me guardan en la base de datos.

El problema es que cuando se conecta, no pone la posiciуn que se habнa guardado sino que cae al vacнo...
He probado de poner:
pawn Код:
SetPlayerPos(playerid, PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ]);
en OnPlayerConnect, en OnPlayerSpawn y en la funciуn del dialog cuando se loguea pero sigue sin posicionarse.
No le veo nada mala a eso
Reply
#8

Usa SetSpawnInfo.
Reply
#9

Quote:
Originally Posted by [J]ulian
Посмотреть сообщение
Tambiйn lo he probado y sigue cayйndose al vacнo...
Reply
#10

Has un printf.
pawn Код:
printf("%f - %f - %f", PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ]);
A ver si se cargan los datos.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)