chat eczaonline.com yazılım uzmanı

Ders: Hash Tables

L4roXyL

Profesyonel
Katılım
16 Eki 2011
Mesajlar
124
Beğeniler
2
#1
Ders: Hash tablosu (Hash table)
Tarih: 9 Şubat Cumartesi 2008
Yazan: L4roXyL - (Hasan AYDENİZ)


İlk öncelikle hash tables nedir?
Aşşağıdaki şekilde bir tablo düşünün;

Kod:
 /-----Tablo-----\
<  ITEM  -  DATA  >
 \---------------/
   Parça |  Değer
         |
         |
         |
Yukarı görmüş olduğunuz tablo, hash tablosunun mantığıdır. Yani ini dosyası gibi.
Yani veriler bu şekilde kayıt olmaktadır. Tabi kayıt derken, hdd(hard disk)'e kayıt etmez(Tabi isterseniz edebilirsiniz)
Hash tablosunun üzerinde yaptığınız tüm işlevler, random access memory(ram)'da gerçekleşir. Bunun için, gayet hızlıdır.

Komut'lara geçelim;

1- Tablo oluşturma: /hmake -s <name> <N>
Buradaki -s parametresi, tabloyu oluşturduğunuza dair uyarı almak için kullanılır.
Yani kullanıp/kullanmamanız tablonun oluşumunu etkilemez.
Komut'daki <N> kısmına, tablonun slot sayısı yazılır. Yani kaç slot'luk tablo oluşturacağınızı <N> kısmına girersiniz.
Fakat bu <N> kısmına yazdığınız, sayı 10'da olsa 100'de olsa, sonsuz bir şekilde parça alabilmektedir.
Eğer slot sayısı girmezseniz, 100 slot'luk bir tablo oluşturmuş olursunuz.
Örnek kullanım: /hmake -s deneme 100


2- Tablo(yu/ları) serbest bırakma: /hfree -sw <name>
Buradaki -s patametresi, yine tabloyu serbest bıraktığınıza dair uyarı almak için kullanılır.
Diğer -w parametresi ise, wildcard(*,?) kullanarak tablo yada tabloları serbest bırakmanıza yarar.
Örneğin; /hfree -sw *deneme* (İçinde deneme geçen tüm tablolar, serbest bırakılır)
Örneğin; /hfree -s deneme (Sadece deneme tablosu serbest bırakılır)


3- Tabloya parça ekleme: /hadd -smbczuN <name> <item> [data | &binvar]
Bu komut gerçekten öğrenmek isteyenlerin, dikkat ile dinlemesi gereken komut'dur.
Komut temel olarak, belirtilen tabloya parça eklemek için kullanılır.
Tabi parametreler ile, daha geniş bir kapsamı vardır.

Parametreler;
-s: Yine tabloya parça eklendiğine dair bilgilendirme mesajı almak için kullanılır.
-m: Bu parametre, belirtilen tablo-ismi daha önce oluşturulmamış ise, şimdi oluşturmak için kullanılır.
-z: Bu parametre, data(değer) kısmına girdiğiniz değer'i, saniye'de bir 1 değer düşürerek sıfır yapar. Ve sıfır olduğunda, slot silinir.
-uN: Bu parametre, eklediğiniz parçayı "N" kısmına girilen saniye sona erdiğinde, slot tablodan silecektir.

NOT: Diğer "bc" parametreleri binary variable(/help binary files) ile alakalıdır. İşinize yaracağını düşünmediğim için tam bilgiyi vermedim. İlla'da ne olduklarını öğrenmek istiyorsanız, söyleyin anlatırım.(Beni binary vs bulaştırmayın) .)

/hadd için örneklemeler;
Yukarıdaki gibi bir tablo hayal edin;

Kod:
-----Tablo-----    
ITEM   -   DATA
---------------
Parça  |  Değer
       |
       |
