Konu: bi kaç soru
Tekil Mesaj gösterimi
  #8 (permalink)  
Alt 09-29-2009, 16:26
L4roXyL L4roXyL isimli Üye şimdilik offline konumundadır
Dirty coder,,.
 
Üyelik tarihi: Jul 2009
Yaş: 25
Mesajlar: 298
Beğenim: 13
Beğenilen: 136 \ 65
Tecrübe Puanı: 10
L4roXyL MeraklıL4roXyL MeraklıL4roXyL Meraklı
Standart

Senin yazdığın kod-daki sorunları açıklayayım sana.

-
Kod:
On *:snotice:*client conn*: {
  var %ipp = $remove($gettok($10,2,64),$chr(41)))
  hinc -m %ipp $+(%ipp,$9) 1
  if ($hget(%ipp,$+(%ipp,$9)) == 2) { notice $9 Clone Limitine ulaştınız. Lütfen başka cLone bağlamayın. }
  if ($hget(%ipp,$+(%ipp,$9)) == 3) { kill $9 Clone Yasak }
  hdel %ipp $+(%ipp,$9)
}
-

Senin yazdığın kod neler yapar?

Her giriş için ayrı bir tablo oluşturur. Tablonun ITEM(parça) kısmınada ip ile nick-i birleştirerek bir değer yükseltir. Kısacası senin yazdığın kod, bir kullanıcı(ki yazdığın kodda aynı kullanıcı oluyor bu, farklı kullanıcıda işlev yapmaz) sunucuya 2 veya 3 defa girip çıktığında işlev yapıyor. Ki bu işlevide hiçbir zaman yapmayacaktır. Çünki sen /if sorgularından bağımsız /hdel komutu ile parçayı sildiriyorsun. Kısacası bu kod sadece ayrı ayrı veriler ekler ve aynı zamanda eklediğin verileride siler. Hiçbir işlev yapmaz. Tablo-lar kalır, buda yoğun giriş/çıkışta RAM-ı zorlar.

-

Benim yazdığım kodu açıklayayım:

on $*:snotice:/client\s(connecting|exiting)/Si: {
;burada on snotice event-ı client connecting veya exiting mesajını algıladığında =>
var %_reg = $regml(1),%_ip = $remove($gettok($10,2,64),$chr(41))
;algılamayı regex kullanarak yaptığımız için $regml(1) giriş veya çıkışı belirler. bizde sonuçlanan işlevi %_reg değişkenine atıyoruz. ve aynı zamanda %_ip değişkeninede ip-i atıyoruz.
if ($(,%_reg) = connecting) {
;burada diyoruzki, eğer %_reg değişkeni connecting(giriş ise) =>
hinc -m _ips %_ip 1
;_ips ismindeki tabloya %_ip değişkenine atadığımız veriyi parça olarak ata ve bir değer yükselt.
if ($hget(_ips,%_ip) = 2) notice $9 vs.
;eğer _ips tablosundaki %_ip verisinin değeri 2-ye eşit olursa notice işlevini yap.
if ($hget(_ips,%_ip) = 3) { kill $9 :sebeb. | hdel _ips %_ip }
;eğer _ips tablosundaki %_ip verisinin değeri 3-e eşit olursa kullanıcıyı sunucudan kill ile kick-le. ve tablodaki değeri sil.(eğer burada tablodaki değeri silmezsek kullanıcı sunucuya giriş yaptığında (clone olsa dahi) hiçbir işlev gerçekleşmez.)
}
if ($(,%_reg) = exiting) $iif($hget(_ips,%_ip),hdec _ips %_ip 1)
;eğer %_reg değişkeni exiting ise(çıkış ise) =>
;eğer sunucudan çıkan kullanıcının ip numarası _ips tablosunda mevcut ise, o ip için atanan parçanın değerini bir değer düşür.
;bunu yapmamızın sebebi, kullanıcı(AYNI KULLANICI OLSA DAHİ) sunucuya 2 veya 2-den fazla giriş çıkış yaparsa yine işlev görmesin diye. çünki bu bir clone değildir. kısacası tekil hit-dir diyelim :)

}
__________________

Yardım
bölümünde konu açmadan önce, ilk öncelikle bölüm içerisinde arama yapın. Eğer sorununuzla ilgili bir konu bulamadığınız taktirde bu başlık içerisindeki kodlara göz atın.

Altı aylığına uzaklardayım.
Beni bilen iyi bilir, bilmeyen kendi gibi bilir.
C/co/cod/code^man.
Alıntı ile Cevapla
L4roXyL kullanıcısının bu postunu beğenenler.
WeiLSiDe (09-29-2009)
 
1 2 13 14 16 17 18 19 21 22 23 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 49 50 51 52 54 55 56 57 58 59 60 61 62 63 67