1. Opis uzywanych funkcji - opisze funkcje ktore beda nam nie zbedne
Spoiler
a) nvault_open - otwiera ona plik Vault do zapisu danych.
skladnia:
zwraca ona index pliku vault dlatego dobrze jest przypisac wywolanie funkcji do zmiennej globalnej i uzywac funkcji w plugin_init/plugin_cfg/plugin_precache
moze tez zwrocic -1( INVALID_HANDLE) wtedy gdy nie mozna otworzyc/stworzyc pliku Vault
nvault_close - zamyka plik Vault i nie mozemy juz nic z nim zrobic uzywa sie najczesciej w plugin_end
skladnia:
wskaznik to wartosc zwracana przez nvault_open (zmienna do ktorej to przypisalismy)
c) nvault_set - pozwala nam zapisac dane do pliku identyfikatorem danych jest klucz ktory podajemy dlatego musimy zadbac aby dla kazdego wpisu byl inny
skladnia:
d) nvault_get - pozwala nam odczytac z pliku dane wlasciwe dla podanego klucza mozna uzyc przypisujac do zmiennej lub podac jako 3 parametr tablice a jako 4 jej dlugosc wtedy dane zapisane bd w tablicy
skladnia:
e) nvault_remove - usuwa dany klucz z pliku
skladnia:
a) nvault_open - otwiera ona plik Vault do zapisu danych.
skladnia:
Spoiler
nvault_open ( const nazwa[] )
zwraca ona index pliku vault dlatego dobrze jest przypisac wywolanie funkcji do zmiennej globalnej i uzywac funkcji w plugin_init/plugin_cfg/plugin_precache
moze tez zwrocic -1( INVALID_HANDLE) wtedy gdy nie mozna otworzyc/stworzyc pliku Vault
nvault_close - zamyka plik Vault i nie mozemy juz nic z nim zrobic uzywa sie najczesciej w plugin_end
skladnia:
Spoiler
nvault_close ('wskaznik')
wskaznik to wartosc zwracana przez nvault_open (zmienna do ktorej to przypisalismy)
c) nvault_set - pozwala nam zapisac dane do pliku identyfikatorem danych jest klucz ktory podajemy dlatego musimy zadbac aby dla kazdego wpisu byl inny
skladnia:
Spoiler
nvault_set ( wskaznik, const klucz[], const wartosci[] )
d) nvault_get - pozwala nam odczytac z pliku dane wlasciwe dla podanego klucza mozna uzyc przypisujac do zmiennej lub podac jako 3 parametr tablice a jako 4 jej dlugosc wtedy dane zapisane bd w tablicy
skladnia:
Spoiler
nvault_get ( wskaznik, const klucz[], ... )
e) nvault_remove - usuwa dany klucz z pliku
skladnia:
Spoiler
nvault_remove ( wskaznik, const klucz[] )
2. Przykladowe uzycie:
powiedzmy ze do zapisu i odczytu mamy liczbe fragow gracza ktora musi zostac zapisana przy rozlaczeniu i wczytana przy polaczeniu dodatkowo zapisujemy liczbe dead'ow. Przy okazji jest też pokazany sposób zapisania ciągu znaków, w tym przypadku nick gracza.
(wazniejsze linie maja komentarze)
Spoiler
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <fun>
#include <cstrike>
#define PLUGIN "Plugin"
#define VERSION "0.1"
#define AUTHOR "G[o]Q"
new fragi[33] // fragi
new deads[33] // deady
new g_name[33][48]
new plik_vault
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say poka", "pokaz")
plik_vault = nvault_open("fragi") //tutaj podajemy "nazwe" pliku z danymi
if(plik_vault == INVALID_HANDLE)
set_fail_state("Nie moge otworzyc pliku ");
}
public client_authorized(id)
load_frags(id);
public client_disconnect(id) {
save_frags(id)
fragi[id]=0 // zeby ktos kto wejdzie po nas nie mial naszych fragow zapisanych w tablicy
deads[id]=0
copy(g_name[id], 47, "");
// mozna by wyswietlic komunikat ale tylko gdy uzywamy komendy bo inaczej nie dosc ze nic sie nie wyswietli
// to w logach zobaczymy "index out of bound"
}
public plugin_end()
nvault_close(plik_vault)
public pokaz(id) // funkcje nie ustawiaja liczby frags/deads a plugin mial tylko pokazywac dzialanie stad komenda
client_print(id, print_chat, "fragi: %d deady: %d nick: %s", fragi[id], deads[id], g_name[id]);
public load_frags(id)
{
new name[48]
get_user_name(id,name,47)
new vaultkey[64],vaultdata[128]
formatex(vaultkey,63,"%s-fragi",name)
if(nvault_get(plik_vault,vaultkey,vaultdata,127)) { // pobieramy dane
new fragitemp[16], deadstemp[16], nametemp[48];
parse(vaultdata, fragitemp, 15, deadstemp, 15, nametemp, 47) // wydobywamy z ciagu vaultdata nasze dane
fragi[id]=str_to_num(fragitemp) // przypisujemy danym ich wartosci wczytane
deads[id]=str_to_num(deadstemp)
set_user_frags(id,fragi[id])
cs_set_user_deaths ( id, deads[id] )
copy(g_name[id], 47, nametemp);
}
return PLUGIN_CONTINUE
}
public save_frags(id) {
fragi[id]+=get_user_frags(id) // zwiekszamy liczbe fragow i deadow o stan bierzacy
deads[id]+=get_user_deaths(id)
new name[48]
get_user_name(id,name,47)
new vaultkey[64],vaultdata[128] // 2 zmienne na klucz i dane ktore bedziemy zapisywac
formatex(vaultkey,63,"%s-fragi",name) //formatujemy klucz czyli nasz identyfikator dostepu najlepiej zeby roznil sie on 1 czlonem od pozostalych
formatex(vaultdata,127,"%d %d ^"%s^"", fragi[id], deads[id], name) // formatujemy dane
nvault_set(plik_vault,vaultkey,vaultdata) // zapisujemy dane "pod" danym kluczem w pliku
return PLUGIN_CONTINUE
}
Użytkownik sebul edytował ten post 19.05.2012 10:33