Die Hitrate hängt soweit ich weiß von 2 Faktoren ab:
1. Hitrate durch Boni's, sprich Set+10 Accuracy etc. unter den Faktor kann die Hitrate nicht sinken egal was du machst, sprich mit Set+10 und Accuracy hast du auch bei Mobs die 1000 Level über dir sind mindestens 65% Hitrate.
2. Zu der Prozentuellen Hitrate kommt nochmal eine ziemlich wirre Berechnung abhängig von Level des Angreifers und Verteidigers sowie deren Dex und der Ausweichraten Boni's des Verteidigers. Hierbei wird als Hitrate die Dex des Angreifers und als Ausweichrate die Dex des Verteidiger geteilt durch 2 + Ausweichraten von Ringen oder z.B.: Ancient Bogen genommen.
Edit:
MoverParam.cpp
Code:
int CMover::GetParrying()
{
if( IsPlayer() )
return ( (int)( (GetDex() * 0.5f) + GetParam( DST_PARRY, m_nAdjParry ) ) );
else
return GetProp()->dwER;
}
MoverAttack.cpp
Code:
// Hit rating
int CMover::GetHR()
{
if( IsPlayer() )
return GetDex();
else
return GetProp()->dwHR;
}
BOOL CMover::GetAttackResult( CMover* pDefender, DWORD dwOption )
{
if( m_dwMode & ONEKILL_MODE )
return TRUE;
#ifdef __EVENTLUA_SPAWN
if( IsPlayer() && pDefender->IsNPC() && prj.m_EventLua.IsEventSpawnMonster( pDefender->GetIndex() ) )
return TRUE;
#endif // __EVENTLUA_SPAWN
int nHitRate = 0;
int nHR = GetHR();
if( IsNPC() && pDefender->IsPlayer() )
{
nHitRate = (int)( ((nHR*1.5f) / (float)(nHR + pDefender->GetParrying())) * 2.0f *
(GetLevel()*0.5f / (float)(GetLevel() + pDefender->GetLevel() * 0.3f )) * 100.0f );
}
else if( IsPlayer() && pDefender->IsNPC() ) // Player VS Monster
{
nHitRate = (int)( ((nHR*1.6f) / (float)(nHR + pDefender->GetParrying())) * 1.5f *
(GetLevel()*1.2f / (float)(GetLevel() + pDefender->GetLevel())) * 100.0f );
}
else
{
#if __VER <= 9 // __PVPDEMAGE0608 // 9th PVP DEMAGE edit
nHitRate = (int)( ((nHR*1.6f) / (float)(nHR + pDefender->GetParrying())) * 1.2f * 0.6f * 100.0f );
#else //__PVPDEMAGE0608 // 9th PVP DEMAGE edit
nHitRate = (int)( ((nHR*1.6f) / (float)(nHR + pDefender->GetParrying())) * 1.2f *
(GetLevel()*1.2f / (float)(GetLevel() + pDefender->GetLevel())) * 100.0f );
#endif //__PVPDEMAGE0608 // 9th PVP DEMAGE edit
}
nHitRate += GetAdjHitRate();
if( nHitRate > 96 )
nHitRate = 96;
else if( nHitRate < MIN_HR )
nHitRate = MIN_HR;
return ( (int)( xRandom( 100 ) ) < nHitRate );
}