void __ProcessMotionAttackSuccess(DWORD dwMotionKey, CActorInstance & rVictim);
//Altına ekle:
float __GetInvisibleTimeAdjust(const UINT uiSkill, const NRaceData::TAttackData& c_rAttackData);
// Invisible Time
if (IS_PARTY_HUNTING_RACE(rVictim.GetRace()))
{
if (uiSkill) // ÆÄƼ »ç³É ¸ó½ºÅÍ¶óµµ ½ºÅ³ÀÌ¸é ¹«Àû½Ã°£ Àû¿ë
rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
if (m_isMain) //...
Saldırı Hızı artınca atak kaçırıyor bu bir engelleme mi yoksa hata mıdır?
Bulamadım tam neresibunun sebebi pack tarafında karakterin msm dosyalarının içinde saldırı hızıyla alakalı bir kısım vardı orası ile alakalıydı sanırım
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ımAtak 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.
Çözmeye çalışıyorum hala, dönüş yaparım.
void __ProcessMotionAttackSuccess(DWORD dwMotionKey, CActorInstance & rVictim);
//Altına ekle:
float __GetInvisibleTimeAdjust(const UINT uiSkill, const NRaceData::TAttackData& c_rAttackData);
// 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;
}
// 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));
}
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;
}
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++: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++:// 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++:// 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++: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; }
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 garipyardı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)