Best Studio 1
Best Studio
mannaxxx 1
mannaxxx
Agora Metin2 1
Agora Metin2
[DEV]AB 1
[DEV]AB
Sevdamsın 1
Sevdamsın
TuZaKK 1
TuZaKK
kaptanmikro1 1
kaptanmikro1
farkmt2official 2
farkmt2official
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Bvural41 1
Bvural41
Hikaye Ekle

Dosyasız binekleri tamamlama

  • Konuyu başlatan Konuyu başlatan Reached
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 10
  • Görüntüleme Görüntüleme 2K

Türkiye'de ilk Mobil & PC Aynı Anda Metin2 Oyna. Triarchonline kalıcı ve uzun ömürlü yapısı ile 24 Temmuz'da açılıyor. | 1-99 Mobil Metin2 Triarch HEMEN TIKLA!

Selam, mob_proto'da eksik eklenmelerden kaynaklanan bineğin folder kısmının boş bırakılan yerlerini tamamlamanıza yardımcı olacak bir script.

@Koray' UTF-8 convert için teşekkürler.

Python:
import os
import chardet
ITEM_PROTO_PATH = "item_proto.txt"
MOB_PROTO_PATH = "mob_proto.txt"
NPC_LIST_PATH = "npclist.txt"
LOG_FILE_PATH = "no_folder_mounts.txt"
MOB_NAMES_FILE_PATH = "mob_names.txt"
MOUNT_WITH_FOLDERS = "mount_with_folders.txt"
SERVER_DATA_FOLDER = "C:\\git\\CarbonSFv2\\server\\srv1\\share\\data\\monster"
SERVER_MISSING_FOLDERS = "server_missing_folders.txt"
MOUNT_TYPE = "ITEM_COSTUME"
MOUNT_SUBTYPE = "COSTUME_MOUNT"

MOUNT_LIST = []
MOUNT_WITH_NO_FOLDER = []

ITEM_TYPE = 2
ITEM_SUBTYPE = 3
ITEM_MOUNT_VALUE = 28
MOB_PROTO_MOUNT_VNUM = 0
MOB_PROTO_FOLDER_INDEX = 12

def process_file(file_path):
    with open(file_path, 'rb') as file:
        rawdata = file.read()
        encoding = chardet.detect(rawdata)['encoding']
    
    #convert to utf-8 if not already
    if encoding and encoding.lower() != 'utf-8':
        with open(file_path, 'r', encoding=encoding) as file:
            content = file.read()
        with open(file_path, 'w', encoding='utf-8') as file:
            file.write(content)

def checkCostumeMount(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            if not line.strip():
                continue
            split = line.split('\t')
            try:
                if split[ITEM_TYPE] == MOUNT_TYPE and split[ITEM_SUBTYPE] == MOUNT_SUBTYPE:
                    MOUNT_LIST.append(split[ITEM_MOUNT_VALUE])
            except IndexError:
                print("Index Error on line: " + line)

def checkMobLine(file_path):
    process_file(file_path)
    with open(file_path, 'r', encoding='utf-8') as file:
        try:
            for line in file:
                if not line.strip():
                    continue
                    
                split = line.split('\t')
                try:
                    if split[MOB_PROTO_MOUNT_VNUM] in MOUNT_LIST and split[MOB_PROTO_FOLDER_INDEX] == "":
                        print("Mount with no folder: " + split[MOB_PROTO_MOUNT_VNUM])
                        MOUNT_WITH_NO_FOLDER.append(split[MOB_PROTO_MOUNT_VNUM])
                except IndexError:
                    print("Index Error on line: " + line)
        except UnicodeDecodeError:
            print("UnicodeDecodeError on line: " + line)

def writeIntoFile(file_path, log_file_path):
    logFile = open(log_file_path, 'w')
    with open(file_path, 'r') as file:
        for line in file:
            if not line.strip():
                continue
            split = line.split('\t')
            try:
                if split[0] in MOUNT_WITH_NO_FOLDER:
                    logFile.write(line)
            except IndexError:
                print("Index Error on line: " + line)
    logFile.close()

def setFolder(file_path):
    mountWithFolders = open(MOUNT_WITH_FOLDERS, 'w')
    with open(file_path, 'r') as file:
        for line in file:
            if not line.strip():
                continue
                
            split = line.split('\t')
            try:
                if split[0] in MOUNT_WITH_NO_FOLDER:
                    mountWithFolders.write(line)
            except IndexError:
                print("Index Error on line: " + line)
    mountWithFolders.close()

def checkFolderExist(folder_path):
    serverMissingFolders = open(SERVER_MISSING_FOLDERS, 'w')
    with open(MOUNT_WITH_FOLDERS, 'r') as file:
        for line in file:
            if not line.strip():
                continue
            split = line.split('\t')
            folder = os.path.join(folder_path, split[1])
            if not os.path.exists(folder):
                serverMissingFolders.write(folder + "\n")
            else:
                print("Folder exists: " + folder)
    serverMissingFolders.close()

def main():
    checkCostumeMount(ITEM_PROTO_PATH)
    checkMobLine(MOB_PROTO_PATH)
    writeIntoFile(MOB_NAMES_FILE_PATH, LOG_FILE_PATH)
    setFolder(NPC_LIST_PATH)
    checkFolderExist(SERVER_DATA_FOLDER)

if __name__ == "__main__":
    main()

Tutorial:
main.py içerisindeki
Python:
ITEM_TYPE = 2
ITEM_SUBTYPE = 3
ITEM_MOUNT_VALUE = 28
MOB_PROTO_MOUNT_VNUM = 0
MOB_PROTO_FOLDER_INDEX = 12

Bu kısımları değerleri kendinize göre ayarlayın.
Örn item_proto:
0->Vnum
1->locale_name
2->type
Mount'un mob vnumunu value'den alıyorsa kaçıncı column'da olduğuna bakın ve ITEM_MOUNT_VALUE ile değiştirin.
chardet paketini yükleyin.
Kod:
pip install chardet
Dosyanın içeriğini bu şekilde ayarlayın.

1709890157037.png


Dosyayı bu şekilde ayarladıktan sonra;
Python ile scripti çalıştırın.
Kod:
python .\main.py


mount_with_folder.txt dosyasından tamamlamanız gereken vnumların dosyaları mevcut.
Bu çıktı üzerinden eksikleri tamamlayabilirsiniz.
1709890762763.png
 

En Çok Reaksiyon Alan Mesajlar

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst