Skocz do zawartości
DarkvTen

Zapis wielu zmiennych (nvault)

Rekomendowane odpowiedzi

1. Zmienne
Jeżeli nie wiesz co to są zmienne, zapraszam Tutaj.

2. Zapis nVault
Jeżeli nie wiesz co to jest zapis nvault, zapraszam Tutaj.

3. Tworzenie listy definów.
Jako pierwszy krok do naszego zapisu musimy stworzyć listę definów dla każdej zmiennej. Zmienna w AMXX posiada 32 bity. Jeżeli chcemy przechować np. 60 zmiennych, musimy stowrzyć 2 zmienne lub jedną zmienną 2 wymiarową. Przykładowa lista definów:

/* Definy dla mission_flags_1 */
#define MISSIONFLAG_MA_MISJE (1<<0)
#define MISSIONFLAG_BEDZIE_LEPIEJ (1<<1)
#define MISSIONFLAG_PIERWSZA_KREW (1<<2)
#define MISSIONFLAG_MLODY_NOZOWNIK (1<<3)
#define MISSIONFLAG_GRACZ_ZESPOLOWY (1<<4)
#define MISSIONFLAG_CZAS_NA_PRZYGODE (1<<5)
#define MISSIONFLAG_FRAGI_CZAS_ZACZAC (1<<6)
#define MISSIONFLAG_TRIPPLE_KILL (1<<7)
#define MISSIONFLAG_ZATKALO_KAKAO (1<<8)
#define MISSIONFLAG_NOZ_DO_SMAROWANIA (1<<9)
#define MISSIONFLAG_BRON_DODATKOWA (1<<10)
#define MISSIONFLAG_FRAGI_LECA (1<<11)
#define MISSIONFLAG_JESZCZE_KTOS (1<<12)
#define MISSIONFLAG_TWOJ_PRZYJACIEL_NOZ (1<<13)
#define MISSIONFLAG_TROCHE_TUTAJ_SIEDZE (1<<14)
#define MISSIONFLAG_DLACZEGO_JA (1<<15)
#define MISSIONFLAG_DESZCZ_SMIERCI (1<<16)
#define MISSIONFLAG_JESTEM_NIESMIERTELNY (1<<17)
#define MISSIONFLAG_VETERAN (1<<18)
#define MISSIONFLAG_ZLOTY_MARKER (1<<19)
#define MISSIONFLAG_NA_SZCZYCIE (1<<20)
#define MISSIONFLAG_PROFESJONALNA_ROBOTA (1<<21)
#define MISSIONFLAG_DZIADEK (1<<22)
#define MISSIONFLAG_CZLOWIEK_DEMOLKA (1<<23)
#define MISSIONFLAG_DOBRZE_JEST_MIEC_VIPA (1<<24)
#define MISSIONFLAG_KUCYKOWY_KRYSZTAL (1<<25)
#define MISSIONFLAG_SPEED_ROUND (1<<26)
#define MISSIONFLAG_ZARAZ_WYBUCHNIE (1<<27)
#define MISSIONFLAG_BLOK1 (1<<28)
#define MISSIONFLAG_BLOK2 (1<<29)
#define MISSIONFLAG_BO_WODKE_TRZEBA_PIC (1<<30)
#define MISSIONFLAG_STAN_SIE_BOGIEM (1<<31)
 
/* I dla mission_flags_2 */
#define MISSIONFLAG_BLOK3 (1<<0)
#define MISSIONFLAG_BLOK4 (1<<1)
#define MISSIONFLAG_BLOK5 (1<<2)
#define MISSIONFLAG_BLOK6 (1<<3)
#define MISSIONFLAG_BLOK7 (1<<4)
#define MISSIONFLAG_BLOK8 (1<<5)
#define MISSIONFLAG_BLOK9 (1<<6)
#define MISSIONFLAG_BLOK10 (1<<7)
#define MISSIONFLAG_BLOK11 (1<<8)
#define MISSIONFLAG_BLOK12 (1<<9)
#define MISSIONFLAG_BLOK13 (1<<10)
#define MISSIONFLAG_BLOK14 (1<<11)
#define MISSIONFLAG_BLOK15 (1<<12)
#define MISSIONFLAG_BLOK16 (1<<13)
#define MISSIONFLAG_BLOK17 (1<<14)
#define MISSIONFLAG_BLOK18 (1<<15)
#define MISSIONFLAG_BLOK19 (1<<16)
#define MISSIONFLAG_BLOK20 (1<<17)
#define MISSIONFLAG_BLOK21 (1<<18)
#define MISSIONFLAG_BLOK22 (1<<19)
#define MISSIONFLAG_BLOK23 (1<<20)
#define MISSIONFLAG_BLOK24 (1<<21)
#define MISSIONFLAG_BLOK25 (1<<22)
#define MISSIONFLAG_BLOK26 (1<<23)
#define MISSIONFLAG_BLOK27 (1<<24)
#define MISSIONFLAG_BLOK28 (1<<25)
#define MISSIONFLAG_BLOK29 (1<<26)
#define MISSIONFLAG_NA_ZIELONEJ_LACE (1<<27)
#define MISSIONFLAG_TROJZAB (1<<28)
#define MISSIONFLAG_BLOK30 (1<<29)
#define MISSIONFLAG_BLOK31 (1<<30)
#define MISSIONFLAG_ODBLOKOWAL (1<<31)

