Jump to content

vEnd

Hlavní moderátor
  • Příspěvků

    772
  • Registrován

  • Aktivní

  • Vítězných dnů

    60

Everything posted by vEnd

  1. Končím, na tohle nemám. Až budeš chtít poslouchat lidi, co se ti snaží pomoct, napiš do chatu.
  2. Obtížnost: Osnova: 1. Úvod 2. Relační operátory 3. Logické operátory 4. Přiřazovací operátory 5. Bitové operátory 6. Priorita operátorů 7. Závěr 1. Úvod Vítám Vás u pátého návodu pro začínající pawnery. Téma se týká dalších druhů operátorů a navazuje na předchozí návod o operátorech. Abyste tento návod pochopili, přečtěte si nejprve ten předchozí. 2. Relační operátory Úkolem relačních operátorů je porovnávat operandy (vrací pravdu, nebo nepravdu). S nimi se zpravidla setkáme v podmínkách. Jedná se o operátory rovnosti, nerovnosti, větší/menší a větší/menší nebo rovno. . new cislo = 5, cislo2 = 10; cislo == cislo2 //dvě rovnítka porovnají, zda jsou čísla stejná (výsledek je false, 5 a 10 nejsou stejná) cislo != cislo2 //vykřičník a rovnítko zjistí, zda se čísla různí (výsledek je true, 5 a 10 jsou různá) cislo > cislo2 //znak pro "větší" zjistí, zda je číslo vlevo větší než to vpravo (výsledek je false, 5 není větší než 10) cislo < cislo2 //znak pro "menší" zjistí, zda je číslo vlevo menší než to vpravo (výsledek je true, 5 je menší než 10) cislo >= cislo2 //znak pro "větší nebo rovno" zjistí, zda je číslo vlevo větší nebo rovno tomu vpravo (výsledek je false, 5 není větší ani rovno 10) cislo <= cislo2 //znak pro "menší nebo rovno" zjistí, zda je číslo vlevo menší nebo rovno tomu vpravo (výsledek je true, 5 není rovno 10, ale je menší) . Všechno to jsou binární operátory. Doufám, že není třeba si je blíže vysvětlovat, princip je stejný jako v matematice, stačí nám znalosti základní školy. Zajímavost: 3. Logické operátory Pomocí logických operátorů tvoříme složitější podmínky. Stejně jako relační, tak i tyto operátory vrací buď pravdu, nebo nepravdu. Logickými operacemi jsou logický součin, logický součet a logická negace. a) Logický součin Logický součin je binární operace a značí se dvěma ampersandy (&&). Výsledek této operace je pravdivý, právě když jsou oba výrazy pravdivé. . new cislo = 5, cislo2 = 10, cislo3 = 15; cislo < cislo2 && cislo2 > cislo3 //výsledek je false . Prvním výrazem je "cislo ". Ten je pravdivý, 5 je menší než 10. Druhým výrazem je "cislo2 > cislo3". To pravda není, 10 není větší než 15. Jeden z výrazů je nepravdivý, proto je celá podmínka nepravdivá. b ) Logický součet Logický součet je binární operace a značí se dvěma svislicemi (||). Výsledek této operace je pravdivý, když alespoň jeden výraz je pravdivý. . cislo < cislo2 || cislo2 > cislo3 //výsledek je true . Vraťme se k předchozímu příkladu. Už víme, že první výraz je pravdivý a druhý nepravdivý. Poněvadž se teď jedná o logický součet, tak celá podmínka bude pravdivá – stačí jen jeden pravdivý výraz. Při složitějších podmínkách si nemusíme být jisti tím, jak ji jazyk vyhodnotí. Proto nám Pawn umožňuje i v tomto případě použít kulaté závorky k určení priority vyhodnocení. . (cislo < cislo2 && cislo2 > cislo3) || (cislo3 > cislo && cislo3 >= cislo2) . Teď jsme si jistí, že se napřed vykoná logický součin a až poté logický součet. c) Logická negace Logická negace je unární operace a značí se vykřičníkem (!). Účelem této operace je převrátit pravdu v nepravdu a naopak. . new bool:logicka = true; !logicka //hodnota bude false . Počáteční hodnota proměnné logicka je true. Po znegování bude hodnota převrácená – false. 4. Přiřazovací operátory Operátor přiřazení již známe – rovnítko. Probrali jsme jej v předchozích návodech, takže teď si ho jen rychle zopakujeme. Na levé straně je proměnná/pole, do které(ho) přiřazujeme, a na pravé straně hodnota nebo výraz, který přiřazujeme. . new cislo = 5; //přiřazení celého čísla new desetinne = 3.14; //přiřazení desetinného čísla new znak = 'o'; //přiřazení znaku new retezec[] = "ahoj"; //přiřazení řetězce new pole[] = {1, 3, 6}; //přiřazení hodnot poli . Pro zajímavost (rozklikněte spoiler): . 5. Bitové operátory Bitové operátory manipulují s bity. Tato problematika zdaleka přesahuje znalosti potřebné pro nováčky, proto ji zde uvádět nebudu. Nicméně, pokud se přeci jen chcete o manipulaci s bity něco dozvědět, přečtěte si tento návod, kde se tomu Mort podrobně věnuje. 6. Priorita operátorů Už jsme si zmínili, že prioritu operátorů můžeme ovlivnit kulatými závorkami jako v matematice, ale jaká je vlastně výchozí priorita operátorů? Na to se lze podívat do spoileru. Je to jen pro zajímavost, nic, bez čeho bychom se neobešli. . 7. Závěr A tímto končí druhý návod věnující se operátorům. Nyní už víte to potřebné o operátorech. Samozřejmě jich existuje mnoho, neuvedl jsem všechny (čárka, dvojtečka i všechny druhy závorek jsou také operátory), ale to už jsou drobnosti, které v praxi sami pochytíte. Tento návod, stejně jako ten předchozí, je určen pro nováčky, pokročilejší věci byly buďto úplně vynechány, nebo jsou uvedeny ve spoilerech. Přesto, zdá-li se Vám, že jsem něco opomněl, někde jsem se spletl nebo se jen chcete vyjádřit, pište do tohoto tématu. Ověřený návod Tento návod prošel validací, a lze ho proto považovat za ověřený.
  3. Taky je zde možnost modifikovat tu podmínku tak, že jedna bude rovna nule a druhá menší nebo rovna nule, to pro jistotu, kdybys tomu někdy nastavil nekladnou hodnotu. if(GetPlayerWantedLevel(playerid) == 0) return SCM(issuerid, red, "[!] Hráč nemá WantedLevel nelze ho zatknout"); if(PlayerInfo[playerid][pWandlvl] <= 0) return SCM(issuerid, red, "[!] Hráč nemá WantedLevel nelze ho zatknout"); Jo a zopakuj ten pravopis, za "furd myto" tě kdejaký grammar nazi (jako já) zdrbe.
  4. Ještě jednou napiš "furd myto" a sejmu tě. Podívej se, tys asi přepsal jen tu jednu podmínku, ale musíš přepsat obě: if(GetPlayerWantedLevel(playerid) == 0) return SCM(issuerid, red, "[!] Hráč nemá WantedLevel nelze ho zatknout"); if(PlayerInfo[playerid][pWandlvl] <= 0) return SCM(issuerid, red, "[!] Hráč nemá WantedLevel nelze ho zatknout"); U toho druhého jsem ti, pro sichr, dal menší nebo rovno, jen bůh ví, jestli nejsi schopen tomu někde nastavovat záporné hodnoty. Btw, větší/menší je učivo základní školy, asi by sis měl zopakovat základy, jinak ti programování nikdy nepůjde.
  5. Obtížnost: Osnova: 1. Úvod, co je operátor a operand 2. Dělení operátorů 3. Aritmetické operátory 4. Závěr 1. Úvod Vítám Vás u čtvrtého návodu pro začínající pawnery. Tématem tohoto návodu budou základní informace o operátorech, jejich dělení a aritmetické operátory. O dalších druzích operátorů napíši, vzhledem k množství informací, návod zvlášť. Ačkoliv to teď nevíte, operátory jsme využívali už v předchozích návodech, ale také v matematice (třeba +). Úkolem operátorů je vykonávat nějakou operaci (třeba sčítání). Aby tuto operaci mohli vykonávat, musí pracovat s tzv. operandy. Operand je nějaká hodnota, která stojí před, nebo za operátorem (čísla, která sčítáme). . 1 + 3 //plus je operátor, 1 a 3 jsou operandy . Operandy mohou být konstantní (neměnné), to jsou třeba čísla nebo jmenné konstanty jako MAX_PLAYERS, ale také variabilní (proměnné), to jsou proměnné, pole, návratové hodnoty funkcí apod. Kombinací operátorů a operandů vzniká výraz. 2. Dělení operátorů a) Počet operandů Dělit operátory můžeme podle různých kritérií. Prvním je počet operandů. Operátory s jedním operandem nazýváme unární, se dvěma operandy binární a se třemi operandy ternární. . !promenna //vykřičník je unární operátor 1 + 3 //plus je binární operátor výraz ? true : false //otazník s dvojtečkou jsou jediným ternárním operátorem v Pawn . b ) Účel Dále můžeme operátory dělit podle jejich účelu. Pak mluvíme o operátorech artimetických, relačních, logických, přiřazovacích a binárních. Tohoto dělení se budeme držet a ty hlavní skupiny si blíže rozepíšeme. 3. Aritmetické operátory Se základními aritmetickými operacemi jsme se setkali právě v matematice. Jsou to sčítání, odčítání, násobení a dělení. . new cislo = 5, cislo2 = 10; cislo + cislo2 //plus sečte dva výrazy (výsledek je 15) cislo - cislo2 //mínus odečte dva výrazy (výsledek je -5) cislo * cislo2 //hvězdička vynásobí dva výrazy (výsledek je 50) cislo / cislo2 //jedno lomítko vydělí dva výrazy (výsledek je 0.5) . Pak je tu ještě jeden speciální operátor pro dělení, který ovšem vrací zbytek po dělení. Nazývá se modulo. . cislo % cislo2 //procento vydělí dva výrazy a vrátí nám zbytek (zbytek je 5) . Všechny výše uvedené operátory jsou binární. Nezapomeňme, že pro ně platí stejná matematická pravidla jako v reálném životě (nulou nelze dělit, násobení má přednost před sčítáním, sčítání a násobení jsou komutativní operace atd.). Pokud chceme, aby nějaká operace měla přednost před jinou (sčítání před násobením), můžeme, stejně jako v matematice, použít kulaté závorky. . 4 * (1 + 1) //díky závorkám dojde nejprve k sečtení jedniček a až poté k vynásobení čtyřkou . Dalšími aritmetickými operacemi jsou inkrementace a dekrementace. S těmi se setkáme později u cyklů. Oba operátory pro tyto operace jsou unární a uvádí se buď před, nebo za proměnnou. Ano, v tomto případě musí být operandem proměnná / buňka pole. . new cislo = 5; cislo++ //inkrementace, hodnota proměnné cislo se zvětší o 1, tedy na 6 cislo-- //dekrementace, hodnota proměnné cislo se zmenší o 1, tedy na 4 . Jak už je uvedeno v poznámce, inkrementace zvýší hodnotu o 1, dekrementace sníží hodnotu o 1. Pro zajímavost (rozklikněte spoiler): . Poslední aritmetický operátor, který si zmíníme, je unární mínus. Uvádí se před operandem a jeho úkolem je převést kladné číslo v záporné a naopak. Na nulu nebude mít vliv. . -cislo . 4. Závěr První část návodu o operátorech je za námi. Vysvětlili jsme si pojmy jako operátor, operace, operand a výraz. Také jsme si uvedli, jak se operátory rozlišují a co to jsou aritmetické operátory. V příštím návodu si objasníme zbývající kategorie – relační, logické, přiřazovací a bitové operátory. Tento návod, stejně jako ten předchozí, je určen pro nováčky, pokročilejší věci byly buďto úplně vynechány, nebo jsou uvedeny ve spoilerech. Přesto, zdá-li se Vám, že jsem něco opomněl, někde jsem se spletl nebo se jen chcete vyjádřit, pište do tohoto tématu. Ověřený návod Tento návod prošel validací, a lze ho proto považovat za ověřený.
  6. Bude to fungovat úplně stejně, jako kdybys to použil jinde. Jestli to autor bude mít umístěno jinde, tak mu hlavně neraď, ať to dá tam. K autorovi: zkus zvětšit rádius, 0.25 mi přijde málo. Může, ale nemusí to být tím, zkouším to metodou pokus-omyl.
  7. A na to jsi přišel kde, prosím tě? Na wiki máš akorát příklad, to neznamená, že to může být jenom tam.
  8. Já bych ti to řekl, ale musel bych tě zabít. (Guma? Napadlo mě ještě něco, ale to bych radši neříkal.)
  9. Tak určitě. Tak mi řekni, komu by se chtěl číst text, který nejsi schopný rozdělit do odstavců, kód oddělit BB kódem od ostatního textu a který obsahuje věty, jako jsou tyto: Tohle má úžasnou vypovídací hodnotu. Tohle rozhodně není načítání dini. Navíc dáš soubor na externí úložiště. Lidi jsou od přírody líní a když jim to nedáš pod nos, většina to přejde a jde dál (můj případ). Když ti to nejde nahrát, tak z toho kruci vyberu to důležité a popř. doplním to, co budeme požadovat. Proč ty by sis při psaní toho tématu nemohl dát práci, když my si ji pak při řešení tvého problému dávat máme?
  10. vEnd

    pomoc UnJail #2

    Překvapuje mě, že ti to vůbec funguje. Víš vůbec, jak fungují podmínky a větvení? Ty si ty bloky děláš, jak se ti líbí. Přečti si ty návody, udělej mi tu radost. dcmd_unmute(playerid, params[]) { LEVEL(1); new id, duvod[145]; if(sscanf(params,"uz",id,duvod)) return SendClientMessage(playerid,COLOR_RED, "[ ! ] {FFFFFF}Použi: /mute ID DOVOD"); if(!IsPlayerConnected(id)) return SendClientMessage(playerid, COLOR_RED,"[ ! ] {FFFFFF} Hráč neni pripojený"); if(GetPVarInt(id,"MuteSeconds") == 0) return SendClientMessage(playerid,COLOR_RED," [ ! ] {FFFFFF}Hráč neni umlčaný"); SetPVarInt(id,"MuteSeconds",0); format(duvod,sizeof(duvod),"Administrátor %s odmlčel hráče %s [Dôvod: %s]",Jmeno(playerid),Jmeno(id),duvod); SendClientMessageToAll(COLOR_RED,duvod); SendClientMessage(id,COLOR_RED,"Byl jste odmlčen!"); return 1; } To druhé si zkus opravit sám, rozdíly mezi tvým unmute a mým unmute vidíš.
  11. Dost pochybuji o tom, že když vyvolá nekonečný cyklus a nikdy jej nezastaví, že se potom ještě něco stane.
  12. vEnd

    script RLsystem v0.1

    Místo dcmd použij zcmd/i-zcmd. K y_cmd ani nečuchej, to je o několik lig výš, než teď jsi. Místo dini použij DOF2. Syntaxe je dost podobná. Kdo ti doporučí y_ini, toho pošli někam, na to zatím taky nemáš.
  13. Tak jestli máš v map týmu Toma, bude to mít při nejmenším hezké prostředí. Hele, když se na to nevykašleš, přijdu si zahrát, může to být sranda. S tou originalitou to ale zas nepřeháněj, pasažéři a domorodci jsou jen jiný název pro lidi a zombie.
  14. vEnd

    script RLsystem v0.1

    Ale na to je tu sekce help, když ti kód nejde (což jsi očividně věděl, napsal jsi to o pár příspěvků víš) a nevíš proč, tak to vezmu a hodím do sekce Pomoc. Tam si vyslechneš prakticky to samé, co tady, akorát bez hodnocení a s tou pomocí, s těmi radami.
  15. vEnd

    script RLsystem v0.1

    Aha, a to mi řekni, to se tím jako chlubíš? Máš potřebu sem dávat něco, co vlastně ani nejde? Chlapče, nechceš se živit jako programátor, že ne?
  16. vEnd

    script RLsystem v0.1

    Určitě je to tvoje? Přijde mi to jako kód z roku 2009. Tak stručně: - dcmd; - dini; - zbytečné callbacky navíc – nepřehlednost; - zbytečné struktury if - else if - else, máš tam return, není to nutné; - očividně nevíš, jak funguje strval; - zbytečné řetězce; - co se dá ocenit, tak nikde nevidím řetězce o velikosti 256+. V praxi celkem nepoužitelné, s takovým admin systémem se toho fakt moc spravovat nedá. Tak 3/10.
  17. To už bych mu raději doporučil hotový script ke stažení, ta sekce má témata z roků 2009 až 2011, což se dá jinak interpretovat jako věk dini/dcmd a dost prasáckých kódů, co se tak dívám. Tady (klik) máš nějaké admin systémy, podívej se na to, až se na to budeš cítit (doporučuji s tím ale moc dlouho neotálet), můžeš se začít učit z těch návodů a systém si upravovat, takhle se asi nejlépe pawn naučíš (já se tak učil).
  18. To jsem neuvedl záměrně, chci, aby počítali s tím nulovým znakem a vždycky přičetli o jedno navíc, než je délka textu. Ale abys neřekl, že je to jen výmluva z mé strany, o dopočítání velikosti pole obecně jsem se zmiňoval v návodu na pole. Jinak díky za názory, jsem rád, když někdo něco napíše, cokoliv. Je to depresivní psát do větru.
  19. Obtížnost: Osnova: 1. Úvod, co je řetězec 2. Nulový znak 3. Ukládání hodnot do řetězce 4. Závěr 1. Úvod Zdravím Vás, dostali jsme se už ke třetímu návodu pro začínající pawnery. Ještě než se do toho pustíme, doporučuji, abyste si přečetli předchozí dva návody (návod na pole – návod na proměnnou), zejména návod na pole, bez něj budete mít problémy pochopit problematiku řetězců. O řetězci (angl. string) byla řeč již dříve. Zopakujeme si to hlavní – je to pole znaků, do kterého ukládáme texty, zprávy, hesla atd. Každá buňka obsahuje jeden znak. Do poslední buňky nic neukládáme. Proč vlastně do poslední buňky nic neukládáme? Kvůli nulovému znaku. 2. Nulový znak Je načase, abychom si konečně vysvětlili, proč u řetězců potřebujeme buňku navíc, proč tuhle poslední buňku nikdy nezaplňujeme. Je to kvůli tzv. nulovému znaku (také EOS – End of String). Tenhle konkrétní znak (mimochodem vypadá takhle – '\0') v Pawn totiž určuje konec řetězce. Jazyk po nás požaduje, abychom mu sdělili, když řetězec skončí. Proto je nezbytné k délce řetězce vždy přičíst jeden znak navíc, ten je vyhrazen pro tento nulový znak. . new pozdrav[4+1]; //deklarace řetězce, která je nám důvěrně známa z předchozího návodu na pole pozdrav = "ahoj"; //uložení pozdravu do řetězce . Slovo "ahoj" má 4 znaky, celkem tedy potřebujeme řetězec o délce pěti znaků (4 + nulový znak). Abychom měli představu, jak to v tom řetězci vypadá, rozpitváme si ho: . pozdrav[0] = 'a' pozdrav[1] = 'h' pozdrav[2] = 'o' pozdrav[3] = 'j' pozdrav[4] = '\0' //onen nulový znak v páté buňce s indexem 4 . Ať už potřebujeme řetězec k čemukoli, vždy musíme myslet na tento nulový znak. Pro příklad, pokud funkce SendClientMessage může odeslat zprávu o maximální délce 144 znaků, řetězec s touto zprávou musí mít délku 145. 3. Ukládání hodnot do řetězce Existuje více způsobů, jak můžeme do řetězce něco uložit. Vlastně jich je spousta, my si ukážeme ty základní. a) Přímé ukládání pomocí operátoru přiřazení Tím mám na mysli rovnítko (=). Takhle jsme to dělali doposud, uvedeme identifikátor řetězce (bez hranatých závorek), rovnítko a poté text ohraničený uvozovkami ("). . pozdrav = "ahoj"; . Tento způsob ukládání lze použít, když přesně víme, co tam chceme uložit. Také je nutno podotknout, že ukládaný text nesmí být delší, než je délka řetězce. Upřímně si myslím, že s tímto se v praxi moc nepotkáte (akorát při inicializaci). Často je potřeba text upravit, dosadit do něj hodnoty proměnné apod. K těmto účelům nám slouží formátování. b ) Formátování Když formátujeme text, označujeme tím proces, při kterém do něj vkládáme hodnoty jiných proměnných a řetězců. Slouží nám k tomu funkce format. . format(output[], len, const format[], {Float,_}:...) . Za "output[]" dosadíme řetězec, kam chceme výsledný text uložit. Parametr "len" po nás chce délku výsledného textu. "const format[]" je onen text, který chceme formátovat. To poslední – "{Float,_}:..." – jsou proměnné/řetězce, které chceme dosadit. Ukažme si to na příkladu: . new hrac[4+1] = "Pepa"; //takto vypadá inicializace řetězce new penize = 500, score = 1000; //proměnné, které budeme dosazovat new vysledek[100]; //výsledný řetězec, kde bude nás formátovaný text format(vysledek, sizeof vysledek, "Hráč %s má %d dolarů a %d skóre.", hrac, penize, score); . V řetězci vysledek teď budeme mít: Hráč Pepa má 500 dolarů a 1000 skóre. . Ve fomátované zprávě jsme použili jisté znaky – %s a %d. Těmto znakům se říká specifikátory. Aby ta funkce format věděla, kam má to hrac, penize a score dosadit, musíme mu to dát nějak vědět. To je účel specifikátorů. Uvádíme je vždy v tom pořadí, v jakém po sobě jdou proměnné/řetězce, které dosazujeme. Máme následující specifikátory: %d nebo %i – celá čísla %s – řetězec %f – čísla s desetinnou čárkou %c – znak Nejsou všechny, ale jako základ nám tohle postačí. 4. Závěr A to by k řetězcům bylo všechno. Konečně již víme, co je nulový znak a k čemu slouží. Už víme, jak do řetězců ukládat běžný, ale také formátovaný text. Jediné, na co jsem ještě zapomněl – pomocí sizeof jsme zjistili velikost řetězce vysledek (počet buněk toho řetězce). Tento návod, stejně jako ten předchozí, je určen pro nováčky, pokročilejší věci byly buďto úplně vynechány, nebo jsou uvedeny ve spoilerech. Přesto, zdá-li se Vám, že jsem něco opomněl, někde jsem se spletl nebo se jen chcete vyjádřit, pište do tohoto tématu. Ověřený návod Tento návod prošel validací, a lze ho proto považovat za ověřený.
  20. Takové jako ty bych dal pověsit za koule do průvanu. Přesně kvůli lidem jako ty tu máme my, helpeři, tolik práce. Když budou lidi věčně kopírovat, nic se nezmění. Oni se nic nenaučí a my budeme čím dál otravnější, protože většina z nich nebude vědět ani základy. Udělej nám, helperům, tu službu a už s podobnými návody nepřispívej. Až to budeš mít promakané, vysvětlené, neřeknu ani slovo.
  21. Ahoj, Lukys. Mohl bych ti říct, že tohle není návod, ale asi by sis toho ani nevšimnul. Tak to zkusíme trochu výrazněji: TOHLE NENÍ NÁVOD A proč to říkám? Protože: - návod vysvětluje; - návody neobsahují takovéto úseky textu: - návody mají danou strukturu. Pokud jsi tohle nepochopil z toho tuctu prověřených návodů, co tady jsou, tak to prostě nedělej. Díky, to je vše, co jsem ti chtěl říct.
  22. Zde (klik) máš dost dobrý návod (ověřený), podle kterého si můžeš udělat ukládání daných údajů do souboru.
  23. vEnd

    pomoc stock

    Tím to není. Ten kód, co jsi poskytl, je v pořádku a mně jde zkompilovat bez problému. Ukaž nám toho víc, celý script.
×
×
  • Create New...