Jump to content

Search the Community

Showing results for tags 'samp'.

  • Search By Tags

    Oddělujte čárkami
  • Search By Author

Content Type


Fórum

  • Obecné
    • Všeobecné
    • Všechno možné
  • Programování
    • Poradna
    • Návody
    • Tvorba
    • Hledám programátora
  • Herní oblast
    • Poradna
    • Jak na to?
    • Herní kontext
    • Herní zážitky
    • Komunita
  • Grafika
    • Poradna
    • Návody
    • Tvorba
  • Ostatní
    • Hardware a software
    • Hledám/nabízím
    • Archiv
    • 3D Tisk

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Web


Facebook


Jabber


Skype


Steam


Twitter


Github


Pastebin

  1. Tanga

    návod Enum [**]

    Obsah Úvod #define enum Ďalšie použitie 1. Úvod Napadlo mi, že rýchlejšie než vysvetliť niekomu čo je to enum, by bolo dať mu odkaz na nejaký návod. Žiadny som však nenašiel. Boli útržky toho čo je to enum tu a tam, ale nič čo by sa dalo ľahko nájsť. Enum slúži na náhradu direktív preprocesora (#define NIECO). Je prehľadnejší a umožňuje lepšiu kontrolu errorov pri kompilácii. Enum je skratka od enumeration, tj. výčet, vyčíslenie. V tomto návode teda ukážem riešenie konkrétnej úlohy dvomi spôsobmi. Pomocou #define a enum. Majme systém, ktorý kontroluje kde sa nachádzajú isté autá a či sú obsadené. Použijeme teda jednu globálnu premennú. 2. #define #define POSX 0 #define POSY POSX + 1 #define POSZ POSX + 2 #define OCCUPIED POSX + 3 #define VELKOST_POLA (OCCUPIED - POSX + 1) // 3-0+1=4 #define POCET_AUT 20 new Vozidla[POCET_AUT][VELKOST_POLA]; ... stock PouzitiePola() { printf("Velkost posledneho pola = %d", VELKOST_POLA); for (new i; i < sizeof (Vozidla); i++) if (Vozidla[i][OCCUPIED] == true) { printf("%f", Vozidla[i][POSX]); // len nejaky priklad } } 3. Enum Rovnakú funkcionalitu s použitím enumu by sme dosiahli nasledovným kódom. Nie je nutné písať názvy jednotlivých prvkov v enume veľkým písmom. Záleží na vašich preferenciách, mne celkom dáva zmysel, že keďže to nahrádza konštanty, tiež by to malo byť veľkým písmom. #define POCET_AUT 20 enum CarEnum { Float:POSX, // enum umoznuje jednoduchu a prehladnu kontrolu typov Float:POSY, Float:POSZ, bool:OCCUPIED }; new Vozidla[POCET_AUT][CarEnum]; ... stock PouzitiePola() { printf("Velkost posledneho pola = %d", _:CarEnum); for (new i; i < sizeof (Vozidla); i++) if (Vozidla[i][OCCUPIED]) { printf("%f", Vozidla[i][POSX]); // len nejaky priklad } } Možno ste si všimli v PouzitiePola() s enumom: printf("Velkost posledneho pola = %d", _:CarEnum); Tá časť _:CarEnum musí mať predponu _: inak by kompiler hodil warning. Fungovalo by to ajtak. Je to len bug kompilera. V praxi som vypísanie veľkosti enumu ešte nevidel, nebojte sa že by to hnusilo kód. Pre pokročilých: 4. Ďalšie použitie Enum nemusí číslovať od nuly, dá sa spraviť aj toto: #include <a_samp> enum TestEnum { PREMENNA = 5, PREMENNA2, PREMENNA3, // pauza PREMENNA4 = 25, PREMENNA5 }; main() { printf("%d, %d", _:PREMENNA3, _:PREMENNA5); } Server log: SA-MP Dedicated Server ---------------------- v0.3.7-R2, (C)2005-2015 SA-MP Team ... [01:05:25] 7, 26 Som presvedčený, že s enumami sa dajú robiť rôzne pekelné kúsky z ktorých ja žiadne nepoznám, určite ak nejaké máte, pridajte.
  2. TheJizzy

    Infernus Race

    Z tohoto alba SA-MP Xmas 2009

    San Andreas Multiplayer Vánoční párty. Rok 2009.
  3. TheJizzy

    Christmas Tree

    Z tohoto alba SA-MP Xmas 2009

    San Andreas Multiplayer Vánoční párty. Rok 2009.
  4. TheJizzy

    House Party

    Z tohoto alba SA-MP Xmas 2009

    San Andreas Multiplayer Vánoční párty. Rok 2009.
  5. TheJizzy

    Christmas Tree

    Z tohoto alba SA-MP Xmas 2009

    San Andreas Multiplayer Vánoční párty. Rok 2009.
  6. Zdravím, Príď sa pozrieť na 'nový' hosting IGHost.eu. Čo tu môžeš nájsť? SA-MP servery za nízke ceny. Minecraft servery za nízke ceny. Kvalitnú podporu. Kvalitné zabezpečenie a tak ďalej... Čo môžeš očakávať v blízkej dobe? Do ponuky budú pridané nové herné servery, a taktiež aj voice servery (ts3, musicbot, ventrilo) Nový design administrácie Na facebook stránke sútaže o rôzne steam hry A mnoho dalšieho... Nie je to žiadny 3 dňový hosting, či 7 ba ani 30. S týmto projektom plánujeme dlhú budúcnosť, avšak niektorý z vás si môžu pamätať tento hosting ešte niekedy zo začiatku roka, kde nám plány bohužial nevyšli, tak sme fungovali len 5 mesiacov. Ak si chceš oskúšať server zadarmo je tu aj taká možnosť! 1. Zaregistruj sa a prihlás sa. Automaticky by si mal dostať kredit 1 € čo ti vystačí na 1 mesiac samp serveru na 50 slotov, myslím že to na test stačí. LCS-Hosting.sk <<< Prečo je v štítkoch? Preto pretože sk patrilo nám, avšak už bol čas na premenovanie a na niečo lepšie, ľahšie zapamätatelné. Dlho sme bádali až sme dospeli k záveru "Inovation Gaming" (IG) a potom sme do toho dopojili len slovo "host". Hardwér: Predsa o tomto by sme si nemali klamať. Hostiteľ: (Crew.sk) Výška RAM: 2048 mb > 2 GB Veľkosť HDD: 15 GB Konfiguráciu vyššie má 99.8% free hostingov. Taktiež v blízkej dobe je plánovaný upgrade na: 30 GB RAM 2 TB SSD Boosted HDD Hostiteľ: (Contabo) Všetky informácie bližšie o plánovaných údržbách, upgradoch a podobne nájdete na: Facebook Fanpage Tešíme sa na vás. IGHost.eu Team
  7. Zdravím, hledám nějaké aktivní hráče / adminy. Mod - Rze 9.9 (Realná Země 7.4) Mám tu Gang System, vlastní hudbu, vip system, SkyHouse, ručné startování aut a monoho další... Server se jsem dodělal dnes, mám i druhý server - Paradise World který je taky přeplácán FilterScriptama. Hledám někoho schopného do vedení. Někomu kdo má o to zájem, nevěděl jsem jaký mod mám dat. Tak jsem jen tak forfun dal Rze kterou jsem teda vylepšil těma FS. Takže kdo by neměl co dělat tak se ozvěte. Rze 9.9 - 82.208.17.10:27499 Pradise World - 82.208.17.10:27667 ------------------------------------------------------------ PS.: Kdo by chtěl, může pomoci na vývoji serveru.
  8. Brcko.

    hledám GPS

    Ahoj, hledám script na gps.. Napíšu /gps vyjede tabulka kliknu na název a ukáže se tojúhelníček nebo cesta po které musím jet. Nemůžu nikde to nikde najít, nemá to někdo prosím ?
  9. Obtížnost: Osnova: 1. Úvod, co je to funkce; 2. Definice funkce a její části; 3. Parametry; 4. Návratová hodnota; 5. Závěr. 1. Úvod, co je to funkce Zdravím, tímto návodem konečně dokončím šňůru návodů pro začátečníky. Posledním tématem, které jsme ještě nestihli probrat, jsou funkce. O čem je řeč? Funkce jsou takové části kódu, které lze volat v různých částech skriptu. Někdy se lze také setkat s pojmem podprogram (ačkoliv to není to samé – podprogramem mohou být i metody, ale to se nás ani Pawn netýká). Účel je jasný – abychom nemuseli psát tentýž kód na více místech, napíšeme jej jen jednou a voláme jej tam, kde potřebujeme. Přináší nám to hned několik benefitů – kratší a přehlednější kód, při úpravě kódu jej stačí upravit na jednom místě, totéž platí pro opravy chyb. Počas skriptování SA:MP skriptů se setkáváme s funkcemi nepřetržitě, jmenovitě například funkce GetPlayerName, SendClientMessage, strval, ale i OnPlayerConnect či OnFilterScriptInit. 2. Definice funkce a její části Když už máme představu, co to funkce je, měli bychom si ukázat, jak ji vytvořit. Každá funkce má svůj název (identifikátor), dále pak parametry, o kterých si řekneme za chvíli, tělo, do kterého vkládáme kód, a jako poslední návratovou hodnotu (i když tu nemusí mít nezbytně, o tom za chvíli). Ukažme si to na kódu: Secist(cislo1, cislo2) { new suma; suma = cislo1 + cislo2; return suma; } Teď si určíme jednotlivé části funkce: – identifikátor: Secist – parametry: cislo1 a cislo2 – tělo funkce: všechno mezi složenými závorkami {} – návratová hodnota: return suma; Jak je vidět, jako první se uvádí identifikátor, poté následují parametry ohraničené kulatými závorkami, následně se píše tělo kódu do složených závorek a do těla se uvádí návratová hodnota příkazem return. Výše uvedená funkce slouží k součtu dvou celých čísel. 3. Parametry Díky parametrům můžeme funkci předávat vstupní hodnoty a/nebo ovlivňovat to, jak se bude chovat. U naší sčítací funkce parametry slouží k předání sčítanců. Ale například funkce strcmp má parametr ignorecase, který nám určuje, zda má funkce ignorovat rozdíl mezi velkými a malými písmeny. Tento parametr ovlivňuje chování funkce. Parametry funkcí v Pawn mohou být různého datového typu (tedy celá čísla, desetinná čísla, logické hodnoty, řetězce atd.) a může jich být libovolný počet. Jsou funkce, které nemají žádné parametry (kulaté závorky ale musíme uvést vždy – ()), jsou takové, které jich mají i 10. Zde je pár funkcí na ukázku, každá s jiným počtem parametrů (všechny lze dohledat na SA:MP wiki): GetTickCount(); //funkce bez parametrů SendClientMessage(playerid, color, const message[]); //funkce se 3 parametry AddPlayerClass(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo); //funkce s 11 parametry Lze si všimnout, že u některých se objevují věci jako Float:, [] apod. Právě tyto, prozatím tomu říkejme "věci", nám určují, jaký datový typ bude daný parametr mít. Seznam nejčastěji používaných datových typů: playerid // když neuvedeme nic, bere to jako celé číslo Float:x // Float: nám značí desetinné číslo bool:ignorecase // bool: nám značí logickou hodnotu (true/false) message[] // hranaté závorky znamenají řetězec (nebo pole, viz předchozí návody) Zbývá nám uvést si, jak takové parametry dosazovat při volání funkce. Jednoduše za ně dosadíme skutečné hodnoty (přesněji argumenty) v tom pořadí, v jakém jsme je definovali: GetTickCount(); //nic se nemění SendClientMessage(0, 1, "Ahoj, světe!"); //dosazení argumentů (skutečných hodnot) Nad rámec návodu (pro zvídavé): 4. Návratová hodnota Na začátku jsme řekli, že funkce má také návratovou hodnotu. Přesněji řečeno, může mít, ale nemusí. Přesně tak, funkce žádnou návratovou hodnotu mít nemusí. V některých jazycích se pak funkce bez návratové hodnoty nazývá procedurou. V kódu naší sčítací funkce je vidět, že hodnotu vrátíme příkazem return. Ve funkci můžeme tento příkaz použít vícekrát (často to souvisí s podmínkami a větvením), ale pravidlem je, že musí vždy vrátit hodnotu stejného datového typu. Kompilátor nám neumožní vrátit jednou celé číslo a jednou řetězec, to prostě nejde. Když už jsme zmínili datové typy, je třeba si dávat pozor na jednu věc. Pokud vracíme hodnotu jinou než celé číslo či řetězec, musíme před identifikátor uvést příslušný tag (teď už nepíši "věc", ale tag). Upravme si tedy naši funkci pro sčítání dvou desetinných čísel: Float:Secist(Float:cislo1, Float:cislo2) // před názvem nám přibyl tag Float { new Float:suma; suma = cislo1 + cislo2; return suma; } Zde je vidět, že před názvem nám přibylo Float:. Je to nutné pro správný chod funkce. Kdybychom vraceli např. logické hodnoty, byl by tam tag bool:. A jak je to tedy s funkcemi (procedurami, jestli chcete), které nic nevracejí? Jsou dvě možnosti, buď uvedeme prázdný return – return; – nebo neuvedeme nic. Je to jen na vás, běžná je druhá varianta (neuvádět nic). Ukázka: Vypis(const message[]) { print(message); return; } Vypis2(const message[]) { print(message); } 5. Závěr A tím jsme se dostali jak k závěru tutoriálu, tak k závěru celé série. Děkuji všem, kteří si návod přečetli, a obdivuji všechny, kteří prošli celou sérií. Doufám, že jste se dozvěděli něco nového, pokud ne, alespoň jste si to zopakovali. Prozatím neplánuji začínat další sérii návodů, ale je možné, že se sem tam něco objeví. Ještě jednou děkuji a platí to, co vždycky – pokud jste našli nějakou chybu či nesrovnalost nebo se jen chcete na něco zeptat, zanechte mi vzkaz pod tímto příspěvkem.
  10. Hladám TextDraw Maker na sampko nie In-Game a ani BSN...
  11. AkelGP

    hledám Gamemode na SAMP

    Ahoj, hledám gamemode na SAMP který by měl obsahovat toto: - Warp systém + vozidla po warpech (několik warpů + vozidla u nich, která pak budete moci použít) - Autoškola systém (několik autoškol po celém SA, např. řidičák na auto, motorku, autobus, ...) - Job systém (výběr z pár desítek zaměstnání, která budete moci vykonávat na serveru) - Admin systém - Event systém - House systém (nějakých cca 600+ domů na serveru, které budete moci odkoupit) - Property systém (nějakých 200+ nemovitostí, které budete moci odkoupit a budou vám vydělávat peníze) - Firemní systém (systém několika firem, které budete moci odkoupit, pozvat do ní hráče a vydělávat více peněz) - Garáž systém - Gang systém - Výběr skinů - VIP systém Mělo by být Gamemode ve stylu freeroam.. Tak bych poprosil na stáhnutí. Předem děkuji.. --------- AkelGP
  12. Obtížnost: Osnova: 1. Úvod, co jsou to cykly 2. Cyklus for 3. Cyklus while 4. Cyklus do-while 5. Příkazy přeskoku (break a continue) 6. Závěr 1. Úvod Po dlouhé době Vás vítám u dalšího návodu pro začátečníky. Předmětem tohoto návodu bude iterace a cykly. Pojem iterace není nic jiného než opakování. Abychom v některých situacích (např. při procházení pole) nemuseli ručně psát zbytečně mnoho kódu se stejným účelem (např. výpis 50 prvků pole), můžeme si pomoct iterací, která nám kód zkrátí, zpřehlední a také nám ušetří práci. Iterace se v programování realizuje pomocí cyklů. Cyklus je konstrukce, která nám umožňuje vykonávat libovolný počet opakování. V pawn máme celkem 3 cykly; všechny si postupně projdeme a řekneme si, k čemu jaký cyklus slouží. 2. Cyklus for Prvním cyklus, se kterým se setkáváme nejčastěji, je cyklus for (tzv. iterační cyklus). Tento cyklus se neodmyslitelně pojí s polem – pomocí něj můžeme nejpohodlněji procházet hromadně prvky polí. Syntaxe cyklus for je následovná: . for(inicializace; podmínka; modifikace) { //kód } . V inicializační části (jak už název napovídá) deklarujeme/definujeme proměnnou (může jich být i víc), která bude ovlivňovat počet opakování a kterou můžeme využít např. k indexaci pole. Podmínková část obsahuje výraz, který nám určí, kdy cyklus skončí. Dost často obsahuje proměnnou z první části. Jakmile bude výraz v této části roven 0 (false), cyklus skončí. Modifikační část nám poslouží ke změně hodnoty proměnné cyklu. Zde můžeme ovlivnit průběh cyklu (kolikrát se zopakuje). . for(new i=0; i<10; ++i) { pole[i] = 1; } . Zde je praktická ukázka použití iteračního cyklu. V první části jsme deklarovali proměnnou i a přiřadili jí hodnotu 0. Ve druhé části jsme zvolili podmínku, která říká, že cyklus poběží tak dlouho, dokud bude hodnota i menší než 10. Ve třetí části jsme se postarali o to, že se hodnota i při každém opakování zvětší o jedno. Cyklus pojede 10x (i bude mít postupně hodnoty 0 až 9), tedy vše, co je uvnitř něj, se vykoná 10x. Cílem tohoto kódu je uložit do desetiprvkového pole hodnotu 1 (všimněte si, jak jsme šikovně využili proměnnou i jako index pole). Berme na vědomí, že jednotlivé části jsou odděleny středníky, ne čárkami! Pro zajímavost (rozklikněte spoiler): . 3. Cyklus while Další na řadě je while, též nazývaný jako cyklus s podmínkou na začátku. Ten název mu nedali jen tak z hecu – čtěte dále. Jeho syntaxe vypadá takto: . while(podmínka) { //kód } . Cyklus while má jen jednu část, a tou je podmínková. Ta nám určuje počet opakování – cyklus poběží, dokud bude podmínka pravdivá. Je dobré uvést, že tento cyklus nemusí proběhnout ani jednou. . new i = 0; while(i < 10) { pole[i] = 1; ++i; } . Jak vidíme, účel kódu je stejný jako v případě s iteračním cyklem. Může se nám zdát, že cyklus while vypadá jako ochuzená verze cyklu for; na jednu stranu to tak je (while se používal před for), chybí mu inicializační a modifikační část, ale cyklus s podmínkou na začátku může sloužit k různým účelům (např. ke čtení ze souboru), ne vždy zde budeme potřebovat proměnnou i. 4. Cyklus do-while Třetím bratříčkem je cyklus do-while, známý i jako cyklus s podmínkou na konci. Ano, od cyklu while se liší tím, že má podmínku na konci. Co to pro nás znamená? O tom za chvíli. Zde je jeho syntaxe: . do { //kód }while(podmínka); . I tento cyklus má jen podmínkovou část, a to na konci. Teď si asi říkáte, jaký je rozdíl mezi tímto cyklem a cyklem while. Zatímco while nemusí proběhnout ani jednou, do-while proběhne vždy alespoň jednou. . new i = 0; do { pole[i] = 1; ++i; }while(i < 10); . Stejný kód jako dvakrát předtím. Cyklus opět poběží, dokud i nepřekročí hodnotu 9. Rozdíl je, že prvek pole pole bude mít na indexu 0 hodnotu 1, ať už zvolíte jakoukoli podmínku. 5. Příkazy přeskoku (break a continue) Příkazy pro základní cykly jsme si již probrali. Teď si zmínímme ještě tzv. příkazy přeskoku. Jedná se příkazy, které nám mohou ovlivnit životnost celého cyklu či jen konkrétního opakování. Jedná se o příkazy break a continue. a) break Nejprve tedy break. Tímto příkazem můžeme předčasně ukončit cyklus. (Předčasně – kdykoli v jeho průběhu) . for(new i=0; i<10; i++) { if(i == 5) break; pole[i] = 1; } . Pro ukázku jsem zvolil cyklus for, ale fungovalo by to i ve while a do-while. A co se tedy stane? Jakmile bude proměnná i rovna pěti, cyklus skončí a nebude pokračovat v dalších opakováních. Pouze prvky s indexem 0 až 4 budou mít hodnotu 1. b ) continue Druhým příkazem je continue. Jeho úkolem je přeskočit dané opakování a pokračovat v dalším. . for(new i=0; i<10; i++) { if(i == 5) continue; pole[i] = 1; } . Jakmile bude proměnná i rovna pěti, cyklus přeskočí na další opakování, aniž by vykonal cokoliv pod continue. Takže prvek s indexem 5 bude jediný, který nebude mít hodnotu 1. Pro zajímavost (rozklikněte spoiler): 6. Závěr A tímto končíme téma iterace. Už víme, že máme v pawn 3 základní cykly (for, while, do-while) a příkazy přeskoku (break, continue). Tento návod, stejně jako ty 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, napište pod tento příspěvek.
  13. Chcete si zahrát Free Roam server ,ale ne na reálné zemi ? Pak zkuste Re Games Free Roam server(který běži na upravenem street life) pro zábavu s volnějším prostorem ,který se nedávno spustil . Na serveru jsou např warpy,toy system,house system apod to co bývá na rze většinou ale je toho tam i vice.Hraje se převážné v SF a přilehlem okoli ale i v LS,LV. Server byl spustěn dnes tak dělam již dnes reklamu i když si někdo řekne že tam nikdo skoro nehraje pořádně protože byl spustěn dnes . Pokud by se někdo ochotny našel a chtěl by pomoci může napsat zde nebo na serveru /ts3. Server je jedinečny že neběži na něm gm rze ale jsou tam funkce co jsou i na rze ale je jich více co sem napsal a lépe upravene. IP SA:MP : 82.208.17.10:27441 Ts3 : 89.203.249.211 Facebook : https://www.facebook.com/regames.x/
  14. Zdravím, chcel by som predať svoju najväčšiu mapu doposiaľ Paradise Islands + scripty k nej (prepracované gangzóny - vyznačenie na radare). O mape: - mapa má okolo 8.000 objektov, obsahuje vlastne až 7 ostrovov. Na mape sa pracovalo približne 7-9 mesiacov. Pôvodne sme mali v pláne vytvoriť mód čisto len na tejto mape, z dôvodu nedostatku času sa to ukončilo. Videá: SAMP Fórum: http://forum.sa-mp.com/showthread.php?t=445553 Posledny update: http://imgur.com/a/Ct2v3 Ukážka radaru: http://i.imgur.com/wIhCE5d.png Kontakt: súkromná správa Cena: Mapa bez gangzón: 50€ Mapa s gangzónami: 70€
  15. Obtížnost: Osnova: 1. Úvod 2. Modifikátor(y) 3. const 4. public 5. static 6. stock 7. Závěr 1. Úvod Zdravím Vás u, tentokrát o něco náročnějšího, návodu z oblasti jazyka Pawn. Krátce jsem přerušil svou sérii návodů pro začátečníky a sepsal tento návod, který se týká modifikátorů funkcí a proměnných. Jde se na věc. 2. Modifikátor(y) Začněme s tím, oč vlastně jde. Modifikátor nám představuje nějaké klíčové slovo, které upravuje (modifikuje) vlastnosti funkce/proměnné. Mohou se uvádět samostatně, ale i v kombinaci s jinými modifikátory. V tomto návodu se zaměříme na 4 modifikátory, a to na const, public, static a stock. 3. const Jako první začneme s modifikátorem const. Jeho účel se dá domyslet, je to totiž zkratka pro constant (konstantní), ale aby to bylo jasné – jeho účelem je tvořit tzv. konstantní proměnné, popř. konstantní parametry funkcí. Ano, tento modifikátor se nedá použít u definice funkce. Jeden by si řekl, že pojem "konstantní proměnná" je blbost (vlastně je to oxymóron, ale literární teorii dáme zase jindy). Jak může být proměnná konstantní? No, světě div se, ale může. Takovéto proměnné (nebo poli/řetězci) lze určit hodnotu jen při deklaraci (aneb inicializace). Vypadá to následovně: . new const max = 10; //určili jsme konstantní proměnné "max" hodnotu 10 new const rankNames[3][20+1] = {"Hráč", "Moderátor", "Administrátor"}; //konstantní pole řetězců s názvy hodností . Po tomto už nebudeme moci nikde hodnotu proměnné/pole změnit, kompilátor by nám nahlásil chybu. new před modifikátorem lze vynechat, ale pouze u proměnných, pole/řetězce to vyžadují. Pak jsem také zmínil cosi jako konstantní parametr funkce. Aniž byste to věděli, už jste se s tím setkali, a to u řetězcových funkcí: . strlen(const string[]) //konstantní parametr "string[]" . Zpravidla to vídáme u řetězců, ale lze to aplikovat i na ostatní parametry. A co nám to způsobí? Způsobí to, že daný parametr bude jen pro čtení. To znamená, že ho nelze uvnitř funkce přepisovat. . MyPrint(const a, const { printf("a = %i\nb = %i", a, ; a++; //tento řádek by hodil chybu, "a" je jen pro čtení b = 0; //tento řádek by taky hodil chybu, i "b" je jen pro čtení } . 4. public Dosti zajímavým modifikátorem je public. Ačkoliv jej lze použít i na proměnnou, smysl to má jen u funkcí. S "veřejnými" funkcemi se nejčastěji setkáváme u SA:MP callbacků a časovačů. Na jakém principu ale tyto funkce pracují a co nám přinášejí? Funkce s modifikátorem public SA:MP server volá přímo, proto jsou v AMX souboru zapsány čitelně (narozdíl od běžných funkcí, které mají v AMX zapsány svou adresu). To s sebou přináší velkou výhodu – lze je volat ve všech scriptech i v módu. Když si tedy ve svém módu vytvořím veřejnou funkci, mohu ji zavolat ve scriptech, což mi normální funkce neumožňuje. K tomuto meziscriptovému volání slouží funkce CallRemoteFunction. Nutno ale dodat, že veřejné funkce mají také svá omezení. Ty jsou následující: – každá veřejná funkce musí mít svůj prototyp (klíčové slovo forward); – veřejné funkce nemohou mít parametry s výchozí hodnotou; – veřejné funkce nemohou vracet řetězce. Její využítí spočívá zejména v již zmíněném sdílení mezi scripty. Také ji musíme využít v případě časovačů (SetTimer, SetTimerEx) a SA:MP callbacků (OnPlayerConnect apod.). Definice veřejné funkce vypadá takto: . forward MyPrint(const a, const ; //prototyp veřejné funkce public MyPrint(const a, const //deklarace veřejné funkce { printf("a = %i\nb = %i", a, ; } . 5. static Třetím na řadě je modifikátor static. U tohoto klíčového slova je zajímavé to, že se jeho účel liší u lokální proměnné a u globální proměnné / funkce. U lokální proměnné nám static může nahradit globální proměnnou. Zachovává si totiž svou hodnotu i po ukončení bloku. Názorná ukázka: . MyFunc() { static a; a++; } for(new i; i<3; i++) //3x volám funkci "MyFunc" { MyFunc(); } . Kdybychom proměnnou "a" deklarovali pomocí new, hodnota by se pokaždé vynulovala, jakmile by funkce došla ke konci. Jenže statická proměnná "a" si svou hodnotu zachová i po dokončení funkce, takže její hodnota bude po třech zavoláních 3. Co se týče statické globální proměnné a statické funkce, jejich funkce je odlišná. Když takovou globální proměnnou / funkci deklarujeme, je platná pouze v daném souboru. Co to znamená? Řekněme, že máme knihovnu mylib.inc, kterou připojujeme ke scriptu myscript.pwn. . //mylib.inc new a = 5; MyFunc() print("Hello, world!"); //myscript.pwn #include <mylib> new a = 3; MyFunc() print("Ahoj, světě!"); . Tento kód nám zahlásí chybu, že symbol "a" a "MyFunc" již existuje. Proč? Protože nemůžeme mít stejné identifikátory v knihovně i ve scriptu. Pokud tedy nepoužijeme statickou globální proměnnou / funkci: . //mylib.inc static a = 5; static MyFunc() print("Hello, world!"); //myscript.pwn #include <mylib> new a = 3; MyFunc() print("Ahoj, světě!"); . Teď je vše v pořádku. Proč? Protože jsme v knihovně použili modifikátor static, čímž jsme jazyku sdělili, že tyto názvy jsou platné jen v té knihovně, ve scriptu už ne. Tohle je opravdu šikovná utilitka, která se při tvorbě knihoven hodí. 6. stock A teď se dostáváme k mému favoritovi – k modifikátoru stock. Nevím, proč se to tak ustálilo (asi nadměrným používáním), ale mnozí si ještě dodnes myslí, že stock je synonymum pro funkci. Není, lidi, NENÍ! Jako každý jiný, tak i modifikátor stock má své specifické využití. A toto využití lze aplikovat jak na funkce, tak na proměnné. V čem to tedy je? Když u proměnné/funkce použijeme stock, říkáme tím kompilátoru, aby nám nevyhazoval varování o tom, že funkci nikde nevoláme. Takže, když vytvořím stock proměnnou/funkci a nikde v kódu ji nepoužiji, nebude kompilátor hlásit varování "symbol is never used". To je vše, to je celé kouzlo tohoto modifikátoru. Pro úplnost ještě deklarace: . stock a = 3; //stock proměnná stock MyFunc() //stock funkce { print("Hello, world!"); } . 7. Závěr A tím se dostáváme ke konci. Doufám, že jsem Vás něčemu novému přiučil, o stock a static toho lidé většinou moc neví, tak teď mají možnost se to dozvědět dopodrobna. Jak už bylo zmíněno na začátku, modifikátory lze kombinovat, např. static v kombinaci s const lze najít v některých knihovnách (nejen) od Y_Lesse. 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ý.
  16. Obtížnost: Osnova: 1. Úvod, co je to switch 2. Kdy a jak použít switch 3. Další možnosti case 4. Ukázky použití 5. Závěr 1. Úvod Zdravím Vás u sedmého návodu pro začínající pawnery. Tímto navážeme na minulý návod (přečtěte si ho) a rozebereme si, k čemu slouží switch a kdy jej použít namísto normálních podmínek. Napřed ale co je to ten switch. Switch (česky přepínač) je struktura, která v konkrétním případě nahrazuje soustavu if – else if – else. Jeho účelem je vykonat ten blok, který odpovídá jeho hodnotě. Proto také přepínač, obecně se dá říct, že přepne na blok dané hodnoty. 2. Kdy a jak použít switch Už jsem řekl, že se používá v konkrétním případě. Tím případem je tato soustava podmínek: . new cislo = 2; if(cislo == 1) { //hodnota je 1 } else if(cislo == 2) { //hodnota je 2 } else if(cislo == 3) { //hodnota je 3 } else { //hodnota je jiná } . Pokud v podmínkách porovnáváme takto hodnoty, lze k tomu použít kratší a přehlednější switch. Syntaxe switche je následovná: . switch(cislo) { case 1: { //hodnota je 1 } case 2: { //hodnota je 2 } case 3: { //hodnota je 3 } default: { //hodnota je jiná } } . Do závorek switche jsme dosadili proměnnou, ze které zjišťuje hodnotu. case je klíčové slovo, které nám zde tvoří větev pro konkrétní hodnotu. Jak je vidět, nahrazuje nám else if a podmínku. Na jedno si musíme dát pozor – je potřeba za case a hodnotu uvést dvojtečku. default je bez hodnoty a plní funkci else – provede se vždy, když hodnota neodpovídá žádnému case. Narozdíl od case ale není nutné jej použít. 3. Další možnosti case Switch dokáže pracovat jak s celými čísly, tak se znaky a desetinnými čísly. . case 1: //zápis pro celé číslo case 'a': //zápis pro znak case 3.14: //zápis pro desetinné číslo . Jazyk nám též umožňuje zapsat v jednom case několik hodnot, když je to třeba, stačí je oddělit čárkou. . case 1, 3, 5: //několika celých čísel case 'a', 'b', 'c': //několik znaků case 3.14, 1.4, 8.2: //několik desetinných čísel (tečka je desetinná čárka) . Pro zajímavost (rozklikněte spoiler): . 4. Ukázky použití Před koncem si ještě ukážeme pár příkladů, jak switch používat. Dialogy . Kombinovaný zápis . 5. Závěr Switchem jsme definitivně ukončili téma podmínek. Kromě if, else if a else teď znáte už i switch a víte, kdy a jak ho použít. Poslední varování na závěr: v jiných jazycích (C/C++, C#, Java, Javascript, PHP atd.) se blok case a default ukončuje klíčovým slovem break a neuvádějí se složené závorky. Pro Pawn to prostě neplatí, takže tuto syntaxi si nechte pro ostatní jazyky. Tento návod, stejně jako ty 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ý.
  17. Zdravím, včera a dnes došlo k reorganizaci návodů. Došlo ke smazání některých sekcí a k přidání nových. Stále platí, že návody musí projít revizí, aby mohly být označeny jako ověřené, a stále platí, že musí být zpracovány dle předlohy. a) Návody V hlavní sekci jsou všechny návody, které se týkají SA:MP funkcí a callbacků. Také jsou zde návody, které vysvětlují, jak něco vytvořit. Příklady: dialogy, textdrawy, cmd systémy, file systémy atd. Základy pawn a Rozšířené znalosti pawn Tyto podsekce sdružují návody, které se týkají přímo jazyka Pawn. V Základech jsou návody pro nováčky, v Rozšířených znalostech návody pro pokročilejší. Příklady pro Základy: proměnná, podmínky, cykly, funkce atd. Příklady pro Rozšířené znalosti: bitová manipulace, pokročilá inicializace polí, ternární operátor, pokročilá práce s řetězcem atd. c) Práce s YSI Podsekce pro návody o knihovně YSI. Příklady: y_ini, y_commands, y_groups, y_va atd. d) Nové návody Podsekce, která slouží k přidávání nových návodů. Pokud chcete založit nový návod, udělejte to zde. Jakmile dojde k ověření moderátorem, bude návod přesunut do příslušné (pod)sekce. e) Neověřené návody V této podsekci je většina dosavadních návodů. Žádný z nich neprošel kontrolou, proto je nemůžeme považovat za ověřené. Nezodpovídáme za pravdivost ani úplnost informací z těchto návodů.
  18. Obtížnost: Osnova: 1. Úvod, co je to podmínka 2. Vytvoření podmínky 3. Další možnosti větvení 4. Vnořené podmínky 5. Závěr 1. Úvod Dostáváme se k šestému návodu o základech jazyka Pawn. V něm si vysvětlíme, co to jsou podmínky a jak probíhá větvení. Než budeme pokračovat, měli byste mít znalosti alespoň z předchozích dvou návodů (z tohoto a tohoto). Abychom se posunuli dál, musíme si nejdříve říct, co to podmínka a větvení je. Podmínku si můžeme představit jako výraz (tvořený relačními a logickými operátory – viz návod na operátory), který je buď pravdivý, nebo nepravdivý. Je-li pravdivý, vykoná se kód, který jsme podmínili. Můžeme také určit, co se stane, když je výraz nepravdivý. Tomuto rozdělování kódu dle výsledku podmínek se říká větvení. Bloky ani klíčová slova if, else a switch neukončujeme středníkem! 2. Vytvoření podmínky Teď si zkusme vytvořit takovou podmínku a větev. Syntaxe je následující: . if(logický výraz) { //kód } . Klíčové slovo if nám značí, že se bude jednat o podmínku (z angličtiny if – jestliže). Do kulatých závorek píšeme logický výraz, který se má vyhodnotit. Mezi složené závorky (které nám tvoří větev – blok) píšeme kód, který se má vykonat, když je podmínka pravdivá. Zkusme si to na příkladu: . new cislo = 10; if(cislo == 10) { print("Hodnota proměnné cislo je rovna deseti."); } . Podmínka je pravdivá, kód se vykoná. Co by se stalo, kdyby podmínka pravdivá nebyla? Nestalo by se nic. Kód uvnitř bloku if by se nevykonal. 3. Další možnosti větvení Na začátku jsem psal, že může nastat i situace, kdy chceme, aby se něco stalo v případě, že podmínka neplatí. I to nám jazyk umožňuje provést, a to hned několika způsoby. a) else If nám tvořilo "pravdivou větev", else nám pak bude tvořit "nepravdivou větev", tedy blok, který se vykoná, když bude podmínka nepravdivá. Nutno dodat, že k else se podmínka nedává a že ho nemůžeme použít samostatně (je vázán na if). . new cislo = 5; if(cislo == 10) { print("Hodnota proměnné cislo je rovna deseti."); } else { print("Hodnota proměnné cislo není rovna deseti."); } . Podmínka se vyhodnotí jako nepravdivá, takže blok if se přeskočí a místo toho se vykoná blok else. b ) else if Složitější větvení nám pak umožňuje else if. Zjednodušeně řečeno je to else s dodatečnou podmínkou. Else if bloků může být více, ale stejně jako else nemohou stát samostatně. . new cislo = 5; if(cislo == 10) { print("Hodnota proměnné cislo je rovna deseti."); } else if(cislo == 5) { print("Hodnota proměnné cislo je rovna pěti."); } else if(cislo == 0) //tato podmínka se už vyhodnocovat nebude { print("Hodnota proměnné cislo je rovna nule."); } . A v čem je vlastně kouzlo else if? Script vyhodnotí podmínku v if, zjistí, že je nepravdivá, tak přeskočí k následujícímu else if. Opět vyhodnotí podmínku, zjistí, že je pravdivá, tak vykoná tento blok. K dalšímu else if už ale nepokračuje, protože jedna z podmínek nad ním byla pravdivá. A tím se liší od soustavy if – if – if; u takové soustavy by totiž script vyhodnocoval všechny podmínky nehledě na to, že některá z nich byla pravdivá. c) if – else if – else Samozřejmě to jde také vše zkombinovat, záleží jen na tom, co potřebujeme. . new cislo = 5; if(cislo == 10) { print("Hodnota proměnné cislo je rovna deseti."); } else if(cislo == 5) { print("Hodnota proměnné cislo je rovna pěti."); } else { print("Hodnota proměnné cislo není ani 10, ani 5."); } . d) switch Pro určité případy zde máme ještě jednu strukturu, a tou je switch. O switchi si něco povíme až v příštím návodu. 4. Vnořené podmínky Do teď jsme si ukazovali jednoduché podmínky a jednoduché větvení. Ale abyste si nemysleli, že je možné jen tohle, máme možnost podmínky vnořovat, tedy vkládat podmínku do podmínky. Viz tento příklad: . new cislo = 5; if(cislo > 0) { if(cislo == 5) { print("Hodnota proměnné cislo je rovna pěti."); } else { print("Hodnota proměnné cislo není rovna pěti."); } } . Zde je vidět, že uvnitř bloků lze tvořit další bloky. Platí to u podmínek, platí to u cyklů, platí to u všech struktur, které tvoří bloky. 5. Závěr A to je z podmínek všechno. Dozvěděli jste se, jak podmínky a větvení fungují, jak můžete uplatnit svou znalost relačních a logických operátorů v praxi, jak tvořit větev pro pravdu i nepravdu, jak vytvářet složitější podmínky a jak podmínky vnořovat. V dalším návodu si probereme onen zmíněný switch. 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ý.
  19. 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ý.
  20. 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ý.
  21. Hi, i would like to freeze player and his car (tramway) on a checkpoint. My code: if(CP[playerid] == 6000) { SendClientMessage(playerid, COLOR_JOB," "); SendClientMessage(playerid, COLOR_JOB,"[Information]{EBECE1} Arrêt actuel: Motel"); SendClientMessage(playerid, COLOR_JOB,"[Information]{EBECE1} Prochain arrêt: Chapelle"); SetPlayerCheckpoint(playerid, 2283.8784, -1419.8206, 24.4352, 3.0); TogglePlayerControllable(playerid,0); SetTimerEx("UnfreezePlayer",10000,false,"d",playerid); CP[playerid] = 6001; return 1; } All works well (timer, no errors...) but: the player is freeze and not the tramway. It's a real problem thank you for your help.
  22. Zombies Era RPG 2.0 O módu Někteří z Vás už někdy slyšely popřípadě nějakou dobu hrály na mém starém serveru Zombies Era. Přišla mi škoda nepokusit se vzkřísit tuhle “legendu“ a tak sem se rozhodl, že posbírám všechny své zkušenosti z předešlých projektů, okořením je špetkou originality a co z toho vzniklo můžete posoudit sami(zatim teda spíš představit, spuštění je v plánu 1. září). Nejedná se o klasické RP, kde si za klávesnicí nemůžete snad ani uprdnout aby to nepoznal admin a nesprdnul Vás, že jste nenapsali /do farting. Je to spíše RPG kde nikdo neřesí nějaký metagaming nebo powergaming. Proč? Protože pustina je krutá. Když potkáte hráče mimo chráněnou oblast, je pouze na Vás jestli se ho pokusíte zabít nebo ne. Ale pouze díky kooperaci s jinými hráči, budete skutečný válečník pustiny. Budete moci bojovat s ostatními frakcemi o důležité zdroje jako benzín, materiál na výrobu zbraní a munice a dokonce o samotné továrny na výrobu věcí potřebných k přežití. A bohužel do toho všeho Vás budou štvát zombíci. Zatím nikdo neví kde přesně se vzali, ale s největší pravděpodobností to má hodně společného s vládním programem LifeGuard (o tom více v samosttné části). Nejsou zase tak nebezpeční pokud máte čím se bránit. Co je to LifeGuard? (dále LG) Je to vládní projekt, který má zajistit přežití lidské rasy. Když zemře jedinec, který je součásí programu LG odešle stejnojmenné zařízení, které vlastní každý připojený subjekt, všechny charakteristiky a vlastnosti subjektu do hlavní centrály ve vesničce The Mud, kde potom klonovač vytvoří novou tělesnou schránku a nahraje do ní vědomí subjektu. Tímto je zaručeno přežití všech připojených. Nic ale není zadarmo. Každé klonování Vás bude něco stát. Síť LG má na starost skupina lidí, která si říká Officers (zároveň je to admin team). Hlídky Officerů pátrají po lidech bez klonovacího vysílače a rozdávají jim je (registrace nových hráčů) . Pohyb po světě Zombies Ery. ZE není open world RPG. To znamená, že se nepohybujete neustále v otevřeném 3D světě. Herní prostředí tvoří mapa světa po která se hráči pohybují pomocí TextDraw šipek. Když se přiblíží k některé lokaci, může pomocí kliknití myši na ENTER vstoupit do lokace. V případě náhodného setkání je buď tázan zda chce vstoupit, nebo je tam rovnu portnut bez varování. Všechny lokace v 3D světě jsou kruhového tvaru a jejich konec je znázorněn červenými lasery a napisy EXIT. Vystoupit z lokace je moné pouze pokud hráč není v režimu FIGHT. Tento režim znamená, že hráč utočí nebo někdo útočí na něj. V praxi to znamená, že pokud někdo někoho zasáhne, oba hráči se dostanou do režimu FIGHT po dobu 10ti sekund. Aby z tohoto režimu vystoupili, musí uplynout 10 sekud bez toho, aby je někdo zasáhl, nebo oni někoho. S každým dalším úspěšným útokem se režim FIGHT opět dostává na 10 sekund. Další lokace jsou hráčské základny (stan,domek), které jsou z mapy světa přístupné pouze jejich majiteli a tomu koho si tam přivede(když jako návštěvník takovou lokaci opustíte, její polohu si nezapamatujete). A podobné jsou základny frakcí (čerpací stanice, stará továrna, stará policejní stanice). Vozidla Vozidel je málo. Ale je dost možností, jak si nějaké obstarat. První možnost je si nějaké vyrobit. Takto je možné získat 3 typy vozidel. Banditto – jednomístná buggy Sanchez – dvoumístná crosska Freeway – dvoumístná motorka Ostatní vozidla musíte buď koupit, najít a opravit, zabít původního majitele a nebo ukrást. Dále je pár speciálních vozidel, které jsou pouze součástí questu a nebo jsou to unikátní vozidla, které lze pouze najít ve speciálních náhodných setkáních. Náhodná setkání Když se pohybujete po mapě světa, můžete narazit na spousty nepřátel. V náhodných setkáních narazíte na malé i velké skupinky zombie a také nájezdníků. Dost záleží na tom, zda cestujete sami, nebo s více hráči. Více hráčů, více zábavy. Dále jsou tu speciální náhodná setkání. Tato setkání může jedna postava nalézt pouze jednou. Obsahují unikátní vozidla, poklady, či sběratelské předměty. Obsahuje Dynamický systém lokací - generování,ukládání Dynamický systém NPC - NPC jsou v poolu a jsou použita, až když jsou třeba Systém replikací/klonování - když zemřete ve hře, jste znovustvořeni Hráčské frakce - možnost koupit základnu s názvem frakce Nehráčské frakce - možnost přidat se k frakci, kterou nezaložili hráči (dobrá věc pro hráče bez přátel ve hře) Boj o lokace - Gastown, Weapon factory PVP lokace - místa kde se objevuje loot (nikdy nevíte kdo Vás tam přepadne) Chráněné lokace - místa kde je hráč za střelbu trestán smrtí (The Mud, Downtown) Inspirováno hrami: Fallout 1 & 2 Fallen Earth Další informace budou postupně doplňovány, jakmile bude čas. Na závěr pár screenů... https://imgur.com/a/uqqWH Website: http://zombiesera.com
  23. 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ý.
×
×
  • Create New...