fix: update move elseplayer.

This commit is contained in:
Tungdv
2025-09-10 19:08:38 +07:00
parent 5a58469e22
commit 7233e732f7
3 changed files with 59 additions and 9 deletions
Binary file not shown.
@@ -94,7 +94,7 @@ namespace PerfectWorld.Scripts.Managers
EC_ElsePlayer pPlayer = SeekOutElsePlayer(pCmd.id);
if (pPlayer)
{
//pPlayer->MoveTo(*pCmd);
pPlayer.MoveTo(pCmd);
}
}
}
@@ -158,7 +158,10 @@ namespace PerfectWorld.Scripts.Managers
}
lock (m_csPlayerTab)
{
m_PlayerTab.Add(info.cid, pPlayer);
if (m_PlayerTab.ContainsKey(info.cid))
{
m_PlayerTab[info.cid] = pPlayer;
}
}
return pPlayer;
}
@@ -189,7 +192,14 @@ namespace PerfectWorld.Scripts.Managers
private EC_ElsePlayer SeekOutElsePlayer(int cid)
{
return null;
if (!m_PlayerTab.TryGetValue(cid, out var player))
{
// Couldn't find this else player, put it into unknown player table
m_UkPlayerTab[cid] = cid;
return null;
}
return player;
}
//private cmd_object_move ConvertToStruct(byte[] bytes)
@@ -1,20 +1,60 @@
using CSNetwork.GPDataType;
using UnityEngine;
namespace PerfectWorld.Scripts.Player
{
public class EC_ElsePlayer : MonoBehaviour
{
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
A3DVECTOR3 m_vMoveDir; // Player's velocity
A3DVECTOR3 m_vServerPos; // Player's real position on server
// 是否是依附者 = Is it a dependent/attacher?
bool m_bHangerOn;
// 依附者或被依附者id = The ID of the attacher (dependent) or the attached target.
int m_iBuddyId;
bool m_bStopMove; // Stop move flag
public const float MAX_LAGDIST = 10.0f; // Maximum lag distance
public void MoveTo(cmd_object_move Cmd)
{
if (Cmd.use_time == 0)
return;
SetServerPos(Cmd.dest);
m_vMoveDir = Cmd.dest - GetPos();
float fDist = m_vMoveDir.Normalize();
m_bStopMove = false;
// If destination position is too far to us, forcely pull player
// to that position.
if (fDist >= MAX_LAGDIST)
{
SetPos(Cmd.dest);
m_pEPWorkMan->FinishWork(CECEPWork::WORK_MOVE);
return;
}
}
// Update is called once per frame
void Update()
// Set server position
public void SetServerPos(A3DVECTOR3 vPos)
{
m_vServerPos = vPos;
// If this player is a mule, change it's rider's server pos too.
//if (m_iBuddyId != 0 && !m_bHangerOn)
//{
// var pPlayer = m_pPlayerMan.GetElsePlayer(m_iBuddyId);
// if (pPlayer)
// pPlayer.SetServerPos(vPos);
// }
}
private A3DVECTOR3 GetPos()
{
A3DVECTOR3 result = new A3DVECTOR3();
result.x = transform.position.x;
result.y = transform.position.y;
result.z = transform.position.z;
return result;
}
}
// Player appear flag