GTA.cz

SA:MP - Pawno - [TUT] Syntax Pawna Roman Lipka | 21.08.2008

mod, ktory sa upravuje v pawne, sa zapne okamzite, ako sa zapne server a bezi vkuse...
Ale mod obsahuje funkcie, ktore sa aktivuju iba raz v urcitom momente (to podla funkcie)
Medzi najznamejsie funkcie patria publicy, ale aj znamy strok je funkcia ale nie je to public, lebo vracia textovu premennu.
Publiky sa definuju cez forward. Napr:
forward OnPlayerConnect(playerid);

Publiky mozu byt zadefinovane v include (teda v suboroch, ktore sa nachadzaju v adresari pawna) > Preto sa nachadza na zaciatku modu riadok:
#include <a_samp>

Tento riadok cerpa definicie z ineho subora a to presnejsie zo subora a_samp.inc . V tomto subore su dalsie riadky prepajajuce mod s inymi include subormi (ako napr. a_objects.inc, a_players.inc, ... )
Aby mod mohol fungovat, musi byt v nom funkcia main() . Je to nieco ako vstupna brana servera pre mod. Funkcia sa aktivuje hned ako sa zapne server.
Funkcie davaju aj informacie (napr. kto ho spustil, ako ho spustil ... )
No niektore nemusia, ako napr. uz spominani main() , ktory medzi zatvorkami nic nema...
Pre priklad jeden public:
public OnPlayerConnect(plyerid)
Tento publik sa aktivuje, ak sa niekto pripoji na server. A mozeme od neho ziskat aj to, kto to bol, teda id hraca, ktory sa pripojil. Toto id mozeme pouzit v tom publiku, ale nemusime.
Tato informacia je v podobe premennej.

PRIKAZY
Prikazy vlastne aktivuju nejaku funkciu, ktora bud vracia informacie spet do prikazu, alebo vykonava nieco na servery. To zavisi podla funkcie. Prikazy ako napr SetPlayerPos aktivuju funkciu, ktoreho definicia sa nenachadza v mode, ale v nejakom include. No moze existovat prikaz napr. OnPlayerConnect(playerid); ktory aktivuje publik OnPlayerConnect, ale nesposobi, aby sa hrac znovu pripojil ...

PREMENNA
odborne:Premenna je logické pamäťové miesto so svojou hodnotou.
Teda premenna je nejake slovo (moze obsahovat aj cisla), ktora ma svoju hodnotu.
Su rozne premenne pre rozne hodnoty. Tymi hodnotami mozu byt texty (resp. stringy), iba priridzene cisla (integer), iba cele cisla, realne cisla (float) alebo aj iba 2 rozne hodnoty (true, false).
Kazda premenna sa musi najprv zadefinovat!
Premenne sa definuju cez new premenna;
Rozne premenne a ich definicie:
new premenna; - vytvori premennu, ktora moze obsahovat celociselne premenne
new premenna[10]; - moze to byt definicia bud radovej premennej, teda 10 celociselnych premennych alebo textova premenna s max 10 znakmi
new Float:premenna; - definicia premennej, ktora moze obsahovat vsetky realne cisla
new Float:premenna[10]; - definicia radovej premennej ( teda 10 premennych, ktore mozu obsahovat realne cisla)
new bool:premenna; - premenna, ktora moze mat iba 2 hodnoty (true, false)
new Text:premenna; - specificka premenna pre TextDrawy
new Menu:premenna; - specificka premenna pre menu
...
POZOR! Nemozu byt zadefinovane 2 rovnake premenne! (Iba ak su zadefinovane v roznych funkciach)

