Jump to content
  • 0

pomoc Statistiky


darfexiik

Dotaz

Zdravím

Potřeboval bych poradit ohledně statistik na serveru. Ukládání mám vyřešení používám dini, potřebuju zjistit jak otevřít složku přes dini a vypsat největší hodnotu a aby se ukazovalo v chatu například: Nejvíce zabití: aflkj (45).. Stačí mi vytvořit timer a to už pak dokážu, ale nevím jak otevřít tu složku a vypsat z ní tu největší hodnotu..:d

 

 

Untitled.pwn

Link to comment
Share on other sites

3 odpovědí na tuto otázku

Recommended Posts

  • 1

Predstav si, že máš na serveri registrovaných 1000 účtov. Myslím, že sa zhodneme na tom, že otvárať všetky súbory a čítať z nich dáta pri každom výpise topky nie je najlepší nápad.

Rieši sa to tak, že si vytvoríš súbor, v ktorom budú uložené top štatistiky. Potom napríklad v SavePlayer pri ukladaní každého statu pozrieš, či je hráčova hodnota "lepšia" ako topka a ak je, updatuješ hodnotu v súbore s topkami. Aby si nemusel otvárať súbor s topkami pri každom porovnaní, je dobré držať si jeho kópiu v pamäti.

  • Líbí se mi to! (+1) 2
Link to comment
Share on other sites

  • 0

Zkusil jsem to co jsi mi napsal uspesne se to ukazuje v chatu vsechno slape tak jak ma az na jednu vyjimku.. 

stock NejlepsiHraci(playerid)
{
    new Topky = random(22);
    new TopsName[MAX_TOPS][MAX_PLAYER_NAME],TopsHodnoty[MAX_TOPS], Linea;
    switch(Topky)
    {
        case 0:
        {
            if(fexist("TOPS/Top_Koks.txt"))
            {
                new STRy[50];
                new File:FileOpen = fopen("TOPS/Top_Koks.txt", io_readwrite);
                while(fread(FileOpen,STRy))
                {
                    sscanf(STRy,"si",TopsName[Linea], TopsHodnoty[Linea]);
                    Linea ++;
                }
                fclose(FileOpen);

                for(new i; i < Linea; i ++)
                {
                    if(TopsHodnoty[i] > 0)
                    {
                        new gramy,kg;
                        GramToKG(TopsHodnoty[i],kg,gramy);
                        format(MAX_STR, sizeof(MAX_STR), "Nejvice gramů koksu: %s %d kg %d g", TopsName[i], kg, gramy);
                    }
                }
                SCM(playerid, 0xFF9900FF, MAX_STR);
            }else SCM(playerid, 0xFF9900FF, "Nejvice gramů koksu: nikdo (0g)");
        }

    }
    return 1;
}

 

Jakmile se to ukaze v Chatu tak se tam ukaze "Nejvice gramu koksu: jmeno a ukaze se tam spatna hodnota ve hre mam napriklad 90g koksu a misto toho se tam ukaze treba 54g.. Udělal jsem to takhle, protože nevím jak se to dělá v Dini já si totiž ukládám hodnoty do Dini, ale takhle nedokážu udělat, protože Dini moc nerozumím přepsal by mi to prosím někdo do Dini?

Link to comment
Share on other sites

  • 0

Musíš čítať celú radu ktorú ti dal DuFF

Aby si nemusel otvárať súbor s topkami pri každom porovnaní, je dobré držať si jeho kópiu v pamäti.

Keď to spravíš tak ti stačí len pri vypnutí a zapnutí servera riešiť súbor (alebo v nejakom intervale, povedzme 24 hod).

 

K tvojmu problému - samozrejme že hodnota je iná, keďže ty tú hodnotu prepisuješ len keď sa hráč odpojí. Tj. ja sa odpojím, uloží sa hodnota 54, následne sa pripojím a nazbieram ďalších 36, takže mám 90. V tom príde TOP ktorý vypíše že mám najviac 54 pretože táto hodnota je zapísaná v súbore pretože som sa ešte neodpojil. Chápeš?

 

Riešenie: pred vypísaním hodnoty prebehni v cykle všetkých hráčov a skontroluj či daný hráč nemá viac ako maximum zapísané v súbore (po novom v pamäti), ak má viac, aktualizuj si premenne TopsName a TopsHodnoty ;)

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...