Chatgpt ile bi sohbetmiz metin2 mods

  • Konuyu açan Konuyu açan emrahdmr47
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 4
  • Gösterim Gösterim 256

emrahdmr47

MT Üye
MT Üye
Mesaj
191
Çözümler
6
Beğeni
60
Puan
479
Ticaret Puanı
0
Selamin aleykum
aklima geldi durduk yere :)
(Not test edilmedi sadece fikir icin paylastım)
Soru:
Gta5 te mods klasoru aciliyor modlar onda oyun dosyalari bozulmuyor metin2 dede yapamazmiyim

Cevap:
Evet, Metin2 için de benzer bir yapı kurabilirsiniz. “Mods” klasörü kullanarak Metin2 dosyalarını doğrudan oyun dosyalarına müdahale etmeden yüklemek ve çalıştırmak mümkün. Bu yöntem, modifikasyonların kolayca eklenmesini, kaldırılmasını ve test edilmesini sağlar. Ancak, Metin2’nin bu tür bir modlama için doğal bir desteği olmadığından, bazı ayarlamalar yapmanız gerekecek. İşte bu sürecin detayları:

1. Mod Yükleme Sistemi Kurma

Metin2 istemcisinde, mevcut dosya yapısına müdahale etmeden harici bir “Mods” klasörü oluşturabilir ve modifikasyonları buradan çalıştırabilirsiniz.

Adım 1: “Mods” Klasörü Oluşturma
• Metin2’nin kurulu olduğu ana dizine gidin (ör. C:\Program Files\Metin2).
• Yeni bir klasör oluşturun ve adını Mods koyun.
• Örneğin: C:\Program Files\Metin2\Mods

2. Modların Yüklenmesi için Kod Eklemek
Metin2 istemcisinde Python betikleri üzerinden harici dosyaları çağırmak mümkündür. Bunun için root klasöründe bazı düzenlemeler yapmanız gerekir.

Adım 1: Mod Yükleme Sistemini Yazın

root/ui içindeki game.py veya system.py dosyasına şu kodları ekleyin:
Python:
Genişlet Daralt Kopyala
import os

class ModLoader:
    def __init__(self):
        self.mods_path = "Mods"  # Mods klasörünü tanımlayın
        self.loaded_mods = []

    def load_mods(self):
        if not os.path.exists(self.mods_path):
            print("Mods klasörü bulunamadı!")
            return

        # Mods klasöründeki tüm modları yükleyin
        for mod_name in os.listdir(self.mods_path):
            mod_path = os.path.join(self.mods_path, mod_name)
            if os.path.isdir(mod_path):
                try:
                    self.load_mod(mod_path)
                except Exception as e:
                    print(f"Mod '{mod_name}' yüklenirken hata oluştu: {e}")

    def load_mod(self, mod_path):
        init_file = os.path.join(mod_path, "init.py")  # Her mod için bir init.py dosyası
        if os.path.exists(init_file):
            exec(open(init_file).read(), globals())  # Modun kodlarını çalıştır
            self.loaded_mods.append(mod_path)
            print(f"Mod '{mod_path}' başarıyla yüklendi.")
        else:
            print(f"Mod '{mod_path}' içinde init.py bulunamadı.")

# Modları başlatın
mod_loader = ModLoader()
mod_loader.load_mods()

Adım 2: “Mods” Klasöründeki Modları Tanımlayın
Her mod için ayrı bir klasör oluşturun. Örneğin:
C:\Program Files\Metin2\Mods\CustomGUI
Bu klasörün içine bir init.py dosyası koyun ve modun kodlarını buraya yazın. Örneğin:

C:\Program Files\Metin2\Mods\CustomGUI\init.py

Kod:
Genişlet Daralt Kopyala
import ui

class CustomGUI(ui.ScriptWindow):
    def __init__(self):
        ui.ScriptWindow.__init__(self)

        self.__LoadWindow()

    def __LoadWindow(self):
        print("Custom GUI loaded!")
3. Test Etme
1. Metin2 istemcisini başlatın.

2. Konsolda veya syserr.txt dosyasında, “Mods klasörü bulunamadı!” veya “Mod başarıyla yüklendi.” gibi mesajları görebilirsiniz.

3. Modun düzgün bir şekilde yüklendiğini doğrulayın.

4. Avantajları
• Dosya Bozulmasını Önler: Oyun dosyalarına müdahale etmediğiniz için orijinal dosyalar güvende kalır.
• Kolay Yönetim: Modları eklemek veya kaldırmak yalnızca ilgili klasörü “Mods” dizininden silmeyi gerektirir.

• Yedekleme Gerekmez: Ana dosyalara dokunmadan istediğiniz kadar mod yükleyebilirsiniz.

5. Dikkat Edilmesi Gerekenler

• Hatalı Kod: Eğer bir modda hata varsa, diğer modları veya oyunu etkileyebilir. syserr.txt dosyasını kontrol edin.

• Uyumluluk: Metin2 istemcisi, bu tür bir sistem için tasarlanmadığından bazı modifikasyonlar düzgün çalışmayabilir.

• Resmi Sunucular: Bu tür modifikasyonlar yalnızca özel sunucularda kullanılmalıdır. Resmi sunucularda bu tür düzenlemeler yasak olabilir.

Eğer bu sistemi kurarken herhangi bir yerde takılırsanız, sorularınızı sorabilirsiniz! Daha ileri düzey yardım gerekiyorsa da detaylı şekilde açıklayabilirim.
 
