IRCForumu.ORG

IRCForumu.ORG (https://www.ircforumu.org/)
-   Genel IRCD (Sunucu, Servis, Botlar, Korumalar) (https://www.ircforumu.org/genel-ircd-sunucu-servis-botlar-korumalar/)
-   -   Plaka Tahmin Oyun TCL (https://www.ircforumu.org/genel-ircd-sunucu-servis-botlar-korumalar/154236-plaka-tahmin-oyun-tcl.html)

No_FeaR 17 Kasım 2025 00:05

Plaka Tahmin Oyun TCL
 
Kod:

# Plaka Tahmin Oyunu - Eggdrop TCL
# IRCd | Telegram Bot DevelOper No_FeaR | CevatKahraman
# Yine Kendim İçin Telegram Botum İçin Geliştirmiş Olduğum PlakaTahminOyun Script'i

# Puanlama değişkenleri
set POINT_CORRECT 5
set POINT_WRONG  -1

set game_running 0
set current_plate ""
array set scores {}

# Türkiye plaka listesi
set plates {
    "01 Adana"
    "06 Ankara"
    "07 Antalya"
    "16 Bursa"
    "20 Denizli"
    "34 İstanbul"
    "35 İzmir"
    "42 Konya"
    "44 Malatya"
    "61 Trabzon"
    "65 Van"
}

# Oyun başlat
bind pub - "!basla" start_game
proc start_game {nick uhost hand chan text} {
    global game_running plates current_plate
    if {$game_running} {
        putserv "PRIVMSG $chan :Oyun zaten devam ediyor $nick!"
        return
    }
    set game_running 1
    new_question $chan
}

# Yeni soru üret
proc new_question {chan} {
    global plates current_plate
    set current_plate [lindex $plates [expr {int(rand()*[llength $plates])}]]
    set plate_num [lindex $current_plate 0]
    putserv "PRIVMSG $chan :🚗 Yeni plaka → $plate_num | Şehri tahmin edin!"
}

# Oyunu durdur (sadece yetkililer)
bind pub - "!dur" stop_game
proc stop_game {nick uhost hand chan text} {
    global game_running
    if {!$game_running} {
        putserv "PRIVMSG $chan :Şu anda oyun yok $nick."
        return
    }
    if {[matchattr $hand o|o $chan]} {
        set game_running 0
        putserv "PRIVMSG $chan :$nick oyunu durdurdu!"
    } else {
        putserv "PRIVMSG $chan :$nick bu komutu kullanamaz (sadece yetkililer)."
    }
}

# Tahmin kontrolü
bind pubm - "*" check_guess
proc check_guess {nick uhost hand chan text} {
    global game_running current_plate scores POINT_CORRECT POINT_WRONG
    if {!$game_running} { return }
    set plate_city [lindex $current_plate 1]

    if {[string tolower $text] eq [string tolower $plate_city]} {
        # Doğru cevap
        putserv "PRIVMSG $chan :🎉 Doğru bildin $nick! Plaka: $current_plate (+$POINT_CORRECT puan)"
        if {![info exists scores($nick)]} { set scores($nick) 0 }
        incr scores($nick) $POINT_CORRECT
        new_question $chan
    } else {
        # Yanlış cevap
        if {![info exists scores($nick)]} { set scores($nick) 0 }
        incr scores($nick) $POINT_WRONG
        putserv "PRIVMSG $chan :❌ Yanlış cevap $nick! ($POINT_WRONG puan)"
    }
}

# Kullanıcı kendi puanı
bind pub - "!puan" show_score
proc show_score {nick uhost hand chan text} {
    global scores
    if {![info exists scores($nick)]} {
        putserv "PRIVMSG $chan :$nick henüz puanın yok."
    } else {
        putserv "PRIVMSG $chan :$nick senin puanın: $scores($nick)"
    }
}

# Tüm puanlar
bind pub - "!puanlar" show_scores
proc show_scores {nick uhost hand chan text} {
    global scores
    if {[array size scores] == 0} {
        putserv "PRIVMSG $chan :Henüz kimse puan kazanmadı."
        return
    }
    set result "🏆 Puan Tablosu: "
    foreach player [array names scores] {
        append result "$player=$scores($player) "
    }
    putserv "PRIVMSG $chan :$result"
}

Test Sunucum yok.
Kendim için Telegram'da yapmıştım.
TCL'ye çevirdim.
Çalışır diye düşünüyorum. :)

Brittle 17 Kasım 2025 09:08

Çok keyifli bir oyun olacak gibi duruyor.. Emeğine düşüncene sağlık..

No_FeaR 20 Kasım 2025 22:17

Toplam 1 Eklenti bulunuyor.
Tekrardan Merhabalar,
Yeni TCL Dosyasını Düzenledim.
Bir Öncekinde Hata Vardı.. ^_^

Kod:

namespace eval PlakaOyun {
    variable kanal "#Plaka"
    variable puan_degeri 10
    variable bekleme_suresi 5
    variable zaman_asimi 30
    variable admin_nick "No_FeaR"
    variable puan_dosyasi "scripts/plaka.puan"

    variable oyun_durumu 0
    variable aktif_plaka ""
    variable aktif_sehir ""
    variable timer_id ""
    variable cevap_bekleniyor 0
   
    # TEKRARSIZ SORU ICIN DEGISKENLER
    variable son_sorulanlar {}
    variable hatirlama_limiti 10

    # ŞEHİR LİSTESİ
    variable sehirler {
        "01" "Adana" "02" "Adıyaman" "03" "Afyon" "04" "Ağrı"
        "05" "Amasya" "06" "Ankara" "07" "Antalya" "08" "Artvin"
        "09" "Aydın" "10" "Balıkesir" "11" "Bilecik" "12" "Bingöl"
        "13" "Bitlis" "14" "Bolu" "15" "Burdur" "16" "Bursa"
        "17" "Çanakkale" "18" "Çankırı" "19" "Çorum" "20" "Denizli"
        "21" "Diyarbakır" "22" "Edirne" "23" "Elazığ" "24" "Erzincan"
        "25" "Erzurum" "26" "Eskişehir" "27" "Gaziantep" "28" "Giresun"
        "29" "Gümüşhane" "30" "Hakkari" "31" "Hatay" "32" "Isparta"
        "33" "Mersin" "34" "İstanbul" "35" "İzmir" "36" "Kars"
        "37" "Kastamonu" "38" "Kayseri" "39" "Kırklareli" "40" "Kırşehir"
        "41" "Kocaeli" "42" "Konya" "43" "Kütahya" "44" "Malatya"
        "45" "Manisa" "46" "Maraş" "47" "Mardin" "48" "Muğla"
        "49" "Muş" "50" "Nevşehir" "51" "Niğde" "52" "Ordu"
        "53" "Rize" "54" "Sakarya" "55" "Samsun" "56" "Siirt"
        "57" "Sinop" "58" "Sivas" "59" "Tekirdağ" "60" "Tokat"
        "61" "Trabzon" "62" "Tunceli" "63" "Şanlıurfa" "64" "Uşak"
        "65" "Van" "66" "Yozgat" "67" "Zonguldak" "68" "Aksaray"
        "69" "Bayburt" "70" "Karaman" "71" "Kırıkkale" "72" "Batman"
        "73" "Şırnak" "74" "Bartın" "75" "Ardahan" "76" "Iğdır"
        "77" "Yalova" "78" "Karabük" "79" "Kilis" "80" "Osmaniye"
        "81" "Düzce"
    }

    # KOMUTLAR
    bind pub - !basla PlakaOyun::baslat
    bind pub - !dur PlakaOyun::durdur
    bind pub - !puan PlakaOyun::puan_goster
    bind pub - !top10 PlakaOyun::top10_goster
    bind pubm - * PlakaOyun::cevap_kontrol
   
    # GIRIS UYARISI
    bind join - * PlakaOyun::karsilama

    # HEX KODLU GARANTI TEMIZLEME
    # Bu fonksiyon dosya formatindan ve kullanici encodinginden bagimsiz calisir.
    proc temizle {text} {
        # 1. Adim: Once renk kodlarini ve kalin yazilari temizle (Ctrl+K vb.)
        regsub -all {\003[0-9]{0,2}(,[0-9]{0,2})?|\017|\037|\002|\026|\003} $text "" text

        # 2. Adim: UTF-8 Karakterleri Byte Kodlariyla Yakala ve ASCII yap
        # (Kullanici sunucuya UTF-8 gonderiyorsa burasi yakalar)
        set utf8_map[list \
            \xc4\xb1 i \
            \xc4\xb0 i \
            \xc3\xbc u \
            \xc3\x9c u \
            \xc5\x9f s \
            \xc5\x9e s \
            \xc3\xb6 o \
            \xc3\x96 o \
            \xc3\xa7 c \
            \xc3\x87 c \
            \xc4\x9f g \
            \xc4\x9e g \
        ]
        set text [string map $utf8_map $text]

        # 3. Adim: ANSI (ISO-8859-9) Karakterleri Byte Kodlariyla Yakala ve ASCII yap
        # (Script ANSI kayitliysa veya kullanici ANSI ise burasi yakalar)
        set ansi_map[list \
            \xfd i \
            \xdd i \
            \xfc u \
            \xdc u \
            \xfe s \
            \xde s \
            \xf6 o \
            \xd6 o \
            \xe7 c \
            \xc7 c \
            \xf0 g \
            \xd0 g \
        ]
        set text [string map $ansi_map $text]
       
        # 4. Adim: Standart harfleri kucult ve kalanlari temizle
        set text [string tolower $text]
        # Ekstra guvenlik icin I ve i donusumu
        set text [string map { "ı" "i" "İ" "i" } $text]
       
        return [string trim $text]
    }
   
    proc karsilama {nick host hand chan} {
        variable kanal
        variable admin_nick
       
        if {$chan != $kanal} { return }
        if {$nick == $::botnick} { return }
       
        puthelp "NOTICE $nick :Bu Bot ve TCL No_FeaR Tarafından tasarlanmıştır."
    }

    proc baslat {nick host hand chan arg} {
        variable oyun_durumu
        variable kanal
        variable admin_nick
        variable son_sorulanlar
       
        if {$chan != $kanal} { return }
        if {$nick != $admin_nick && ![isop $nick $chan]} { return }
        if {$oyun_durumu == 1} { putserv "PRIVMSG $chan :Oyun zaten aktif."; return }

        set oyun_durumu 1
        set son_sorulanlar {}
        putserv "PRIVMSG $chan :\002PLAKA OYUNU BASLADI!\002 (Cevaplarda Turkce karakter kullanabilirsiniz.)"
        soru_sor
    }

    proc durdur {nick host hand chan arg} {
        variable oyun_durumu
        variable kanal
        variable admin_nick

        if {$chan != $kanal} { return }
        if {$nick != $admin_nick && ![isop $nick $chan]} { return }
       
        set oyun_durumu 0
        foreach t [utimers] {
            if {[string match "*PlakaOyun::*" [lindex $t 1]]} { killutimer [lindex $t 2] }
        }
        putserv "PRIVMSG $chan :\002Oyun bitti.\002"
    }

    proc soru_sor {} {
        variable sehirler
        variable aktif_plaka
        variable aktif_sehir
        variable kanal
        variable cevap_bekleniyor
        variable zaman_asimi
        variable timer_id
        variable oyun_durumu
        variable son_sorulanlar
        variable hatirlama_limiti

        if {$oyun_durumu == 0} { return }

        set toplam [llength $sehirler]
       
        while {1} {
            set rand_index [expr {int(rand() * ($toplam / 2)) * 2}]
            set secilen_plaka [lindex $sehirler $rand_index]
           
            if {[lsearch -exact $son_sorulanlar $secilen_plaka] == -1} {
                set aktif_plaka $secilen_plaka
                set aktif_sehir [lindex $sehirler [expr $rand_index + 1]]
               
                lappend son_sorulanlar $aktif_plaka
                if {[llength $son_sorulanlar] > $hatirlama_limiti} {
                    set son_sorulanlar [lreplace $son_sorulanlar 0 0]
                }
                break
            }
        }

        set cevap_bekleniyor 1

        putserv "PRIVMSG $kanal :\002SORU:\002 \00312$aktif_plaka\003 plakasi hangi ilimize aittir?"
        set timer_id [utimer $zaman_asimi PlakaOyun::zaman_doldu]
    }

    proc cevap_kontrol {nick host hand chan text} {
        variable kanal
        variable aktif_sehir
        variable cevap_bekleniyor
        variable timer_id
        variable bekleme_suresi
        variable puan_degeri

        if {$chan != $kanal || $cevap_bekleniyor == 0} { return }

        # Gelen cevabi ve dogru cevabi HEX filtresinden gecirip esitle
        set temiz_cevap [temizle $text]
        set temiz_hedef [temizle $aktif_sehir]
       
        # DEBUG (Sorun olursa bu satirin basindaki # isaretini kaldirip .log dosyasina bakabilirsin)
        # putlog "DEBUG: Gelen($temiz_cevap) == Hedef($temiz_hedef)"

        if {[string match *$temiz_hedef* $temiz_cevap] && [string length $temiz_hedef] == [string length $temiz_cevap]} {
            set cevap_bekleniyor 0
           
            foreach t [utimers] {
                if {[string match "*PlakaOyun::*" [lindex $t 1]]} { killutimer [lindex $t 2] }
            }

            puan_ekle $nick $puan_degeri
           
            putserv "PRIVMSG $kanal :\00303TEBRIKLER $nick!\003 Dogru cevap: \002$aktif_sehir\002 ($puan_degeri Puan)"
            utimer $bekleme_suresi PlakaOyun::soru_sor
        }
    }

    proc zaman_doldu {} {
        variable kanal
        variable aktif_sehir
        variable cevap_bekleniyor
        variable bekleme_suresi

        set cevap_bekleniyor 0
        putserv "PRIVMSG $kanal :\002SURE DOLDU!\002 Cevap: \004$aktif_sehir\004 idi."
        utimer $bekleme_suresi PlakaOyun::soru_sor
    }

    proc puan_ekle {nick puan} {
        variable puan_dosyasi
        array set skorlar {}
        if {[file exists $puan_dosyasi]} {
            set f [open $puan_dosyasi r]
            array set skorlar [read $f]
            close $f
        }
        if {[info exists skorlar($nick)]} {
            incr skorlar($nick) $puan
        } else {
            set skorlar($nick) $puan
        }
        set f [open $puan_dosyasi w]
        puts $f [array get skorlar]
        close $f
    }

    proc puan_goster {nick host hand chan arg} {
        variable puan_dosyasi
        array set skorlar {}
        if {[file exists $puan_dosyasi]} {
            set f [open $puan_dosyasi r]
            array set skorlar [read $f]
            close $f
        }
        if {[info exists skorlar($nick)]} {
            putserv "PRIVMSG $chan :$nick, puanin: \002$skorlar($nick)\002"
        } else {
            putserv "PRIVMSG $chan :$nick, puanin yok."
        }
    }

    proc top10_goster {nick host hand chan arg} {
        variable puan_dosyasi
        if {![file exists $puan_dosyasi]} {
            putserv "PRIVMSG $chan :Liste bos."
            return
        }
        set f [open $puan_dosyasi r]
        array set skorlar [read $f]
        close $f
        set liste {}
        foreach {oyuncu p} [array get skorlar] {
            lappend liste[list $oyuncu $p]
        }
        set sirali [lsort -integer -decreasing -index 1 $liste]
        putserv "PRIVMSG $chan :\002--- TOP 10 ---\002"
        set sayac 1
        foreach item $sirali {
            if {$sayac > 10} break
            putserv "PRIVMSG $chan :$sayac. [lindex $item 0] - [lindex $item 1]"
            incr sayac
        }
    }
}
putlog "Plaka Tahmin Oyun Bot TCL No_FeaR Yüklendi.."

Bunu kullanabilirsiniz..

Ekran Görüntüsü; [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]


Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 05:30.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.