Jump to content
  • 0

pomoc Nemůžu se přihlásit o_O Y_ini login problém


DNLS

Dotaz

Zdarec. Mám problém. Chci udělat to, že se zaregistruju - po dalším připojení přihlásím. Fajn, tak se zaregistruju, normálně to funguje. (Zapíše se to v hash do ini souboru) Ale potom mám problém, když se chci přihlásit. Chybu hledám už fakt dlouho, xkrát jsem zkoušel něco měnit ale nefunguje to. Dokonce jsem se podíval i na návod přímo na tento login, podle kterého jsem to následně upravil i tak to nefunguje....  Budu rád za jakoukoliv pomoc o.o
 

 

enum pInfo
{
    Heslo,
    Float: PosX,
    Float: PosY,
    Float: PosZ,
    Float: Angle,
Interior,
VirtualWorld,
Prachy,
Skin
}
new PlayerInfo[MAX_PLAYERS][pInfo];

 

 

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch( dialogid )
{
case DIALOG_REGISTER:
{
InterpolateCameraPos(playerid, 1939.004150, -1062.770751, 104.268577, 1439.407226, -865.417724, 91.213317, 10000);
InterpolateCameraLookAt(playerid, 1934.104492, -1061.799316, 104.045997, 1437.915039, -860.647644, 91.072708, 10000);
if (!response) return Kick(playerid);
if(response)
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registrování","Musíš zadat heslo!","Zadat","Odejít");
GetPlayerPos( playerid, PlayerInfo[playerid][PosX], PlayerInfo[playerid][PosY], PlayerInfo[playerid][PosZ] );
GetPlayerFacingAngle( playerid, PlayerInfo[playerid][Angle] );
new INI:File = INI_Open( UserPath( playerid ) );
INI_SetTag( File, "DATA" );
INI_WriteFloat( File, "PositionX", PlayerInfo[playerid][PosX] );
INI_WriteFloat( File, "PositionY", PlayerInfo[playerid][PosY] );
INI_WriteFloat( File, "PositionZ", PlayerInfo[playerid][PosZ] );
INI_WriteFloat( File, "Angle", PlayerInfo[playerid][Angle] );
INI_WriteInt(File,"Heslo",udb_hash(inputtext));
INI_WriteInt( File, "Prachy", GetPlayerMoney( playerid ) );
INI_WriteInt( File, "Skin", GetPlayerSkin ( playerid ) );
INI_WriteInt( File, "Interior", GetPlayerInterior( playerid ) );
INI_WriteInt( File, "VirtualWorld", GetPlayerVirtualWorld( playerid ) );
INI_Close( File );
TextDrawDestroy(Textdraw0);
TextDrawDestroy(Textdraw1);
TextDrawDestroy(Textdraw2);
SetSpawnInfo(playerid, 0, 180, 1762.9524,-1943.9843,13.5683,190.9275, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
TogglePlayerSpectating(playerid, false);
logged = 1;
}
}


case DIALOG_LOGIN:
{
InterpolateCameraPos(playerid, 1939.004150, -1062.770751, 104.268577, 1439.407226, -865.417724, 91.213317, 10000);
InterpolateCameraLookAt(playerid, 1934.104492, -1061.799316, 104.045997, 1437.915039, -860.647644, 91.072708, 10000);
if ( !response ) return Kick(playerid);
if( response )
{
if(udb_hash(inputtext) == PlayerInfo[playerid][Heslo])
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
SetSpawnInfo(playerid, 0, PlayerInfo[playerid][skin], PlayerInfo[playerid][PosX], PlayerInfo[playerid][PosY], PlayerInfo[playerid][PosZ], PlayerInfo[playerid][Angle], 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
TextDrawDestroy(Textdraw0);
TextDrawDestroy(Textdraw1);
TextDrawDestroy(Textdraw2);
GivePlayerMoney( playerid, PlayerInfo[playerid][Prachy]);
SetPlayerInterior( playerid, PlayerInfo[playerid][interior] );
SetPlayerVirtualWorld( playerid, PlayerInfo[playerid][VirtualWorld] );
TogglePlayerSpectating(playerid, false);
logged = 1;
}
else
{
InterpolateCameraPos(playerid, 1939.004150, -1062.770751, 104.268577, 1439.407226, -865.417724, 91.213317, 10000);
InterpolateCameraLookAt(playerid, 1934.104492, -1061.799316, 104.045997, 1437.915039, -860.647644, 91.072708, 10000);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,"Příhlašení","Zadal si nesprávné heslo","Zadat","Odejít");
}
return 1;
}
}
}
return 1;
}

 

 

 

/*Credits to Dracoblue*/
stock udb_hash(buf[]) {
new length=strlen(buf);
    new s1 = 1;
    new s2 = 0;
    new n;
    for (n=0; n<length; n++)
    {
       s1 = (s1 + buf[n]) % 65521;
       s2 = (s2 + s1)     % 65521;
    }
    return (s2 << 16) + s1;
}
 
stock UserPath(playerid)
{
    new
        string[ 128 ],
        user_name[ MAX_PLAYER_NAME ]
    ;


    GetPlayerName( playerid, user_name, MAX_PLAYER_NAME );
    format( string, sizeof ( string ), CESTA, user_name );
    return
        string;
}
Edited by Daniels
Link to comment
Share on other sites

4 odpovědí na tuto otázku

Recommended Posts

  • 0
  • Globální moderátor

if(udb_hash(inputtext) == PlayerInfo[playerid][Heslo])

 

