Szerző Téma: Regisztrációs rendszer hiba, dini nem tudja beolvasni a stringet  (Megtekintve 896 alkalommal)

Regisztrációs rendszer hiba, dini nem tudja beolvasni a stringet
« Dátum: 2013. július 21. - 18:54:08 »
0 Show voters
Írtam, egy egyszerû regisztrációs nagyon rendszert dini fájlkezelõ rendszer segítségével, mivel még kezdõ szkriptel vagyok.
Jelszó ellenõrzési résznél akadtam el.
Konkréten dini nem tudja kiolvasni a stringet, vagyis talán még kitudja olvasni,  de már nem tudja hozzárendelni egy változóhoz a kiolvasott értéket, mert az alábbi hibát írja ki:
error 006: must be assigned to an array

P_E_JELSZO[24]

Ha az elején megadnom a string hosszúságot akkor is kiírja.
Vagyis gondolom én, hogy ez a rész lehet hibás.
 
// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <dini>
#define DIALOG_REGISZTRACIO 1
#define DIALOG_BEJELENTKEZES 2
enum E_JATEKOSADAT
{
P_E_JELSZO,
P_E_PENZ, //létrehozzuk a tárolókat
P_E_ADMIN,
P_E_VIP,
P_E_PONT,
P_E_OLESEK,
P_E_HALALOK
 
}; //lezárjuk
new JATEKOSADAT[MAX_PLAYERS][E_JATEKOSADAT];
 
F_NAME(playerid)
{
new JATEKOSNEV[MAX_PLAYERS];
GetPlayerName(playerid, JATEKOSNEV,sizeof(JATEKOSNEV));
return JATEKOSNEV;
}
 
