Metin2 Multi-Language DumpProto Otomasyon Sistemi

Bağlantılar ve dosyalar korumalıİçeriği açmak için ilk mesajı beğenin ve konuya bir yorum yazın. Her iki koşul da gereklidir.

UzgunAhmet

Üye
Üye
Mesajlar
74
Beğeniler
1
Puanlar
0
1. Projenin Amacı

Bu sistemin temel amacı, Metin2 içerisinde kullanılan:

  • Kod:
    item_names.txt
  • Kod:
    mob_names.txt
  • Kod:
    item_proto.txt
  • Kod:
    mob_proto.txt

dosyalarını çoklu dil desteğiyle otomatik olarak yönetmek, eksik VNUM'ları senkronize etmek, yeni isimleri otomatik çevirmek, silinen içerikleri diğer dillerden de kaldırmak ve son olarak bütün diller için DumpProto çıktısını otomatik üretmektir.

Normal şartlarda yeni bir item veya mob eklendiğinde aynı işlem birçok farklı dil klasöründe manuel olarak yapılmak zorundadır.

Örneğin:

Kod:

Kod:
tr/
en/
de/
fr/
es/
it/
nl/
pt/
dk/
cz/
pl/
hu/
ro/
ru/
gr/
ae/

gibi çok sayıda locale bulunduğunda, tek bir item eklemek bile ciddi zaman kaybına ve hata riskine neden olur.

Bu proje bu işlemi merkezi hale getirir.

---


2. Temel Mantık

Sistem içerisinde tek ana kaynak:

master/
klasörüdür.

Master içerisinde:

Kod:

Kod:
master/
├── item_names.txt
├── mob_names.txt
├── item_proto.txt
└── mob_proto.txt

bulunur.

Bu dosyalar sistem için "doğru kaynak" olarak kabul edilir.

Yani:

MASTER = SOURCE OF TRUTH
mantığı kullanılır.

---


3. Master Dosyalarının Görevi

item_names.txt

Itemlerin Türkçe isimlerini içerir.

Örnek:

Kod:

Kod:
VNUM    LOCALE_NAME
50935   Kırmızı Canavar Üçlüsü Seti
53334   Minik Şimşek Ku. (yağma)

mob_names.txt

Mob/NPC isimlerinin Türkçe ana listesidir.

item_proto.txt

Itemlerin teknik proto bilgileridir.

Örneğin:

VNUM
TYPE
SUBTYPE
SIZE
ANTIFLAG
LIMIT
APPLY
VALUE
SOCKET
REFINE
gibi oyun tarafından kullanılan teknik veriler bulunur.

mob_proto.txt

Mob/NPC teknik verilerini içerir.

---


4. Desteklenen Diller

Sistem şu locale klasörlerini yönetmektedir:

tr = Türkçe
en = İngilizce
de = Almanca
fr = Fransızca
es = İspanyolca
it = İtalyanca
nl = Hollandaca
pt = Portekizce
dk = Danca
cz = Çekçe
pl = Lehçe
hu = Macarca
ro = Romence
ru = Rusça
gr = Yunanca
ae = Arapça
Her dil için Metin2 client tarafında kullanılan Windows codepage dikkate alınmıştır.

Örneğin:

TR → CP1254
EN → CP1252
DE → CP1252
RU → CP1251
GR → CP1253
AE → CP1256
CZ → CP1250
PL → CP1250
Bu önemlidir çünkü yanlış encoding ile oluşturulan proto veya locale dosyaları oyun içerisinde bozuk karakterlere veya DumpProto hatalarına neden olabilir.

---


5. Projenin Klasör Yapısı

Sistem yaklaşık olarak şu şekilde düzenlenir:

Project_DumpProto/
│
├── BUILD_ALL.py
├── BUILD_ALL.bat
├── translation_engine.py
├── translation_cache.json
│
├── master/
│ ├── item_names.txt
│ ├── mob_names.txt
│ ├── item_proto.txt
│ └── mob_proto.txt
│
├── tr/
├── en/
├── de/
├── fr/
├── es/
├── it/
├── nl/
├── pt/
├── dk/
├── cz/
├── pl/
├── hu/
├── ro/
├── ru/
├── gr/
├── ae/
│
└── bin/

---


6. BUILD_ALL.py Ne Yapar?

BUILD_ALL.py projenin ana kontrol sistemidir.

Bütün senkronizasyon işlemlerini bu Python dosyası yönetir.

Çalışma sırası temel olarak şöyledir:

MASTER
↓
Duplicate kontrol
↓
Silinen VNUM kontrolü
↓
Eksik isim kontrolü
↓
Çeviri
↓
Eksik proto kontrolü
↓
Son duplicate kontrol
↓
DumpProto
↓
bin/

---


7. Duplicate VNUM Koruması

Sistemin en önemli güvenlik özelliklerinden biridir.

İşlem başlamadan önce bütün:

master/
tr/
en/
de/
...
dosyaları taranır.

Eğer aynı dosyada aynı VNUM birden fazla kez bulunursa sistem build işlemine başlamaz.

Örneğin:

50935 Item A
50935 Item B
tespit edilirse:

Dosya : item_names.txt
VNUM : 50935
Satır : 125, 147

Aynı VNUM birden fazla mevcut.
İnceleme gerekli.
şeklinde hata verir.

Amaç:

  • duplicate item oluşmasını engellemek
  • yanlış proto üretimini engellemek
  • VNUM çakışmasını önlemek
  • olası oyun hatalarını build öncesinde yakalamaktır.



---


8. Yeni VNUM Ekleme Sistemi

Örneğin master'a yeni bir item ekleyelim:

999001 Ejderha Ateşi Sandığı
Sistem bütün locale dosyalarını kontrol eder.

Örneğin:

TR → var
EN → yok
DE → yok
FR → yok
RU → yok
ise sadece eksik olan dillere ekleme yapılır.

Mevcut VNUM'lara dokunulmaz.

Yani:

VNUM locale dosyasında zaten varsa
→ hiçbir işlem yapma

VNUM yoksa
→ ekle
mantığı kullanılır.

---


9. İngilizce Merkezli Çeviri Sistemi

İlk tasarımda Türkçeden doğrudan bütün dillere çeviri düşünülmüştü.

Ancak bunun bazı problemlere yol açtığı görüldü.

Örneğin:

TR → DK
TR → PL
TR → HU
TR → RU
çevirilerinde bazı modeller:

  • Türkçe karakter bırakabiliyor
  • anlamı yanlış yorumlayabiliyor
  • encoding problemi oluşturabiliyor.

Bu nedenle sistem İngilizce merkezli hale getirildi.

Yeni sistem:

TR
↓
EN
↓
EN → DE
EN → DK
EN → NL
EN → PL
EN → HU
EN → RU
EN → GR
...
şeklinde çalışır.

---


10. Mevcut İngilizce İsimlerin Kullanılması

Sistem her zaman tekrar TR → EN çeviri yapmaz.

Önce:

en/item_names.txt
dosyasına bakar.

Eğer aynı VNUM zaten İngilizce dosyada mevcutsa:

85026 General's Accessory
gibi, mevcut İngilizce isim doğrudan ana çeviri kaynağı olarak kullanılır.

Yani:

EN mevcut
→ TR → EN yapma
→ doğrudan EN → diğer diller
Bu özellikle eski Metin2 dosyalarında bulunan bozuk Türkçe/Korece encoding verileri için önemlidir.

Örneğin:

¸íÀåÀÇ ¾×¼¼¼¸®(¹Ì»ç¿ë)
gibi bozuk bir kaynak varsa ve İngilizce isim zaten mevcutsa sistem bu bozuk metni çevirmeye çalışmaz.

---


11. TR → EN Sadece Gerektiğinde Yapılır

Eğer İngilizce locale içerisinde VNUM mevcut değilse:

TR → EN
çevirisi yapılır.

Örneğin:

Ejderha Ateşi Sandığı
İngilizceye:

Dragon Fire Chest
olarak çevrilir.

Bu işlem sadece bir kez yapılır.

Sonuç:

translation_cache.json
içerisine kaydedilir.

---


12. TR → EN → TR Doğrulama Sistemi

Makine çevirisine tamamen güvenilmez.

Yeni İngilizce çeviri oluşturulduğunda sistem otomatik olarak geri çeviri gerçekleştirir.

Akış:

TR
↓
EN
↓
TR
Örneğin:

Orijinal:
Minik Şimşek Kuşu (yağma)

TR → EN:
Tiny Lightning Bird (loot)

EN → TR:
Minik Şimşek Kuşu (yağma)
Geri dönüş orijinal anlamla yeterince uyuşuyorsa İngilizce isim kabul edilir.

---


13. Benzerlik Kontrolü

TR → EN → TR sonucu sadece gözle kontrol edilmez.