Definuje sa na mieste, kde chceme ju pouzivat.
Ale malo by sa definovat vzdy na zaciatku nejakeho cyklu!
Napr. ak chceme premennu pouzivat v celom mode (v kazdom publicu) zadefinujeme ju na zaciatku modu, vtedy sa premenne vytvory hned pri starte servera a cely cas, kym je zapnuty mod, nestraca svoju hodnotu.
Ak by sme vsak chceli premennu pouzit iba v jednej mnozine napr. v publiku, zadefinovali by sme ju na zaciatku toho publiku. Premenna by sa vytvorila v momente aktivovania publiku (vtedy vsak este nema ziadnu hodnotu - ak sa jedna o ciselnu premennu, tak sa jej hodnota rovna 0). Potom by hodnota ziskavala hodnoty priradovacimi prikazmi a na konci mnoziny premenna zanika.
Hodnotu premennej mozme priradit priradovacim prikazom, ktory ma tvar premenna=hodnota, teda urcitej premennej priradime hodnotu, ktora moze byt tiez v tvare premennej.

Pre priklad vytvorime premennu hrac v publiku OnPlayerConnect:
 
OnPlayerConnect(playerid){
     new hrac; // vytvori premennu hrac ( teraz ma hodnotu 0)
     new string[8]; // vytvori textovu premennu, ktora moze mat maximalne 8 znakov (teraz nema ziadnu hodnotu)
     hrac=playerid; //priradi premennej hrac hodnotu premennej playerid (ak sa pripojil hrac s id 8, tak aj premenna hrac ma                     hodnotu 8)
    GetPlayerName(hrac, string, sizeof(string)); // tento prikaz zisti meno hraca s id hrac (teda z id 8), a toto meno priradi                  premennej string. sizeof(string) je prikaz, ktory zisti maximalny pocet znakov premennej string.
     SendClientMessage( 0xFFFFFFFF, string); // tento prikaz posle spravu s textom z premennej string a s farbou 0xFFFFFFFF
     return 1; // ukoncenie publiku
 } // ukoncenie mnoziny


Priradovacie prikazy sa mozu pouzivat aj v definiciach premennych, napr.

new premenna[2][4] = {
    {15, 24, 32, 40},
    {38, 16, 26, 46}
  };

Toto bolo zadefinovanie 8 premennych s tym, ze okamzite kazda dostala svoju hodnotu.
A pre informaciu napr. premenna[0][0] ma hodnotu 15 a premenna[1][0] hodnotu 38. Premenna premenna[0][4] neexistuje a jej pouzitie by hadzalo error.
Priradovacie prikazy mozu mat aj ine tvary:
premenna+=hodnota; ( teda premenna=premenna+hodnota )
premenna-=hodnota; (teda premenna=premenna-hodnota )
premenna++; (teda premenna=premenna+1; )
premenna--; (teda premenna=-premenna; )

Okrem premennych sa pouzivaju aj KONSTANTY
Konstante sa narozdiel od premennej neda menit hodnota.
Hodnota konstanty moze mat akykolvek tvar (moze mat dokonca aj hodnoty farieb)
Definuje sa cez #define konstanta hodnota , napr:
#define COLOR_RED 0xAA3333AA

Konstanta COLOR_RED ma hodnotu 0xAA3333AA

Mnozinove zatvorky { } sa pouzivaju na ohranicenie bud funkcii, definicii, cyklov, ... Ak by neboli tieto zatvorky, program by nevedel, kde sa konci bud nejaka definicia, alebo prikaz, cyklus, funkcia, ...
(tieto zatvorky sa nemusia davat iba ak by medzi nimi je iba jeden prikaz)
Ak by bolo otvaracich zatvoriek viac ako uzatvaracich, teda napr. publik{ cyklus { prikazy } publiky , program by neukoncil publik a pokladal by ostatne publiky za sucast neukonceneho publicu ...
Ak by bolo uzatvaracich zatvoriek viac ako otvaracich, teda napr. publik{ prikazy } } , program by to zistil a dal by to najavo jednym errorom

PODMIENKY
Ked chceme pouzit prikaz iba za istych okolnosti, pouziva sa na to podmienka, ktora ma tvar if(podmienka){prikazy} else if(podmienka2) { prikazy} else {prikazy} . Avsak nemusi mat taky tvar, moze obsahovat viac "else if" alebo ani jeden "else"
if(premenna==hodnota) print("prikaz1"); else print("prikaz2");

