Discord sunucumuz açılmıştır, hepinizi bekleriz

https://discord.gg/43gGDQe6tS

Eklenti Nvault değerlerini kaydetmiyor

Eklenti sorunlarınız ve özel eklenti istekleriniz

Moderatör: Moderatörler


Konu Sahibi
valar.root
Mesajlar: 27
Kayıt: Pzt Eyl 27, 2021 1:23 pm
Konum: İstanbul

Eklenti Nvault değerlerini kaydetmiyor

Mesaj gönderen valar.root »

Merhaba, SS için bir bildir menüsü yapmak istedim.. Aşağıda kod satırlarını yazdım fakat nvault değerini kaydetmiyor.
data/vault içerisinde ki dosyanın boyutu büyüyor, içerisine veri girişi var fakat yeni giriş yapıldığında ya da harita değiştirildiğinde ya da retry çekildiğinde kayıtlı veriyi okumuyor, "Durumunuz" yine "Temiz" olarak yazdırıyor.
Yardımcı olabilir misiniz?

Kod: Tümünü seç

#include <amxmodx>
#include <reapi>
#include <nvault>

new vault, szDataDurum[10];
new secilenadam[33];
new ssBildirim[33];

public plugin_init(){
	register_plugin("SnapShot Engine", "VERSION", "AUTHOR");
	register_clcmd("say /bildir","ssEngineBildirMenu");
}

