Tekil Mesaj gösterimi
Alt 04 Şubat 2009, 13:31   #13
Çevrimdışı
L4roXyL
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: Timer (Zamanlayıcı) Hakkında Geniş Bilgi




Evet /timer güzel bir komutdur. İşlevsel olduğu kadar, uygulanan komutları sabitlediği içinde biraz kalıpsal olabiliyorda(kullanıma göre)
mIRCde bazı komutlar/işlevler internal olarak(siz göremezsiniz) /timer kullanır.
-
Birkaç bilgide ben vereyim /timer hakkında.
-
/timer komutu kendisine atanan işlevi/komutu(<command>) her zaman için SABİTLER.
Bakın bu sabitleme olayını basite almayalım, bunun üzerine düşmemin sebebini anlayacaksınız.
Örneğin: //.timer 3 1 inc %1 | .timer 3 1 echo - Değer: %1
Şeklinde bir komu uyguluyoruz. Uyguladığımız komut(lar);
Üç(3) defa uygulanmak üzere, saniyede bir(1) defa %1 değişkeninin değerini(ilk timerda) bir değer arttırmak.
İkinci(2.) timerda ise bu değişkenin değerini echo ile almak istiyoruz. Ve komutu uygulayalım bakalım sonuçlar ne olacak?
Sonuçlar;

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
- Değer: - Değer: - Değer:

Gördüğünüz gibi herhangi bir değer alamadık. Bunun sebebi %1 değişkeninin daha önceden bir değere sahib olmaması değildir. Çünki /inc komutu değer oluşturulmamış olsa dahi, sıfırdan değeri oluşturur ve atdığınız değeri verir.
Bunun nedeni yukarıda dediğim gibi /timer komutunun veriyi SABİTLEMESİDİR.
Halbuki işlevler(açtığınız timer(lar)) sona erdiğinde; //echo - Değer: %1 yaptığınızda; (- Değer: 3) olarak yanıt alacaksınız.

Bir örnek daha verelim: //.timestamp hh:nn:ss | .timer 3 1 echo - Saat(SAAT:DAKİKA:SANİYE): $time

Uyguladığımız komut(lar);
Timestamp(saat gösterim bilgisini) "SAAT:DAKİKA:SANİYE" şeklinde ayarlıyoruz(bunu yapmak zorunda değiliz, lakin format bu şekilde değilse ayarlamak için kullandık)
Ve 3 defa uygulatmak üzere saniyede 1 defa, saat bilgisini alıyoruz. Komutu uygulayalım ve sonuçlara bakalım.
Sonuçlar;

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
- Saat(SAAT:DAKİKA:SANİYE): 07:44:42 - Saat(SAAT:DAKİKA:SANİYE): 07:44:42 - Saat(SAAT:DAKİKA:SANİYE): 07:44:42

Gördüğünüz gibi, /echo mesajı ile aldığımız saat bilgisinde, saniye kısmı değişmedi.
İşte yine yukarıda dediğim gibi bunun olmasının sebebi, /timer komutunun <command> kısmını sabitlemesinden kaynaklanmaktadır.
Şimdi şu soruyu bana sorabilirsiniz: "Peki ne yapacağız?
Bu soruyu bana değil khaled'e sorun diyeceğim ama oda zaten bunun çözümünü bize vermiş.

Bakınız: You can force identifiers to be re-evaluated when used in a /timer command by using the format $!me or $!time.
Buradaki açıklamada $time ve $me identifierları sadece örnektir. Yani sadece bunları kapsamaz.
Peki ne yapacağınız? Sorusunun en kısa ve basit cevabı; "!" karakterini kullanacaksınız cevabıdır. .)
Tabiki ben basit cevap vermek istemiyorum açıklayalım.

"!" karakterini belirtilen şekilde kullandığınızda, /timer komutunun sabitleme olayını ortadan kaldırırsınız.
Bakın dikkat edin, <repetitions> <interval> kısımlarına bir etki yapmaz. Bu sadece <command>(komut) kısmına işlev yapar.
Şimdi yukarıda vermiş olduğumz örneği, "!" karakterini kullanarak uygulayalım ve bakalım sonuç ne olacak.

Sonuç(lar);

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
- Saat(SAAT:DAKİKA:SANİYE): 07:55:27 - Saat(SAAT:DAKİKA:SANİYE): 07:55:28 - Saat(SAAT:DAKİKA:SANİYE): 07:55:29

Gördüğünüz gibi sabitleme işlevi ortadan kalktı ve anlık veriyi alabildik.
Şimdi şöyle bir soruda gelebilir bana: "Tüm identifierlarda kullanabilirmiyiz?"
Cevabım: Evet kullanabilirsiniz. Hayır TÜM identifierlarda kullanmanız saçma olur. .)

Açalım biraz. Kullanmanız gereken identifierlar değişken identifier olmalıdır. Çünki zaten sabit bilgiyi almak istiyorsak kullanmamıza gerek yok.
Kullanacağınız identifierlar değişken veri verebilecek olan identifierlar olmalıdır.
Örneğin: $time - $nick(kullanıma göre) - $me - $eval - $evalnext - $rand vb.

