Hikayeler

Reklam vermek için turkmmo@gmail.com

Dosyasız binekleri tamamlama

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

Reached

Level 7
Telefon Numarası Onaylanmış Üye
Fahri Üye
Katılım
13 Haz 2013
Konular
181
Mesajlar
2,492
Online süresi
3ay 19g
Reaksiyon Skoru
1,647
Altın Konu
2
Başarım Puanı
284
Yaş
28
TM Yaşı
12 Yıl 10 Ay 13 Gün
MmoLira
8,240
DevLira
81

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. 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

Paylaşım için teşekkürler.
 
Paylaşım için teşekkürler.
 
Paylaşım için teşekkürler.
 
Paylaşım için teşekkürler.
 

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

Geri
Üst