- 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
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.
Yardım için teşekkürler şef! @Tunga
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?
- 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.
- 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.
- 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.
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()
- Katılım
- 13 Ocak 2020
- Konular
- 1,420
- Mesajlar
- 10,012
- Çözüm
- 81
- Online süresi
- 1y 1mo
- Reaksiyon Skoru
- 7,297
- Altın Konu
- 309
- TM Yaşı
- 6 Yıl 4 Ay 29 Gün
- Başarım Puanı
- 418
- MmoLira
- 6,431
- DevLira
- 15
Paylaşım için teşekkürler
- Katılım
- 14 Haz 2024
- Konular
- 158
- Mesajlar
- 3,880
- Çözüm
- 8
- Online süresi
- 3mo 1d
- Reaksiyon Skoru
- 2,078
- Altın Konu
- 17
- Başarım Puanı
- 206
- MmoLira
- 2,230
- DevLira
- 3
Paylaşım için Teşşekürler
- Katılım
- 28 Mar 2023
- Konular
- 4
- Mesajlar
- 34
- Online süresi
- 2d 2h
- Reaksiyon Skoru
- 7
- Altın Konu
- 0
- TM Yaşı
- 3 Yıl 2 Ay 14 Gün
- Başarım Puanı
- 38
- MmoLira
- 1,525
- DevLira
- 0
işte bu ne zamandır bekliyordumMerhaba,
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?
- 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.
- 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.
- 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
Yardım için teşekkürler şef! @Tunga
- 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
![]()
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 13
- Görüntüleme
- 2K
- 1.00 yıldız(lar) 1 Değerlendirme
- Cevaplar
- 2
- Görüntüleme
- 623
- Cevaplar
- 215
- Görüntüleme
- 50K












