mavzermete 1
mavzermete
xranzei 1
xranzei
Manwe Work 1
Manwe Work
noisiv 1
noisiv
Hikaye Ekle

Zeka Testi Sistemi [C++]

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

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

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:

[CODE lang="css" title="cmd.cpp"]ACMD(do_quiz); // Yeni komut fonksiyonu
[/CODE]


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

[CODE title="cmd.cpp"]{ "quiz", do_quiz, 0, POS_DEAD, GM_HIGH_WIZARD },
[/CODE]


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

[CODE lang="css" title="c#includeal.cpp"]std::string g_current_question = "";
std::string g_current_answer = "";
bool g_quiz_active = false;
DWORD g_quiz_start_time = 0;[/CODE]

do_quiz Fonksiyonu:

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

input_main.cpp Oyuncu Mesajı Cevap Kontrolü

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


Bu fonksiyon genelde şu şekilde başlar:
[CODE title="input_main.cpp"]int CInputMain::Chat(LPCHARACTER ch, const char* data, size_t len)
[/CODE]

[CODE title="input_main.cpp"]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;
}[/CODE]

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
 
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