Salut, am hotarat sa fac si ceva pentru aceasta comunitate, si cum nu
gasesti nicaieri tutorial bine facut si tradus in romana despre
nvault m-am gandit sa fac eu unul.
Nvault poate fi folosit la salvare, puteti salva "cuvinte" numere(
1,2 , ) bla bla, orice informatie va doriti.
Prima , inainte sa intru in coding mi-as dori foarte mult sa va spun
cateva informatii care va trebuie.
# 1 : Toate informatiile sunt salvate in fisiere de tip .vault care sunt private, nu aveti nevoie de prefix-uri gen prefix_name, bla bla, va complicati aiurea, puteti pune direct Numele si Data pe care vreti sa o salvati.
# 2 : Toate fisiierele care le faceti le puteti gasi in
amxmodx/data/vault .
# 3 : Ca sa deschizi un fisier vault e imposibil cu notepad, iti
trebuie Nvault Editor, daca vrei sa inveti cum se foloseste va
trebui sa deschizi DES fisierele de tip nvault, cea ce inseamna ca
eu iti recomand sa-l downloandezi: ( De aici
https://forums.alliedmods.net/showthread.php?t=66657 ).
# 4: Nvault vine de la NEW VAULT, pentru ca include-ul Vault.inc a fost primul :D si acuma e nvault.inc (new vault).
# 5 : In Nvault, systemul salveaza dupa o schita de genul
"Keya" "Data" "timestamp"
Ca sa faci o functie de genul LoadXP sau nu stiu ce ... va trebui sa cauti in fisierul vault acea 'keye' si astfel vei putea extrage "data"
Deci nu uitati, "Key" "Data" , cautam keya si extragem Data!
Uitati si o imagine din nvault editor:
Ps.: ar fi mult mai usor pentru voi daca ati vedea key-le si datele salvate/facute de voi.
Acum sa incepem coding-ul.
Va voi arata cum sa faceti pas cu pas un plugin care salveaza punctele, nu voi intra prea complex in plugin, voi crea o comanda
care iti arata cate puncte ai si una care le modifica, atat.
- Salvarea se va face pe nume, va voi arata si cum sa evitati bug-uri de genul: Schimbarea numelui, salvari nereusite, etc ..
1. Include nvault!
Code: Select all
#include <nvault >
2. Creiem 3 variabile globale:
Code: Select all
// Aici stocam punctele
new Points[33];
// Facem o variabila globala in care inseram numele jucatorului
new Name[33][33];
// Facem o variabila globala, aici vom insera "Id-ul vault-ului", ca sa zic asa ..
new gVault;
Code: Select all
new const VaultName [] = "points_example";
Code: Select all
public plugin_init( )
{
register_plugin( "Exemplu", "1.0", "Fuffy" );
register_clcmd( "say /show", "Show" );
register_clcmd( "say /change", "Change" );
// Aici deschidem vaultul si inseram gVault ca find handle-ul vault-ului, sau mai bine zis "Id-ul vault-ului".
gVault = nvault_open( VaultName );
// Daca gVault e INVALID_HANDLE inseamna ca nu s-a deschis cu succes si trebuie sa punem un mesaj pentru owneri ca sa inteleaga care e problema cu plugin-ul.
if( gVault == INVALID_HANDLE )
server_print( "Probleme cu deschis points_example vault!" );
}
4. Facem show si change publics:
Code: Select all
public Show( id )
{
client_print( id, print_chat, "Puncte: %i", Points[id] );
}
public Change( id )
{
// Adunam cu 355, e luat random exemplul.
Points[id] += 355;
}
5. In client_putinserver, inseram numele jucatorului in acea variabila globala + verificam daca acel nume exista in vault ca find
"keya" si extragem 'Data':
Code: Select all
public client_putinserver( id )
{
get_user_name( id, Name[id], charsmax( Name[] ) );
// nvault_get returneaza 'Data' key-ii gasite si o si converteaza find integer in acel timp, daca nu credeti, puteti citi
nvault.inc
new Data = nvault_get( gVault, Name[id] );
Points[id] = Data;
}
sa stii ce si cum si de imaginatie, cea ce cere timp si rabdare:
Code: Select all
public client_disconnect( id )
{
// Nu mai folosim formatex() folosim direct num_to_str..
new Data[11];
num_to_str( Points[id], Data, charsmax( Data ) );
nvault_set( gVault, Name[id], Data );
}
trebuie sa-i updadam Numele stocat in variabila globala a acelui
user-id, vom folosi get_user_info pentru ai lua noul nume:
Code: Select all
public client_infochanged( id )
{
get_user_info( id, "name", Name[id], charsmax( Name[] ) );
}
8. In ansambul, acesta e tot codul:
Code: Select all
#include <amxmodx>
#include <nvault>
new Points[33];
new Name[33][33];
new gVault;
new const VaultName [] = "points_example";
public plugin_init( )
{
register_plugin( "Exemplu", "1.0", "Fuffy" );
register_clcmd( "say /show", "Show" );
register_clcmd( "say /change", "Change" );
gVault = nvault_open( VaultName );
if( gVault == INVALID_HANDLE )
server_print( "Probleme cu deschis points_example
vault!" );
}
public Show( id )
{
client_print( id, print_chat, "Puncte: %i", Points[id] );
}
public Change( id )
{
Points[id] += 355;
}
public client_putinserver( id )
{
get_user_name( id, Name[id], charsmax( Name[] ) );
new Data = nvault_get( gVault, Name[id] );
Points[id] = Data;
}
public client_disconnect( id )
{
new Data[11];
num_to_str( Points[id], Data, charsmax( Data ) );
nvault_set( gVault, Name[id], Data );
}
public client_infochanged( id )
{
get_user_info( id, "name", Name[id], charsmax( Name[] ) );
}
-
-
-
-
-
-
-
Puteti intra pe server, se va salva automat pointsurile ,dar ca sa
nu aveti zero mereu folositi comanda /change ( doar ca sa testati ma
refer ... ) si deschideti cu Nvault Editor fisierul
'points_example.vault' care il gasiti in amxmodx/data/vault
Cum puteti observa mai sus, eu nu folosesc prefix-uri gen :
levelmod-Name, bla bla .. pentru ca nu e necesar sa folosesti
prefx-uri cand e vorba de nvault, deja nvault creaza un fisier
privat in care poti stoca informatiile tale, normal asta se facea cu
Vault pentru ca vault nu creaza inca un fisier, toate plugin-urile
care folosesc vehiul vault salveaza mereu doar in vault.ini .
Haideti acum sa va explic fiecare functie in parte pentru ca poate
nu ati inteles:
nvault_open() - cu aceasta functie DESCHIZI sau CREEZI(in caz nu
exista inca) un fisier Vault nou si privat in care poti stocka Key-
urile si Date-urile pe care le doresti, daca nu se deschide cu
succes returneaza INVALID_HANDLE sau -1(care e acelasi lucru, e un
macro.. )
nvault_get( Vault, const key[] ) ...
Pui vauld id si Key-a si apoi va returna 'Data' intr-un string, daca
aveti nevoie sa returnati data ca fiind un numar folost
nvault_getdata daca nu , va recomand sa folositi nvault_lookup.
........ Cam atat pentru pana acum, sunt obosit, o sa-i fac edit-uri
in fiecare zi , promit.