#include <amxmodx>
#include <amxmisc>
#define PLUGIN "static"
#define VERSION "1.0"
#define AUTHOR "grankee"
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
jedynka()
dwojka()
jedynka()
jedynka()
dwojka()
dwojka()
}
public jedynka()
{
static liczba //domyślnie zmienna statyczna zawsze przyjmuje wartość początkową 0
liczba=liczba+2
client_print(1,print_chat,"zmienna liczba z funkcji jedynka ma wartosc:%d",liczba)
}
public dwojka()
{
static liczba2
liczba2++
client_print(1,print_chat,"zmienna liczba z funkcji dwojka ma wartosc:%d",liczba2)
}
w rezultacie graczowi o id=1 zostanie wyprintowanezmienna liczba z funkcji jedynka ma wartosc:2 zmienna liczba z funkcji dwojka ma wartosc:1 zmienna liczba z funkcji jedynka ma wartosc:4 zmienna liczba z funkcji jedynka ma wartosc:6 zmienna liczba z funkcji dwojka ma wartosc:2 zmienna liczba z funkcji dwojka ma wartosc:3
Jak zapewne zauważyliście "przydomek" static sprawia, że zmienna zadeklarowana wewnątrz funkcji mimo iż jest lokalna nie przestaje istnieć w momencie gdy kończy się jej zakres ważności.
Czyli z polskiego na nasze to będzie tak: po każdym wykonaniu się funkcji wartość zmiennej zadeklarowanej jako static zostaje zamrożona, aż do momentu kolejnego wykonania tej funkcji, wtedy jest odmrażana i ma taką wartość jak miała w momencie zamrożenia.
W tym miejscu przypominam, że pluginy ładowane są co mapę i aby zachować wartość zmiennej na następną mapę niezbędny jest zapis do pliku.
Zmienna globalna jest widziana przez cały czas wykonywania kodu, jednak widziana w każdym miejscu programu co często jest zbędne, dlatego jeśli chcemy zmienną widzieć tylko w danym zakresie kodu, ale tak by przy następnym wykonywaniu go zmienna "wiedziała" jaką ostatnio miała wartość i takową posiadała to używamy zmiennej static.
Użytkownik grankee edytował ten post 02.05.2010 22:44


Dodatki SourceMod













