nVault
nVault, harici bir dosyaya veri kaydetmenin ve dosyadan veri almanın en kolay yoludur. nVault harici dosyaları map değiştiğinde veya server çöktüğünde herhangi bir veri kaybına uğramazlar. Bu yüzden kişisel verileri depolamanın en iyi yolu nVault modülünü kullanmaktır. Örneğin bu modül ile üyelik, banka vb. sistemler yazabilirsiniz.
nVault modülünün kullandığı harici dosyalar .vault uzantılı dosyalardır. Vault dosyalarında her bir satır iki parametreden oluşur. İlk parametre anahtar parametresidir. Anahtar parametrelerini vault dosyalarında satırları bulmak için kullanırız. İkinci parametre ise anahtar parametre için belirlediğimiz verilerdir. Her iki parametrenin de kayıt türü "string" dir. Fakat ikinci parametre çağrılırken "integer", "float" veya "string" şeklinde de çağrılabilir. Verilerin kaydedildiği .vault dosyaları "binary" formatındadır. Yani normal yollarla düzenlenemez/okunamaz. Ancak Vault file editor programlarıyla okuyup düzenleyebilirsiniz.
nVault Fonksiyonları:
Kod:
nvault_open - Bir vault dosyasını açmakta kullanılır.
nvault_close - Açılan bir vault dosyasını kapatmakta kullanılır.
nvault_lookup - Bir vault dosyasında belirtilen satırı okuyup tam bilgi toplar.
nvault_get - Bir vault dosyasının belirtilen satırdaki ikinci parametreyi okumak için kullanılır.
nvault_set - Bir vault dosyasına satır yazmak için kullanılır. Geçerli zamanı damgalar.
nvault_pset - Bir vault dosyasına satır yazmak için kullanılır. Zaman damgası kullanılmaz.
nvault_touch - Bir vault satırının zaman damgasını yeniler.
nvault_prune - Belirlenen zaman içerisindeki tüm vault satırlarını siler.
nvault_remove - Belirtilen anahtar parametrenin satırını siler.
nvault_open Fonksiyonu:
Herhangi bir işlem yapmadan önce, işlem yapılacak vault dosyası açılmalıdır. Dosya açma işlemi de bu fonksiyon ile kullanılır. Bu fonksiyon yalnızca 1 parametre içerir. Bu parametre de açılacak dosyanın ismidir. Eğer dosya açılması sırasında herhangi bir hata meydana gelirse bu fonksiyon INVALID_HANDLE (-1) 'a dönecektir. Bu yüzden bu fonksiyon ile dosyanın düzgün açılıp açılmadığı kontrolünü yapmamız gerekir. Ayrıca bu fonksiyon plugin_cfg() publicinde kullanılmalıdır.
Kod:
nvault_open( const szVaultName[] )
szVaultName = Buraya vault dosyanızın adı girilecektir. Örneğin banka.vault adlı bir dosyanız var ise buraya "banka" yazıcaksınız.
PHP- Kodu:
new iVault = nvault_open( "banka" );
if ( iVault == INVALID_HANDLE )
set_fail_state( "nVault Dosyasi Acilamadi !" );
nvault_close Fonksiyonu:
Bu fonksiyon açılmış olan vault dosyasını kapatmak için kullanılır. Kapatılan dosya tekrar açılana kadar üzerinde herhangi bir işlem yapılamaz. Bu fonksiyon plugin_end() publicine yazılır. Böylece server çökmeden veya map değişmeden hemen önce vault dosyaları kapatılır ve veri kaybı önlenmiş olur. Eğer bu fonksiyon ile dosyalarınızı kapatmazsanız map değiştiğinde veya server çöktüğünde verileri kaybedersiniz. Bu fonksiyon bir nevi kayıt işlemidir.
Kod:
nvault_close( vault )
vault = Kapatmak istediğimiz vault dosyasını açarken kullandığımız global değişkendir.
PHP- Kodu:
new iVault = nvault_open( "banka" );
nvault_close( iVault );
nvault_lookup Fonksiyonu:
Bu fonksiyon ile belirtilen anahtar parametreyi kullanarak, anahtar parametreye ait ikinci parametre olan veriyi ve zaman damgasını öğrenmek için kullanırız. Öğrendiğimiz veri string türü değişkenlerde depolanabilir. Bu fonksiyon true ve false olmak üzere iki farklı şekile dönüşebilir. Eğer anahtar parametre vault dosyasında bulunamazsa false olur. Eğer dosyada aranan parametre bulunursa true olur.
Kod:
nvault_lookup( vault , const szKey[] , szValue[] , iMaxLength , iTimestamp )
vault = Vault dosyamızı açarken atadığımız değişken. (integer)
szKey = Verisini öğrenmek istediğimiz anahtar parametre. (string)
szValue = Öğrenilen verinin depolanacağı değişken. (string)
iMaxLength = szValue değişkeninin maksimum uzunluğu. (integer)
iTimestamp = Öğrenilen zaman damgasının depolanacağı değişken. (integer)
PHP- Kodu:
new szName[32];
new szData[32];
new iTimestamp;
new iVault;
new iDataExists;
get_user_name( id , szName , charsmax( szName ) );
iVault = nvault_open( "banka" );
iDataExists = nvault_lookup( iVault , szName , szData , charsmax( szData ) , iTimestamp );
if ( iDataExists )
{
client_print( id , print_chat , "Ikincil Parametre - Veri =%s Zaman Damgasi = %d" , szData , iTimestamp );
}
else
{
client_print( id , print_chat , "%s Anahtar Parametresine Ait Veri Bulunamadi." , szName );
}
nvault_get Fonksiyonu:
Bu fonksiyon nvault_lookup fonksiyonuna benzer fakat bu fonksiyon daha esnektir. Bu fonksiyon belirtilen anahtar parametrenin verisini 3 farklı şekilde öğrenebilir. Integer, float ve string. Böylece herhangi bir tür dönüşümü yapmadan kolaylıkla istenen türde veri elde edilebilir. Bu fonksiyon zaman damgasını öğrenmekte kullanılamaz. Eğer zaman damgasını öğrenmek istiyorsanız nvault_lookup fonksiyonunu kullanmak zorundasınız.
Kod:
nvault_get( vault , const szKey[] , ... )
vault = Vault dosyasını açarken kullandığımız değişken.
szKey = Verisini öğrenmek istediğiniz anahtar parametre.
Farklı türlerde veri alma;
Integer:
iVeri = nvault_get( vault , szKey[] );
Float:
nvault_get( vault , szKey[] , float );
String:
nvault_get( vault , szKey[] , szValue[] , iMaxLen );
PHP- Kodu:
new iVault;
new szName[35];
new szData[30];
iVault = nvault_open( "banka" );
get_user_name( id , szName , charsmax( szName ) );
//Integer tipinde veri alma;
new iSayi = nvault_get( iVault , szName );
//Float tipinde veri alma;
new Float: fOndalik;
nvault_get( iVault , szName , fOndalik );
//String tipinde veri alma;
new szData[10];
nvault_get( iVault , szName , szData , charsmax( szData ) );
nvault_set Fonksiyonu:
Bu fonksiyon bir vault dosyasına satır kaydetmek için kullanılır. Aynı zamanda zaman damgası da kullanır.
Kod:
nvault_set( vault , const key[] , const value[] )
vault = Vault dosyasını açarken kullandığımız değişken.
key = Oluşturulacak satırın anahtar parametresi.
value = Oluşturulacak satırın ikincil parametresi.
PHP- Kodu:
//Anahtar parametre olan kullanıcı ismine özel rutbe koyalım.
new iVault;
new szName[35];
new szData[30];
iVault = nvault_open( "ozelrutbe" );
get_user_name( id , szName , charsmax( szName ) );
nvault_set( iVault , szName , "Profesyonel Oyuncu" );
nvault_pset Fonksiyonu:
Bu fonksiyon nvault_set fonksiyonuyla hemen hemen aynıdır. Tek fark bu fonksiyon zaman damgası bırakmaz. Örneğin bir verinin birazdan görmüş olacağınız nvault_prune fonksiyonu tarafından silinmesini istemiyorsak zaman damgası olmadan oluşturmamız gerekir. Bu da bu fonksiyonla sağlanır.
nvault_touch Fonksiyonu:
Bu fonksiyon bir veriye dokunarak zaman damgasını günceller.
Kod:
nvault_touch( vault , const szKey[] , [ iTimestamp = -1 ] )
vault = Vault dosyasını açarken kullandığımız değişken.
szKey = Zaman damgasını güncelleyeceğimiz verinin anahtar parametresi.
iTimeStamp - (Istege Bagli) Eğer boş bırakılırsa zamanı, geçerli zaman olarak günceller. Eğer doldurulursa yazılan zaman olarak değiştirir.
PHP- Kodu:
new iVault;
new szName[35];
iVault = nvault_open( "banka" );
get_user_name( id , szName , charsmax( szName ) );
//Şimdiki zamanla veriye dokun;
nvault_touch( iVault , szName );
//1 saat önceki zamanla veriye dokun. (60 * 60) = 3600
nvault_touch( iVault , szName , get_systime() - 3600 );
nvault_prune Fonksiyonu:
Bu fonksiyon belirlenen zaman aralığındaki tüm zaman damgalı verileri siler.
Kod:
nvault_prune( vault , iStart , iEnd )
vault = Vault dosyasını açarken kullandığımız değişken.
iStart = Verilerin silinmeye başlanacağı zaman damgası.
iEnd = Verilerin silineceği son zaman damgası.
PHP- Kodu:
new iVault;
iVault = nvault_open( "banka" );
//En erken olası zaman = 0 dan, şu ana kadar olan tüm verileri sil :
nvault_prune( iVault , 0 , get_systime() );
//15 gün veya daha eski verileri sil :
//get_systime() = şuanki zaman.
//1 gün = 86400 saniye = 60 sn * 60 dk * 24 saat
nvault_prune( iVault , 0 , get_systime() - ( 15 * 86400 ) );
Zaman Damgaları:
nVault modülünde zaman damgaları, unix-time formatını kullanır. Bu formatta sadece saniye vardır ve zamanın başlangıcı yani 0. zaman 1 Ocak gecesi 1970 tarihidir. Basitçe unix-time formatını dakika, saat, gün şeklinde çevirebilirsiniz.
Örnek: 1 gün = 60 * 60 * 24 = 86400
Bu durumda 15 gün = 15 * 86400 dür.
Örnek Plugin:
Bu tam anlamlı bir plugin değil tabiki. Fakat nerde ne nasıl kullanılır anlamanız açısından örnek gösteriyorum.
PHP- Kodu:
#include <amxmodx>
#include <nvault>
#include <cstrike>
#include <fun>
new gVault;
new gszName[33][35];
new gExpiration;
public plugin_init()
{
register_plugin( "CS Money Bankasi" , "1.0" , "akcaliberkk" );
register_clcmd( "say /savemoney" , "cmdSaveMoney" );
register_clcmd( "say /getmoney" , "cmdGetMoney" );
gExpiration = register_cvar( "zaman_asimi" , "10" );
}
public plugin_cfg()
{
// Vault plugin_cfg() publicinde açılır.
gVault = nvault_open( "banka" );
if ( gVault == INVALID_HANDLE )
set_fail_state( "Vault Dosyasi Acilamadi !" );
//Cvarda belirtilen günü aşmış verileri sil.
nvault_prune( gVault , 0 , get_systime() - ( 86400 * get_pcvar_num( gExpiration ) ) );
}
public plugin_end()
{
//Server Çöktünde veya map değiştiğinde dosyayı kapat.
nvault_close( gVault );
}
public client_authorized(id)
{
get_user_name( id , gszName[id] , charsmax( gszName[] ) );
}
public cmdSaveMoney(id)
{
new szMoney[7];
formatex( szMoney , charsmax( szMoney ) , "%d" , cs_get_user_money(id) );
cs_set_user_money(id,0)
nvault_set( gVault , gszName[id] , szMoney );
client_print( id , print_chat , "Tum Paran Nickine Kaydedildi !" );
}
public cmdGetMoney(id)
{
new iMoney = nvault_get( gVault , gszName[id] );
//Parayi cektikten sonra bankayi sifirlamak için veriyi silmelisiniz.
if ( iMoney )
{
cs_set_user_money( id , iMoney , 1 );
nvault_remove( gVault , gszName[id] );
client_print( id , print_chat , "Paran Nickinin Hesabindan Yuklendi: $%d" , iMoney );
}
else
{
client_print( id , print_chat , "Bu Nicke Ait Hic Para Verisi Bulunamadi !" );
}
}
Not:Bu modülle ilgili anlamadığınız, öğrenmek istediğiniz her şeyi sorabilirsiniz. Elimden geldiğince açıklamaya çalışırım.