![]() |
|
|||||||
| Help - Yardım mIRC Scripting hakkında her konuda yardım alabileceğiniz bölümdür. |
| Yeni Konu aç Cevapla |
|
|
LinkBack | Seçenekler | Stil |
|
|||
|
Kadir az/çok kod yazabildiğini biliyorum. En azından kendini hızla geliştirdiğinide biliyorum. Ben sana şimdi mantıkları açıklayacağım sende yazmaya çalışacaksın. Takıldığın yerde bizde sana yardımcı olacağız.
- 1. Sorunun için: Sunucu girişi için; $ialchan vb. gibi bir identifier yok weilside. Senin yapman gereken, sunucuya giren kişilerin IP adreslerini herhangi bir işlem tablosuna/dosyasına eklemen. Yani örneğin hash table-a eklersin, eğer aynı IP-den 2. bir giriş olursa, işlem yaparsın. Örneğin: //if ($hget(_ips,IP-numarası)) { işlev } | hadd -m _ips IP-NUMARASI nick gibi. Tabi, sunucuya girip sonra çıkan ve sonra tekrar gireni sunucudan atmamak için; client exiting mesajında hash table-ın içerisinden sunucudan çıkan nick-e ait ip adresini sildirmen lazım. Örneğin: //if ($hget(_ips,IP-numarası)) { hdel _ips ip-numarası } şeklinde. - 2. Sorunun için: ON op/deop vs. events/olayları gibi on admin şeklinde bir event yok. Daha doğrusu admin olduğunu algılayan bir event yok. Bunu ya operator olduğunda gelen snotice bilgisi ile tesipt edersin, yada $usermode tanımının verdiği bilgiyi kontrol ederek. - 3. Sorunun için: Sorununda belirttiğin kullanım doğrudur. Yani $usermode tanımından alacağın veri ile bir kontrol yapabilirsin. Örneğin: //if ($regex($usermode,A|O)) { işlev } gibi. - 4. Sorunun için: Burada kullanman gereken mantık; zline mesajında nick-i alıp notify listesinde olup olmadığını kontrol etmektir.. Tabi bunu snotice-den gelen zline mesajına ait veri ile yapacaksın. Örneğin: //if ($notify(nick)) { zline $+(-*@,yakalanan-ip-adresi) } - 5. Sorunun için: 1) Tüm scripts dosyalarını birleştirirsen %90 ihtimal çakışma olacaktır diye düşünüyorum. TEXT, INPUT vb. event-lar çakışabilir. 2) Bir scripts dosyasına istediğin uzunlukta kod yazabilirsin. Herhangi bir yeterlilik ölçüsü yok. 15.000 satırda olabilir yani. |
|
||||
|
Öncelikle teşekkür ederim Hasan yardımlarından ötürü evet bişeyler yapmak istiyorum hazıra konmak gibi bi maksadım yok bunu en iyi sen biliyosun amacım sadece öğrenmek.
Diğer bi husus on *:op:.... event' ının @ için olduğunu admin içinde benzer bi event olmadığını ve $ialchan gibi kullanımların sadece kanal içinde döndüğünü biliyorum. Bunları yazmakta ki amacım ne sorduğumu sizlere daha belirgin bi şekilde anlatmaktı. Ben biraz farklı bakıyorum scriptinge şunu kesinlikle söyleyebilirim bu konuyu açmadan yüzlerce kod, ders, makale vs. aradım yabancı siteler dahil ama bu soruların hiç birine cevap bulamadım. Ha benzer şeyler vardı ama benim aradığım bunlar değil herneyse... Aklımdan bi kaç şey geçiyo elbette ancak doğruluğunu teyit ettirmek ve sizlerinde görüşlerin almak istedim.
__________________
The end of Something...
|
|
|||
|
Tamam sen yazmaya başla, takıldığın yerde ben buradayım kadir.
|
|
||||
|
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)
}
Kod:
raw 311:*: { echo -a admin oldun }
Kod:
if ($regex($usermode,A|O)) { komutlar }
Hasan cLone için anlattığın şekilde yapmaya çalıştım umarım olmuştur. Tşk ederim kontrol edersen sevinirim....
__________________
The end of Something...
Konu WeiLSiDe tarafından (09-27-2009 Saat 03:45 ) değiştirilmiştir. |
|
|||
|
Weilside, yeni müsait olabildim. İstediklerin;
1. sorunun için: Kod:
on $*:snotice:/client\s(connecting|exiting)/Si: {
var %_reg = $regml(1),%_ip = $remove($gettok($10,2,64),$chr(41))
if ($(,%_reg) = connecting) {
hinc -m _ips %_ip 1
if ($hget(_ips,%_ip) = 2) notice $9 vs.
if ($hget(_ips,%_ip) = 3) { kill $9 :sebeb. | hdel _ips %_ip }
}
if ($(,%_reg) = exiting) $iif($hget(_ips,%_ip),hdec _ips %_ip 1)
}
4. sorunun için: on *:snotice:*[z:line*:var %_ip = $remove($gettok($7,2,64),$chr(41)) | if ($notify($6)) { zline $+(-*@,%_ip) } |
| L4roXyL kullanıcısının bu postunu beğenenler. | ||
WeiLSiDe (09-29-2009) | ||
|
||||
|
Teşekkür ederim Hasan. Ben hazır kod istememiştim aslında. Hazırcılıktan pek hazzetmiyorum kendim bişeyler yapmaya çalışmışımdır hep. Bunu en iyi sen bilirsin. Velhasıl kodları yazmışsın benim clon için yaptığım şey ile senin yazdığın kodu karşılaştırabilirmisin... Arasındaki farkı anlamak için soruyorum yanlış anlaşılmasın.. Hatamın ne olduğunu öğrenmek istiyorum. Bana vakit ayırdığın için ayrıca teşekkürler.
__________________
The end of Something...
|
|
|||
|
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 :) } |
| L4roXyL kullanıcısının bu postunu beğenenler. | ||
WeiLSiDe (09-30-2009) | ||
![]() |
| Seçenekler | |
| Stil | |
|
|