MR-3: Bunch of fixes

This commit is contained in:
Mind Rapist
2025-12-25 08:39:58 +02:00
parent 76b0dc793d
commit ef7c946cfb
9 changed files with 94 additions and 10 deletions

View File

@@ -1556,7 +1556,11 @@ void CInstanceBase::StateProcess()
SetAdvancingRotation(fRotDst);
SetRotation(fRotDst);
#ifdef FIX_POS_SYNC
NEW_UseSkill(1, eFunc& FUNC_SKILL - 1, uArg & 0x0f, (uArg >> 4) ? true : false);
#else
NEW_UseSkill(0, eFunc & 0x7f, uArg&0x0f, (uArg>>4) ? true : false);
#endif
//Tracen("가깝기 때문에 워프 공격");
}
}
@@ -1734,7 +1738,11 @@ void CInstanceBase::MovementProcess()
{
SetAdvancingRotation(m_fDstRot);
BlendRotation(m_fDstRot);
#ifdef FIX_POS_SYNC
NEW_UseSkill(1, m_kMovAfterFunc.eFunc& FUNC_SKILL - 1, m_kMovAfterFunc.uArg & 0x0f, (m_kMovAfterFunc.uArg >> 4) ? true : false);
#else
NEW_UseSkill(0, m_kMovAfterFunc.eFunc & 0x7f, m_kMovAfterFunc.uArg&0x0f, (m_kMovAfterFunc.uArg>>4) ? true : false);
#endif
}
else
{
@@ -1978,9 +1986,10 @@ void CInstanceBase::Render()
if (pkInstEach)
{
// MR-3: Invisibility fix
if (pkInstEach->IsAffect(AFFECT_INVISIBILITY) || pkInstEach->IsAffect(AFFECT_EUNHYEONG) || pkInstEach->IsAffect(AFFECT_REVIVE_INVISIBILITY))
{
if (CPythonPlayer::Instance().IsMainCharacterIndex(pkInstEach->GetVirtualID()))
if (CPythonPlayer::Instance().IsMainCharacterIndex(pkInstEach->GetVirtualID()) && !pkInstEach->IsAffect(AFFECT_INVISIBILITY))
continue;
if (pkInstEach->IsAffect(AFFECT_EUNHYEONG) && !pkInstEach->IsAffect(AFFECT_INVISIBILITY) && !pkInstEach->IsAffect(AFFECT_REVIVE_INVISIBILITY))
@@ -1988,6 +1997,11 @@ void CInstanceBase::Render()
else
pkInstEach->m_GraphicThingInstance.HideAllAttachingEffect();
}
else
{
pkInstEach->m_GraphicThingInstance.ShowAllAttachingEffect();
}
// MR-3: -- END OF -- Invisibility fix
}
}

View File

@@ -1662,18 +1662,36 @@ PyObject * skillGetSkillAffectDescription(PyObject * poSelf, PyObject * poArgs)
PyObject * skillGetSkillCoolTime(PyObject * poSelf, PyObject * poArgs)
{
int iSkillIndex;
if (!PyTuple_GetInteger(poArgs, 0, &iSkillIndex))
return Py_BadArgument();
float fSkillPoint;
if (!PyTuple_GetFloat(poArgs, 1, &fSkillPoint))
return Py_BadArgument();
CPythonSkill::SSkillData * c_pSkillData;
if (!CPythonSkill::Instance().GetSkillData(iSkillIndex, &c_pSkillData))
return Py_BuildException("skill.GetSkillCoolTime - Failed to find skill by %d", iSkillIndex);
return Py_BuildValue("i", c_pSkillData->GetSkillCoolTime(fSkillPoint));
// MR-3: Calculate casting speed bonus on skill cool time
DWORD dwSkillCoolTime = c_pSkillData->GetSkillCoolTime(fSkillPoint);
int iCastingSpeed = CPythonPlayer::Instance().GetStatus(POINT_CASTING_SPEED);
int iSpd = 100 - iCastingSpeed;
if (iSpd > 0)
iSpd = 100 + iSpd;
else if (iSpd < 0)
iSpd = 10000 / (100 - iSpd);
else
iSpd = 100;
dwSkillCoolTime = dwSkillCoolTime * iSpd / 100;
return Py_BuildValue("i", dwSkillCoolTime);
// MR-3: -- END OF -- Calculate casting speed bonus on skill cool time
}
PyObject * skillGetSkillNeedSP(PyObject * poSelf, PyObject * poArgs)