"Server closed the connection" nakon Log/Reg sistema *

Započeo Neckiy, juče u 21:51:45 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 5 gostiju pregledaju ovu temu.

Naslov problema*: "Server closed the connection" nakon Log/Reg sistema *

Opis problema*: Pokrenuo sam novu skriptu od pocetka pre par dana i dosao do log/reg sistema. Nista preterano, nije mi prvi put da ga radim. Medjutim, kada se npr. registrujem, y_ini sacuva moj fajl, kao i podatke, i nakon toga mi konekcija crasha i dobijem poruku "Server closed the connection" (server i dalje radi, samo me je kikovalo). Imam osecaj da sam negde nesto maleno propustio i da me zbog toga zajebava. Ispod cu poslati sve vezano za moj log/reg sistem. Koristim y_ini i open.mp server. :)

Pokušaj rešavanja*: Pokusao sam dosta provera da postavim i brisem neke stvari ali problem je idalje tu.

Deo programskog koda*:
enum {
	d_reg,
	d_log
};

enum pInfo {
	pLozinka,
	pPare,
	pSkin
};

new PlayerInfo[MAX_PLAYERS][pInfo];

#define PLAYERPATH "/MojServer/Korisnici/%s.ini"

stock UserPath(playerid) {
	new str[128], name[MAX_PLAYER_NAME];
	GetPlayerName(playerid,name,sizeof(name));
	format(str,sizeof(str),PLAYERPATH,name);
	return str;
}

forward SacuvajAkaunt(playerid);
public SacuvajAkaunt(playerid) {
	new INI:File = INI_Open(UserPath(playerid));
	INI_SetTag(File, "data");
	INI_WriteInt(File, "Pare", PlayerInfo[playerid][pPare]);
	INI_WriteInt(File, "Skin", PlayerInfo[playerid][pSkin]);
	INI_Close(File);
	return true;
}

forward LoadUser_data(playerid, name[], value[]);
public LoadUser_data(playerid, name[], value[]) {
	INI_Int("Lozinka", PlayerInfo[playerid][pLozinka]);
	INI_Int("Pare", PlayerInfo[playerid][pPare]);
	INI_Int("Skin", PlayerInfo[playerid][pSkin]);
	return 1;
}

stock udb_hash(const buf[]) {
	new duzina=strlen(buf);
	new s1 = 1; 
	new s2 = 0;
	new n;
	for(n=0;n<duzina; n++) {
		s1 = (s1 + buf[n]) % 65521;
		s2 = (s2 + s1)	   % 65521;
	}
	return (s1 << 16) + s1;
}