çok mantıklı hocam, yeni bir py dosyası yazarken "oyundan çık pack kapat oyunu geri aç hata versin oyunu kapat syserrden satır bul koda geri dön düzelt pack kapat oyuna gir" döngüsünden gına gelmişti. üstünde biraz düzenlemeler yapıp bir de basit bi reload fonksiyonu yazdım çiçek gibi oldu. game.py'den de reloadu f5 tuşuna atadım, bastıkça py dosyam yeni haliyle geliyor çok daha rahat çalışıyorum.

root/modloader.py:
Genişlet Daralt Kopyala
import os
import dbg

class ModLoader:
    def __init__(self):
        self.mods_path = "Mods"  # Mods klasörünü tanımlayın
        self.loaded_mods = []

    def load_mods(self):
        if not os.path.exists(self.mods_path):
            dbg.TraceError("Mods klasoru bulunamadi")
            return

# Mods klasöründeki tüm modları yükleyin
        for mod_name in os.listdir(self.mods_path):
            mod_path = os.path.join(self.mods_path, mod_name)
            if os.path.isdir(mod_path):
                try:
                    self.load_mod(mod_path)
                except Exception as e:
                    dbg.TraceError("mod yuklenirken hata olustu " + str(e))

    def load_mod(self, mod_path):
        init_file = os.path.join(mod_path, "init.py")  # Her mod için bir init.py dosyası
        if os.path.exists(init_file):
            with open(init_file, "r") as file:
                exec(file.read(), globals())  # Modun kodlarını çalıştır
            self.loaded_mods.append(mod_path)
        else:
            dbg.TraceError("init.py bulunamadi ")

    def reload_mods(self):
        self.loaded_mods = []
#burada mumkunse mevcut olan scriptlerin calismasi durdurulmali fakat ben beceremedim, ust uste load olmasinda pek bi problem yok nasilsa sadece kendim icin kullaniyorum
        dbg.TraceError("Modlar tekrardan yuklendi.")
        self.load_mods()

# Modları başlatın
mod_loader = ModLoader()
mod_loader.load_mods()

def ReloadMods():
    mod_loader.reload_mods()

root/game.py:
Genişlet Daralt Kopyala
#importların altına
import modloader

#bu satırın olduğu yeri arat
onPressKeyDict[app.DIK_F4]

#altına yapıştır
onPressKeyDict[app.DIK_F5]    = lambda : modloader.ReloadMods()#f5 tuşu için

Client.exe'nin yanına bir Mods klasörü oluştur.
scriptler için örnek dosya yapısı: Mods\deneme\init.py

örnek init.py:
Genişlet Daralt Kopyala
#hiçbir ek özelliği yok aslında bildiğimiz düz metin2 py dosyası
#haritada doğar doğmaz karşımıza butona basınca tmm yazan bir pencere getirecek
import ui
import chat

class DenemePenceresi(ui.BoardWithTitleBar):
    def __init__(self):
        ui.BoardWithTitleBar.__init__(self)
        self.isLoaded = FALSE
        if FALSE == self.isLoaded:
            self.__LoadMe()
    def __del__(self):
        ui.BoardWithTitleBar.__del__(self)
    def __LoadMe(self):
        self.SetSize(200,200)
        self.SetCenterPosition()
        self.AddFlag('movable')
        self.SetTitleName('selam')

        btn0 = ui.Button()
        btn0.SetParent(self)
        btn0.SetUpVisual('d:/ymir work/ui/public/large_button_01.sub')
        btn0.SetOverVisual('d:/ymir work/ui/public/large_button_02.sub')
        btn0.SetDownVisual('d:/ymir work/ui/public/large_button_03.sub')
        btn0.SetPosition(55,96)
        btn0.SetText('bana bas')
        btn0.Show()
        self.btn0 = btn0
        self.btn0.Show()
        self.btn0.SetEvent(ui.__mem_func__(self.ClickBtn))

        self.isLoaded = True

    def ClickBtn(self):
        chat.AppendChat(2, "tmm")


wnd = DenemePenceresi()
wnd.Show()


Not 1: bu "init.py" dosyalarında import ettiğimiz modüller direkt olarak root packinin içinde veya client exenin bulunduğu dizinde olmalı. yani aynı klasördeki başka bir python dosyasını (gereksiz kod uzatan uğraşlara girmeden) init.py'de import edemiyoruz. aklınızda olsun.

Not 2: böyle bir sistemin sadece test ve sorun çözme aşamalarını rahatlatması amacıyla kullanılmasını öneririm, işiniz bittiğinde silmeyi unutmayın. evet kafayı kırıp uğraşan bilgili biri her koşulda bir açık bulacaktır hatta komple packleri bile açabilir ama biz adama kapıyı açıp gel demiş olmayalım :D
 
Son düzenleme:
chatgpt çok iyi ama ayrıntılı şeylerde çok eksik bilgiler veriyor ve amacının dışına çıkıyor düzelttiremiyorsunda boşuna zaman kaybı oluyor çoğu ayrıntı bilgide
 
Bunu kullanın daha basit ve yeterli:

Ben aktif olarak kullanıyorum. Kodu yaz kaydet ve oyunda listeden seçip load et, bu kadar.
 
Bunu kullanın daha basit ve yeterli:

Ben aktif olarak kullanıyorum. Kodu yaz kaydet ve oyunda listeden seçip load et, bu kadar.
oo bu da çok güzelmiş, sağ olun :)
 
Geri
Üst