Bana gelebilecek sorulardan bir tanesi daha: "Peki %değişkenler için nasıl kullanacağız? %!değişken şeklinde kullansak olurmu?"
Cevabım: Hayır asla olmaz. Çünki bu karakteri sadece $identifierlarda kullanabilirsiniz.
Bu cevabın arkasından gelecek olan soru: "Ee peki ne yapıcaz %değişkenler için?"
Cevabım: %Değişkenler için, değişken verisini alabilen/gösterebilen bir $identifier kullanıcaksınız. .)
Bu cevabın arkasından gelecek olan soru: "Hangi identifier'lar peki bunlar?"
Cevabım: $var - $(...) - $eval - $evalnext
Bu cevabın arkasından gelecek olan soru: "Örnek gösterebilirmisin?"
Cevabım: Tabiki buyrun örnekler.

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
//.timer 3 1 inc %1 | .timer 3 1 echo - Değer: $!eval(%1,2) //.timer 3 1 inc %1 | .timer 3 1 echo - Değer: $!evalnext(%1) //.timer 3 1 inc %1 | .timer 3 1 echo - Değer: $!(%1,2) //.timer 3 1 inc %1 | .timer 3 1 echo - Değer: $var(%1,1)

Not: $var identifierında "!" kullanmadım, çünki /timer komutunun sabitleme işlevi, $var identifierında geçersizdir. Kullanmanıza gerek yok.
Sanırım anlaşılmayan birşey yok.

Şimdi diğer bilgilere gelelim.

-

/timer komutu ile 1'den fazla komutu aynı anda aktif etmek?

Şimdi aklınıza şu gelmesin hemen: //timer 1 1 komut1 | komut2 | komut3
Hayır bu geçersizdir, burada /timer komutunun uygulayacağı tek komut "komut1" komutudur. Diğer komut(ları) siz ayrı olarak uygularsınız.
Peki ne yapmalıyız? Ne yapabiliriz /timer komutunda birden fazla komutu aktif hale getirmek için?
Sizin vereceğiniz ve benim en nefret ettiğim cevap şu olacak:
"alias oluştururuz, komutların hepsini alias içerisine atarız. Sonra oba /timer ? ? aliasismi yaparız"
Evet böylede yapabilirsiniz. Ama çok basit işlevler için gidipde alias oluşturursanız bu komiklikten öte daha çok profesyonellik dışı olur.

Örneğin:
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
alias deneme echo -Deneme1 | echo -Deneme2 | echo -Deneme3 /timer ? ? deneme

Yaparsanız bu olur, ama etik olmaz.


Bunları okuduktan sonra gelebilecek olan sorular:
  • E peki ne yapacağız o zaman?
  • Hem bu şekilde kullansak ne olurki?
  • Çok biliyorsan anlatda öğrenelim(!) o zaman?
-

Cevablarım:

1- E peki ne yapacağız o zaman?

Yukarıda anlattığım o kadar şeyi cidden okuduysan ve algılamaya çalıştıysan, bu sorunun cevabını % 78.6 (:)) ihtimal ile kendin verebilirsin aslında.
Çünki demiştimki /timer komutu, <command> kısmını sabitler.

Birinci yol: $chr
"|" karakterinin ascii numarasını bul. ve bu numarayı $chr identifierı içine girerek birden fazla komut uyglatabil. .)
Şöyleki: "|" karakteri dediğim gibi yeni komut uygulatma karakteridir. Ve ascii numarası 124dür.

Uygulayabileceğimiz komut: //.timer 1 0 echo - Deneme1 $chr(124) echo - Deneme2 $chr(124) echo - Deneme3
Aldığımız cevap(lar):

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
- Deneme1 - Deneme2 - Deneme3

Demekki aynı anda birden fazla komutu aktif edebiliyormuşuz /timer komutunda.
Not: Birden fazla komutu aynı anda aktif etmek, hepsini aynı anda kullanmak demek değildir. Yine sırası ile kullanmaktır. mIRC bir komut uygulanmadan ikinci komutu uygulamaz.

İkinci yol: $(...)

$(...) identifierını kullanırsınız. Nasılmı?

Örnek: //.timer 1 0 echo - Deneme1 $(|) echo - Deneme2 $(|) echo - Deneme3

Yukarıdaki ile aynı işlevi görür. mIRCin "|" karakterini <yeni komut-sonraki> komut sıfatından kaldırır.(/timer haricinde)
-
2- Hem bu şekilde kullansak ne olurki?
Hiçbirşey olmaz. Ama yine dediğim gibi basit komut(lar) için gereksiz alias(yeni komut) uygulamasından kurtulursunuz.
Yani bir nevi kısacası komut uygulatmak için, ayrı bir komut oluşturmuş olmazsınız. .)
-
3- Çok biliyorsan anlatda öğrenelim(!) o zaman?
Hayır çok bilmiyorum. Sadece doğru olanı biliyorum ve bildiklerimi anlattım.
Umarım öğrenmişsin(iz)dir.
-
Kolay gelsin.

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklam ver Benimmekan Mobil Sohbet