fix: update logic move and stop elesplayer.

This commit is contained in:
Tungdv
2025-09-13 16:17:45 +07:00
parent b30dffff1c
commit d8869e6495
3 changed files with 128 additions and 16 deletions
Binary file not shown.
@@ -2,6 +2,7 @@
using BrewMonster.Network;
using CSNetwork;
using CSNetwork.GPDataType;
using CSNetwork.Protocols.RPCData;
using PerfectWorld.Scripts.Player;
using System;
using System.Collections;
@@ -76,7 +77,8 @@ namespace PerfectWorld.Scripts.Managers
if (cid != iHostID)
{
info_player_1 info_Player_1 = GPDataTypeHelper.FromBytes<info_player_1>((byte[])Msg.dwParam1);
ElsePlayerEnter(info_Player_1, commandID);
RoleInfo roleInfo = (RoleInfo)Msg.dwParam4;
ElsePlayerEnter(info_Player_1, commandID, roleInfo);
GameController.Instance.Log("ElsePlayer has join");
}
break;
@@ -131,7 +133,7 @@ namespace PerfectWorld.Scripts.Managers
return true;
}
public EC_ElsePlayer ElsePlayerEnter(info_player_1 info, int iCmd)
public EC_ElsePlayer ElsePlayerEnter(info_player_1 info, int iCmd, RoleInfo roleInfo)
{
// If this player's id is in unknown table, remove it because this player
// won't be unknown anymore
@@ -152,12 +154,12 @@ namespace PerfectWorld.Scripts.Managers
{
// This player has existed in player table, call special initial function
// TODO: fix after pPlayer init
//pPlayer.Init(Info, iAppearFlag, true);
pPlayer.Init(roleInfo, info);
return pPlayer;
}
// Create a new player
if (!(pPlayer = CreateElsePlayer(info, iAppearFlag)))
if (!(pPlayer = CreateElsePlayer(roleInfo, info, iAppearFlag)))
{
return null;
}
@@ -175,12 +177,13 @@ namespace PerfectWorld.Scripts.Managers
return pPlayer;
}
private EC_ElsePlayer CreateElsePlayer(info_player_1 info, int iAppearFlag)
private EC_ElsePlayer CreateElsePlayer(RoleInfo roleInfo, info_player_1 info, int iAppearFlag)
{
var ob = GameController.Instance.InitCharacter(info);
EC_ElsePlayer elsePlayer = ob.AddComponent<EC_ElsePlayer>();
elsePlayer.GetComponent<CharacterCtrl>().enabled = false;
//init
elsePlayer.Init(roleInfo, info);
return elsePlayer;
}
@@ -1,6 +1,7 @@
using BrewMonster;
using CSNetwork;
using CSNetwork.GPDataType;
using CSNetwork.Protocols.RPCData;
using System;
using UnityEngine;
@@ -23,6 +24,111 @@ namespace PerfectWorld.Scripts.Player
OtherPlayer_Move_Info m_cdr = new OtherPlayer_Move_Info();
// 和服务器提供的 aabb,无法影响朝向 = The AABB provided by the server cannot affect the facing/orientation
A3DAABB m_aabbServer = new A3DAABB();
A3DAABB m_aabb = new A3DAABB(); // Player's aabb£¬ÓÃÓÚÏÔʾµÄaabb£¬ÊÜËõ·ÅÓ°Ïì
string m_strName; // Player name
int m_iProfession; // Profession
int m_iGender; // Gender
float m_fScaleBySkill = 1f;
MOVECONST m_MoveConst; // Const used when moving control
public MOVECONST[] aMoveConsts = new MOVECONST[PROFESSION.NUM_PROFESSION * GENDER.NUM_GENDER]
{
// ÎäÏÀ
// fStepHei fMinAirHei fMinWaterHei fShoreDepth fWaterSurf
new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
// ·¨Ê¦
new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
// Î×ʦ
new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
// Ñý¾«
new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
// ÑýÊÞ
new MOVECONST(0.8f, 1.6f, 0.3f, 1.8f, 0.7f),
new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
// ´Ì¿Í
new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
// Óðâ
new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
// ÓðÁé
new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
// ½£Áé
new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
// ÷ÈÁé
new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
// Ò¹Ó°
new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
// ÔÂÏÉ
new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
};
public A3DVECTOR3[] aExts = new A3DVECTOR3[PROFESSION.NUM_PROFESSION * GENDER.NUM_GENDER]
{
new A3DVECTOR3(0.4f, 0.9f, 0.4f), // ÎäÏÀ
new A3DVECTOR3(0.3f, 0.85f, 0.3f),
new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ·¨Ê¦
new A3DVECTOR3(0.3f, 0.85f, 0.3f),
new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Î×ʦ
new A3DVECTOR3(0.3f, 0.85f, 0.3f),
new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Ñý¾«
new A3DVECTOR3(0.3f, 0.85f, 0.3f),
new A3DVECTOR3(0.5f, 1.05f, 0.5f), // ÑýÊÞ
new A3DVECTOR3(0.3f, 0.9f, 0.3f),
new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ´Ì¿Í
new A3DVECTOR3(0.3f, 0.85f, 0.3f),
new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Óðâ
new A3DVECTOR3(0.3f, 0.85f, 0.3f),
new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ÓðÁé
new A3DVECTOR3(0.3f, 0.85f, 0.3f),
new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ½£Áé
new A3DVECTOR3(0.3f, 0.85f, 0.3f),
new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ÷ÈÁé
new A3DVECTOR3(0.3f, 0.85f, 0.3f),
new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Ò¹Ó°
new A3DVECTOR3(0.3f, 0.85f, 0.3f),
new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ÔÂÏÉ
new A3DVECTOR3(0.3f, 0.85f, 0.3f),
};
public void Init(RoleInfo roleInfo, info_player_1 Info)
{
m_iProfession = roleInfo.occupation;
m_iGender = roleInfo.gender;
CalcPlayerAABB();
SetServerPos(Info.pos);
SetPos(Info.pos);
m_cdr.fStepHeight = m_MoveConst.fStepHei;
m_cdr.vExts = m_aabbServer.Extents;
m_cdr.vVelocity.Clear();
A3DVECTOR3 vPos = GetPos();
m_aabb.Center = vPos + new A3DVECTOR3(0.0f, m_aabb.Extents.y, 0.0f);
m_aabb.CompleteMinsMaxs();
m_aabbServer.Center = vPos + new A3DVECTOR3(0.0f, m_aabbServer.Extents.y, 0.0f);
m_aabbServer.CompleteMinsMaxs();
}
void CalcPlayerAABB()
{
int iIndex = m_iProfession * GENDER.NUM_GENDER + m_iGender;
m_aabb.Extents = aExts[iIndex] * m_fScaleBySkill;
m_aabbServer.Extents = aExts[iIndex];
m_MoveConst = aMoveConsts[iIndex];
}
public void MoveTo(cmd_object_move Cmd)
{
@@ -56,7 +162,7 @@ namespace PerfectWorld.Scripts.Player
}
public bool MovingTo(long dwDeltaTime)
public bool MovingTo(float dwDeltaTime)
{
bool bRet = false;
@@ -73,13 +179,11 @@ namespace PerfectWorld.Scripts.Player
if (Math.Abs(fMoveDelta - 0f) <= float.Epsilon || fMoveDelta >= fDist) //!fMoveDelta <=> (Math.Abs(fMoveDelta - 0f) <= float.Epsilon) Compare with 0
{
SetPos(m_vServerPos);
//.LogError("m_vServerPos 1= " + m_vServerPos);
bRet = true;
}
else
{
SetPos(vPos);
//Debug.LogError("vPos 1= " + vPos);
}
}
else // Just move on
@@ -91,7 +195,6 @@ namespace PerfectWorld.Scripts.Player
if (fDist >= MAX_LAGDIST)
{
SetPos(m_vServerPos);
//Debug.LogError("m_vServerPos 2= " + m_vServerPos);
return true;
}
@@ -99,7 +202,6 @@ namespace PerfectWorld.Scripts.Player
vDir.Normalize();
vPos = MoveStep(vDir, m_fMoveSpeed, fDeltaTime);
SetPos(vPos);
//Debug.LogError("vPos 2= " + vPos);
}
return bRet;
@@ -150,19 +252,21 @@ namespace PerfectWorld.Scripts.Player
fSpeed = -fSpeed;
}
m_cdr.vCenter = m_aabbServer.Center;
Debug.LogError("m_aabbServer.Center = " + m_aabbServer.Center.x + "," + m_aabbServer.Center.y + ","+ m_aabbServer.Center.z);
//Debug.LogError("m_aabbServer.Center = " + m_aabbServer.Center.x + "," + m_aabbServer.Center.y + ","+ m_aabbServer.Center.z);
m_cdr.vVelocity = vRealDir * fSpeed;
//Debug.LogError("vVelocity = " + m_cdr.vVelocity.x + "," + m_cdr.vVelocity.y + "," + m_cdr.vVelocity.z);
m_cdr.t = fTime;
m_cdr.bTestTrnOnly = false;
OtherPlayerMove(m_cdr);
//OtherPlayerMove(m_cdr);
A3DVECTOR3 vDelta = m_cdr.t * m_cdr.vVelocity;
m_cdr.vCenter += vDelta;
m_cdr.vecGroundNormal = g_vAxisY;
//if (m_cdr.bTraceGround)
// SetGroundNormal(m_cdr.vecGroundNormal);
//else
// SetGroundNormal(g_vAxisY);
Debug.LogError("g_vAxisY = " + g_vAxisY.x + "," + g_vAxisY.y + "," + g_vAxisY.z);
Debug.LogError("m_cdr.vExts.y = " + m_cdr.vExts.y);
return m_cdr.vCenter - g_vAxisY * m_cdr.vExts.y;
}
@@ -222,16 +326,21 @@ namespace PerfectWorld.Scripts.Player
private void Update()
{
MovingTo((long)(Time.deltaTime));
MovingTo(Time.deltaTime);
}
private void SetPos(A3DVECTOR3 vPos)
{
Vector3 vector = new Vector3();
Vector3 vector = new Vector3();
vector.x = vPos.x;
vector.y = vPos.y;
vector.z = vPos.z;
transform.position = vector;
m_aabb.Center = vPos + new A3DVECTOR3(0.0f, m_aabb.Extents.y, 0.0f);
m_aabb.CompleteMinsMaxs();
m_aabbServer.Center = vPos + new A3DVECTOR3(0.0f, m_aabbServer.Extents.y, 0.0f);
m_aabbServer.CompleteMinsMaxs();
}
private A3DVECTOR3 GetPos()