public OnPlayerConnect(playerid) {
    //========================= [ Proverava Da Li Account Postoji ]
	if(fexist(UserPath(playerid))) {
		INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
		new str[128];
		format(str, sizeof(str), "{FFFFFF}Vas nalog je registrovan.\nUkucajte sifru.");
		ShowPlayerDialog(playerid, d_log, DIALOG_STYLE_PASSWORD, "{FFFFFF}Login", str, "{FFFFFF}Login", "{FF0000}Otkazi");	
	} else {
		new str[128];
		format(str, sizeof(str), "{FFFFFF}Vas nalog {FF0000}nije {FFFFFF}registrovan.\nRegistrujte se.");
		ShowPlayerDialog(playerid, d_reg, DIALOG_STYLE_PASSWORD, "{FFFFFF}Registracija", str, "{FFFFFF}Registruj se", "{FF0000}Otkazi");
	}
	
	UlogovaniIgrac[playerid] = 0;

	return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
	if(dialogid == d_reg) {
		if(!response) return Kick(playerid);
		if(response) {
			if(!strlen(inputtext) || strlen(inputtext) < 5 || strlen(inputtext) > 20) {
				new str[128];
				format(str, sizeof(str), "{FFFFFF}Vas nalog {FF0000}nije {FFFFFF}registrovan.\nRegistrujte se.");
				ShowPlayerDialog(playerid, d_reg, DIALOG_STYLE_PASSWORD, "{FFFFFF}Registracija", str, "{FFFFFF}Registruj se", "{FF0000}Otkazi");
				SendClientMessage(playerid, ERROR, "[!] Lozinka mora imati izmedju 5 i 20 znakova.");		
			} else {
				new INI:File = INI_Open(UserPath(playerid));
				INI_SetTag(File, "data");
				INI_WriteInt(File,"Lozinka",udb_hash(inputtext));
				INI_Close(File);

				PlayerInfo[playerid][pSkin] = 26; 			SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
				PlayerInfo[playerid][pPare] = 10000; 		GivePlayerMoney(playerid, 10000);
				SacuvajAkaunt(playerid);


				SetSpawnInfo(playerid, NO_TEAM, PlayerInfo[playerid][pSkin], 1213.6964, -1326.7321, 13.5676, 88.5987);
				SpawnPlayer(playerid);


				SendClientMessage(playerid, 0xFFFFFFAA, "Uspesno si se registrovao na server.");
			}		
		}
	}
	if(dialogid == d_log) {
		if(!response) return Kick(playerid);
		if(response) {
			if(udb_hash(inputtext) == PlayerInfo[playerid][pLozinka]) {
				INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
				SetSpawnInfo(playerid, NO_TEAM,26, 1213.6964,-1326.7321,13.5676,88.5987);
				SpawnPlayer(playerid);
				GivePlayerMoney(playerid, PlayerInfo[playerid][pPare]);
				SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
				SendClientMessage(playerid, 0xFFFFFFAA, "Uspesno si se logovao na server.");
			} else {
				SendClientMessage(playerid, ERROR, "[!] Vasa lozinka nije tacna.");
				new str[128];
				format(str, sizeof(str), "{FFFFFF}Vas nalog je registrovan.\nUkucajte sifru.");
				ShowPlayerDialog(playerid, d_log, DIALOG_STYLE_PASSWORD, "{FFFFFF}Login", str, "{FFFFFF}Login", "{FF0000}Otkazi");				
			}	
		}
	}
	return 1;
}

Debug informacije: //

Fotografija problema u igri: https://imgur.com/a/xUnTcVp

Korišćene biblioteke (includes): y_ini

Dodatne informacije: //
Mnogo ljudi mi govori da sam autistican.
U pravu su...

Zeleo bih napomenuti, da iz nekog razloga Login radi, dok Register ne radi. Tacnije sistemi rade, ali kada ukucam sifru i pritisnem ENTER, login normalno radi, a register mi napravi fajl i napuni ga informacijama ali me, kao na slikama, diskonekta sa servera.

EDIT************: Isprava, niti login ne radi. Svakih 10min radi pa ne radi pa radi pa ne radi, i to je ono sto me najvise jebe, jer ne znam gde je greska. Bukvalno random radi random ne radi.
Poslednja Izmena: juče u 21:57:26 POSLE PODNE od Neckiy
Mnogo ljudi mi govori da sam autistican.
U pravu su...

Citat: Neckiy poslato juče u 21:51:45 POSLE PODNENaslov problema*: "Server closed the connection" nakon Log/Reg sistema *

Opis problema*: Pokrenuo sam novu skriptu od pocetka pre par dana i dosao do log/reg sistema. Nista preterano, nije mi prvi put da ga radim. Medjutim, kada se npr. registrujem, y_ini sacuva moj fajl, kao i podatke, i nakon toga mi konekcija crasha i dobijem poruku "Server closed the connection" (server i dalje radi, samo me je kikovalo). Imam osecaj da sam negde nesto maleno propustio i da me zbog toga zajebava. Ispod cu poslati sve vezano za moj log/reg sistem. Koristim y_ini i open.mp server. :)

Pokušaj rešavanja*: Pokusao sam dosta provera da postavim i brisem neke stvari ali problem je idalje tu.

Deo programskog koda*:
enum {
    d_reg,
    d_log
};

enum pInfo {
    pLozinka,
    pPare,
    pSkin
};

new PlayerInfo[MAX_PLAYERS][pInfo];

#define PLAYERPATH "/MojServer/Korisnici/%s.ini"

