Petr 44 Odesláno: 29. Květen, 2011 Share Odesláno: 29. Květen, 2011 Zdravím, jsem tu s dalším tutoriálem, tentokrát se podíváme na základní syntaxi jazyku Pawn. _____________________________________________________ 0) Obsah: 1) Proměnné 2) Funkce 3) Public 4) Podmínky _____________________________________________________ 1) Proměnné: v Pawn se vyskytují 2 druhy proměnných podle oblasti působnosti: A) Globální (Global) (1.1) Lokální (Local) (1.2) Mohou se také rozdělit typy proměnných, podle obsahu, pro který jsou určeny: I) Integer (=Celé číslo) II) Float (=Desetinné číslo) III) String (=Textový řetězec) IV) File (=Proměnná pro soubory) V) Boolean (=Hodnoty true[1]/false[0]) VI) Text (=Textdrawy) VII) Text3D =(3D Text ) 1.1 Globální V překladu to jsou ty proměnné, které využíváte kdekoli v celém vašem scriptu. V praxi to znamená, že to jsou ty, které vytváříte pomocí new nahoře před prvním callbackem. Samozřejmě to tak nemusí být, můžete si ji vytvořit i někde jinde, ale musíte splňovat 1 pravidlo (viz dole). Využití těchto proměnných: * Objectid, vehicleid, ... * Timery * Hodnotých zakázaných věcí (Zbraně, ... ) * Různé proměnné, které musíte použít ve více callbacích ____________________ 1.2 Lokální Naopak tento typ proměnné, nazývající se lokální, můžete využít pouze v oblasti, pro kterou ji vytvoříte. Napsal jsem to asi blbě, vysvětlím to na příkladu. Máte proměnnou, kterou použijete POUZE v 1 callbacku, nemá tedy cenu ji tvořit jako globální, ale je výhodnější ji vytvořit jako lokální pro daný callback. Týkat se to může i stocků, oblastí podmínek, ... Využití: * Proměnné, využité pouze v 1 callbacku * Proměnné, u kterých je nutno zajistit, aby se na nich udržela správná hodnota při křížení akcí. (= Hlavně stringy, je lepší si string vytvořit jako lokální proměnnou než jako globální, může nastat, že se poté vpíše úplně jiný obsah, než jsme požadovali.) ____________________ Proměnné můžeme také rozvětvovat do pole proměnných Př.: promenna[pole][pole2]... POZOR: Při použítí rozvětvování se vám násobí počet proměnných, podle velikosti pole. POZOR: Maximální počet polí v promenný jsou 2! Využití: * Různé systémy (House, vehicle, ...) * Zakázané zbraně, vozidla, ... * Rozvětvení proměnné pro každého hráče POZOR: Pokud chcete použít takovouto proměnnou, musíte ji také náležitě vytvořit. new promenna[MAX_HODNOTA][MAX_HODNOTA2]; kde MAX_HODNOTA a MAX_HODNOTA2 jsou hodnoty, které určují Maxmální hodnotu pole - 1 Vytvoření proměnné New New nám prostě jednoduše vytvoří proměnnou. Nevím co k tomu napsat, asi jen to, že název proměnné v něm musí odpovídat názvu proměnné při používání. Zde také definujete typ proměnné (viz nahoře) a další věc je ta, že zde i vytváříte pole (viz také nahoře), přičemž vyplňovaná hodnota je maximální hodnota pole. new bool:Zaklad[50]; Vytvoří proměnnou "Zaklad" typu boolean s velikostí pole 50 (0 - 49). Static static také vytvoří proměnnou, ale my už máme new, k čemu static? Nejlepší bude, když Vám to ukážu na příkladu: Máme public, ve kterým chceme, aby se při každém načtení zvýšila hodnota lokální proměnný o 1 Když ale použijeme toto...: Public blabla() { new A; A++; print("%d", A); return 1; } ...tak to bude vypisovat pokaždé hodnotu 1? Proč? Standartní hodnota při vytvoření proměnný je 0. Přičteme 1. Máme 1. Vypíšeme. Public naběhne znovu. ALE opět se vytvoří proměnná s hodnotou 0. A jedeme znovu. Když to ale použijeme takto...: Public blabla() { static A; A++; print("%d", A); return 1; } Tak se nám hodnota A "uloží", i když už public skončí a poté se načte znovu. Výpis tedy bude: 1,2,3,4,5,6,... static tedy zajistí, že se hodnota uchová. ffredyk: "static je globální proměnná na lokální použití." Platí zde stejná pravidla jako u new _____________________________________________________ 2) Funkce: Další věc, co bych mohl probrat jsou funkce. Každá funkce má svůj Název. (2.1) Dále také muže obsahovat: * Parametry (2.2) * Return (2.3) 2.1 Název: Nebudu to asi rozepisovat, myslím, že by vám mohlo stačit pár příkladů. CreateVehicle AddPlayerClass SetPlayerColor 2.2 Parametry: Slouží vlastně k nastavení atribut toho, co funkce vykonává. Uvedu šablonu a poté příklad: Funkce(P1, P2, P3); SendClientMessage(playerid, COLOR_WHITE, "Blabla"); Myslím, že jasné ne? Do parametrů můžete dosazovat promenné (které jsme se naučili výše) nebo rovnou hodnoty (Integer, Float, String). POZOR: Každá funkce má vlastní specificky nastavené parametry 2.3 Return: Zdálo by se, že je to vše k základu funkcí. Není tomu tak, poslední část je Return. Return navrací specifickou hodnotu, kterou má každá funkce předvolená. Není to však tak, že každá funkce vrací hodnotu. Return funckí je vlastně vysvětlení toho, proč před CreateVehicle cpete tu proměnnou, abyste pak to auto mohli upravovat. CreateVehicle totiž vrací svoje vehicleid a to se uloží do proměnné. Příklady funkcí s returnem: CreateVehicle CreateObject CreatePickup GetPlayerVehicleID GetPlayerColor POZOR: Zdálo by se že i GetPlayerName, není tomu tak. Využití returnu: new vehicleid = CreateVehicle(...); AddVehicleComponent(vehicleid, 1010); TIP: Všechny parametry, returny najdete na wiki.sa-mp.com Určitě jste viděli kód, kde byla třeba funkce AddHouse. Přitom taková to funkce neexistuje. Jak to ten týpek udělal? No vytvořil si vlastní funkci. Můžeme se rozhodnout: A) Pokud je funkce relativně malá, můžeme ji uložit do mezipaměti (stock) Když je ale větší, je lepší si pro ni udělat public a načítat ji přímo z pawn souboru. Využijeme A, protože o B si něco řekneme později. stock MojeFunkce(par1, par2) { /* kód mé funkce */ return HODNOTA_RETURNU_MÉ_FUNKCE; } Můžete takto vytvořit právě ten dům s využitím proměnných s polem. Samozřejmě i cokoli jiného ale není problém takto udělat. (Pozor na ty velikosti) _____________________________________________________ 3) Public A) Standartní (3.1) Vytvořený (3.2) Už jsem o tom mluvil výše ve funkcích, public se na serveru vyvolává přímo z PAWN souboru oproti stocku, který je uložen v mezipaměti. Je tedy vhodnější pro obsáhlejší operace. Změna tady je, že každý public musí mít nějáký return. Př.: forward MujPublic( 3.1 Standartní: Co k tomu asi říct. No je to public, který uže máte vytvořený SAMP týmem v pawnu. Každý se vyvolává při jiné akci, máte to napsané i v názvu publicu. Ukážu rovnou příklady: OnGameModeInit, OnPlayerRequestClass, OnDialogResponse, ... Tyto publicy můžeme také rozdělit takto: I) Vykoná se při akci serveru (OnGameModeInit, OnFilterScriptInit, ...) II) Vykoná se při akci hráče (OnPlayerConnect, OnPlayerSpawn, ...) 3.2 Vytvořený: Je tu jedna změna oproti funkcím. Musíte public předvytvořit pomocí funkce forward. POZOR: Do forward musíte dát parametry, které chcete použít v public, navíc i ve stejném pořadí. Př.: forward MujPublic(Parametr1, bool:Parametr2, Float:Parametr3, Parametr4[]); public MujPublic(Parametr1, bool:Parametr2, Float:Parametr3, Parametr4[]) { Potom si dáte funkce který chcete, samozřejmě nezapomenout return. No a public máte vytvořený. Ale jak ho vyvoláme? Existuji 3 možnosti. 1) Timer (SetTimer, SetTimerEx) 2) CallLocalFunction (vyvolá public, který MUSÍ být ve stejném scriptu, jako tato funkce) 3) CallRemoteFunction (vyvolá public, který MŮŽE být i v jakémkoli jiném aktivním scriptu na serveru) Tip: Doporučuji si tyto funkce projít na wiki. _____________________________________________________ 4. Podmínky Podmínky, problém mnoha lidí, přitom je to tak jednoduché. Rovnou ukážu příklad. if(Hodnota1 == Hodnota2) { Celá podmínka vlastně znamená: "Pokud je Hodnota1 rovna Hodnota2". Ale teď, jak tam dostaneme ty funkce? Zarolujte si nahoru do kapitoly 2.3. Ano, return nám pomůže, ten nám totiž vrací hodnotu funkce, kterou my potřebujeme do porovnání v podmínce. Můžeme tedy použít: if(IsPlayerAdmin(playerid) == 1) { TIP: " == 1)" můžeme vynechat, když se jedná o podmínky true/false (pravda/nepravda), 1 je totiž standartní hodnota u tohoto typu. A teď jaké máme možnosti. Ukážu zase na příkladu: Pozn.: (X Kč = X/24,59 EUR) "Pokud koupíš 10 rohlíků, musíš zaplatit 20 Kč, nebo pokud koupíš 5 rohlíků, musíš zaplatit 10 Kč." V překladu do pawnerštiny to bude takto: if(Rohliku == 10) { //zaplať 20 Kč } else if(Rohliku == 5) { //zaplať 10 Kč } Co tam dělá to else? No to je to slovíčko nebo. Přece buď si koupím 5 rohlíků, nebo si jich koupím 10. Příjdeš k pokladně, a prodavačka se tě zeptá. "Máte 5 nebo 10 rohlíků?" a nebude se ptát. "Máte 10 rohlíků?" a potom "Máte 5 rohlíků?". Kdyby se takto ptala na vše, tak bych ji musel zabít No to ale není vše. Ještě dáme jeden příklad. "Když nakoupíte za 500 Kč, obdržíte od nás zdarma kopanec do prdele, pokud nakoupít za míň, dostanete 2x nakopáno." Bude to vypadat takto: if(CenaNákupu >= 500) { //Dostal jsi nakopáno do prdele. } //No ale jak to vyřešit teď? Else if by se dalo použít, ale je to zbytečné. uKážu na obrázku. Červená oblast je ta, kterou nám zabírá první podmínka. Zbýva pak už jen ta druhá. Je tedy pro nás výhodnější použít Pouze else (nebo) Celý to bude znít: "Pokud je CenaNákupu větší/rovno 500 (tak se stane to a to...) NEBO (je menší) (tak se stane to a to...)" Celý to tedy bude vypadat takto: if(CenaNakupu >= 500) { //Kopanec } else { //2x Kopanec } Tip: Operátory, které můžete použít, najdete ZDE Uf, teď už se mozek zavařil, psal jsem to totiž podruhý, poprvý mě zradila technika, zrovna když jsem to neměl uloženy. PS: Počítám s tím, že mě někdo vytknete moje nazvosloví, něco jsem prostě nevěděl jak nazvat. Snad jsem tam nic nedosral, psal jsem to rovnou a nečetl jsem to po sobě, kdyby něco pište, opravím. Později sem ještě doplním: for, switch, while, atd. Poděkování: ffredyk - online úprava profesionálního názvosloví (říkal jsem to, že někdo bude to názvosloví kritizovat) :D Link to comment Share on other sites More sharing options...
lhoj 0 Odesláno: 29. Květen, 2011 Share Odesláno: 29. Květen, 2011 good 10/10 btw. tobě se dneska něja líbí psát TuT-y jo a není tohle tady už po 2.? Link to comment Share on other sites More sharing options...
Petr 44 Odesláno: 29. Květen, 2011 Author Share Odesláno: 29. Květen, 2011 good 10/10btw. tobě se dneska něja líbí psát TuT-y jo a není tohle tady už po 2.? Toto byl 1., pak jsem napsal další 2, něják jsem se nudil no Díky za hodnocení Link to comment Share on other sites More sharing options...
Mmartin 0 Odesláno: 30. Květen, 2011 Share Odesláno: 30. Květen, 2011 Necital som to cele, ale... I) Integer (=Celé číslo)II) Float (=Desetinné číslo) III) String (=Textový řetězec) IV) File (=Proměnná pro soubory) je rovnake, ako napisat, ze jedla su: Chlieb, Pecivo, Zakusok a Jablko. Zabudol si na vela podstatnych datovych typov. Link to comment Share on other sites More sharing options...
Petr 44 Odesláno: 30. Květen, 2011 Author Share Odesláno: 30. Květen, 2011 Necital som to cele, ale...I) Integer (=Celé číslo)II) Float (=Desetinné číslo) III) String (=Textový řetězec) IV) File (=Proměnná pro soubory) je rovnake, ako napisat, ze jedla su: Chlieb, Pecivo, Zakusok a Jablko. Zabudol si na vela podstatnych datovych typov. Zkus přečíst nadpis, základy Link to comment Share on other sites More sharing options...
Mmartin 0 Odesláno: 30. Květen, 2011 Share Odesláno: 30. Květen, 2011 Meh, no tak napriklad taky datovy typ boolean je o vela dolezitejsi v zakladoch, ako datovy typ File. Link to comment Share on other sites More sharing options...
Petr 44 Odesláno: 30. Květen, 2011 Author Share Odesláno: 30. Květen, 2011 Meh, no tak napriklad taky datovy typ boolean je o vela dolezitejsi v zakladoch, ako datovy typ File. Já ho tam nedal? A sakra, tak to jo, sry, to jsem zapomněl GJ :thumbup: Link to comment Share on other sites More sharing options...
LonsdalE 0 Odesláno: 7. Červen, 2011 Share Odesláno: 7. Červen, 2011 ":2ziw32sf]Necital som to cele, ale...I) Integer (=Celé číslo)II) Float (=Desetinné číslo) III) String (=Textový řetězec) IV) File (=Proměnná pro soubory) je rovnake, ako napisat, ze jedla su: Chlieb, Pecivo, Zakusok a Jablko. Zabudol si na vela podstatnych datovych typov. Zkus přečíst nadpis, základy mohl by si me priucit osobne treba prez skype "fresse" Link to comment Share on other sites More sharing options...
Guest Odesláno: 7. Červen, 2011 Share Odesláno: 7. Červen, 2011 wow pekne... ps. chýba tam Text3D: Text: A ešte niečo nespomeniem si. BTW mohol si spomenúť ako sa vytvorí vlastný typ premennej npr. new Q:premena; Link to comment Share on other sites More sharing options...
paulie2907 12 Odesláno: 7. Červen, 2011 Share Odesláno: 7. Červen, 2011 Tak se nám hodnota A "uloží", i když už public skončí a poté se načte znovu. Výpis tedy bude: 1,2,3,4,5,6,... static tedy zajistí, že se hodnota uchová. ffredyk: "static je globální proměnná na lokální použití." co to ??? Link to comment Share on other sites More sharing options...
Petr 44 Odesláno: 7. Červen, 2011 Author Share Odesláno: 7. Červen, 2011 Tak se nám hodnota A "uloží", i když už public skončí a poté se načte znovu. Výpis tedy bude: 1,2,3,4,5,6,...static tedy zajistí, že se hodnota uchová. ffredyk: "static je globální proměnná na lokální použití." co to ??? Ale ffredykovi se sem tam nelíbilo moje názvosloví, tak jsem ho ocitoval, než abych si jeho definici přivlastnil _______________ wow pekne... ps. chýba tam Text3D: Text: A ešte niečo nespomeniem si. BTW mohol si spomenúť ako sa vytvorí vlastný typ premennej npr. new Q:premena; Díky, chtěl jsem tam původně dát jenom ty základní, ale když už jsem tam nacpal file, tak tam dodám i tyto, co jsi psal. Link to comment Share on other sites More sharing options...
MajkX 16 Odesláno: 21. Říjen, 2011 Share Odesláno: 21. Říjen, 2011 Později sem ještě doplním: for, switch, while, atd. UZ to bude ? Link to comment Share on other sites More sharing options...
ParadoXX 3 Odesláno: 21. Říjen, 2011 Share Odesláno: 21. Říjen, 2011 tebe musí bolet ruce. Inak hodně dobré :thumbup: Link to comment Share on other sites More sharing options...
ToM 7 Odesláno: 28. Únor, 2012 Share Odesláno: 28. Únor, 2012 Dostal jsi kopanec do prdele :D :D Hodnocení 10/10 dík fakt pomohlo Link to comment Share on other sites More sharing options...
LeeDoriftar 0 Odesláno: 28. Únor, 2012 Share Odesláno: 28. Únor, 2012 Good TuT nováčkům se hodí 1o/1o jestli se smí hodnotit Link to comment Share on other sites More sharing options...
ToM 7 Odesláno: 28. Únor, 2012 Share Odesláno: 28. Únor, 2012 Pro nováčky je problém to číst Asi si mysleli že to bude 1 písmeno a 1 řádek Link to comment Share on other sites More sharing options...
G4NG 1 Odesláno: 28. Únor, 2012 Share Odesláno: 28. Únor, 2012 Prekrásne tak toto ma fascinovalo pak v 2 casti bys mohol rozpisať tie textdrawy dialogy infoboxy ci jak je ta tabulka druha a nejake malickosti este 1o/1o 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