[Pawn] Ale správne!

Místo na přidávání vašich návodů.
Odpovědět
Uživatelský avatar
Escanor
Příspěvky: 16
Registrován: 17 zář 2019 21:52

[Pawn] Ale správne!

Příspěvek od Escanor » 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:

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;

*/
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:

Kód: Vybrat vše

//Priklad s jailbreak modu
new MaMotorovku[33];
new MaDildo[33];
new MaMacetu[33];
// A takto to ide do nekonecna
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:

Kód: Vybrat vše

new Nozik[33];
Následovne do kódu ktorý mení nožík hráčovi (dáva machetu, motorovku alebo tak), dáte iba:

Kód: Vybrat vše

Nozik[id] = 0; // normalny nozik bez skinu
 Nozik[id] = 1; // Da hracovi Motorovku
 
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:

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;
}
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:

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;
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:

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!
	}
Ale v niektorých prípadoch to nie je v poriadku, takže sa to neodporúča robiť.

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.*/
String: v podstate text.

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");
Funkcie:

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;
}
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. ;)

Odpovědět