Oylama Sistemi [C++ Python]

  • Konuyu başlatan Konuyu başlatan kaya4572
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 3
  • Görüntüleme Görüntüleme 594
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

kaya4572

ITJA
Katılım
23 Haz 2010
Konular
62
Mesajlar
330
Online süresi
1mo 1d
Reaksiyon Skoru
208
Altın Konu
0
Başarım Puanı
149
Yaş
28
MmoLira
4,661
DevLira
51
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

Oylama Akışı (60 saniye süreli):​


  1. GM /oylamaac yazar (veya NPC’den başlatır)
  2. Oy sayıları 0'lanır, oylama_aktif = 1 yapılır
  3. Her oyuncunun ekranına panel açılır (event_vote_open)
  4. Oyuncular 1 kez oy kullanabilir (/vote X)
  5. 60 saniye sonra oylama_bitir tetiklenir
  6. 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.​




[CODE title="quest"]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[/CODE]



[CODE title="cmd.cpp"]başa ekle //
ACMD(do_oylamaac);

komut yerine//
{ "oylamaac", do_oylamaac, GM_LOW_WIZARD },[/CODE]

cmd_general.cpp – Komut işlevi


[CODE title="cmd_general.cpp"]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:ESC_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.");
}[/CODE]


Pack//

Pack'in root/ klasörüne uiEventVote.py adlı yeni bir dosya ekle. İçeriği şu şekilde:

[CODE title="uiEventVote.py"]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()[/CODE]


game.py içinde __ServerCommand_Build() fonksiyonunu bul.

Kod:
def __ServerCommand_Build(self):
    serverCommandList = {
        ...
    }

Buraya aşağıdaki satırı ekle:


[CODE title="game.py"]"event_vote_open" : self.__VotePanelOpen,[/CODE]

__ServerCommand_Build fonksiyonu altına veya dosyanın uygun yerine şu yeni metodu ekle:


[CODE title="game.py"]def __VotePanelOpen(self):
import uiEventVote
self.voteDialog = uiEventVote.EventVoteDialog()
self.voteDialog.Show()[/CODE]
 
Paylaşım için teşekkürler.

24 saat içerisinde görsel ekleyiniz
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)