Jump to content

HighPrint

Globální moderátor
  • Příspěvků

    1335
  • Registrován

  • Aktivní

  • Vítězných dnů

    30

Příspěvky posted by HighPrint

  1. Předdefinuješ si měsíce (new daysinMonth[12] = {31,28,31,...}; // vyplň si to sám), kolik dní v nich jsou. Zjistíš dnešní datum (dále jako d, m, y). Podmínka na zjištění přestupného roku jsem někde psal tak si to jen dovolím zkopírovat:

     

    if (% 4 == 0 && (% 100 != 0 ||% 400 == 0 ))

     

    Teď je potřeba zajistit zacyklení a zjišťovat jestli nastavený čas (time) je vyšší než zbývající dny v měsíci (time > daysinMonth[m-1]-d).    // m-1 kvůli indexaci od 0

     

    Pokud ano, odečteš daysinMonth[m]-d od time a zvýšíš m

    Pokud ne, nastavíš den d jako time a ukončíš cyklus

     

    A takhle pokračuješ v cyklu dokud nějaký ten zbývající time existuje (resp. pokud je menší než zbývající počet dní v měsíci). 

     

    BACHA na případ, kdy je prosinec a převyšuje počet dní, tzn. zvýšit rok (y++), m nastavit na leden.

     

    Pak zabalit d, m, y a vrátit jako nové datum – tedy datum ukončení banu/VIP

     

     

    Zkus nad tím popřemýšlet, napsat vlastní kód, pokud se někde zasekneš, tak ti pomůžu, ale celý kód ti nenapíšu

  2. Jo dobrá poznámka... ještě uveď příklad použití, aby lidi co nechtěli zkoumat kód věděli jak se to používá. 

     

    @Tango aha, díky :d ty dvě hodiny jsem nechtěl zjišťovat, dobrá informace

     

     

     

    Změna cyklu při přičítání 1 dne každé 4 na výše zmíněný výpočet nefunguje tak zcela přesně (v dalších letech je ztráta 1 dne, testován rok 2037).

     

    Na tohle bych se rád mrknul, jestli bys mi poslal ten timestamp do SZ :) 

  3. Zajímavý koncept. Přiložíš ještě kód k benchmarku?

     

    Každopádně pár připomínek:

     

    1) např rok 2100 rozhodně není přestupný, ale je dělitelný 4. (Sice se toho nedožije naše generace, ale bylo by fajn si ujasnit, co přesně ten přestupný rok je)

    A year is not a leap year if it's NOT divisible by 4, OR if it's divisible by 100 AND NOT divisible by 400. 

     

    2) 

    while(py > 3) //Každé 4 roky přidá 1 den
    {
    	rday++;
    	py -= 4;
    }
    

    Tohle je basically matematická operace dělení, stejný output je rday = py / 4;

     

    3) goto je opravdu prasárna, celý ten koloběh ifů se dá přepsat do cyklu

    4) ty while těch dnů/hodin/minut/(sekund) se dá také přepsat do dělení (+ modulo)

    5) Proč se odečítají 2h? 

    6) Jaký smysl má odečítat v první iteraci 366 dní?

    new py;
    if(ts > 31535999) // 365dní
    {
        /*...*/
        py++;
        if(py == 1)
        {
    	 if(ts > 31622399) // 366dní
    	 {
    	     py = 0;
    	     ryear++;
    	     ts -= 31622400;
    	 }
        }
    }
    

    Jinak hezká práce

    • Líbí se mi to! (+1) 1
  4. Mám pocit, že chyba leží někde jinde. Jsi si jistý, že ti to začalo vypisovat když si testoval zbrojní průkaz? Pošli ještě kód ohledně střílení do terčů (jestli to máš implementované).

     

    Chyba ti hlásí, protože přijímáš až moc požadavků ze serveru (ack = acknowledgment signal/response). Takovej špinavej trik jak tohle obejít je zvednout ackslimit v server.cfg, ale asi bude lepší najít tu chybu

  5. Tohle všechno budeš muset provádět v OnPlayerSpawn.

     

    OnPlayerDeath se triggne když hráč umře ale následně se zavolá OnPlayerSpawn. Takže spíš něco jako

    new bool:death[MAX_PLAYERS];
    OnPlayerDeath:
    death[playerid] = true;
    
    OnPlayerSpawn:
    if(death[playerid]){
          // delayspawn timer or whatsoever
    }
    else{
        // obyc. spawn
    }
    
    delayspawn:
    death[playerid] = false;
    spawnplayer;
  6. Chtělo by to nějak označit vstupy, aby lidi věděli, že se vstupuje do budov enterem. Další věc co mě opravdu sere jsou nekonzistentní názvy příkazů (půlka z nich je v češtině a půlka v AJ). Nemluvě o tom, že některé jsou poměrně dlouhé a nikoho nebaví ty příkazy psát, takže buď to zkrátit nebo vymyslet lepší mechanismus (viz. /zmenitobleceni – alternativa: enter u pickupu? /skin? /vzhled?). Nebylo by na škodu nějaký úvodní tutoriál co se smí a co se nesmí v RP a případně základní info o GM. 

     

    Nicméně teď nějaké ty chyby:

     

    https://prnt.sc/g40n56

    1) to už tady někdo zmínil

    2), 3), 4) chyba při výpisu

    5) levitující objekty

     

    Každopádně už jsem to tu i zmínil, neresetují se proměnné. Přihlásil jsem se za Michaela_Scofielda a na podruhé mě to kicklo, protože jsem zapomněl heslo (pohoda, chápu). Přihlásil jsem se znovu a kicklo mě to už na poprvé. 

  7. Off-topic!

    Vyvarujte se offtopicu! Další zpráva reagující na předchozí zprávu bude vyhodnocena jako spam

     

    Já si dovolím trochu odbočit než bude "platit" toto upozornění:

    @Weed/DeNiSko: PM se snad nedá ani jinak udělat... tvůj argument "částečný kód z módu" je nevalidní

     

    k problému, řekl bych, že musíš specifikovat max. délku stringu v sscanfu. Jistý si ale nejsem

  8. Nejlepší způsob jak toho dosáhnout je každému nastavit podle jejich IDček, případně tam nastavit ještě nějakou přidanou konstantu

     

    SetPlayerVirtualWorld(playerid,playerid+1); // kvůli playerid 0, správná připomínka od StreetGuy

     

    případně

     

    SetPlayerVirtualWorld(playerid,546+playerid);

×
×
  • Create New...