Metin2 Python Pencereleri Birbirine Bağlama | MMO Tutkunları
  1. Bu site çerezler kullanır. Bu siteyi kullanmaya devam ederek çerez kullanımımızı kabul etmiş olursunuz. Daha Fazla Bilgi.
  2. Merhaba Ziyaretçi,
    Henüz sitemize üye girişi yapmadınız. Sitemizden tam anlamıyla yararlanabilmeniz için sitemize üye olmanız gerekmektedir. Eğer sitemize daha önceden üye olduysanız, buradan giriş yapabilirsiniz. Sitemize üye değilseniz buraya tıklayarak üye olabilirsiniz.

    Duyuruyu Kapat
  3. Merhaba Ziyaretçi, Usta üye alımında bazı maddeler değişti. Sizde güncel halini okumak istiyorsanız buraya tıklayabilirsiniz.
    Duyuruyu Kapat
Duyuruyu Kapat
Merhaba Ziyaretçi,
Sitemize gelen kullanıcıların güvenliğini göz önünde bulundurarak Yönetim ekibi ile aldığımız ortak karar sonucu zararlı link kısaltma servislerini yasakladık. Detaylar: tıklayın.
Duyuruyu Kapat
Merhaba Ziyaretçi,
Yönetim tüzüğümüz yayınlanmıştır. Sizde okumak için tıklayınız.
Konuya gidip görüş bildirmek için tıklayınız.

Metin2 Python Pencereleri Birbirine Bağlama