stock JATEKOSFAJL(playerid)
{
new szovegesfajl[128];
format(szovegesfajl,sizeof(szovegesfajl),\"/jatekosadat/%s.ini\",F_NAME(playerid));
return szovegesfajl;
}
stock JATEKOS_ADAT_BETOLTES(playerid)
{
//JATEKOSADAT[playerid][P_E_JELSZO] = dini_Get(JATEKOSFAJL(playerid),\"jelszo\");
JATEKOSADAT[playerid][P_E_PENZ] = dini_Int(JATEKOSFAJL(playerid),\"penz\");
JATEKOSADAT[playerid][P_E_ADMIN] = dini_Int(JATEKOSFAJL(playerid),\"admin\");
JATEKOSADAT[playerid][P_E_VIP] = dini_Int(JATEKOSFAJL(playerid),\"vip\");
JATEKOSADAT[playerid][P_E_PONT] = dini_Int(JATEKOSFAJL(playerid),\"pont\");
JATEKOSADAT[playerid][P_E_OLESEK] = dini_Int(JATEKOSFAJL(playerid),\"olesek\");
JATEKOSADAT[playerid][P_E_HALALOK] = dini_Int(JATEKOSFAJL(playerid),\"halalok\");
}
 
main()
{
print(\"\\n----------------------------------\");
print(\" Blank Gamemode by your name here\");
print(\"-------------------------\\n\");
print(\"-----reg rendszer-------\\n\");
}
 
public OnGameModeInit()
{
// Don\'t use these lines if it\'s a filterscript
SetGameModeText(\"Blank Script\");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}
public OnGameModeExit()
{
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}
public OnPlayerConnect(playerid)
{
 
if(dini_Exists(JATEKOSFAJL(playerid)))
{
ShowPlayerDialog(playerid,DIALOG_BEJELENTKEZES, DIALOG_STYLE_INPUT,\"Bejelentkezés\",\"Kérlek írd be a jelszavadat\",\"Ok\",\"Mégse\");
}
else
{
ShowPlayerDialog(playerid,DIALOG_REGISZTRACIO, DIALOG_STYLE_PASSWORD,\"Regisztráció\",\"Kérlek írd be a jelszavadat a regisztrációhoz\",\"Ok\",\"Mégse\");
}
 

return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
return 1;
}
public OnPlayerSpawn(playerid)
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}
public OnVehicleSpawn(vehicleid)
{
return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}
public OnPlayerText(playerid, text[])
{
return 1;
}
 
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}
public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}
public OnRconCommand(cmd[])
{
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
return 1;
}
public OnObjectMoved(objectid)
{
return 1;
}
public OnPlayerObjectMoved(playerid, objectid)
{
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
return 1;
}
public OnVehicleMod(playerid, vehicleid, componentid)
{
return 1;
}
public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
return 1;
}
public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
return 1;
}
public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}
public OnPlayerExitedMenu(playerid)
{
return 1;
}
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
return 1;
}
public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}
public OnPlayerUpdate(playerid)
{
return 1;
}
public OnPlayerStreamIn(playerid, forplayerid)
{
return 1;
}
public OnPlayerStreamOut(playerid, forplayerid)
{
return 1;
}
public OnVehicleStreamIn(vehicleid, forplayerid)
{
return 1;
}
public OnVehicleStreamOut(vehicleid, forplayerid)
{
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_REGISZTRACIO:
{
      if(!response)
      {
         SendClientMessage(playerid,-1,\"Mégse-t választottad, a regisztráció kötelezõ!\");
         ShowPlayerDialog(playerid,DIALOG_REGISZTRACIO, DIALOG_STYLE_PASSWORD,\"Regisztráció\",\"Kérlek írd be a jelszavadat a regisztrációhoz\",\"Ok\",\"Mégse\");
      }
      else
      {
         new jelszohossz = strlen(inputtext);
         if( (jelszohossz < 4) || (jelszohossz > 10) )
         {
            SendClientMessage(playerid,-1,\"Hiba nem felelõ jelszóhosszúság 4 és 10 között kell lennie!\");
            ShowPlayerDialog(playerid,DIALOG_REGISZTRACIO, DIALOG_STYLE_PASSWORD,\"Regisztráció\",\"Kérlek írd be a jelszavadat a regisztrációhoz\",\"Ok\",\"Mégse\");
         }
         else
         {
            dini_Create(JATEKOSFAJL(playerid));
            dini_Set(JATEKOSFAJL(playerid),\"jelszo\", inputtext );
            dini_IntSet(JATEKOSFAJL(playerid),\"penz\", 50000);
            dini_IntSet(JATEKOSFAJL(playerid),\"admin\", 0);
            dini_IntSet(JATEKOSFAJL(playerid),\"vip\", 0);
            dini_IntSet(JATEKOSFAJL(playerid),\"pont\", 0);
            dini_IntSet(JATEKOSFAJL(playerid),\"olesek\", 0);
            dini_IntSet(JATEKOSFAJL(playerid),\"halalok\", 0);
            JATEKOS_ADAT_BETOLTES(playerid);
         }
 
      }
}
case DIALOG_BEJELENTKEZES:
{
   if(!response)
   {
      SendClientMessage(playerid,-1,\"Ez a név regisztrálva van, kérlek írj be egy jelszó a belépéshez!\");
      ShowPlayerDialog(playerid,DIALOG_BEJELENTKEZES,DIALOG_STYLE_INPUT,\"Bejelentkezés\",\"Kérlek írd be a jelszavadat\",\"Ok\",\"Mégse\");
   }
   else
   {
      //new jelszohossz = strlen(inputtext);
      if(   strlen(inputtext) == 0 )
      {
         SendClientMessage(playerid,-1,\"[Hiba]Nem írtál be semmilyen jelszót!\");
         ShowPlayerDialog(playerid, DIALOG_BEJELENTKEZES, DIALOG_STYLE_INPUT,\"Bejelentkezés\",\"Kérlek írd be a jelszavadat\",\"Ok\",\"Mégse\");
      }
      else
      {
         JATEKOSADAT[playerid][P_E_JELSZO] = dini_Get(JATEKOSFAJL(playerid),\"jelszo\");
         if ( strcmp(JATEKOSADAT[playerid][P_E_JELSZO], inputtext, false ) == 0 )
         {
            SendClientMessage(playerid,-1,\"Sikeres bejelentkezés!\");
         }
         else
         {
            SendClientMessage(playerid,-1,\"Hiba! Beírt jelszó nem egyezik!\");
         }
      }
   }
}
 
}
 
return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
« Utoljára szerkesztve: 2013. július 21. - 18:56:44 írta bbTamas »

Regisztrációs rendszer hiba, dini nem tudja beolvasni a stringet
« Válasz #1 Dátum: 2013. július 21. - 19:56:23 »
0 Show voters
...
enum E_JATEKOSADAT
{
        P_E_JELSZO, //<-- Itt a gondod szerintem
        P_E_PENZ, //létrehozzuk a tárolókat
...

 
Azt kell array-é alakítani, ami annyit tesz, hogy adsz neki egy tartományt. Ez azért szükséges, mert minden \'slotba\', vagy skatulyába egy betû kerül majd.
Szóval, változtasd például \'P_E_JELSZO[32] \' -re ha max 32 karakteres jelszó lehet esetleg, több ha több. Gyakorlatilag stringet csinálsz az amúgy integerbõl.
Helyesen:
 
...
enum E_JATEKOSADAT
{
        P_E_JELSZO[32], // De mondom, a szám változhat óhaj szerint.
        P_E_PENZ, //létrehozzuk a tárolókat
...

Regisztrációs rendszer hiba, dini nem tudja beolvasni a stringet
« Válasz #2 Dátum: 2013. július 21. - 20:59:09 »
0 Show voters
Ahogy a leírásban is írtam, hogy hiába adom meg a string hosszát az elején akkor is hibát ír ki.
 
error 047: array sizes do not match, or destination array is too small

 
Azért köszönöm a válaszodat. :)
« Utoljára szerkesztve: 2013. július 21. - 21:08:59 írta bbTamas »

Regisztrációs rendszer hiba, dini nem tudja beolvasni a stringet
« Válasz #3 Dátum: 2013. július 21. - 21:05:56 »
+1 Show voters
Rendben, ez esetben elnézést, azt hittem a kód úgy errorozik ahogyan kimásoltad. Foglalkozok még a témával akkor.
Edit: én nagyonhülye...
 

//EZ AZ EREDETI:
JATEKOSADAT[playerid][P_E_JELSZO] = dini_Get(JATEKOSFAJL(playerid),\"jelszo\"); // akkor a következõ tippem:
// String formázást használj inkább             
if(strcmp(JATEKOSADAT[playerid][P_E_JELSZO], inputtext, false ) == 0 )
{
// 2 Lehetõség a jóra:
// I.: valahogy így képzelem el, formatálással, avagy beolvasás és tárolással:
format(JATEKOSADAT[playerid][P_E_JELSZO], 24, \"%s\",dini_Get(JATEKOSFAJL(playerid),\"jelszo\"));
    if ( strcmp(JATEKOSADAT[playerid][P_E_JELSZO], inputtext, false ) == 0 )
{
 
//II.: Vagy ahogy én csinálom:
if(strcmp(dini_Get(JATEKOSFAJL(playerid),\"jelszo\"),inputtext, true ) == 0 )
{
// Szerintem így a célszerû, nem kell eltárolni a jelszavát egy változóba.

 
A 2. tesztelt, hiszen én is Dini-t használok, én így csináltam meg a logint saját módba.
Ha ezek után is rossz valami, akkor vagy el néztem megint valamit, vagy én nemtudom...
« Utoljára szerkesztve: 2013. július 21. - 21:19:10 írta Norbivar »

Regisztrációs rendszer hiba, dini nem tudja beolvasni a stringet
« Válasz #4 Dátum: 2013. július 21. - 21:30:21 »
0 Show voters
Köszönöm, segítségedet, második megoldást próbáltam és hibátlan. :)
Közben én is kutattam megoldások után, és csak annyira jutottam, hogy a dini_Get -nél lehet valami baj, nem a változóval.
Ment a plusz.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal