1. sayfa (Toplam 1 sayfa)

Eklenti Nvault değerlerini kaydetmiyor

Gönderilme zamanı: Prş Kas 11, 2021 12:45 pm
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

Eklenti Nvault değerlerini kaydetmiyor

Gönderilme zamanı: Prş Kas 11, 2021 4:34 pm
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.

Eklenti Nvault değerlerini kaydetmiyor

Gönderilme zamanı: Cum Kas 12, 2021 11:16 am
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.

Eklenti Nvault değerlerini kaydetmiyor

Gönderilme zamanı: Prş Kas 25, 2021 11:58 am
gönderen valar.root
Teşekkürler, konuyu tekrar hortlatmak istemedim ama Colditz'in ÖM kapalı olduğundan dönüş yapamadım.

Eklenti Nvault değerlerini kaydetmiyor

Gönderilme zamanı: Prş Kas 25, 2021 11:59 am
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?

Eklenti Nvault değerlerini kaydetmiyor

Gönderilme zamanı: Prş Kas 25, 2021 10:47 pm
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.

Eklenti Nvault değerlerini kaydetmiyor

Gönderilme zamanı: Pzt Kas 29, 2021 3:10 pm
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?

Eklenti Nvault değerlerini kaydetmiyor

Gönderilme zamanı: Pzt Kas 29, 2021 4:50 pm
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.

Eklenti Nvault değerlerini kaydetmiyor

Gönderilme zamanı: Pzt Kas 29, 2021 10:07 pm
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))