Şaman Atak Sorunu Çözümü

admin

Administrator
Yönetici
Admin
Katılım
29 Haz 2020
Mesajlar
1,315
Tepkime puanı
30
Puanları
48
Metin2 pvp oyunlarının çoğunda olan bir hata. Şaman karakterinin atak saldırı hızı ile ilgili bir hata. Bu hatanın çözümü oldukça basit aşağıdaki kodları uygulayarak şaman karakterinin saldırı sorunu fix etmiş olacaksınız.

Python kodları
Kod:
//UserInterface/Locale_inc.h

#define __ENABLE_SHAMAN_ATTACK_SPEED_FIX__

//GameLib/ActorInstance.h

        void __ProcessMotionAttackSuccess(DWORD dwMotionKey, CActorInstance & rVictim);

//add below
#ifdef __ENABLE_SHAMAN_ATTACK_SPEED_FIX__
        float __GetInvisibleTimeAdjust(const UINT uiSkill, const NRaceData::TAttackData& c_rAttackData);
#endif

//GameLib/ActorInstanceBattle.cpp
//find
    if (IS_PARTY_HUNTING_RACE(rVictim.GetRace()))
                                                                         
  //change
                                               
#ifdef __ENABLE_SHAMAN_ATTACK_SPEED_FIX__
    // 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) // #0000794: [M2KR] 폴리모프 - 밸런싱 문제 타인 공격에 의한 무적 타임은 고려하지 않고 자신 공격에 의한것만 체크한다
            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));
    }
#else
    // 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;
    }
#endif

void CActorInstance::__ProcessDataAttackSuccess
//add bellow                                    

#ifdef __ENABLE_SHAMAN_ATTACK_SPEED_FIX__
float CActorInstance::__GetInvisibleTimeAdjust(const UINT uiSkill, const NRaceData::TAttackData& c_rAttackData) {

    static const int shamanw = 3, shamanm = 7;

    if ((GetRace() != shamanw && GetRace() != shamanm) ||
        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;
}
#endif
 
Üst