Python tarafında metin normalize edilir ve benzerlik oranı hesaplanır.

Örneğin:

Orijinal TR:
Minik Şimşek Kuşu

Geri TR:
Küçük Şimşek Kuşu
tam olarak aynı değildir fakat anlam olarak yakın olabilir.

Sistem belirlenen benzerlik eşiğinin üzerindeyse sonucu kabul eder.

---


14. Parantez İçeriği Kontrolü

Metin2 item isimlerinde parantez içindeki ifadeler önemlidir.

Örneğin:

(yağma)
(etkinlik)
+kırmızı
(erkek)
(kadın)
gibi ifadeler item türünü değiştirebilir.

Bu nedenle ayrıca parantez doğrulaması yapılır.

Örneğin çeviri:

TR:
Minik Şimşek Kuşu (yağma)

EN:
Tiny Lightning Bird (male)

EN → TR:
Minik Şimşek Kuşu (erkek)
olursa sistem bunu kabul etmez.

Çünkü:

yağma ≠ erkek
Anlam değişmiştir.

Build durdurulur ve VNUM raporlanır.

---


15. İngilizce Bridge Sistemi

Doğrulanmış İngilizce metne sistem içerisinde "English Bridge" denilebilir.

Örneğin:

Türkçe:
Ejderha Ateşi Sandığı

English Bridge:
Dragon Fire Chest
Bundan sonra diğer bütün çeviriler yalnızca:

Dragon Fire Chest
↓
German
French
Spanish
Dutch
Danish
Polish
Russian
Greek
Arabic
...
üzerinden yapılır.

Türkçe kaynak tekrar kullanılmaz.

Bu sayede:

  • daha tutarlı çeviri
  • daha az işlem
  • daha az API çağrısı
  • daha az yanlış çeviri
  • daha az encoding problemi

elde edilir.

---


16. Çoklu Çeviri Motoru Sistemi

Tek bir çeviri servisine güvenilmez.

Bunun için ayrı:

translation_engine.py
oluşturulmuştur.

Bu dosya çeviri sağlayıcılarını yönetir.

Mantık:

Çeviri isteği
↓
LibreTranslate
↓ başarısız
MyMemory
↓ başarısız
Bing
↓ başarısız
Alibaba
↓
sonuç
Yani bir motor hata verirse sistem otomatik olarak diğer motora geçebilir.

---


17. Neden Çoklu Çeviri Motoru?

Geliştirme sırasında şu sorunlarla karşılaşıldı:

HTTP 500
429 Too Many Requests
Rate Limit
Model yüklenmedi
Dil modeli çöktü
Boş çeviri
Kaynak metni aynen geri döndürme
Encoding problemi
Özellikle ücretsiz çeviri servislerinde tek sağlayıcıya bağlı kalmak stabil değildir.

Bu yüzden fallback sistemi oluşturuldu.

---


18. translation_engine.py Görevi

Ana BUILD_ALL.py artık hangi servisin kullanılacağını bilmek zorunda değildir.

Sadece:

translate_with_fallback(...)
fonksiyonunu çağırır.

Örneğin:

EN → DE
isteği yapılır.

Motor:

LibreTranslate dene
↓
başarısız

MyMemory dene
↓
başarılı

Sonuç → BUILD_ALL.py
şeklinde çalışır.

---


19. translation_cache.json

Çeviriler tekrar tekrar yapılmaz.

Örneğin:

{
"items": {
"53334": {
"_source_tr": "Minik Şimşek Kuşu",
"_english": "Tiny Lightning Bird",
"_back_tr": "Minik Şimşek Kuşu",
"_verified": true,
"en": "Tiny Lightning Bird",
"de": "...",
"fr": "...",
"ru": "..."
}
}
}
gibi saklanır.

Bir sonraki build'de aynı item için çeviri servisine tekrar istek gönderilmez.

---


20. Cache'in Avantajları

Cache sayesinde:

  • build daha hızlı olur
  • gereksiz internet isteği yapılmaz
  • rate-limit riski azalır
  • aynı item sürekli tekrar çevrilmez
  • daha önce doğrulanan sonuç korunur.



---


21. Silme Senkronizasyonu

Sistem artık sadece ekleme yapmaz.

Master'dan silinen VNUM'ları da bütün locale dosyalarından temizler.

Örneğin master'da:

50935
VNUM'u silinirse sistem:

tr/item_names.txt
en/item_names.txt
de/item_names.txt
fr/item_names.txt
...

