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

Metin2 Yeni Skill Ekleme: Source ve Client Rehberi

Metin2 yeni skill ekleme işi, ilk bakışta tek bir dosyaya satır eklemek gibi görünse de aslında iki ayrı dünyanın senkron çalışmasını gerektirir: source (sunucu) tarafı yeteneğin matematiğini ve kurallarını tanımlar, client tarafı ise oyuncunun gördüğü ikonu, açıklamayı ve efekti gösterir. İki taraftaki vnum birbirini tutmazsa skill ya hiç görünmez ya da yanlış efektle tetiklenir. Bu rehberde bir skill'i sıfırdan, planlamadan teste kadar adım adım kuruyoruz.

Önce planlama: vnum, tip ve hedef kitle

Her skill benzersiz bir vnum ile tanımlanır. Yeni bir yetenek eklemeden önce hangi sınıfa (savaşçı, ninja, sura, şaman) ait olacağına, aktif mi pasif mi olduğuna ve hedefinin ne olduğuna karar verin. Metin2'de skill hedef tipleri kabaca şunlardır:

  • SKILL_TARGET_TYPE_SELF — buff/kendini güçlendirme.
  • SKILL_TARGET_TYPE_TARGET — tek hedefe hasar veya etki.
  • SKILL_TARGET_TYPE_AROUND — etrafındaki düşmanlara alan etkisi.

Kullanılmayan bir vnum seçmek kritik. Mevcut skill aralığını çakışmadan görmek için player veritabanındaki tabloyu kontrol edin:

SELECT dwVnum, szName FROM player.skill_proto ORDER BY dwVnum;

Source tarafı: skill_proto ve sabitler

Sunucu, skill verisini boot anında player.skill_proto tablosundan okur. Buraya yeni satırı eklerken en az şu alanları doldurmanız gerekir: dwVnum, szName, bType (sınıf/tür), bMaxLevel, bLevelStep ve SP/HP maliyeti ile bekleme süresi (cooldown) sütunları. Hasar veya iyileştirme formülleri genelde szPointPoly, szDurationPoly gibi polinom (formül) string sütunlarında tutulur; bunlar oyun içinde k (skill seviyesi katsayısı) ve karakter istatistikleri üzerinden hesaplanır.

Tipik bir formül sütunu şu mantıkta yazılır:

-- szPointPoly örneği (hasar formülü)
1.5 * atk + 3.0 * k * lv

Burada atk saldırı gücünü, lv karakter seviyesini, k ise skill seviyesine bağlı 0–1 arası oranı temsil eder. Formülleri abartmadan, mevcut skill'lerle dengeli tutmak en önemli kuraldır; aksi halde PvP dengesi bozulur.

Source kodunda yeni skill için ekstra C++ değişikliği genelde yalnızca özel bir mekanik gerektiğinde olur (örneğin yeni bir affect tipi, vuruş başına ek etki). Standart hasar/buff skill'leri için char_skill.cpp içindeki mevcut ComputeSkill akışı yeterlidir. Yeni bir affect kullanacaksanız length.h / affect.h içine sabitinizi tanımlamayı ve serverproto ile syncproto'nun client ile uyumlu kalmasını unutmayın.

Skill ağacına ve öğrenme koşullarına bağlama

Skill'in oyuncuya görünmesi için bir öğrenme yoluna bağlanması gerekir. Çoğu serverde bu, quest tarafındaki skill öğretmeni (Skill Master) NPC'sinden veya kitap okuma sistemiyle yapılır. Quest lua'sında yeni vnum'u skill listesine eklemek tipik olarak şöyle görünür:

when 20309.chat."Yeni Yeteneği Öğren" begin
    if pc.get_level() < 40 then
        say("Bu yeteneği öğrenmek için 40. seviye olmalısın.")
        return
    end
    pc.give_skillbook(141)  -- yeni skill vnum
end

Burada seviye kontrolü, ruh puanı koşulu veya item tüketimi gibi kuralları ekleyebilirsiniz. Skill kitabı sistemi kullanıyorsanız item_proto tarafında kitabı da tanımlamanız gerekir.

Client tarafı: skilltable, açıklama ve ikon

