- 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.
Ve ardından cmd_info[] dizisinin en altına (örneğin "warp",, "user" gibi satırların bulunduğu kısma) şunu ekle:
cmd_general.cpp
Global Değişkenler (dosya üstüne, #include altına):
do_quiz Fonksiyonu:
input_main.cpp Oyuncu Mesajı Cevap Kontrolü
Bu fonksiyon genelde şu şekilde başlar:
Burası sayesinde oyuncuların yazdığı mesajlar aktif soru ile eşleşirse sistem çalışır.
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
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