tr/item_proto.txt
en/item_proto.txt
de/item_proto.txt
...
içerisindeki aynı VNUM'u kaldırır.

Mob için de aynı mantık geçerlidir.

---


22. Silinen VNUM Cache'den de Temizlenir

Bir VNUM master'dan tamamen kaldırılmışsa:

translation_cache.json
içerisindeki çeviri kayıtları da silinir.

Böylece eski/silinmiş item çevirileri sistemde kalmaz.

---


23. Master Gerçek Senkronizasyon Kaynağıdır

Son tasarımla sistem şu mantığa gelmiştir:

MASTER'DA VAR + LOCALE'DE YOK
→ EKLE

MASTER'DA VAR + LOCALE'DE VAR
→ DOKUNMA

MASTER'DA YOK + LOCALE'DE VAR
→ SİL
Bu nedenle locale klasörleri master'ın senkronize edilmiş kopyaları haline gelir.

---


24. Teknik Proto Senkronizasyonu

İsimlerin yanında:

item_proto.txt
mob_proto.txt
dosyaları da kontrol edilir.

Master'da bulunan teknik VNUM locale proto dosyasında yoksa:

master satırı
→ birebir locale dosyasına eklenir
Burada çeviri yapılmaz.

Proto teknik bilgidir.

---


25. Proto Silme

Master item_proto.txt veya mob_proto.txt içerisinden VNUM kaldırılırsa locale proto dosyalarından da kaldırılır.

Dolayısıyla hem isim hem teknik veri aynı merkezi sistemden yönetilir.

---


26. Encoding Güvenliği

Her hedef locale yazılmadan önce karakterlerin ilgili codepage tarafından desteklenip desteklenmediği kontrol edilir.

Örneğin Danca:

cp1252
kullanıyorsa ve metinde:

ş
gibi desteklenmeyen bir karakter bulunursa sistem sessizce dosyayı bozmaz.

Build durdurulur.

Örneğin:

ENCODING HATASI
VNUM: 53334
Dil: dk
Encoding: cp1252
şeklinde rapor verir.

---


27. DumpProto Otomasyonu

Senkronizasyon tamamlandıktan sonra sistem her locale klasöründeki:

DumpProto.exe
dosyasını otomatik çalıştırır.

Komut mantığı:

DumpProto.exe -pim
şeklindedir.

Her dil ayrı ayrı build edilir.

---


28. DumpProto Hatasında Ne Olur?

Herhangi bir dilde DumpProto başarısız olursa:

[HATA] RU
gibi rapor oluşturulur.

Ve sistem:

bin/
klasörünü güncellemez.

Bu önemlidir çünkü bin/ her zaman son başarılı build'i temsil eder.

---


29. bin Klasörü

Bütün diller başarıyla build edildiğinde:

bin/
klasörü yeniden oluşturulur.

Örneğin:

bin/
├── tr/
├── en/
├── de/
├── fr/
├── ...
Her dilin içerisine:

item_names.txt
mob_names.txt
item_proto.txt
mob_proto.txt
item_proto
mob_proto
gibi son build dosyaları kopyalanır.

---


30. bin Klasörünün Amacı

bin/:

SON BAŞARILI BUILD
olarak düşünülebilir.

Böylece production/client/server tarafına aktarılacak dosyalar tek bir klasörde bulunur.

---


31. BUILD_ALL.bat

Python dosyasını elle terminalden çağırmak yerine:

BUILD_ALL.bat
kullanılır.

BAT dosyası:

  • gerekli servisi kontrol eder
  • gerektiğinde LibreTranslate'i başlatır
  • Python scriptini çalıştırır
  • Python hata kodunu kontrol eder
  • başarılı/başarısız sonucu kullanıcıya gösterir.



---


32. Errorlevel Kontrolü

Python hata verirse BAT artık yanlışlıkla:

Başarıyla tamamlandı
demez.

Örneğin Python:

exit code 1
ile kapanırsa BAT:

BUILD_ALL.py HATA ILE DURDU
mesajı verir.

Sadece exit code 0 durumunda:

BUILD_ALL.py BASARIYLA TAMAMLANDI
gösterilir.

---


33. Kütüphane Kurulum Sistemi

Ek olarak:

INSTALL_TRANSLATORS.bat
oluşturulabilir.

Bu dosya:

deep-translator
translators
gibi gerekli çeviri kütüphanelerini kurar.

---


34. Güncelleme Sistemi

