[TUT] New Vault (nvault.inc)

Tutoriale scripting, cod si portiuni de cod.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
User avatar
Fuffy
Membru, skill +1
Membru, skill +1
Posts: 299
Joined: 07 Jan 2016, 08:34
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

30 Oct 2016, 10:37

Important: Acest tutorial pare la prima vedere complex si neclar dar nu e asa, are menirea de a te ajuta sa intelegi intr-un mod mai profund ce se intampla in nvault, daca il citesti doar ca sa gasesti coduri pentru salvare , etc, nu vei intelege nimic si mai bine nu il citesti.

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:
Image

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;
Optional, mai facem o variabila constanta in care punem Numele vault-ului, poti face asa sau sa-l pui manual, eu prefer asa:

Code: Select all

new const VaultName [] = "points_example";
3. Acum facem plugin_init() :

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;	
}
6. in client_disconnect salvam Points-urile adunate, nu uita ca in functie de situatie poti salva punctele diferit, nu ai nevoie decat
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 );
}
7. In client_infochanged, in caz ca jucatorul isi schimba numele
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.
AMXX Blue e acum doar pe github.
RoyalServer 2
User avatar
Fuffy
Membru, skill +1
Membru, skill +1
Posts: 299
Joined: 07 Jan 2016, 08:34
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

19 Nov 2016, 15:28

M-am gandit mai bine si o sa scriu cat pot atat despre Nvault cat si despre Nvault Utility, exemplu de salvare cu nv utility ( am sa scriu mai multe in posturile ce urmeaza, doar incercati sa NU comentati daca nu este o intrebare sau o corectare, multumesc. ) - >
Nvault Utility Example | Afiseaza codul
#include <amxmodx>
#include <fun>
#include <cstrike>
#include <nvault>
#include <nvault_util>

enum _:PlayerData
{
	kills,
	deaths,
	Money
};

const MAX_PLAYERS = 32;
new pData[ MAX_PLAYERS + 1 ] [PlayerData];

new const VName[ ] = "VaultUtilityTest";
new VaultId;

new gName[32][33];

public plugin_init( )
{
	register_plugin( "Nvault Utility Test", "1.0", "Craxor" );

	register_clcmd( "say /insert", "ins" );
	register_clcmd( "say /check", "check" );	

	VaultId = nvault_open( VName );
}

public client_putinserver( id )
{
	get_user_name( id, gName[id], charsmax( gName[] ) );
}

public client_infochanged( id )
{
	get_user_info( id, "name", gName[id], charsmax( gName[] ) );
}

public ins( id )
{
	pData[id][kills] = get_user_frags( id );
	pData[id][deaths] = cs_get_user_deaths( id );
	pData[id][Money] = cs_get_user_money( id );

	nvault_set_array( VaultId, gName[id] , pData[ id ], sizeof (pData[]) );
}

public check( id )
{
	
	nvault_get_array( VaultId, gName[id] , pData[id], sizeof( pData[] ) );

	client_print( id, print_chat, " Name : %s ", gName[id] );
	client_print( id, print_chat, " Info: %i , %i, %i", pData[id] [kills], pData[id] [deaths], pData[id] [Money] );
}
AMXX Blue e acum doar pe github.
User avatar
Fuffy
Membru, skill +1
Membru, skill +1
Posts: 299
Joined: 07 Jan 2016, 08:34
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

10 Dec 2016, 17:24

Uitasem sa precizez ca aveti nevoie sa includeti si vault-ul in plugin_end()

Code: Select all

public plugin_end( )
{
        nvault_close( VaultId );
}
AMXX Blue e acum doar pe github.
Post Reply

Return to “Scripting”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 5 guests