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

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

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