Çözüldü Ninja At skill sysr

  • Konuyu açan Konuyu açan Happy Way
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 3
  • Gösterim Gösterim 71
Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

Happy Way

Yardımsever Üye
Yardımsever Üye
MT Üye
Mesaj
416
Çözümler
33
Beğeni
133
Puan
869
Ticaret Puanı
0
Failed to bind motion.
Failed to bind motion.

CActorInstance::GetMotionDuration - Cannot get motion: 1 / 173

şu şekilde debug modda sysser alıyorum bunun kaynağı nedir at skilleri m1 hasar atıyor fakat bu şekilde sysser verip duruyor bunu nasıl çözerim kaynağı nedir?

Skill kodu aşağıdaki için 140:
0412_203653.webp



Skill kodu aşağıdaki için 139
0412_203651.webp
 
Çözüm
Bu sorunun karakterle alakası yok, tamamen skillerin çalışma şekliyle ile alakalı. Ayrıca yanılmıyorsam neredeyse her fileste var bu sorun.
Ve at skillerinin arasında sadece HORSE_SKILL_CHARGE (hamleye benzeyen skill)'de bu sorun olmuyor.

Animasyon ve skill çalışıyor ama aynı zamanda syserr veriyor. Neden?
HORSE_SKILL_CHARGE, bizzat atın gr2'sine bağlı bir animasyondur ve bu yüzden sorunsuz olarak çalışır.

Ancak;
HORSE_SKILL_WILDATTACK (at üstünde kılıç sallama) ve HORSE_SKILL_SPLASH(kılıcı yere saplama) skilleri ata değil, atın üstündeki karaktere bağlı olarak çalışan animasyonlardır ve normal animasyon dosyalarından farklı olarak farklı farklı hareket hesaplamalar içerir.

Evet ata ait motlist.txt de dosyasında...
Yapay zekayla biraz tartıştık da general mod için motlist.txt satırında eksik olabileceğini söyledi ama tam olarak nereye bakıcam anlamadım

• motlist.txt veya benzeri bir dosyada mode 1 için index 3 hareketinin tanımlı olup olmadığını doğrulayın.

mode 1 MODE_GENERAL i temsil ediyor index 3 ne bilmiyorum fakat bunun motlistine ulaşabilirsem problemi çözecebilirim sanırım ordaysa eğer.
 
Bu sorunun karakterle alakası yok, tamamen skillerin çalışma şekliyle ile alakalı. Ayrıca yanılmıyorsam neredeyse her fileste var bu sorun.
Ve at skillerinin arasında sadece HORSE_SKILL_CHARGE (hamleye benzeyen skill)'de bu sorun olmuyor.

Animasyon ve skill çalışıyor ama aynı zamanda syserr veriyor. Neden?
HORSE_SKILL_CHARGE, bizzat atın gr2'sine bağlı bir animasyondur ve bu yüzden sorunsuz olarak çalışır.

Ancak;
HORSE_SKILL_WILDATTACK (at üstünde kılıç sallama) ve HORSE_SKILL_SPLASH(kılıcı yere saplama) skilleri ata değil, atın üstündeki karaktere bağlı olarak çalışan animasyonlardır ve normal animasyon dosyalarından farklı olarak farklı farklı hareket hesaplamalar içerir.

Evet ata ait motlist.txt de dosyasında ekli olmadığından dolayı bu hatayı veriyor. Bunu eklediğinde syserr gidecektir fakat animasyon çalışmayacaktır ve işler iyice karışacak.
Çünkü yukarıda da dediğim gibi, bu hata veren skiller karakterin kemik yapısıyla çalışıyor, atın kemik yapısıyla değil. Ve animasyon dosyaları at modelinde uygun kemikleri bulamadığı için bu sefer karaterin yere gömülmesi vb. sorunlar çıkacaktır. Mantık karmaşası gibi bir şey.
Ayrıca bu skiller her karakterde aynı harekete ve hesaplamalara sahip değiller. Mesela WILDATTACK skili şamanda farklı çalışır, savaşçıda farklı çalışır, ninjada farklı çalışır...
Dolayısıyla şu an ki at modeli bunların hepsini tek başına kontrol edecek bir yapıya sahip değil ve zaten kemik yapısı da uygun değil.
Bu yüzden ymir bu animasyonları horse klasörüne değil de karakter klasörlerine taşıyıp onlara özel kılmış.

