Szerző Téma: MySQL - Az ORM ment, de nem tölt be  (Megtekintve 1365 alkalommal)

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
MySQL - Az ORM ment, de nem tölt be
« Dátum: 2014. április 13. - 11:58:01 »
+1 Show voters
Sziasztok! Egy igen furcsa problémával fordulnék most hozzátok. Nemrég elkezdtem írni egy játékmódot, amiben úgy döntöttem, hogy a BlueG által készített R38-as plugint fogom használni. ORM-et használok, mert ezzel egyszerûbb menteni / betölteni, hiszen automatikusan legenerálja a queryket.
Ezt maga maddinat0r, a plugin készítõje írta:
\"rmhn6kJ.jpg\"
A játékos adatait enumokban tartom, és lecsatlakozáskor elmentem az adatbázisba.
A függvénykönyvtárak, melyeket használok:
 

#include <a_samp>
#include <sscanf2>
#include <zcmd>
#include <streamer>
#include <a_mysql>
#include <crashdetect>

 
A makrók, amiket használok:
 

#define fuggveny%0(%1) forward%0(%1); public%0(%1)

 
A játékosok adatait tartalmazó enum így néz ki:
 

enum eJatAd
{
ORM:ORMSzam,
ABSzam,
Belepve,
ProcSzam[256],
AdminSzint,
Nev[MAX_PLAYER_NAME+1],
KiirNev[MAX_PLAYER_NAME+1],
Jelszo[32],
Fagyasztva,
Kinezet,
Penz,
Float:Elet,
Float:Melleny,
Vilag,
Belso,
Float:KoordX,
Float:KoordY,
Float:KoordZ,
Float:KoordF,
}
new JatAd[LegfJatekos][eJatAd];

 
Megjegyz. (csak, hogy értsétek minden részét): a \"LegfJatekos\" \"MAX_PLAYERS\"-ként van definiálva. A SimaUzenet függvény csak 3 sorrá darabolja az SCM-et, mert így használhatóbb számomra. Az UzenetMindenki függvény pedig csak a belépett játékosoknak küldi el az üzenetet. A Kirug függvény egy késleltetett kick, a KirugIndok és KirugIndokNev pedig ír mellé indokot is. Ezek mellett az Uzenet függvény az a Y_Less által készített fajta, ami lényegében egy SendFormatMessage, ami nem csak define, hanem függvény, így bõvíthetõ több argumentummal. Az UzenetMindenki függvény ugyanez, csak mindenkinek elküldi. A Lefagyaszt és Kiolvaszt függvény csak egy fagyasztás, és kiolvasztás, annyi különbséggel, hogy itt a változóját is átállítja, ami késõbb lesz használva olyan helyeken, ahol fagyasztástól függ a script.
Nos, bele is kezdenék a játékmódba:
 

