Çözüldü Saldırı Hızı artınca atak kaçırıyor (Videolu)

  • Konuyu açan Konuyu açan asilords
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 16
  • Gösterim Gösterim 305
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ı.

asilords

MT Üye
MT Üye
Mesaj
371
Çözümler
13
Beğeni
101
Puan
749
Ticaret Puanı
0
Saldırı Hızı artınca atak kaçırıyor bu bir engelleme mi yoksa hata mıdır?

 
Çözüm
Bu sorun şaman karakterinde de mevcut. Piyasada şaman için fix var fakat ninja karakteri için yok ya da ben göremedim.
Ancak mantık basit olduğundan şaman fixine ninjayı da dahil ettim.

GameLib/ActorInstance.h:
C++:
Genişlet Daralt Kopyala
void __ProcessMotionAttackSuccess(DWORD dwMotionKey, CActorInstance & rVictim);

//Altına ekle:
float __GetInvisibleTimeAdjust(const UINT uiSkill, const NRaceData::TAttackData& c_rAttackData);

ActorInstanceBattle.cpp içinde bul:
C++:
Genişlet Daralt Kopyala
    // Invisible Time
    if (IS_PARTY_HUNTING_RACE(rVictim.GetRace()))
    {
        if (uiSkill) // ÆÄƼ »ç³É ¸ó½ºÅÍ¶óµµ ½ºÅ³ÀÌ¸é ¹«Àû½Ã°£ Àû¿ë
            rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;

        if (m_isMain) //...
Pack tarafında pc pc2 pc3 vb karakter dosyalarinda at üzerinde vurmaların içinde msa dosyalarını ayarlamak gerekir combo.msa ları özellikle
 
official dosyalarda neden böyle hata var? InvisibleTime 0.300000 'i tüm harekterlerde ama savaşçı haricinde hepsi atak kaçırıyor?
 
Atak hızının animasyon hızına bağlı olması hiç mantıklı değil zaten.
Sunucuda belirli sınırlandırmalar olmalı. bool CHARACTER::Attack fonksiyonundaki IS_SPEED_HACK bloğunu devredışı bırakmayı deneyin.
Eğer atak kaçırmıyorsa, bu fonksiyondaki sınırlar istediğiniz noktaya çekilebilir.
 
Atak hızının animasyon hızına bağlı olması hiç mantıklı değil zaten.
Sunucuda belirli sınırlandırmalar olmalı. bool CHARACTER::Attack fonksiyonundaki IS_SPEED_HACK bloğunu devredışı bırakmayı deneyin.
Eğer atak kaçırmıyorsa, bu fonksiyondaki sınırlar istediğiniz noktaya çekilebilir.
Dediğinizi denedim fakat aynı hala game src üzerinden değil bence cünkü aralardaki vuruşlarda metin titremiyor ıska geciyor cilent üzerinden olabilir hala uğraşmaktayım
 
Son düzenleme:
Bu sorun şaman karakterinde de mevcut. Piyasada şaman için fix var fakat ninja karakteri için yok ya da ben göremedim.
Ancak mantık basit olduğundan şaman fixine ninjayı da dahil ettim.

GameLib/ActorInstance.h:
C++:
Genişlet Daralt Kopyala
void __ProcessMotionAttackSuccess(DWORD dwMotionKey, CActorInstance & rVictim);

//Altına ekle:
float __GetInvisibleTimeAdjust(const UINT uiSkill, const NRaceData::TAttackData& c_rAttackData);

ActorInstanceBattle.cpp içinde bul:
C++:
Genişlet Daralt Kopyala
    // Invisible Time
    if (IS_PARTY_HUNTING_RACE(rVictim.GetRace()))
    {
        if (uiSkill) // ÆÄƼ »ç³É ¸ó½ºÅÍ¶óµµ ½ºÅ³ÀÌ¸é ¹«Àû½Ã°£ Àû¿ë
            rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;

        if (m_isMain) // #0000794: [M2KR] Æú¸®¸ğÇÁ - ¹ë·±½Ì ¹®Á¦ ŸÀÎ °ø°İ¿¡ ÀÇÇÑ ¹«Àû ŸÀÓÀº °í·ÁÇÏÁö ¾Ê°í ÀڽŠ°ø°İ¿¡ ÀÇÇѰ͸¸ üũÇÑ´Ù
            rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
    }
    else // ÆÄƼ »ç³É ¸ó½ºÅÍ°¡ ¾Æ´Ò °æ¿ì¸¸ Àû¿ë
    {
        rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
    }

Değiştir:
C++:
Genişlet Daralt Kopyala
    // Invisible Time
    if (IS_PARTY_HUNTING_RACE(rVictim.GetRace()))
    {
        if (uiSkill)
            rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + (c_rAttackData.fInvisibleTime - __GetInvisibleTimeAdjust(uiSkill, c_rAttackData));

        if (m_isMain)
            rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + (c_rAttackData.fInvisibleTime - __GetInvisibleTimeAdjust(uiSkill, c_rAttackData));
    }
    else
    {
        rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + (c_rAttackData.fInvisibleTime - __GetInvisibleTimeAdjust(uiSkill, c_rAttackData));
    }

Aynı dosyanın en altına ekle:
C++:
Genişlet Daralt Kopyala
float CActorInstance::__GetInvisibleTimeAdjust(const UINT uiSkill, const NRaceData::TAttackData& c_rAttackData) {

    static const int shamanw = 3, shamanm = 7;
    static const int assassinw = 1, assassinm = 5;

    if ((GetRace() != shamanw && GetRace() != shamanm) && (GetRace() != assassinw && GetRace() != assassinm) ||
        uiSkill != 0 ||
        m_fAtkSpd < 1.3)
        return 0.0f;

    const auto scale = (m_fAtkSpd - 1.3) / 1.3;
    const auto inv = c_rAttackData.fInvisibleTime * 0.5;
    return inv * scale;
}
 
Çözüm
Bu sorun şaman karakterinde de mevcut. Piyasada şaman için fix var fakat ninja karakteri için yok ya da ben göremedim.
Ancak mantık basit olduğundan şaman fixine ninjayı da dahil ettim.

GameLib/ActorInstance.h:
C++:
Genişlet Daralt Kopyala
void __ProcessMotionAttackSuccess(DWORD dwMotionKey, CActorInstance & rVictim);

//Altına ekle:
float __GetInvisibleTimeAdjust(const UINT uiSkill, const NRaceData::TAttackData& c_rAttackData);

ActorInstanceBattle.cpp içinde bul:
C++:
Genişlet Daralt Kopyala
    // Invisible Time
    if (IS_PARTY_HUNTING_RACE(rVictim.GetRace()))
    {
        if (uiSkill) // ÆÄƼ »ç³É ¸ó½ºÅÍ¶óµµ ½ºÅ³ÀÌ¸é ¹«Àû½Ã°£ Àû¿ë
            rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;

        if (m_isMain) // #0000794: [M2KR] Æú¸®¸ğÇÁ - ¹ë·±½Ì ¹®Á¦ ŸÀÎ °ø°İ¿¡ ÀÇÇÑ ¹«Àû ŸÀÓÀº °í·ÁÇÏÁö ¾Ê°í ÀڽŠ°ø°İ¿¡ ÀÇÇѰ͸¸ üũÇÑ´Ù
            rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
    }
    else // ÆÄƼ »ç³É ¸ó½ºÅÍ°¡ ¾Æ´Ò °æ¿ì¸¸ Àû¿ë
    {
        rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
    }

Değiştir:
C++:
Genişlet Daralt Kopyala
    // Invisible Time
    if (IS_PARTY_HUNTING_RACE(rVictim.GetRace()))
    {
        if (uiSkill)
            rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + (c_rAttackData.fInvisibleTime - __GetInvisibleTimeAdjust(uiSkill, c_rAttackData));

        if (m_isMain)
            rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + (c_rAttackData.fInvisibleTime - __GetInvisibleTimeAdjust(uiSkill, c_rAttackData));
    }
    else
    {
        rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + (c_rAttackData.fInvisibleTime - __GetInvisibleTimeAdjust(uiSkill, c_rAttackData));
    }

Aynı dosyanın en altına ekle:
C++:
Genişlet Daralt Kopyala
float CActorInstance::__GetInvisibleTimeAdjust(const UINT uiSkill, const NRaceData::TAttackData& c_rAttackData) {

    static const int shamanw = 3, shamanm = 7;
    static const int assassinw = 1, assassinm = 5;

    if ((GetRace() != shamanw && GetRace() != shamanm) && (GetRace() != assassinw && GetRace() != assassinm) ||
        uiSkill != 0 ||
        m_fAtkSpd < 1.3)
        return 0.0f;

    const auto scale = (m_fAtkSpd - 1.3) / 1.3;
    const auto inv = c_rAttackData.fInvisibleTime * 0.5;
    return inv * scale;
}

İşe yaradı @Kaiser



@asilords zorla çözdürdü, 3 gündür en tepede bu konu :ROFLMAO:
 
İşe yaradı @Kaiser



@asilords zorla çözdürdü, 3 gündür en tepede bu konu :ROFLMAO:

hahahaha harbiden işe yaradı ama anlamadığım şey @Kaiser'in çözümünü bire bir ilk gün denedim işe yaramadı ve konuyu açtım aynısın şuan deneyince işe yaradı cok garip :D yardımcı olan herkese teşekkür ederim :) edit:çözüm işe yarıyor ancak farklı fileslerde bu sorun yok ve çözümüde bu değil)
 
hahahaha harbiden işe yaradı ama anlamadığım şey @Kaiser'in çözümünü bire bir ilk gün denedim işe yaramadı ve konuyu açtım aynısın şuan deneyince işe yaradı cok garip :D yardımcı olan herkese teşekkür ederim :) edit:çözüm işe yarıyor ancak farklı fileslerde bu sorun yok ve çözümüde bu değil)
Ekran görüntüsü 2025-03-11 233429.webp
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst