Funkcije su moćni mali alati koji omogućuju premjeÅ¡tanje velikih ponovljenih bitova koda iz glavnog bloka, Å¡to olakÅ¡ava ureÄ'ivanje neÄega Å¡to se koristi na viÅ¡e mjesta.
Stock
Modifikator funkcije "Stock" oznaÄava zastavicu koja kaže compiler da ignorira funkciju ili varijablu oznaÄenu s "stocks" u vrijeme sastavljanja, ako se ne koristi. To znaÄi da kompilirani kod neće imati neiskoriÅ¡tene podatke, a time i manje prostora na disku i memoriji. Ipak, mora se primijetiti da obiÄno nema potrebe deklarirati funkciju kao zaliha unutar gamemode ili filtercript. Najvjerojatnije ćete ionako htjeti koristiti tu funkciju, a prevodilac će izdati praktiÄan upozorenje u sluÄaju da ga zaboravite koristiti.
Prilikom sastavljanja skripte samo su funkcije stock koje upotrebljavate u skripti spremljene, a sve Å¡to ne ukljuÄite ne prikazuju se u sastavljenom ".amx", Äime se povećava uÄinkovitost na jedan ili drugi naÄin. Na primjer, ako imate funkciju stock koja je dala igraÄu vozilo, ali ga nikada ne upotrebljavate, kada idete na sastavljanje prevoditelja, ne bi se smetalo Å¡to je ukljuÄeno. To ga Äini povoljnim da imaju velike knjižnice zaliha pohranjene u, jer skripta će samo "extract" one koje zahtijeva kod sastavljanja.
Primjeri
Neke uobiÄajene funkcije ukljuÄuju:
PlayerToPoint (Obustavljen. Umjesto toga koristite IsPlayerInRangeOfPoint).
Strtok (zastario, umjesto toga pogledajte sscanf).
IsNumeric
ReturnUser (zastario, još jednom pogledaj sscanf).
Funkcije mogu biti bilo koje duljine, od manjeg isjeÄka do velikog dijela koda s viÅ¡e if / case izjava i drugih funkcija unutar njih. Ako želite, možete "nest" ili aktivirati funkcije unutar neke funkcije.
U nastavku su navedeni primjeri funkcija zaliha koji se koriste za spremanje zdravlja igraÄa na Float.
[pawn]stock Health(playerid)
{
new Float:HP;
GetPlayerHealth(playerid, HP);
return _:HP;
}
stock Float:Health(playerid)
{
new Float:HP;
GetPlayerHealth(playerid, HP);
return HP;
}[/pawn]
Stvaranje i korištenje
Zalihe funkcije, kao i kod normalnih funkcija, mogu imati brojne ulaze, ukljuÄujući nizove, cijele brojeve i plutaÄe. Moraju se ispravno uputiti i na zaglavlju zaliha.
parametri:
Vrste ()
Niz Upućivanje na niz koristite "stringname []"
Integer Da biste upotrijebili cijeli broj, jednostavno unesite varijablu koju želite koristiti "broj"
Float Za plutaÄe koristite "Float: name"
Postoji mnogo više vrsta koje se ovdje mogu koristiti (i u svim drugim funkcijama).
Evo primjera zaglavlja koja koristi sva tri:
[pawn]stock Lol(string[], count, Float:cord)
{
printf("%s, %d, %f", string, count, cord);
}[/pawn]
Vraćanje višestrukih vrijednosti
Ponekad s funkcijama, ne želite vratiti ni jednu vrijednost, ali postavite više varijabli. Na primjer, GetXYInFrontOfPlayer vraća X i Y vrijednosti, što možda nije jednostavno pomoću povratka;
NajlakÅ¡i naÄin da to uÄinite bez upotrebe globalnih varijabli jest uporaba simbola "&".
Primjer u nastavku prikazuje primjenu i upotreba.
[pawn]GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
{
new Float:a;
GetPlayerPos(playerid, x, y, a);
GetPlayerFacingAngle(playerid, a);
if (GetPlayerVehicleID(playerid))
{
GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
}
x += (distance * floatsin(-a, degrees));
y += (distance * floatcos(-a, degrees));
}[/pawn]
GetVehicleZAngle (GetPlayerVehicleID (playerid), a);
}
x + = (udaljenost * floatsin (-a, stupnjevi));
y + = (udaljenost * floatcos (-a, stupnjevi));
}
Da biste koristili ovu skriptu, trebali biste:
novi Float: x, Float: y, Float: z;
GetPlayerPos (playerid, x, y, z);
GetXYInFrontOfPlayer (playerid, x, y, 5,0);
SetPlayerPos (playerid, x, y, z);
Unosi oznaÄeni s "&" su mjesta na kojima će vrijednosti biti poslane nakon izvrÅ¡enja skripte.
Opcionalni ulazi
Ponekad vam svibanj želite dio zaliha gdje kao i drugi puta nećete htjeti ukljuÄiti. Kada se to dogodi, možete postaviti zadanu vrijednost za varijablu tako da igraÄ ne dobije pogreÅ¡ke koje tvrde da nemaju toÄan broj argumenata.
[pawn]stock Freeze(playerid,on=0)
{
switch(on)
{
case 0: TogglePlayerControllable(playerid,0);
case 1: TogglePlayerControllable(playerid,1);
}
}[/pawn]
Ovaj je primjer priliÄno besmislen jer ne dodaje dodatnu funkcionalnost, ali pokazuje dodatne inpute. Za zamrzavanje igraÄa, možete koristiti:
Freeze(playerid);
Freeze(playerid, 0);
Ali da se oslobodite igraÄa kojeg morate koristiti
Freeze(playerid, 1);
Kada koristite dionicu bez da unesete vrijednost za "na", dionice automatski koriste vrijednost 0. Ako dajete vrijednost za, upotrijebit će onaj koji ga dajete.
U nastavku se koristi booleovska varijabla (slaba oznaka) za implementaciju istog.
[pawn]stock ToggleFreezeStatus(playerid, bool: freeze = false)
{
TogglePlayerControllable(playerid, freeze);
}[/pawn]
Može se koristiti na isti naÄin kao Å¡to je prikazano, s T / F vrijednostima.
Eto jos jedan tutorijal.Samo da napomenem da sam samo preveo tutorijal sa engleskog na nas jezik.Nadam se da ce nekome pomoci.Uzivajte :D
novi Float: x, Float: y, Float: z;
->
new Float: x, Float: y, Float: z;
XD