public OnGameModeInit()
{
    mysql_log(LOG_ALL, LOG_TYPE_HTML);
    ABKapcs = mysql_connect(ABHoszt, ABFelh, ABAd, ABJelsz);
    return 1;
}
public OnGameModeExit()
{
SimaUzenetMindenki(Feher, \"A szerver leállítása folyamatban...\");
    for(new a = 0; a < LegfJatekos; a++)
    {
        if(JatAd[a][belepve] == 1 && JatAd[a][ABSzam] != 0) MentJatAd(a);
    }
    mysql_close(ABKapcs);
return 1;
}
    //Itt lekéri a szériaszámát, és megnézi RP-s-e a neve. Ha igen, akkor kiveszi belõle az alsóvonást, és beleteszi mindezt a KiirNev változójába.
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][ABSzam], \"ABSzam\");
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][belepve], \"Belepve\");
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][AdminSzint], \"AdminSzint\");
    orm_addvar_string(JatAd[playerid][ORMSzam], JatAd[playerid][Nev], MAX_PLAYER_NAME+1, \"Nev\");
    orm_addvar_string(JatAd[playerid][ORMSzam], JatAd[playerid][KiirNev], MAX_PLAYER_NAME+1, \"KiirNev\");
    orm_addvar_string(JatAd[playerid][ORMSzam], JatAd[playerid][Jelszo], MAX_PLAYER_NAME+1, \"Jelszo\");
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][Fagyasztva], \"Fagyasztva\");
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][Kinezet], \"Kinezet\");
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][Penz], \"Penz\");
    orm_addvar_float(JatAd[playerid][ORMSzam], JatAd[playerid][Elet], \"Elet\");
    orm_addvar_float(JatAd[playerid][ORMSzam], JatAd[playerid][Melleny], \"Melleny\");
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][Vilag], \"Vilag\");
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][belso], \"Belso\");
    orm_addvar_float(JatAd[playerid][ORMSzam], JatAd[playerid][KoordX], \"KoordX\");
    orm_addvar_float(JatAd[playerid][ORMSzam], JatAd[playerid][KoordY], \"KoordY\");
    orm_addvar_float(JatAd[playerid][ORMSzam], JatAd[playerid][KoordZ], \"KoordZ\");
    orm_addvar_float(JatAd[playerid][ORMSzam], JatAd[playerid][KoordF], \"KoordF\");
    orm_setkey(JatAd[playerid][ORMSzam], \"ABSzam\");
    orm_select(JatAd[playerid][ORMSzam], \"AmikorJatAdBet\", \"d\", playerid);
}

 
És most jön a \"problémás rész\", azért idézõjelben, mert tudom, hogy nem itt van a probléma, de itt látszik meg.
 

fuggveny AmikorJatAdBet(playerid)
{
switch(orm_errno(JatAd[playerid][ORMSzam]))
    {
        case ERROR_OK: ShowPlayerDialog(playerid, BelepDialog, DIALOG_STYLE_PASSWORD, \"Bejelentkezés\", \"Kérlek írd be a jelszavadat.\", \"Belép!\", \"Kilép!\");
        case ERROR_NO_DATA: ShowPlayerDialog(playerid, RegisztrDialog, DIALOG_STYLE_PASSWORD, \"Regisztráció\", \"Kérlek írd be a jelszavadat.\", \"Regisztrál!\", \"Kilép!\");
    }
    Uzenet(playerid, Feher, \"ABSzam: %d | ORMSzam: %d  | Nev: %s | KiirNev: %s | Jelszo: %s | Kinezet: %d | Penz: %d | Elet: %f | Melleny: %f...\", JatAd[playerid][ABSzam], JatAd[playerid][ORMSzam], JatAd[playerid][KiirNev], JatAd[playerid][Jelszo], JatAd[playerid][Kinezet], JatAd[playerid][Penz], JatAd[playerid][Elet], JatAd[playerid][Melleny]);
}

 
Megjegyz: A végén az üzenet azért van ott, hogy kiírja, hogy tényleg 0-k-e az adatai, és azért hozza be mindig a regisztrációs dialogot, hát.. igen.
A dialogoknál:
 

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case RegisztrDialog:
{
   if(!response) return Kirug(playerid);
   if(4 > strlen(inputtext) || strlen(inputtext) > 24) return ShowPlayerDialog(playerid, RegisztrDialog, DIALOG_STYLE_PASSWORD, \"Regisztráció\", \"Kérlek írd be a jelszavadat. \\n A jelszavadnak 0-24 karakter között kell lennie!\", \"Regisztrál!\", \"Kilép!\");
            new TitkJelsz[129];
            WP_Hash(TitkJelsz, sizeof(TitkJelsz), inputtext);
   format(JatAd[playerid][Jelszo], 24, \"%s\", TitkJelsz);
   RegisztrJat(playerid);
}
case BelepDialog:
{
   if(!response) return Kirug(playerid);
   if(4 > strlen(inputtext) || strlen(inputtext) > 24) return ShowPlayerDialog(playerid, BelepDialog, DIALOG_STYLE_PASSWORD, \"Bejelentkezés\", \"Kérlek írd be a jelszavadat. \\n A jelszavadnak 0-24 karakter között kell lennie!\", \"Belép!\", \"Kilép!\");
   new TitkJelsz[129];
   WP_Hash(TitkJelsz, sizeof(TitkJelsz), inputtext);
   if(strcmp(JatAd[playerid][Jelszo], TitkJelsz) != 0) return ShowPlayerDialog(playerid, BelepDialog, DIALOG_STYLE_PASSWORD, \"Bejelentkezés\", \"Kérlek írd be a jelszavadat. \\n Az általad beírt jelszó hibás!\", \"Belép!\", \"Kilép!\");
            BelepJat(playerid);
}
}
return 1;
}

 
Íme a RegisztrJat, a BelepJat, és a függvények, melyeket azok használnak:
 

stock RegisztrJat(playerid)
{
SetSpawnInfo(playerid, 0, 7, 1743.0239, -1864.4617, 13.5738, 0, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
JatAd[playerid][belepve] = 1;
    printf(\"%s beregisztrált a szerverre.\", JatAd[playerid][KiirNev]);
SimaUzenet(playerid, Feher, \"Sikeresen regisztráltál a kSAMP szerverére!\");
JatAd[playerid][Penz] = 185000;
SimaUzenet(playerid, Feher, \"Kezdésnek kaptál az államtól 185.000Ft-ot!\");
orm_save(JatAd[playerid][ORMSzam], \"MentJatAd\", \"d\", playerid);
}
stock BelepJat(playerid)
{
    JatAd[playerid][belepve] = 1;
printf(\"%s belépett a szerverre.\", JatAd[playerid][KiirNev]);
    SimaUzenet(playerid, Feher, \"Sikeresen beléptél a kSAMP szerverére!\");
BeallJatAd(playerid);
//TogglePlayerSpectating(playerid, false);
JatAd[playerid][belepve] = 1;
SimaUzenet(playerid, Feher, \"Sikeresen bejelentkeztél! Jó játékot!\");
MentJatAd(playerid);
}
fuggveny MentJatAd(playerid)
{
    JatAd[playerid][Kinezet] = GetPlayerSkin(playerid);
GetPlayerHealth(playerid, JatAd[playerid][Elet]);
GetPlayerArmour(playerid, JatAd[playerid][Melleny]);
JatAd[playerid][Vilag] = GetPlayerVirtualWorld(playerid);
JatAd[playerid][belso] = GetPlayerInterior(playerid);
GetPlayerPos(playerid, JatAd[playerid][KoordX], JatAd[playerid][KoordY], JatAd[playerid][KoordZ]);
GetPlayerFacingAngle(playerid,  JatAd[playerid][KoordF]);
orm_save(JatAd[playerid][ORMSzam]);
}
fuggveny BeallJatAd(playerid)
{
SetSpawnInfo(playerid, 0, JatAd[playerid][Kinezet], JatAd[playerid][KoordX], JatAd[playerid][KoordY], JatAd[playerid][KoordZ], JatAd[playerid][KoordF], 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
SetPlayerHealth(playerid, JatAd[playerid][Elet]);
SetPlayerArmour(playerid, JatAd[playerid][Melleny]);
SetPlayerVirtualWorld(playerid, JatAd[playerid][Vilag]);
SetPlayerInterior(playerid, JatAd[playerid][belso]);
//Fegyverek hozzáadása
printf(\"%s adatai beállítva  megfelelõ értékre!\", JatAd[playerid][KiirNev]);
}

 
Már 1000 féleképpen próbáltam, de nem megy.
Ha csak a bejelentkezés dialogot hozom ki, akkor sem lépteti be teljesen, illetve belépteti, csak 0-s adatokkal, ami nem egészen jó.
Az adatbázisban teljesen jól beteszi az adatokat:
\"0srjZJ5.jpg\"
Megjegyz.: A wikin azt írja, az orm_save akkor updatel, ha be van regelve, és akkor insertel, ha nincs. Az orm_loadra pedig azt írja \"...teknikailag ugyanaz, mint az orm_load.\". Mégis csak a jelenlegi felállásban ment egyátalán, betölteni viszont semmilyen kombinációban nem tölt.
Valakinek nincs valami tuti tippje / tapasztalata, hogy mi okozhatja ezt a problémát, mert kezd idegesítõvé válni.
Szerk.: A MySQL tábla felépítése ilyen:
 

//Maga a szerkezet:
CREATE TABLE IF NOT EXISTS `jatekosok` (
  `ABSzam` int(11) NOT NULL AUTO_INCREMENT,
  `Belepve` tinyint(1) NOT NULL,
  `AdminSzint` int(11) NOT NULL,
  `Nev` varchar(24) NOT NULL,
  `KiirNev` varchar(24) NOT NULL,
  `Jelszo` varchar(24) NOT NULL,
  `Fagyasztva` tinyint(1) NOT NULL,
  `Kinezet` int(11) NOT NULL,
  `Penz` int(11) NOT NULL,
  `Elet` float NOT NULL,
  `Melleny` float NOT NULL,
  `Vilag` int(11) NOT NULL,
  `Belso` int(11) NOT NULL,
  `KoordX` float NOT NULL,
  `KoordY` float NOT NULL,
  `KoordZ` float NOT NULL,
  `KoordF` float NOT NULL,
  PRIMARY KEY (`ABSzam`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;
//Itt pedig az adatok, amiket teljesen jól elmentett.
INSERT INTO `jatekosok` (`ABSzam`, `Belepve`, `AdminSzint`, `Nev`, `KiirNev`, `Jelszo`, `Fagyasztva`, `Kinezet`, `Penz`, `Elet`, `Melleny`, `Vilag`, `Belso`, `KoordX`, `KoordY`, `KoordZ`, `KoordF`) VALUES
(1, 0, 0, \'Layne_Konnor\', \'Layne Konnor\', \'FD9D94340DBD72C11B37EBB\', 0, 7, 185000, 100, 0, 0, 0, 1742.72, -1852.12, 13.4141, 0);
« Utoljára szerkesztve: 2014. április 17. - 15:57:54 írta KovaNovik »

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
MySQL - Az ORM ment, de nem tölt be
« Válasz #1 Dátum: 2014. április 13. - 23:57:21 »
+1 Show voters
A te dolgod, hogy mit használsz, de szerintem használj cachet. Sokkal egyszerûbb, jobb, gyorsabb megírni, talán a mûködése is gyorsabb, stb. Az ormhoz nem is nagyon értek, sosem akartam használni. Szóval az ormmal kapcsolatban sajnos nem tudok neked segíteni. :(
[mod]Végre egy, hogy is mondjam, szép téma. ;) :thumbsup:[/mod]

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
MySQL - Az ORM ment, de nem tölt be
« Válasz #2 Dátum: 2014. április 14. - 09:01:22 »
+1 Show voters
Nem értek az ORM-hoz, de én R6-ban például ezt így oldanám meg:
Te megoldásod:
 
orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][belepve], \"Belepve\");

 
Enyém:
 

new data[16+1];
mysql_fetch_field_row(data, \"Belepve\"); JatAd[playerid][belepve] = strval(data);

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
MySQL - Az ORM ment, de nem tölt be
« Válasz #3 Dátum: 2014. április 14. - 10:40:13 »
0 Show voters
Doboka98: a te megoldásodnál a queryhez is hozzá kell adni, a lekéréshez is, mindenhova. Az ORM-nél csak az ORM táblájához hozzáadod a változókat egy helyen, és onnantól egy sorral elmenti, automatikuson legenerálja, lefuttatja a queryt, nem kell ott is újraírnod. Ezt próbáltam végig magyarázni, felülre tettem is egy képet, miért használom ezt. Maddinat0r, a plugin fejlesztõjének a hozzászólása az.
Emellett az ORMSzam az a RAMban lévõ ORM adatbázisban a helye, amit mentek, amibe betöltök. Azadatbázisban az ID-je az ABSzam. Mindenesetre kaptál egy pluszt.
« Utoljára szerkesztve: 2014. április 14. - 12:25:51 írta KovaNovik »

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
MySQL - Az ORM ment, de nem tölt be
« Válasz #4 Dátum: 2014. április 14. - 14:39:29 »
0 Show voters
Utánanéztem az ORM-nak, meg eleve az R38-as pluginnak (mert olvastam másik topicban, hogy mondtad, hogy könnyebb), de nekem érthetetlenek a dolgok. Jelenleg maradok az R6 pluginnál, elvégre az is jobb, mint a fájlmentés.
Szerintem próbálkozhatsz a hivatalos fórumon is.

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
MySQL - Az ORM ment, de nem tölt be
« Válasz #5 Dátum: 2014. április 17. - 15:57:20 »
0 Show voters
Köszönöm szépen a segítséget mindenkinek, sikerült megoldanom, habár (az igazat megvallva) egyik sem vitt közelebb a megoldáshoz.
Aki a késõbbiekben hasonló problémával találkozna, az a következõt tegye:
Az ORM-es változók hozzáadása után állítsa a kulcsot a névre, ez nálam
 
orm_setkey(JatAd[playerid][ORMSzam], \"Nev\");

,
majd, amikor betöltõdtek az adatai, az orm_load/select után, vagy amit az meghívott callbackben, miután elõhozta a megfelelõ dialogot:
orm_setkey(JatAd[playerid][ORMSzam], \"ABSzam\");

.
Nagyon örülök, hogy megoldódott, mindenkinek további jó scriptelést kívánok.
Megjegyz.: A témát zártam, megoldottá nyilvánítottam.

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
MySQL - Az ORM ment, de nem tölt be
« Válasz #6 Dátum: 2014. április 13. - 11:58:01 »
0 Show voters
Sziasztok! Egy igen furcsa problémával fordulnék most hozzátok. Nemrég elkezdtem írni egy játékmódot, amiben úgy döntöttem, hogy a BlueG által készített R38-as plugint fogom használni. ORM-et használok, mert ezzel egyszerûbb menteni / betölteni, hiszen automatikusan legenerálja a queryket.
Ezt maga maddinat0r, a plugin készítõje írta:
\"rmhn6kJ.jpg\"
A játékos adatait enumokban tartom, és lecsatlakozáskor elmentem az adatbázisba.
A függvénykönyvtárak, melyeket használok:
 

#include <a_samp>
#include <sscanf2>
#include <zcmd>
#include <streamer>
#include <a_mysql>
#include <crashdetect>

 
A makrók, amiket használok:
 

#define fuggveny%0(%1) forward%0(%1); public%0(%1)

 
A játékosok adatait tartalmazó enum így néz ki:
 

enum eJatAd
{
ORM:ORMSzam,
ABSzam,
Belepve,
ProcSzam[256],
AdminSzint,
Nev[MAX_PLAYER_NAME+1],
KiirNev[MAX_PLAYER_NAME+1],
Jelszo[32],
Fagyasztva,
Kinezet,
Penz,
Float:Elet,
Float:Melleny,
Vilag,
Belso,
Float:KoordX,
Float:KoordY,
Float:KoordZ,
Float:KoordF,
}
new JatAd[LegfJatekos][eJatAd];

 
Megjegyz. (csak, hogy értsétek minden részét): a \"LegfJatekos\" \"MAX_PLAYERS\"-ként van definiálva. A SimaUzenet függvény csak 3 sorrá darabolja az SCM-et, mert így használhatóbb számomra. Az UzenetMindenki függvény pedig csak a belépett játékosoknak küldi el az üzenetet. A Kirug függvény egy késleltetett kick, a KirugIndok és KirugIndokNev pedig ír mellé indokot is. Ezek mellett az Uzenet függvény az a Y_Less által készített fajta, ami lényegében egy SendFormatMessage, ami nem csak define, hanem függvény, így bõvíthetõ több argumentummal. Az UzenetMindenki függvény ugyanez, csak mindenkinek elküldi. A Lefagyaszt és Kiolvaszt függvény csak egy fagyasztás, és kiolvasztás, annyi különbséggel, hogy itt a változóját is átállítja, ami késõbb lesz használva olyan helyeken, ahol fagyasztástól függ a script.
Nos, bele is kezdenék a játékmódba:
 

public OnGameModeInit()
{
    mysql_log(LOG_ALL, LOG_TYPE_HTML);
    ABKapcs = mysql_connect(ABHoszt, ABFelh, ABAd, ABJelsz);
    return 1;
}
public OnGameModeExit()
{
SimaUzenetMindenki(Feher, \"A szerver leállítása folyamatban...\");
    for(new a = 0; a < LegfJatekos; a++)
    {
        if(JatAd[a][belepve] == 1 && JatAd[a][ABSzam] != 0) MentJatAd(a);
    }
    mysql_close(ABKapcs);
return 1;
}
    //Itt lekéri a szériaszámát, és megnézi RP-s-e a neve. Ha igen, akkor kiveszi belõle az alsóvonást, és beleteszi mindezt a KiirNev változójába.
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][ABSzam], \"ABSzam\");
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][belepve], \"Belepve\");
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][AdminSzint], \"AdminSzint\");
    orm_addvar_string(JatAd[playerid][ORMSzam], JatAd[playerid][Nev], MAX_PLAYER_NAME+1, \"Nev\");
    orm_addvar_string(JatAd[playerid][ORMSzam], JatAd[playerid][KiirNev], MAX_PLAYER_NAME+1, \"KiirNev\");
    orm_addvar_string(JatAd[playerid][ORMSzam], JatAd[playerid][Jelszo], MAX_PLAYER_NAME+1, \"Jelszo\");
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][Fagyasztva], \"Fagyasztva\");
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][Kinezet], \"Kinezet\");
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][Penz], \"Penz\");
    orm_addvar_float(JatAd[playerid][ORMSzam], JatAd[playerid][Elet], \"Elet\");
    orm_addvar_float(JatAd[playerid][ORMSzam], JatAd[playerid][Melleny], \"Melleny\");
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][Vilag], \"Vilag\");
    orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][belso], \"Belso\");
    orm_addvar_float(JatAd[playerid][ORMSzam], JatAd[playerid][KoordX], \"KoordX\");
    orm_addvar_float(JatAd[playerid][ORMSzam], JatAd[playerid][KoordY], \"KoordY\");
    orm_addvar_float(JatAd[playerid][ORMSzam], JatAd[playerid][KoordZ], \"KoordZ\");
    orm_addvar_float(JatAd[playerid][ORMSzam], JatAd[playerid][KoordF], \"KoordF\");
    orm_setkey(JatAd[playerid][ORMSzam], \"ABSzam\");
    orm_select(JatAd[playerid][ORMSzam], \"AmikorJatAdBet\", \"d\", playerid);
}

 
És most jön a \"problémás rész\", azért idézõjelben, mert tudom, hogy nem itt van a probléma, de itt látszik meg.
 

fuggveny AmikorJatAdBet(playerid)
{
switch(orm_errno(JatAd[playerid][ORMSzam]))
    {
        case ERROR_OK: ShowPlayerDialog(playerid, BelepDialog, DIALOG_STYLE_PASSWORD, \"Bejelentkezés\", \"Kérlek írd be a jelszavadat.\", \"Belép!\", \"Kilép!\");
        case ERROR_NO_DATA: ShowPlayerDialog(playerid, RegisztrDialog, DIALOG_STYLE_PASSWORD, \"Regisztráció\", \"Kérlek írd be a jelszavadat.\", \"Regisztrál!\", \"Kilép!\");
    }
    Uzenet(playerid, Feher, \"ABSzam: %d | ORMSzam: %d  | Nev: %s | KiirNev: %s | Jelszo: %s | Kinezet: %d | Penz: %d | Elet: %f | Melleny: %f...\", JatAd[playerid][ABSzam], JatAd[playerid][ORMSzam], JatAd[playerid][KiirNev], JatAd[playerid][Jelszo], JatAd[playerid][Kinezet], JatAd[playerid][Penz], JatAd[playerid][Elet], JatAd[playerid][Melleny]);
}

 
Megjegyz: A végén az üzenet azért van ott, hogy kiírja, hogy tényleg 0-k-e az adatai, és azért hozza be mindig a regisztrációs dialogot, hát.. igen.
A dialogoknál:
 

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case RegisztrDialog:
{
   if(!response) return Kirug(playerid);
   if(4 > strlen(inputtext) || strlen(inputtext) > 24) return ShowPlayerDialog(playerid, RegisztrDialog, DIALOG_STYLE_PASSWORD, \"Regisztráció\", \"Kérlek írd be a jelszavadat. \\n A jelszavadnak 0-24 karakter között kell lennie!\", \"Regisztrál!\", \"Kilép!\");
            new TitkJelsz[129];
            WP_Hash(TitkJelsz, sizeof(TitkJelsz), inputtext);
   format(JatAd[playerid][Jelszo], 24, \"%s\", TitkJelsz);
   RegisztrJat(playerid);
}
case BelepDialog:
{
   if(!response) return Kirug(playerid);
   if(4 > strlen(inputtext) || strlen(inputtext) > 24) return ShowPlayerDialog(playerid, BelepDialog, DIALOG_STYLE_PASSWORD, \"Bejelentkezés\", \"Kérlek írd be a jelszavadat. \\n A jelszavadnak 0-24 karakter között kell lennie!\", \"Belép!\", \"Kilép!\");
   new TitkJelsz[129];
   WP_Hash(TitkJelsz, sizeof(TitkJelsz), inputtext);
   if(strcmp(JatAd[playerid][Jelszo], TitkJelsz) != 0) return ShowPlayerDialog(playerid, BelepDialog, DIALOG_STYLE_PASSWORD, \"Bejelentkezés\", \"Kérlek írd be a jelszavadat. \\n Az általad beírt jelszó hibás!\", \"Belép!\", \"Kilép!\");
            BelepJat(playerid);
}
}
return 1;
}

 
Íme a RegisztrJat, a BelepJat, és a függvények, melyeket azok használnak:
 

stock RegisztrJat(playerid)
{
SetSpawnInfo(playerid, 0, 7, 1743.0239, -1864.4617, 13.5738, 0, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
JatAd[playerid][belepve] = 1;
    printf(\"%s beregisztrált a szerverre.\", JatAd[playerid][KiirNev]);
SimaUzenet(playerid, Feher, \"Sikeresen regisztráltál a kSAMP szerverére!\");
JatAd[playerid][Penz] = 185000;
SimaUzenet(playerid, Feher, \"Kezdésnek kaptál az államtól 185.000Ft-ot!\");
orm_save(JatAd[playerid][ORMSzam], \"MentJatAd\", \"d\", playerid);
}
stock BelepJat(playerid)
{
    JatAd[playerid][belepve] = 1;
printf(\"%s belépett a szerverre.\", JatAd[playerid][KiirNev]);
    SimaUzenet(playerid, Feher, \"Sikeresen beléptél a kSAMP szerverére!\");
BeallJatAd(playerid);
//TogglePlayerSpectating(playerid, false);
JatAd[playerid][belepve] = 1;
SimaUzenet(playerid, Feher, \"Sikeresen bejelentkeztél! Jó játékot!\");
MentJatAd(playerid);
}
fuggveny MentJatAd(playerid)
{
    JatAd[playerid][Kinezet] = GetPlayerSkin(playerid);
GetPlayerHealth(playerid, JatAd[playerid][Elet]);
GetPlayerArmour(playerid, JatAd[playerid][Melleny]);
JatAd[playerid][Vilag] = GetPlayerVirtualWorld(playerid);
JatAd[playerid][belso] = GetPlayerInterior(playerid);
GetPlayerPos(playerid, JatAd[playerid][KoordX], JatAd[playerid][KoordY], JatAd[playerid][KoordZ]);
GetPlayerFacingAngle(playerid,  JatAd[playerid][KoordF]);
orm_save(JatAd[playerid][ORMSzam]);
}
fuggveny BeallJatAd(playerid)
{
SetSpawnInfo(playerid, 0, JatAd[playerid][Kinezet], JatAd[playerid][KoordX], JatAd[playerid][KoordY], JatAd[playerid][KoordZ], JatAd[playerid][KoordF], 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
SetPlayerHealth(playerid, JatAd[playerid][Elet]);
SetPlayerArmour(playerid, JatAd[playerid][Melleny]);
SetPlayerVirtualWorld(playerid, JatAd[playerid][Vilag]);
SetPlayerInterior(playerid, JatAd[playerid][belso]);
//Fegyverek hozzáadása
printf(\"%s adatai beállítva  megfelelõ értékre!\", JatAd[playerid][KiirNev]);
}

 
Már 1000 féleképpen próbáltam, de nem megy.
Ha csak a bejelentkezés dialogot hozom ki, akkor sem lépteti be teljesen, illetve belépteti, csak 0-s adatokkal, ami nem egészen jó.
Az adatbázisban teljesen jól beteszi az adatokat:
\"0srjZJ5.jpg\"
Megjegyz.: A wikin azt írja, az orm_save akkor updatel, ha be van regelve, és akkor insertel, ha nincs. Az orm_loadra pedig azt írja \"...teknikailag ugyanaz, mint az orm_load.\". Mégis csak a jelenlegi felállásban ment egyátalán, betölteni viszont semmilyen kombinációban nem tölt.
Valakinek nincs valami tuti tippje / tapasztalata, hogy mi okozhatja ezt a problémát, mert kezd idegesítõvé válni.
Szerk.: A MySQL tábla felépítése ilyen:
 

//Maga a szerkezet:
CREATE TABLE IF NOT EXISTS `jatekosok` (
  `ABSzam` int(11) NOT NULL AUTO_INCREMENT,
  `Belepve` tinyint(1) NOT NULL,
  `AdminSzint` int(11) NOT NULL,
  `Nev` varchar(24) NOT NULL,
  `KiirNev` varchar(24) NOT NULL,
  `Jelszo` varchar(24) NOT NULL,
  `Fagyasztva` tinyint(1) NOT NULL,
  `Kinezet` int(11) NOT NULL,
  `Penz` int(11) NOT NULL,
  `Elet` float NOT NULL,
  `Melleny` float NOT NULL,
  `Vilag` int(11) NOT NULL,
  `Belso` int(11) NOT NULL,
  `KoordX` float NOT NULL,
  `KoordY` float NOT NULL,
  `KoordZ` float NOT NULL,
  `KoordF` float NOT NULL,
  PRIMARY KEY (`ABSzam`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;
//Itt pedig az adatok, amiket teljesen jól elmentett.
INSERT INTO `jatekosok` (`ABSzam`, `Belepve`, `AdminSzint`, `Nev`, `KiirNev`, `Jelszo`, `Fagyasztva`, `Kinezet`, `Penz`, `Elet`, `Melleny`, `Vilag`, `Belso`, `KoordX`, `KoordY`, `KoordZ`, `KoordF`) VALUES
(1, 0, 0, \'Layne_Konnor\', \'Layne Konnor\', \'FD9D94340DBD72C11B37EBB\', 0, 7, 185000, 100, 0, 0, 0, 1742.72, -1852.12, 13.4141, 0);
« Utoljára szerkesztve: 2014. április 17. - 15:57:54 írta KovaNovik »

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
MySQL - Az ORM ment, de nem tölt be
« Válasz #7 Dátum: 2014. április 13. - 23:57:21 »
0 Show voters
A te dolgod, hogy mit használsz, de szerintem használj cachet. Sokkal egyszerûbb, jobb, gyorsabb megírni, talán a mûködése is gyorsabb, stb. Az ormhoz nem is nagyon értek, sosem akartam használni. Szóval az ormmal kapcsolatban sajnos nem tudok neked segíteni. :(
[mod]Végre egy, hogy is mondjam, szép téma. ;) :thumbsup:[/mod]

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
MySQL - Az ORM ment, de nem tölt be
« Válasz #8 Dátum: 2014. április 14. - 09:01:22 »
0 Show voters
Nem értek az ORM-hoz, de én R6-ban például ezt így oldanám meg:
Te megoldásod:
 
orm_addvar_int(JatAd[playerid][ORMSzam], JatAd[playerid][belepve], \"Belepve\");

 
Enyém:
 

new data[16+1];
mysql_fetch_field_row(data, \"Belepve\"); JatAd[playerid][belepve] = strval(data);

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
MySQL - Az ORM ment, de nem tölt be
« Válasz #9 Dátum: 2014. április 14. - 10:40:13 »
0 Show voters
Doboka98: a te megoldásodnál a queryhez is hozzá kell adni, a lekéréshez is, mindenhova. Az ORM-nél csak az ORM táblájához hozzáadod a változókat egy helyen, és onnantól egy sorral elmenti, automatikuson legenerálja, lefuttatja a queryt, nem kell ott is újraírnod. Ezt próbáltam végig magyarázni, felülre tettem is egy képet, miért használom ezt. Maddinat0r, a plugin fejlesztõjének a hozzászólása az.
Emellett az ORMSzam az a RAMban lévõ ORM adatbázisban a helye, amit mentek, amibe betöltök. Azadatbázisban az ID-je az ABSzam. Mindenesetre kaptál egy pluszt.
« Utoljára szerkesztve: 2014. április 14. - 12:25:51 írta KovaNovik »

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
MySQL - Az ORM ment, de nem tölt be
« Válasz #10 Dátum: 2014. április 14. - 14:39:29 »
0 Show voters
Utánanéztem az ORM-nak, meg eleve az R38-as pluginnak (mert olvastam másik topicban, hogy mondtad, hogy könnyebb), de nekem érthetetlenek a dolgok. Jelenleg maradok az R6 pluginnál, elvégre az is jobb, mint a fájlmentés.
Szerintem próbálkozhatsz a hivatalos fórumon is.

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
MySQL - Az ORM ment, de nem tölt be
« Válasz #11 Dátum: 2014. április 17. - 15:57:20 »
0 Show voters
Köszönöm szépen a segítséget mindenkinek, sikerült megoldanom, habár (az igazat megvallva) egyik sem vitt közelebb a megoldáshoz.
Aki a késõbbiekben hasonló problémával találkozna, az a következõt tegye:
Az ORM-es változók hozzáadása után állítsa a kulcsot a névre, ez nálam
 
orm_setkey(JatAd[playerid][ORMSzam], \"Nev\");

,
majd, amikor betöltõdtek az adatai, az orm_load/select után, vagy amit az meghívott callbackben, miután elõhozta a megfelelõ dialogot:
orm_setkey(JatAd[playerid][ORMSzam], \"ABSzam\");

.
Nagyon örülök, hogy megoldódott, mindenkinek további jó scriptelést kívánok.
Megjegyz.: A témát zártam, megoldottá nyilvánítottam.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal