Citirea corecta a timpului

Tutoriale scripting, cod si portiuni de cod.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
stanemir.andrei
Membru, skill 0
Membru, skill 0
Posts: 57
Joined: 13 May 2023, 16:29
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Discord: -
Has thanked: 11 times
Been thanked: 4 times

26 May 2023, 10:09

Salut am si eu o problema cu 2 functii cea de SaveRecord si cea de LoadRecord aceste functii sunt responsabile cu salvarea si citirea timpului , problema este ca nu se citeste corect datele pentru salvarea timpului:

Code: Select all

public SaveRecord()
{
    new sData[256];
    new file = fopen(topFile, "w"); // Deschide fișierul în modul de scriere, va șterge conținutul existent
    if (file)
    {
        format(sData, sizeof(sData), "^%s ^%02d:%02d.%01d", sBest, iBest / 600, (iBest / 10) % 60, iBest % 10);
        fprintf(file, "%s", sData);

        if (sBest2[0])
        {
            format(sData, sizeof(sData), "^%s ^%02d:%02d.%01d", sBest2, iBest2 / 600, (iBest2 / 10) % 60, iBest2 % 10);
            fprintf(file, " %s", sData);
        }

        if (sBest3[0])
        {
            format(sData, sizeof(sData), "^%s ^%02d:%02d.%01d", sBest3, iBest3 / 600, (iBest3 / 10) % 60, iBest3 % 10);
            fprintf(file, " %s", sData);
        }

        fprintf(file, "\n");
        fclose(file);
    }
    return PLUGIN_CONTINUE;
}

Code: Select all

public LoadRecord()
{
    new file = fopen(topFile, "r");
    if (file)
    {
        new sData[256];
        fgets(file, sData, sizeof(sData));
        fclose(file);

        new RecordName[64], RecordS[4], RecordName2[64], RecordS2[4], RecordName3[64], RecordS3[4];
        parse(sData, RecordName, 63, RecordS, 2, RecordName2, 63, RecordS2, 2, RecordName3, 63, RecordS3, 2, l2);

        sBest = RecordName;
        iBest = str_to_num(RecordS);
        sBest2 = RecordName2;
        iBest2 = str_to_num(RecordS2);
        sBest3 = RecordName3;
        iBest3 = str_to_num(RecordS3);
    }

    return PLUGIN_CONTINUE;
}
RoyalServer 2
lexz
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 917
Joined: 02 Nov 2020, 01:57
Detinator Steam: Da
Fond eXtream: 0
Discord: lexzor#0630
Has thanked: 71 times
Been thanked: 136 times

26 May 2023, 12:57

salut, ti-am modificat codul si ti-am aratat inca o varianta de cum ai fi putut sa faci, mai simpla de codat, dar e bine si ce ai facut tu

Code: Select all

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"


public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)

}

// Say Command Handler.
public SaveRecord()
{
    new sData[256]; // sData -> presupun ca ai mai vazut undeva, prefixul dinaintea denumirii variabilei reprezinta tipul de variabila,
    /*
    Exemplu:
        new szData[256] => sz de la string
        new iData => i de la int (numar)
        new bool:bData => boolean (true/false)
        new Float:fData => float (numar 2.03 sau orice e cu punct)

        new g_szData[256] => g_ prefix pentru global
    */
    // https://www.amxmodx.org/api/file/fopen
    new file = fopen(topFile, "w"); 

    if (file)
    {
        // ca sa adaugi o linie noua, pui \n, am vazut ca aveai ^%02d, nu stiu ce ai incercat sa faci cu acel ^
        formatex(sData, sizeof(sData), "^%s %02d:%02d.%01d\n", sBest, iBest / 600, (iBest / 10) % 60, iBest % 10);
        // foloseste fputs ca sa adaugi date sau fgets ca sa iei date din fisier
        fputs(file, szData)

        if (sBest2[0])
        {
            //foloseste formatex, e mult mai rapid si nu ai nevoie in situatia asta
            //format doar daca folosesti variabila pe care vrei sa o formatezi ca si parametru
            //ex: format(szData, charsmax(szData), "%s", szData)
            formatex(sData, sizeof(sData), "^%s %02d:%02d.%01d\n", sBest, iBest / 600, (iBest / 10) % 60, iBest % 10);
            fputs(file, szData)
        }

        if (sBest3[0])
        {
            formatex(sData, sizeof(sData), "^%s %02d:%02d.%01d\n", sBest, iBest / 600, (iBest / 10) % 60, iBest % 10);
            fputs(file, szData)
        }

        fclose(file);
    }
    return PLUGIN_CONTINUE;
}