Çözüme gelince; %100 sağlıklı fix için 3ds max gibi yazılımlarla düzenlemeler gerekir ve zaman alıcıdır. Eğer skiller ve animasyonlar sorunsuz çalışıyorsa çok da kafa ağrıtmaya gereken bir sorun değil. Bu senaryoda önemli olan şey her şeyin sorunsuz çalışıyor olmasıdır.
Bu sebeple ben şahsen aşağıdaki şekilde bu hata veren motionları geri çevirerek kapattım.

163-164-165 vb. sendeki değerlerle değiştirmen gerekir.

1)
C++:
Genişlet Daralt Kopyala
bool CActorInstance::__BindMotionData(DWORD dwMotionKey)
{
#ifdef HORSE_MOTION_KEY_HIDE
    DWORD idx = GET_MOTION_INDEX(dwMotionKey);
    if (!m_pkCurRaceData->GetMotionDataPointer(dwMotionKey, &m_pkCurRaceMotionData))
    {
        if (idx != 163 && idx != 164 && idx != 165)
        {
            Tracen("Failed to bind motion.");
            m_pkCurRaceMotionData = NULL;
            m_dwcurComboIndex = 0;
            return false;
        }
    }
    return true;
#else
    if (!m_pkCurRaceData->GetMotionDataPointer(dwMotionKey, &m_pkCurRaceMotionData))
    {
        Tracen("Failed to bind motion.");
        m_pkCurRaceMotionData = NULL;
        m_dwcurComboIndex = 0;
        return false;
    }
    return true;
#endif
}