stock UserPath(playerid) {
    new str[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(str,sizeof(str),PLAYERPATH,name);
    return str;
}

forward SacuvajAkaunt(playerid);
public SacuvajAkaunt(playerid) {
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File, "data");
    INI_WriteInt(File, "Pare", PlayerInfo[playerid][pPare]);
    INI_WriteInt(File, "Skin", PlayerInfo[playerid][pSkin]);
    INI_Close(File);
    return true;
}

forward LoadUser_data(playerid, name[], value[]);
public LoadUser_data(playerid, name[], value[]) {
    INI_Int("Lozinka", PlayerInfo[playerid][pLozinka]);
    INI_Int("Pare", PlayerInfo[playerid][pPare]);
    INI_Int("Skin", PlayerInfo[playerid][pSkin]);
    return 1;
}

stock udb_hash(const buf[]) {
    new duzina=strlen(buf);
    new s1 = 1; 
    new s2 = 0;
    new n;
    for(n=0;n<duzina; n++) {
        s1 = (s1 + buf[n]) % 65521;
        s2 = (s2 + s1)      % 65521;
    }
    return (s1 << 16) + s1;
}

public OnPlayerConnect(playerid) {
    //========================= [ Proverava Da Li Account Postoji ]
    if(fexist(UserPath(playerid))) {
        INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
        new str[128];
        format(str, sizeof(str), "{FFFFFF}Vas nalog je registrovan.\nUkucajte sifru.");
        ShowPlayerDialog(playerid, d_log, DIALOG_STYLE_PASSWORD, "{FFFFFF}Login", str, "{FFFFFF}Login", "{FF0000}Otkazi");    
    } else {
        new str[128];
        format(str, sizeof(str), "{FFFFFF}Vas nalog {FF0000}nije {FFFFFF}registrovan.\nRegistrujte se.");
        ShowPlayerDialog(playerid, d_reg, DIALOG_STYLE_PASSWORD, "{FFFFFF}Registracija", str, "{FFFFFF}Registruj se", "{FF0000}Otkazi");
    }
    
    UlogovaniIgrac[playerid] = 0;

    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
    if(dialogid == d_reg) {
        if(!response) return Kick(playerid);
        if(response) {
            if(!strlen(inputtext) || strlen(inputtext) < 5 || strlen(inputtext) > 20) {
                new str[128];
                format(str, sizeof(str), "{FFFFFF}Vas nalog {FF0000}nije {FFFFFF}registrovan.\nRegistrujte se.");
                ShowPlayerDialog(playerid, d_reg, DIALOG_STYLE_PASSWORD, "{FFFFFF}Registracija", str, "{FFFFFF}Registruj se", "{FF0000}Otkazi");
                SendClientMessage(playerid, ERROR, "[!] Lozinka mora imati izmedju 5 i 20 znakova.");        
            } else {
                new INI:File = INI_Open(UserPath(playerid));
                INI_SetTag(File, "data");
                INI_WriteInt(File,"Lozinka",udb_hash(inputtext));
                INI_Close(File);

                PlayerInfo[playerid][pSkin] = 26;            SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
                PlayerInfo[playerid][pPare] = 10000;        GivePlayerMoney(playerid, 10000);
                SacuvajAkaunt(playerid);


                SetSpawnInfo(playerid, NO_TEAM, PlayerInfo[playerid][pSkin], 1213.6964, -1326.7321, 13.5676, 88.5987);
                SpawnPlayer(playerid);


                SendClientMessage(playerid, 0xFFFFFFAA, "Uspesno si se registrovao na server.");
            }        
        }
    }
    if(dialogid == d_log) {
        if(!response) return Kick(playerid);
        if(response) {
            if(udb_hash(inputtext) == PlayerInfo[playerid][pLozinka]) {
                INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
                SetSpawnInfo(playerid, NO_TEAM,26, 1213.6964,-1326.7321,13.5676,88.5987);
                SpawnPlayer(playerid);
                GivePlayerMoney(playerid, PlayerInfo[playerid][pPare]);
                SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
                SendClientMessage(playerid, 0xFFFFFFAA, "Uspesno si se logovao na server.");
            } else {
                SendClientMessage(playerid, ERROR, "[!] Vasa lozinka nije tacna.");
                new str[128];
                format(str, sizeof(str), "{FFFFFF}Vas nalog je registrovan.\nUkucajte sifru.");
                ShowPlayerDialog(playerid, d_log, DIALOG_STYLE_PASSWORD, "{FFFFFF}Login", str, "{FFFFFF}Login", "{FF0000}Otkazi");                
            }    
        }
    }
    return 1;
}

Debug informacije: //

Fotografija problema u igri: https://imgur.com/a/xUnTcVp

Korišćene biblioteke (includes): y_ini

Dodatne informacije: //

forward SacuvajAkaunt(playerid);
public SacuvajAkaunt(playerid) {
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File, "data");
    INI_WriteInt(File, "Level", PlayerInfo[playerid][pLevel]);                                                                                                                                                                                                                                                                                               
    INI_WriteInt(File, "Pare", PlayerInfo[playerid][pPare]);                                                                                                                                                                                                                                                                
    INI_WriteInt(File, "Skin", PlayerInfo[playerid][pSkin]);
    INI_Close(File);
    return true;


}
Zasto cuvas samo skin,pare,password? Fali ti level naprimjer, posalji logove(crashdetect) naprimjer probaj dodat level da cuva pa da vidis jel radi ? Ne
radim u y_ini pa zato al nece te nista skodit ako level cuvas mozda i pravi zabunu 
enum pInfo {
    pLozinka,
    pPare,
    pLevel,                                                                                                                                                                                                                                                                                                   
     pSkin
};
forward SacuvajAkaunt(playerid);
public SacuvajAkaunt(playerid) {
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File, "data");
    INI_WriteInt(File, "Pare", PlayerInfo[playerid][pPare]);
    INI_WriteInt(File, "Skin", PlayerInfo[playerid][pSkin]);
    INI_WriteInt(File, "Level", PlayerInfo[playerid][pLevel]);                                                                      
        INI_Close(File);
    return true;


}
Eto ti promenjen kod
  PlayerInfo[playerid][pSkin] = 26;                                                                                   
                SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
                PlayerInfo[playerid][pPare] = 10000;                                                                                                 
                GivePlayerMoney(playerid, 10000);
  Isto i ovde                                       
               
                  
                PlayerInfo[playerid][pSkin] = 26;                                                                            
                                                                                                           
                SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
                PlayerInfo[playerid][pPare] = 10000;                                                                      
                GivePlayerMoney(playerid, 10000);                                                                                                     
                PlayerInfo[playerid][pLevel] = 6;                                                                                           
                SetPlayerScore(playerid, PlayerInfo[playerid][pLevel]);
Moje misljene je da je problem sto ne cuva level to je moje misljene, svakako posalji crashdetect logove
Poslednja Izmena: danas u 00:56:53 PRE PODNE od MaEsTrOo

Zato kad neko objavi tutorial trebalo bi da postoji supervizor... Pogledacu sutra kod natenane, aBd. Ako zelis da resis problem, predji na MySQL.  8)

enum pInfo {
    pLozinka,
    pPare,
    pSkin
};

new PlayerInfo[MAX_PLAYERS][pInfo];
#define PLAYERPATH "/MojServer/Korisnici/%s.ini"

