MRMJ-1: Messenger & Skills fixes

This commit is contained in:
Mind Rapist
2025-12-14 06:39:06 +02:00
parent 08ed73b29c
commit e3ae5541ba
15 changed files with 6 additions and 352 deletions

View File

@@ -362,22 +362,10 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
BOOL IsActEmotion();
DWORD GetComboIndex();
float GetAttackingElapsedTime();
#ifdef FIX_POS_SYNC
void SetBlendingPosition(const TPixelPosition& c_rPosition, float fBlendingTime = 1.0f);
#else
void SetBlendingPosition(const TPixelPosition & c_rPosition, float fBlendingTime = 1.0f);
#endif
void ResetBlendingPosition();
void GetBlendingPosition(TPixelPosition * pPosition);
#ifdef FIX_POS_SYNC
struct BlendingPosition {
D3DXVECTOR3 source;
D3DXVECTOR3 dest;
float duration;
};
#endif
BOOL NormalAttack(float fDirRot, float fBlendTime = 0.1f);
BOOL ComboAttack(DWORD wMotionIndex, float fDirRot, float fBlendTime = 0.1f);
@@ -491,13 +479,6 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
void RenderCollisionData();
void RenderToShadowMap();
#ifdef FIX_POS_SYNC
void ClientAttack(DWORD dwVID);
void ServerAttack(DWORD dwVID);
bool ProcessingClientAttack(DWORD dwVID);
bool ServerAttackCameFirst(DWORD dwVID);
#endif
protected:
void __AdjustCollisionMovement(const CGraphicObjectInstance * c_pGraphicObjectInstance);
@@ -624,10 +605,6 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
void __ClearCombo();
void __OnEndCombo();
#ifdef FIX_POS_SYNC
void __Push(const TPixelPosition& c_rkPPosDst, unsigned int unDuration);
#endif
void __ProcessDataAttackSuccess(const NRaceData::TAttackData & c_rAttackData, CActorInstance & rVictim, const D3DXVECTOR3 & c_rv3Position, UINT uiSkill = 0, BOOL isSendPacket = TRUE);
void __ProcessMotionEventAttackSuccess(DWORD dwMotionKey, BYTE byEventIndex, CActorInstance & rVictim);
void __ProcessMotionAttackSuccess(DWORD dwMotionKey, CActorInstance & rVictim);
@@ -635,11 +612,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
void __HitStone(CActorInstance& rVictim);
void __HitGood(CActorInstance& rVictim);
#ifdef FIX_POS_SYNC
void __HitGreate(CActorInstance& rVictim, UINT uiSkill);
#else
void __HitGreate(CActorInstance& rVictim);
#endif
void __PushDirect(CActorInstance & rVictim);
void __PushCircle(CActorInstance & rVictim);

View File

