Jump to content

Ulehčení scriptování aneb jak využívat stock


AvestX

Recommended Posts

Zdravím, podobné tuty už tu zhřejmě jsou, ale nevysvětlují jak správně využívat stock a jak si vylehčit tvorbu modu / filterscriptu.

 

Ano, můžete psát přízpěvky typu "Toto tu už je" ale snažím se vysvětlit jak užitečná tato funkce kterou většina začátačeních pawnerů nevyužívá.


 

stock, co si představujeme pod pojmem stock v jazyce pawn? něco jako forward a public, jeden řádek a více funkcí, je to podobné, je to vlastně stejné jako #define takže vám vysvětlím jak stock využívat v praxi...

 

Příklad:

stock HracovoPoziceZ(playerid)
{
new Float:Z;
GetPlayerPos(playerid, -1,-1,Z);
return Z;
}

 

teď máme funkci kterou můžeme využít třeba k zjištění pozice Z, return Z; znamená že funkce vrací desetiné číslo Z, takže třeba

new string[50];
format(string, 50, "vyska souradnice Z na ktere jsi je %f", HracovoPoziceZ(playerid));

pote do textu do ktereho date string vypise text neco ve stylu

vyska souradnice Z na ktere jsi je 0.00

to stejne uz znama funkce Jmeno(playerid), pName(playerid) a podobne take vraci do stringu vase jmeno tedy myslim

stock Jmeno(i)
{
new n[26];
GetPlayerName(playerid, n, sizeof(n));
return n;
}


Dale vyuziti stocku muzeme napriklad aby jste nemuseli psat zdlouhave kody naprikad v prodejne zbrani kde 20x zadavate kontrolu kolik hrac ma penez, text a zbran kterou mu zadate, neni lepsi toto cele vyresit po jednom radku? co myslite? usetrite tim jak cas tak i script bude vypadat lepe, toto udelame takto

stock GivePlayerBuyWeapon(playerid, buymoney, jmenozbrane[], weaponid, weaponammo)
{
new string[256];
if(GetPlayerMoney(playerid) >= buymoney)
{
GivePlayerMoney(playerid, -buymoney);
GivePlayerWeapon(playerid, weaponid, weaponammo);
format(string, sizeof(string), "Zakoupil jste si zbran ''%s'' za %d$ !", jmenozbrane, buymoney);
}else{
format(string, sizeof(string), "Na zakoupeni zbrane ''%s'' potrebujete %d$ !", jmenozbrane, buymoney);
SendClientmessage(playerid, -1, string);
}
return true;
}

 

pak treba v dialogu kterym davate zbrane misto neustaleho opakovani kodu podobneho ve stocku davate pouze

if(dialogid == DIALOG_WEAPON)
{
if(response)
{
switch(listitem)
{
case 0: GivePlayerBuyWeapon(playerid, 270, "Vibrator1", 11, 1);
case 1: GivePlayerBuyWeapon(playerid, 300, "Vibrator2", 12, 1);
case 2: GivePlayerBuyWeapon(playerid, 405, "Vibrator3", 13, 1);
case 3: GivePlayerBuyWeapon(playerid, 560, "Vibrator4", 14, 1);
}
}
}

 

Zamyslete se nad sebou jak budete psat script, jakym zpusobem a jakym stylem ;) obcas stoji za to se nad sebou zamyslet ;)

Link to comment
Share on other sites

Chybí mi tam informace, jaký je rozdíl mezi stock a public. :)

 

A navíc, ne vždy se vyplatí si takto ušetřit práci a použít stock, třeba ten druhý příklad jde udělat daleko lépe, co se týče optimalizace.

Link to comment
Share on other sites

stock se používá většínou když z něčeho potřebuji dostat nějákou hodnotu, jako třeba pName a podobně, public je většínou na větší funkce, (raději ale používám stock) ..

Link to comment
Share on other sites

stock HracovoPoziceZ(playerid)

{

new Float:Z;

GetPlayerPos(playerid, -1,-1,Z);

return Z;

}

 

by malo byť asi

 

stock Float:HracovoPoziceZ(playerid)

{

new Float:Z;

GetPlayerPos(playerid, -1,-1,Z);

return Z;

}

Link to comment
Share on other sites

  • Administrátor

stock Jmeno(i)

{

new n[26];

GetPlayerName(playerid, n, sizeof(n));

return n;

}

 

asi mělo být

 

stock Jmeno(i)

{

new n[26];

GetPlayerName(i, n, sizeof(n));

return n;

}

 

že ? :d

Link to comment
Share on other sites

:d :D

stock HracovoPoziceZ(playerid)

{

new Float:Z;

GetPlayerPos(playerid, -1,-1,Z);

return Z;

}

 

by malo byť asi

 

stock Float:HracovoPoziceZ(playerid)

{

new Float:Z;

GetPlayerPos(playerid, -1,-1,Z);

return Z;

}

stock Jmeno(i)

{

new n[26];

GetPlayerName(playerid, n, sizeof(n));

return n;

}

 

asi mělo být

 

stock Jmeno(i)

{

new n[26];

GetPlayerName(i, n, sizeof(n));

return n;

}

 

že ? :d

mne to pride smiešne ked niekto spravý TUT a smeju sa mu že má zaklad zlý :d ale inak super využijem do GM :d :D

Link to comment
Share on other sites

  • Administrátor
:d :D
stock HracovoPoziceZ(playerid)

{

new Float:Z;

GetPlayerPos(playerid, -1,-1,Z);

return Z;

}

 

by malo byť asi

 

stock Float:HracovoPoziceZ(playerid)

{

new Float:Z;

GetPlayerPos(playerid, -1,-1,Z);

return Z;

}

stock Jmeno(i)

{

new n[26];

GetPlayerName(playerid, n, sizeof(n));

return n;

}

 

asi mělo být

 

stock Jmeno(i)

{

new n[26];

GetPlayerName(i, n, sizeof(n));

return n;

}

 

že ? :d

mne to pride smiešne ked niekto spravý TUT a smeju sa mu že má zaklad zlý :d ale inak super využijem do GM :d :D

Psal to na rychlo holt se stává narozdíl od tebe už toho dokázal v pawn 100x tolik tak si nějakou tu "gramatickou" chybu v kodu může dovolit

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...