aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Metin2

Metin2 Skill Düzenleme: Hasar ve Süre Ayarları

Metin2 skill düzenleme, bir sunucunun denge hissini doğrudan belirleyen işlerin başında gelir: bir yeteneğin vurduğu hasar, etkisinin kaç saniye sürdüğü ve tekrar kullanılana kadar geçen bekleme süresi. Bütün bunlar sihirli bir editörde değil, sunucudaki skill_proto tablosunda ve istemci tarafındaki skill_table verisinde tanımlı polinom (formül) ifadeleriyle yönetilir. Bu rehberde bu iki yapıyı, içlerindeki değişkenleri ve hasar/süre ayarlarını bozmadan nasıl dengeleyeceğinizi anlatıyorum.

skill_proto ve skill_table arasındaki fark

İki kaynağı karıştırmak en sık yapılan hatadır, o yüzden önce rolleri ayıralım:

  • skill_proto: player veritabanındaki MySQL tablosudur. Yeteneğin gerçek davranışını burası tutar — hasar formülü, süre, SP maliyeti, cooldown, ön koşul skilli, maksimum seviye. Hesaplama sunucu tarafında bu tabloya göre yapılır.
  • skill_table (istemci): client içindeki yetenek tanım dosyasıdır. İkon, isim, animasyon, hedefleme tipi gibi görsel/davranışsal meta veriyi taşır. Hasarı belirlemez; sadece oyuncuya neyin gösterileceğini söyler.

Kural basit: denge (hasar, süre, cooldown) skill_proto'da; görünüm skill_table'da. İkisi tutarsız olursa client bir şey gösterir, sunucu başka bir şey hesaplar ve oyuncular "hasar yanlış" diye şikayet eder.

skill_proto sütunlarını tanımak

Tablo geniştir ama ayar yaparken sürekli aynı birkaç sütuna dokunursunuz. En kritik olanlar:

  • dwVnum — yeteneğin benzersiz numarası (örn. Üç Katlı Vuruş, Ruh Oku vb.).
  • bMaxLevel ve bLevelStep — yeteneğin kaç basamakta hangi tavana çıktığı.
  • szPointOn + szPointPoly — etkinin neye uygulandığı (örn. HP) ve asıl hasar/etki formülü.
  • szSPCostPoly — kullanım başına mana maliyeti.
  • szDurationPoly — süreli etkilerde (zehir, sersemletme, buff) etkinin saniye cinsinden süresi.
  • szCooldownPoly — saniye cinsinden bekleme süresi.
  • szMasterBonusPolyPoint — M1/Grand Master seviyelerinde eklenen bonus.

Çoğu yetenekte ikinci ve üçüncü bir etki için szPointOn2/szPointPoly2 ve szPointOn3/szPointPoly3 sütunları da bulunur — örneğin hem hasar hem yavaşlatma uygulayan bir saldırı.

Polinom değişkenleri: formüller neye göre büyür?

Bu sütunlardaki değerler düz sayı değil, sunucunun çalışma anında çözdüğü kısa matematik ifadeleridir. İçlerinde tanımlı değişkenleri bilmeden değer değiştirmek körlemesine ilerlemektir. En çok kullanılanlar:

  • k — yeteneğin seviye katsayısı; skill yükseldikçe artan oran. Hasarın seviyeyle ölçeklenmesini sağlayan ana çarpan.
  • lv — büyüyü atan karakterin seviyesi.
  • iq, str, dex, con — karakterin ana statları; sınıfa göre hangi statın baskın olduğu burada belirlenir.
  • atk — saldırı değeri (silah + bonuslar).

Örnek bir hasar formülü şuna benzer:

szPointPoly = 1.5 * k + 2.0 * atk + 0.5 * str

Burada k'yı büyütmek yeteneği seviye atladıkça güçlendirir; atk çarpanını büyütmek ekipmana bağlı patlamayı artırır; str çarpanı ise stat dağılımını ödüllendirir. Bir değeri kabaca yarıya indirmek istiyorsanız çarpanı yarıya indirin, sabit bir tavan eklemeyin — tavanlar üst seviyede oyunu bozar.

Hasar, süre ve cooldown'u dengelemek

