Dodge Skill

  • Konuyu açan Konuyu açan Raviel
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 8
  • Gösterim Gösterim 254

Raviel

Premium Üye
Premium Üye
MT Üye
Mesaj
258
Çözümler
5
Beğeni
304
Puan
829
Ticaret Puanı
0
Amacım aşağıdaki videoda ki dodge skillinin aynısını yapmak ileride yapmak istediğim 5v5 savaş arenası tarzı bir sistemde kullanmak için yapmayı deneyeceğim.



1759851287794.webp


İlk denemeler:

 
Selamlar herkese,
Dün o ayarı değiştir, source kısmında hareket hesaplama olayına girişlerden sonra ve bir çok farklı model(cheetah, code-supernove, claude 4.5 sonnet, gpt5) ile çalıştıktan sonra en son çözümü claude 4.5-sonnet ile çözdüm. Bu bir skill olduğundan dolayı boşuna hareket hesaplaması gibi saçma sapan şeylere girişmişim.

Doğru şekilde çalışan kod bloğu aşağıda yer alıyor:

char_skill.cpp:
Genişlet Daralt Kopyala
if (dwVnum == SKILL_DODGE)
    {
        // Dodge skill: Test movement only (no affects for now)
        int iSPCost = 290; // SP cost
       
        if (GetSP() < iSPCost)
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Not enough SP"));
            return false;
        }
       
        PointChange(POINT_SP, -iSPCost);
       
        // DEBUG: Initial state
        sys_log(0, "DODGE_DEBUG: Character=%s", GetName());
        sys_log(0, "DODGE_DEBUG: Current Position: X=%ld Y=%ld", GetX(), GetY());
        sys_log(0, "DODGE_DEBUG: Current Rotation: %.2f degrees", GetRotation());
       
        // Test: Simple backward movement
        float fDistance = 1000.0f;
        float degree = GetRotation();
        float fx = 0.0f, fy = 0.0f;

        // Backward direction
        GetDeltaByDegree(degree + 180.0f, fDistance, &fx, &fy);
        long targetX = (long)(GetX() + fx);
        long targetY = (long)(GetY() + fy);
       
        // DEBUG: Calculated values
        sys_log(0, "DODGE_DEBUG: Distance=%.2f Degree=%.2f BackwardDegree=%.2f", fDistance, degree, degree + 180.0f);
        sys_log(0, "DODGE_DEBUG: Delta: fx=%.2f fy=%.2f", fx, fy);
        sys_log(0, "DODGE_DEBUG: Target Position: X=%ld Y=%ld", targetX, targetY);

        ChatPacket(CHAT_TYPE_INFO, "[DEBUG] Dodge: From (%ld,%ld) to (%ld,%ld) - Rot:%.1f", GetX(), GetY(), targetX, targetY, GetRotation());
       
        // Knockback-style slide movement
        sys_log(0, "DODGE_DEBUG: Calling Sync(%ld, %ld)", targetX, targetY);
        Sync(targetX, targetY);
       
        sys_log(0, "DODGE_DEBUG: After Sync - Position: X=%ld Y=%ld", GetX(), GetY());
        sys_log(0, "DODGE_DEBUG: Calling Goto(%ld, %ld)", targetX, targetY);
        Goto(targetX, targetY);
       
        sys_log(0, "DODGE_DEBUG: Calling CalculateMoveDuration()");
        CalculateMoveDuration();
       
        sys_log(0, "DODGE_DEBUG: Calling SyncPacket()");
        SyncPacket();
       
        sys_log(0, "DODGE_DEBUG: Movement complete - Final Position: X=%ld Y=%ld", GetX(), GetY());
        ChatPacket(CHAT_TYPE_INFO, "[DEBUG] Dodge complete! Final pos: (%ld,%ld)", GetX(), GetY());
       
        return true;
    }

Bundan sonrası için sıradaki hedefim bu skille üzerimde eğer kötü etkiler varsa belirli bir şansla onları kaldırması ve karakterin bu dodge skillini kullandığı esnada IMMUNE olması yani hasar almamasını yapmak olacak.

Bu üzerimde ki kötü efektleri kaldırma mantığınıda iyileştirmeci şamanın şifa skillinde ki RemoveBadAffect fonksiyonundan yararlanıcam

Daha sonra skill için güzel bir efekt ve skill iconlarını ayarlayarak her karakterin bu skille sahip olabilmesi için gerekli ayarlamaları yapacağım.

Buda testin videosu:
 
Son düzenleme:
Knock da ki yere düşme olayından dolayı daha çok dezavantaj sağlar bana kalırsa, hızlı saldırı skillindeki (ya da benzer bir lycan skilli daha vardı) animasyonu geriye doğru yaparsan ilk videodaki mantıkta çalışır
 
Knock da ki yere düşme olayından dolayı daha çok dezavantaj sağlar bana kalırsa, hızlı saldırı skillindeki (ya da benzer bir lycan skilli daha vardı) animasyonu geriye doğru yaparsan ilk videodaki mantıkta çalışır
Evet evet benimde amacım aslında sistemi yapan videoda ki kişi gibi yapmak. Sadece şu anda test amaçlı knockback kullanıyorum :D kesinlikle yere düşme olmayacak ninjadaki hızlı saldırı yada sinsi zehir tarzında bir efektle çalışacak.
 
Dodge skille geriye doğru kayma efekti vermek için ninjanın hızlı saldırı skillini tersine çevirip tüm karakterlere bu skill efektiyle geriye kaydırmayı amaçlamıştım. Bunun için .mse dosyalarında ayarlamalar yaptırarak bütün dosyaları tek tek kopyaladım her karakterin pc packine.

Bunları yaptıktan sonra playersettingmodule.py içinde tüm sınıf yükleyicilerine MOTION_SKILL+247 ve MOTION_SKILL+100 için dodge_dash.msa kaydını ekledim.

Bu süreçte aldığım en büyük hatalar şunlar:
1- Karakterin /dodge skillini kullandığında kesinlikle efekt veya hareket etmemesi.
2- 2 Client açıkken dodge kullanan A clientinde bunun gözükmemesi ama server tarafında değişikliğin diğer clientlere gitmesi sebebiyle diğer B clientinde A oyuncusunun yeri değişmesi.

1. ve 2.sorunu çözmek amacıyla yapay zekanında kısaca ne yaptığını anlamanız açısından bir ekran görüntüsü bırakıyorum:
1759964442826.webp


Amacım bu testte hem beni geriye kaydırmasını görmek hemde efektin çıktığını görmek ve karakterin birazcıkta olsa dodge mantığına uyarlayabilmekti ve sonuç:



Kısa not: Animasyon yapmayı bilmediğim ve inanılmaz zaman kaybettireceğini düşündüğüm için bu animasyon fantezimi bir kenara bıraktım. Pack tarafıyla alakalı çok bilgili değilim bu sebeplede yapay zekalar bu konuda daha zayıf olduklarından henüz çok ilerleme kaydedemiyorum. Mevcut animasyonları kullanarak bu sistemi tamamlamaya çalışacağım. Bunu yaparkende yepyeni bir skill yarattım :D
 
Geri
Üst