- Katılım
- 6 Kas 2021
- Mesajlar
- 3,010
- Tepkime puanı
- 4,532
- Puanları
- 113
- Yaş
- 31
- Konum
- Türkiye
- Dc
- fatihbulut
Oylama Akışı (60 saniye süreli):
- GM /oylamaac yazar (veya NPC’den başlatır)
- Oy sayıları 0'lanır, oylama_aktif = 1 yapılır
- Her oyuncunun ekranına panel açılır (event_vote_open)
- Oyuncular 1 kez oy kullanabilir (/vote X)
- 60 saniye sonra oylama_bitir tetiklenir
- Kazanan seçenek belirlenir ve duyurulur
Bu fonksiyon, serverdan event_vote_open komutu geldiğinde, uiEventVote.py içindeki arayüzü çağırır ve gösterir.
- Oyuna GM olarak gir
- Komutu yaz: /oylamaac
- Diğer oyuncuların ekranında panel açılmalı
- Oyuncu bir seçeneğe tıkladığında: Panel kapanır/vote x komutu server’a giderChat ekranında "oy verdiniz" yazar.
Oyuncuların ekranında şu şekilde görünür:
OYLAMA SONUCU:
1. Metin Yağmuru - 15 oy
2. Boss Saldırısı - 9 oy
3. 2x EXP - 22 oy
Kazanan: 2x EXP (22 oy) Bu sayede oyuncular oylama sonucunu anlık olarak görebilir.
Kod:
quest event_vote begin
state start begin
function get_winner()
local oy1 = game.get_event_flag("oy1")
local oy2 = game.get_event_flag("oy2")
local oy3 = game.get_event_flag("oy3")
if oy1 >= oy2 and oy1 >= oy3 then
return "Metin Yağmuru", oy1
elseif oy2 >= oy1 and oy2 >= oy3 then
return "Boss Saldırısı", oy2
else
return "2x EXP", oy3
end
end
when login begin
if game.get_event_flag("oylama_aktif") == 1 then
command("event_vote_open")
end
end
when command "vote" begin
local vote = tonumber(arg1)
if game.get_event_flag("oylama_aktif") != 1 then
chat("Şu anda aktif bir oylama yok.")
return
end
if vote >= 1 and vote <= 3 then
game.set_event_flag("oy"..vote, game.get_event_flag("oy"..vote) + 1)
chat("Oy verdiğiniz için teşekkürler!")
else
chat("Geçersiz oy!")
end
end
when 20011.chat."Oylamayı Elle Başlat" with pc.is_gm() begin
say_title("GM Paneli")
say("60 saniyelik oylamayı başlatmak istiyor musun?")
local s = select("Evet", "Hayır")
if s == 1 then
notice_all("Oylama başladı! Etkinlik seçimini yapmayı unutma!")
game.set_event_flag("oylama_aktif", 1)
game.set_event_flag("oy1", 0)
game.set_event_flag("oy2", 0)
game.set_event_flag("oy3", 0)
command("event_vote_open")
timer("oylama_bitir", 60)
end
end
when oylama_bitir.timer begin
game.set_event_flag("oylama_aktif", 0)
local kazanan, oy = event_vote.get_winner()
notice_all("Oylama sona erdi!")
notice_all("Kazanan etkinlik: "..kazanan.." ("..oy.." oy)")
end
end
end
Kod:
başa ekle //
ACMD(do_oylamaac);
komut yerine//
{ "oylamaac", do_oylamaac, GM_LOW_WIZARD },
cmd_general.cpp – Komut işlevi
Kod:
ACMD(do_oylamaac)
{
// Sadece GM'ler kullanabilsin
if (!ch || ch->GetGMLevel() < GM_LOW_WIZARD)
return;
// Quest flag'ları sıfırla (quest ile birlikte çalışır)
quest::CQuestManager::instance().RequestSetEventFlag("oylama_aktif", 1);
quest::CQuestManager::instance().RequestSetEventFlag("oy1", 0);
quest::CQuestManager::instance().RequestSetEventFlag("oy2", 0);
quest::CQuestManager::instance().RequestSetEventFlag("oy3", 0);
// Tüm aktif oyunculara client komutu gönder: "event_vote_open"
const DESC_MANAGER::DESC_SET& clientSet = DESC_MANAGER::instance().GetClientSet();
for (const auto& desc : clientSet)
{
if (desc && desc->GetCharacter())
{
desc->GetCharacter()->ChatPacket(CHAT_TYPE_COMMAND, "event_vote_open");
}
}
// Komutu yazan GM'ye bilgi ver
ch->ChatPacket(CHAT_TYPE_INFO, "Oylama başlatıldı ve tüm oyunculara gönderildi.");
}
Pack//
Pack'in root/ klasörüne uiEventVote.py adlı yeni bir dosya ekle. İçeriği şu şekilde:
Kod:
import ui
import net
import chat
class EventVoteDialog(ui.Board):
def __init__(self):
ui.Board.__init__(self)
self.SetSize(270, 180)
self.SetCenterPosition()
self.AddFlag("movable")
self.AddFlag("float")
self.titleBar = ui.TitleBar()
self.titleBar.SetParent(self)
self.titleBar.MakeTitleBar(270, "Etkinlik Oylaması")
self.titleBar.Show()
self.CreateVoteButtons()
def CreateVoteButtons(self):
self.voteOptions = [
("Metin Yağmuru", 1),
("Boss Saldırısı", 2),
("2x EXP", 3)
]
for i, (text, vote_id) in enumerate(self.voteOptions):
button = ui.Button()
button.SetParent(self)
button.SetPosition(30, 40 + i * 40)
button.SetText(text)
button.SetEvent(lambda v=vote_id: self.SendVote(v))
button.Show()
def SendVote(self, vote_id):
net.SendChatPacket(f"/vote {vote_id}")
chat.AppendChat(chat.CHAT_TYPE_INFO, f"{vote_id}. seçeneğe oy verdiniz. Teşekkürler!")
self. Hide()
game.py içinde __ServerCommand_Build() fonksiyonunu bul.
Kod:
def __ServerCommand_Build(self):
serverCommandList = {
...
}
Buraya aşağıdaki satırı ekle:
Kod:
"event_vote_open" : self.__VotePanelOpen,
__ServerCommand_Build fonksiyonu altına veya dosyanın uygun yerine şu yeni metodu ekle:
Kod:
def __VotePanelOpen(self):
import uiEventVote
self.voteDialog = uiEventVote.EventVoteDialog()
self.voteDialog.Show()