Skripta koju koristim: 0
Detaljan opis problema: pa ne znam napravit da mi sacuva password kad igrac odgovori na dijalog, pravio sam nesto i errore mi baca kao array size does not match itd.
Dio skripte:
Dijalog|
YCMD:changepass(playerid, params[], help)
{
#pragma unused help
new naslov[32];
if(!IsPlayerConnected(playerid))
return SCM(playerid, COLOR_GRAD3, "Moras biti ulogovan da bi mogao promijeniti password!");
format(naslov,sizeof(naslov), "%s", PlayerName(playerid));
ShowPlayerDialog(playerid, DIALOG_CHANGEPW, DIALOG_STYLE_INPUT, naslov, ""COL_YELLOW"Upisi novu lozinku:", "OK", "Odustani");
return 1;
}
Odgovor na dijalog|
case DIALOG_CHANGEPW:
{
if(response)
{
new
text[128];
if(strlen(inputtext) >= 6 && strlen(inputtext) <= 35)
{
// INI_WriteString(playerFile, "Lozinka", inputtext);
PlayerInfo[playerid][pPassword] = inputtext; // ovde error
format(text, sizeof(text), "Uspjesno | Vasa nova lozinka je: %s", inputtext);
SCM(playerid, COLOR_YELLOW, text);
}
else
{
SCM(playerid, COLOR_ZELENA, "Lozinka mora da bude izmedju [{ffffff}6"COL_ZELENA"] i [{ffffff}35"COL_ZELENA"] znakova!");
}
}
}
Neke slike/video za lakse dobivanje pomoci(neobavezno):
mozse probati ovako, ne garantujem da ce raditi YCMD:changepass(playerid,params[], help)
{
#pragma unused help
new test[129],novasifra[50];
if(sscanf(params,"s[50]",novasifra)) return SCM(playerid,-1,"Koristi: /changepass sifra");
WP_Hash(test,sizeof(test),novasifra);
new INI:File = INI_Open(Korisnici(playerid));
INI_WriteString(File,"Password",hash);
INI_Close(File);
return 1;
}
Citat: Blaeks poslato Februar 24, 2013, 14:04:44 POSLE PODNE
mozse probati ovako, ne garantujem da ce raditi YCMD:changepass(playerid,params[], help)
{
#pragma unused help
new test[129],novasifra[50];
if(sscanf(params,"s[50]",novasifra)) return SCM(playerid,-1,"Koristi: /changepass sifra");
WP_Hash(test,sizeof(test),novasifra);
new INI:File = INI_Open(Korisnici(playerid));
INI_WriteString(File,"Password",hash);
INI_Close(File);
return 1;
}
Hvala ali i ne moram probat,znam da nece radit, pass mi se cuva kao varijabla, nema hash,
a kao drugo treba mi u
dijalogu, jbg :D
Ako nece probaj ovako ?
Isto ne garantiram da radi :D
case DIALOG_CHANGEPW:
{
if(response)
{
new
text[128];
if(strlen(inputtext) >= 6 && strlen(inputtext) <= 35)
{
new string[100],string1[128];
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteString(File, "Lozinka", inputtext);
format(string, sizeof(string), "%s", inputtext);
PlayerInfo[playerid][pPassword] = string;
INI_Close(File);
format(text, sizeof(text), "Uspjesno | Vasa nova lozinka je: %s", inputtext);
SCM(playerid, COLOR_YELLOW, text);
}
else
{
SCM(playerid, COLOR_ZELENA, "Lozinka mora da bude izmedju [{ffffff}6"COL_ZELENA"] i [{ffffff}35"COL_ZELENA"] znakova!");
}
}
}
deletujes hash onda, ali svakako ti je laksi moj princip nego tvoj, ali kak hoces
ma nema sanse, probo sam na 100 nacina nece, >:( >:( >:( >:( >:( >:( >:( >:( >:( >:( >:( :'( :'( :'( :'( :'( :'( :'( :'( :'( :'(
Ovako sam stavio
case DIALOG_CHANGEPW:
{
if(response)
{
new
text[128];
if(strlen(inputtext) >= 6 && strlen(inputtext) <= 35)
{
new string[35];
new INI:File = INI_Open(Korisnici(playerid));
INI_WriteString(File,"Lozinka",inputtext);
format(string, sizeof(string), "%s", inputtext);
PlayerInfo[playerid][pPassword] = string;
format(text, sizeof(text), "Uspjesno | Vasa nova lozinka je: %s", inputtext);
SCM(playerid, COLOR_YELLOW, text);
}
else
{
SCM(playerid, COLOR_ZELENA, "Lozinka mora da bude izmedju [{ffffff}6"COL_ZELENA"] i [{ffffff}35"COL_ZELENA"] znakova!");
}
}
}
i kako god da probam nece, errori :S
#define DIALOG_PASSWORD 1
YCMD:lozinka(playerid, params[], help)
{
ShowPlayerDialog(playerid,DIALOG_PASSWORD,DIALOG_STYLE_INPUT," Lozinka ","Unesite novu lozinku","Uredu","Izlaz");
return 1;
}
if(dialogid == DIALOG_PASSWORD)
{
if(!response) return 1;
if(response)
{
new string[100],string1[128];
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteString(File, "Password", inputtext);
format(string, sizeof(string), "%s", inputtext);
PlayerInfo[playerid][pPass] = string;
INI_Close(File);
format(string1,sizeof(string1),"Vasa nova lozinka glasi: %s",inputtext);
SendClientMessage(playerid,COLOR_WHITE,string1);
}
}
Ja sam kod sebe testao meni ovako radi ?
Zamjeni si "pPass" !
Citat: FlasH poslato Februar 24, 2013, 14:40:19 POSLE PODNE
#define DIALOG_PASSWORD 1
YCMD:lozinka(playerid, params[], help)
{
ShowPlayerDialog(playerid,DIALOG_PASSWORD,DIALOG_STYLE_INPUT," Lozink ","Unesite novu lozinku","Uredu","Izlaz");
return 1;
}
if(dialogid == DIALOG_PASSWORD)
{
if(!response) return 1;
if(response)
{
new string[100],string1[128];
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteString(File, "Password", inputtext);
format(string, sizeof(string), "%s", inputtext);
PlayerInfo[playerid][pPass] = string;
INI_Close(File);
format(string1,sizeof(string1),"Vasa nova lozinka glasi: %s",inputtext);
SendClientMessage(playerid,COLOR_WHITE,string1);
}
}
Ja sam kod sebe testao meni ovako radi ?
Zamjeni si "pPass" !
probat cu hvala
znaci necu u dijalogu lakse je /changepass [password]
Probao sam i tvoje, Blaeks, al opet mi neke jebene errore izbaciva nez ni ja sta
evo ti sve sto je potrebno za to::
#define USER_FILE "Igraci/%s.ini"
// varijabla je pPassword[129]
YCMD:changepass(playerid,params[], help)
{
#pragma unused help
new novasifra[50];
if(sscanf(params,"s[50]",novasifra)) return SCM(playerid,-1,"Koristi: /changepass sifra");
new INI:File = INI_Open(USER_FILE(playerid));
INI_WriteString(File,"Password",novasifra);
INI_Close(File);
return 1;
}
public LoadUserData(playerid, name[], value[])
{
INI_String("Lozinka", PlayerInfo[playerid][pPassword], 129);
//--------------------------
//OnPlayerRegister:
INI_WriteString(playerFile, "Lozinka", lozinka);
//---------------------
//OnPlayerdisconnect:
SacuvajIgraca(playerid)
{
new uFile[35];
format(uFile, 35, USER_FILE, PlayerName(playerid));
new INI:playerFile = INI_Open(uFile);
INI_WriteString(playerFile, "Lozinka", PlayerInfo[playerid][pPassword]);
//------------------------------------
ne znam u cemu je problem :O
naravno da moze, samo me poslusaj
brate sjebe mi se kad skinem hash,
evo ti sve potrebno pa ako mozes napravit ako ne nema veze :)
znaci necu u dijalogu lakse je /changepass [password]
#define USER_FILE "Igraci/%s.ini"
// varijabla je pPassword[129]
YCMD:changepass(playerid,params[], help)
{
#pragma unused help
new novasifra[50];
if(sscanf(params,"s[50]",novasifra)) return SCM(playerid,-1,"Koristi: /changepass sifra");
new INI:File = INI_Open(USER_FILE(playerid));
INI_WriteString(File,"Password",novasifra);
INI_Close(File);
return 1;
}
public LoadUserData(playerid, name[], value[])
{
INI_String("Lozinka", PlayerInfo[playerid][pPassword], 129);
//--------------------------
//OnPlayerRegister:
INI_WriteString(playerFile, "Lozinka", lozinka);
//---------------------
//OnPlayerdisconnect:
SacuvajIgraca(playerid)
{
new uFile[35];
format(uFile, 35, USER_FILE, PlayerName(playerid));
new INI:playerFile = INI_Open(uFile);
INI_WriteString(playerFile, "Lozinka", PlayerInfo[playerid][pPassword]);
//------------------------------------
pPassword mi se cuva kao "Lozinka" a ne "Password" mzoda je tu sta? :S
Ovo sto ti govorim za ono tvoje prvo je:
PlayerInfo[playerid][pPassword] = inputtext; // ovde error
Ne mozes tako stavljati na string
Valjda ti je string pPassword.
treba ovako:
format(PlayerInfo[playerid][pPassword],128,"%s",inputtext);
I mozes napraviti funkciju da updateas pass ili tu samo dodaj da upises pass u fajl cisto da ga sacuva odmah tu...