public LoadRecord()
{
    new file = fopen(topFile, "r");
    if (file)
    {
        new sData[256];
        // fgets(file, sData, sizeof(sData));
        // fclose(file);

        // new RecordName[64], RecordS[4], RecordName2[64], RecordS2[4], RecordName3[64], RecordS3[4];
        // parse(sData, RecordName, 63, RecordS, 2, RecordName2, 63, RecordS2, 2, RecordName3, 63, RecordS3, 2, l2);

        // sBest = RecordName;
        // iBest = str_to_num(RecordS);
        // sBest2 = RecordName2;
        // iBest2 = str_to_num(RecordS2);
        // sBest3 = RecordName3;
        // iBest3 = str_to_num(RecordS3);
    
        new i = 0
        while(fgets(file, sData, charsmax(sData))) // => while fgets returneaza o valoare mai mare decat 0, ruleaza bucla asta, in momentul in care fisierul ajunge la sfarsit va returna 0, in schimb numarul de caractere scrise pe linia respectiva
        {
            new RecordName[64], RecordS[4], RecordName2[64], RecordS2[4], RecordName3[64], RecordS3[4];
            parse(sData, RecordName, 63, RecordS, 2, RecordName2, 63, RecordS2, 2, RecordName3, 63, RecordS3, 2, l2);

            if(i == 0) //prima valoare citita din fisier
            {
                sBest = RecordName;
                iBest = str_to_num(RecordS);
            }

            if(i == 1)
            {
                sBest2 = RecordName2;
                iBest2 = str_to_num(RecordS2);
            }

            if(i == 2)
            {
                sBest3 = RecordName3;
                iBest3 = str_to_num(RecordS3);
            }
    
            i++
        }
    
    }

    return PLUGIN_CONTINUE;
}

//cum ai fi putut sa faci citirea->

enum _:DATA_BEST
{
    szName[MAX_NAME_LENGTH],
    iTime
}

new g_eBest[3][DATA_BEST] // g_e => variabila globala careia ii se atribuie o structura de tip enum

loaddata()
{
    new file = fopen(topFile, "r");

    if(file)
    {
        new szData[256]

        new i
        while(fgets(file, szData, charsmax(szData)))
        {
            parse(szData) // etc... aici folosesti tu parse pe stringul returnat din fisier

            g_eBest[i][szName] = variabila_name_din_parse
            g_eBest[i][iTime] = variabila_time_din_parse
            // si astfel g_eBest[0] il vei avea pe primul, [1] al doilea loc si [2] al treilea loc
            i++
        }
    }
}
Codul nu e testat, daca ai nelamuriri ma intrebi

daca vrei sa continui cu pluginurile, sper ca folosesti visual studio code nu amxx studio

bafta
stanemir.andrei
Membru, skill 0
Membru, skill 0
Posts: 57
Joined: 13 May 2023, 16:29
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Discord: -
Has thanked: 11 times
Been thanked: 4 times

26 May 2023, 13:30

Salut si multumesc ca ti-ai folosit din timpul tau pentru a ma ajuta si explica , timpurile se salveaza corect insa tot nu se citeste cum trebuie spre exemplu eu in folderul pentru salvare am :
player 00:07.6 dupa schimbarea mapei timpul este de 00:00:00 , am observat ca daca modific din fisierul de salvare in loc de 00:07.6 modific 76:00:00 , mi se citeste 00:07,6 cand ai tu timp daca ai putea sa te mai uiti ti-as multumii iti adaug si functia care arata timpul

Code: Select all

public ShowBest(id)
{
    new sMsg[2048];

    if (!sBest[0] && !sBest2[0] && !sBest3[0])
    {
        format(sMsg, sizeof(sMsg) - 1, "<html><body><h2>[TIMER]</h2><p>Recordul nu este actualizat!</p></body></html>");
    }
    else
    {
        format(sMsg, sizeof(sMsg) - 1, "<html><head><style>body { margin: 0; padding: 0; } .center-text { text-align: center; }</style></head><body><div style='position: absolute; top: 0; bottom: 0; left: 0; right: 0; display: flex; align-items: center; justify-content: center;'><div style='max-width: 100%; max-height: 100%; padding: 20px;'><h2 class='center-text'>[TIMER] Map Record</h2><h3>Map Record</h3><table><tr><th>Nume player</th><th>Timp</th></tr>");

        
        if (sBest[0])
        {
            format(sMsg, sizeof(sMsg) - 1, "%s<tr><td><img src='C:\Users\Coco\Desktop\cups\gold_cup.png' alt='Gold Cup' style='width:20px;height:20px;margin-right:5px;'>%s</td><td>%0.2d:%0.2d,%01d</td></tr><tr><td colspan='2'><hr></td></tr>", sMsg, sBest, iBest / 600, (iBest / 10) % 60, iBest % 10);
        }
        
        if (sBest2[0])
        {
            format(sMsg, sizeof(sMsg) - 1, "%s<tr><td><img src='C:\Users\Coco\Desktop\cups\silver_cup.png' alt='Silver Cup' style='width:20px;height:20px;margin-right:5px;'>%s</td><td>%0.2d:%0.2d,%01d</td></tr><tr><td colspan='2'><hr></td></tr>", sMsg, sBest2, iBest2 / 600, (iBest2 / 10) % 60, iBest2 % 10);
        }
        
        if (sBest3[0])
        {
            format(sMsg, sizeof(sMsg) - 1, "%s<tr><td><img src='C:\Users\Coco\Desktop\cups\bronze_cup.png' alt='Bronze Cup' style='width:20px;height:20px;margin-right:5px;'>%s</td><td>%0.2d:%0.2d,%01d</td></tr><tr><td colspan='2'><hr></td></tr>", sMsg, sBest3, iBest3 / 600, (iBest3 / 10) % 60, iBest3 % 10);
        }
        
        format(sMsg, sizeof(sMsg) - 1, "%s</table></body></html>", sMsg);
    }

    show_motd(id, sMsg, "Map Record");
}
lexz
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 917
Joined: 02 Nov 2020, 01:57
Detinator Steam: Da
Fond eXtream: 0
Discord: lexzor#0630
Has thanked: 71 times
Been thanked: 136 times

26 May 2023, 13:40

Code: Select all

format(sMsg, sizeof(sMsg) - 1, "%s<tr><td><img src='C:\Users\Coco\Desktop\cups\gold_cup.png' alt='Gold Cup' style='width:20px;height:20px;margin-right:5px;'>%s</td><td>%0.2d:%0.2d,%01d</td></tr><tr><td colspan='2'><hr></td></tr>", sMsg, sBest, iBest / 600, (iBest / 10) % 60, iBest % 10);
nu inteleg aici de ce mai folosesti %0.2d:%0.2d,%01d si sBest, iBest / 600, (iBest / 10) % 60, iBest % 10. Daca astea sunt datele din fisier, poti sa le lasi sub forma de string si sa le afisezi cu %s

