diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs index db6e0199ae..12da223e03 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs @@ -1,3 +1,5 @@ +using System.Security.Cryptography; +using Unity.VisualScripting; using WorkList = System.Collections.Generic.List; public class CECHPWork : CECObjectWork @@ -483,6 +485,117 @@ public class CECHPWorkMan 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 CECHPWork CreateWork(int idWork) + { + CECHPWork pWork = null; + + switch (idWork) + { + //case CECHPWork.Host_work_ID.WORK_STAND: pWork = new CECHPWorkStand(this); break; + case CECHPWork.Host_work_ID.WORK_MOVETOPOS: pWork = new CECHPWorkMove(this); break; + case CECHPWork.Host_work_ID.WORK_TRACEOBJECT: pWork = new CECHPWorkTrace(this); break; + case CECHPWork.Host_work_ID.WORK_HACKOBJECT: pWork = new CECHPWorkMelee(this); break; + case CECHPWork.Host_work_ID.WORK_SPELLOBJECT: pWork = new CECHPWorkSpell(this); break; + //case CECHPWork.Host_work_ID.WORK_USEITEM: pWork = new CECHPWorkUse(this); break; + //case CECHPWork.Host_work_ID.WORK_DEAD: pWork = new CECHPWorkDead(this); break; + //case CECHPWork.Host_work_ID.WORK_FOLLOW: pWork = new CECHPWorkFollow(this); break; + //case CECHPWork.Host_work_ID.WORK_FLYOFF: pWork = new CECHPWorkFly(this); break; + //case CECHPWork.Host_work_ID.WORK_FREEFALL: pWork = new CECHPWorkFall(this); break; + //case CECHPWork.Host_work_ID.WORK_SIT: pWork = new CECHPWorkSit(this); break; + //case CECHPWork.Host_work_ID.WORK_PICKUP: pWork = new CECHPWorkPick(this); break; + //case CECHPWork.Host_work_ID.WORK_CONCENTRATE: pWork = new CECHPWorkConcentrate(this); break; + //case CECHPWork.Host_work_ID.WORK_REVIVE: pWork = new CECHPWorkRevive(this); break; + //case CECHPWork.Host_work_ID.WORK_FLASHMOVE: pWork = new CECHPWorkFMove(this); break; + //case CECHPWork.Host_work_ID.WORK_BEBOUND: pWork = new CECHPWorkBeBound(this); break; + //case CECHPWork.Host_work_ID.WORK_PASSIVEMOVE: pWork = new CECHPWorkPassiveMove(this); break; + //case CECHPWork.Host_work_ID.WORK_CONGREGATE: pWork = new CECHPWorkCongregate(this); break; + //case CECHPWork.Host_work_ID.WORK_SKILLSTATEACT: pWork = new CECHPWorkSkillStateAction(this); break; + //case CECHPWork.Host_work_ID.WORK_FORCENAVIGATEMOVE: pWork = new CECHPWorkNavigate(this); break; + default: + return null; + } + + return pWork; + } + + public bool CanStartWork(int iWorkID, int iPriority = CECHPWorkMan.Work_priority.PRIORITY_1) + { + if (!ValidatePriority(iPriority)) + { + return false; + } + if (GetWork(iWorkID) != null) + { + return false; + } + if (!HasWorkOnPriority(iPriority)) + { + return true; + } + WorkList workList = m_WorkStack[iPriority]; + for (int i = 0; i < workList.Count; ++i) + { + if (!workList[i].CanTransferTo(CECHPWork.GetWorkMask(iWorkID))) + { + return false; + } + } + return true; + } + + bool HasWorkOnPriority(int iPriority) + { + return ValidatePriority(iPriority) && m_WorkStack[iPriority].Count != 0; + } + + public void SetPostTickCommand(CECHPWorkPostTickCommand command) + { + m_pPostTickCommand = command; + } + + bool HasWorkRunningOnPriority(int iPriority){ + return HasWorkOnPriority(iPriority); +} +bool IsAnyWorkRunning(){ + return HasWorkRunningOnPriority(m_iCurPriority); +} + +public void Tick(float dwDeltaTime) + { + if (!IsAnyWorkRunning()) + { + return; + } + WorkList workList = m_WorkStack[m_iCurPriority]; + for (int i = 0; i < workList.Count;) + { + CECHPWork pWork = workList[i]; + + SetPostTickCommand(null); + pWork.Tick(dwDeltaTime); + + if (m_pPostTickCommand == null) + { + if (!pWork.IsFinished()) + { + ++i; + continue; + } + KillWork(m_iCurPriority, i); + } + else + { + m_pPostTickCommand.Run(this); + SetPostTickCommand(null); + break; // 不确定 m_pPostTickCommand 执行什么内容,此处跳出 + } + } + if (workList.Count == 0) + { + StartAwaitingWorks(); + } + } } public abstract class CECHPWorkPostTickCommand diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMelee.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMelee.cs index f2a1b50c1f..78e98716c8 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMelee.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMelee.cs @@ -1,4 +1,5 @@ using BrewMonster; +using BrewMonster.Network; using CSNetwork.GPDataType; using PerfectWorld.Scripts.Managers; using PerfectWorld.Scripts.Player; @@ -54,7 +55,8 @@ class CECHPWorkMelee : CECHPWork // If target turn to be un-attackable, cancel action if (m_pHost.AttackableJudge(m_idTarget, true) == 0) { - g_pGame.GetGameSession().c2s_CmdCancelAction(); + //UnityGameSession.c2s_CmdCancelAction(); + //g_pGame.GetGameSession().c2s_CmdCancelAction(); m_bFinished = true; return true; } @@ -93,7 +95,7 @@ class CECHPWorkMelee : CECHPWork idTraceTarget = m_idTarget; } - if (idTraceTarget && !m_pHost.IsRooting()) + if (idTraceTarget != 0 && !m_pHost.IsRooting()) { CECHPWorkTrace pWork = (CECHPWorkTrace)m_pWorkMan.CreateWork(Host_work_ID.WORK_TRACEOBJECT); pWork.SetTraceTarget(pWork.CreatTraceTarget(idTraceTarget, CECHPWorkTrace.Trace_reason.TRACE_ATTACK)); diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs index b10f74e553..d4a70c39fb 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs @@ -24,36 +24,36 @@ public static class TraceObjectType public abstract class CECTracedObject { //friend CECHPWorkTrace; - protected int m_iTraceType; + protected int m_iTraceType; protected int m_iObjectId; protected int m_iReason; protected bool m_bMoreClose; protected CECHostPlayer m_pHost; - public CECTracedObject(int type, int id, CECHostPlayer pHost, int ireason) + public CECTracedObject(int type, int id, CECHostPlayer pHost, int ireason) { - m_iTraceType = type; - m_iObjectId = id; - m_iReason = ireason; + m_iTraceType = type; + m_iObjectId = id; + m_iReason = ireason; m_pHost = pHost; m_bMoreClose = false; } public CECTracedObject(CECTracedObject rhs) { - m_iTraceType = rhs.m_iTraceType; - m_iObjectId = rhs.m_iObjectId; - m_iReason = rhs.m_iReason; - m_bMoreClose = rhs.m_bMoreClose; + m_iTraceType = rhs.m_iTraceType; + m_iObjectId = rhs.m_iObjectId; + m_iReason = rhs.m_iReason; + m_bMoreClose = rhs.m_bMoreClose; m_pHost = rhs.m_pHost; } - public abstract bool OnTargetMissing(); - public abstract A3DVECTOR3 GetTargetPos(); - public abstract bool OnTouched(); - public abstract CECTracedObject Clone(); + public abstract bool OnTargetMissing(); + public abstract A3DVECTOR3 GetTargetPos(); + public abstract bool OnTouched(); + public abstract CECTracedObject Clone(); public virtual bool IsTargetMissing() - { + { if (m_iObjectId != 0) { CECObject pObj = EC_ManMessageMono.Instance.GetObject(m_iObjectId, 0); @@ -136,7 +136,7 @@ public abstract class CECTracedObject if (m_iReason == CECHPWorkTrace.Trace_reason.TRACE_TALK) { fTouchRadius = 0.0f; - } + } else { EC_Player pPlayer = pObject.GetComponent(); @@ -159,7 +159,7 @@ public abstract class CECTracedObject } return false; } - public int GetTraceType() + public int GetTraceType() { return m_iTraceType; } @@ -173,7 +173,7 @@ public class CECTracedNPC : CECTracedObject { protected bool m_bForceAttack; - public CECTracedNPC(int type, int id, CECHostPlayer pHost, int ireason, bool bForceAttack = false) : base (type, id, pHost, ireason) + public CECTracedNPC(int type, int id, CECHostPlayer pHost, int ireason, bool bForceAttack = false) : base(type, id, pHost, ireason) { m_bForceAttack = bForceAttack; } @@ -274,7 +274,7 @@ public class CECTracedNPC : CECTracedObject public class CECTracedPlayer : CECTracedObject { - protected bool m_bForceAttack; + protected bool m_bForceAttack; public CECTracedPlayer(int type, int id, CECHostPlayer pHost, int ireason, bool bForceAttack = false) : base(type, id, pHost, ireason) { m_bForceAttack = bForceAttack; @@ -319,7 +319,7 @@ public class CECTracedPlayer : CECTracedObject public override bool OnTouched() { - bool bActionDone =false; + bool bActionDone = false; if (GPDataTypeHelper.ISPLAYERID(m_iObjectId)) { if (m_iObjectId == 0 || m_iObjectId == m_pHost.GetCharacterID()) @@ -411,7 +411,7 @@ public class CECTracedMatter : CECTracedObject { } - public CECTracedMatter(CECTracedMatter rhs) : base(rhs) + public CECTracedMatter(CECTracedMatter rhs) : base(rhs) { } @@ -503,19 +503,19 @@ public class CECTracedMatter : CECTracedObject }; public class CECHPWorkTrace : CECHPWork { - // Trace reason - public static class Trace_reason + // Trace reason + public static class Trace_reason + { + public const int TRACE_NONE = -1, + TRACE_ATTACK = 0, // Normal attack + TRACE_PICKUP = 1, // Pickup object + TRACE_TALK = 2, // Go to talk + TRACE_SPELL = 3, // Cast magic + TRACE_GATHER = 4; // Gather object + } + // Constructor and Destructor + public CECHPWorkTrace(CECHPWorkMan pWorkMan) : base(Host_work_ID.WORK_TRACEOBJECT, pWorkMan) { - public const int TRACE_NONE = -1, - TRACE_ATTACK = 0, // Normal attack - TRACE_PICKUP = 1, // Pickup object - TRACE_TALK = 2, // Go to talk - TRACE_SPELL = 3, // Cast magic - TRACE_GATHER = 4; // Gather object - } - // Constructor and Destructor - public CECHPWorkTrace(CECHPWorkMan pWorkMan) : base(Host_work_ID.WORK_TRACEOBJECT, pWorkMan) - { m_dwMask = Work_mask.MASK_TRACEOBJECT; m_dwTransMask = Work_mask.MASK_STAND | Work_mask.MASK_MOVETOPOS | Work_mask.MASK_FLYOFF | Work_mask.MASK_FREEFALL | Work_mask.MASK_FOLLOW | Work_mask.MASK_USEITEM; @@ -523,11 +523,11 @@ public class CECHPWorkTrace : CECHPWork Reset(); } - // Change trace target - //void ChangeTarget(int idTarget, int iReason, bool bUseAutoPF=false); - // 设定traceobject - public void SetTraceTarget(CECTracedObject pTraceObj, bool bUseAutoPF = false) - { + // Change trace target + //void ChangeTarget(int idTarget, int iReason, bool bUseAutoPF=false); + // 设定traceobject + public void SetTraceTarget(CECTracedObject pTraceObj, bool bUseAutoPF = false) + { ResetUseAutoPF(bUseAutoPF); if (!pTraceObj.GetTargetObject() || pTraceObj.GetObjectID() == m_pHost.GetCharacterID()) { @@ -573,8 +573,8 @@ public class CECHPWorkTrace : CECHPWork return null; } -// Tick routine -public virtual bool Tick(float dwDeltaTime) + // Tick routine + public virtual bool Tick(float dwDeltaTime) { base.Tick(dwDeltaTime); @@ -640,8 +640,8 @@ public virtual bool Tick(float dwDeltaTime) return true; } -// Reset work -public override void Reset() + // Reset work + public override void Reset() { base.Reset(); @@ -658,8 +658,8 @@ public override void Reset() m_dwAutoPFNextCheckTime = 0; m_pTraceObject = null; } -// Work is cancel -public override void Cancel() + // Work is cancel + public override void Cancel() { //if (m_pHost.m_pPrepSkill && m_pTraceObject.GetTraceReason() == Trace_reason.TRACE_SPELL) // m_pHost.m_pPrepSkill = null; @@ -675,10 +675,10 @@ public override void Cancel() //AP_ActionEvent(m_bActionDone ? AP_EVENT_TRACEOK : AP_EVENT_MOVEFINISHED, m_pTraceObject.GetTraceReason()); } -// This work is do player moving ? -public override bool IsMoving() { return true; } -// Copy work data -public override bool CopyData(CECHPWork pWork) + // This work is do player moving ? + public override bool IsMoving() { return true; } + // Copy work data + public override bool CopyData(CECHPWork pWork) { if (!base.CopyData(pWork)) return false; @@ -705,22 +705,22 @@ public override bool CopyData(CECHPWork pWork) return true; } -// User press cancel button -public void PressCancel() + // User press cancel button + public void PressCancel() { m_bReadyCancel = true; //if (m_pTraceObject.GetTraceReason() == TRACE_SPELL) // m_pHost.m_pPrepSkill = NULL; } -// Set move close flag -public void SetMoveCloseFlag(bool bMoveClose) { m_pTraceObject.SetMoveCloseFlag(bMoveClose); } + // Set move close flag + public void SetMoveCloseFlag(bool bMoveClose) { m_pTraceObject.SetMoveCloseFlag(bMoveClose); } // Set / Get force attack flag public void SetForceAttack(bool bTrue) { m_bForceAttack = bTrue; } public bool GetForceAttack() { return m_bForceAttack; } // Set / Get prepared skill public void SetPrepSkill(CECSkill pSkill) { /*m_pPrepSkill = pSkill;*/ } -public CECSkill GetPrepSkill() { /*return m_pPrepSkill;*/ return null; } + public CECSkill GetPrepSkill() { /*return m_pPrepSkill;*/ return null; } // Get target ID public int GetTarget() { return m_pTraceObject.GetObjectID(); } // Get trace reason @@ -734,18 +734,18 @@ public CECSkill GetPrepSkill() { /*return m_pPrepSkill;*/ return null; } // CECIntelligentRoute.Instance().ResetSearch(); //} } -public bool GetUseAutoPF() + public bool GetUseAutoPF() { return m_bUseAutoPF; } -public bool IsAutoPF() + public bool IsAutoPF() { return false; } -public void SetActionDone(bool bActionDone) { m_bActionDone = bActionDone; } + public void SetActionDone(bool bActionDone) { m_bActionDone = bActionDone; } -public void OnTargetMissing() + public void OnTargetMissing() { StopMove(true); if ((m_pTraceObject.GetTraceType() == TraceObjectType.TRACE_NPC) || (m_pTraceObject.GetTraceType() == TraceObjectType.TRACE_PLAYER)) @@ -758,12 +758,12 @@ public void OnTargetMissing() //} } -public void OnTouchTarget() + public void OnTouchTarget() { StopMove(true); m_bActionDone = m_pTraceObject.OnTouched(); } -public bool CanTouch() + public bool CanTouch() { //CECSkill pPrepSkill = m_pHost.m_pPrepSkill; CheckPrepSkill(); @@ -901,8 +901,8 @@ public bool CanTouch() } return true; } -// Trace in air and water -public bool Trace_FlySwim(float fDeltaTime) + // Trace in air and water + public bool Trace_FlySwim(float fDeltaTime) { return true; } @@ -925,19 +925,70 @@ public bool Trace_FlySwim(float fDeltaTime) m_bFinished = true; } } -// Handle the case that target died when host is tracing it -bool OnTargetDied(CECObject* pTarget); -// Is valid time to touch target ? -bool IsGoodTimeToTouch(); -// Check prepare skill -void CheckPrepSkill(); -bool GetTargetCurPos(A3DVECTOR3 &pos); -A3DVECTOR3 GetCurMovingDest(); -void UpdateUseAutoPF(); + // Handle the case that target died when host is tracing it + public bool OnTargetDied(CECObject pTarget) + { + return true; + } + // Is valid time to touch target ? + public bool IsGoodTimeToTouch() + { + if (m_pHost.IsJumping()) + { + return false; + } + return true; + } + // Check prepare skill + public void CheckPrepSkill() + { -void ReplaceTarget(CECTracedObject ptraceobj); + } + public bool GetTargetCurPos(A3DVECTOR3 pos) + { + return true; + } + public A3DVECTOR3 GetCurMovingDest() + { + return new A3DVECTOR3(); + } + public void UpdateUseAutoPF() + { -void ResetUseAutoPF(bool bUseAutoPF); -void UpdateResetUseAutoPF(); -void ClearResetUseAutoPF(); + } + + public void ReplaceTarget(CECTracedObject ptraceobj) + { + //if (m_pTraceObject) + //{ + // delete m_pTraceObject; + //} + m_pTraceObject = ptraceobj; + } + + public void ResetUseAutoPF(bool bUseAutoPF) + { + m_bShouldResetUseAutoPF = true; + m_bUseAutoPFResetValue = bUseAutoPF; + } + public void UpdateResetUseAutoPF() + { + if (!m_bShouldResetUseAutoPF) + { + return; + } + //# ifdef SHOW_AUTOMOVE_FOOTPRINTS + // g_AutoPFFollowPoints.clear(); + // g_AutoPFPathPoints.clear(); + //#endif + //CECIntelligentRoute::Instance().SetUsage(CECIntelligentRoute::enumUsageWorkTrace); + //CECIntelligentRoute::Instance().ResetSearch(); + SetUseAutoPF(m_bUseAutoPFResetValue); + ClearResetUseAutoPF(); + } + public void ClearResetUseAutoPF() + { + m_bShouldResetUseAutoPF = false; + m_bUseAutoPFResetValue = false; + } }; \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_Object.cs b/Assets/PerfectWorld/Scripts/Managers/EC_Object.cs index b58014c11a..f6f58bbfb4 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_Object.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_Object.cs @@ -83,15 +83,15 @@ public class CECObject : MonoBehaviour // Set absolute forward and up direction public virtual void SetDirAndUp(A3DVECTOR3 vDir, A3DVECTOR3 vUp) { - if (m_bUseGroundNormal) - { - A3DVECTOR3 vecRight = Normalize(CrossProduct(g_vAxisY, vDir)); - A3DVECTOR3 vecNormal = m_vecGroundNormal - DotProduct(m_vecGroundNormal, vecRight) * vecRight; - A3DVECTOR3 vecNewDir = Normalize(CrossProduct(vecRight, vecNormal)); - A3DCoordinate::SetDirAndUp(vecNewDir, vecNormal); - } - else - A3DCoordinate::SetDirAndUp(vDir, vUp); + //if (m_bUseGroundNormal) + //{ + // A3DVECTOR3 vecRight = Normalize(CrossProduct(g_vAxisY, vDir)); + // A3DVECTOR3 vecNormal = m_vecGroundNormal - DotProduct(m_vecGroundNormal, vecRight) * vecRight; + // A3DVECTOR3 vecNewDir = Normalize(CrossProduct(vecRight, vecNormal)); + // A3DCoordinate::SetDirAndUp(vecNewDir, vecNormal); + //} + //else + // A3DCoordinate::SetDirAndUp(vDir, vUp); // Stop orientation adjusting m_bAdjustOrient = false; @@ -103,24 +103,24 @@ public class CECObject : MonoBehaviour m_dwOrientTime = dwTime; m_dwOrientTimeCnt = 0; - // Calculate start orientation - A3DMATRIX4 mat = a3d_TransformMatrix(GetDir(), GetUp(), g_vOrigin); - m_quOrientStart.ConvertFromMatrix(mat); + //// Calculate start orientation + //A3DMATRIX4 mat = a3d_TransformMatrix(GetDir(), GetUp(), g_vOrigin); + //m_quOrientStart.ConvertFromMatrix(mat); - // Calculate end orientation - if (m_bUseGroundNormal) - { - A3DVECTOR3 vecRight = Normalize(CrossProduct(g_vAxisY, vDir)); - A3DVECTOR3 vecNormal = m_vecGroundNormal - DotProduct(m_vecGroundNormal, vecRight) * vecRight; - A3DVECTOR3 vecNewDir = Normalize(CrossProduct(vecRight, vecNormal)); - mat = a3d_TransformMatrix(vecNewDir, vecNormal, g_vOrigin); - } - else - { - mat = a3d_TransformMatrix(vDir, vUp, g_vOrigin); - } + //// Calculate end orientation + //if (m_bUseGroundNormal) + //{ + // A3DVECTOR3 vecRight = Normalize(CrossProduct(g_vAxisY, vDir)); + // A3DVECTOR3 vecNormal = m_vecGroundNormal - DotProduct(m_vecGroundNormal, vecRight) * vecRight; + // A3DVECTOR3 vecNewDir = Normalize(CrossProduct(vecRight, vecNormal)); + // mat = a3d_TransformMatrix(vecNewDir, vecNormal, g_vOrigin); + //} + //else + //{ + // mat = a3d_TransformMatrix(vDir, vUp, g_vOrigin); + //} - m_quOrientEnd.ConvertFromMatrix(mat); + //m_quOrientEnd.ConvertFromMatrix(mat); } // Calculate distance between this object and specified position @@ -181,7 +181,17 @@ public class CECObject : MonoBehaviour // Get object id public static int GetObjectID(CECObject pObject) { + if (!pObject) + return 0; + if (pObject.IsPlayer()) + return ((EC_Player)pObject).GetCharacterID(); + else if (pObject.IsNPC()) + return ((CECNPC)pObject).GetNPCID(); + //else if (pObject.IsMatter()) + // return ((CECMatter*)pObject)->GetMatterID(); + else + return 0; } protected int m_iCID; // Class ID diff --git a/Assets/PerfectWorld/Scripts/NPC/CECMonster.cs b/Assets/PerfectWorld/Scripts/NPC/CECMonster.cs index 10e90b4b99..e9e0b8b4cc 100644 --- a/Assets/PerfectWorld/Scripts/NPC/CECMonster.cs +++ b/Assets/PerfectWorld/Scripts/NPC/CECMonster.cs @@ -13,7 +13,7 @@ public class CECMonster : CECNPC public override void SetUpCECNPC(CECNPCMan pNPCMan) { base.SetUpCECNPC(pNPCMan); - m_iCID = (int)ClassID.OCID_MONSTER; + m_iCID = (int)Class_ID.OCID_MONSTER; m_pDBEssence = default; } public override bool Init(int tid, in info_npc info, ReadOnlySpan packet, int infoOffset) diff --git a/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs b/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs index 9ccf79e1cc..c53e8054de 100644 --- a/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs +++ b/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs @@ -899,6 +899,9 @@ public class CECNPC : CECObject //} return false; } + + // Get NPC ID + public int GetNPCID() { return m_NPCInfo.nid; } } public enum WorkType { diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index ababbb8d9a..546c162f72 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -42,6 +42,7 @@ public class CECHostPlayer : EC_Player public bool m_bPrepareFight = false; // true, prepare to fight int m_iJumpCount = 0; bool m_bJumpInWater = false; + public A3DVECTOR3 m_vVelocity; // Velocity float playerSpeed = 5.0f; float jumpHeight = 1.5f; diff --git a/Assets/Scripts/Move/CECHostMove.cs b/Assets/Scripts/Move/CECHostMove.cs index 866f0a90fb..b38926fe57 100644 --- a/Assets/Scripts/Move/CECHostMove.cs +++ b/Assets/Scripts/Move/CECHostMove.cs @@ -331,6 +331,8 @@ public class CECHostMove public int MoveBlocked() { return m_iBlockedCnt; } public void SetSlideLock(bool bLock) { m_bSlideLock = bLock; } + // Is stoping ? + public bool IsStop() { return m_bStop; } } public struct CDR_INFO { diff --git a/Assets/Scripts/Move/EC_Player.cs b/Assets/Scripts/Move/EC_Player.cs index 70b5284900..16b479fba9 100644 --- a/Assets/Scripts/Move/EC_Player.cs +++ b/Assets/Scripts/Move/EC_Player.cs @@ -379,6 +379,8 @@ public abstract class EC_Player : CECObject // Get move environment public int GetMoveEnv(){ return m_iMoveEnv; } + // Get character ID + public int GetCharacterID(){ return m_PlayerInfo.cid; } } public struct PlayActionEvent {