From cfc13087e470440be3b3871ce39350888fedf075 Mon Sep 17 00:00:00 2001 From: Tungdv Date: Mon, 3 Nov 2025 19:59:00 +0700 Subject: [PATCH] fix: - fix anim elseplayer. - fix auto move to target of HP. - fix postion wrong went use joystick after auto move of HP. --- .../Scripts/Managers/EC_HPWorkTrace.cs | 14 ++--- .../Scripts/Managers/EC_ManPlayer.cs | 7 ++- .../Scripts/Managers/EC_Object.cs | 5 ++ .../PerfectWorld/Scripts/Move/CECHostMove.cs | 7 ++- Assets/PerfectWorld/Scripts/Move/CECPlayer.cs | 11 ++-- .../Scripts/Network/CSNetwork/GameSession.cs | 3 +- .../Scripts/Players/EC_ElsePlayer.cs | 4 +- Assets/Prefabs/MonsterPrefab.prefab | 4 +- Assets/Scenes/a61.unity | 4 +- Assets/Scripts/CECHostPlayer.cs | 52 +++++-------------- Assets/Scripts/GameController.cs | 36 ++++++++++++- Assets/Scripts/PlayerVisual.cs | 20 +++++++ 12 files changed, 106 insertions(+), 61 deletions(-) diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs index d99fcf0542..5145e86f3d 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs @@ -232,6 +232,7 @@ public class CECTracedNPC : CECTracedObject if (m_iObjectId == m_pHost.m_idSelTarget && m_pHost.AttackableJudge(m_iObjectId, m_bForceAttack) == 1) { + Debug.LogError("c2s_CmdNormalAttack"); byte byPVPMask = EC_Utility.glb_BuildPVPMask(m_bForceAttack); UnityGameSession.c2s_CmdNormalAttack(byPVPMask); m_pHost.m_bPrepareFight = true; @@ -345,7 +346,6 @@ public class CECTracedPlayer : CECTracedObject if (m_iObjectId == m_pHost.m_idSelTarget && m_pHost.AttackableJudge(m_iObjectId, m_bForceAttack) == 1) { - Debug.LogError("c2s_CmdNormalAttack"); byte byPVPMask = EC_Utility.glb_BuildPVPMask(m_bForceAttack); UnityGameSession.c2s_CmdNormalAttack(byPVPMask); m_pHost.m_bPrepareFight = true; @@ -580,7 +580,6 @@ public class CECHPWorkTrace : CECHPWork public override bool Tick(float dwDeltaTime) { base.Tick(dwDeltaTime); - Debug.LogError("Tick"); CheckPrepSkill(); UpdateResetUseAutoPF(); @@ -606,7 +605,6 @@ public class CECHPWorkTrace : CECHPWork //return true; if (m_pTraceObject.CanTouchFrom(m_pHost.GetPos() + new A3DVECTOR3(0f, m_pHost.m_CDRInfo.vExtent.y, 0f))) { - Debug.LogError("OnTouchTarget"); OnTouchTarget(); return true; } @@ -767,6 +765,7 @@ public class CECHPWorkTrace : CECHPWork public void OnTouchTarget() { + Debug.LogError("EC_HPWorkTrace OnTouchTarget StopMove"); StopMove(true); m_bActionDone = m_pTraceObject.OnTouched(); } @@ -829,6 +828,7 @@ public class CECHPWorkTrace : CECHPWork m_vCurDirH = vDir; vCurPos = m_pHost.m_MoveCtrl.GroundMove(m_vCurDirH, m_pHost.GetGroundSpeed(), fDeltaTime); + m_pHost.SetDirAndUp(EC_Utility.ToVector3(vCurPos - m_pHost.GetPos()), Vector3.up); if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3) { m_pHost.m_MoveCtrl.SetSlideLock(true); @@ -880,6 +880,8 @@ public class CECHPWorkTrace : CECHPWork } vCurPos = m_pHost.m_MoveCtrl.GroundMove(m_vCurDirH, m_pHost.GetGroundSpeed(), fDeltaTime, m_pHost.m_fVertSpeed); + Debug.LogError(vCurPos); + m_pHost.SetDirAndUp(EC_Utility.ToVector3(vCurPos - m_pHost.GetPos()), Vector3.up); m_pHost.SetPos(EC_Utility.ToVector3(vCurPos)); //if (GetUseAutoPF() && CECIntelligentRoute::Instance().IsMoveOn()) @@ -889,7 +891,6 @@ public class CECHPWorkTrace : CECHPWork if (cdr.vTPNormal == Vector3.zero) { - Debug.LogError("m_bCheckTouch = false"); m_bCheckTouch = false; } @@ -900,20 +901,20 @@ public class CECHPWorkTrace : CECHPWork if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3) { - Debug.LogError("m_pHost.m_MoveCtrl.SendStopMoveCmd"); //m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), m_pHost.GetGroundSpeed(), iMoveMode); PressCancel(); } else { - Debug.LogError("m_pHost.m_MoveCtrl.SendMoveCmd"); m_pHost.m_MoveCtrl.SendMoveCmd(vCurPos, 0, vTargetPos, EC_Utility.ToA3DVECTOR3(cdr.vAbsVelocity), iMoveMode); } } else // m_bMeetSlide == true { if (m_bHaveMoved) + { m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), m_pHost.GetGroundSpeed(), (int)GPMoveMode.GP_MOVE_SLIDE); + } m_bFinished = true; } @@ -934,7 +935,6 @@ public class CECHPWorkTrace : CECHPWork // command if (m_bHaveMoved || !m_pHost.m_MoveCtrl.IsStop()) { - Debug.LogError("SendStopMoveCmd"); m_pHost.m_MoveCtrl.SendStopMoveCmd(); } diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs b/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs index 4a4609027c..b804b39355 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs @@ -218,6 +218,7 @@ namespace PerfectWorld.Scripts.Managers return; if (pCmd.id != iHostID) { + Debug.Log("OnMsgPlayerMove id = " + pCmd.id); EC_ElsePlayer pPlayer = SeekOutElsePlayer(pCmd.id); if (pPlayer) { @@ -307,7 +308,10 @@ namespace PerfectWorld.Scripts.Managers { GameObject ob = GameController.Instance.InitCharacter(info); EC_ElsePlayer elsePlayer = ob.AddComponent(); - elsePlayer.GetComponent().enabled = false; + if (ob.TryGetComponent(out CECHostPlayer result)) + { + GameObject.Destroy(result); + } //init elsePlayer.Init(roleInfo, info); return elsePlayer; @@ -347,6 +351,7 @@ namespace PerfectWorld.Scripts.Managers { cmd_object_stop_move pCmd = GPDataTypeHelper.FromBytes((byte[])Msg.dwParam1); EC_ElsePlayer pPlayer = SeekOutElsePlayer(pCmd.id); + Debug.Log("OnMsgPlayerStopMove id = " + pCmd.id); if (pPlayer) pPlayer.StopMoveTo(pCmd); return true; diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_Object.cs b/Assets/PerfectWorld/Scripts/Managers/EC_Object.cs index b77e8ed28b..63f1b85710 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_Object.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_Object.cs @@ -98,6 +98,11 @@ public class CECObject : MonoBehaviour // A3DCoordinate::SetDirAndUp(vDir, vUp); // Stop orientation adjusting + if (vDir != Vector3.zero) + { + Quaternion lookRot = Quaternion.LookRotation(vDir, vUp); + transform.rotation = lookRot; + } m_bAdjustOrient = false; } // Set destination orientation of model diff --git a/Assets/PerfectWorld/Scripts/Move/CECHostMove.cs b/Assets/PerfectWorld/Scripts/Move/CECHostMove.cs index b0650de3df..e77558cf1b 100644 --- a/Assets/PerfectWorld/Scripts/Move/CECHostMove.cs +++ b/Assets/PerfectWorld/Scripts/Move/CECHostMove.cs @@ -39,6 +39,8 @@ public class CECHostMove m_fMoveTime = 0.0f; m_pHost = pHost; m_bStop = false; + cmdstopdelayCounter = 500; + m_DelayedStop = new STOPMOVE(); } public void Tick(ulong dwDeltaTime) @@ -64,6 +66,7 @@ public class CECHostMove // make a potential check with tuojigua iMoveMode |= (int)GPMoveMode.GP_MOVE_DEAD; + Debug.LogError("CECHostMove Tick c2s_SendCmdStopMove"); UnityGameSession.Instance.c2s_SendCmdStopMove( m.vPos, fSpeed, iMoveMode, m.byDir, m_wMoveStamp++, iTime ); @@ -112,7 +115,7 @@ public class CECHostMove Debug.LogWarning("HoangDev : SendStopMoveCmd"); iMoveMode |= (int)GPMoveMode.GP_MOVE_DEAD; - if (cmdstopdelayCounter == 500) + if (cmdstopdelayCounter >= 500) { Vector3 vDir = m_pHost.transform.forward; byte byDir = EC_Utility.glb_CompressDirH(vDir.x, vDir.z); @@ -224,6 +227,8 @@ public class CECHostMove { cmdstopdelayCounter = 0; m_bStop = true; + m_fBlockTime = 0.0f; + m_fBlockMove = 0.0f; m_DelayedStop.bValid = false; } diff --git a/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs b/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs index 578f74bbed..ec19b877c3 100644 --- a/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs +++ b/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs @@ -891,11 +891,12 @@ public abstract class CECPlayer : CECObject Quaternion targetRotation = Quaternion.LookRotation(direction, Vector3.up); // Xoay mượt từ rotation hiện tại sang rotation mục tiêu - transform.rotation = Quaternion.Slerp( - transform.rotation, - targetRotation, - Time.deltaTime * turnSpeed - ); + //transform.rotation = Quaternion.Slerp( + // transform.rotation, + // targetRotation, + // Time.deltaTime * turnSpeed + //); + transform.rotation = targetRotation; } } diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs index d1be236edd..4826149764 100644 --- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs +++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs @@ -536,7 +536,7 @@ namespace CSNetwork if (pCmd.iMessage == 2) { // Attack target is too far - //pGameRun->PostMessage(MSG_HST_TARGETISFAR, MAN_PLAYER, 0, (DWORD)pDataBuf, pCmdHeader->cmd); + EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TARGETISFAR, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader); } else if (pCmd.iMessage == 20) { @@ -578,7 +578,6 @@ namespace CSNetwork } break; - break; case CommandID.SELECT_TARGET: case CommandID.UNSELECT: diff --git a/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs b/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs index a558ade04e..437655af22 100644 --- a/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs +++ b/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs @@ -5,6 +5,7 @@ using CSNetwork; using CSNetwork.GPDataType; using CSNetwork.Protocols.RPCData; using System; +using System.Data; using UnityEngine; namespace PerfectWorld.Scripts.Player @@ -32,6 +33,7 @@ namespace PerfectWorld.Scripts.Player public void Init(RoleInfo roleInfo, info_player_1 Info) { + SetPlayerInfor(new INFO(Info.cid, Info.crc_e, Info.crc_c)); m_dwResFlags = (uint)PlayerResourcesReadyFlag.RESFG_ALL; m_pEPWorkMan = new CECEPWorkMan(this); m_iProfession = roleInfo.occupation; @@ -58,7 +60,7 @@ namespace PerfectWorld.Scripts.Player if (TryGetComponent(out var visual)) { - visual.InitHostPlayerEventDoneHandler(); + visual.InitElsePlayerEventDoneHandler(m_PlayerInfo); } } diff --git a/Assets/Prefabs/MonsterPrefab.prefab b/Assets/Prefabs/MonsterPrefab.prefab index 54fb79730c..c60cd0c4ed 100644 --- a/Assets/Prefabs/MonsterPrefab.prefab +++ b/Assets/Prefabs/MonsterPrefab.prefab @@ -476,7 +476,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6780952369966265306} serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalRotation: {x: -0.03342759, y: -0.4452524, z: 0.01663679, w: -0.89462626} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -619,7 +619,7 @@ BoxCollider: serializedVersion: 2 m_Bits: 0 m_LayerOverridePriority: 0 - m_IsTrigger: 0 + m_IsTrigger: 1 m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 3 diff --git a/Assets/Scenes/a61.unity b/Assets/Scenes/a61.unity index cbd2d14dee..0efe128db7 100644 --- a/Assets/Scenes/a61.unity +++ b/Assets/Scenes/a61.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee11665fb7d6ffe88be7e5bc4785fbbe6e1ff526fc5005f4790bf1598fe39c5f -size 532497037 +oid sha256:0d1bcf9fb61ce98fdc9a2833b5d653913d95833de182d6c8538c08d1e3023127 +size 532501420 diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index 9d41c7ca29..46a90b7058 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -1,4 +1,5 @@ using BrewMonster; +using BrewMonster.Managers; using BrewMonster.Network; using BrewMonster.Scripts; using BrewMonster.Scripts.Managers; @@ -17,12 +18,12 @@ using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using System.Text; -using BrewMonster.Managers; using TMPro; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.SceneManagement; using UnityEngine.UI; +using static UnityEditor.PlayerSettings; using Scene = UnityEngine.SceneManagement.Scene; public class CECHostPlayer : CECPlayer @@ -139,8 +140,7 @@ public class CECHostPlayer : CECPlayer // ccRadius = controller.radius; ccSkin = controller.skinWidth; _playerStateMachine.UpdateState(); - - if (Input.GetMouseButtonDown(1) && mainCam != null) + if (Input.GetMouseButtonDown(0) && mainCam != null) { int idTraceTarget = 0, idSelTarget = 0; bool bForceAttack = false; @@ -192,47 +192,14 @@ public class CECHostPlayer : CECPlayer if (idTraceTarget != 0) { - //if (m_pWorkMan.IsSitting()) - //{ - // g_pGame.GetGameSession().c2s_CmdStandUp(); - // return; - //} - // Trace a object if (iTraceReason == CECHPWorkTrace.Trace_reason.TRACE_ATTACK) { if (!CanDo(ActionCanDo.CANDO_MELEE)) return; - Debug.LogError("Attack"); NormalAttackObject(idTraceTarget, bForceAttack); } - //else - //{ - // if (!CanDo(CANDO_MOVETO)) - // return; - - // if (iTraceReason == CECHPWorkTrace::TRACE_PICKUP) - // { - // PickupObject(idTraceTarget, false); - // } - // else if (iTraceReason == CECHPWorkTrace::TRACE_GATHER) - // { - // PickupObject(idTraceTarget, true); - // } - // else if (CECHPWork * pWork = m_pWorkMan.GetWork(CECHPWork::WORK_TRACEOBJECT)) - // { - // CECHPWorkTrace* pWorkTrace = dynamic_cast(pWork); - // pWorkTrace.SetTraceTarget(pWorkTrace.CreatTraceTarget(idTraceTarget, iTraceReason, bForceAttack)); - // } - // else if (m_pWorkMan.CanStartWork(CECHPWork::WORK_TRACEOBJECT) && !bWikiMonster) - // { - // CECHPWorkTrace* pWork = (CECHPWorkTrace*)m_pWorkMan.CreateWork(CECHPWork::WORK_TRACEOBJECT); - // pWork.SetTraceTarget(pWork.CreatTraceTarget(idTraceTarget, iTraceReason, bForceAttack)); - // m_pWorkMan.StartWork_p1(pWork); - // } - //} } } - m_pWorkMan?.Tick(Time.deltaTime); } @@ -275,6 +242,10 @@ public class CECHostPlayer : CECPlayer transform.forward = move; m_MoveCtrl.GroundMove(Time.deltaTime); m_MoveCtrl.SendMoveCmd(transform.position, controller.velocity, (int)GPMoveMode.GP_MOVE_RUN); + m_aabb.Center = EC_Utility.ToA3DVECTOR3(transform.position) + new A3DVECTOR3(0.0f, m_aabb.Extents.y, 0.0f); + m_aabb.CompleteMinsMaxs(); + m_aabbServer.Center = EC_Utility.ToA3DVECTOR3(transform.position) + new A3DVECTOR3(0.0f, m_aabbServer.Extents.y, 0.0f); + m_aabbServer.CompleteMinsMaxs(); } else { @@ -334,8 +305,8 @@ public class CECHostPlayer : CECPlayer public void ProcessMessage(in ECMSG Msg) { - Debug.LogWarning("HoangDev : ProcessMessageProcessMessageProcessMessage"); var msg = (int)Msg.dwMsg; + //Debug.LogError("HoangDev : ProcessMessageProcessMessageProcessMessage " + msg); switch (msg) { case int value when value == EC_MsgDef.MSG_HST_CORRECTPOS: OnMsgHstCorrectPos(Msg); break; @@ -1064,7 +1035,7 @@ public class CECHostPlayer : CECPlayer bool bUseAutoPF = false; //CECPlayerWrapper* pWrapper = CECAutoPolicy::GetInstance().GetPlayerWrapper(); //if (CECAutoPolicy::GetInstance().IsAutoPolicyEnabled() && pWrapper.GetAttackError() >= 2) - bUseAutoPF = true; + //bUseAutoPF = true; CECHPWorkTrace pWorkTrace = null; CECHPWork pWork = null; @@ -1305,8 +1276,8 @@ public class CECHostPlayer : CECPlayer { fRange = m_ExtProps.ak.AttackRange * 0.7f; } + // TO DO: fix later fRange = 1f; - Debug.LogError("fDist - fTargetRad = " + (fDist - fTargetRad)); if (fDist - fTargetRad <= fRange) return true; @@ -1437,7 +1408,10 @@ public class CECHostPlayer : CECPlayer { bRet = true; if (idTarget == 0) + { + BMLogger.LogError("HoangDev: HostPlayer Unsetlect npc"); UnityGameSession.c2s_CmdUnselect(); + } else { BMLogger.LogError("HoangDev: HostPlayer setlect npc"); diff --git a/Assets/Scripts/GameController.cs b/Assets/Scripts/GameController.cs index b17aaee640..34c66f055c 100644 --- a/Assets/Scripts/GameController.cs +++ b/Assets/Scripts/GameController.cs @@ -1,4 +1,4 @@ -using CSNetwork.GPDataType; +using CSNetwork.GPDataType; using CSNetwork.Protocols.RPCData; using System.Data; using Unity.Cinemachine; @@ -17,6 +17,11 @@ public class GameController : MonoBehaviour //[SerializeField] private Transform ground; CECHostPlayer hostPlayer; + public CinemachineFreeLook freeLookCam; + public float rotateSpeedX = 300f; // tốc độ xoay ngang + public float rotateSpeedY = 2f; // tốc độ xoay dọc + + public static GameController Instance { get @@ -93,4 +98,33 @@ public class GameController : MonoBehaviour { instance = null; } + + //private void Update() + //{ + // if (hostPlayer == null || hostPlayer.transform == null) + // return; + + // bool rightClick = Input.GetMouseButton(1); + + // if (rightClick) + // { + // // Bật khả năng xoay khi giữ chuột phải + // freeLookCam.m_XAxis.m_MaxSpeed = rotateSpeedX; + // freeLookCam.m_YAxis.m_MaxSpeed = rotateSpeedY; + + // // Ghi giá trị chuột thủ công (nếu muốn override Input System cũ) + // float mouseX = Input.GetAxis("Mouse X"); + // float mouseY = Input.GetAxis("Mouse Y"); + + // // Xoay camera theo hướng chuột + // freeLookCam.m_XAxis.Value += mouseX * Time.deltaTime * rotateSpeedX; + // freeLookCam.m_YAxis.Value -= mouseY * Time.deltaTime * (rotateSpeedY / 100f); + // } + // else + // { + // // Khi thả chuột thì khoá xoay + // freeLookCam.m_XAxis.m_MaxSpeed = 0; + // freeLookCam.m_YAxis.m_MaxSpeed = 0; + // } + //} } diff --git a/Assets/Scripts/PlayerVisual.cs b/Assets/Scripts/PlayerVisual.cs index 17cf49c30e..b363284f8f 100644 --- a/Assets/Scripts/PlayerVisual.cs +++ b/Assets/Scripts/PlayerVisual.cs @@ -46,6 +46,26 @@ public class PlayerVisual : MonoBehaviour EventBus.SubscribeChannel(_playerInfo.cid, CleearComActFlagAllRankNodesEventHandler); } + public void InitElsePlayerEventDoneHandler(INFO playerInfo) + { + namedAnimancer = GetComponentInChildren(); + if (namedAnimancer == null) + { + BrewMonster.BMLogger.LogError("animancer == null"); + return; + } + //var player = GetComponentInParent(); + //if (player == null) + //{ + // BrewMonster.BMLogger.LogError("player == null"); + // return; + //} + _playerInfo = playerInfo;//player.GetPlayInfo(); + EventBus.SubscribeChannel(_playerInfo.cid, PlayActionEventHandler); + EventBus.SubscribeChannelClass(_playerInfo.cid, QueueActionEventHandler); + EventBus.SubscribeChannel(_playerInfo.cid, CleearComActFlagAllRankNodesEventHandler); + } + private void CleearComActFlagAllRankNodesEventHandler(CleearComActFlagAllRankNodesEvent @event) { _animationQueue.Clear();