diff --git a/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs b/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs index c85f8e82a8..6ecad74382 100644 --- a/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs +++ b/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs @@ -382,10 +382,10 @@ public class CECNPCMan : IMsgHandler // Tạo NPC mới npc = CreateNPC(Info, bBornInSight, packet, infoOffset); - if (npc != null) - { - npc.SetUpCECNPC(this); - } + //if (npc != null) + //{ + // npc.SetUpCECNPC(this); + //} if (object.ReferenceEquals(npc, null)) { BrewMonster.BMLogger.LogError($"Failed to create NPC ({Info.tid})"); @@ -466,6 +466,7 @@ public class CECNPCMan : IMsgHandler { pNPC.SetBornStamp(bornStamp); pNPC.SetBornInSight(bBornInSight); + pNPC.SetUpCECNPC(this); } else { diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs index 4cd508cb86..c4f01ffceb 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs @@ -853,6 +853,8 @@ public class CECHPWorkTrace : CECHPWork else if (!m_pHost.m_GndInfo.bOnGround) iMoveMode = (int)GPMoveMode.GP_MOVE_FALL; + RaycastHit lastGroundHit; + m_pHost.m_GndInfo.bOnGround = m_pHost.GroundCheck(out lastGroundHit); if (m_pHost.m_GndInfo.bOnGround) { if (m_bReadyCancel) @@ -895,13 +897,11 @@ public class CECHPWorkTrace : CECHPWork if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3) { - Debug.LogError("SendStopMoveCmd"); - m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), m_pHost.GetGroundSpeed(), iMoveMode); + //m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), m_pHost.GetGroundSpeed(), iMoveMode); PressCancel(); } else { - Debug.LogError("SendMoveCmd"); m_pHost.m_MoveCtrl.SendMoveCmd(vCurPos, 0, vTargetPos, EC_Utility.ToA3DVECTOR3(cdr.vAbsVelocity), iMoveMode); } } diff --git a/Assets/PerfectWorld/Scripts/Move/EC_CDR.cs b/Assets/PerfectWorld/Scripts/Move/EC_CDR.cs index c108730425..259a97620f 100644 --- a/Assets/PerfectWorld/Scripts/Move/EC_CDR.cs +++ b/Assets/PerfectWorld/Scripts/Move/EC_CDR.cs @@ -135,13 +135,13 @@ namespace BrewMonster.Scripts vHitNormal = Vector3.up; bSupport = false; - float dist = Mathf.Max(fDeltaY, 0f) + vExt.y + skin + 0.05f; - Vector3 origin = vStart + Vector3.up * 0.05f; - - if (Physics.Raycast(origin, Vector3.down, out RaycastHit hit, dist, mask, QueryTriggerInteraction.Ignore)) + float dist = Mathf.Max(fDeltaY, 0f); + Vector3 origin = vStart + Vector3.down * vExt.y; + if (Physics.Raycast(origin, (Vector3.down ).normalized, out RaycastHit hit, 1<<6 | 1<<7)) { vHitNormal = hit.normal; - vEnd = new Vector3(vStart.x, hit.point.y + vExt.y + skin, vStart.z); + Debug.DrawLine(origin, vHitNormal, Color.black, 10f); + vEnd = new Vector3(vStart.x, hit.point.y + vExt.y, vStart.z); bSupport = (vHitNormal.y >= 0f); return true; } @@ -220,13 +220,12 @@ namespace BrewMonster.Scripts //bool hasHit = CollideWithEnv_BoxCast(vStart, vDelta, vExt, mask, // out RaycastHit hit, out float fFraction, out Vector3 hitNormal, out bool bStartSolid); Vector3 posFoot = vStart - Vector3.up * vExt.y; - Debug.DrawLine(vStart, posFoot + vVelocity, Color.yellow, 10f); bool bClear = !Physics.Raycast(posFoot, (posFoot + vVelocity).normalized, out RaycastHit hit, fDeltaDist, mask); nTry++; + Debug.DrawLine(posFoot, posFoot + vVelocity, Color.yellow, 10f); if (bClear) { vFinalPos = vStart + vDelta; - Debug.DrawLine(vStart, vFinalPos, Color.red, 10f); CDRInfo.fMoveDist += fDeltaDist; break; } @@ -237,7 +236,7 @@ namespace BrewMonster.Scripts // if (CDRInfo.vTPNormal.y < CDRInfo.fSlopeThresh) CDRInfo.vTPNormal = Vector3.up; // return; //} - + Debug.DrawLine(posFoot, hit.point, Color.green, 10f); vStart = hit.point + Vector3.up * vExt.y; vFinalPos = vStart; @@ -249,21 +248,25 @@ namespace BrewMonster.Scripts if (!bFreeFall && !bTryPull && !bJump) { //float skin = 0.01f; - posFoot = vStart - Vector3.up * vExt.y; + posFoot = vStart - Vector3.up * vExt.y + Vector3.up * CDRInfo.fStepHeight; Vector3 vStartUp = new Vector3(0f, CDRInfo.fStepHeight, 0f); - bPull = !Physics.Raycast(posFoot, (posFoot + vStartUp).normalized, out hit, mask); + bPull = !Physics.Raycast(posFoot, (posFoot + vStartUp).normalized, out hit, CDRInfo.fStepHeight, mask); if (bPull) { vStart += Vector3.up * CDRInfo.fStepHeight; posFoot = vStart - Vector3.up * vExt.y; - Vector3 vDelta2 = vVelocity; - bool bMove = !Physics.Raycast(posFoot, (posFoot + vVelocity).normalized, out hit, mask); + //Vector3 vDelta2 = vVelocity; + bool bMove = !Physics.Raycast(posFoot, (posFoot + vVelocity).normalized, out hit, fDeltaDist, mask); if (!bMove) { //vDelta2 *= frac2; vFinalPos = hit.point + Vector3.up * vExt.y; } - + else + { + Debug.DrawLine(vFinalPos, vFinalPos + vDelta, Color.red, 10f); + vFinalPos += vDelta; + } //if (vDelta2.sqrMagnitude < (vExt.x * vExt.x * 4f)) //{ // vStart -= Vector3.up * CDRInfo.fStepHeight; @@ -314,7 +317,7 @@ namespace BrewMonster.Scripts if (downDist > 0f) { - if (!DoGroundProbe(vFinalPos, vExt, downDist, mask, out Vector3 vEnd, out Vector3 groundNormal, out bool bSupport)) + if (!DoGroundProbe(vFinalPos, vExt, downDist, 1<<6, out Vector3 vEnd, out Vector3 groundNormal, out bool bSupport)) { CDRInfo.fMoveDist = 0f; CDRInfo.vTPNormal = Vector3.up; @@ -323,6 +326,7 @@ namespace BrewMonster.Scripts if (bSupport) { + Debug.LogError("vFinal = " + vFinal + " == vEnd = " + vEnd); vFinal = vEnd; if (!bJump) vTPNormal = groundNormal; } diff --git a/Assets/Prefabs/HostPlayer.prefab b/Assets/Prefabs/HostPlayer.prefab index 4aa32f4643..a4f6b7875a 100644 --- a/Assets/Prefabs/HostPlayer.prefab +++ b/Assets/Prefabs/HostPlayer.prefab @@ -503,7 +503,7 @@ MonoBehaviour: radiusEpsilon: 0.005 groundMask: serializedVersion: 2 - m_Bits: 0 + m_Bits: 64 slopeToleranceDeg: 2 --- !u!114 &6892195500068497589 MonoBehaviour: diff --git a/Assets/Scenes/a61.unity b/Assets/Scenes/a61.unity index c2d635237a..cbd2d14dee 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:af7af722085e0e9e436ab6c89964912b66531b0e6fbec6f79267e992beb20687 -size 532497061 +oid sha256:ee11665fb7d6ffe88be7e5bc4785fbbe6e1ff526fc5005f4790bf1598fe39c5f +size 532497037 diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index df04e15d14..9c8a4aaa0d 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -67,7 +67,7 @@ public class CECHostPlayer : CECPlayer // ====== Ground cast config ====== [Header("Ground Cast")] [Tooltip("Khoảng thêm ngoài skinWidth để SphereCast xuống (m ngắn)")] [SerializeField] - private float extraGroundDistance = 0.05f; + private float extraGroundDistance = 1f; [Tooltip("Bớt bán kính một chút để tránh tự va vào capsule (epsilon)")] [SerializeField] private float radiusEpsilon = 0.005f; @@ -281,7 +281,7 @@ public class CECHostPlayer : CECPlayer _playerStateMachine.ChangeState(_idleState); } - private bool GroundCheck(out RaycastHit hit) + public bool GroundCheck(out RaycastHit hit) { float radius = controller.radius; float skin = controller.skinWidth; @@ -927,6 +927,8 @@ public class CECHostPlayer : CECPlayer m_aabbServer = m_aabb; CalcPlayerAABB(); SetPos(pos); + m_CDRInfo.fStepHeight = 0.8f; + m_CDRInfo.vExtent = EC_Utility.ToVector3(m_aabbServer.Extents); // Create work manager m_pWorkMan = new CECHPWorkMan(this); if (m_pWorkMan == null)