Krutzo 1
Krutzo
shrpnl 1
shrpnl
Best Studio 1
Best Studio
D 1
delimuratt
Aliyldrim 1
Aliyldrim
Mt2Hizmet 1
Mt2Hizmet
noisiv 1
noisiv
Manwe Work 1
Manwe Work
melankolıa18 1
melankolıa18
Agora Metin2 1
Agora Metin2
Cannn6161 1
Cannn6161
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

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
TC Kimlik Numarası Doğrulanmış Üye
Banlı
TM Üye
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::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.");
}[/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)

Geri
Üst