'C++ / C# / Python' forumunda Whistle tarafından 1 Ocak 2018 tarihinde açılan konu

  1. Whistle

    Whistle Sarhoş Filozof Site Yetkilisi Admin Casro2 (Metin2) GM Casro2 (Metin2) Destek

    4.565
    928
    1.971
    30 Ekim 2011
    Erkek
    Öğrenci
    Samsun
    Adınız ve Soyadınız:
    Eray Öksüz
    Ruh Haliniz:
    Ruhsuz
    Merhaba arkadaşlar,
    Bugün anlatacağım konu ileri düzey arkadaşlar içindir. Kendi sistemlerini kodlayabilen, python kodlarını anlayabilenlere yöneliktir.

    Bu konumuzda 1 pencereye başka bir pencereyi nasıl bağlayabileceğimizi anlatacağım.

    Bunun artıları şu şekilde;
    • Ana pencere açılmadan alt pencere açılmasını engelleyebilirsiniz.
    • Alt pencereden ana pencerenin modüllerine ulaşabilirsiniz.
    • Ana pencere üzerinden alt pencerenin verilerini hafızada tutabilirsiniz. (Örn: Envanterde belt (kuşak) kısmı açıkken envanteri açıp kapattığınızda eğer açıksa belt kısmı açık olarak gözükür.)
    • Ve daha fazlası size kalmış. :)

    Mesela OrnekWindow.py adında bir dosyamız olsun. Bunun uiscript ile gerekli boyutunu filan ayarladık. Bunu anlatmıyorum tabiki.

    Daha sonra 2 tane class olduğunu varsayalım. Bunların birisi AnaPencere diğeri AltPencere. Örnek kodlar;

    Kod (Python):
    1. class AnaPencere(ui.ScriptWindow):
    2.     wndAltPencereWindow = None
    3.  
    4.     def __init__(self):
    5.         ui.ScriptWindow.__init__(self)
    6.         self.isLoaded = 0
    7.         self.LoadWindow()
    Gördüğünüz gibi basit bir pencere başlatacısı kullandık. Sizlere bu konuda python ile pencere oluşturmayı anlatmıyorum. Pencereleri birbirine bağlama yöntemini anlatıyorum.
    Daha sonra LoadWindow fonksiyonuna scriptten gelen verileri değişkenlere filan atıyorsunuz. Bunu geçiyoruz.
    Bizim ilgileneceğimiz kısım şu;
    Kod (C++):
    1.     def LoadWindow(self):
    2.         if(self.isLoaded == 1):
    3.             return
    4.    
    5.         self.isLoaded = 1
    6.  
    7.         self.wndAltPencereWindow = AltPencereWindow(self)
    Burada fark ettiyseniz. AltPencereWindow'u bir değişkene atadım. Fakat bunu atarken ana penceremizin verileri bulunduğu bir self gönderdik. Eğer bağlamak istemeseydik. Şöyle yapardık.
    Kod (C++):
    1.     def LoadWindow(self):
    2.         if(self.isLoaded == 1):
    3.             return
    4.    
    5.         self.isLoaded = 1
    6.  
    7.         self.wndAltPencereWindow = AltPencereWindow()
    Daha sonra basit bir AltPencereWindow sınıfını oluşturalım.
    Kod (Python):
    1. class AltPencereWindow(ui.ScriptWindow):
    2.     def __init__(self, wndAnaPencere):
    3.         import exception
    4.         if not wndAnaPencere:
    5.             exception.Abort("AnaPencere acmadan AltPencereyi acamazsiniz!")
    6.             return
    7.  
    8.         ui.ScriptWindow.__init__(self)
    9.         self.wndAnaPencere = wndAnaPencere
    Gördüğünüz gibi. AltPencereWindow sınıfını otomatik çalıştıran __init__ fonksiyonuna wndAnaPencere diye bir şey ekledim. Bunun sebebi biz AnaPencere'de AltPencereWindow sınıfını çağırırken AnaPencere'nin verilerini gönderiyoruz. AltPencerede o verileri alıyor.
    Kod (Python):
    1. AltPencereWindow(self)
    Buradaki self tabiri. AltPencereWindow'daki __init__ fonksiyonuna wndAnaPencere değişkenine gidiyor. Zaten konuya bonus olarak şu kodu da ekledim.
    Kod (Python):
    1.         if not wndAnaPencere:
    2.             exception.Abort("AnaPencere acmadan AltPencereyi acamazsiniz!")
    3.             return
    Bu eğer ki kullanıcı bir şekilde AnaPencere'yi açmadan AltPencereyi açmaya çalıştığında. Metin2'nin syserr.txt dosyasına bunu yazar; "AnaPencere acmadan AltPencereyi acamazsiniz!"

    Evet arkadaşlar bu konumuz bu şekilde bitmiştir. Buna dair sorularınız olursa belirtebilirsiniz.
    Eğer bilmeyenler varsa Metin2 üzerine çook geniş çaplı eğitim seti yapıyorum. Fakat daha python ünitesine gelmedim. Bu üniteye geldiğimde bildiğim her şeyi videolu uygulamalarla göstereceğim. Buda yazılı olarak kalsın. :)
    Eğitim serisine bakmak için: Linkleri Görebilmek İçin Üye Olmanız Gerekmektedir. Üye Olmak İçin Tıklayınız...
     
  2. cmod

    cmod Aktif Üye Üye

    17
    9
    300
    28 Ağustos 2017
    Erkek
    denizli
    Adınız ve Soyadınız:
    uğur
    Ruh Haliniz:
    Yalniz
    Takımınız:
    Diger takımlar
    bu ne işimize yaricak tam olarak ben anlayamadım da kb @Whistle
     
    Whistle bunu beğendi.
  3. Whistle

    Whistle Sarhoş Filozof Site Yetkilisi Admin Casro2 (Metin2) GM Casro2 (Metin2) Destek

    4.565
    928
    1.971
    30 Ekim 2011
    Erkek
    Öğrenci
    Samsun
    Adınız ve Soyadınız:
    Eray Öksüz
    Ruh Haliniz:
    Ruhsuz
    Örnek veriyorum;
    Envanteri açtığınız belt kısmı var. Kemer taktıkça genişleyen yer. Orası açıkken Envanteri kapattığınız zaman oda kapanır. Şey gibi düşünün. Miras alma olayı. Üst sınıfın metod ve değişkenlerine erişebiliyoruz. Konuyu baştan sona dikkatlice okuyun. Yalnız bu kodlama yapabilen kullanıcılar için açılan konu. :)
     
  4. cmod

    cmod Aktif Üye Üye

    17
    9
    300
    28 Ağustos 2017
    Erkek
    denizli
    Adınız ve Soyadınız:
    uğur
    Ruh Haliniz:
    Yalniz
    Takımınız:
    Diger takımlar
    Aynen şimdi anladım. Çekirdek kodlama düzenleme işlemleri bir nevi alt yapı düzenleme
    güvenlik ve doğruluk optimizasyonları mantıken.
     
  5. Whistle

    Whistle Sarhoş Filozof Site Yetkilisi Admin Casro2 (Metin2) GM Casro2 (Metin2) Destek

    4.565
    928
    1.971
    30 Ekim 2011
    Erkek
    Öğrenci
    Samsun
    Adınız ve Soyadınız:
    Eray Öksüz
    Ruh Haliniz:
    Ruhsuz
    Sayılır. Buradaki amaç bir önceki sınıftan miras alma. PHP ile uğraşan kişiler için örnek;
    PHP:
    1. <?php
    2. class AnaClass
    3. {
    4.    /**
    5.     * @return string
    6.     */
    7.    public function anaClassFonksiyonu()
    8.    {
    9.        return "Ben ana classta yer alan bir fonksiyonum."
    10.    }
    11. }
    12.  
    13. class AltClass extends AnaClass
    14. {
    15.    /**
    16.     * @return string
    17.     */
    18.    public function testFonksiyon()
    19.    {
    20.        $this->anaClassFonksiyonu();
    21.    }
    22. }
    23. ?>
    Yukarıdaki kodun çıktısı şu şekilde olur;
    Kod (Text):
    1. Ben ana classta yer alan bir fonksiyonum.
    Bu konuda anlattığımda buna benzer bir şey. Üst sınıfın özelliklerini miras alıp alt sınıfta kullanabiliyoruz. :)
    Lakin ben terimsel kelimeler kullanmak yerine pencereleri birbirine bağlamak yazdım.
    Normalde terimsel olarak konu başlığı şu şekilde olabilirdi;
    "Metin2 Python ile Miras Alma" gibi.

    Metin2 root dosyalarını incelerseniz konuda gösterildiği bazı pencerelerin birbirine bağlandığını görebilirsiniz. :)

    Python sınıf yapısı (nesne yönelimli programlama / oop) detaylı bilgi için şuraya göz atabilirsiniz: Linkleri Görebilmek İçin Üye Olmanız Gerekmektedir. Üye Olmak İçin Tıklayınız...
     
    Son düzenleme: 6 Nisan 2018

Bu Sayfayı Paylaş

XenForo Add-ons by Brivium ™ © 2012-2013 Brivium LLC.