Ana sayfa/Knight Online/Damage Lab

CANAVAR COMBAT MODEL

Damage Lab

İki karakteri stat ve ekipmanla diz, skill puanlarını dağıt; AP, AC, HP ve her skill'in hasarı sunucunun kendi formülleriyle hesaplansın. Binlerce düelloyu simüle et.

✓ GameServer.exe GetDamage · SetUserAbility
✓ COEFFICIENT · COEFFICIENT_DAMAGE (DB)
B = 2·AP / (AC + 240)

Item seç

Hesaplama modeli — sunucudan çıkarılan formüller

Formüller AKGame GameServer.exe (x64) disassemble edilerek, sınıf katsayıları KO_DATABASE yedeğinden okunarak çıkarıldı. Fonksiyon adresleri o binary'ye aittir.

1 · Karakter değerleri — CUser::SetUserAbility (0x1400d62e0)

item  = (sağ el dmg + bonus) + sol el (yay: tam, diğerleri: ½), en az 3
AP    = (item·coef·lvl·STAT + 0.005·item·(STAT+40) + 3) · (100+AP%)/100 + baseAP + düz AP
        STAT: Rogue → DEX, Priest (INT>240) → INT ve 1.7× katsayı, diğerleri → STR
        baseAP: STR>150 ise STR−150 (STR=160'ta bir eksik), INT>240 priest'te INT−150, rogue'da yok
AC    = (lvl + item AC)·coef.AC → +mastery % → +(STA−100) → +düz AC → ·AC%/100
Hit   = (1 + coef.Hit·lvl·DEX) · itemHit%/100 · ⌊HitBuff/100⌋
Eva   = (1 + coef.Eva·lvl·DEX) · itemEva%/100 · ⌊EvaBuff/100⌋
MaxHP = coef.HP·lvl²·STA + 0.1·lvl·STA + STA/5 + HP bonus + 20

2 · Vuruş — CUser::GetDamage (0x14028f800)

tempAC = max(0, AC + AC buff − AC debuff) · (100 + sınıf AC bonusu)/100
tempAP = AP · AttackAmount · PvP AP%/100 · (100 + hedef sınıfa AP%)/100
B      = ⌊2·tempAP / (tempAC + 240)⌋
R      = ⌊0.85·B + 0.3·rand(0..B)⌋                       (normal vuruş)
Skill  = ⌊B·sHit% + 0.3·rand(0..T/5) + 0.99⌋              (type 1)
Ok     = ⌊1.8·T·0.6 + rand(0..T/5) + 0.99⌋                (type 2, ×1.8 AKGame'e özel)

3 · Hit şansı — Unit::GetHitRate (0x140290210)

Oran = Hit / Evasion (+1 normal vuruşta). rand(1..10000) eşiğe göre:

oran ≥5321.250.80.50.330.2<0.2
isabet98%96%94%92%90%80%70%60%50%

4 · Hasar zinciri (sırasıyla)

  • Elemental — GetMagicDamage (0x140290470): her element için miktar − miktar·min(200, direnç + direnç bonusu)/200. Zehirde hedefin zehir direnci hiç okunmuyor, sadece direnç bonusu düşüyor. Iskada bile eklenir.
  • HP drain / mirror — drain bu ara hasar üzerinden saldırana HP verir; hedefin mirror'u aynı değerden saldırana yansır.
  • Silah direnci — GetACDamage (0x14028eb10): saldıranın her elindeki silah için hasar −= hasar·direnç/250. Çift dagger iki kez düşer. Dagger ve yay direnci kendi % çarpanıyla.
  • Sınıf katsayısı — COEFFICIENT_DAMAGE tablosu (saldıran sınıf × hedef grubu).
  • PvP bölücü — normalde ÷2, zone bayrağı açıksa ÷3.
  • ±%10 sapma — hasarın %10'u ≥ 10 ise rand(−%10, +%10) eklenir; sonuç ±32000 ile sınırlanır.

5 · Mastery ve düşük HP pasifleri

  • Warrior Novice / Kurian Novice: master puanına göre AC +5/8/10/13 %, direnç +15/30/45.
  • Warrior Master: AC +20/34/40/50/60/80 %, direnç +30/60/90 — sol elde kalkan yoksa yarıya iner.
  • Kurian Master: AC +5/8/10/13/15/20 %, direnç +15/30/45.
  • HP %30 altında: Warrior Master & Priest Master AC +%20, Rogue Master direnç +50, Kurian Master (skill[8] 15–23) AP +%20. Düelloda HP eşiği geçince otomatik uygulanır.
  • INT > 100 → direnç bonusu +(INT−100)/2.

6 · Skill'ler — MagicInstance::ExecuteType1/2/3

  • Type 1 (yakın) (0x1401cf7a0): GetDamage'in skill dalı (B·Hit%), sonra AddDamage eklenir — PvP'de ÷3 (özel zonda ÷2) — ve AddDmgPercToUser % ile çarpılır.
  • Type 2 (ok) (0x1401d0010): her ok ayrı GetDamage atışı (×1.8 AKGame çarpanı), NeedArrow kadar ok.
  • Type 3 (büyü) — GetMagicDamage (0x1401d8330). Oyuncu büyüsünde isabet zarı yok:
mage    : x = ⌈MP_toplam · FirstDamage / 102.5⌉ · (170 + büyü buff) / 100
diğerleri: x = FirstDamage · (500 + büyü buff) / 100          (DAMAGE_SETTINGS.kurianzehir = 500)
x = 485·x / (direnç + direnç bonusu + 510) · COEFFICIENT_DAMAGE
mage değilse: x = ⌊x/80⌋ · ⌊2·(AP·AttackAmount/5·PvP%) / (AC+240)⌋
x = 0.85·x + 0.1·rand(0, x/2) + 170 (veya 500)
x += staff·lvl/60 + 0.8·staff + elemental·lvl/60 + 0.8·elemental   (büyü elementi “magic” değilse)
warrior: ÷2 (staff yoksa), sonra PvP ÷3

DAMAGE_SETTINGS'teki sınıf çiftleri (ör. mage→warrior 1.4) binary'de hiçbir yerde okunmuyor. Okunan değerler: canavar ayarları (sadece NPC), item sınıfı çarpanları (çağrılmayan fonksiyon) ve kurianzehir.

7 · Karakter dizici

  • Base statlar CHARACTER_SET_VALIDS tablosundan (ırk/sınıf). Dağıtılabilir puan: 10 + 3·(lvl−1) + 2·(lvl−60), 83'te 302. Skill puanı: 2·(lvl−9), master en fazla 23.
  • Itemler ITEM tablosundan (≈250 bin varyant, slot/tür bazında ayrı dosyalar). Toplanan alanlar: Damage, Ac, Hitrate/Evasionrate (100 + toplam), silah AC'leri, elemental hasar, drain/mirror, stat bonusları, MaxHpB ve dirençler.
  • Büyü elemental bonusu: sağ eldeki staff + eller dışındaki itemler (sunucu silahları bu döngüden çıkarıyor).
  • Kaynak: server reposundaki Client\ klasörü (UI/Item paketleri, Chr iskelet ve animasyonları, Data tabloları). Stok client sadece server client'ta olmayan 12 ikon için yedek olarak kullanılıyor.
  • Model ve ikon numarası: ITEM.ItemIconID1 = model, ItemIconID2 = ikon (client'ın Item_Org tablosuyla doğrulandı); Item_Ext_N tablolarındaki kayıt (id = Num % 1000) bunları ezebilir (471 item). İkon dosyası UI\itemicon_A_BBBB_CC_D.dxt. İsim renkleri ItemType'a göre (Unique, Rare, Upgrade…).
  • 3D karakter: client'ın Item\item arşivindeki ırk modelleri, iskelet (.n3joint) ve breath animasyonunun ilk karesiyle oyunun kendi skinning'i (v = vOrigin · inv(M₀) · M) uygulanarak bekleme pozunda. Zırh parçası Item\A_(BBBB+ırk)_CC_D.n3cpart, silah Item\A_BBBB_CC_D.n3cplug (MakeResrcFileNameForUPC); silah sağ el / sol el, kalkan sol ön kol kemiğine takılır. Client'ta modeli olmayan itemler (ör. Holy Knight, Rosetta, Bloody Sword gibi n3chrplug'lı silahlar) çıplak gövde parçasıyla gösterilir. Puri Tuarek'in iskeleti olmadığı için modeli A-pozunda.
  • Tooltip satırları ve metinleri oyunun CUIImageTooltipDlg sırasıyla aynı; karşılanmayan level/stat/sınıf gereksinimleri kırmızı.

Sınırlamalar

  • Saldırı hızı sunucuda bu fonksiyonlarda yok; düelloda vuruş/cast aralığını sen giriyorsun. Skill cooldown'ları ve DOT düelloya katılmıyor.
  • Buff/skill kaynaklı alanlar (AC buff, AttackAmount vb.) sunucudaki toplam değerlerdir; hangi skill'in ne verdiğini oyundaki değerle girmen gerekir.
  • Set bonusları (SET_ITEM), item_op tetiklemeleri, NPC hedefler, Kurian'ın özel büyü dalı ve perk tablosunun kendisi modellenmedi; PvP perk % elle girilir.