Ayrıca:

UPDATE_TRANSLATION_SYSTEM.bat
ile çeviri kütüphaneleri güncellenebilir.

LibreTranslate paketinin kendisini her seferinde güncellemek yerine mevcut çalışan sürüm korunabilir.

Bu özellikle Windows'ta:

PyICU
pkg-config
ICU
gibi native dependency sorunlarından kaçınmak için önemlidir.

---


35. Neden Bu Sistem Oluşturuldu?

Manuel sistemde bir item eklemek için:

TR
EN
DE
FR
ES
IT
NL
PT
DK
CZ
PL
HU
RO
RU
GR
AE
dosyalarının tek tek düzenlenmesi gerekir.

Bu:

  • zaman kaybı
  • yanlış VNUM
  • eksik locale
  • duplicate satır
  • yanlış encoding
  • yanlış proto
  • eski item kalıntıları

gibi birçok sorun oluşturabilir.

Yeni sistem bunların büyük bölümünü otomatik hale getirir.

---


36. Yeni Item Ekleme Örneği

Yeni item:

VNUM:
999001

TR:
Ejderha Ateşi Sandığı
Master'a:

master/item_names.txt
içerisine:

999001 Ejderha Ateşi Sandığı
eklenir.

Teknik proto satırı da:

master/item_proto.txt
içerisine eklenir.

Sonra:

BUILD_ALL.bat
çalıştırılır.

Sistem:

Duplicate kontrol
↓
EN var mı?
↓
yoksa TR → EN
↓
EN → TR teyit
↓
EN → diğer diller
↓
locale dosyalarına ekleme
↓
proto ekleme
↓
DumpProto
↓
bin
işlemlerini otomatik gerçekleştirir.

---


37. Item Silme Örneği

Bir item artık oyundan kaldırılacaksa master içerisindeki:

item_names.txt
ve:

item_proto.txt
satırları silinir.

Sonraki build sırasında sistem:

Master'da artık yok
↓
TR locale'den sil
↓
EN locale'den sil
↓
DE locale'den sil
↓
...
↓
cache'den sil
↓
DumpProto
↓
bin
işlemini yapar.

---


38. Sistemin En Büyük Avantajları

  • Tek merkezden bütün locale yönetimi
  • Yeni item/mob otomatik dağıtımı
  • Otomatik çoklu dil çevirisi
  • TR → EN → TR kalite kontrolü
  • İngilizce merkezli tutarlı çeviri
  • Çoklu çeviri sağlayıcı fallback sistemi
  • Translation cache
  • Duplicate VNUM koruması
  • Encoding koruması
  • Otomatik silme senkronizasyonu
  • Otomatik DumpProto
  • Tek bin/ çıktısı
  • Manuel hata riskinin ciddi şekilde azalması



---


39. Mimari Özeti

Sistemin tamamı özetle:

MASTER
│
┌────────┴────────┐
│ │
item/mob names proto
│ │
▼ ▼
Duplicate kontrol Duplicate kontrol
│ │
└────────┬────────┘
▼
Silme kontrolü
│
▼
Eksik VNUM kontrolü
│
▼
Existing EN?
/ \
YES NO
│ │
│ TR → EN
│ │
│ EN → TR
│ │
│ doğrulama
│ │
└─────┬─────┘
▼
English Bridge
│
┌──────────────┼──────────────┐
▼ ▼ ▼
EN→DE EN→FR EN→RU
EN→DK EN→NL EN→AR
EN→PL EN→HU ...
│ │ │
└──────────────┼──────────────┘
▼
Locale files
│
▼
Duplicate check
│
▼
DumpProto
│
▼
bin/

---


40. Sonuç

Bu proje basit bir "otomatik çeviri scripti" değildir.

Aslında:

Metin2 Proto + Locale Synchronization Pipeline
olarak düşünülebilir.

Ana hedef:

Master dosyaları düzenle
→ tek tuşla bütün dilleri senkronize et
→ doğrula
→ build et
→ hazır çıktıyı al
sistemini oluşturmaktır.

Böylece onlarca farklı locale dosyasını manuel olarak yönetmek yerine bütün süreç merkezi, kontrollü ve tekrar kullanılabilir bir otomasyon haline gelir.

Bağlantı ve içerik kilitli
Görmek için konunun ilk mesajını beğenin ve konuya bir yorum yazın.Her iki işlem de tamamlanmalı. Ardından sayfayı yenileyin.
 
Geri
En Üst