Aj v podmienke sa mozu vykonavat prikazy (napr. prikaz strval(premenna), ktory ma ciselnu hodnotu z textovej premennej).
A podmienka moze mat rozne tvary:
if(premenna==hodnota) teda ak sa hodnota premennej rovna urcitej hodnote
if(premenna>=hodnota) teda ak je hodnota premennej vacsia alebo rovnajuca urc. hodnote
if(premenna<=hodnota) teda ak je hodnota premennej mensia alebo rovnajuca urc. hodnote
if(premenna>hodnota) teda ak je hodnota premennej vacsia ako urc. hodnota
if(premenna<hodnota) teda ak je hodnota premennej mensia ako urc. hodnota
if(premenna!=hodnota) teda ak sa hodnota premennej nerovna urc. hodnote
...
Cykly
Cykly vlastne opakuju urcite prikazy...
Pozname:
cyklus for - s vopred stanovenym poctom opakovania
cyklus while - opakuje prikazy az kym je splnena podmienka

for
Tento cyklus sa dost casto pouziva a ma tento prikladny syntax:
for(new n=0; n<100; n++)

teda najprv vytvori premenny (new n),
priradi jej urcitu hodnotu (n=0),
za ; sa nachadza podmienka, teda pred kazdym opakovanim sa overi, ci je splnena podmienka, ak nie je, opakovanie sa nevykona a ukonci
V tomto pripade je podmienka, aby n bolo mensie ako 100.
Za dalsim ; sa nachadza priradovaci prikaz, ktory sa vykona po kazdom opakovani.
Ak by bolo: for(new n=0; n<1; n++) prikazy za tymto cyklom sa budu iba raz opakovat...

while
Tento cyklus opakuje prikazy iba ak je splnena vopred napisana podmienka. Ma takyto syntax:
while(podmienka) teda napr.

while(premenna<hodnota) premenna++;

teda ak by premenna mala hodnotu 10 a vo while by bola hodnota 15, tedaCyklus by 4 krat opakoval prikazy za nim...
while(10<15) 10=10+1;

Cykly sa mozu aj prikazom ukoncit, resp. s prikazom break;


Mnoziny, teda funkcie, cykly ... by mali mat takuto postupnost:
OD VRCHU NA SPODOK:
DEKLARACNA CAST (cast, kde sa vsetko definuje)
#include ...
teda spojenie modu s include subormi (toto sa definuje iba na zaciatku modu)
#define ...
teda definicie konstant
new ...
teda definicie premennych
PRIKAZOVA CAST
Sem patria bud prikazy alebo funkcie
By t_Mc]Virus

vyhledávání

reklama

anketa

editorial

Máme tu nějaký ten pátek rok 2022 a s ním i velkou šanci, že se ani v tomto roce se nedočkáme oznámení GTA 6. Místo toho jsme však dostali remastery tří klasických a ikonických dílů série GTA. Je pravda, že neměli nejlepší start, ale dejte jim šanci. Vyzkoušejte si hry osobně a zkuste je. Ten návrat sice není dechberoucí, k tomu ještě nějaký ten rok vývoje chyběl, možná i jiný výběr studia, ale i tak je to příjemný nostalgický návrat, který alespoň ty původní tituly nezničil. Ohodnotit hry už musíte spíš vy sami - každý z vás. A pořád je tu jedna jistota - třeba stále dobré GTA Online. :)

Šéfredaktor

návštěvnost

odkazy

naše ikona

GTA.cz

partneři


Online hokej manažer - Zahraj si skutečný hokejový manažer!
3D wide HD wallpapers tapety na plochu

Vyťukej.cz

Zobrazit vše

Zahrajte si hry online hned teď!

© 2005 - 2022  Honza Svatoš & Scorpions.cz | XHTML & CSS:  Ondřej Mirtes | Design:  Paľo Delinčák | Ochrana osobních údajů | Nastavení cookies