MRMJ-1: Messenger & Skills fixes

This commit is contained in:
Mind Rapist
2025-12-14 05:12:39 +02:00
parent 436db01a80
commit 7b08687023
46 changed files with 1258 additions and 60 deletions

View File

@@ -1495,7 +1495,18 @@ bool CPythonNetworkStream::RecvPointChange()
case POINT_STAT_RESET_COUNT:
__RefreshStatus();
break;
#ifdef CHAR_SELECT_STATS_IMPROVEMENT
case POINT_PLAYTIME:
m_akSimplePlayerInfo[m_dwSelectedCharacterIndex].dwPlayMinutes = PointChange.value;
break;
case POINT_LEVEL:
m_akSimplePlayerInfo[m_dwSelectedCharacterIndex].byLevel = PointChange.value;
__RefreshStatus();
__RefreshSkillWindow();
break;
#else
case POINT_LEVEL:
#endif
case POINT_ST:
case POINT_DX:
case POINT_HT:
@@ -2332,16 +2343,19 @@ bool CPythonNetworkStream::RecvSkillCoolTimeEnd()
bool CPythonNetworkStream::RecvSkillLevel()
{
assert(!"CPythonNetworkStream::RecvSkillLevel - 사용하지 않는 함수");
TPacketGCSkillLevel packet;
if (!Recv(sizeof(TPacketGCSkillLevel), &packet))
{
Tracen("CPythonNetworkStream::RecvSkillLevel - RecvError");
return false;
}
DWORD dwSlotIndex;
CPythonPlayer& rkPlayer = CPythonPlayer::Instance();
CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
for (int i = 0; i < SKILL_MAX_NUM; ++i)
{
if (rkPlayer.GetSkillSlotIndex(i, &dwSlotIndex))
@@ -2350,7 +2364,9 @@ bool CPythonNetworkStream::RecvSkillLevel()
__RefreshSkillWindow();
__RefreshStatus();
Tracef(" >> RecvSkillLevel\n");
return true;
}
@@ -2364,7 +2380,7 @@ bool CPythonNetworkStream::RecvSkillLevelNew()
return false;
}
CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
CPythonPlayer& rkPlayer = CPythonPlayer::Instance();
rkPlayer.SetSkill(7, 0);
rkPlayer.SetSkill(8, 0);
@@ -2412,6 +2428,31 @@ 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;
@@ -2503,11 +2544,20 @@ 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();
@@ -2520,6 +2570,25 @@ 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))
{
@@ -2814,6 +2883,26 @@ bool CPythonNetworkStream::RecvMessenger()
CPythonMessenger::Instance().SetMobile(char_name, byState);
break;
}
#ifdef FIX_MESSENGER_ACTION_SYNC
case MESSENGER_SUBHEADER_GC_REMOVE_FRIEND:
{
BYTE bLength;
if (!Recv(sizeof(bLength), &bLength))
return false;
if (!Recv(bLength, char_name))
return false;
char_name[bLength] = 0;
CPythonMessenger::Instance().RemoveFriend(char_name);
__RefreshTargetBoardByName(char_name);
break;
}
#endif
}
return true;
}
@@ -3984,6 +4073,7 @@ bool CPythonNetworkStream::RecvWalkModePacket()
bool CPythonNetworkStream::RecvChangeSkillGroupPacket()
{
TPacketGCChangeSkillGroup ChangeSkillGroup;
if (!Recv(sizeof(ChangeSkillGroup), &ChangeSkillGroup))
return false;
@@ -3991,6 +4081,7 @@ bool CPythonNetworkStream::RecvChangeSkillGroupPacket()
CPythonPlayer::Instance().NEW_ClearSkillData();
__RefreshCharacterWindow();
return true;
}