Szerző Téma: Hogyan lehet hatékonyan menteni a szerveren eltöltött idõt?  (Megtekintve 1114 alkalommal)

Hogyan lehet hatékonyan menteni a szerveren eltöltött idõt?
« Dátum: 2013. augusztus 06. - 17:24:50 »
0 Show voters
Ha úgy mentem a játékos által szerveren eltöltött idõt,  amikor kilép, akkor nem kell timert használni.
De amikor kifagy a szerver? Akkor nem menti el, és dini fájlrendszerbe probáltam a mentés kódot és hibás adatokat jelenített meg.
LuxAdminból probálkoztam, de szerintem ez nem a legjobb megoldás.
 
enum PlayerData
{
        hours,
        mins,
        secs,
        TotalTime,
        ConnectTime
        };
        new AccInfo[MAX_PLAYERS][PlayerData];
public OnPlayerConnect(playerid)
{
    AccInfo[playerid][ConnectTime] = gettime();
return 1;
}
TotalGameTime(playerid, &h=0, &m=0, &s=0)
{
    AccInfo[playerid][TotalTime] = ( (gettime() - AccInfo[playerid][ConnectTime]) + (AccInfo[playerid][hours]*60*60) + (AccInfo[playerid][mins]*60) + (AccInfo[playerid][secs]) );
    h = floatround(AccInfo[playerid][TotalTime] / 3600, floatround_floor);
    m = floatround(AccInfo[playerid][TotalTime] / 60,   floatround_floor) % 60;
    s = floatround(AccInfo[playerid][TotalTime] % 60,   floatround_floor);
    return AccInfo[playerid][TotalTime];
}

 
Viszont ha két percenként MySQL-al mentem, akkor meg szerver lagg lesz. Vagy bírja a szerver?
« Utoljára szerkesztve: 2013. augusztus 06. - 17:50:18 írta bbTamas »

Hogyan lehet hatékonyan menteni a szerveren eltöltött idõt?
« Válasz #1 Dátum: 2013. augusztus 06. - 17:33:28 »
+1 Show voters
Egy ötlet:
Szerintem stock-al hozhatnál létre egy mentést bár az is laggolhatja, pl parancsok használatánál meg ilyenek
amiket mentsen mondjuk dinibe az szerintem nem laggolja annyira a szervert és amikor kilép a játékos üríti a fájlt és mysql-ba menti
ha viszont csatlakozik kérje le neki h üres e, ha nem(azaz azelõtt crashelt a szerver) akkor tegye hozzá a változóhoz és ha kilép nem crashel normálisan menti :D

Hogyan lehet hatékonyan menteni a szerveren eltöltött idõt?
« Válasz #2 Dátum: 2013. augusztus 06. - 17:55:02 »
0 Show voters
Köszi a segítséget, valahogy nem az igazi megoldás.
Ha a szerver kifagy, akkor fáljrendszerbe se menti, kívéve ha idõzítõvel idõközönként mentek, viszot akkor végigkell szalani az összes játékoson, fájlrendszerrel még nagyobb lagg lenne mint mysql-nál.
MySQL bírná ezt? Mert ezt nem tudom tesztelni, honnét szerezzek kb 50 játékos, hogy probáljam. :P

Hogyan lehet hatékonyan menteni a szerveren eltöltött idõt?
« Válasz #3 Dátum: 2013. augusztus 06. - 18:29:47 »
0 Show voters
npc-k?:D vagy az nem olyan megterhelõ?:D
én amúgy arra gondoltam h parancsok házba lépések kocsi ki be szállás lövések ieneknél menthetná fájlba így se lesz meg a tejes ha crashel, csak valamennyi..:D

Hogyan lehet hatékonyan menteni a szerveren eltöltött idõt?
« Válasz #4 Dátum: 2013. augusztus 06. - 18:36:58 »
0 Show voters
Így már értem mire gondolsz, de ez nagyon fél megoldás. :P
NPC nincs.
Viszont az a kérdés ha két percenként MySQL-al mentem, akkor meg szerver lagg lesz. Vagy bírja a szerver?
Vagy maradjak az elsõ megoldásnál, amikor kilép akkor mentek, viszont szerver összeomláskor lehetnek gondok(Idõt azt nem menti el).
« Utoljára szerkesztve: 2013. augusztus 06. - 18:39:46 írta bbTamas »

Nem elérhető SnooP

  • 1798
  • SnooP
    • Profil megtekintése
Hogyan lehet hatékonyan menteni a szerveren eltöltött idõt?
« Válasz #5 Dátum: 2013. augusztus 06. - 18:39:01 »
+1 Show voters
NPC ? :D
Tudtommal OnPlayerDisconnectnél, ha a reason 0 akkor az illetõ kifagyott , de lehet én tudom rosszul.


Ha mégse volna igazam és rosszul tudom, akkor azt is simán meglehet, hogy létrehozol statikus változókat / char tömböket (memóriaspórolás + gyorsaság miatt) és a statikus változók azért jók, mivel az érték megmarad és visszatérésnél nem törlõdik, azaz simán csak hozzáadod az értékeket, a char tömbök pedig memóriatakarékosság szempontjából jó dolog. Na és a statikus változókba mented az adott értékeidet OnPlayerUpdate alatt, amit több fájl vagy adat esetén berakhatsz tömbökbe mivel a tömböknek / statikus változóknak  a leggyorsabbak a mûködései, bár ez nem kötelezõ dolog ( char tömbökbe való rakás mivel az csak memóriaspórolás szempontjából jó). Talán így a leggyorsabb megoldás ami nem terheli timeresen a szervert.
Bõvebben róla:  http://wiki.sa-mp.com/wiki/Keywords:Initialisers
« Utoljára szerkesztve: 2013. augusztus 06. - 18:46:11 írta SnooP »

Hogyan lehet hatékonyan menteni a szerveren eltöltött idõt?
« Válasz #6 Dátum: 2013. augusztus 07. - 12:17:08 »
+1 Show voters
Arra gondoltam hogy szerver összeomláskor lehet hogy a mysql szerver azt képes érzékelni hogy megszakadt a kapcsolat így akik fent voltak játszani azoknak szerver induláskor valahogy korrigálni lehet az eltöltött idõt.
Ehhez persze menteni kell játékos csatlakozáskor mondjuk az users táblán hogy csatlakozott majd mikor indul a samp szerver azoknak javítani az eltöltött idõt majd törölni az online állapotukat az users táblán, ha ezt sikerül megoldani akkor maradhat lecsatlakozáskor az eltöltött idõ mentése és nem okoz gondot a szerver összeomláskor kiesett idõ.
Na majd ha unatkozok utána nézek ennek, de az se baj ha valaki elõ áll egy kipróbálható verzióval. :D

Hogyan lehet hatékonyan menteni a szerveren eltöltött idõt?
« Válasz #7 Dátum: 2013. augusztus 07. - 13:35:57 »
0 Show voters
SnooP:Én nem arra gondoltam, amikor a játékos kifagy, hanem amikor a szerver kifagy.
ɐʞzssǝlosz: Ez nem rossz ötlet, szerintem még meg is lehetne valósítani.
Vagy maradok a \'sima\' megoldásnál és egy bizonyos x idõközönként mentek idõt, csak viszont az a kérdés ha mondjuk két percenként MySQL-al mentem, akkor meg szerver lagg lesz. Vagy bírja a szerver?
SZERK:Mindenki aki segített az kapott egy plusz,köszönöm a segítséget. :D
« Utoljára szerkesztve: 2013. augusztus 08. - 18:19:52 írta bbTamas »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal