Ezt az egyszerûsítést a properties funkciók leírásában (
http://wiki.sa-mp.com/wiki/Function:setproperty) találkoztam, nem tudom hogy nevezik ezt valójában, még a Pawn útmutatójában sem találtam ehhez hasonlót sem, így most \"paramatéter lépkedésnek\" neveztem. Bizonyára vannak rajtam kívül itt olyan szkripterek akik tudnak errõl.
Szóval a \"paraméter lépkedés\" lehetõvé teszi hogy egy értékkel ellátott funkció paramétereket átugorhasd, anélkül hogy ismét megadnád azt az értéket, ami már jelenleg meg van adva. Argomentumok esetén ez a módszer nem mûködik.
Hogyan is néz ki ez a Pawnban?
Funkció_neve(.paraméter_neve = szám) // egész számok esetén
Funkció_neve(.paraméter_neve = \"szöveg\") // karakterlánc esetén
Funkció_neve(.paraméter_neve = \'karakter\') // karakter esetén
Funkció_neve(.paraméter_neve = true/false) // logikai esetén
Itt egy példa:
#include a_samp
public OnPlayerConnect(playerid)
{
// Mindig megszoktuk adni a szín paraméter értékét mivel ha kihagyjuk, akkor a fordító azt hiszi hogy egy
// karakterláncot próbálsz rásózni színnek, ezért error 035-ös hibát ír.
/*Hibás*/ SendPlayerMessage(playerid, \"Üdvözlünk a szerveren!\"); // error 035: argument type mismatch (argument 2)
/*Helyes*/ SendPlayerMessage(playerid, 0xFFFFFFFF, \"Üdvözlünk a szerveren!\"); // Nincs hiba
// Ha nem akarjuk a fehér színt (0xFFFFFFFF) módosítani, akkor ezt mi átléphetjük így
SendPlayerMessage(playerid, .message = \"Üdvözlünk a szerveren!\"); // Nincs hiba
// Mivel ismerjük a funkció paraméter neveit (playerid, color, message), így akár rendezve vagy rendezetlenül
// is hagyhatjuk. Ezt a fordító figyelmen kívül hagyja, mivel definiáltad a paraméter nevét, amihez értéket adtál.
SendPlayerMessage(.message = \"Üdvözlünk a szerveren!\", .playerid = playerid, .color = 0xFF0000FF); // Nincs hiba
return 1;
}
// Sajnos ez SendClientMessage funkció esetén nem mûködik mivel, a color paraméternek nincs értéke,
// ezért \"warning 202: number of arguments does not match definition\" figyelmeztetést kapunk,
// így mi létrehozunk egy picit a funkciót, vagyis adunk a color paraméternek egy szín értéket.
stock SendPlayerMessage(playerid, color = 0xFFFFFFFF, message[])
{
SendClientMessage(playerid, color, message);
// Egyéb funkció
return 1;
}
// Gondolom mindenki ismeri a CreatePlayerObject funkció végén a DrawDistance paramétert, aminek az értéke 0.0.
// Ezt az paramétert szintén elhagyhatod, mivel nincs utána már paraméter, tehát a fordító figyelmen kívül hagyja.
// CreatePlayerObject paraméteri:
// playerid, modelid, X, Y, Z, rX, rY, rZ, DrawDistance = 0.0
CreatePlayerObject(playerid, 740, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); // Mûködik
// Mivel a DrawDistance paraméternek 0.0 az értéke és nem szeretnén módosítani, akkor elhagyhatjuk.
CreatePlayerObject(playerid, 740, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); // Mûködik
// \"Paraméter lépkedés\" segítségével a DrawDistance paramétert bárhová helyezhetjük.
// Módosítsuk a DrawDistance paraméter értékét 0.0-ról 300.0-ra.
// playerid, modelid, DrawDistance, X, Y, Z, rX, rY, rZ,
CreatePlayerObject(playerid, 740, .DrawDistance = 300.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); // Helytelen
// Ám, a fordító \"error 044: positional parameters must precede all named parameters\"
// hibát észlel, mert nem tudja mihöz kösse a további funkcióit. Tehát definiálnunk kell a DrawDistance utáni paraméter párjait.
// playerid, modelid, DrawDistance, X, Y, Z, rX, rY, rZ,
CreatePlayerObject(playerid, 740, .DrawDistance = 300.0, .X = 0.0, .Y = 0.0, .Z = 0.0, .rX = 0.0, .rY = 0.0, .rZ = 0.0); // Helyes