Örneğin; /hadd -sm deneme deneme 15 yaptığımız'da tablo;

Kod:
-----deneme----
ITEM   -   DATA
---------------
deneme |     15
       |
       |
Şeklinde değişecektir.
Örneğin bir parça daha ekledik; /hadd -s deneme dnm2 100

Kod:
----deneme-----   
ITEM    -  DATA
---------------
deneme  |    15
dnm2    |   100
        |
Şeklini alıcaktır.


4- Tablodaki herhangi bir parçanın değerini yükseltmek veya parça ile beraber değer yükletmek vs: /hinc -smzcuN <tablo-ismi> <parça> <N>

Normal'de mIRC help dosyasında, bu komut üzerinde hiç durulmamış.
Ama gerçekten, işinize yarayacak komutlardan bir tanesi(özellikle flood vb. koruma yazmak isteyenler için)

Parametreler;
-s: Yine uyguladığınız işlevin gerçekleşip/gerçekleşmediği hakkında uyarı almak için kullanılır.
-m: Daha önce tablo oluşturulmadıysa, tabloyu şimdi oluşturur.
-z: Yükselttiğiniz değeri veya değer biçtiğiniz değeri saniye'de bir, bir değer düşürerek sıfır'a indirir. Ve sıfır'a indiği zaman, değer ve parça tablodan silinir.
-c: Bu parametre ise, -z parametresinin yaptığı işlev'in tam tersini yapar. Data(değer) kısmına, girdiğiniz değer kadar yükseltir. Ve her saniye girdiğiniz değer'i bir arttırır. Eğer değer girmezseniz, sıfır'dan başlı***** her saniye belirttiğiniz parça'nın data(değer)sını bir arttırır.
-uN: Bu parametre, eklediğiniz parçayı "N" kısmına girilen saniye sona erdiğinde, tablodan silecektir. Eğer varolan bir parçanın üzerine, data(değer) eklerseniz, saniye sona erdiğinde değer ile beraber parçayıda yani slot'u silecektir.

NOT: /hinc komutun'da, eklediğiniz yeni bir parça için data(değer) girmezseniz, otomatik olarak "1" değeri atanacaktır. Yani örneğin; /hinc -ms deneme dnm yaptığınız'da, dnm parçasının değeri 1 olucaktır. Çünki adı üstünde /hinc kullanıyorsunuz .)


5- Tablodaki herhangi bir parçanın değerini düşürmek veya parça ile beraber değer düşürmek: /hdec -smcuN <tablo-ismi> <parça> <N>

Parametreler;
-s: Yine uyguladığınız işlevin gerçekleşip/gerçekleşmediği hakkında uyarı almak için kullanılır.
-m: Daha önce tablo oluşturulmadıysa, tabloyu şimdi oluşturur.
-c: Daha önce biçmiş olduğunuz parça'daki değeri, saniye'de bir 1 değer düşürür. Sıfır'ı bulduğunda, slot'u siler.
-uN: Aynı şekilde, "N" kısmına girilen saniye sona erdiğinde, parça silinir. Bakın dikkatinizi çekiyorum yanlış anlamayın. Mesela diyelim, deneme ismindeki tabloda deneme parçası var. Ve bu deneme parçasının data(değer)'sı 100. Siz eğer, /hdec -su10 deneme deneme 20 yaparsanız, deneme parçasının değer'i 80'e düşer. Ve 10 saniye sonra deneme parçaso komple silinir. Yani 10 saniye sonra, tekrar 100 olmasını beklemeyin. .)

NOT: /hdec komutun'da, eklediğiniz yeni bir parça için data(değer) girmezseniz, eklediğiniz parça otomatik olarak -1 değerini alıcaktır.

/HINC & /HDEC örneklemeleri;

Yine yukarı'daki tabloyu hayal edin;

Kod:
----deneme-----   
ITEM   -   DATA
---------------
deneme |     15
dnm2   |    100
       |
Örneğin; /hdec -s deneme dnm2 20 yaptık.

Kod:
----deneme-----   
ITEM   -   DATA
---------------
deneme |     15
dnm2   |     80
       |
Şeklini alıcaktır.

Önemli not: /hinc veya /hdec ile yeni bir parça oluşturduğunuz'da, oluşturmuş olduğunuz parça tabloda en son sırayı alıcaktır. Yani örneğin; /hinc -s deneme dnm 100 yaptığınız'da tablo;

Kod:
----deneme-----   
ITEM   -   DATA
---------------
deneme |     15
dnm2   |     80
dnm    |    100
Şeklini alıcaktır.


6- Tablo'dan belirtilen parça yada parçaları silmek: /hdel -sw <name> <item>

Bu komut;

Kod:
----deneme-----   
ITEM   -   DATA
---------------
deneme |     15
dnm2   |     80
dnm    |    100
Örnek tablosundaki ITEM(parça(ları)) silmek için kullanılır.

Örneğin; /hdel -s deneme dnm yaptığınız'da, deneme tablosunda "dnm" slot'u tamamen silinir.
Yani bakın dikkat edin, eğer bir parça silinirse karşısındaki değer'de otomatik olarak silinecektir.
Çünki, parça değer'e bağlı değildir ama değer ğarçaya bağlıdır.

Parametreler;
-w: Wildcard(?,*) kullanarak parça(lar) silmek için kullanılır.
Örneğin; /hdel -sw deneme dnm* yaptığınız'da, deneme tablosunda'ki 2 parça(dnm2 ve dnm) tamamen silinecektir.


7- Tablo'yu belirtilen dosyaya kayıt etmek: /hsave -sbniau <name> <filename> [section]

Bu komut, herhangi bir tabloyu belirttiğiniz dosyaya kayıt etmek için kullanılır.

Örnek kullanım: /hsave -i deneme deneme.deneme (Deneme tablosunu, deneme.deneme dosyasına kayıt ediyoruz)

Parametreler;
-s: Kayıt işleminin gerçekleştiğini görmek için kullanabilirsiniz.
-n: Tabloyu kayıt ederken, sadece data(değer)lerı kayıt eder. Yani değer'e ait olan, parça'lar kayıt edilmez. Parça isimleri yerine, slot numaraları kayıt edilir.
-i: Kayıt dosyasının bir ini dosyası olduğunu belirtirsiniz. Bu ne işe yarar? Demeyin.
Eğer kayıt edilen dosyanın ini dosyası olduğunu belirtirseniz, kayıt ettiğiniz dosyayı açtığında;

Kod:
[hashtables]
parça=değer
parça2=değer2
Şeklinde düzenli bir şekilde görebilirsiniz.
Eğerini dosyası olduğunu belirtmezseniz, parça-değer-parça-değer şeklinde yan-yana kayıt etmiş olursunuz. Daha doğrusu alt alt'a kayıt edersiniz ama, dosyayı açtığınız'da yan-yana gözükür. Arada bir $crlf identifier'ı vardır.
-a: Eğer kayıt edeceğimiz dosya ismi, mIRC klasöründe mevcut ise; aynı dosyanın üzerine yazacağınızı belirtirsiniz. Eğer belirtmezseniz, dosyayı kayıt etmeden önce mIRC klasöründeki aynı dosyayı silecek ve yeniden oluşturacaktır.
NOT: Diğer (-b) parametresi yine binary files ile ilgilidir. Sizi ilgilendirtmez. .) Zaten binary files'dan anlıyacak seviyeye gelmiş olsanız, bu dersi "bakalım nasıl yazmış?" şeklinde okursunuz. Çünki zaten bu yollardan geçmişsinizdir.
-u: Bu parametre gerçekten önemli. Şimdi mesela diyelim, (-uN) parametresi ile tablonuzu kayıt etmeden önce, tablonuza parça eklediniz. Eğer /hsave komutun'da normalde, bu parçalar(X süre içerisinde silinecek olan) kayıt edilmez. İşte buradaki "-u" parametresi, bu parçaların'da kayıt edilebilmesini sağlamaktadır.

