[Pawn] Ale správne!
Napsal: 28 dub 2020 17:28
Ahoj. Keby tu je niekto kto si chce urobiť plugin na CS 1.6 (nie som pawner, ale sourcepawner na ktorý výjde tiež tutoríal). Tak vám ukážem ako na to správne, bez toho aby váš plugin bol neoptimalizovatelný trash.
Komentáre:
Komentáre compiler ignoruje. Všetko čo ide za // je ignorované, ale to čo je pred // nie. Viac riadkový komentár ten ignoruje všetko čo je za /* a pred */.
deklerácia premenných ako na to správne?
Takto nie:
Zbytočné, a server zaťažujúce.
Ako na to správne?
Väčšinou keď kódujete plugin pre seba dá sa to spraviť takto:
Následovne do kódu ktorý mení nožík hráčovi (dáva machetu, motorovku alebo tak), dáte iba:
A tak dookola. Namiesto 238743748 premenných máme jednu ktorá funguje ako má. Ale po čase je možné sa stratiť v takómto kóde.
Preto sú tu define ktoré dáte na začiatok pluginu pod #include.
Napríklad:
Takýto kód šetri server najviac, a je dokonca čitaťelný. Prečo? Define neostávaju v plugine. Namiesto toho compilátor nahradí daný define tým čo je vedla neho, čiže keď dáme NOZIK_MOTOROVKA tak compiler to automaticky nahradí 1.
Typy premenných:
Tu je ale problém, je možné porovnať číslo s floatom, ale dostanete varovanie od pawn compileru ktoré sa volá: Tag Mismatch.
V niektorých prípadoch je to v poriadku ako napríklad tu:
Ale v niektorých prípadoch to nie je v poriadku, takže sa to neodporúča robiť.
String: v podstate text.
Funkcie:
funkciu test() sme nevyužili, takže sa nepridá do našeho pluginu.
V ďalšiom tutoríaly vysvetlím native a forward, a naučím vás ako urobiť vlastný ban systém. Toto by malo byť všetko na to aby ste mohli začať pawnovať správne.
Komentáre:
Kód: Vybrat vše
// jedno riadkový.
new A = 5; //toto je číslo 5 v premennej A
/*
Viac riadkový
Takto uložíte číslo 5 v premennej A: new A = 5;
*/
deklerácia premenných ako na to správne?
Takto nie:
Kód: Vybrat vše
//Priklad s jailbreak modu
new MaMotorovku[33];
new MaDildo[33];
new MaMacetu[33];
// A takto to ide do nekonecna
Ako na to správne?
Väčšinou keď kódujete plugin pre seba dá sa to spraviť takto:
Kód: Vybrat vše
new Nozik[33];
Kód: Vybrat vše
Nozik[id] = 0; // normalny nozik bez skinu
Nozik[id] = 1; // Da hracovi Motorovku
Preto sú tu define ktoré dáte na začiatok pluginu pod #include.
Napríklad:
Kód: Vybrat vše
#include <amxmodx>
#include <amxmisc>
#define NOZIK_NORMAL 0
#define NOZIK_MOTOROVKA 1
#define NOZIK_MACHETA 2
new Nozik[33];
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
}
public dajMotorovku(id) {
Nozik[id] = NOZIK_MOTOROVKA;
}
public dajMachetu(id) {
Nozik[id] = NOZIK_MACHETA;
}
Typy premenných:
Kód: Vybrat vše
//integer vytvoríme takto new menočísla = čislo
new A = 555;
//float Umožnuje uložiť číslo s decimálnym miestom napríklad 1.5. Float sa ale vytvára inak ako normálne číslo. new Float:menofloatu = čísla
new Float:A = 555.4474;
V niektorých prípadoch je to v poriadku ako napríklad tu:
Kód: Vybrat vše
//toto je validný, a funkčný kód.
new Float:testFloat = 444;
new testInteger = 444;
if(testInteger == testFloat) {
// cislo a float su rovnake!
}
Kód: Vybrat vše
//Ďalšia premenná je boolean, ta je podstate iba true false, v podstate to je ako 0 a 1. new bool: menoboolu = True alebo false.
new bool: test = false;
public urobTestTrue() {
test = true;
}
Kód: Vybrat vše
/*
Ako ďalšie tu máme array. V podstate zoskupenie je to to isté čo sme urobili z Nozik[33].
To je array, pretože nožík dokáže mať u seba až 33 premenných.
Pretože sme dali k nožíku Nozik[id], id je vždy iba číslo do 32 (pre hráčov na serveri), to znamená že Nozik[cislohraca] = NOZIK_MOTOROVKA.*/
Kód: Vybrat vše
// tu existuje viacej možností. Buď takto:
new String:mojString[] = "Teeext" // v tomto prípade zistí compiler velikosť textu.
// alebo takto:
new mojString[velikostTextu];
new mojString[6];
// potom to mozeme urobit ako s Nozikom:
mojString[0] = 'T'
mojString[1] = 'e'
mojString[2] = 'e'
mojString[3] = 'e'
mojString[4] = 'x'
mojString[5] = 't'
// Alebo takto:
//copy(mojString, VELIKOST,TEXT)
copy(mojString, sizeof(mojString), "Teeext");
Kód: Vybrat vše
//MenoFunkcie(parametre) docela jednoduché.
//ale, ešte tu je niečo lepšie a to je stock.
//Napríklad:
/*Stock funkcie sú funkcie ktoré sa nescompilujú pokial ich nevyužijete.
Napríklad:
[code]
public ddd() {
new testI = 1;
new Float:testF = 1.5;
}
stock test(testInt, Float:testFloat) {
testInt += testFloat;
}
V ďalšiom tutoríaly vysvetlím native a forward, a naučím vás ako urobiť vlastný ban systém. Toto by malo byť všetko na to aby ste mohli začať pawnovať správne.