ShadowFon 1
ShadowFon
D 1
delimuratt
PrimeAC 1
PrimeAC
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Best Studio 2
Best Studio
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
romegames 1
romegames
Bvural41 1
Bvural41
BlackFullMoon 1
BlackFullMoon
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Altın Konu Python | Mob Drop İtem Anotasyon Scripti

  • Konuyu başlatan Konuyu başlatan Esinti
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 21
  • Görüntüleme Görüntüleme 3K

Esinti

A lion does not fear sheep
TM Üye
Katılım
12 Ara 2009
Konular
133
Mesajlar
2,071
Online süresi
5d 17h
Reaksiyon Skoru
143
Altın Konu
1
Başarım Puanı
177
MmoLira
1,085
DevLira
3
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

Merhaba,
Oyun dosyalarında mobların düşürdüğü itemları daha kolay düzenleyebilmek için küçük bir Python scripti yazdım.

Bu sistem, mob_drop_item.txt dosyasındaki item VNUM'larına karşılık gelen isimleri item_names.txt dosyasından çekerek, her satırın yanına hangi itemın düştüğünü yorum olarak ekliyor.

Böylece dosyayı açtığınızda neyin ne olduğunu anlamak için sürekli başka bir yere bakmanıza gerek kalmıyor.
Hem düzenleme hem de kontrol açısından bayağı zaman kazandırıyor.


Sistem Nasıl Çalışıyor?

  1. load_item_names Fonksiyonu:
    • item_names.txt dosyasını okuyup VNUM ve item isimlerini bir sözlükte (dictionary) topluyor.
    • Dosyada boş satırları ve başlık satırlarını (VNUM ile başlayanlar) atlıyor.
    • Satırları tab ya da boşlukla ayırıp VNUM ile ismi eşleştiriyor.
  2. annotate_mob_drop_items Fonksiyonu:
    • mob_drop_item.txt dosyasını satır satır okuyor.
    • Her satırda bir VNUM bulduğunda, bunu item_names sözlüğünde arıyor.
    • Eğer VNUM eşleşirse, satırın sonuna -- item_adı şeklinde bir yorum ekliyor.
    • Eşleşme yoksa satırı olduğu gibi bırakıyor.
    • Sonuçları yeni bir dosyaya (new_mob_drop_item.txt) yazıyor.
  3. Kodun Genel Akışı:
    • Gerekli dosyaları scriptle birlikte aynı klasörün içine koyuyorsunuz.
    • Scripti çalıştırdığınızda, anotasyonlu yeni bir dosya oluşuyor.

Kullanım​

  • item_names.txt ve mob_drop_item.txt dosyalarınızı verdiğim python dosyası ile aynı dizine koyun.
  • Scripti çalıştırın, ardından new_mob_drop_item.txt adında yeni bir dosya oluşacak.
  • Örneğin, mob_drop_item.txt içinde 12345 50001 gibi bir satır varsa ve item_names.txt içinde 50001 Altın Kılıç yazıyorsa, çıktı dosyasında şu şekilde görünecek.
1742261946941.png

Yardım için teşekkürler şef! @Tunga 🫡
 

Ekli dosyalar

Son düzenleme:

En Çok Reaksiyon Alan Mesajlar

Paylaşım için teşekkürler, kodunda ufak tefek iyilleştirmeler yaptım. Regex ile precompiled bir pattern ile aramak çok daha performanslı olacaktır, ayrıca error handling kısmında hata alanlar için ekstra detaylar var.
Python:
import re
import os

try:
    from pathlib import Path
except ImportError:
    os.system("pip install pathlib")
    from pathlib import Path

def load_item_names(item_names_filename: str) -> dict[str, str]:
    item_names = {}
    try:
        with open(item_names_filename, "r", encoding="windows-1254", errors="replace") as f:
            for line in f:
                line = line.strip()
                if not line or line.startswith("VNUM"):
                    continue
                parts = line.split("\t", 1) if "\t" in line else line.split(None, 1)
                if len(parts) < 2:
                    continue
                item_names[parts[0]] = parts[1].strip()
    except UnicodeDecodeError as e:
        print(f"Encoding error in {item_names_filename}: {e}")
        print("Using replacement characters for invalid bytes")
    except FileNotFoundError:
        print(f"Error: {item_names_filename} not found")
    except Exception as e:
        print(f"Error reading {item_names_filename}: {e}")
    return item_names

def annotate_mob_drop_items(mob_drop_filename: str, item_names: dict, output_filename: str) -> None:
    pattern = re.compile(r"^\d+\s+(\d+)")
    try:
        with open(mob_drop_filename, "r", encoding="windows-1254", errors="replace") as fin, \
             open(output_filename, "w", encoding="windows-1254") as fout:
            for line in fin:
                if match := pattern.match(line.strip()):
                    vnum = match.group(1)
                    if vnum in item_names:
                        fout.write(f"{line.rstrip()} -- {item_names[vnum]}\n")
                        continue
                fout.write(line)
    except UnicodeDecodeError as e:
        print(f"Encoding error in {mob_drop_filename}: {e}")
        print("Using replacement characters for invalid bytes")
    except FileNotFoundError:
        print(f"Error: {mob_drop_filename} not found")
    except Exception as e:
        print(f"Error processing files: {e}")

