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

@@ -1560,11 +1560,7 @@ 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("가깝기 때문에 워프 공격");
}
}
@@ -1742,11 +1738,7 @@ 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
{

View File

@@ -633,11 +633,6 @@ class CInstanceBase
bool NEW_AttackToDestInstanceDirection(CInstanceBase& rkInstDst, IFlyEventHandler* pkFlyHandler);
bool NEW_AttackToDestInstanceDirection(CInstanceBase& rkInstDst);
#ifdef FIX_POS_SYNC
void ServerAttack(DWORD dwVID);
bool ProcessingClientAttack(DWORD dwVID);
#endif
bool NEW_MoveToDestPixelPositionDirection(const TPixelPosition& c_rkPPosDst);
void NEW_MoveToDestInstanceDirection(CInstanceBase& rkInstDst);
void NEW_MoveToDirection(float fDirRot);

View File

@@ -410,18 +410,6 @@ bool CInstanceBase::NEW_AttackToDestInstanceDirection(CInstanceBase& rkInstDst)
return true;
}
#ifdef FIX_POS_SYNC
void CInstanceBase::ServerAttack(DWORD dwVID)
{
m_GraphicThingInstance.ServerAttack(dwVID);
}
bool CInstanceBase::ProcessingClientAttack(DWORD dwVID)
{
return m_GraphicThingInstance.ProcessingClientAttack(dwVID);
}
#endif
void CInstanceBase::AttackProcess()
{
if (!m_GraphicThingInstance.CanCheckAttacking())

View File

@@ -13,7 +13,6 @@
#define FIX_SEQ_254
#define CHAR_SELECT_STATS_IMPROVEMENT // Improve stats values in character select screen
#define __ENABLE_STEALTH_FIX__
//#define FIX_POS_SYNC
// Python-only
#define FIX_HORSE_SKILLS_TAB

View File

@@ -536,41 +536,6 @@ void CNetworkActorManager::MoveActor(const SNetworkMoveActorData& c_rkNetMoveAct
rkNetActorData.m_fRot=c_rkNetMoveActorData.m_fRot;
}
#ifdef FIX_POS_SYNC
void CNetworkActorManager::AttackActor(DWORD dwVID, DWORD dwAttacakerVID, LONG lDestPosX, LONG lDestPosY, const TPixelPosition& k_pSyncPos, DWORD dwBlendDuration)
{
std::map<DWORD, SNetworkActorData>::iterator f = m_kNetActorDict.find(dwVID);
if (m_kNetActorDict.end() == f)
{
return;
}
SNetworkActorData& rkNetActorData = f->second;
if (k_pSyncPos.x && k_pSyncPos.y) {
CInstanceBase* pkInstFind = __FindActor(rkNetActorData);
if (pkInstFind)
{
const bool bProcessingClientAttack = pkInstFind->ProcessingClientAttack(dwAttacakerVID);
pkInstFind->ServerAttack(dwAttacakerVID);
// if already blending, update
if (bProcessingClientAttack && pkInstFind->IsPushing() && pkInstFind->GetBlendingRemainTime() > 0.15) {
pkInstFind->SetBlendingPosition(k_pSyncPos, pkInstFind->GetBlendingRemainTime());
}
else {
// otherwise sync
//pkInstFind->SCRIPT_SetPixelPosition(k_pSyncPos.x, k_pSyncPos.y);
pkInstFind->NEW_SyncPixelPosition(k_pSyncPos, dwBlendDuration);
}
}
rkNetActorData.SetPosition(long(k_pSyncPos.x), long(k_pSyncPos.y));
}
}
#endif
void CNetworkActorManager::SyncActor(DWORD dwVID, LONG lPosX, LONG lPosY)
{
std::map<DWORD, SNetworkActorData>::iterator f=m_kNetActorDict.find(dwVID);

View File

@@ -127,10 +127,6 @@ class CNetworkActorManager : public CReferenceObject
void UpdateActor(const SNetworkUpdateActorData& c_rkNetUpdateActorData);
void MoveActor(const SNetworkMoveActorData& c_rkNetMoveActorData);
#ifdef FIX_POS_SYNC
void AttackActor(DWORD dwVID, DWORD dwAttacakerVID, LONG lDestPosX, LONG lDestPosY, const TPixelPosition& k_pSyncPos, DWORD dwBlendDuration);
#endif
void SyncActor(DWORD dwVID, LONG lPosX, LONG lPosY);
void SetActorOwner(DWORD dwOwnerVID, DWORD dwVictimVID);

View File

@@ -516,18 +516,6 @@ typedef struct command_attack
uint32_t dwVictimVID; // 적 VID
uint8_t bCRCMagicCubeProcPiece;
uint8_t bCRCMagicCubeFilePiece;
#ifdef FIX_POS_SYNC
BOOL bPacket;
LONG lSX;
LONG lSY;
LONG lX;
LONG lY;
float fSyncDestX;
float fSyncDestY;
DWORD dwBlendDuration;
DWORD dwComboMotion;
DWORD dwTime;
#endif
} TPacketCGAttack;
typedef struct command_chat
@@ -1882,16 +1870,6 @@ typedef struct packet_attack
uint32_t dwVID;
uint32_t dwVictimVID; // 적 VID
uint8_t bType; // 공격 유형
#ifdef FIX_POS_SYNC
BOOL bPacket;
LONG lSX;
LONG lSY;
LONG lX;
LONG lY;
float fSyncDestX;
float fSyncDestY;
DWORD dwBlendDuration;
#endif
} TPacketGCAttack;
typedef struct packet_c2c

