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])
}
Şimdiden teşekkürler
