From ddcc5c22d1c792cbebd7fec924183f5c5768cf2a Mon Sep 17 00:00:00 2001 From: "tung.do@monkey.edu.vn" Date: Wed, 8 Oct 2025 01:34:03 +0700 Subject: [PATCH] fix: Update normal attack. --- .../Scripts/Managers/EC_HPWork.cs | 40 +++++++-------- .../Scripts/Managers/EC_HPWorkMelee.cs | 51 ++++++++++--------- .../Scripts/Managers/EC_HPWorkTrace.cs | 11 ++-- Assets/Scripts/CECHostPlayer.cs | 5 ++ 4 files changed, 54 insertions(+), 53 deletions(-) diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs index 91939111ec..db6e0199ae 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs @@ -59,7 +59,7 @@ public class CECHPWork : CECObjectWork public CECHPWork(int iWorkID, CECHPWorkMan pWorkMan) : base(iWorkID) { m_pWorkMan = pWorkMan; - //m_pHost = pWorkMan.GetHostPlayer(); + m_pHost = pWorkMan.GetHostPlayer(); } // Operations @@ -453,38 +453,36 @@ public class CECHPWorkMan public bool StartWork(int iPriority, CECHPWork pWork, bool bNoDelay = false) { - //if (!pWork) - //{ - // ASSERT(false); - // return false; - //} - //if (!ValidatePriority(iPriority)) - //{ - // ASSERT(false); - // delete pWork; - // return false; - //} - //if (pWork->GetWorkID() == CECHPWork::WORK_TRACEOBJECT) + if (pWork == null) + { + return false; + } + if (!ValidatePriority(iPriority)) + { + return false; + } + //if (pWork.GetWorkID() == CECHPWork.Host_work_ID.WORK_TRACEOBJECT) //{ // if (g_pGame->GetGameRun()->GetHostInputFilter()->IsMoveUsagePressed()) // { - // CECHPWorkTrace* pWorkTrace = dynamic_cast(pWork); - // if (!pWorkTrace->CanTouch()) + // CECHPWorkTrace pWorkTrace = pWork as CECHPWorkTrace; + // if (!pWorkTrace.CanTouch()) // { // 2014-8-16 当还在通过键盘操纵移动时、有条件忽略 CECHPWorkTrace, - // delete pWorkTrace; // 否则会因 CECHPWorkTrace 中临时转向目标位置、而后又被键盘操纵调整移动方向导致方向瞬间抖动 + // //delete pWorkTrace; // 否则会因 CECHPWorkTrace 中临时转向目标位置、而后又被键盘操纵调整移动方向导致方向瞬间抖动 // return false; // 当 CECHPWorkTrace 中目标可立即接触时,不忽略 CECHPWorkTrace,以实现键盘控制移动中、对某怪应用技能时,立刻转向怪施放技能 // } // } //} - //if (!bNoDelay && DelayWork(iPriority, pWork)) - //{ - // return true; - //} - //return InternallyStartWork(iPriority, pWork); + if (!bNoDelay && DelayWork(iPriority, pWork)) + { + return true; + } + return InternallyStartWork(iPriority, pWork); } public bool StartWork_p0(CECHPWork pWork, bool bNoDelay = false) { return StartWork(Work_priority.PRIORITY_0, pWork, bNoDelay); } public bool StartWork_p1(CECHPWork pWork, bool bNoDelay = false) { return StartWork(Work_priority.PRIORITY_1, pWork, bNoDelay); } public bool StartWork_p2(CECHPWork pWork, bool bNoDelay = false) { return StartWork(Work_priority.PRIORITY_2, pWork, bNoDelay); } + public CECHostPlayer GetHostPlayer() { return m_pHost; } } public abstract class CECHPWorkPostTickCommand diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMelee.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMelee.cs index 9c94e94251..4fdb32e93b 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMelee.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMelee.cs @@ -4,6 +4,22 @@ using PerfectWorld.Scripts.Managers; using PerfectWorld.Scripts.Player; using UnityEngine; +class CECHPWorkPostTickCommand1 : CECHPWorkPostTickRunWorkCommand +{ + public CECHPWorkPostTickCommand1(CECHPWork pWork) : base(pWork, true) + { + } + public virtual bool Run(CECHPWorkMan pWorkMan) + { + if (!base.Run(pWorkMan)) + { + return false; + } + //AP_ActionEvent(AP_EVENT_MELEEOUTOFRANGE); + return true; + } +}; + /////////////////////////////////////////////////////////////////////////// // // Class CECHPWorkMelee @@ -79,37 +95,22 @@ class CECHPWorkMelee : CECHPWork if (idTraceTarget && !m_pHost.IsRooting()) { - CECHPWorkTrace pWork = (CECHPWorkTrace*)m_pWorkMan.CreateWork(WORK_TRACEOBJECT); - pWork.SetTraceTarget(pWork.CreatTraceTarget(idTraceTarget, CECHPWorkTrace.Trace_reason.TRACE_ATTACK)); - class CECHPWorkPostTickCommand1 : CECHPWorkPostTickRunWorkCommand - { - public CECHPWorkPostTickCommand1(CECHPWork pWork) : CECHPWorkPostTickRunWorkCommand(pWork, true) - { - } - public virtual bool Run(CECHPWorkMan pWorkMan) - { - if (!CECHPWorkPostTickRunWorkCommand::Run(pWorkMan)) - { - return false; - } - AP_ActionEvent(AP_EVENT_MELEEOUTOFRANGE); - return true; - } - }; - m_pWorkMan.SetPostTickCommand(new CECHPWorkPostTickCommand1(pWork)); + CECHPWorkTrace pWork = (CECHPWorkTrace)m_pWorkMan.CreateWork(Host_work_ID.WORK_TRACEOBJECT); + pWork.SetTraceTarget(pWork.CreatTraceTarget(idTraceTarget, CECHPWorkTrace.Trace_reason.TRACE_ATTACK)); + m_pWorkMan.SetPostTickCommand(new CECHPWorkPostTickCommand1(pWork)); return true; } -return true; + return true; } // Reset work public virtual void Reset() -{ - base.Reset(); + { + base.Reset(); - m_idTarget = 0; - m_iIdleTime = 0; - m_iIdleTimeCnt = 0; -} + m_idTarget = 0; + m_iIdleTime = 0; + m_iIdleTimeCnt = 0; + } // Copy work data public virtual bool CopyData(CECHPWork pWork) { diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs index eb14d5d28f..5743504dc5 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs @@ -99,12 +99,12 @@ abstract class CECTracedObject CECObject pObject = g_pGame->GetGameRun()->GetWorld()->GetObject(m_iObjectId, 0); float fTouchRadius = 0.0f; - if (ISPLAYERID(m_iObjectId)) + if (GPDataTypeHelper.ISPLAYERID(m_iObjectId)) { if (m_iReason == CECHPWorkTrace.Trace_reason.TRACE_TALK) { fTouchRadius = 0.0f; - } + } else { CECPlayer pPlayer = pObject as CECPlayer; @@ -112,13 +112,13 @@ abstract class CECTracedObject } return m_pHost.CanTouchTarget(vHostPos, vTargetPos, fTouchRadius, iTouchReason, fMaxCut); } - else if (ISNPCID(m_iObjectId)) + else if (GPDataTypeHelper.ISNPCID(m_iObjectId)) { CECNPC pNPC = pObject as CECNPC; fTouchRadius = pNPC.GetTouchRadius(); return m_pHost.CanTouchTarget(vHostPos, vTargetPos, fTouchRadius, iTouchReason, fMaxCut); } - else if (ISMATTERID(m_iObjectId)) + else if (GPDataTypeHelper.ISMATTERID(m_iObjectId)) { CECMatter pMatter = (pObject) as CECMatter; return pMatter.CalcDist(vHostPos, true) < pMatter.GetGatherDist(); @@ -149,9 +149,6 @@ class CECHPWorkTrace : CECHPWork { } -public: // Attributes - -public: // Operations // Change trace target //void ChangeTarget(int idTarget, int iReason, bool bUseAutoPF=false); diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index e2c12bf6ed..c31584807e 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -758,6 +758,11 @@ public class CECHostPlayer : EC_Player A3DVECTOR3 vector = new A3DVECTOR3(gameObject.transform.position.x, gameObject.transform.position.y, gameObject.transform.position.z); return CanTouchTarget(vector, vTargetPos, fTargetRad, iReason, fMaxCut); } + bool IsRooting() { + var mask = (uint)(Logic_Influence_Extned_states.LIES_ROOT + | Logic_Influence_Extned_states.LIES_SLEEP + | Logic_Influence_Extned_states.LIES_STUN); + return (m_dwLIES & mask) != 0; } } public enum StateAnim