View File

@@ -8,10 +8,6 @@
#include "packet.h"
#ifdef FIX_POS_SYNC
#include <GameLib/ActorInstance.h>
#endif
class CInstanceBase;
class CNetworkActorManager;
struct SNetworkActorData;
@@ -140,11 +136,7 @@ class CPythonNetworkStream : public CNetworkStream, public CSingleton<CPythonNet
bool SendSyncPositionElementPacket(DWORD dwVictimVID, DWORD dwVictimX, DWORD dwVictimY);
#ifdef FIX_POS_SYNC
bool SendAttackPacket(UINT uMotAttack, DWORD dwVIDVictim, BOOL bPacket, CActorInstance::BlendingPosition& sBlending);
#else
bool SendAttackPacket(UINT uMotAttack, DWORD dwVIDVictim);
#endif
bool SendCharacterStatePacket(const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg);
bool SendUseSkillPacket(DWORD dwSkillIndex, DWORD dwTargetVID=0);
bool SendTargetPacket(DWORD dwVID);
@@ -486,9 +478,6 @@ class CPythonNetworkStream : public CNetworkStream, public CSingleton<CPythonNet
bool RecvTargetPacket();
bool RecvViewEquipPacket();
bool RecvDamageInfoPacket();
#ifdef FIX_POS_SYNC
bool RecvCharacterAttackPacket();
#endif
// Mount
bool RecvMountPacket();

View File