Sunucu skill'i tanısa bile, client onu nasıl çizeceğini bilmezse oyuncu boş bir kare görür. Client tarafında düzenlenmesi gereken üç temel nokta var:

  • locale/<dil>/skilltable.txt — skill'in vnum'unu, adını, tipini ve kullandığı motiongraph/efekt referanslarını eşler.
  • locale/<dil>/skilldesc.txt — oyuncunun fareyle üzerine geldiğinde gördüğü açıklama metni.
  • icon/skill/ — skill'in .tga ikonu; skilltable.txt içindeki yol bu dosyayı işaret etmeli.

skilltable.txt sekme (tab) ile ayrılmış sütunlardan oluşur; sütun sırası bozulursa skill yüklenmez. Yeni satırı eklerken vnum'un source ile birebir aynı olduğundan emin olun. İkon yolunu da burada belirtirsiniz:

icon/skill/warrior/new_skill.tga

Efekt ve motion bağlama

Görsel efekt, skill kullanıldığında oynayan parçacık/animasyon dosyasıdır. Metin2'de bu efektler genelde .mse (efekt) ve karakter animasyonu için .msa/motiongraph üzerinden bağlanır. skilltable.txt içindeki ilgili sütun, hangi motion ve efektin tetikleneceğini belirtir. Yeni bir efekt dosyasını projeye eklerken iki şeye dikkat edin:

  • Efekt dosyası client'ın pack/index yapısında (örn. effect paketinde) gerçekten bulunmalı; aksi halde sessizce hiçbir şey oynamaz.
  • Animasyon, ilgili ırkın motiongraph'ında tanımlı bir motion index'e karşılık gelmeli. Var olmayan bir motion çağırmak karakteri T-pozunda dondurabilir.

Hazır bir efekti yeniden kullanmak (mevcut bir skill'in .mse'sini referans almak) ilk testte en güvenli yoldur; her şeyin bağlandığını doğruladıktan sonra özgün efektinizi takabilirsiniz.

Test ve hata ayıklama

Değişiklikleri uyguladıktan sonra şu sırayla test edin: önce sunucuyu yeniden başlatıp boot loglarında skill_proto okuma hatası olup olmadığına bakın, sonra client'ı paketleyip skill'i öğrenin ve kullanın. Sık karşılaşılan sorunlar:

  • Skill ikonu boşskilltable.txt yolu yanlış veya .tga pakette yok.
  • Skill öğrenilemiyor → quest koşulu engelliyor ya da kitap item'ı tanımsız.
  • Efekt oynamıyor.mse referansı veya motion index hatalı.
  • Hasar 0 → formül string'inde yazım hatası; syserr loglarını kontrol edin.

Her zaman syserr.txt dosyasını açık tutun; Metin2'nin çoğu skill hatası sessizce buraya yazılır ve oyun içinde belirti vermez.

Sık Sorulan Sorular

Yeni skill için mutlaka source derlemem gerekir mi?

Hayır. Standart hasar veya buff skill'leri sadece skill_proto ve client dosyalarıyla eklenebilir. Source derlemesi yalnızca yeni bir affect tipi, özel bir vuruş mekaniği gibi mevcut sistemde olmayan bir davranış istediğinizde gerekir.

Client ve source vnum'u farklı olursa ne olur?

Skill ya hiç görünmez ya da yanlış ikon/efektle eşleşir. İki tarafın vnum'unun birebir aynı olması en kritik kuraldır; çoğu "skill çalışmıyor" sorununun kaynağı budur.

Efekt oynamıyorsa ilk nereye bakmalıyım?

Önce .mse efekt dosyasının client paketinde gerçekten var olduğunu, sonra çağrılan motion index'in ilgili ırkın motiongraph'ında tanımlı olduğunu doğrulayın. İkisinden biri eksikse efekt sessizce atlanır.

Kendi serverinde özel bir skill sistemi mi kuruyorsun? Source tarafı mekanik tasarımından client efekt/ikon entegrasyonuna kadar Metin2 skill çalışmalarında yardıma ihtiyacın olursa benimle iletişime geç.

Bu kategorideki tüm yazılar →

Devamı için