GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: bencarter007 - 2014. július 10. - 17:14:08

Cím: GetPlayerPos lehetetlen koordinátákat ad
Írta: bencarter007 - 2014. július 10. - 17:14:08
Mikor kilép a játékos, lekérnem az adatokat, hogy aztán ugyanoda spawnoljon,
de ilyen lehetetlen koordinátákat ad meg:
PosX=-994438464.000000
PosY=1159858944.000000
PosZ=1113545856.000000
Cím: GetPlayerPos lehetetlen koordinátákat ad
Írta: jana4 - 2014. július 10. - 17:21:17
Bemásolnád kérlek a kódot? Ebbõl sokat nem tudtunk meg.
Cím: GetPlayerPos lehetetlen koordinátákat ad
Írta: bencarter007 - 2014. július 10. - 17:22:35
stock SaveData(playerid)//adatok mentése.
{
new string[200];
format(string,sizeof(string),\"Users/%s.ini\",pName(playerid));
new Float:X,Float:Y,Float:Z;
GetPlayerPos(playerid,X,Y,Z);
    dfile_Open(string);
    dfile_MultiSet(\"fff\",
      \"PosX\",X,
      \"PosY\",Y,
      \"PosZ\",Z
    );
    dfile_SaveFile();
    dfile_CloseFile();
return true;
}
Cím: GetPlayerPos lehetetlen koordinátákat ad
Írta: Dfoglalo - 2014. július 10. - 17:26:01
Nem igazán vagyok otthon a \'dfile\'-ban, de régebbi dinis tapasztalatokból gondolva nem kéne MultiSet helyett MultiFloat, vagy ilyesmi? Ha ilyen nincs benne, bocsi a hülyeségért.
Cím: GetPlayerPos lehetetlen koordinátákat ad
Írta: bencarter007 - 2014. július 10. - 17:34:23
ez szerint ennek tökéletesen mûködnie kéne
http://forum.sa-mp.com/showthread.php?t=218026

Dupla hozzászólás automatikusan összefûzve. ( 2014. július 10. - 18:57:27 )

rájöttem, hogy ezeket a koordinátákat csak a beolvasás után menti igy el.
szóval rosszul olvassa be. de ebben mit lehet rosszul beolvasni?
 
stock LoadData(playerid)
{
    new string[200];
format(string,sizeof(string),\"Users/%s.ini\",pName(playerid));
    dfile_Open(string);
dfile_MultiGet(\"fff\",
      \"PosX\",pInfo[playerid][PosX],
      \"PosY\",pInfo[playerid][PosY],
      \"PosZ\",pInfo[playerid][PosZ]
    );
dfile_CloseFile();
SetPlayerPos(playerid,pInfo[playerid][PosX],pInfo[playerid][PosY],pInfo[playerid][PosZ]);
return true;
}
Cím: GetPlayerPos lehetetlen koordinátákat ad
Írta: jana4 - 2014. július 10. - 19:08:57
Nálam teljesen jó, dini-vel vetettem össze.
 

#include a_samp
#include dini
#include dfile
public OnPlayerDisconnect(playerid, reason)
{
new Float:pos[3], string[256], string2[256];
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
format(string, sizeof(string), \"TesztDFILE/%s.ini\", pName(playerid)); // dfile
format(string2, sizeof(string2), \"TesztDINI/%s.ini\", pName(playerid)); // dini
dfile_Create(string); // Létrehozom
dfile_Open(string); // Megnyitom
    dfile_MultiSet(\"fff\", \"PosX\", pos[0], \"PosY\", pos[1], \"PosZ\", pos[2]); // Beleírom
    dfile_SaveFile(); // Elmentem
    dfile_CloseFile(); // Bezárom
   
    dini_Create(string2);
    dini_FloatSet(string2, \"PosX\", pos[0]);
    dini_FloatSet(string2, \"PosY\", pos[1]);
    dini_FloatSet(string2, \"PosZ\", pos[2]);
return 1;
}
stock pName(playerid)
{
new n[24];
GetPlayerName(playerid, n, 24);
return n;
}
Cím: GetPlayerPos lehetetlen koordinátákat ad
Írta: ZyZu. - 2014. július 10. - 19:27:01
Úgy tudom elérhetõ a dfileban is a float olvasás illetve mentés.
dfile_WriteFloat

dfile_ReadFloat
Cím: GetPlayerPos lehetetlen koordinátákat ad
Írta: bencarter007 - 2014. július 10. - 19:32:44
érdekes módon tökéletesen elmenti, de mikor betölti, már mintha szorozta volna egy összevissza értékkel...
Cím: GetPlayerPos lehetetlen koordinátákat ad
Írta: jana4 - 2014. július 10. - 20:06:47
Rájöttem a hibára, rossz a MultiGet.

Tessék, a javított változat:

 

stock LoadData(playerid)
{
    new string[200];
        format(string,sizeof(string),\"Users/%s.ini\",pName(playerid));
    dfile_Open(string);
     pInfo[playerid][PosX] = dfile_ReadFloat(\"PosX\");
     pInfo[playerid][PosY] = dfile_ReadFloat(\"PosY\");
     pInfo[playerid][PosZ] = dfile_ReadFloat(\"PosZ\");
     dfile_CloseFile();
        SetPlayerPos(playerid, pInfo[playerid][PosX], pInfo[playerid][PosY], pInfo[playerid][PosZ]);
        return 1;
}

 


Tesztelésre használt kód:
 

#include a_samp
#include dini
#include dfile
public CallMePlease(playerid);
public OnPlayerSpawn(playerid)
{
SetTimerEx(\"CallMePlease\", 4000, false, \"i\", playerid);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new Float:pos[3], string[256], string2[256];
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
format(string, sizeof(string), \"TesztDFILE/%s.ini\", pName(playerid)); // dfile
format(string2, sizeof(string2), \"TesztDINI/%s.ini\", pName(playerid)); // dini
       
dfile_Create(string); // Létrehozom
dfile_Open(string); // Megnyitom
    dfile_MultiSet(\"fff\", \"PosX\", pos[0], \"PosY\", pos[1], \"PosZ\", pos[2]); // Beleírom
    dfile_SaveFile(); // Elmentem
    dfile_CloseFile(); // Bezárom
   
    dini_Create(string2);
    dini_FloatSet(string2, \"PosX\", pos[0]);
    dini_FloatSet(string2, \"PosY\", pos[1]);
    dini_FloatSet(string2, \"PosZ\", pos[2]);
return 1;
}
public CallMePlease(playerid)
{
SendClientMessage(playerid, -1, \"CallMePlease meghívva!\");
new Float:pos[3], string[256], msg[128];
format(string, sizeof(string), \"TesztDFILE/%s.ini\", pName(playerid));
dfile_Open(string);
//dfile_MultiGet(\"fff\", pos[0], \"PosY\", pos[1], \"PosZ\", pos[2]);
pos[0] = dfile_ReadFloat(\"PosX\");
pos[1] = dfile_ReadFloat(\"PosY\");
pos[2] = dfile_ReadFloat(\"PosZ\");
SetPlayerPos(playerid, pos[0], pos[1], pos[2]);
SendClientMessage(playerid, -1, \"Beolvasott koordináták:\");
format(msg, 128, \"X: %f  |  Y: %f  |  Z: %f\", pos[0], pos[1], pos[2]);
SendClientMessage(playerid, -1, msg);
dfile_CloseFile();
return 1;
}
stock pName(playerid)
{
new n[24];
GetPlayerName(playerid, n, 24);
return n;
}
Cím: GetPlayerPos lehetetlen koordinátákat ad
Írta: bencarter007 - 2014. július 11. - 01:08:17
valamiért megwarningolja a 6,7,8as sort, amit irtál
Cím: GetPlayerPos lehetetlen koordinátákat ad
Írta: jana4 - 2014. július 14. - 20:30:23
Megoldódott a probléma? Nálam rendben van a kód.
[pawn]
     pInfo[playerid][PosX] = dfile_ReadFloat(\"PosX\");
     pInfo[playerid][PosY] = dfile_ReadFloat(\"PosY\");
     pInfo[playerid][PosZ] = dfile_ReadFloat(\"PosZ\");
[/pawn]
Ha ezekre gondolsz, ez a te problémád, ugyanis biztos nincs létrehozva az enum... Vagy nem tudom.
Cím: GetPlayerPos lehetetlen koordinátákat ad
Írta: Flash - 2014. augusztus 12. - 16:09:51
[mod]A téma már 1 hónapja nyitva van, de a témanyitó tengap is fent volt. Ha megoldódott a téma, kérlek zárd![/mod]
Cím: GetPlayerPos lehetetlen koordinátákat ad
Írta: bencarter007 - 2014. augusztus 13. - 16:57:03
nem oldódott meg, de zárok, ha a tisztelt admin elvtárs uraság szeretné