ÖNEMLİ not: /hsave komutunda, -i(ini) parametresini kullanıpta [section] kısmını boş bırakırsanız;

[hashtables]
parça=değer
parça2=değer2

Şeklinde kayıt edilecektir. Eğer boş bırakmazsanız(/hsave -is deneme deneme.hash deneme) [hashtables] kısmına, section kısmına yazdığınız isim gelicektir.


8- Kayıtlı olan dosyadaki verileri, hash tablosuna yükletmek: /hload -sbni <name> <filename> [section]

Bu komut, daha önce kayıt ettiğiniz(/hsave) hash tablolarını, belirttiğiniz tabloya yükletmek için kullanılır.

Parametreler;

ÖNEMLİ NOT: Herhangi bir hash kayıtlı dosyasını, bir tabloya yüklemek için, ilk başta o tabloyu oluşturun "/hmake deneme" şeklinde.
-s: Dosyanın tabloya yüklendiğini görmek için kullanabilirsiniz.
-n: Yükletilen dosyadaki, item(parça)'ları numara olarak yükletir. Yani bir parçaları yüklemez. Sadece değer'leri yükler.
-i: Yükletilen dosyanın, ini dosyası olduğunu belirtir.

Önemli not(/hload & /hsave): Eğer yükletilen dosya, ini dosyası olarak kayıt edilmiş ise ve siz "-i" kullanma***** yükletirseniz, dosyadaki item(parça)/data(değer)'ler hash tablosunda karmakarışık bir şekilde birbirine girecektir. Yani kısacası verim alamazsınız.
Ek bilgi(/hload & /hsave): Yani kısacası, tabloyu "ini" olarak kaydetdiyseniz, "ini" olarak yükletin. Normal kaydettiyseniz, normal olarak yükletin.

-
Komutlar bu kadar.
-

Sıra identifier'larda.(Bir çok şeye olanak sağlıyan identifier'ları görünce, hash tablosunu bundan sonra kullanmaya karar vericeksiniz)

Identifier'lar:

1- $hget(name/N) - Prop: size
Bu identifier, belirtilen isim yada numaraya ait tablonun var olup olmadığını kontrol eder.
Örneğin; //echo -a $hget(0) yaptığınız'da, kaç adet tablo olduğunu öğrenebilirsiniz.
Örneğin; //echo -a $hget(3) yaptığınız'da, eğer 3. tablo var ise, tablonun imini öğrenebilirsiniz.
Prop kullanımı:
Örnek kullanım; //echo -a $hget(deneme).size (Deneme ismindeki tablonun, kaç slot'dan oluştuğunu gösterir.)


2- $hget(name/N, item) - Prop: unset
Bu identifier, belirtilen topladaki parça(data)'nın değerini verir.
Deneme: "/hadd -ms deneme dnm 100" yaptık.
Örneğin; //echo -a $hget(deneme,dnm) yaptığımız'da 100 olarak döner. Yani değer'ini alırız. Eğer parçaya atanmış bir değer yok ise, hiçbir cevap alınmaz.
Örneğin; //echo -a $hget(deneme,dnm).item veya //echo -a $hget(deneme,dnm).data yaptığımız'da, "dnm" parçasının bulunduğu slot'un rakamını verir.
Örneğin; //echo -a $hget(deneme,0).item yaptığımız'da, deneme tablosunda kaç adet parça'nın bulunduğunu öğreniriz. 0 yerine 1 yazarsanız 1. sıradaki parçayı görürsünüz. 2 yazarsanız 2. sıradaki vs vs.
Prop kullanımı:
Deneme: 100 saniye sonra silinecek bir değer ekleyelim deneme2 tablosuna. Ve "unset" prop'unun işlevini anlıyalım. Ekleyelim;(/hadd -mu100 deneme2 silincek 100)
Ve şimdi: //echo -a $hget(deneme2,silincek).unset yaptığımız'da devamlı değişen rakamları görürüz. Bu rakamlar, "silincek" parçasının silinmesine kalan saniyeyi vermektedir.
Yani silinecek olan, parçanın kaç saniye sonra silineceğini öğreniyoruz.


