Harita Oylamasi
Gönderilme zamanı: Pzr Eyl 16, 2018 7:54 pm
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.
İlgilenen arkadaşlar yukardaki sorunları çözülmüş yukardaki şablon benzeri kodlar veya direkt sma atarsa çok sevinirim
Şimdiden teşekkürler
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