@@ -314,76 +314,6 @@ void CActorInstance::__ClearCombo()
m_pkCurRaceMotionData = NULL;
}
#ifdef FIX_POS_SYNC
void CActorInstance::__Push(const TPixelPosition& c_rkPPosDst, unsigned int unDuration)
{
DWORD dwVID = GetVirtualID();
Tracenf("VID %d SyncPixelPosition %f %f", dwVID, c_rkPPosDst.x, c_rkPPosDst.y);
if (unDuration == 0)
unDuration = 1000;
const D3DXVECTOR3& c_rv3Src = GetPosition();
const D3DXVECTOR3 c_v3Delta = c_rkPPosDst - c_rv3Src;
SetBlendingPosition(c_rkPPostDst, float(unDuration) / 1000);
if (!IsUsingSkill() && !IsResistFallen())
{
int len = sqrt(c_v3Delta.x * c_v3Delta.x + c_v3Delta.y * c_v3Delta.y);
if (len > 150.0f)
{
InterceptOnceMotion(CRaceMotionData::NAME_DAMAGE_FLYING);
PushOnceMotion(CRaceMotionData::NAME_STAND_UP);
}
}
}
void CActorInstance::ClientAttack(DWORD dwVID)
{
if (m_mapAttackSync.find(dwVID) == m_mapAttackSync.end()) {
m_mapAttackSync.insert(std::make_pair(dwVID, -1));
}
else
{
if (m_mapAttackSync[dwVID] == 1)
{
m_mapAttackSync.erase(dwVID);
return;
}
m_mapAttackSync[dwVID]--;
}
}
// server attack increases
void CActorInstance::ServerAttack(DWORD dwVID)
{
if (m_mapAttackSync.find(dwVID) == m_mapAttackSync.end()) {
m_mapAttackSync.insert(std::make_pair(dwVID, 1));
}
else
{
if (m_mapAttackSync[dwVID] == -1)
{
m_mapAttackSync.erase(dwVID);
return;
}
m_mapAttackSync[dwVID]++;
}
}
bool CActorInstance::ProcessingClientAttack(DWORD dwVID)
{
return m_mapAttackSync.find(dwVID) != m_mapAttackSync.end() && m_mapAttackSync[dwVID] < 0;
}
//
bool CActorInstance::ServerAttackCameFirst(DWORD dwVID)
{
return m_mapAttackSync.find(dwVID) != m_mapAttackSync.end() && m_mapAttackSync[dwVID] > 0;
}
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL CActorInstance::isAttacking()
@@ -680,33 +610,14 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
InsertDelay(c_rAttackData.fStiffenTime);
#ifdef FIX_POS_SYNC
BlendingPosition sBlending;
memset(&sBlending, 0, sizeof(sBlending));
sBlending.source = rVictim.NEW_GetCurPixelPositionRef();
#endif
if (__CanPushDestActor(rVictim) && c_rAttackData.fExternalForce > 0.0f)
{
#ifdef FIX_POS_SYNC
const bool bServerAttackAlreadyCame = rVictim.ServerAttackCameFirst(GetVirtualID());
rVictim.ClientAttack(GetVirtualID());
__PushCircle(rVictim);
if (!bServerAttackAlreadyCame)
{
#endif
__PushCircle(rVictim);
// VICTIM_COLLISION_TEST
const D3DXVECTOR3& kVictimPos = rVictim.GetPosition();
rVictim.m_PhysicsObject.IncreaseExternalForce(kVictimPos, c_rAttackData.fExternalForce); //*nForceRatio/100.0f);
// VICTIM_COLLISION_TEST_END
#ifdef FIX_POS_SYNC
rVictim.GetBlendingPosition(&(sBlending.dest));
sBlending.duration = rVictim.m_PhysicsObject.GetRemainingTime();
}
#endif
// VICTIM_COLLISION_TEST
const D3DXVECTOR3& kVictimPos = rVictim.GetPosition();
rVictim.m_PhysicsObject.IncreaseExternalForce(kVictimPos, c_rAttackData.fExternalForce); //*nForceRatio/100.0f);
// VICTIM_COLLISION_TEST_END
}
// Invisible Time
@@ -778,11 +689,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
}
else if (NRaceData::HIT_TYPE_GREAT == c_rAttackData.iHittingType)
{
#ifdef FIX_POS_SYNC
__HitGreate(rVictim, uiSkill);
#else
__HitGreate(rVictim);
#endif
}
else
{
@@ -912,18 +819,10 @@ void CActorInstance::__HitGood(CActorInstance& rVictim)
}
}
#ifdef FIX_POS_SYNC
void CActorInstance::__HitGreate(CActorInstance& rVictim, UINT uiSkill)
#else
void CActorInstance::__HitGreate(CActorInstance& rVictim)
#endif
{
// DISABLE_KNOCKDOWN_ATTACK
#ifdef FIX_POS_SYNC
if (!uiSkill && rVictim.IsKnockDown())
#else
if (rVictim.IsKnockDown())
#endif
return;
if (rVictim.__IsStandUpMotion())
return;
@@ -1007,24 +906,16 @@ void CActorInstance::GetBlendingPosition(TPixelPosition * pPosition)
{
if (m_PhysicsObject.isBlending())
{
#ifdef FIX_POS_SYNC
m_PhysicsObject.GetFinalPosition(pPosition);
#else
m_PhysicsObject.GetLastPosition(pPosition);
pPosition->x += m_x;
pPosition->y += m_y;
pPosition->z += m_z;
#endif
}
else
{
#ifdef FIX_POS_SYNC
GetPixelPosition(pPosition);
#else
pPosition->x = m_x;
pPosition->y = m_y;
pPosition->z = m_z;
#endif
}
}

View File

@@ -107,32 +107,6 @@ void CPhysicsObject::IncreaseExternalForce(const D3DXVECTOR3 & c_rvBasePosition,
}
}
#ifdef FIX_POS_SYNC
void CPhysicsObject::SetLastPosition(const TPixelPosition& c_rPosition, const TPixelPosition& c_rDeltaPosition, float fBlendingTime)
{
m_v3FinalPosition.x = float(c_rPosition.x + c_rDeltaPosition.x);
m_v3FinalPosition.y = float(c_rPosition.y + c_rDeltaPosition.y);
m_v3FinalPosition.z = float(c_rPosition.z + c_rDeltaPosition.z);
m_v3DeltaPosition.x = float(c_rDeltaPosition.x);
m_v3DeltaPosition.y = float(c_rDeltaPosition.y);
m_v3DeltaPosition.z = float(c_rDeltaPosition.z);
m_xPushingPosition.Setup(0.0f, c_rDeltaPosition.x, fBlendingTime);
m_yPushingPosition.Setup(0.0f, c_rDeltaPosition.y, fBlendingTime);
}
void CPhysicsObject::GetFinalPosition(TPixelPosition* pPosition)
{
pPosition->x = (m_v3FinalPosition.x);
pPosition->y = (m_v3FinalPosition.y);
pPosition->z = (m_v3FinalPosition.z);
}
void CPhysicsObject::GetDeltaPosition(TPixelPosition* pPosition)
{
pPosition->x = (m_v3DeltaPosition.x);
pPosition->y = (m_v3DeltaPosition.y);
pPosition->z = (m_v3DeltaPosition.z);
}
#else
void CPhysicsObject::SetLastPosition(const TPixelPosition & c_rPosition, float fBlendingTime)
{
m_v3LastPosition.x = float(c_rPosition.x);
@@ -141,7 +115,6 @@ void CPhysicsObject::SetLastPosition(const TPixelPosition & c_rPosition, float f
m_xPushingPosition.Setup(0.0f, c_rPosition.x, fBlendingTime);
m_yPushingPosition.Setup(0.0f, c_rPosition.y, fBlendingTime);
}
#endif
void CPhysicsObject::GetLastPosition(TPixelPosition * pPosition)
{

View File

@@ -71,13 +71,7 @@ class CPhysicsObject
void SetDirection(const D3DXVECTOR3 & c_rv3Direction);
void IncreaseExternalForce(const D3DXVECTOR3 & c_rvBasePosition, float fForce);
#ifdef FIX_POS_SYNC
void SetLastPosition(const TPixelPosition& c_rPosition, const TPixelPosition& c_rDeltaPosition, float fBlendingTime);
void GetFinalPosition(TPixelPosition* pPosition);
void GetDeltaPosition(TPixelPosition* pPosition);
#else
void SetLastPosition(const TPixelPosition& c_rPosition, float fBlendingTime);
#endif
void GetLastPosition(TPixelPosition * pPosition);
float GetXMovement();
@@ -98,10 +92,7 @@ class CPhysicsObject
D3DXVECTOR3 m_v3Velocity;
D3DXVECTOR3 m_v3LastPosition;
#ifdef FIX_POS_SYNC
D3DXVECTOR3 m_v3FinalPosition;
D3DXVECTOR3 m_v3DeltaPosition;
#endif
CEaseOutInterpolation m_xPushingPosition;
CEaseOutInterpolation m_yPushingPosition;