@@ -2429,30 +2429,6 @@ bool CPythonNetworkStream::RecvDamageInfoPacket()
return true;
}
#ifdef FIX_POS_SYNC
bool CPythonNetworkStream::RecvCharacterAttackPacket()
{
TPacketGCAttack kPacket;
if (!Recv(sizeof(TPacketGCAttack), &kPacket))
{
Tracen("CPythonNetworkStream::RecvCharacterAttackPacket - PACKET READ ERROR");
return false;
}
if (kPacket.lX && kPacket.lY) {
__GlobalPositionToLocalPosition(kPacket.lX, kPacket.lY);
}
__GlobalPositionToLocalPosition(kPacket.lSX, kPacket.lSY);
TPixelPosition tSyncPosition = TPixelPosition{ kPacket.fSyncDestX, kPacket.fSyncDestY, 0 };
m_rokNetActorMgr->AttackActor(kPacket.dwVID, kPacket.dwVictimVID, kPacket.lX, kPacket.lY, tSyncPosition, kPacket.dwBlendDuration);
return true;
}
#endif
bool CPythonNetworkStream::RecvTargetPacket()
{
TPacketGCTarget TargetPacket;
@@ -2544,20 +2520,11 @@ bool CPythonNetworkStream::RecvChangeSpeedPacket()
///////////////////////////////////////////////////////////////////////////////////////////////////
// Recv
#ifdef FIX_POS_SYNC
bool CPythonNetworkStream::SendAttackPacket(UINT uMotAttack, DWORD dwVIDVictim, BOOL bPacket, CActorInstance::BlendingPosition& sBlending)
#else
bool CPythonNetworkStream::SendAttackPacket(UINT uMotAttack, DWORD dwVIDVictim)
#endif
{
if (!__CanActMainInstance())
return true;
#ifdef FIX_POS_SYNC
CPythonCharacterManager& rkChrMgr = CPythonCharacterManager::Instance();
CInstanceBase* pkInstMain = rkChrMgr.GetMainInstancePtr();
#endif
#ifdef ATTACK_TIME_LOG
static DWORD prevTime = timeGetTime();
DWORD curTime = timeGetTime();
@@ -2570,25 +2537,6 @@ bool CPythonNetworkStream::SendAttackPacket(UINT uMotAttack, DWORD dwVIDVictim)
kPacketAtk.header = HEADER_CG_ATTACK;
kPacketAtk.bType = uMotAttack;
kPacketAtk.dwVictimVID = dwVIDVictim;
#ifdef FIX_POS_SYNC
kPacketAtk.bPacket = bPacket;
kPacketAtk.lX = (long)sBlending.dest.x;
kPacketAtk.lY = (long)sBlending.dest.y;
kPacketAtk.lSX = (long)sBlending.source.x;
kPacketAtk.lSY = (long)sBlending.source.y;
kPacketAtk.fSyncDestX = sBlending.dest.x;
// sources and dest are normalized with both coordinates positive
// since fSync are ment to be broadcasted to other clients, the Y has to preserve the negative coord
kPacketAtk.fSyncDestY = -sBlending.dest.y;
kPacketAtk.dwBlendDuration = (unsigned int)(sBlending.duration * 1000);
kPacketAtk.dwComboMotion = pkInstMain->GetComboMotion();
kPacketAtk.dwTime = ELTimer_GetServerMSec();
if (kPacketAtk.lX && kPacketAtk.lY)
__LocalPositionToGlobalPosition(kPacketAtk.lX, kPacketAtk.lY);
__LocalPositionToGlobalPosition(kPacketAtk.lSX, kPacketAtk.lSY);
#endif
if (!SendSpecial(sizeof(kPacketAtk), &kPacketAtk))
{

View File

@@ -132,26 +132,10 @@ void CPythonPlayerEventHandler::OnChangeShape()
CPythonPlayer::Instance().NEW_Stop();
}
#ifdef FIX_POS_SYNC
void CPythonPlayerEventHandler::OnHit(UINT uSkill, CActorInstance& rkActorVictim, BOOL isSendPacket, CActorInstance::BlendingPosition* sBlending)
#else
void CPythonPlayerEventHandler::OnHit(UINT uSkill, CActorInstance& rkActorVictim, BOOL isSendPacket)
#endif
{
DWORD dwVIDVictim=rkActorVictim.GetVirtualID();
#ifdef FIX_POS_SYNC
CPythonCharacterManager::Instance().AdjustCollisionWithOtherObjects(&rkActorVictim);
CActorInstance::BlendingPosition kBlendingPacket;
memset(&kBlendingPacket, 0, sizeof(kBlendingPacket));
kBlendingPacket.source = rkActorVictim.NEW_GetCurPixelPositionRef();
if (rkActorVictim.IsPushing()) {
kBlendingPacket.dest = rkActorVictim.NEW_GetLastPixelPositionRef();
kBlendingPacket.duration = sBlending->duration;
}
#endif
// Update Target
CPythonPlayer::Instance().SetTarget(dwVIDVictim, FALSE);
// Update Target
@@ -181,11 +165,7 @@ void CPythonPlayerEventHandler::OnHit(UINT uSkill, CActorInstance& rkActorVictim
s_prevTimed[dwVIDVictim] = curTime;
#endif
CPythonNetworkStream& rkStream=CPythonNetworkStream::Instance();
#ifdef FIX_POS_SYNC
rkStream.SendAttackPacket(uSkill, dwVIDVictim, isSendPacket, kBlendingPacket);
#else
rkStream.SendAttackPacket(uSkill, dwVIDVictim);
#endif
}
if (!rkActorVictim.IsPushing())

View File

@@ -27,11 +27,7 @@ class CPythonPlayerEventHandler : public CActorInstance::IEventHandler
virtual void OnUseSkill(const SState& c_rkState, UINT uMotSkill, UINT uArg);
virtual void OnUpdate();
virtual void OnChangeShape();
#ifdef FIX_POS_SYNC
virtual void OnHit(UINT uSkill, CActorInstance& rkActorVictim, BOOL isSendPacket, CActorInstance::BlendingPosition* sBlending);
#else
virtual void OnHit(UINT uSkill, CActorInstance& rkActorVictim, BOOL isSendPacket);
#endif
void FlushVictimList();