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