def main() -> None:
    current_dir = Path.cwd()
    item_names_file = current_dir / "item_names.txt"
    mob_drop_file = current_dir / "mob_drop_item.txt"
    output_file = current_dir / "new_mob_drop_item.txt"
   
    if not item_names_file.exists() or not mob_drop_file.exists():
        print("Item names or mob drop file not found")
        return
       
    item_names = load_item_names(item_names_file)
    if item_names:
        annotate_mob_drop_items(mob_drop_file, item_names, output_file)
        print(f"Completed: {output_file}")
if __name__ == "__main__":
    main()
Paylaşım için teşekkürler
 
Paylaşım için Teşşekürler
 
Merhaba,
Oyun dosyalarında mobların düşürdüğü itemları daha kolay düzenleyebilmek için küçük bir Python scripti yazdım.

Bu sistem, mob_drop_item.txt dosyasındaki item VNUM'larına karşılık gelen isimleri item_names.txt dosyasından çekerek, her satırın yanına hangi itemın düştüğünü yorum olarak ekliyor.

Böylece dosyayı açtığınızda neyin ne olduğunu anlamak için sürekli başka bir yere bakmanıza gerek kalmıyor.
Hem düzenleme hem de kontrol açısından bayağı zaman kazandırıyor.


Sistem Nasıl Çalışıyor?

  1. load_item_names Fonksiyonu:
    • item_names.txt dosyasını okuyup VNUM ve item isimlerini bir sözlükte (dictionary) topluyor.
    • Dosyada boş satırları ve başlık satırlarını (VNUM ile başlayanlar) atlıyor.
    • Satırları tab ya da boşlukla ayırıp VNUM ile ismi eşleştiriyor.
  2. annotate_mob_drop_items Fonksiyonu:
    • mob_drop_item.txt dosyasını satır satır okuyor.
    • Her satırda bir VNUM bulduğunda, bunu item_names sözlüğünde arıyor.
    • Eğer VNUM eşleşirse, satırın sonuna // item_adı şeklinde bir yorum ekliyor.
    • Eşleşme yoksa satırı olduğu gibi bırakıyor.
    • Sonuçları yeni bir dosyaya (mob_drop_item_annotated.txt) yazıyor.
  3. Kodun Genel Akışı:
    • Dosya yollarını belirtiyorsunuz (örneğin, item_names.txt ve mob_drop_item.txt).
    • Scripti çalıştırdığınızda, anotasyonlu yeni bir dosya oluşuyor.

[CODE lang="python" title="Code"]import re

def load_item_names(item_names_filename):
item_names = {}
with open(item_names_filename, "r", encoding="windows-1254") as f:
for line in f:
line = line.strip()
if not line:
continue
if line.startswith("VNUM"):
continue
parts = line.split("\t")
if len(parts) < 2:
parts = line.split()
if len(parts) < 2:
continue
vnum = parts[0]
name = " ".join(parts[1:])
else:
vnum = parts[0]
name = parts[1].strip()
item_names[vnum] = name
return item_names

def annotate_mob_drop_items(mob_drop_filename, item_names, output_filename):
with open(mob_drop_filename, "r", encoding="windows-1254") as fin, open(output_filename, "w", encoding="windows-1254") as fout:
for line in fin:
stripped_line = line.strip()
if re.match(r"^\d+", stripped_line):
tokens = stripped_line.split()
if len(tokens) >= 2:
vnum = tokens[1]
if vnum in item_names:
comment = " // " + item_names[vnum]
fout.write(line.rstrip() + comment + "\n")
continue
fout.write(line)

if __name__ == "__main__":
item_names_file = r"c:\Users\esinti\Desktop\item_names.txt"
mob_drop_file = r"c:\Users\esinti\Desktop\TungaSF\mob_drop_item.txt"
output_file = r"c:\Users\esinti\Desktop\TungaSF\mob_drop_item_annotated.txt"

item_names = load_item_names(item_names_file)
annotate_mob_drop_items(mob_drop_file, item_names, output_file)

print("Tamamlandi", output_file)[/CODE]

Kullanım​

  • item_names.txt ve mob_drop_item.txt dosyalarınızın yolunu kodda kendi yollarınıza göre değiştirin.
  • Scripti çalıştırın, ardından mob_drop_item_annotated.txt adında yeni bir dosya oluşacak.
  • Örneğin, mob_drop_item.txt içinde 12345 50001 gibi bir satır varsa ve item_names.txt içinde 50001 Altın Kılıç yazıyorsa, çıktı dosyasında şu şekilde görünecek.
  • Ekli dosyayı görüntüle 136141
Yardım için teşekkürler şef! @Tunga 🫡
işte bu ne zamandır bekliyordum
 
Paylaşım için teşekkürler 🤩
 

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

Geri
Üst