stock UserPath(playerid) {
    new str[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    format(str, sizeof(str), PLAYERPATH, name);
    return str;
}

forward SacuvajAkaunt(playerid);
public SacuvajAkaunt(playerid) {
    new INI:File = INI_Open(UserPath(playerid));
    if (File == INI_INVALID) {
        print("ERROR: Ne mogu otvoriti fajl za korisnika.");
        return false;
    }
    INI_SetTag(File, "data");
    INI_WriteInt(File, "Lozinka", PlayerInfo[playerid][pLozinka]);
    INI_WriteInt(File, "Pare", PlayerInfo[playerid][pPare]);
    INI_WriteInt(File, "Skin", PlayerInfo[playerid][pSkin]);
    INI_Close(File);
    return true;
}

forward LoadUser_data(playerid, name[], value[]);
public LoadUser_data(playerid, name[], value[]) {
    INI_Int("Lozinka", PlayerInfo[playerid][pLozinka]);
    INI_Int("Pare", PlayerInfo[playerid][pPare]);
    INI_Int("Skin", PlayerInfo[playerid][pSkin]);
    return 1;
}

stock udb_hash(const buf[]) {
    new len = strlen(buf);
    new s1 = 1, s2 = 0;
    for (new i = 0; i < len; i++) {
        s1 = (s1 + buf[i]) % 65521;
        s2 = (s2 + s1) % 65521;
    }
    return (s2 << 16) + s1;
}

public OnPlayerConnect(playerid) {
    if (fexist(UserPath(playerid))) {
        INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
        ShowPlayerDialog(playerid, 0, DIALOG_STYLE_PASSWORD, "Login", "Unesite lozinku:", "Login", "Izlaz");
    } else {
        ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Registracija", "Unesite novu lozinku:", "Registruj se", "Izlaz");
    }
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
    if (!response) {
        Kick(playerid);
        return 1;
    }

    if (dialogid == 1) { // Registracija
        if (strlen(inputtext) < 5 || strlen(inputtext) > 20) {
            ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Registracija", "Lozinka mora biti između 5 i 20 karaktera:", "Registruj se", "Izlaz");
        } else {
            PlayerInfo[playerid][pLozinka] = udb_hash(inputtext);
            PlayerInfo[playerid][pPare] = 10000;
            PlayerInfo[playerid][pSkin] = 26;
            SacuvajAkaunt(playerid);
            SetSpawnInfo(playerid, NO_TEAM, PlayerInfo[playerid][pSkin], 0.0, 0.0, 3.0, 0.0);
            SpawnPlayer(playerid);
            SendClientMessage(playerid, -1, "Uspešno ste registrovani!");
        }
    } else if (dialogid == 0) { // Login
        if (udb_hash(inputtext) == PlayerInfo[playerid][pLozinka]) {
            SetSpawnInfo(playerid, NO_TEAM, PlayerInfo[playerid][pSkin], 0.0, 0.0, 3.0, 0.0);
            SpawnPlayer(playerid);
            GivePlayerMoney(playerid, PlayerInfo[playerid][pPare]);
            SendClientMessage(playerid, -1, "Uspešno ste se prijavili!");
        } else {
            ShowPlayerDialog(playerid, 0, DIALOG_STYLE_PASSWORD, "Login", "Pogrešna lozinka. Pokušajte ponovo:", "Login", "Izlaz");
        }
    }
    return 1;
}

O tvom code koji je kopiran i lepljen, pre svega prestar i glupa logika koriscenja, pogresna potpuno. Probaj ovako, trebalo bi da radi. Imas nodijev mod u omp, imas nejtanovih modova ne zna se broj, gde imas odlicne primere kako se pise kod. Ovo je blagi uzas. Koristis UDB Hash iako je bcrypt za omp preporucen. Nista nisi ispratio od dokumentacije, nisi nista procitao.
Poslednja Izmena: danas u 08:28:46 PRE PODNE od markosimic
HTML / CSS / Javascript / Inspect : Entry Masterclass.
ReactJS / Tailwind CSS / PWA / Axios / SCSS / Redux, ViteJS : Entry Masterclass.
C / C++ / C# / C-objective - kroz Pawn Lang : Entry Masterclass
Grupisano Pravljenje Objekata : Filterscript.


Sta je to web development?
To je nesto ono kao, kako bih to rekao, izgubis volju za zivotom i zelis da se ubijes, ali to je okej.
Onda jednostavno shvatis da si bio glup i resis problem, das sam sebi lajk,
skuvas NES 3u1 i pripremis se za sledeci projekat.

I? Sta si promenio u kodu za koji si rekao da je uzas? Izbacio si enum za dijaloge i dodao da se upisuje id dijaloga rucno, sto je starija i neprakticnija metoda za identifikaciju dijaloga? Sve ostalo si ostavio manje vise isto.

Sto se teme tice, na putu sam, dolazim sutra navece i resicemo problem kad mi laptop bude pri ruci.

"I choose to have faith, because without that, I have nothing."