Jump to content

Statická premenná + AFK


MartinHavo

Recommended Posts

Zdravím ciciny a cicinky :hallo: , keďže v pawne nie som zlý tak som sa rozhodol spraviť svoj 1. tutoriál a to špeciálne na statické premennú.

 

Static


 

v pawn sa zapisuje ako:

static [nazov premennej];

napr.

static afk;

 

 

A určite sa pýtate načo je dobrá statická premenná? Ukážem vám na nasledujúcom príklade rozdiel medzi lokálnou premennou a statickou

 

Lokálna premenná


forward test(); // Toto je forward pokial o ňom neviete doporučujem si pozrieť tutorial o ňom... ak neexsituje tak spravím 

main()
{
    print(pustíme si SA:MP server a uvidíme čo sa stane);
    test(); // Pustíme su našu novú funkciu
    //Teraz sa nám na obrazovku vytlačilo "Hodnota lokálne premennej 1"
    //Znova pustíme funkciu TEST
    test();
    //Znova nám vytlači "Hodnota lokálne premennej 1"
}
test() // Naša funkcia
{
   new i;
   i++;
   printf("Hodnota lokálne premennej %i ", i);
   return 1;
}

 

Ok tak sme zistili že hodnota lokálnej premennej sa nezachová... Teraz si vyskúšame statickú premennú.

 

 

Statická premenná


forward test();

main()
{
    print(pustíme si SA:MP server a uvidíme čo sa stane);
    test(); // Pustíme su našu novú funkciu
    //Teraz sa nám na obrazovku vytlačilo "Hodnota lokálne premennej 1"
    //Znova pustíme funkciu TEST
    test();
    //Znova nám vytlači "Hodnota lokálne premennej 2"
}
test() // Naša funkcia
{
   static i;
   i++;
   printf("Hodnota lokálne premennej %i ", i);
   return 1;
}

 

Ako ste mohli vidieť hodnota premennej vo funkcii test sa zachováva! Takže ak budeme viac krát púštať "test" tak hodnota premennej i sa bude neustále zväčšovať pokial nedosiahne premenná svoju najvyššiu hodnotu ;)

 

Využitie


Samozrejme že táto premenná má veľa výhod. Ja ju využívam hlavne preto aby som zábraňoval veľkému množstvu globálnych premien :hehe:

 

Tak teraz vám ukážem využitie :oboci:

 

public OnPlayerCommandText(playerid, cmdtext[])
{
   if(strcmp(cmdtext, "/afk", true))
   {
       static bool:afk[MAX_PLAYERS];
       if(afk[playerid] == true)
       {
            TogglePlayerControllable(playerid,1);
            new string[64];
            format(string,64,"Hráč %s je späť v hre", PlayerName(playerid) );
            SendClientMessageToAll(playerid, 0xFFFFFFFF, string);
            afk[playerid] = false;
       }else{
            TogglePlayerControllable(playerid,0);
            new string[64];
            format(string,64,"Hráč %s je AFK", PlayerName(playerid) );
            SendClientMessageToAll(playerid, 0xFFFFFFFF, string);
            afk[playerid] = true;
       }
       return 1;
   }
   return 0;
}

 

Tu máte jedno z mála využití... a ešte vám sem hodím stock ktorý treba:

stock PlayerName(playerid)
{
  new j[20];
  GetPlayerName(playerid, j, 20);
  return j;
}

 

Poznámky


Statická premenná sa dá využiť ako globálna ale mne príjde ako zbytočná a navyše sa správa takmer isto ako globálna ak keby ste chceli niečo vedieť tak klik [url = http://wiki.sa-mp.com/wiki/Scripting_Ba ... bal_static]sem[/url].

 

Statická premenná sa dá využiť aj v cykloch a všade na miesto obyčajných lokálnych kde chcete aby premenná nestratiloa hodnotu...

Statické premenné môžu mať polia a môžu byť aj iné typy: float,bool...

 

Zhrnutie


Odkazy priamo na statické premenné ale ako som písal preferujem len lokálnu statickú premennú.

http://wiki.sa-mp.com/wiki/Scripting_Basics#global_static

http://wiki.sa-mp.com/wiki/Scripting_Basics#static_local

 

Lokálná premenná stráca svojú hodnotu akonáhle skončí daná funckia alebo cyklus a iné veci... Preto je dobré využívať statickú premennú pre jej vlastnosť že po skončení funkcie alebo smyčky/cykla zachováva hodnotu. Statická premenná môže mať polia a aj dátovy typ :v:

 

Ak máte nejaké dotazy rád vam nanich odpoviem a nezabudnite ohodnotiť tutoriál...

Ďaľší tutoriál bude na odkazovač :d

 

AK NÁJDETE HRÚBKY UPOZORNITE MA!

 

Arigato!

Link to comment
Share on other sites

Pekné ;) Prvý tut ktorý som si prečítal celý! Teda okrem TuTu vytvárame includ :d

1o/1o.. dal si do mna trochu viacej vedomostí s pawn.. Takže statická premenná aj po vypnutí serveru ostane taká aka bola naposledy? :)

Link to comment
Share on other sites

ja radšej normálnu globálnu ako globálnu, ktorá sa tvári ako lokálna :) mám rád tie premeny hore aby som ich hneď našiel a nehľadal po celom móde :d

 

ale nevýhoda je toho že ak máš moc veľa globálnych a často s nimi pracuješ tak sa ti stane že niekedy nevieš prečo sa ti premenná mení a máš v tom neporiadok :d

 

btw. choď na Facebook nemám k dispozici skype :d

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...