Metin2 skilltable.txt ve Server Senkronizasyonu: Görünen ve Gerçek Hasarı Eşitlemek
Metin2 oyuncularının sıkça dile getirdiği "Skill açıklamasında 5k yazıyor ama 3k vuruyorum" sorunu, veritabanı ile client dosyaları arasındaki matematiksel uyuşmazlıktan kaynaklanır.
Geliştiricilik dünyasında 936skilltable.txt (veya server tarafındaki skill_proto), yeteneğin gerçek vuruş gücünü belirlerken; client tarafındaki skilltable.txt (veya skilldesc.txt), oyuncuya sadece "tahmini" bir değer gösterir. Eğer bu iki dosyadaki formüller birebir aynı değilse, oyun içi "Damage Bug" algısı oluşur.
Bu rehberde, sunucu ve istemci arasındaki bu kritik senkronizasyonun nasıl sağlanacağını inceleyeceğiz.
Dosyaların Görevleri ve Farkları
Senkronizasyona başlamadan önce hangi dosyanın ne işe yaradığını netleştirmeliyiz:
Server Tarafı (skill_proto / 936skilltable):
Oyunun beynidir.
Hasar burada hesaplanır.
szPointPolyveszMasterBonusPolysütunlarındaki formüller geçerlidir.Oyuncunun ekranda ne gördüğü umurunda değildir, sadece matematiğe bakar.
Client Tarafı (locale/xx/skilltable.txt):
Oyunun vitrinidir.
Yeteneklerin isimlerini ve açıklamalarını (Tooltip) barındırır.
İçerisinde
Saldırı Değeri %.0f - %.0fgibi ifadeler barındırır.Kritik Nokta: Buradaki
%fdeğerlerini dolduran formül, client-sideskill_protoiçerisindedir. Ancak metin formatı ve sıralaması buradan çekilir.
Senkronizasyon Adımları
Eğer sunucunuzda bir düzenleme yaptıysanız (örneğin Hava Kılıcı hasarını artırdıysanız), bunu client tarafına da doğru yansıtmak zorundasınız.
1. Adım: Server Formülünü Doğrulama
Öncelikle Navicat skill_proto veya serverdaki skill_proto.txt dosyasındaki formülünüzü not edin.
Örnek (Hava Kılıcı):
(100 + str * 2 + lv * 3)
2. Adım: Client Tarafındaki Token Sıralaması
Client tarafındaki skilltable.txt dosyasını açtığınızda şöyle bir yapı görürsünüz:
1 Hava Kılıcı ... Saldırı Gücü +%.0f ...
Buradaki %.0f, bir değişkendir. Client, bu değişkenin yerine ne koyacağını Client Proto dosyasından öğrenir. Ancak skilltable.txt dosyasındaki asıl tehlike Token (Sıralama) hatasıdır.
Eğer Serverdaki skill_proto tablosunda yeteneğin türü veya etkilediği statü sırası değişmişse, skilltable.txt içindeki sütunların da (Tab boşluklarının) buna uygun olması gerekir.
3. Adım: Tooltip Formülünü Eşitleme (En Önemli Kısım)
Oyuncunun gördüğü sayı ile vurduğu sayının tutması için, Serverdaki szPointPoly formülünün aynısının Client Proto'ya işlenmesi gerekir.
Ancak skilltable.txt dosyası sadece metni tutar. Senkronizasyon için şu yolu izlemelisiniz:
Dump Proto Kullanımı: Server tarafındaki
skill_proto.txtdosyasını, "Dump Proto" aracılığıyla kapatarakskill_proto(client dosyası) haline getirin.Pack İçine Atma: Oluşturduğunuz bu dosyayı Client >
locale/tr/(veya ilgili dil) içine atın.skilltable.txt Düzenlemesi: Eğer Dump işlemi sırasında yetenek açıklamalarında kayma olduysa, manuel olarak
skilltable.txtiçindeki satırları kontrol edin.
İpucu: Eski tip fileslarda (2010-2013) formüller bazen doğrudan skilldesc.txt veya skilltable.txt içine gömülü "hardcoded" şekilde bulunabilir. Modern altyapılarda ise formül Client Proto'dan okunur.
936 ve Locale Kodlama Sorunu (Encoding)
"936skilltable.txt" ismindeki "936", genellikle Çince (GB2312) kodlama sayfasını temsil eder. Türk sunucularında ise "1254" (Windows-Turkish) kullanılır.
Eğer 936 kodlamalı bir dosyayı doğrudan Türk clientine atarsanız:
Yetenek isimleri bozulur (ÃZü gibi karakterler çıkar).
Oyun "LoadLocaleError" vererek kapanabilir.
Tooltip açıklamaları kaybolur.
Çözüm: Dosyayı Notepad++ ile açıp, tüm içeriği kopyalayın. Yeni bir dosya açıp "Encoding -> ANSI" (veya Turkish ISO-8859-9) seçerek yapıştırın ve Türkçe karakterleri (ğ, ü, ş, i, ö, ç) manuel veya "Bul/Değiştir" ile düzeltin.
Hasar Tutarsızlığı Neden Olur? (Özet Tablo)
| Durum | Sonuç |
| Server Formülü Yüksek, Client Formülü Düşük | Oyuncu "Az yazıyor ama çok vuruyorum" der (Nadir şikayet edilir). |
| Server Formülü Düşük, Client Formülü Yüksek | Oyuncu "5k yazıyor 2k vuruyor, server bozuk" der (En sık yaşanan sorun). |
| Skilltable.txt satır kayması | Yetenek açıklaması başka skilde görünür veya oyun yüklenirken atar. |
Sonuç
skilltable.txt ve skill_proto senkronizasyonu, sadece bir metin düzenlemesi değil, oyunun matematiksel dürüstlüğüdür.
Ana kaynak her zaman Server tarafıdır.
Değişiklik yapıldığında mutlaka Client tarafına Dump Proto ile güncel proto kapatılmalıdır.
skilltable.txtiçindeki%.0fyer tutucularının sayısı, yeteneğin sağladığı bonus sayısıyla eşleşmelidir.
Bu uyumu sağladığınızda, oyuncularınızın "Damage Bug" şikayetleri sona erecek ve profesyonel bir oyun deneyimi sunmuş olacaksınız.

