#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 wyprintowane
zmienna 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