Neler yeni
XenForo Bannerlar

Foruma hoş geldin, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Kod Zeka Testi Sistemi [C++]

Fatih Bulut

Süper Üye
Katılım
6 Kas 2021
Mesajlar
2,985
Tepkime puanı
4,500
Puanları
113
Yaş
31
Konum
Türkiye
Dc
fatihbulut
Zeka Testi Sistemi Özeti:

Saatte 1 kez otomatik çalışabilir (ya da GM komutuyla manuel başlatılır).
Oyunculara sorular gönderilir (örnek: “Türkiye'nin başkenti nedir?”).
Oyuncular cevabı doğrudan sohbet ekranına yazar.
İlk doğru cevaplayan oyuncu ödül alır.
Soru listesi .txt dosyasından çekilir.

question_list.txt (sorular dosyası)​

Sunucu dizinine oluştur:

cmd.cpp GM Komutunu Tanımla​

cmd.cpp içinde aşağıdaki ACMD tanım satırına ekle:

Kod:
ACMD(do_quiz); // Yeni komut fonksiyonu

Ve ardından cmd_info[] dizisinin en altına (örneğin "warp",, "user" gibi satırların bulunduğu kısma) şunu ekle:

Kod:
{ "quiz", do_quiz, 0, POS_DEAD, GM_HIGH_WIZARD },

cmd_general.cpp
Global Değişkenler (dosya üstüne, #include altına):

Kod:
std::string g_current_question = "";
std::string g_current_answer = "";
bool g_quiz_active = false;
DWORD g_quiz_start_time = 0;

do_quiz Fonksiyonu:

Kod:
ACMD(do_quiz)
{
    FILE* fp = fopen("question_list.txt", "r");
    if (!fp)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Soru dosyası açılamadı.");
        return;
    }

    std::vector<std::pair<std::string, std::string>> questions;
    char line[256];

    while (fgets(line, sizeof(line), fp))
    {
        std::string str(line);
        size_t sep = str.find('|');
        if (sep != std::string::npos)
        {
            std::string q = str.substr(0, sep);
            std::string a = str.substr(sep + 1);
            if (!a.empty() && a[a.length() - 1] == '\n') a.pop_back();
            questions.push_back({q, a});
        }
    }
    fclose(fp);

    if (questions.empty())
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Soru bulunamadı.");
        return;
    }

    int idx = number(0, questions.size() - 1);
    g_current_question = questions[idx].first;
    g_current_answer = questions[idx].second;
    g_quiz_active = true;
    g_quiz_start_time = get_dword_time();

    BroadcastNotice(" Zeka Sorusu: %s", g_current_question.c_str());
    BroadcastNotice("Cevabı direkt yazın. İlk doğru yazan ödül kazanır!");
}

input_main.cpp Oyuncu Mesajı Cevap Kontrolü

CInputMain::Chat(...) Fonksiyonunu Bul​


Bu fonksiyon genelde şu şekilde başlar:

Kod:
int CInputMain::Chat(LPCHARACTER ch, const char* data, size_t len)

Kod:
if (g_quiz_active && strcasecmp(data, g_current_answer.c_str()) == 0)
{
    g_quiz_active = false;
    BroadcastNotice(" Tebrikler %s! Doğru cevabı verdin: %s", ch->GetName(), g_current_answer.c_str());

    // Ödül: 1.000.000 Yang ver
    ch->PointChange(POINT_GOLD, 1000000);
    return CHAT_BLOCK;
}

Burası sayesinde oyuncuların yazdığı mesajlar aktif soru ile eşleşirse sistem çalışır.

question_list.txt Dosyasını Sunucu Dizinine Ekle​


Bu dosyayı game dosyasının çalıştığı dizine (örneğin share/locale/turkey/ gibi) ekle.

bu kadar

oyuna gir
/quiz komutunu kullan
Sorunun çıktığını gör
Doğru cevabı yaz
 

Forumdan daha fazla yararlanmak için giriş yapın yada üye olun!

Forumdan daha fazla yararlanmak için giriş yapın veya kayıt olun!

Kayıt ol

Forumda bir hesap oluşturmak tamamen ücretsizdir.

Şimdi kayıt ol
Giriş yap

Eğer bir hesabınız var ise lütfen giriş yapın

Giriş yap

Tema düzenleyici

Tema özelletirmeleri

Grafik arka planlar

Granit arka planlar