3- $hfind(name/N, text, N, M) - Prop: data
Bu identifier, belirtilen tablo içindeki parçalarda, text kısmına yazılan text'i "N" kısmına yazılan item'de, "M" kısmına yazılan parametre ile arar.
İlk önce deneme yapacağımız için, bir tablo oluşturup parçalar yerleştirelim.

Kod:
alias tablo {
  if (!$hget(tablo) { hmake -s tablo 100 }
  hadd -s tablo deneme1 100 | hadd -s tablo deneme2 200 | hadd -s tablo deneme3 300
  hadd -s tablo falan1 100 | hadd -s tablo falan2 100 | hadd -s tablo falan3 100
  hadd -s tablo yaa1 100 | hadd -s tablo ya22 200 | hadd -s tablo yaa33 300
}
Bknz: /tablo yazın. Ve aşşağıdaki örneklere 4 gözünüzle bakın/deneyin.

Parametreler($hfind içindeki, "M" kısmı);
n: Normal text karşılaştırma.
w: Wildcard(?,*) text.
W: Wildcard(?,*) text. (Tablo için)
r: Regular text.
R: Regular text. (Tablo için)

İlk öncelikle, şu "n" parametresini aklınız'dan çıkartın.(Varsayılan için kullanılmaz)
Şimdi yukarı'daki alias'ı ekledikten sonra;
Mesela; "Tablo" tablosunda, "deneme" kelime ile başlayan kaç parça var? Nasıl öğreniriz?

//echo -a $hfind(tablo,deneme*,0,w) yaptığımız'da, cevap "3" olarak dönecektir. Çünki deneme kelimesi ile başlayan, tam 3 parçamız var.
Mesela; "Tablo" tablosunda, "a" harfinin 2 tane olup'da yan yana bulunduğu kaç adet kelime var ve hangileri?
//echo -a $hfind(tablo,a{2},0,r) yaptığımız'da, cevap "2" olarak dönecektir. Nedir bunlar? Bknz: (yaa33 ve yaa1) kelimeleri. 0 yerine 1/2 ko***** sizde görebilirsiniz.


4- $hmatch(tablo-ismi,parça-ismi,N)
Bu identifier normalde mIRC Help dosyasında bulunmamaktadır. Yani bahsi edilmemiş.
İdentifier'ın yaptığı işlev, tablo içerisinde parça ismi arama. Tabi bu parça isimlerini wildcards(*,?) kullanarak arıyabiliyoruz.
Mantığını anlamak için, yukarıdaki /tablo alias'ını kullanın ve aşşağıdaki örneklemeleri yapın.
Örneğin; //echo -a $hmatch(tablo,*deneme*,0) yaptığınız'da, tablo içerisinde deneme kelimesi geçen kaç adet parçanın olduğunu gösterir. 0 yerine 1 yazarsanız, 1. parçanın ismini verir.
Örneğin; //echo -a $hmatch(tablo,deneme*,1) yaptığınız'da, deneme ile başlayan 1. parçanın ismini verir.

-
HASH TABLES hakkında anlatıcaklarım bu kadar. Zaten eksik birşey kalmadı. En geniş ve anlayacağınız bir dilde anlattım.
Şimdi hash tablosu ile neler yapılabilir?

1- Kanal için küfür/flood vb. korumalar.
2- Clone tarayıcı vb. snippet'lar.
Vs. vs. Yani daha doğrusu sizin kapasitenize kalmış.

Mesela, hash tablosu kullanarak basit bir tekrar koruması yapalım(örnek);

Kod:
;op olduğumuz herhangi bir kanal'da,
on @*:text:*:#: { 
  ;kanal'da (@,%,&,~) prefix'lerine sahip olmayan herhangi bir nick text gönderdiği zaman,
  if (!$regex($nick(#,$nick).pnick,@|&|%|~)) {
    ;20 saniye sonra silinmek üzere # perfix'den aldığımız, kanal ismi   üzerine daha önce oluşturulmamış ise bir tablo oluşturuyoruz.
    ;Yani burada tablonun ismi # prefix'inden aldığımız kanal olarak dönüyor.
    ;Ve bu tabloya parça(item) olarak, $+(#,$nick,$encode($1-))   (kanal,nick,encode ile şifreleştirilmiş mesajı) ekliyoruz ve   data(değer)'ı 1 olarak yükseltiyoruz.
    hinc -mu20 # $+(#,$nick,$encode($1-)) 1
    ;Burada diyoruzki, eğer #kanal parçasının değer'i(data'sı) 2 olursa, /msg ile nick'e uyarı yap.
    if ($hget(#,$+(#,$nick,$encode($1-))) == 2) { msg # $nick tekrar yapmayınız. }
    ;Burada'da diyoruzki, eğer #kanal parçasının değer'i(data'sı) 3   olursa, /ban komutu ile kullanıcını kanal'dan banla ve kickle, son   olarak tablodan parçayı sil.
    if ($hget(#,$+(#,$nick,$encode($1-))) == 3) { ban -k # $nick 2 tekrar yaptınız. | hdel # $+(#,$nick,$encode($1-)) }
  }
}
Şimdi'de daha kapsamlı ve işinize yarayacak bir kod yazalım. Mesela kanal'da konuşan user'lara puan verelim, bu puan belirlediğimiz seviyeye gelince voice/halfop verelim. Ve bunları yaparken hemen hemen, hash tablosunun tüm komutlarını kullanalım. Zevkli bir kod yani.

Kod:
;#Kanal kanal'ına gönderilen text'lerde;
on *:text:*:#kanal: { 
  ;Eğer 1. kelime !puan ise ve 2. kelime mevcut ise,
  if ($regex($1,^!puan$) && $2) {
    ;Eğer, eğer belirtilen nick puan tablosun'daki parça'larda yoksa, uyarı veriyoruz.
    if (!$hmatch(puan,$2)) { msg # $+($nick,:) $qt($2) rumuzu, listede kayıtlı değil. | halt }
    ;Aksi taktirde(puan listesinde olduğu zaman) kullanıcının puanını sorsan kişiye /msg ile söylüyoruz.
    else { msg # $+($nick,:) $qt($2) rumuzunun puanı: $hget(puan,$nick) }
  }
  ;#Kanal kanalına text gönderen nicklerin prefix'lerinde, (&,@,~) bulunmuyorsa,
  if (!$regex($nick(#,$nick).pnick,&|@|~)) { 
    ;/hinc komutu ile puan tablosuna nick'i ekliyoruz, ve değer olarak yazdığınız yazının uzunluğunu biçiyoruz.
    hinc -m puan $nick $len($1-) | hsave -i puan puan.hash
    ;Eğer $nick parçasının, datası(değer'i) 10000 olursa,
    if ($hget(puan,$nick) >= 10000) { 
      ;Ve nick kanal'da +(voice) değilse,
      if (!$regex($nick(#,$nick).pnick,\+)) {
        ;/msg ile tebrik mesajını yolluyoruz .) 
        msg # $+($nick,:) tebrikler 10000 puan'a ulaştınız. Voice listesine eklendiniz.
        ;/mode ile voice veriyoruz. Ve vnick tablosuna nick'i ekliyoruz.   Son olarak vnick tablosunu, vnick.hash dosyasını kayıt ediyoruz.
        mode # +v $nick | hadd -m vnick $nick 1 | hsave -i vnick vnick.hash 
      }
    }
    ;Eğer $nick parçasının, datası(değer'i) 20000 olursa,
    if ($hget(puan,$nick) >= 20000) { 
      ;Ve nick kanal'da %(halfop) yetkisine sahip değilse,
      if (!$regex($nick(#,$nick).pnick,%)) {
        ;Eğer vnick tablosunda, nick bulunuyorsa, vnick tablosundan   nick'i siliyoruz ve vnick tablosunu tekrar vnick.hash dosyasına kayıt   ediyoruz.
        if ($hmatch(vnick,$nick)) { hdel vnick $nick | hsave -i vnick vnick.hash }
        ;/msg komutu ile tebrik mesajını yolluyoruz .)
        msg # $+($nick,:) tebrikler 20000 puan'a ulaştınız. Halfop listesine eklendiniz.
        ;/mode ile halfop veriyoruz. Ve hnick tablosuna nick'i   ekliyoruz. Son olarak hnick tablosunu, hnick.hash dosyasını kayıt   ediyoruz.
        mode # +h $nick | hadd -m hnick $nick 1 | hsave -i hnick hnick.hash 
      }
    }
  }
}
 
;mIRC açılışında,
on *:start: {
  ;Eğer puan.hash isminde bir tablo mevcut ise, puan isminde bir tablo   oluşturuyoruz. Ve puan.hash dosyasını, puan tablosuna yüklüyoruz.
  if ($isfile(puan.hash)) { hmake puan 100 | hload -i puan puan.hash }
  ;Eğer vnick.hash isminde bir tablo mevcut ise, vnick isminde bir tablo   oluşturuyoruz. Ve vnick.hash dosyasını, vnick tablosuna yüklüyoruz.
  if ($isfile(vnick.hash)) { hmake vnick 100 | hload -i vnick vnick.hash }
  ;Eğer hnick.hash isminde bir tablo mevcut ise, hnick isminde bir tablo   oluşturuyoruz. Ve hnick.hash dosyasını, hnick tablosuna yüklüyoruz.
  if ($isfile(hnick.hash)) { hmake hnick 100 | hload -i hnick hnick.hash }
}
 
;#Kanal kanalına giren kullanıcı ben değilsem,
on !*:join:#kanal: {
  ;Eğer giren kullanıcı vnick tablosunda var ise,
  if ($hmatch(vnick,$nick)) {
    ;/mode ile voice veriyoruz.
    mode # +v $nick
    ;/msg ile bilgilendirme mesajı atıyoruz.
    msg # $+($nick,:) daha önce, aldığınız $+($chr(40),$hget(puan,$nick),$chr(41)) puan'dan dolayı, voice listesindesiniz.
  }
  ;Eğer kullanıcı hnick tablosunda var ise,
  if ($hmatch(hnick,$nick)) {
    ;/mode ile halfop veriyoruz
    mode # +h $nick
    ;/msg ile bilgilendirme mesajı atıyoruz.
    msg # $+($nick,:) daha önce, aldığınız $+($chr(40),$hget(puan,$nick),$chr(41)) puan'dan dolayı, halfop listesindesiniz.
  }
}
Dersimiz burada tamamen sona ermiştir.
Umarım birşeyler öğrenebilirsiniz. Hash kullanın, iyidir .)
 

Bu konuyu okuyanlar (Üyeler: 1, Misafirler: 0)

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur. iyinet.com sayfalarında yer alan yazı, görsel ve linklerle ilgili hukuki şikayetleriniz için Buradan iletişime geçmeniz durumunda, ilgili kanunlar ve yönetmelikler çerçevesinde en geç 7 gün içerisinde iyinet yönetimince tarafınıza dönüş sağlanacaktır. Betcup Artemisbet Forum pulibet
Üst