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

Grand Theft Auto: Közösség => Általános => A témát indította: ripme0 - 2022. Január 15. - 17:15:48

Cím: Dini-vel összebugol több karakter
Írta: ripme0 - 2022. Január 15. - 17:15:48
Sziasztok! A problémám annyi lenne, hogy mai nap felhívtam egy barátomat a szerveremre, amit már több éve írok. Először feljött, beregisztrált minden oké, lelépett majd vissza, és az Én mentett dolgaimat kapta meg, a jelszó kivételével. Disconnectnél levan nullázva minden érték, miután lementette a játékos értékeit, de összebuggol, és már nem tudom mit tudnék vele tenni. Ha esetleg valaki tudna segíteni, azt megköszönném.:) Remélem érthetően írtam, további szépeket!
Cím: Re:Dini-vel összebugol több karakter
Írta: CMike - 2022. Január 15. - 20:11:10
Kodot is masolnod kell, maskepp nem fogunk tudni segiteni
Cím: Re:Dini-vel összebugol több karakter
Írta: ripme0 - 2022. Január 15. - 20:47:14
azt tudom, hogy előbb menteni kell, utána nullázni annak fejébe, hogy ne legyen az, ami a problémám jelenleg, de valahogy nem adja ki a dolog.

public OnPlayerDisconnect(playerid, reason)
{

   new dcstring[256];
   new file[128];
   GetNev;
   format(dcstring,sizeof(dcstring),"[AC-LOG][ID: %d] %s elhagyta a szervert!",playerid, nev);
   SendAdminMessage(-1,dcstring);
   format(file,sizeof(file),"/Karakterek/%s.ini",nev);
   if(fexist(file) && playerlogin[playerid] == 1)
   {
         dini_IntSet(file,"Szint", playerInfo[playerid][Szint]);
         dini_IntSet(file,"Penz", playerInfo[playerid][Penz]);
         dini_IntSet(file,"DoorDashErtekeles", playerInfo[playerid][DoorDashErtekeles]);
         nyilván van több mentés is, de az egészet hadd ne másoljam be
   }
   playerInfo[playerid][Szint] = 0;
   playerInfo[playerid][Penz] = 0;
   playerInfo[playerid][DoorDashErtekeles] = 0;
   pár killtimer
   textdrawhideok

}
return 1;
Cím: Re:Dini-vel összebugol több karakter
Írta: BigTics - 2022. Január 15. - 21:12:48
playerid az a szerveren lévő idja? egy sornyi kódot se írtam, de én elsőre a leírtak alapján arra gondolok, hogy id-t cseréltetek, amikor visszaléptetek akkor arra az idre mentett dolgokat kapta vissza a bejelentkezett játékos
Cím: Re:Dini-vel összebugol több karakter
Írta: ripme0 - 2022. Január 15. - 23:19:32
igen, de az a te id-d. ha csak simán id lenne az a másik játékos idje. ergo muszáj vagyok playeridt használni. legalábbis én így látom/tudom.
Cím: Re:Dini-vel összebugol több karakter
Írta: ZyZu. - 2022. Január 16. - 08:24:55
Nézd meg ha kilép a játékos normálisan mentődik minden? Ha igen akkor a betöltésnél valami nincs rendben. Ha más játékos adatait kapjátok meg akkor a név ellenőrzésnél nincs valami rendben. Másold be a betöltést nekem.

ennek a helyére pedig

if(fexist(file) && playerlogin[playerid] == 1)
ezt ragd inkább, írd ki normálisan a dini ellenőrzéssel..

if(dini_Exists(file) && playerlogin[playerid] == 1)
Cím: Re:Dini-vel összebugol több karakter
Írta: CMike - 2022. Január 16. - 13:03:49
Szerintem ott valami a GetNev funkcioval lesz
Cím: Re:Dini-vel összebugol több karakter
Írta: ripme0 - 2022. Január 16. - 14:41:30
A GetNev funkció csak egy #define GetNev GetPlayerName(playerid,nev,sizeof(nev)) egyszerűsítés.
A betöltés pedig a bejelentkezésnél, dialogra reagálva:
format(file,sizeof(file),"/Karakterek/%s.ini", nev);
if(dini_Exists(file))
{
   new pw = dini_Int(file, "Jelszo");
   if(udb_hash(inputtext) == pw)   
   {
                playerLoad(playerid); azóta átraktam a betöltést stockba, hátha.
                SpawnPlayer(playerid);
   }
   else
   {
       SendClientMessage(playerid,HIBA,"[HIBA] Rossz adatot adtál meg!");
       printf("[LOG] %s bejelentkezése sikertelen volt!",nev);
                 Kick(playerid);
   }
}

a stockos betöltés pedig:
stock playerLoad(playerid)
{
   GetNev;
   new file[128];
        format(file,sizeof(file),"/Karakterek/%s.ini", nev);
   if(dini_Exists(file))
   {
           Belepve[playerid] = 1;
      ResetPlayerMoney(playerid);
      playerInfo[playerid][Szint] = dini_Int(file,"Szint"), TextDrawSetString(LEVEL[playerid], playerInfo[playerid][Szint]);
      playerInfo[playerid][Skin] = dini_Int(file,"Skin"),SetPlayerSkin(playerid, playerInfo[playerid][Skin]);
      playerInfo[playerid][Penz] = dini_Int(file,"Penz");
                itt is van egy rakás betöltés.
   }
}

Cím: Re:Dini-vel összebugol több karakter
Írta: ZyZu. - 2022. Január 16. - 17:54:56
Nincs meg a betöltésnél neked egy !

if(!dini_Exists(file))
Cím: Re:Dini-vel összebugol több karakter
Írta: ripme0 - 2022. Január 16. - 18:06:45
stocknál?
Cím: Re:Dini-vel összebugol több karakter
Írta: Sramm - 2022. Január 17. - 23:03:51
Nézd meg ha kilép a játékos normálisan mentődik minden? Ha igen akkor a betöltésnél valami nincs rendben. Ha más játékos adatait kapjátok meg akkor a név ellenőrzésnél nincs valami rendben. Másold be a betöltést nekem.

ennek a helyére pedig

if(fexist(file) && playerlogin[playerid] == 1)
ezt ragd inkább, írd ki normálisan a dini ellenőrzéssel..

if(dini_Exists(file) && playerlogin[playerid] == 1)

Ez teljesen mindegy, a két függvény ugyan azt csinálja, tehát az eredeti megoldás is "normális". A probléma valóban a GetNev környékén keresendő, a "nev" egy globális változó, amit minden alkalommal felülírsz, mikor lekéred valaki nevét. Valószínűleg emiatt kavarodik meg, mert mire a barátod eljut ahhoz a részhez, hogy a névvel kitöltöd a fájl olvasást, már a te neved van benne. Használj lokális változót inkább. Ha elfogadsz egy jó tanácsot, így semiképpen se rövidíts függvényt, mert átláthatatlan lesz, és ilyen formában nem is illik.