public ssEngineBildirMenu(id){
	new menu, Menuz[512], sira[6], name[64];
	formatex(Menuz, charsmax(Menuz),"Oyuncu Bildir");
	menu = menu_create(Menuz,"_ssEngineBildirMenu");

	for(new i; i <= MAX_CLIENTS; i++){
		if(is_user_connected(i) && !is_user_bot(i)){
			get_user_name(i,name,charsmax(name));
			num_to_str(i, sira, charsmax(sira))
			formatex(Menuz, charsmax(Menuz),"[ \r %s \w]", name);
			menu_additem(menu, Menuz, sira);
		}
	}

	menu_setprop(menu,MPROP_NEXTNAME, " \wIleri");
	menu_setprop(menu,MPROP_BACKNAME, " \wGeri");
	formatex(Menuz, charsmax(Menuz), " \wKapat");
	menu_setprop(menu,MPROP_EXITNAME,Menuz);
		
	menu_setprop(menu,MPROP_EXIT, MEXIT_ALL);
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public _ssEngineBildirMenu(id, menu, item){
	if(item == MENU_EXIT) {
		menu_destroy(menu)
		return PLUGIN_HANDLED;
	}
	
	new data[6], iName[64], access, callback;
	menu_item_getinfo(menu,item,access,data,charsmax(data),iName,charsmax(iName),callback);
	
	secilenadam[id] = str_to_num(data);
	ssBildiren(id);
	return PLUGIN_HANDLED;
}

public ssBildiren(id){
	ssBildirim[secilenadam[id]] += 1;
	new hedef[64];
	get_user_name(secilenadam[id],hedef,63);
	printer(id,"%s isimli oyuncu bildirildi.",hedef);

	if( ssBildirim[secilenadam[id]] >= 3)
		SupheliKontrol(secilenadam[id]);

	return PLUGIN_HANDLED;
}

public SupheliKontrol(id){
	if( is_user_bot(id) || !is_user_connected(id))
			return PLUGIN_HANDLED;

	new authid[48], anahtar[56], hedef[64];
	get_user_name(id, hedef, 63);
	get_user_authid(id, authid, 55);
	formatex(anahtar, 55, "%s-Supheli",authid);
	if( !(nvault_get(vault, anahtar)) ){
		nvault_pset(vault, anahtar, "SUPHELI");
		printer(0,"%s oyuncusu supheli listesine dustu...", hedef);
	}
	else{
		printer(id,"Supheli listesindesin! Tekrar bildirildin.");
		printer(0,"%s isimli oyuncu Supheli Listesindeki yerini tazeledi!", hedef)
	}

	return PLUGIN_HANDLED;
}

/* ------------------------------------------------------------------------------ */
public client_putinserver(id){
	if(is_user_connected(id) || !is_user_bot(id))
		set_task(3.0,"SSEngineSorgula",id);

	return PLUGIN_HANDLED;
}

public SSEngineSorgula(id){
	new authid[48], anahtar[63];
	get_user_authid(id, authid, charsmax(authid));
	formatex(anahtar, charsmax(anahtar), "%s-Supheli",authid);

	if(nvault_get(vault,anahtar)){
		nvault_get(vault, anahtar, szDataDurum, charsmax(szDataDurum));
		printer(id,"Durumunuz: %s", szDataDurum);
	}
	else
		printer(id,"Durumunuz: Temiz");

	return PLUGIN_HANDLED;
}

public plugin_cfg(){
	vault = nvault_open("_SSEngine");

	if(vault == INVALID_HANDLE)
		set_fail_state("%s dosyasi acilamadi",vault);
}

public plugin_end(){
	nvault_close(vault);
}

stock printer(const id, const input[], any:...){
	static msg[191];
	vformat(msg, charsmax(msg), input, 3);
	
	replace_all(msg, charsmax(msg), "!n", "^x01"); // Default Renk
	replace_all(msg, charsmax(msg), "!g", "^x04"); // Yesil Renk
	replace_all(msg, charsmax(msg), "!t", "^x03"); // Takim rengi
	
	client_print_color(id, id, msg);
}
Sma uzantısı;
SSEngine.sma
Bu mesaja eklenen dosyaları görüntülemek için gerekli izinlere sahip değilsiniz.

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

bestcore
Mesajlar: 1625
Kayıt: Cmt Eyl 30, 2017 12:44 pm
Konum: Samsun

Eklenti Nvault değerlerini kaydetmiyor

Mesaj gönderen bestcore »

Kod: Tümünü seç

if(nvault_get(vault,anahtar))
Bu sorgudan dolayı durumunu "Temiz"'den başka birşey yazdırmıyor. Bunun yerine nvaultdaki verileri string olarak değilde integer olarak yazdırıp sorgularsanız olur gibi.

Kod: Tümünü seç

nvault_set(vault, fmt("%s-Supheli", authid), "1");
Bu şekilde veriyi kayıt et, şu şekildede sorguyu yap;

Kod: Tümünü seç

if(nvault_get(vault, fmt("%s-Supheli", authid)) > 0)
(if içerisinde nvault_get'i çekemiyorsa nvault_geti bir değişkene aktar öyle sorgulat.
örn:

Kod: Tümünü seç

new int = nvault_get(vault....)
if(int > 0)....
+ Ekstra olarak, nvaultta formatex yerine fmt kullanabilirsin, boş yere veri oluşturmaya gerek kalmıyor. Birde eklentileri eski tarzda değilde, güncel kodlama tarzlarıyla yazarsan daha sağlıklı olur.

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

Colditz
Mesajlar: 2574
Kayıt: Çrş Ağu 23, 2017 9:17 pm

Eklenti Nvault değerlerini kaydetmiyor

Mesaj gönderen Colditz »

Ayrıca madem güncel bir eklenti yazıyorsunuz bu ayrıntıları kaçırmamanız gerek.

Oyuncuları çekerken i değerini 1 e eşitleyin ve MAX_CLIENTS yerine MaxClients kullanın.

Kod: Tümünü seç

for(new i = 1; i <= MaxClients; i++)
Yazıları yeni bir stock (printer) kullanarak yapmak yerine direkt client_print_color komutunu kullanarak yazabilirsiniz.
!g yerine ^4 | !t yerine ^3 | !n yerine ^1

Ve ayrıca isim çekerken get_user_name kullanmak yerine %s yerini %n e çevirin ve değer olarak kullanıcının idsini kullanın. Aşağıda bir örneğini verdim.

Kod: Tümünü seç

client_print_color(id, id, "^4Uyarildiniz ^1.");  // id kullanıcısına gösterilir
client_print_color(0, 0, "^4%n adli oyuncu uyarildi.", id);  // herkese gösterilir. %n olan yer id kullanıcısının ismi olarak gösterilir.

Link:
Linklerini gizle
Linki Kopyala

Konu Sahibi
valar.root
Mesajlar: 27
Kayıt: Pzt Eyl 27, 2021 1:23 pm
Konum: İstanbul

Eklenti Nvault değerlerini kaydetmiyor

Mesaj gönderen valar.root »

Teşekkürler, konuyu tekrar hortlatmak istemedim ama Colditz'in ÖM kapalı olduğundan dönüş yapamadım.

Link:
Linklerini gizle
Linki Kopyala

Konu Sahibi
valar.root
Mesajlar: 27
Kayıt: Pzt Eyl 27, 2021 1:23 pm
Konum: İstanbul

Eklenti Nvault değerlerini kaydetmiyor

Mesaj gönderen valar.root »

Colditz yazdı: Cum Kas 12, 2021 11:16 am Ayrıca madem güncel bir eklenti yazıyorsunuz bu ayrıntıları kaçırmamanız gerek.

Oyuncuları çekerken i değerini 1 e eşitleyin ve MAX_CLIENTS yerine MaxClients kullanın.

Kod: Tümünü seç

for(new i = 1; i <= MaxClients; i++)
Yazıları yeni bir stock (printer) kullanarak yapmak yerine direkt client_print_color komutunu kullanarak yazabilirsiniz.
!g yerine ^4 | !t yerine ^3 | !n yerine ^1

Ve ayrıca isim çekerken get_user_name kullanmak yerine %s yerini %n e çevirin ve değer olarak kullanıcının idsini kullanın. Aşağıda bir örneğini verdim.

Kod: Tümünü seç

client_print_color(id, id, "^4Uyarildiniz ^1.");  // id kullanıcısına gösterilir
client_print_color(0, 0, "^4%n adli oyuncu uyarildi.", id);  // herkese gösterilir. %n olan yer id kullanıcısının ismi olarak gösterilir.
nvault_set'te( dosya, data, değer) şeklinde bir yapısı var; değer kısmına fmt ile bir yazı kayit edilebilir mi acaba?

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

bestcore
Mesajlar: 1625
Kayıt: Cmt Eyl 30, 2017 12:44 pm
Konum: Samsun

Eklenti Nvault değerlerini kaydetmiyor

Mesaj gönderen bestcore »

Evet, örneğin değer yerine;
fmt("%n", id) - > id'nin ismini çekebilirsin.
fmt("%s", string) - > string çekebilirsin.
fmt("%i", int) - > integer çekebilirsin.
fmt....

Fmt, formatex'in değişkensiz kullanma biçimi. Kısacası değişkeni formatlayabilirsin. Bazı yerlerde fmt, bazı yerlerde de formatex kullanabilirsin.

Link:
Linklerini gizle
Linki Kopyala

Konu Sahibi
valar.root
Mesajlar: 27
Kayıt: Pzt Eyl 27, 2021 1:23 pm
Konum: İstanbul

Eklenti Nvault değerlerini kaydetmiyor

Mesaj gönderen valar.root »

bestcore yazdı: Prş Kas 25, 2021 10:47 pm Evet, örneğin değer yerine;
fmt("%n", id) - > id'nin ismini çekebilirsin.
fmt("%s", string) - > string çekebilirsin.
fmt("%i", int) - > integer çekebilirsin.
fmt....

Fmt, formatex'in değişkensiz kullanma biçimi. Kısacası değişkeni formatlayabilirsin. Bazı yerlerde fmt, bazı yerlerde de formatex kullanabilirsin.
%i değerini şu şeklide kullanabiliriz o zaman:

Kod: Tümünü seç

// User'in ak47 durumu: userAK47[id]
nvault_set(vault,  data, fmt("%i",userAK47[id]))
//num_to_str kullanmaya kalmaz gibi duruyor
Bir de şunu eklemek istiyorum evet bazen fmt'yi kullanamıyorum. Misal aşağıdaki menu:

Kod: Tümünü seç

new const szSkin[][][]= {
	{"v_ak47.mdl", "AK-0", CSW_AK47},
	{"v_ak47.mdl", "AK-1", CSW_AK47},
	{"v_ak47.mdl", "AK-2", CSW_AK47},
	{"v_ak47.mdl", "AK-3", CSW_AK47},
	{"v_knife.mdl", "KF-0", CSW_KNIFE},
	{"v_knife.mdl", "KF-1", CSW_KNIFE}
}

// Menuyu yapiyoruz
public Menu(id){
	new menu = menu_create(fmt("AK Skinler"),"_Menu");
	
	for( new i; i <= sizeof(szSkin); i++){
		if(szSkin[i][2] == CSW_AK47){
			new strNo[7];
			num_to_str(i, strNo, charsmax(strNo);
			menu_additem(menu, fmt("%s",szSkin[i][1]), strNo)
		}
	}
	
	menu_setprop(menu,MPROP_EXITNAME,"Cikis");
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;	
}
// Menu Handler...
public _Menu(const id, menu, item){
:
:
:
yukaridaki menu yapısında çıktı vermiyor mesela yanlışlık nerede acaba?

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

bestcore
Mesajlar: 1625
Kayıt: Cmt Eyl 30, 2017 12:44 pm
Konum: Samsun

Eklenti Nvault değerlerini kaydetmiyor

Mesaj gönderen bestcore »

Kod: Tümünü seç

new strNo[7];
num_to_str(i, strNo, charsmax(strNo);
menu_additem(menu, fmt("%s",szSkin[i][1]), strNo)
->

Kod: Tümünü seç

menu_additem(menu, fmt("%s",szSkin[i][0][1]), fmt("%i", i))
nts'ye gerek yok;
[0], koyulacak mı pek emin değilim, dene.

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

Colditz
Mesajlar: 2574
Kayıt: Çrş Ağu 23, 2017 9:17 pm

Eklenti Nvault değerlerini kaydetmiyor

Mesaj gönderen Colditz »

Burası küçük eşittir yerine küçüktür olması gerekiyor.

Kod: Tümünü seç

//for( new i; i <= sizeof(szSkin); i++){
for( new i; i < sizeof(szSkin); i++){
+ Ayrıca itemin ismini göstermek istiyorsanız böyle yapmanız gerekiyor.

Kod: Tümünü seç

menu_additem(menu, fmt("%s",szSkin[i][1][0]), fmt("%i", i))

Link:
Linklerini gizle
Linki Kopyala
Cevapla