fix: update attack normal.
This commit is contained in:
Binary file not shown.
@@ -1,42 +1,42 @@
|
||||
using UnityEngine;
|
||||
//using UnityEngine;
|
||||
|
||||
public class CECObject : MonoBehaviour
|
||||
{
|
||||
protected uint m_dwBornStamp;
|
||||
protected bool m_bBornInSight;
|
||||
protected bool m_bSelectable;
|
||||
protected int m_iCID;
|
||||
//public class CECObject : MonoBehaviour
|
||||
//{
|
||||
// protected uint m_dwBornStamp;
|
||||
// protected bool m_bBornInSight;
|
||||
// protected bool m_bSelectable;
|
||||
// protected int m_iCID;
|
||||
|
||||
public virtual void SetUpCECObject()
|
||||
{
|
||||
m_dwBornStamp = 0;
|
||||
m_bBornInSight = false;
|
||||
m_bSelectable = false;
|
||||
m_iCID = (int)ClassID.OCID_OBJECT;
|
||||
}
|
||||
public void SetBornStamp(uint dwStamp) { m_dwBornStamp = dwStamp; }
|
||||
public void SetBornInSight(bool bFlag) { m_bBornInSight = bFlag; }
|
||||
public void SetSelectable(bool bSelectable) { m_bSelectable = bSelectable; }
|
||||
public enum ClassID
|
||||
{
|
||||
OCID_OBJECT = 0,
|
||||
OCID_PLAYER,
|
||||
OCID_HOSTPLAYER,
|
||||
OCID_ELSEPLAYER,
|
||||
OCID_LOGINPLAYER,
|
||||
OCID_NPC,
|
||||
OCID_MONSTER,
|
||||
OCID_SERVER,
|
||||
OCID_MATTER,
|
||||
OCID_PET,
|
||||
OCID_CLONED_PLAYER, // 复制角色模型
|
||||
OCID_HOST_NAVIGATER, // 纯客户端player类,用于强制移动
|
||||
OCID_NPCCLONED_MASTER, // NPC 复制的角色模型
|
||||
};
|
||||
public enum EnviromentMoveType
|
||||
{
|
||||
MOVEENV_GROUND = 0, // Move on ground
|
||||
MOVEENV_WATER,
|
||||
MOVEENV_AIR,
|
||||
}
|
||||
}
|
||||
// public virtual void SetUpCECObject()
|
||||
// {
|
||||
// m_dwBornStamp = 0;
|
||||
// m_bBornInSight = false;
|
||||
// m_bSelectable = false;
|
||||
// m_iCID = (int)ClassID.OCID_OBJECT;
|
||||
// }
|
||||
// public void SetBornStamp(uint dwStamp) { m_dwBornStamp = dwStamp; }
|
||||
// public void SetBornInSight(bool bFlag) { m_bBornInSight = bFlag; }
|
||||
// public void SetSelectable(bool bSelectable) { m_bSelectable = bSelectable; }
|
||||
// public enum ClassID
|
||||
// {
|
||||
// OCID_OBJECT = 0,
|
||||
// OCID_PLAYER,
|
||||
// OCID_HOSTPLAYER,
|
||||
// OCID_ELSEPLAYER,
|
||||
// OCID_LOGINPLAYER,
|
||||
// OCID_NPC,
|
||||
// OCID_MONSTER,
|
||||
// OCID_SERVER,
|
||||
// OCID_MATTER,
|
||||
// OCID_PET,
|
||||
// OCID_CLONED_PLAYER, // 复制角色模型
|
||||
// OCID_HOST_NAVIGATER, // 纯客户端player类,用于强制移动
|
||||
// OCID_NPCCLONED_MASTER, // NPC 复制的角色模型
|
||||
// };
|
||||
// public enum EnviromentMoveType
|
||||
// {
|
||||
// MOVEENV_GROUND = 0, // Move on ground
|
||||
// MOVEENV_WATER,
|
||||
// MOVEENV_AIR,
|
||||
// }
|
||||
//}
|
||||
@@ -7,9 +7,6 @@ using System.Buffers.Binary;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using UnityEngine;
|
||||
using UnityEngine.LightTransport;
|
||||
using static CECNPC;
|
||||
using static CECObject;
|
||||
|
||||
public class CECNPCMan : CECObject, IMsgHandler
|
||||
{
|
||||
@@ -21,7 +18,7 @@ public class CECNPCMan : CECObject, IMsgHandler
|
||||
public CECNPCMan()
|
||||
{
|
||||
m_vServerPos = Vector3.zero;
|
||||
m_iCID = (int)ClassID.OCID_MONSTER;
|
||||
m_iCID = (int)Class_ID.OCID_MONSTER;
|
||||
}
|
||||
public bool ProcessMessage(ECMSG Msg)
|
||||
{
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
using DG.Tweening;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using WorkList = System.Collections.Generic.List<CECHPWork>;
|
||||
|
||||
public class CECHPWork : CECObjectWork
|
||||
@@ -423,36 +420,71 @@ public class CECHPWorkMan
|
||||
}
|
||||
}
|
||||
|
||||
void CancelWork(CECHPWork pWork)
|
||||
public void CancelWork(CECHPWork pWork)
|
||||
{
|
||||
|
||||
}
|
||||
void CancelWorkAtPriority(int iPriority)
|
||||
public void CancelWorkAtPriority(int iPriority)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool DelayWork(int iPriority, CECHPWork pWork)
|
||||
public bool DelayWork(int iPriority, CECHPWork pWork)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
void StartDelayedWork()
|
||||
public void StartDelayedWork()
|
||||
{
|
||||
|
||||
}
|
||||
void ClearDelayedWork()
|
||||
public void ClearDelayedWork()
|
||||
{
|
||||
|
||||
}
|
||||
CECHPWork GetDelayedWork()
|
||||
public CECHPWork GetDelayedWork()
|
||||
{
|
||||
return m_Delayed.pWork;
|
||||
}
|
||||
|
||||
bool ValidatePriority(int iPriority)
|
||||
public bool ValidatePriority(int iPriority)
|
||||
{
|
||||
return iPriority >= 0 && iPriority < Work_priority.NUM_PRIORITY;
|
||||
}
|
||||
|
||||
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 (g_pGame->GetGameRun()->GetHostInputFilter()->IsMoveUsagePressed())
|
||||
// {
|
||||
// CECHPWorkTrace* pWorkTrace = dynamic_cast<CECHPWorkTrace*>(pWork);
|
||||
// if (!pWorkTrace->CanTouch())
|
||||
// { // 2014-8-16 当还在通过键盘操纵移动时、有条件忽略 CECHPWorkTrace,
|
||||
// delete pWorkTrace; // 否则会因 CECHPWorkTrace 中临时转向目标位置、而后又被键盘操纵调整移动方向导致方向瞬间抖动
|
||||
// return false; // 当 CECHPWorkTrace 中目标可立即接触时,不忽略 CECHPWorkTrace,以实现键盘控制移动中、对某怪应用技能时,立刻转向怪施放技能
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
//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 abstract class CECHPWorkPostTickCommand
|
||||
@@ -485,4 +517,47 @@ public class CECHPWorkGeneralMatcher : CECHPWorkMatcher
|
||||
m_priority = priority;
|
||||
m_matchDelayedWork = bIncludeDelayedWork;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class CECHPWorkPostTickRunWorkCommand : CECHPWorkPostTickCommand
|
||||
{
|
||||
CECHPWork m_pWork;
|
||||
int m_iPriority;
|
||||
bool m_bNoDelay;
|
||||
bool m_bShouldTick;
|
||||
uint m_dwTickTime;
|
||||
|
||||
// Constructor
|
||||
public CECHPWorkPostTickRunWorkCommand(
|
||||
CECHPWork pWork,
|
||||
bool bNoDelay = false,
|
||||
int iPriority = CECHPWorkMan.Work_priority.PRIORITY_1,
|
||||
bool bShouldTick = false,
|
||||
uint dwTickTime = 0)
|
||||
{
|
||||
m_pWork = pWork;
|
||||
m_bNoDelay = bNoDelay;
|
||||
m_iPriority = iPriority;
|
||||
m_bShouldTick = bShouldTick;
|
||||
m_dwTickTime = dwTickTime;
|
||||
}
|
||||
|
||||
public override bool Run(CECHPWorkMan pWorkMan)
|
||||
{
|
||||
if (m_pWork == null || pWorkMan == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!pWorkMan.StartWork(m_iPriority, m_pWork, m_bNoDelay))
|
||||
{
|
||||
m_pWork = null;
|
||||
return false;
|
||||
}
|
||||
if (m_bShouldTick)
|
||||
{
|
||||
m_pWork.Tick(m_dwTickTime);
|
||||
}
|
||||
m_pWork = null;
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using BrewMonster;
|
||||
using CSNetwork.GPDataType;
|
||||
using PerfectWorld.Scripts.Managers;
|
||||
using PerfectWorld.Scripts.Player;
|
||||
using UnityEngine;
|
||||
|
||||
@@ -68,7 +69,7 @@ class CECHPWorkMelee : CECHPWork
|
||||
}
|
||||
else if (GPDataTypeHelper.ISNPCID(m_idTarget))
|
||||
{
|
||||
CECNPC pNPC = g_pGame.GetGameRun().GetWorld().GetNPCMan().GetNPC(m_idTarget);
|
||||
CECNPC pNPC = EC_ManMessageMono.Instance._CECNPCMan.GetNPC(m_idTarget);
|
||||
if (!pNPC || pNPC.IsDead()) // Taget has missed ?
|
||||
return true;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using UnityEngine;
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class CECObject : MonoBehaviour
|
||||
public class CECObject : MonoBehaviour
|
||||
{
|
||||
// Class ID
|
||||
public static class Class_ID
|
||||
@@ -60,8 +60,18 @@ class CECObject : MonoBehaviour
|
||||
m_bSelectable = true;
|
||||
}
|
||||
|
||||
// Tick routine
|
||||
public bool Tick(float dwDeltaTime)
|
||||
public virtual void SetUpCECObject()
|
||||
{
|
||||
m_dwBornStamp = 0;
|
||||
m_bBornInSight = false;
|
||||
m_bSelectable = false;
|
||||
m_iCID = (int)Class_ID.OCID_OBJECT;
|
||||
}
|
||||
|
||||
public void SetSelectable(bool bSelectable) { m_bSelectable = bSelectable; }
|
||||
|
||||
// Tick routine
|
||||
public bool Tick(float dwDeltaTime)
|
||||
{
|
||||
if (m_bAdjustOrient)
|
||||
AdjustOrientation(dwDeltaTime);
|
||||
@@ -129,7 +139,7 @@ class CECObject : MonoBehaviour
|
||||
return v / mag;
|
||||
}
|
||||
|
||||
private A3DVECTOR3 GetPos()
|
||||
public A3DVECTOR3 GetPos()
|
||||
{
|
||||
return new A3DVECTOR3(transform.position.x, transform.position.y, transform.position.z);
|
||||
}
|
||||
@@ -202,7 +212,6 @@ class CECObject : MonoBehaviour
|
||||
{
|
||||
|
||||
}
|
||||
public void SetSelectable(bool bSelectable) { m_bSelectable = bSelectable; }
|
||||
|
||||
protected void AdjustOrientation(float dwDeltaTime)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class EC_RoleTypes
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2a00af48d21485d46bf5bae22e8b09f9
|
||||
@@ -1,7 +1,6 @@
|
||||
using CSNetwork.GPDataType;
|
||||
using System.Text;
|
||||
using System;
|
||||
using UnityEditor.Rendering;
|
||||
using UnityEngine;
|
||||
using BrewMonster;
|
||||
using CSNetwork;
|
||||
@@ -22,7 +21,7 @@ public class CECNPC : CECObject
|
||||
protected float m_fDistToHost;
|
||||
protected float m_fDistToHostH;
|
||||
protected OtherPlayer_Move_Info m_cdr;
|
||||
protected float m_fTouchRad;
|
||||
protected float m_fTouchRad = 1f;
|
||||
protected ROLEBASICPROP m_BasicProps;
|
||||
protected Vector3 m_vMoveDir;
|
||||
protected int m_iPassiveMove;
|
||||
@@ -48,7 +47,7 @@ public class CECNPC : CECObject
|
||||
{
|
||||
base.SetUpCECObject();
|
||||
m_vServerPos = new Vector3();
|
||||
m_iCID = (int)ClassID.OCID_NPC;
|
||||
m_iCID = (int)Class_ID.OCID_NPC;
|
||||
}
|
||||
public virtual bool Init(int tid, in info_npc info, ReadOnlySpan<byte> packet, int infoOffset)
|
||||
{
|
||||
@@ -73,9 +72,9 @@ public class CECNPC : CECObject
|
||||
|
||||
_characterController = GetComponent<CharacterController>();
|
||||
|
||||
m_iMoveEnv = (int)((info.state & PlayerNPCState.GP_STATE_NPC_FLY) != 0 ? EnviromentMoveType.MOVEENV_AIR
|
||||
: (info.state & PlayerNPCState.GP_STATE_NPC_SWIM) != 0 ? EnviromentMoveType.MOVEENV_WATER
|
||||
: EnviromentMoveType.MOVEENV_GROUND);
|
||||
m_iMoveEnv = (int)((info.state & PlayerNPCState.GP_STATE_NPC_FLY) != 0 ? Move_environment.MOVEENV_AIR
|
||||
: (info.state & PlayerNPCState.GP_STATE_NPC_SWIM) != 0 ? Move_environment.MOVEENV_WATER
|
||||
: Move_environment.MOVEENV_GROUND);
|
||||
|
||||
var npcVisual = GetComponent<NPCVisual>();
|
||||
m_pNPCModelPolicy.SetNpcVisual(npcVisual);
|
||||
@@ -797,8 +796,10 @@ public class CECNPC : CECObject
|
||||
}
|
||||
}
|
||||
bool IsMonsterOrPet() { return IsMonsterNPC() || IsPetNPC(); }
|
||||
bool IsMonsterNPC() { return (int)ClassID.OCID_MONSTER == m_iCID; }
|
||||
bool IsPetNPC() { return (int)ClassID.OCID_PET == m_iCID; }
|
||||
bool IsMonsterNPC() { return (int)Class_ID.OCID_MONSTER == m_iCID; }
|
||||
bool IsPetNPC() { return (int)Class_ID.OCID_PET == m_iCID; }
|
||||
|
||||
public bool IsDead(){ return (m_dwStates & PlayerNPCState.GP_STATE_CORPSE) != 0; }
|
||||
public void PlayMoveAction(int iMoveMode)
|
||||
{
|
||||
BrewMonster.BMLogger.LogError($"HoangDev: PlayMoveAction {iMoveMode}");
|
||||
@@ -850,6 +851,8 @@ public class CECNPC : CECObject
|
||||
}
|
||||
bool IsDisappearing() { return m_DisappearCnt == 0 ? true : false; }
|
||||
|
||||
public float GetTouchRadius() { return m_fTouchRad; }
|
||||
|
||||
bool IsLag(float fDist)
|
||||
{
|
||||
return m_iPassiveMove == 0 && fDist > MAX_LAGDIST;
|
||||
|
||||
@@ -445,7 +445,7 @@ namespace PerfectWorld.Scripts.Player
|
||||
m_aabbServer.CompleteMinsMaxs();
|
||||
}
|
||||
|
||||
private A3DVECTOR3 GetPos()
|
||||
public A3DVECTOR3 GetPos()
|
||||
{
|
||||
A3DVECTOR3 result = new A3DVECTOR3();
|
||||
result.x = transform.position.x;
|
||||
@@ -518,6 +518,11 @@ namespace PerfectWorld.Scripts.Player
|
||||
|
||||
return iAction;
|
||||
}
|
||||
|
||||
//public A3DVECTOR3 GetPos()
|
||||
//{
|
||||
// return new A3DVECTOR3(transform.position.x, transform.position.y, transform.position.z);
|
||||
//}
|
||||
}
|
||||
|
||||
// Player appear flag
|
||||
|
||||
@@ -233,34 +233,34 @@ public class CECHostPlayer : EC_Player
|
||||
switch (cmd)
|
||||
{
|
||||
case CommandID.EQUIP_ITEM:
|
||||
{
|
||||
{
|
||||
byte index_inv = data[0];
|
||||
byte index_equip = data[1];
|
||||
// Update client-side data: move item between PACK_INVENTORY and PACK_EQUIPMENT
|
||||
var invItem = EC_Inventory.GetItem(EC_Inventory.PACK_INVENTORY, index_inv, true);
|
||||
var equipItem = EC_Inventory.GetItem(EC_Inventory.PACK_EQUIPMENT, index_equip, true);
|
||||
if (invItem != null)
|
||||
{
|
||||
invItem.Package = EC_Inventory.PACK_EQUIPMENT;
|
||||
invItem.Slot = index_equip;
|
||||
EC_Inventory.SetItem(EC_Inventory.PACK_EQUIPMENT, index_equip, invItem);
|
||||
}
|
||||
if (equipItem != null)
|
||||
{
|
||||
equipItem.Package = EC_Inventory.PACK_INVENTORY;
|
||||
equipItem.Slot = index_inv;
|
||||
EC_Inventory.SetItem(EC_Inventory.PACK_INVENTORY, index_inv, equipItem);
|
||||
}
|
||||
// Update client-side data: move item between PACK_INVENTORY and PACK_EQUIPMENT
|
||||
var invItem = EC_Inventory.GetItem(EC_Inventory.PACK_INVENTORY, index_inv, true);
|
||||
var equipItem = EC_Inventory.GetItem(EC_Inventory.PACK_EQUIPMENT, index_equip, true);
|
||||
if (invItem != null)
|
||||
{
|
||||
invItem.Package = EC_Inventory.PACK_EQUIPMENT;
|
||||
invItem.Slot = index_equip;
|
||||
EC_Inventory.SetItem(EC_Inventory.PACK_EQUIPMENT, index_equip, invItem);
|
||||
}
|
||||
if (equipItem != null)
|
||||
{
|
||||
equipItem.Package = EC_Inventory.PACK_INVENTORY;
|
||||
equipItem.Slot = index_inv;
|
||||
EC_Inventory.SetItem(EC_Inventory.PACK_INVENTORY, index_inv, equipItem);
|
||||
}
|
||||
|
||||
// Trigger UI refresh if an EC_InventoryUI is present in scene
|
||||
var ui = GameObject.FindObjectOfType<EC_InventoryUI>();
|
||||
if (ui != null)
|
||||
{
|
||||
ui.RefreshAll();
|
||||
}
|
||||
// Trigger UI refresh if an EC_InventoryUI is present in scene
|
||||
var ui = GameObject.FindObjectOfType<EC_InventoryUI>();
|
||||
if (ui != null)
|
||||
{
|
||||
ui.RefreshAll();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
public void OnMsgHstOwnItemInfo(ECMSG Msg)
|
||||
@@ -487,7 +487,7 @@ public class CECHostPlayer : EC_Player
|
||||
bool bUseAutoPF = false;
|
||||
//CECPlayerWrapper* pWrapper = CECAutoPolicy::GetInstance().GetPlayerWrapper();
|
||||
//if (CECAutoPolicy::GetInstance().IsAutoPolicyEnabled() && pWrapper.GetAttackError() >= 2)
|
||||
bUseAutoPF = true;
|
||||
bUseAutoPF = true;
|
||||
|
||||
CECHPWorkTrace pWorkTrace = null;
|
||||
CECHPWork pWork = null;
|
||||
@@ -686,7 +686,78 @@ public class CECHostPlayer : EC_Player
|
||||
return iRet;
|
||||
}
|
||||
|
||||
private float A3d_Magnitude(A3DVECTOR3 v)
|
||||
{
|
||||
return Mathf.Sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
|
||||
}
|
||||
|
||||
public bool CannotAttack() { return (m_dwLIES & (uint)Logic_Influence_Extned_states.LIES_DISABLEFIGHT) != 0; }
|
||||
|
||||
public bool CanTouchTarget(A3DVECTOR3 vHostPos, A3DVECTOR3 vTargetPos, float fTargetRad, int iReason, float fMaxCut = 1.0f)
|
||||
{
|
||||
float fDist = A3d_Magnitude(vTargetPos - vHostPos);
|
||||
switch (iReason)
|
||||
{
|
||||
case 1: // melee
|
||||
{
|
||||
float fRange;
|
||||
if (fMaxCut >= 0.0f)
|
||||
{
|
||||
float fCutDist = m_ExtProps.ak.AttackRange * 0.3f;
|
||||
if (fCutDist > fMaxCut)
|
||||
fCutDist = fMaxCut;
|
||||
|
||||
fRange = m_ExtProps.ak.AttackRange - fCutDist;
|
||||
}
|
||||
|
||||
else
|
||||
fRange = m_ExtProps.ak.AttackRange * 0.7f;
|
||||
|
||||
if (fDist - fTargetRad <= fRange)
|
||||
return true;
|
||||
|
||||
break;
|
||||
}
|
||||
//case 2: // cast magic
|
||||
//{
|
||||
// if (m_pPrepSkill)
|
||||
// {
|
||||
// float fRange = m_pPrepSkill->GetCastRange(m_ExtProps.ak.AttackRange, GetPrayDistancePlus());
|
||||
// if (fRange > 0.0f)
|
||||
// {
|
||||
// if (fDist - fTargetRad <= fRange)
|
||||
// return true;
|
||||
// }
|
||||
// else
|
||||
// return true;
|
||||
// }
|
||||
|
||||
// break;
|
||||
//}
|
||||
case 3: // talk
|
||||
{
|
||||
if (fDist - fTargetRad <= 5.0f)
|
||||
return true;
|
||||
|
||||
break;
|
||||
}
|
||||
default: // no special reason
|
||||
{
|
||||
if (fDist < (fTargetRad + m_fTouchRad) * 3.0f)
|
||||
return true;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool CanTouchTarget(A3DVECTOR3 vTargetPos, float fTargetRad, int iReason, float fMaxCut = 1.0f)
|
||||
{
|
||||
A3DVECTOR3 vector = new A3DVECTOR3(gameObject.transform.position.x, gameObject.transform.position.y, gameObject.transform.position.z);
|
||||
return CanTouchTarget(vector, vTargetPos, fTargetRad, iReason, fMaxCut);
|
||||
}
|
||||
}
|
||||
|
||||
public enum StateAnim
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using BrewMonster;
|
||||
using CSNetwork.GPDataType;
|
||||
using ModelRenderer.Scripts.GameData;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -14,6 +15,9 @@ public abstract class EC_Player : MonoBehaviour
|
||||
protected float rotationSpeed = 5;
|
||||
internal int m_iMoveMode; // Player's move mode
|
||||
internal int m_idSelTarget; // Ñ¡ÖÐÄ¿±êµÄID
|
||||
uint m_dwStates; // Player's basic states
|
||||
protected ROLEEXTPROP m_ExtProps; // Extend properties
|
||||
protected float m_fTouchRad = 0.3f; // Touch radius
|
||||
|
||||
protected void Awake()
|
||||
{
|
||||
@@ -32,7 +36,10 @@ public abstract class EC_Player : MonoBehaviour
|
||||
{
|
||||
BuildActionList();
|
||||
}
|
||||
public bool IsValidAction(int iIndex) { return (iIndex >= 0 && iIndex < (int)PLAYER_ACTION_TYPE.ACT_MAX) ? true : false; }
|
||||
|
||||
public bool IsDead(){ return (m_dwStates & PlayerNPCState.GP_STATE_CORPSE) != 0; }
|
||||
|
||||
public bool IsValidAction(int iIndex) { return (iIndex >= 0 && iIndex < (int)PLAYER_ACTION_TYPE.ACT_MAX) ? true : false; }
|
||||
private static void BuildActionList()
|
||||
{
|
||||
if (_default_actions == null)
|
||||
@@ -272,6 +279,7 @@ public abstract class EC_Player : MonoBehaviour
|
||||
ACT_CASTSKILL // Chỉ là placeholder cho skill actions
|
||||
}
|
||||
|
||||
public float GetTouchRadius(){ return m_fTouchRad; }
|
||||
}
|
||||
public struct PlayActionEvent
|
||||
{
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"hash": "a7c6b49a0141a5bff9b1983e38137522ef61977d"
|
||||
},
|
||||
"com.unity.ai.navigation": {
|
||||
"version": "2.0.9",
|
||||
"version": "2.0.8",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.collab-proxy": {
|
||||
"version": "2.9.3",
|
||||
"version": "2.9.1",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {},
|
||||
@@ -71,7 +71,7 @@
|
||||
"dependencies": {}
|
||||
},
|
||||
"com.unity.ide.rider": {
|
||||
"version": "3.0.37",
|
||||
"version": "3.0.36",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
|
||||
Reference in New Issue
Block a user