fix: update move elseplayer.
This commit is contained in:
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
|
||||
|
||||
Reference in New Issue
Block a user