diff --git a/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll b/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll index 368d4eb1fc..ae601df6d6 100644 Binary files a/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll and b/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll differ diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs new file mode 100644 index 0000000000..e28ff3381f --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs @@ -0,0 +1,417 @@ +using DG.Tweening; +using System.Collections.Generic; +using UnityEngine; +using WorkList = System.Collections.Generic.List; + +public class CECHPWork : CECObjectWork +{ + // Host work ID + public static class Host_work_ID + { + public const int WORK_INVALID = -1, + WORK_STAND = 0, // Stand and do nothing + WORK_MOVETOPOS = 1, // Move to a destination terrain position + WORK_TRACEOBJECT = 2, // Trace specified object (NPC, player etc.) + WORK_HACKOBJECT = 3, // Hack specified object (NPC, player etc.) + WORK_SPELLOBJECT = 4, // Spell magic on specified object (NPC, player etc.) + WORK_USEITEM = 5, // Host use item + WORK_DEAD = 6, // Host is dead + WORK_FOLLOW = 7, // Follow some one else + WORK_FLYOFF = 8, // Fly off + WORK_FREEFALL = 9, // Free fall + WORK_SIT = 10, // Sit + WORK_PICKUP = 11, // Pickup item + WORK_CONCENTRATE = 12, // All concentrate work + WORK_REVIVE = 13, // Revive + WORK_FLASHMOVE = 14, // Flash move + WORK_BEBOUND = 15, // Be bound by buddy + WORK_PASSIVEMOVE = 16, // Passive movement (knock back / pull) + WORK_CONGREGATE = 17, // Congregate reply + WORK_SKILLSTATEACT = 18, // skill buff action + WORK_FORCENAVIGATEMOVE = 19, // force navigate move + NUM_WORK = 20; + } + + protected static class Work_mask + { + public const uint MASK_STAND = 0x0001, + MASK_MOVETOPOS = 0x0002, + MASK_TRACEOBJECT = 0x0004, + MASK_HACKOBJECT = 0x0008, + MASK_SPELLOBJECT = 0x0010, + MASK_USEITEM = 0x0020, + MASK_DEAD = 0x0040, + MASK_FOLLOW = 0x0080, + MASK_FLYOFF = 0x0100, + MASK_FREEFALL = 0x0200, + MASK_SIT = 0x0400, + MASK_PICKUP = 0x0800, + MASK_CONCENTRATE = 0x1000, + MASK_REVIVE = 0x2000, + MASK_FLASHMOVE = 0x4000, + MASK_BEBOUND = 0x8000, + MASK_CONGREGATE = 0x10000, + MASK_SKILLSTATEACT = 0x20000, + MASK_FORCENAVIGATE = 0x40000; + public const uint MASK_ALLWORK = 0xffffffff; + } + + protected CECHPWorkMan m_pWorkMan; // Work manager + protected CECHostPlayer m_pHost; // Host player object + + public CECHPWork(int iWorkID, CECHPWorkMan pWorkMan) : base(iWorkID) + { + m_pWorkMan = pWorkMan; + m_pHost = pWorkMan.GetHostPlayer(); + } + + // Operations + // Override from CECObjectWork + public virtual void Cancel() + { + + } + // This work is do player moving ? + public virtual bool IsMoving() + { + return false; + } + // Copy work data + public virtual bool CopyData(CECHPWork pWork) + { + m_bFinished = pWork.m_bFinished; + m_bFirstTick = pWork.m_bFirstTick; + return true; + } + + public string GetWorkName() + { + return GetWorkName(GetWorkID()); + } + public static uint GetWorkMask(int iWorkID) + { + if (!Validate(iWorkID)) + { + return 0; + } + uint[] l_workMask = new uint[]{ + Work_mask.MASK_STAND, + Work_mask.MASK_MOVETOPOS, + Work_mask.MASK_TRACEOBJECT, + Work_mask.MASK_HACKOBJECT, + Work_mask.MASK_SPELLOBJECT, + Work_mask.MASK_USEITEM, + Work_mask.MASK_DEAD, + Work_mask.MASK_FOLLOW, + Work_mask.MASK_FLYOFF, + Work_mask.MASK_FREEFALL, + Work_mask.MASK_SIT, + Work_mask.MASK_PICKUP, + Work_mask.MASK_CONCENTRATE, + Work_mask.MASK_REVIVE, + Work_mask.MASK_FLASHMOVE, + Work_mask.MASK_BEBOUND, + Work_mask.MASK_CONGREGATE, + Work_mask.MASK_SKILLSTATEACT, + Work_mask.MASK_FORCENAVIGATE, + }; + return l_workMask[iWorkID]; + } + public static bool Validate(int iWorkID) + { + return iWorkID >= 0 && iWorkID < Host_work_ID.NUM_WORK; + } + + public static string GetWorkName(int iWorkID) + { + string[] l_WorkName = new string[Host_work_ID.NUM_WORK] + { + "WORK_STAND", + "WORK_MOVETOPOS", + "WORK_TRACEOBJECT", + "WORK_HACKOBJECT", + "WORK_SPELLOBJECT", + "WORK_USEITEM", + "WORK_DEAD", + "WORK_FOLLOW", + "WORK_FLYOFF", + "WORK_FREEFALL", + "WORK_SIT", + "WORK_PICKUP", + "WORK_CONCENTRATE", + "WORK_REVIVE", + "WORK_FLASHMOVE", + "WORK_BEBOUND", + "WORK_PASSIVEMOVE", + "WORK_CONGREGATE", + "WORK_SKILLSTATEACT", + "WORK_FORCENAVIGATEMOVE" + }; + if (Validate(iWorkID)) + { + return l_WorkName[iWorkID]; + } + else if (iWorkID == Host_work_ID.WORK_INVALID) + { + return "WORK_INVALID"; + } + else + { + return "Unknown"; + } + } +} + +/////////////////////////////////////////////////////////////////////////// +// +// Class CECHPWorkMan +// +/////////////////////////////////////////////////////////////////////////// +public class CECHPWorkMan +{ + // Work priority + public static class Work_priority + { + public const int PRIORITY_0 = 0, + PRIORITY_1 = 1, + PRIORITY_2 = 2, + NUM_PRIORITY = 3; + }; + + // Delayed work info. + public struct DELAYWORK + { + public int iPriority; + public CECHPWork pWork; + } + + private CECHostPlayer m_pHost; + private WorkList[] m_WorkStack = new WorkList[Work_priority.NUM_PRIORITY]; + private int m_iCurPriority; + private DELAYWORK m_Delayed; + private CECHPWorkPostTickCommand m_pPostTickCommand; + + public CECHPWorkMan(CECHostPlayer pHost) + { + m_pHost = pHost; + m_iCurPriority = -1; + m_Delayed = new DELAYWORK + { + iPriority = 0, + pWork = null + }; + m_pPostTickCommand = null; + } + + + bool InternallyStartWork(int iPriority, CECHPWork pWork) + { + bool bStarted = false; + if (CanRunSimultaneouslyWithCurrentWork(iPriority, pWork)) + { + WorkList workList = m_WorkStack[iPriority]; + workList.Add(pWork); + bStarted = true; + //LOG_DEBUG_INFO(AString().Format("CECHPWork::%s started simultaneously, priority=%d", pWork->GetWorkName(), iPriority)); + } + else + { + if (pWork.GetWorkID() == CECHPWork.Host_work_ID.WORK_DEAD) + { + for (int i = iPriority; i < Work_priority.NUM_PRIORITY; i++) + { + FinishWorkAtPriority(i); + } + ClearDelayedWork(); + WorkList workList = m_WorkStack[iPriority]; + workList.Add(pWork); + m_iCurPriority = iPriority; + bStarted = true; + } + else + { + bool shouldStart = (iPriority >= m_iCurPriority); + FinishWorkAtPriority(iPriority); + WorkList workList = m_WorkStack[iPriority]; + workList.Add(pWork); + if (shouldStart) + { + if (iPriority > m_iCurPriority) + { + CancelWorkAtPriority(m_iCurPriority); + } + m_iCurPriority = iPriority; + bStarted = true; + } + } + //if (bStarted) + //{ + // LOG_DEBUG_INFO(AString().Format("CECHPWork::%s started, priority=%d", pWork->GetWorkName(), iPriority)); + //} + //else + //{ + // LOG_DEBUG_INFO(AString().Format("CECHPWork::%s add to priority queue %d", pWork->GetWorkName(), iPriority)); + //} + } + return bStarted; + } + bool CanRunSimultaneouslyWithCurrentWork(int iPriority, CECHPWork pWork) + { + if (!ValidatePriority(iPriority) || iPriority != m_iCurPriority) + { + return false; + } + WorkList workList = m_WorkStack[iPriority]; + if (workList == null || workList.Count == 0) + { + return false; + } + + foreach (var work in workList) + { + if (!CanRunSimultaneously(work, pWork)) + { + return false; + } + } + return true; + } + bool CanRunSimultaneously(CECHPWork pWork1, CECHPWork pWork2) + { + if (pWork1.GetWorkID() == CECHPWork.Host_work_ID.WORK_MOVETOPOS && + pWork2.GetWorkID() == CECHPWork.Host_work_ID.WORK_SPELLOBJECT) + { + return CanSpellWhileMoving(pWork2 as CECHPWorkSpell); + } + if (pWork2.GetWorkID() == CECHPWork.Host_work_ID.WORK_MOVETOPOS && + pWork1.GetWorkID() == CECHPWork.Host_work_ID.WORK_SPELLOBJECT) + { + return CanSpellWhileMoving(pWork1 as CECHPWorkSpell); + } + return false; + } + bool CanSpellWhileMoving(CECHPWorkSpell pWorkSpell) + { + //return pWorkSpell.GetSkill() + // && CECCastSkillWhenMove::Instance().IsSkillSupported(pWorkSpell->GetSkill()->GetSkillID(), m_pHost); + return false; + } + void StartAwaitingWorks() + { + if (ValidatePriority(m_iCurPriority)) + { + for (--m_iCurPriority; m_iCurPriority >= 0; --m_iCurPriority) + { + WorkList workList = m_WorkStack[m_iCurPriority]; + if (workList == null || workList.Count == 0) + { + continue; + } + foreach (var work in workList) + { + work.OnWorkShift(); + //LOG_DEBUG_INFO(AString().Format("CECHPWork::%s started by decrease priority, priority=%d", workList[j]->GetWorkName(), m_iCurPriority)); + } + break; + } + } + StartDelayedWork(); + } + + void FinishWorkAtPriority(int iPriority) + { + if (!ValidatePriority(iPriority)) + { + return; + } + WorkList workList = m_WorkStack[iPriority]; + while ((workList != null && workList.Count > 0)) + { + KillWork(iPriority, 0); + } + if (m_iCurPriority == iPriority) + { + m_iCurPriority = -1; + } + } + + void KillWork(int iPriority, int index) + { + if (!ValidatePriority(iPriority)) + { + return; + } + WorkList workList = m_WorkStack[iPriority]; + if (index < 0 || index >= workList.Count) + { + return; + } + CECHPWork pWork = workList[index]; + KillWork(pWork); + //LOG_DEBUG_INFO(AString().Format("CECHPWork::%s priority=%d killed", pWork->GetWorkName(), iPriority)); + //delete pWork; + workList.RemoveAt(index); + } + void KillWork(CECHPWork pWork) + { + if (pWork == null) + { + return; + } + if (pWork.GetWorkID() == CECHPWork.Host_work_ID.WORK_MOVETOPOS) + { + CECHPWorkMove pWorkMove = pWork as CECHPWorkMove; + if (pWorkMove) + { + if (pWorkMove.GetAutoMove()) + { + pWorkMove.Finish(); + } + else + { + pWorkMove.Cancel(); + } + } + } + else + { + pWork.Cancel(); + } + } + + void CancelWork(CECHPWork pWork) + { + + } + void CancelWorkAtPriority(int iPriority) + { + + } + + bool DelayWork(int iPriority, CECHPWork pWork) + { + + } + void StartDelayedWork() + { + + } + void ClearDelayedWork() + { + + } + CECHPWork GetDelayedWork() + { + return m_Delayed.pWork; + } + + bool ValidatePriority(int iPriority) + { + return iPriority >= 0 && iPriority < Work_priority.NUM_PRIORITY; + } +} + +public abstract class CECHPWorkPostTickCommand +{ + public abstract bool Run(CECHPWorkMan pWorkMan); +}; diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs.meta b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs.meta new file mode 100644 index 0000000000..f8f30555d7 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: de7b8e482be7d8347b45ab9751adae44 \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs new file mode 100644 index 0000000000..a3884625bc --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs @@ -0,0 +1,159 @@ +using CSNetwork.GPDataType; +using UnityEngine; + +public class CECHPWorkMove : CECHPWork +{ + public static class Types + { + public const int DEST_2D = 0, + DEST_3D = 1, + DEST_DIR = 2, + DEST_PUSH = 3, + DEST_STANDJUMP = 4, + DEST_AUTOPF = 5; // Movement type + } + + protected A3DVECTOR3 m_vMoveDest; // Move destination position or direction + protected int m_iDestType; // Destination type + protected bool m_bHaveDest; // true, have destination + protected bool m_bMeetSlide; // true, meet slide + protected A3DVECTOR3 m_vCurDir; // Current move direction + protected bool m_bReadyCancel; // true, ready to cancel + protected bool m_bGliding; // glide + protected float m_fGlideTime; + protected float m_fGlideSpan; + protected float m_fGlideAng; + protected float m_fGlideVel; // glide angular vel + protected float m_fGlidePitch; // glide pitch angle + protected float m_fCurPitch; + protected float m_fPushPitch; + protected float m_fPushLean; + + protected bool m_bUseAutoMoveDialog; // Auto move + protected float m_fAutoHeight; // Height of auto moving destination + protected bool m_bAutoLand; // Auto land when arrive at destination + protected bool m_bAutoFly; // Auto fly + protected bool m_bReachedHeight;// Player reached specified height + protected bool m_bAutoFlyPending; // Mark whether a fly command had been executed + + protected int m_iNPCTempleId; + protected int m_iTaskId; + protected bool m_bSwitchTo2D; + + protected bool m_bResetAutoPF; + + public CECHPWorkMove(CECHPWorkMan pWorkMan) : base (Host_work_ID.WORK_MOVETOPOS, pWorkMan) + { + m_dwMask = Work_mask.MASK_MOVETOPOS; + m_dwTransMask = Work_mask.MASK_STAND | Work_mask.MASK_TRACEOBJECT | Work_mask.MASK_FOLLOW; + Reset(); + } + + public CECHPWorkMove(int iWorkID, CECHPWorkMan pWorkMan) : base(iWorkID, pWorkMan) + { + } + + // Set destination position or direction + public void SetDestination(int iDestType, A3DVECTOR3 vMoveDest) + { + m_iDestType = iDestType; + m_vMoveDest = vMoveDest; + m_bHaveDest = true; + m_bGliding = false; + //m_pHost->SetAdjustOrient(false); // 2014-9-10 徐文彬:在 CECHPWorkMove 创建的时候都会调用此函数,会导致其它时机通过 SetDestDirAndUp 调用对人物的朝向调整失效。 + // 重现方法为:月仙“望月咏”技能释放后、马上按住'A'或'D'等移动键并摁住不放,将导致人物施法方向偏离目标而朝向移动方向(需多次尝试) + + //清空任务信息 + m_iTaskId = 0; + m_iNPCTempleId = 0; + ResetUseAutoPF(); + + if (iDestType == Types.DEST_DIR) + { + m_vCurDir = vMoveDest; + if (m_bUseAutoMoveDialog) + { + m_bUseAutoMoveDialog = false; + m_bAutoLand = false; + m_fAutoHeight = -1.0f; + m_bAutoFly = false; + m_bReachedHeight = true; + m_bAutoFlyPending = false; + } + } + else if (iDestType == Types.DEST_2D || iDestType == Types.DEST_3D) + { + m_vCurDir = vMoveDest - new A3DVECTOR3(m_pHost.transform.position.x, m_pHost.transform.position.y, m_pHost.transform.position.z); + m_vCurDir.y = 0.0f; + m_vCurDir.Normalize(); + } + else if (IsAutoPF()) + { + m_vCurDir = CECIntelligentRoute::Instance().GetCurDest() - m_pHost->GetPos(); + m_vCurDir.y = 0.0f; + m_vCurDir.Normalize(); + if (m_bUseAutoMoveDialog) + { + // 此处禁用 m_bUseAutoMoveDialog,见 SetUseAutoMoveDialog 中说明 + m_bUseAutoMoveDialog = false; + m_bAutoLand = false; + m_fAutoHeight = -1.0f; + m_bAutoFly = false; + m_bReachedHeight = true; + m_bAutoFlyPending = false; + } + } + + if (m_pHost.m_pMoveTargetGFX) + { + if (iDestType != DEST_PUSH) + m_pHost.m_pMoveTargetGFX.Stop(); + } + } + + void ResetUseAutoPF() + { + m_bResetAutoPF = true; + } + + // Tick routine + virtual bool Tick(uint dwDeltaTime) + { + + } + // Reset work + virtual void Reset(); + // Work is cancel + virtual void Cancel(); + + // This work is do player moving ? + virtual bool IsMoving() { return true; } + // Copy work data + virtual bool CopyData(CECHPWork* pWork); + + // Play move target effect + void PlayMoveTargetGFX(const A3DVECTOR3& vPos, const A3DVECTOR3& vNormal); + + // User press cancel button + void PressCancel() { m_bReadyCancel = true; } + + void SetUseAutoMoveDialog(bool bUseAutoMoveDialog); + bool GetUseAutoMoveDialog() { return m_bUseAutoMoveDialog; } + bool GetAutoMove(); + + void SetAutoLand(bool bAutoLand) { m_bAutoLand = bAutoLand; } + bool GetAutoLand() { return m_bAutoLand; } + + void SetAutoHeight(float fHeight) { m_fAutoHeight = fHeight; m_bAutoFly = true; m_bReachedHeight = false; } + float GetAutoHeight() { return m_fAutoHeight; } + bool IsAutoFly() const { return m_bAutoFly;} + +bool IsAutoPF()const{ return m_iDestType == DEST_AUTOPF; } + + // Finish work + void Finish(); + +void SetTaskNPCInfo(int tid, int taskid); + +void SwitchToDest2D(); +} diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs.meta b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs.meta new file mode 100644 index 0000000000..708b27c87b --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d03d31e6920c13745a437cff8cfe4572 \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkSpell.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkSpell.cs new file mode 100644 index 0000000000..96368a98b4 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkSpell.cs @@ -0,0 +1,75 @@ +using UnityEngine; +/////////////////////////////////////////////////////////////////////////// +// +// Class CECHPWorkSpell +// +/////////////////////////////////////////////////////////////////////////// +public class CECHPWorkSpell : CECHPWork +{ + public static class Spell_magic_state + { + public const int ST_INCANT = 0, + ST_SPELL = 1; + } + + public CECHPWorkSpell(CECHPWorkMan pWorkMan) : base(Host_work_ID.WORK_SPELLOBJECT, pWorkMan) + { + m_dwMask = Work_mask.MASK_SPELLOBJECT; + m_dwTransMask = Work_mask.MASK_STAND | Work_mask.MASK_MOVETOPOS | Work_mask.MASK_TRACEOBJECT; + Reset(); + } + + public CECHPWorkSpell(int iWorkID, CECHPWorkMan pWorkMan) : base(iWorkID, pWorkMan) + { + } + + protected CECSkill m_pSkill; // Skill object + protected CECCounter m_OverTimeCnt; // Over time counter + protected int m_iState; + protected int m_idTarget; // Target id + + // On first tick + protected virtual void OnFirstTick() + { + //m_pHost.m_iMoveMode = CECHostPlayer::MOVE_STAND; + } + // Prepare cast + public void PrepareCast(int idTarget, CECSkill pSkill, int iIncantTime) + { + + } + // Change state + public void ChangeState(int iState) + { + + } + // Get state + public int GetState() + { + return m_iState; + } + public CECSkill GetSkill() + { + return m_pSkill; + } + + // Tick routine + public virtual bool Tick(uint dwDeltaTime) + { + return false; + } + // Reset work + public virtual void Reset() + { + + } + // Copy work data + public virtual bool CopyData(CECHPWork pWork) + { + return false; + } + // Cancel work + public virtual void Cancel() + { + } +} diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkSpell.cs.meta b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkSpell.cs.meta new file mode 100644 index 0000000000..5c0946c956 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkSpell.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: c82fffc45c6f0534e9a668a8ce937e1a \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_ObjectWork.cs b/Assets/PerfectWorld/Scripts/Managers/EC_ObjectWork.cs new file mode 100644 index 0000000000..3b7c92e2a0 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Managers/EC_ObjectWork.cs @@ -0,0 +1,64 @@ +using UnityEngine; + +public class CECObjectWork +{ + // Attributes + protected int m_iWorkID; // Work ID + protected bool m_bFinished; // true, Work is finished + protected uint m_dwMask; // Mask of this work + protected uint m_dwTransMask; // Work transfer masks + protected bool m_bFirstTick; + // Constructor + public CECObjectWork(int iWorkID) + { + m_iWorkID = iWorkID; + m_bFinished = false; + m_dwMask = 0; + m_dwTransMask = 0; + m_bFinished = true; + } + + public virtual bool Tick(uint dwDeltaTime) + { + if (m_bFirstTick) + { + m_bFirstTick = false; + OnFirstTick(); + } + return true; + } + + // Reset work + public virtual void Reset() + { + m_bFinished = false; + m_bFirstTick = true; + } + + // Work is cancel + public virtual void Cancel() { } + + // Can work transfer to another work with specified mask + public virtual bool CanTransferTo(uint dwMask) + { + return (m_dwTransMask & dwMask) != 0; + } + + // On work shift to + public virtual void OnWorkShift() { } + + // Get work ID + public int GetWorkID() => m_iWorkID; + + // Is work finished? + public bool IsFinished() => m_bFinished; + + // Get work mask + public uint GetWorkMask() => m_dwMask; + + // Get work transfer works + public uint GetTransferMask() => m_dwTransMask; + + // On first tick + protected virtual void OnFirstTick() { } +} diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_ObjectWork.cs.meta b/Assets/PerfectWorld/Scripts/Managers/EC_ObjectWork.cs.meta new file mode 100644 index 0000000000..2073381e0f --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Managers/EC_ObjectWork.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 8d658d501be8b9f45be5ed066a6efc23 \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_Skill.cs b/Assets/PerfectWorld/Scripts/Managers/EC_Skill.cs new file mode 100644 index 0000000000..be17af68ef --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Managers/EC_Skill.cs @@ -0,0 +1,6 @@ +using UnityEngine; + +public class CECSkill +{ + +} diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_Skill.cs.meta b/Assets/PerfectWorld/Scripts/Managers/EC_Skill.cs.meta new file mode 100644 index 0000000000..0596a7d863 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Managers/EC_Skill.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a33568a349c4ee9488a562e2c67002e7 \ No newline at end of file diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index 2bcbef17cc..9a3c99f325 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -476,6 +476,9 @@ public class CECHostPlayer : EC_Player bool bStartNewWork = false; bool bUseAutoPF = false; + //CECPlayerWrapper* pWrapper = CECAutoPolicy::GetInstance().GetPlayerWrapper(); + //if (CECAutoPolicy::GetInstance().IsAutoPolicyEnabled() && pWrapper->GetAttackError() >= 2) + bUseAutoPF = true; return false; } } diff --git a/Assets/Scripts/Move/EC_Player.cs b/Assets/Scripts/Move/EC_Player.cs index 6b920f491c..abf4fef640 100644 --- a/Assets/Scripts/Move/EC_Player.cs +++ b/Assets/Scripts/Move/EC_Player.cs @@ -12,6 +12,7 @@ public abstract class EC_Player : MonoBehaviour [SerializeField] protected INFO m_PlayerInfo; protected GameObject m_pPlayerModel; protected float rotationSpeed = 5; + protected int m_iMoveMode; // Player's move mode protected void Awake() {