-
Sziasztok :)
Mivel én lusta ember vagyok, ezért minél gyorsabban és takarékosabban akarok elvégezni mindent.
Szóval a kérdés az volna, hogy a hagyományos Dinis betöltõs módszer helyett, ami így néz ki:
new neve[MAX_PLAYER_NAME], file[200];
GetPlayerName(playerid, neve, sizeof(neve));
format(file, sizeof(file), \"/Jatekosok/%s.txt\", neve);
Nem volna jobb ez a megoldás:
stock file(playerid)
{
new file[200];
format(file, sizeof(file), \"Jatekosok/%s.txt\",Nev(playerid));
return file;
}
stock Nev(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
return name;
}
Takarékosság szempontjából biztos vagyok benne, hogy a második megoldás jobb, viszont mivel elég sok dolgot kell ki/be töltögetnem aggályaim akadtak afelõl, hogy nem terhelné-e le túlságosan a szervert a folyamatos név betöltéssel és hasonlókkal? Véleményetek szerint inkább maradjak az elsõ módszernél vagy a második módszer sem terheli jobban a szervert mint az elsõ / melyik a jobb?
Válaszaitokat elõre is köszönöm :)
-
PVar-t használva a folyamatos lekéregetést ki lehet küszöbölni:
stock file(playerid)
{
if(!GetPVarType(playerid, \"PlayerFile\")) //Ha nem létezik a változó, akkor létrehozzuk
{
new file[200];
format(file, sizeof(file), \"Jatekosok/%s.txt\",Nev(playerid));
SetPVarString(playerid, \"PlayerFile\", pFile);
return file;
}
else //Ellenkezõ esetben visszatérünk vele
{
new pFile[200];
GetPVarString(playerid, \"PlayerFile\", pFile, sizeof(pFile));
return pFile;
}
}
Ugyan ezt megírod a stock Nev-nél is.
Elnézést, ha valamit rosszul írtam..
Szerk.:
Elvileg ha referenciaként adod át a playerid-t, akkor is valamivel gyorsabb lesz, mert így nem fog másolatot készíteni a paraméterül átadott változóról, hanem a már meglévõt használja. Vagy valami ilyesmi, pontosan nem tudom.. (Bocs ha rosszul tudom) Ja és ha már úgysem módosítod az értékét, add át konstansként:
stock file(const &playerid)
Szerk.2:
Ha nem globálisan (filterscriptek között is) használod az függvényt, akkor divkn megoldása talán jobb is, mint ahogy én írtam..
-
Létrehozol egy tömböt, OnPlayerConnectél megformázod a játékosnak betöltendõ fájl útvonalát és tárolod ebben a létrehozott változóban, mert így kevesebb AMX utasítást kap. Mert ha úgy csinálod, amit leírtál akkor újra és újra lekérdezed a játékos nevét és formázod a karakterláncot és halad tovább a mentéshöz.
stock filename[MAX_PLAYERS][14 + MAX_PLAYER_NAME];
public OnPlayerConnect(playerid)
{
new n[MAX_PLAYER_NAME];
GetPlayerName(playerid, n, MAX_PLAYER_NAME);
format(filename[playerid],sizeof(filename[]),\"Jatekosok/%s.txt\", n);
return;
}
// Ezek után használod a filename[playerid] változót.
-
Nagyon szépen köszönöm a segítséget :)