Pratikte ayar yaparken üç eksen birbirini etkiler. Tek başına hasarı artırmak yerine üçlüyü birlikte düşünün:

  • Hasar (szPointPoly): PvP odaklı sunucularda küçük çarpan değişimleri bile büyük fark yaratır. k çarpanını %10 oynatıp test edin; doğrudan iki katına çıkarmayın.
  • Süre (szDurationPoly): Sersemletme/uyutma gibi kontrol etkilerinde süreyi uzatmak hasardan daha güçlüdür. PvP'de 3 saniyelik bir stun, %20 fazla hasardan fena halde ağır basar.
  • Cooldown (szCooldownPoly): Bir yetenek çok güçlüyse hasarı kırpmak yerine cooldown'u uzatmak çoğu zaman daha temiz bir çözümdür; "burst" gücünü korur, spam'i engeller.

Süreli bir etkinin örnek formülü:

szDurationPoly = 2.0 + 1.0 * k     -- saniye
szCooldownPoly = 16.0 - 4.0 * k    -- yükseldikçe daha kısa bekleme

Cooldown'da seviyeyle azalan bir ifade kullanmak (negatif katsayı) yeteneği üst seviyede daha akıcı hissettirir; ancak değerin asla negatife düşmemesine dikkat edin.

Değişiklikleri güvenle uygulamak ve test etmek

skill_proto sunucu açılışında çekirdek (game core) tarafından belleğe alınır. Yani tabloyu canlı düzenleseniz bile değişiklik anında yansımaz. İzlenecek güvenli akış:

  • Her zaman önce yedek alın: mysqldump player skill_proto > skill_proto_yedek.sql
  • Değişikliği UPDATE ile, hangi yeteneğe dokunduğunuzu netleştirerek yapın:
UPDATE skill_proto
SET szPointPoly = '1.3 * k + 2.0 * atk + 0.5 * str'
WHERE dwVnum = 1;
  • Çekirdeği yeniden başlatın (ya da sunucunuzun skill reload mekanizmasını kullanın) ki yeni değerler belleğe alınsın.
  • Test karakterinde her seviye basamağında (1, M1, P, G) hasarı ve süreyi ölçün; tek bir seviyede çalışıyor görünmesi tüm eğrinin dengeli olduğu anlamına gelmez.

İstemci tarafında ikon ya da isim değiştiyse skill_table'ı da güncelleyip client'ı paketlemeyi unutmayın; yoksa oyuncular eski bilgiyi görür. Bir tek yeteneği değiştirip canlıya almadan önce kapalı bir test sunucusunda denemek, "dengeleme yaması sonrası herkes ağladı" senaryosunu önler.

Sık yapılan hatalar

  • Formülü düz sayıyla değiştirmek: 500 yazarsanız yetenek her seviyede aynı vurur; seviye eğrisi kaybolur.
  • Değişken adını yanlış yazmak: tanımlı olmayan bir değişken formülü sıfırlar; yetenek "0 hasar" verir.
  • skill_proto'yu unutup sadece client'ta oynamak: görsel değişir, hasar değişmez.
  • Yedeksiz çalışmak: tek bir yanlış UPDATE bütün sınıfı kullanılmaz hale getirebilir.

Sık Sorulan Sorular

Hasar değişikliği için sunucuyu yeniden başlatmam şart mı?

Genellikle evet. skill_proto açılışta belleğe alındığı için, çekirdeği yeniden başlatmadan (ya da varsa skill reload komutunu kullanmadan) UPDATE'ler oyunda görünmez.

k değişkeni tam olarak neyi ifade ediyor?

k, yeteneğin mevcut seviyesine bağlı bir katsayıdır; skill yükseldikçe artar ve hasarın/sürenin seviyeyle ölçeklenmesini sağlar. Sabit güç için statları, seviyeyle büyüyen güç için k çarpanını ayarlayın.

Bir yeteneği PvP'de zayıflatmak istiyorum, neyi değiştireyim?

Önce cooldown'u (szCooldownPoly) uzatmayı deneyin; bu burst gücünü korurken spam'i keser. Yetmezse k çarpanını küçük adımlarla düşürün ve her değişiklikten sonra ölçün.

Skill dengesi sunucunuzu yapan da bozan da olabilir. Eğer skill_proto formüllerini güvenle düzenleyecek, PvP dengesini test eden ve sürümler arası değişiklik tutan bir kurulum istiyorsanız, benimle iletişime geçin — birlikte sunucunuza özgü temiz bir denge planı çıkaralım.

Bu kategorideki tüm yazılar →

Devamı için