4. Tworzenie zmiennych tablicowych.
Jak już wyżej to napisałem, zmiennych tablicowych tworzymy tyle ile potrzebujemy. W moim przypadku będą to 2 zmienne tablicowe.

new mission_flags_1[33];
new mission_flags_2[33];

W tych 2 zmiennych przechowany wartości z wszystkich definów wykonanych w podpunkcie 3.

5. Użycie nowych zmiennych.
Weźmy dla przykładu 

#define MISSIONFLAG_MA_MISJE (1<<0)

i

#define MISSIONFLAG_BLOK3 (1<<0)

By ustawić MISSIONFLAG_MA_MISJE na true, robimy tak:

mission_flags_1[id] |= MISSIONFLAG_MA_MISJE

By ustawić MISSIONFLAG_MA_MISJE na false, robimy tak:

mission_flags_1[id] &= ~MISSIONFLAG_MA_MISJE

Dla MISSIONFLAG_BLOK3 działa to prawie tak samo lecz zamiast mission_flags_1[id] używamy mission_flags_2[id].

By ustawić MISSIONFLAG_BLOK3 na true, robimy tak:

mission_flags_2[id] |= MISSIONFLAG_BLOK3

By ustawić MISSIONFLAG_BLOK3 na false, robimy tak:

mission_flags_2[id] &= ~MISSIONFLAG_BLOK3

W normalnym sprawdzaniu wartości bool'a ma_misje[33] użycie wyglądało by tak:

Przy ma_misje[id] = true

if(ma_misje[id])

Przy ma_misje[id] = false

if(!ma_misje[id])

W normalnym sprawdzaniu wartości bool'a blok3[33] użycie wyglądało by tak:

Przy blok3[id] = true

if(blok3[id])

Przy blok3[id] = false

if(!blok3[id])

Jednak w tym przypadku, sprawdzanie wartości robimy w ten sposób:

Dla mission_flags_1[id] |= MISSIONFLAG_MA_MISJE

if(mission_flags_1[id] & MISSIONFLAG_MA_MISJE)

A dla mission_flags_1[id] &= ~MISSIONFLAG_MA_MISJE

if(!(mission_flags_1[id] & MISSIONFLAG_MA_MISJE))

Dla MISSIONFLAG_BLOK3 używamy mission_flags_2[id].

Dla mission_flags_2[id] |= MISSIONFLAG_BLOK3

if(mission_flags_2[id] & MISSIONFLAG_BLOK3)

A dla mission_flags_2[id] &= ~MISSIONFLAG_BLOK3

if(!(mission_flags_2[id] & MISSIONFLAG_BLOK3))

6. Zapis i odczyt zmiennych.
Na samym początku pluginu dopisujemy następujące:

#include <nvault>

Pierw tworzymy nową zmienną.

new gvault;

Potem, w pluginie musimy 'otworzyć' nasz zapis. Robimy to dopisując do kodu następujące:

public plugin_cfg()
{
     gvault = nvault_open("Zmienne");

     if(gvault == INVALID_HANDLE)
     {
          set_fail_state("Error opening nVault");
     }
}

Zapis i odczyt zmiennych powinny wyglądać TAK.
Oczywiście wywoływanie funkcji zapisz_zmienne(id) i odczytaj_zmienne(id) jest też potrzebne.
Proszę, macie Tutaj przykładowy plugin z taką formą zapisu.

PS: Na serwerach z dużym ruchem i z dużą liczbą zmiennych do napisania nvault, to zło. MySQL sprawdza się lepiej w operowaniu dużą ilością danych.

Copyright © Wszelkie prawa zastrzeżone.

Kopiowanie tego poradnika lub treści w nim zawartych bez wyraźnej zgody autora jest zabronione i będzie ścigane z mocy prawa.

Edytowane przez DarkvTen

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Korzystając z tej strony zgadzasz się na Warunki użytkowania, Polityka prywatności i Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę..