Jump to content

Search the Community

Showing results for tags 'stock'.

  • 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

Found 3 results

  1. 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ý.
  2. Zdravím chtěl bych se zeptat na pár informací ohledně stocku ukladaní vozidel..... Zkusím to popsat tak aby to bylo dobře k pochopení a zkusím popsat tak aby šlo vědet co přesně potřebuji Za gramatiku omlouvám se předem Takže co potřebuji ? Udělat ukladaní vozidel pomocí 3 stocku Ještě chci říct:Hledal jsem tutoriali a našel jsem,Ale uplně jsem to nepochopil. A možná to bylo tím že tam bylo příliš stocku a měl jsem vtom zmatek. Vím že asi lepším pawnerům ukladaní auta a ukladaní hračů muže přijít stejné ale já to prostě nepobírám jde oto že hráče zvládám ale když mám vytvořit složku z autem ve Scriptfilles je horší. Pro mě je to ale horší Zde popis něčeho co bych asi udělal ale mám vtom zmatek Dejme tomu že dělám přes YSI enum CInfo autoid, vehX, vehY, vehZ, Angle, Barva1, Barva2, Majitel, Respawn } new CarInfo[MAX_PLAYERS][CInfo]; Jak se dostanu do Stocku dostávám zmatek u autech Definace #define AUTA_PATH "Auta/%s.ini" Jak dojde na stocku u aut jsem zmaten a začínám vytvářet asi blbosti Toto mě už přijde jako blbost ( Nemyslím stock ale jak jsem to zepsal) stock CarPath(playerid) { new string[128],vehiclename[MAX_PLAYER_NAME]; GetPlayerName(playerid,playername,sizeof(vehiclename)); format(string,sizeof(string),AUTO_PATH,vehiclename); return string; } Tady vůbec Stock MojeAuto(autoid,vehX,vehY,vehZ,Angle,Barva1,Barva2,Majitel,Respawn) { CarInfo[vehicleid] a něco dál return 0; } Možná že bych tenhle Stock nahradil Pathem new Float: VehX[ MAX_PLAYERS ], (Tady jsem uvažoval o MAX_VEHICLES ale u těch aut fakt netuším) Float: VehY[ MAX_PLAYERS ], Float: VehZ[ MAX_PLAYERS ], Float: VehAngle[ MAX_PLAYERS ]; forward Auta_data(playerid,name[],value[]);public Auta_data(playerid,name[],value[]) { /////////////////////////////////////////// INI_Float( "VehX", VehX[ vehicleid ] ); INI_Float( "VehY", VehY[ vehicleid ] ); INI_Float( "VehZ", VehZ[ vehicleid ] ); INI_Float( "VehAngle", VehAngle[ vehicleid ] ); INI_Int("Barva1",CarInfo[vehicleid][Barva1]); INI_Int("Barva2",CarInfo[vehicleid][Barva2]); INI_Int("Majitel",CarInfo[vehicleid][Majitel); INI_Int("Respawn",CarInfo[vehicleid][Respawn]); return 1; } Stocky Uložení a Načtení auta vůbec nečekejte Prostě co potřebuji nějaký help v oblasti ukladaní pozic aut do ScriptFilles Počítám stím že dostanu 50 odkazů. Ale jak jsem již zminoval já hledal,Našel,Nepochopil,Všude spoustu stocku a zkouším to usnadnit Děkuji za Podporu,Help,Komentáře,Rady,Urážky,Ponížení,Strapnení Přeji Pěkný Večer PS:Ty Code jsem zepsal ted na pawnu takže chyby jsem podle pawna nijak neupravil a ty drobnosti bych opravil na pohodu tady mě jde čistě o Stocky Děkuji moc //Edit- Ještě pro Info : Potřebuji vytvořit stocky na ukladaní
  3. Mám problém s vyvoláním stocku HideInfo. Při zadání ShowInfo(playerid,"Ahoj",7); se mi zpráva zobrazí ale již nezmizí. Přidal jsem si tam SCMTA a zjistil jsem ze stock HideInfo se nevyvolal. Nevíte v čem je chyba? stock ShowInfo(playerid, text[], time=5) { TextDrawShowForPlayer(playerid, Textdraw[playerid][sub]); TextDrawSetString(Textdraw[playerid][sub], text); SetTimerEx("HideInfo", 1000*time, 0, "i", playerid); return 0; } stock HideInfo(playerid){ TextDrawHideForPlayer(playerid, Textdraw[playerid][sub]); return 1; }
×
×
  • Create New...