fix: Update normal attack.

This commit is contained in:
tung.do@monkey.edu.vn
2025-10-08 01:34:03 +07:00
parent ee618bc38e
commit ddcc5c22d1
4 changed files with 54 additions and 53 deletions
@@ -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<CECHPWorkTrace*>(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
@@ -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)
{
@@ -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);
+5
View File
@@ -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