Scydo 397 Odesláno: 5. Březen, 2016 Share Odesláno: 5. Březen, 2016 YSI4 ODPOČET #1***** Je celkem škoda, že je tu celé subfórum, ale prázdné. Tak mě napadlo toho využít.Hledal jsem chvilku nějaký odpočet bez použití YSI. Jelikož vEnd neumí pochopit pojem ukázka, tak jsem našel něcí starší odpočet na ewolutions(ewolutions.cz/topic/1661): dcmd_odpocet(playerid, params[]) { LEVEL(3); new Odpocet; if(isnull(params)) return SCM(playerid,-1,"Použitie {33CC33}: /odpocet <Čas>"); //new id = strval(params); if(strlen(params) > 15) return SendClientMessage(playerid, COLOR_WHITE, "{FF0000}[ ! ]{FFFFFF} Chybné parametre."); new Cas = strval(params); if(Cas < 0 || 60 < Cas) return SendClientMessage(playerid, COLOR_WHITE, "Použitie {33CC33}: /odpocet <Čas>"); if(Odpocet > 0) return SendClientMessage(playerid, COLOR_WHITE, "{FF0000}[ ! ]{FFFFFF} Odpočet už prebieha."); new string[78]; format(string, 78, "{FF0000}Administrátor %s spustil odpočet na %d sekúnd.", Jmeno(playerid), Cas); SendClientMessageToAll(COLOR_ORANGE, string); Odpocet = Cas; SetTimer("Odpocet",1000, false); return true; } forward OdpocetS(Odpocet); public OdpocetS(Odpocet) { new string[8]; if(Odpocet > 0) { format(string,8,"~g~~h~%d",Odpocet); GameTextForAll(string, 1000, 4); Odpocet--; SetTimer("SOdpocet", 1000, false); }else{ GameTextForAll("~b~~h~]~r~~h~ Go Go Go~b~~h~ ]", 3000, 4); } } Jak si můžete všimnout je tam použité dcmd(my god). Teď si to zkusíme vytvořit ve YSI knihovně. Začneme s tím, že si rozmyslíme, co si nahrajeme: y_commands - pro lepší, efektivnější práci s příkazama, včetně parametrů. y_timers - pro lepší a efektivnější práci s timerama. y_va - pro práci s již formátovanými fcemi nebo efektivnější spracovávání vlastních form. fcí. Potřebné includy z knihovny máme nahrané a tak můžeme pokračovat. Nejdříve si deklarujeme dvě proměnné. Jedna bude pro podmínku, jestliže běží nějaký odpočet a druhá bude na čas do konce odpočtu: new iOdpocet, bool:bOdpocet; Pokud to někteří z vás nezvládají tento krok, tak se YSI ani neučte. Děkuji za pochopení. Všimněte si, že máme jednu proměnnout deklarovanou jako integer a druhou jako boolen. Nyní si vložíme (zjednodušeně) příkaz. Můžeme si zvolit jaký chceme, tak například obyčejný odpocet: YCMD:odpocet(playerid, params[], help) { Oprávnění si bude moct každý přidat zvlášť podle svých potřeb nebo podle svého uvážení. Upozornění: Nemusíme vůbec přidávat preprocesor #pragma unused (přesněji na to samotné help, které vrací true v případě, že hráč zadá to, co má nastavené (například otazník)), jak velká většina lidí praktikuje. Je to naprosto zbytečně. Ale zpět k návodu, kde budeme pokračovat tím, že si přidáme nejlépe tři podmínky a k nim budeme vracet zprávy. První, jestliže zadal parametry správně: if (!strlen(params)) return SendClientMessage(playerid, -1, "< Chyba > Použití příkazu: /odpocet [5-60]"); Následně, jestliže ten čas, co zadal je správně v rozmezí 5-60 sekund: if (strval(params) < 5 || strval(params) > 60) return SendClientMessage(playerid, -1, "< Chyba > Použití příkazu: /odpocet [5-60]"); A na konec, jestliže už neběží nějaký odpočet: if (bOdpocet) return SendClientMessage(playerid, -1, "< Chyba > Odpočet již běží !"); Když máme podmínky za sebou následuje samotný odpočet. Nejdříve si jednou spustíme timer, defer tOdpocet(); Můžeme ho místo místo jednostranného spouštění pomocí defer ho opakovat pomocí repeat, ale to bychom ho pak musely zastavit, což je už trochu složitější, a není to tak jednoduché, jak to zní. Pak už jen přiřadíme hodnoty, a to tak, že bOdpocet přiřadíme true, jelikož odpočet bude běžet, tak aby se nezačal hned další a iOdpocet abychom věděli, kolik zbývá do konce: bOdpocet = true; iOdpocet = strval(params); return (true); /* A zakončíme návratovou hodnotou */ } Teď ke spracování samotného timeru. Ale není čeho se obávat. I to je velice jednoduché. Tak přidámi fci timeru: timer tOdpocet[1000]() { Slovo timer je poznámka pro compiler, že je o fci pro timer. Číslo se závorkou [1000] je počet milisekund, kdy se spustí timer (tedy, kdy začne "působit" kód uvnitř bloku), a závorky () je pro parametry, které voláme(přidáváme) spolu se spouštěním času (defer, repeat...). Pak si přidáme podmínku, jestli naše proměnná ještě nedosáhla hodnoty 0: if (iOdpocet != 0) { Uvitř bloku dáme, že se odešle již formátovaná zpráva GM pro všechny hráče se odpočtem: va_GameTextForAll("~r~%i", 1000, 3, iOdpocet); Všimněte si, že tady ve fci dostazujeme za specifikátory až ke konci. A nakonec znovu spustíme jednou timer, protože, kdybychom ho spustili jenom v příkaze, objeví se jenom číslo a konec: defer tOdpocet(); Ale nesmíme zapomenout, pokud tu podmínku splňuje, aka pokud ta hodnota je už rovna 0: }else{ Tak určitě se napíše zpráva START: GameTextForAll("~r~START", 3000, 3); A dokončíme tím, že zase přiřadáme proměnné bOdpocet hodnotu false, jinak by nám náš příkaz odpocet už další odpočet nepovolil: bOdpocet = false; } } Toť vše. Celý kód pro shlédnutí zde: #include <a_samp> #include <YSI_Visual\y_commands> #include <YSI_Coding\y_va> #include <YSI_Coding\y_timers> new iOdpocet, bool:bOdpocet; YCMD:odpocet(playerid, params[], help) { if (!strlen(params)) return SendClientMessage(playerid, -1, "< Chyba > Použití příkazu: /odpocet [5-60]"); if (strval(params) < 5 || strval(params) > 60) return SendClientMessage(playerid, -1, "< Chyba > Použití příkazu: /odpocet [5-60]"); if (bOdpocet) return SendClientMessage(playerid, -1, "< Chyba > Odpočet již běží !"); defer tOdpocet(); bOdpocet = true; iOdpocet = strval(params); return (true); } timer tOdpocet[1000]() { if (iOdpocet != 0) { va_GameTextForAll("~r~%i", 1000, 3, iOdpocet); iOdpocet--; defer tOdpocet(); }else{ GameTextForAll("~r~START", 3000, 3); bOdpocet = false; } } Děkuji za pozornost a všem, kdo tento návod ohodnotí kladně a nebo repem.PS: mám v plánu pokračovat. Návod označen jako platný Ten to návod byl označen jako platný.Návod může být kdykoli označen jako nevhodný či neplatný 3 Link to comment Share on other sites More sharing options...
Paulee 16 Odesláno: 5. Březen, 2016 Share Odesláno: 5. Březen, 2016 (upraveno) Pěkné Já právě přemýšlel, že bych začal s timerama, ale nějak se mi furt do toho nechtělo. Asi teď začnu, jak to tu máš krásně popsané. GJ. +rep EDIT: Už se těším na další návody. Jsem právě čekal, kdy uděláš další . Edited 5. Březen, 2016 by PetrPaulik Link to comment Share on other sites More sharing options...
BTomas 0 Odesláno: 5. Březen, 2016 Share Odesláno: 5. Březen, 2016 pekny navod Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now