nikde nemáš inicializované PlayerInfo[playerid][Heslo], zřejmě pokaždé provádí: hash == 0

Link to comment
Share on other sites

  • 0

 

INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);

 

(Ach bože, ten návod by měli už konečně zakázat, smazat zničit...) Už jsem to tady říkal asi 10x: Jakýkoliv specifikátor ve jméně načítacího callbacku je značením, že bude načítat údaje pouze pod tím daným tagem. Ale pokud máš 1 tag, tak se ještě nic neděje(i když samotný tag jen na seznam údajů je skutečně k ničemu).

 

Nemluvě o tom, že ty to heslo ani ještě nenačteš. Rovnou kontroluješ, pokud zadal správné heslo, ale jak to může vědět, když údaje načítáš teprve až zadá "správné" heslo?

1) Buď si udělej 2 načítání, jeden callback pro heslo a druhý callback pro údaje a nebo 2) načítej údaje rovnou po příchodu na server. Bez zadání správného hesla se stejně nedostane s těmi údaji daleko.

Link to comment
Share on other sites

  • 0


 

if(udb_hash(inputtext) == PlayerInfo[playerid][Heslo])

 

nikde nemáš inicializované PlayerInfo[playerid][Heslo], zřejmě pokaždé provádí: hash == 0

 

Omlouvám se, je to chyba má že jsem to sem nedal celé.

 

forward @LoadUser_DATA( playerid, name[], value[] );
 
@LoadUser_DATA( playerid, name[], value[] )
{
INI_Int("Heslo",PlayerInfo[playerid][Heslo]);
    INI_Float( "PositionX", PlayerInfo[playerid][PosX] );
    INI_Float( "PositionY", PlayerInfo[playerid][PosY] );
    INI_Float( "PositionZ", PlayerInfo[playerid][PosZ] );
    INI_Float( "Angle", PlayerInfo[playerid][Angle] );
    INI_Int( "Prachy", PlayerInfo[playerid][Prachy] );
    INI_Int( "Skin", PlayerInfo[playerid][Skin] );
INI_Int( "Interior", PlayerInfo[playerid][Interior] );
INI_Int( "VirtualWorld", PlayerInfo[playerid][VirtualWorld] );
    return 1;
}

 

 

SkiBig:

public OnPlayerConnect( playerid )
{
logged = 0;
if(fexist(UserPath(playerid)))
{
TogglePlayerSpectating(playerid, true);
   InterpolateCameraPos(playerid, 1939.004150, -1062.770751, 104.268577, 1439.407226, -865.417724, 91.213317, 10000);
InterpolateCameraLookAt(playerid, 1934.104492, -1061.799316, 104.045997, 1437.915039, -860.647644, 91.072708, 10000);
TextDrawShowForPlayer(playerid,Textdraw0);
   TextDrawShowForPlayer(playerid,Textdraw1);
   TextDrawShowForPlayer(playerid,Textdraw2);
   ClearChat(playerid);
   INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
   ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Přihlašování", "Zadej své heslo", "Zadat", "Odejít");
}

 

(Ach bože, ten návod by měli už konečně zakázat, smazat zničit...) Už jsem to tady říkal asi 10x: Jakýkoliv specifikátor ve jméně načítacího callbacku je značením, že bude načítat údaje pouze pod tím daným tagem. Ale pokud máš 1 tag, tak se ještě nic neděje(i když samotný tag jen na seznam údajů je skutečně k ničemu).

Nemluvě o tom, že ty to heslo ani ještě nenačteš. Rovnou kontroluješ, pokud zadal správné heslo, ale jak to může vědět, když údaje načítáš teprve až zadá "správné" heslo?
1) Buď si udělej 2 načítání, jeden callback pro heslo a druhý callback pro údaje a nebo 2) načítej údaje rovnou po příchodu na server. Bez zadání správného hesla se stejně nedostane s těmi údaji daleko.

 
Tag DATA mám, LoadUser_DATA taky, takže to načte správně. ten LoadUser_%s INI Parse mám u connectu a i v přihlášení, to samozřejmě dám pryč, bylo to jen v rámci toho, že jsem to zkoušel a potom to nesmazal když to i tak nefungovalo..
 
Takže pořád nevím.... Nějaké jiné nápady?
 

Edited by Daniels
Link to comment
Share on other sites

  • 0

 

forward @LoadUser_DATA( playerid, name[], value[] );

 

Používej obyčejné volání. Žádné speciální. Akorát si to zbytečně komplikuješ.

 

forward LoadData(playerid, name[], value[]);
public LoadData(playerid, name[], value[]) {

    return 0; //nezapomenou vracet 0.
 

Tag DATA mám, LoadUser_DATA taky, takže to načte správně.

tvl... Ano, máš tam tag, toho jsem si všiml. Ale psal jsem, že ho tam máš úplně zbytečně.

 

INI Parse mám u connectu a i v přihlášení, to samozřejmě dám pryč, bylo to jen v rámci toho, že jsem to zkoušel a potom to nesmazal když to i tak nefungovalo..

Kde to smažeš? Si vyber. Je to docela zásadní:

1) Pokud to budeš mít jen v connectu, do proměnné se načtou údaje a ty jen pak s nimi v OnDialogResponse pracuješ.

2) Pokud to budeš mít jen V podmínce při načítání, tak to ti nenajde nikdy. Proto ho musíš načítat další. Pokud chceš jenom to heslo načíst, stačí přidat jen další načítací callback a ten volat při connectu. Jakmile zadá správné heslo, zavolá se druhý callback.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...