Konu: bi kaç soru
Tekil Mesaj gösterimi
  #8  
Alt 29 Eylül 2009, 16:26
Avatar Yok
L4roXyL L4roXyL isimli Üye şimdilik offline konumundadır
 Chief 

mS Puan: 1031
mS Derece: L4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisi
 
Üyelik tarihi: 10 Temmuz 2009
Yaş: 39
Mesajlar: 339
Konular: 100
Eklentiler: 3
Alınan Teşekkür: 146
Yapılan Teşekkür: 0
Mentioned: 0 Post(s)
Tagged: 0 Thread(s)
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 :)

}
__________________
C/co/cod/code^man.
Alıntı ile Cevapla
 
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 68 69 70 71 72 73 74 75 76