1. sayfa (Toplam 1 sayfa)

Harita Oylamasi

Gönderilme zamanı: Pzr Eyl 16, 2018 7:54 pm
gönderen OneTap
Merhabalar, basitçe kodlanmış bir harita değişim sisteminde şu dört adet sıkıntı çekmekteyiz.

1- Oylama menüsünde user haritayı seçince menünün kapanmasını istiyoruz. Tıpkı Default olan MapChooser gibi. Şuan oyuncu seçiyor, öyle ekranda kalıyor.
2- Oylama işlemi bir basitce set_task ile zamana bağlanmış. Harita oylamasi başladığında haritaoylamasi = true değerini alıyor ve oylama başlıyor. Yine harita oylamasini başlatan set_task'ın peşine hemen başka bir set_task eklenmiş ve 10 saniye sure eklenmiş. Bu timer başlayıncada haritaoylamasi = false oluyor ve oylama öyle bitiyor. Bunun yerine daha mantıklı çalışan bir sistem gerekiyor.
3- Haritaları new const olarak tanımlamışlar. Burada ki sorun şu harita ismini oylamanın sonunda yanlış yazıyor. Örneğin DE_MIRAGE'yi DE_MIR diye yazıyor ve dolayısıyla map değişmiyor.
4- new const ile değilde bir .ini dosyasına haritalar bağlansa daha güzel olur.

Kodlar aşağıda verilmiştir. Herhangi bir Warning veya error kesinlikle almıyoruz. Verdiğim kodlar oylama ile ilgili kodlardır.

Kod: Tümünü seç

Kütüphane ve define ve new:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <cstrike>
#include <fun>

#define VOTE_TIME	5.0 // Map suresi 1.75(1dk45sn) olarak hesaplanir.
#define VOTE_END_TIME	15.0 // Map suresi 1.75(1dk45sn) olarak hesaplanir.

/*=== Mapler ===*/ 
new const Maps[][][] = 
{
	{"HaritaIsmi",0},
	{"DE_DUST2",0},
	{"DE_MIRAGE"0},
	{"DE_CACHE"0},
	{"DE_INFERNO",0},
	{"DE_TRAIN",0}
}

new
round = 0,
secilenharita[200], 
bool:haritaoylamasi;
-----------------------------------------------------------------
Round bitiş ve başlangıcında yapması istenenler:

public RoundStart()
{
	if(round == 29 )
	{
		set_task(VOTE_TIME, "MapVote")
		set_task(VOTE_END_TIME, "EndVote")
	}
}

public RoundEnd()
{
	round ++
	
	if(round == 30 || round > 30)
	{
		server_cmd("amx_map %s",secilenharita)
	}
}
-----------------------------------------------
Buradan sonrasıda tamamen oylama sistemi ile alakalı kodlar:

public MapVote()
{
	static Uid;
	get_players(players, inum)
	for(new i; i < inum; i++) 
	{
		Uid = players[i];
		haritaoylamasi = true
		
		static Item[64]
		
		formatex(Item, sizeof(Item) - 1, "\rHarita Oylamasi")
		new menu = menu_create(Item, "MapVote_devam")
		
		new i;
		for(i=1;i<sizeof Maps;i++)
		{
			new szid[10]
			num_to_str(i,szid,9)
			formatex(Item, sizeof(Item) - 1, "%s", Maps[i][0])
			menu_additem(menu, Item, szid)
		}
		menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
		menu_display(Uid, menu, 0)
	}
}

public MapVote_devam(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, sizeof(data), iName, sizeof(iName), Callback)
	new key = str_to_num(data)
	Maps[key][1][0]+=1
	MapVote_sonuc(id)
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public MapVote_sonuc(id)
{
	static Item[64]
	
	formatex(Item, sizeof(Item) - 1, "\rHarita Oylamasi")
	new menu = menu_create(Item, "MapVote_sonuc2")
	
	new i;
	for(i=1;i<sizeof Maps;i++)
	{
		formatex(Item, sizeof(Item) - 1, "%s \d[\r %d \d]", Maps[i][0], Maps[i][1][0])
		menu_additem(menu, Item, "1")
	}
	menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER)
	menu_display(id, menu, 0)
}

public MapVote_sonuc2(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, sizeof(data), iName, sizeof(iName), Callback)
	new key = str_to_num(data)
	switch(key)
	{
		case 1:
		{
			if(haritaoylamasi)
			{
				MapVote_sonuc(id)
			}
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public EndVote()
{
	haritaoylamasi = false
	new i,j;
	for(i=1;i<sizeof Maps;i++)
	{
		for(j=1;j<sizeof (Maps) - 1;j++)
		{
			new gecici,gecici2[300];
			if(Maps[j][1][0] < Maps[j+1][1][0])
			{
				gecici = Maps[j][1][0]
				Maps[j][1][0] = Maps[j+1][1][0]
				Maps[j+1][1][0] = gecici
				formatex(gecici2,charsmax(gecici2),"%s",Maps[j][0])
				formatex(Maps[j][0],charsmax(Maps),"%s",Maps[j+1][0])
				formatex(Maps[j+1][0],charsmax(Maps),"%s",gecici2)
			}
		}
	}
	ChatColor(0, "!g[%s Rekabetci !t(Oylama)!g]: !nOylama Sonucu: !g%s",SERVER,Maps[1][0])
	ChatColor(0, "!g[%s Rekabetci !t(Oylama)!g]: !nOylama tamamlandi. Bir sonraki el harita degisecek.",SERVER)
	formatex(secilenharita,charsmax(secilenharita),"%s",Maps[1][0])
}
İlgilenen arkadaşlar yukardaki sorunları çözülmüş yukardaki şablon benzeri kodlar veya direkt sma atarsa çok sevinirim
Şimdiden teşekkürler :)

Harita Oylamasi

Gönderilme zamanı: Pzr Eyl 16, 2018 11:35 pm
gönderen Taha Demirbaş
Bunu adam etmek zor olacak Çünkü herşey çok basitçe yazılmış. Sıfırdan toparlanırsa daha iyi olabilir. Piyasada Mapchooserler var forumumuzda da mevcut deneyebilirsiniz.

Harita Oylamasi

Gönderilme zamanı: Pzr Eyl 16, 2018 11:46 pm
gönderen OneTap
@Taha Demirbaş

Kardeşim benim için bunun adam edilmesi önemli değil bana dediğin gibi sıfırdan yazılmış bir mapchooser lazım ama sadece oylama işlemi olacak. Yani Fatih arkadaşın ki varda parçalayamadım açıkçası bir el atabilir misin?

Harita Oylamasi

Gönderilme zamanı: Pzr Eyl 16, 2018 11:48 pm
gönderen Taha Demirbaş
csm süreli sistem diye aratabilirsiniz. O daha sade bir mapchooser.

Harita Oylamasi

Gönderilme zamanı: Pzr Eyl 16, 2018 11:52 pm
gönderen JustR1x
Deneyiniz; http://www.csplugin.com/2016/05/csm-map ... 2.html?m=1

Yorumlar kısmında v3.2 sürümünün linki var, onu kullanınız.

Harita Oylamasi

Gönderilme zamanı: Pzt Eyl 17, 2018 5:38 pm
gönderen OneTap
JustR1x yazdı: Pzr Eyl 16, 2018 11:52 pm Deneyiniz; http://www.csplugin.com/2016/05/csm-map ... 2.html?m=1

Yorumlar kısmında v3.2 sürümünün linki var, onu kullanınız.
Teşekkürler.

Konu çözümlenmiştir.