Í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;
}
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...