nestiind ce ai acolo, presupunem ca vrei ca timpul sa fie afisat minute:secunde:milisecunde

avem iBest care este sub forma de secunde si jucatorul a terminat in 532 de secunde harta

ar trebui sa il afisezi asa:

Code: Select all

formatex(szMsg, charsmax(szMsg), "%d:%d:%0.2d",  iBest / 60, iBest % 60, iBest *1000) 


daca ai numarul 1000, %0.2d iti va afisa 10.00 pentru ca acolo se pune punctul. %0.1d iti va afisa 1.000,

oricum nu am folosit nicioadata %0.2d sau orice alt numar in afara de d, folosesc doar cu float, %0.2f si fac variabila float

cel mai bine e sa afisezi variabilele in consola/chat/motd si sa te josi cu %0.1d, poate incerci ceva cu float.
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

26 May 2023, 20:05

n are cum să ți meargă

Code: Select all

public SaveRecord()
{
    new file = fopen(topFile, "w+");
    if (!file)
    {
        fclose(file)
        return
    }

    new sData[256];

    formatex(sData, charsmax(sData), "%s %d^n", sBest, iBest);
    fputs(file, sData);

    if (sBest2[0])
    {
        formatex(sData, charsmax(sData), "%s %d^n", sBest2, iBest2 );
        fputs(file, sData);
    }

    if (sBest3[0])
    {
        formatex(sData, charsmax(sData), "%s %d^n", sBest3, iBest3);
        fputs(file, sData);
    }

    fclose(file);
}
public LoadRecord()
{
    new file = fopen(topFile, "r");
    if (!file)
    {
        fclose(file)
        return
    }

    new sData[256], RecordName[33], RecordS[15], RecordName2[33], RecordS2[15], RecordName3[33], RecordS3[15];
    while(!feof(file))
    {
        fgets(file, sData, charsmax(sData))
        trim(sData)
        if(!sData[0]||sData[0]==';')
        {
            continue
        }
        parse(sData, RecordName, charsmax(RecordName), RecordS, charsmax(RecordS), RecordName2, charsamx(RecordName2), RecordS2, charsmax(RecordS2),
            RecordName3, charsmax(RecordName3), RecordS3, charsmax(RecordS3));
        sBest = RecordName;
        iBest = str_to_num(RecordS);
        sBest2 = RecordName2;
        iBest2 = str_to_num(RecordS2);
        sBest3 = RecordName3;
        iBest3 = str_to_num(RecordS3);
    }

    fclose(file);
}
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
stanemir.andrei
Membru, skill 0
Membru, skill 0
Posts: 57
Joined: 13 May 2023, 16:29
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Discord: -
Has thanked: 11 times
Been thanked: 4 times

26 May 2023, 22:26

salut levin si mersi ca ai postat , sa sti ca nu se citeste deloc din fisier
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

26 May 2023, 23:03

am editat codu
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
stanemir.andrei
Membru, skill 0
Membru, skill 0
Posts: 57
Joined: 13 May 2023, 16:29
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Discord: -
Has thanked: 11 times
Been thanked: 4 times

27 May 2023, 16:00

Da acum functioneaza levin doar ca eu doresc sa se salveaze

Code: Select all

"^%s ^%02d:%02d.%01d", sBest3, iBest3 / 600, (iBest3 / 10) % 60, iBest3 % 10);]
nu ibest normal
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

27 May 2023, 19:58

n ai cum să redai așa ceva, ți am zis să folosești float dacă tot vrei cu zecimale
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
stanemir.andrei
Membru, skill 0
Membru, skill 0
Posts: 57
Joined: 13 May 2023, 16:29
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Discord: -
Has thanked: 11 times
Been thanked: 4 times

29 May 2023, 13:37

Am reusit , multumesc lui Levin si lui Lex pentru ajutor puteti da T/C
Post Reply

Return to “Scripting”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 5 guests