2)
C++:
Genişlet Daralt Kopyala
float CActorInstance::GetMotionDuration(DWORD dwMotionKey)
{
    CGraphicThing * pMotion;
  
    if (!GetMotionThingPointer(dwMotionKey, &pMotion))
    {
#ifdef HORSE_MOTION_KEY_HIDE
        DWORD idx = GET_MOTION_INDEX(dwMotionKey);
        if (idx != 163 && idx != 164 && idx != 165)
        {
            Tracenf("CActorInstance::GetMotionDuration - Cannot get motion: %d / %d",
                GET_MOTION_MODE(dwMotionKey), GET_MOTION_INDEX(dwMotionKey));
        }
#else
        Tracenf("CActorInstance::GetMotionDuration - Cannot get motion: %d / %d",
            GET_MOTION_MODE(dwMotionKey), GET_MOTION_INDEX(dwMotionKey));
#endif
        return 0.0f;
    }

Genel Dipnot: Bu bir fix değildir. Sadece peşine düşülmesi gereken bir sorun olmadığını düşündüğüm için at animasyonlarını (eğer sağlıklı çalışıyorlarsa) syserr hatalarından hariç tutan bir düzenlemedir. Hepsi bu. Verdiğim düzenleme hardcoded tarzda olduğu için uzun vadede ekstra dikkat gerektirir. Lütfen bunun bilincinde olun!
 
Çözüm
Bu sorunun karakterle alakası yok, tamamen skillerin çalışma şekliyle ile alakalı. Ayrıca yanılmıyorsam neredeyse her fileste var bu sorun.
Ve at skillerinin arasında sadece HORSE_SKILL_CHARGE (hamleye benzeyen skill)'de bu sorun olmuyor.

Animasyon ve skill çalışıyor ama aynı zamanda syserr veriyor. Neden?
HORSE_SKILL_CHARGE, bizzat atın gr2'sine bağlı bir animasyondur ve bu yüzden sorunsuz olarak çalışır.

Ancak;
HORSE_SKILL_WILDATTACK (at üstünde kılıç sallama) ve HORSE_SKILL_SPLASH(kılıcı yere saplama) skilleri ata değil, atın üstündeki karaktere bağlı olarak çalışan animasyonlardır ve normal animasyon dosyalarından farklı olarak farklı farklı hareket hesaplamalar içerir.

Evet ata ait motlist.txt de dosyasında ekli olmadığından dolayı bu hatayı veriyor. Bunu eklediğinde syserr gidecektir fakat animasyon çalışmayacaktır ve işler iyice karışacak.
Çünkü yukarıda da dediğim gibi, bu hata veren skiller karakterin kemik yapısıyla çalışıyor, atın kemik yapısıyla değil. Ve animasyon dosyaları at modelinde uygun kemikleri bulamadığı için bu sefer karaterin yere gömülmesi vb. sorunlar çıkacaktır. Mantık karmaşası gibi bir şey.
Ayrıca bu skiller her karakterde aynı harekete ve hesaplamalara sahip değiller. Mesela WILDATTACK skili şamanda farklı çalışır, savaşçıda farklı çalışır, ninjada farklı çalışır...
Dolayısıyla şu an ki at modeli bunların hepsini tek başına kontrol edecek bir yapıya sahip değil ve zaten kemik yapısı da uygun değil.
Bu yüzden ymir bu animasyonları horse klasörüne değil de karakter klasörlerine taşıyıp onlara özel kılmış.

Çözüme gelince; %100 sağlıklı fix için 3ds max gibi yazılımlarla düzenlemeler gerekir ve zaman alıcıdır. Eğer skiller ve animasyonlar sorunsuz çalışıyorsa çok da kafa ağrıtmaya gereken bir sorun değil. Bu senaryoda önemli olan şey her şeyin sorunsuz çalışıyor olmasıdır.
Bu sebeple ben şahsen aşağıdaki şekilde bu hata veren motionları geri çevirerek kapattım.

163-164-165 vb. sendeki değerlerle değiştirmen gerekir.

1)
C++:
Genişlet Daralt Kopyala
bool CActorInstance::__BindMotionData(DWORD dwMotionKey)
{
#ifdef HORSE_MOTION_KEY_HIDE
    DWORD idx = GET_MOTION_INDEX(dwMotionKey);
    if (!m_pkCurRaceData->GetMotionDataPointer(dwMotionKey, &m_pkCurRaceMotionData))
    {
        if (idx != 163 && idx != 164 && idx != 165)
        {
            Tracen("Failed to bind motion.");
            m_pkCurRaceMotionData = NULL;
            m_dwcurComboIndex = 0;
            return false;
        }
    }
    return true;
#else
    if (!m_pkCurRaceData->GetMotionDataPointer(dwMotionKey, &m_pkCurRaceMotionData))
    {
        Tracen("Failed to bind motion.");
        m_pkCurRaceMotionData = NULL;
        m_dwcurComboIndex = 0;
        return false;
    }
    return true;
#endif
}

2)
C++:
Genişlet Daralt Kopyala
float CActorInstance::GetMotionDuration(DWORD dwMotionKey)
{
    CGraphicThing * pMotion;
 
    if (!GetMotionThingPointer(dwMotionKey, &pMotion))
    {
#ifdef HORSE_MOTION_KEY_HIDE
        DWORD idx = GET_MOTION_INDEX(dwMotionKey);
        if (idx != 163 && idx != 164 && idx != 165)
        {
            Tracenf("CActorInstance::GetMotionDuration - Cannot get motion: %d / %d",
                GET_MOTION_MODE(dwMotionKey), GET_MOTION_INDEX(dwMotionKey));
        }
#else
        Tracenf("CActorInstance::GetMotionDuration - Cannot get motion: %d / %d",
            GET_MOTION_MODE(dwMotionKey), GET_MOTION_INDEX(dwMotionKey));
#endif
        return 0.0f;
    }

Genel Dipnot: Bu bir fix değildir. Sadece peşine düşülmesi gereken bir sorun olmadığını düşündüğüm için at animasyonlarını (eğer sağlıklı çalışıyorlarsa) syserr hatalarından hariç tutan bir düzenlemedir. Hepsi bu. Verdiğim düzenleme hardcoded tarzda olduğu için uzun vadede ekstra dikkat gerektirir. Lütfen bunun bilincinde olun!
Teşekkürler skiller sorunsuz çalışıyor bende ona takılmıştım skill çalışıp neden sysser veriyor diye demekki bundan kaynaklı o zaman bu problemi görmezden gelicez
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst