GTA Közösség - A magyar GTA fórum
San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: PAJLOT - 2021. március 13. - 00:09:50
-
Sziasztok!
A hiba maga: Ha egyedül vagyok a szerveren akkor minden tökéletes, viszont ha feljön még valaki akkor összekavarodnak az adatok, megkapom a másik skinjét, szintjét, adminszintjét és ez fordítva is.
Mi lehet a gond?
public OnPlayerDisconnect(playerid, reason)
{
new quit[128];
GetPlayerName(playerid, JatekosNev, sizeof(JatekosNev));
format(quit, 128, "PROJEKTSZERÓ: %s lecsatlakozott a szerverről.", JatekosNev);
SendClientMessageToAll(FEHER, quit);
//MENTÉS
new file[128];
format(file, sizeof(file), "/Karakterek/%s.ini", JatekosNev);
if(fexist(file) && Belepve[playerid] == 1)
{
dini_IntSet(file, "Penz", PlayerInfo[playerid][Penz]);
dini_IntSet(file, "Szint", PlayerInfo[playerid][Szint]);
dini_IntSet(file, "Adminszint", PlayerInfo[playerid][AdminSzint]);
dini_IntSet(file, "Skin", PlayerInfo[playerid][Skin]);
GetPlayerPos(playerid, Float: pozX, Float: pozY, Float: pozZ);
GetPlayerFacingAngle(playerid, Float: Rot);
dini_FloatSet(file, "POZX", Float: pozX);
dini_FloatSet(file, "POZY", Float: pozY);
dini_FloatSet(file, "POZZ", Float: pozZ);
dini_FloatSet(file, "POZROT", Float: Rot);
}
Belepve[playerid] = 0;
PlayerInfo[playerid][Penz] = 0;
PlayerInfo[playerid][Szint] = 0;
PlayerInfo[playerid][AdminSzint] = 0;
PlayerInfo[playerid][Skin] = 0;
pozX = 0, pozY = 0, pozZ = 0, Rot = 0;
KillTimer(tMentes[playerid]);
return 1;
}
public OnPlayerSpawn(playerid)
{
new file[128];
format(file, sizeof(file), "/Karakterek/%s.ini", JatekosNev);
SetPlayerPos(playerid, dini_Float(file, "POZX"), dini_Float(file, "POZY"), dini_Float(file, "POZZ"));
SetPlayerFacingAngle(playerid, dini_Float(file, "POZROT"));
SetPlayerSkin(playerid, dini_Int(file, "Skin"));
Belepve[playerid] = 1;
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == regisztracio)
{
if(response)
{
new file[128];
new string[128];
GetPlayerName(playerid, JatekosNev, sizeof(JatekosNev));
if(strlen(inputtext) == 0)
{
format(string, sizeof(string), "Üdv %s! \nMég nincs karaktered, kérlek add meg a kívánt jelszavad.", JatekosNev);
ShowPlayerDialog(playerid, regisztracio, DIALOG_STYLE_INPUT, "Regisztráció", string, "OK", "Kilépés");
return 0;
}
format(file, sizeof(file), "/Karakterek/%s.ini", JatekosNev);
if(!fexist(file))
{
dini_Create(file);
dini_IntSet(file, "Antibug", 0);
dini_IntSet(file, "Jelszo", udb_hash(inputtext));
dini_IntSet(file, "Penz", 0);
dini_IntSet(file, "Szint", 0);
dini_IntSet(file, "Adminszint", 0);
dini_IntSet(file, "Skin", 5);
dini_FloatSet(file, "POZX", 1481.1920);
dini_FloatSet(file, "POZY", -1766.7390);
dini_FloatSet(file, "POZZ", 18.7958);
dini_FloatSet(file, "POZROT", 359.9680);
format(string, sizeof(string), "Üdv %s! \nRegisztrálva vagy, kérlek add meg a jelszavad.", JatekosNev);
ShowPlayerDialog(playerid, bejelentkezes, DIALOG_STYLE_INPUT, "Bejelentkezés", string, "OK", "Kilépés");
}
}
}
if(dialogid == bejelentkezes)
{
if(response)
{
new file[128];
new string[128];
GetPlayerName(playerid, JatekosNev, sizeof(JatekosNev));
if(strlen(inputtext) == 0)
{
format(string, sizeof(string), "Üdv %s! \nRegisztrálva vagy, kérlek add meg a jelszavad.", JatekosNev);
ShowPlayerDialog(playerid, bejelentkezes, DIALOG_STYLE_INPUT, "Bejelentkezés", string, "OK", "Kilépés");
return 0;
}
format(file, sizeof(file), "/Karakterek/%s.ini", JatekosNev);
if(fexist(file))
{
new Jelszo = dini_Int(file, "Jelszo");
if(udb_hash(inputtext) == Jelszo)
{
Belepve[playerid] = 1;
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, dini_Int(file, "Penz"));
PlayerInfo[playerid][Szint] = dini_Int(file, "Szint");
PlayerInfo[playerid][AdminSzint] = dini_Int(file, "Adminszint");
PlayerInfo[playerid][Skin] = dini_Int(file, "Skin");
SetPlayerPos(playerid, dini_Float(file, "POZX"), dini_Float(file, "POZY"), dini_Float(file, "POZZ"));
SetPlayerFacingAngle(playerid, dini_Float(file, "POZROT"));
tMentes[playerid] = SetTimerEx("Mentes", 20000, true, "i", playerid);
}
else
{
SendClientMessage(playerid, PIROS, "Hibás jelszó!");
Kick(playerid);
}
}
}
else
{
Kick(playerid);
}
}
return 1;
}
MENTÉS:
public Mentes(playerid)
{
new file[128];
format(file, sizeof(file), "/Karakterek/%s.ini", JatekosNev);
if(fexist(file) && Belepve[playerid] == 1)
{
dini_IntSet(file, "Penz", PlayerInfo[playerid][Penz]);
dini_IntSet(file, "Szint", PlayerInfo[playerid][Szint]);
dini_IntSet(file, "Adminszint", PlayerInfo[playerid][AdminSzint]);
dini_IntSet(file, "Skin", PlayerInfo[playerid][Skin]);
GetPlayerPos(playerid, Float: pozX, Float: pozY, Float: pozZ);
GetPlayerFacingAngle(playerid, Float: Rot);
dini_FloatSet(file, "POZX", Float: pozX);
dini_FloatSet(file, "POZY", Float: pozY);
dini_FloatSet(file, "POZZ", Float: pozZ);
dini_FloatSet(file, "POZROT", Float: Rot);
}
}
Esetleg valami valahova nem kell vagy rosszul van írva?
-
Lehet hogy nagyon, nagy hülyeséget írok, kb 7 éve nem láttam már samp kódot.
Viszont, a játékosnév nem globális változó és az OnPlayerSpawn-nál te úgy kéred le mintha lenne annak értéke.
Kérd le a GetPlayerName-et a OnPlayerSpawn-nál a fájl beolvasása előtt, mert így szerintem nemkap semmit sem.
A mentésnél ahogy látom ugyan ez.
Mondom, lehet hülyeség, rég nem követem már mi van sampon, de natívan logikusnak tűnik.
-
Nem értem miért kéred le a játékos nevét minden public -nál?
public OnPlayerConnect(playerid)
{
new name[MAX_PLAYER_NAME + 1];
GetPlayerName(playerid, name, sizeof(name));
PlayerInfo[playerid][Jatekosnev] = name; // játékosnak a neve mindig tárolva lesz a PlayerInfo[playerid][Jatekosnev] -ben
Belepve[playerid] = 0; // nullázz mindent le a csatlakozásnál
PlayerInfo[playerid][Penz] = 0;
PlayerInfo[playerid][Szint] = 0;
PlayerInfo[playerid][AdminSzint] = 0;
PlayerInfo[playerid][Skin] = 0;
pozX = 0, pozY = 0, pozZ = 0, Rot = 0;
return 1;
}
-
Átírtam úgy ahogy mondtad. Egyenlőre úgy néz ki jó, az adatok nem kavarodnak, viszont engem valamiért folyton kidobál(csak akkor ha van valaki rajtam kívül a szerveren) A hiba üzenet:
[22:21:53] CONNECTION REJECTED: Unacceptable NickName
[22:21:53] Please choose another nick between and 3-20 characters
[22:21:53] Please use only a-z, A-Z, 0-9
[22:21:53] Use /quit to exit or press ESC and select Quit Game
Tudja valaki miért lehet? Ha egyedül vagyok a szerveren, tökéletes.
Illetve olyan kérdésem lenne, hogy string-et mint pl. a játékosnév, hogy mentek dini-ben?
-
Átírtam úgy ahogy mondtad. Egyenlőre úgy néz ki jó, az adatok nem kavarodnak, viszont engem valamiért folyton kidobál(csak akkor ha van valaki rajtam kívül a szerveren) A hiba üzenet:
[22:21:53] CONNECTION REJECTED: Unacceptable NickName
[22:21:53] Please choose another nick between and 3-20 characters
[22:21:53] Please use only a-z, A-Z, 0-9
[22:21:53] Use /quit to exit or press ESC and select Quit Game
Tudja valaki miért lehet? Ha egyedül vagyok a szerveren, tökéletes.
Illetve olyan kérdésem lenne, hogy string-et mint pl. a játékosnév, hogy mentek dini-ben?
A nevet amit használsz nem megfelelő a csatlakozásnál. Nem használhatsz ékezeteket és a neved nem lehet rövid sem, a-z, A-Z, 0-9 csak ezek között tudsz választani, ékezet nélkül.
A stringel kapcsolatban, játékos nevét nincs miért ments megint, alapból az kéne legyen az .ini fájl amit létrehozol. Ezeket használd:
pl: Karakterek/%s.ini
scriptfiles mappában ezt látod: Karakterek/ZyZu.ini (ha regisztrálnék, nincs miért lementeni még egy külön stringben a játékosnak a nevét ha már lementetted egyszer.)
dini_Set
dini_IntSet
-
Értem.
Az angol szöveg az meg van, viszont ha egyedül vagyok fent ugyan ezzel a névvel semmi baja.
-
Értem.
Az angol szöveg az meg van, viszont ha egyedül vagyok fent ugyan ezzel a névvel semmi baja.
mi a neved a játékban?
-
PAJLOT
-
PAJLOT
valami akkor nincs rendben a módban vagy a server.cfg -ben.