Merge pull request 'Update hp_normal_attack' (#21) from feature/hp_normal_attack into develop
Reviewed-on: https://git.brew.monster/Unity/perfect-world-unity/pulls/21
This commit is contained in:
@@ -178,6 +178,10 @@ public class CECNPCMan : CECObject, IMsgHandler
|
||||
|
||||
// Tạo NPC mới
|
||||
npc = CreateNPC(Info, bBornInSight, packet, infoOffset);
|
||||
if(npc != null)
|
||||
{
|
||||
npc.SetUpCECNPC(this);
|
||||
}
|
||||
if (object.ReferenceEquals(npc, null))
|
||||
{
|
||||
BrewMonster.BMLogger.LogError($"Failed to create NPC ({Info.tid})");
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Security.Cryptography;
|
||||
using Unity.VisualScripting;
|
||||
using WorkList = System.Collections.Generic.List<CECHPWork>;
|
||||
@@ -185,7 +186,7 @@ public class CECHPWorkMan
|
||||
}
|
||||
|
||||
private CECHostPlayer m_pHost;
|
||||
private WorkList[] m_WorkStack = new WorkList[Work_priority.NUM_PRIORITY];
|
||||
private WorkList[] m_WorkStack = new WorkList[Work_priority.NUM_PRIORITY] { new List<CECHPWork>(), new List<CECHPWork>(), new List<CECHPWork>() };
|
||||
private int m_iCurPriority;
|
||||
private DELAYWORK m_Delayed;
|
||||
private CECHPWorkPostTickCommand m_pPostTickCommand;
|
||||
@@ -230,13 +231,16 @@ public class CECHPWorkMan
|
||||
for (int i = (Work_priority.NUM_PRIORITY - 1); i >= 0; --i)
|
||||
{
|
||||
WorkList workList = m_WorkStack[i];
|
||||
for (int j = 0; j < workList.Count; ++j)
|
||||
if(workList != null)
|
||||
{
|
||||
CECHPWork pWork = workList[j];
|
||||
if (matcher.Match(pWork, i, false))
|
||||
for (int j = 0; j < workList.Count; ++j)
|
||||
{
|
||||
result = pWork;
|
||||
break;
|
||||
CECHPWork pWork = workList[j];
|
||||
if (matcher.Match(pWork, i, false))
|
||||
{
|
||||
result = pWork;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -534,11 +538,14 @@ public class CECHPWorkMan
|
||||
return true;
|
||||
}
|
||||
WorkList workList = m_WorkStack[iPriority];
|
||||
for (int i = 0; i < workList.Count; ++i)
|
||||
if(workList != null)
|
||||
{
|
||||
if (!workList[i].CanTransferTo(CECHPWork.GetWorkMask(iWorkID)))
|
||||
for (int i = 0; i < workList.Count; ++i)
|
||||
{
|
||||
return false;
|
||||
if (!workList[i].CanTransferTo(CECHPWork.GetWorkMask(iWorkID)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@@ -546,7 +553,7 @@ public class CECHPWorkMan
|
||||
|
||||
bool HasWorkOnPriority(int iPriority)
|
||||
{
|
||||
return ValidatePriority(iPriority) && m_WorkStack[iPriority].Count != 0;
|
||||
return ValidatePriority(iPriority) && m_WorkStack[iPriority] != null && m_WorkStack[iPriority].Count != 0;
|
||||
}
|
||||
|
||||
public void SetPostTickCommand(CECHPWorkPostTickCommand command)
|
||||
|
||||
@@ -98,10 +98,10 @@ class CECHPWorkMelee : CECHPWork
|
||||
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));
|
||||
pWork.SetTraceTarget(pWork.CreatTraceTarget(idTraceTarget, CECHPWorkTrace.Trace_reason.TRACE_ATTACK));
|
||||
m_pWorkMan.SetPostTickCommand(new CECHPWorkPostTickCommand1(pWork));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
// Reset work
|
||||
@@ -113,43 +113,43 @@ class CECHPWorkMelee : CECHPWork
|
||||
m_iIdleTime = 0;
|
||||
m_iIdleTimeCnt = 0;
|
||||
}
|
||||
// Copy work data
|
||||
public virtual bool CopyData(CECHPWork pWork)
|
||||
{
|
||||
if (!base.CopyData(pWork))
|
||||
return false;
|
||||
// Copy work data
|
||||
public virtual bool CopyData(CECHPWork pWork)
|
||||
{
|
||||
if (!base.CopyData(pWork))
|
||||
return false;
|
||||
|
||||
CECHPWorkMelee pSrc = (CECHPWorkMelee)pWork;
|
||||
CECHPWorkMelee pSrc = (CECHPWorkMelee)pWork;
|
||||
|
||||
m_idTarget = pSrc.m_idTarget;
|
||||
m_iIdleTime = pSrc.m_iIdleTime;
|
||||
m_iIdleTimeCnt = pSrc.m_iIdleTimeCnt;
|
||||
m_idTarget = pSrc.m_idTarget;
|
||||
m_iIdleTime = pSrc.m_iIdleTime;
|
||||
m_iIdleTimeCnt = pSrc.m_iIdleTimeCnt;
|
||||
|
||||
return true;
|
||||
}
|
||||
public virtual void Cancel()
|
||||
{
|
||||
// TO DO: fix later
|
||||
//m_pHost.TurnFaceTo(0);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public virtual void Cancel()
|
||||
{
|
||||
// TO DO: fix later
|
||||
//m_pHost.TurnFaceTo(0);
|
||||
}
|
||||
|
||||
// Get attack target
|
||||
public int GetTarget() { return m_idTarget; }
|
||||
// Set idle time
|
||||
public void SetIdleTime(int iTime)
|
||||
{
|
||||
m_iIdleTime = iTime;
|
||||
m_iIdleTimeCnt = 0;
|
||||
}
|
||||
// Get idle time
|
||||
public int GetIdleTime() { return m_iIdleTime; }
|
||||
// Get attack target
|
||||
public int GetTarget() { return m_idTarget; }
|
||||
// Set idle time
|
||||
public void SetIdleTime(int iTime)
|
||||
{
|
||||
m_iIdleTime = iTime;
|
||||
m_iIdleTimeCnt = 0;
|
||||
}
|
||||
// Get idle time
|
||||
public int GetIdleTime() { return m_iIdleTime; }
|
||||
|
||||
// On first tick
|
||||
protected virtual void OnFirstTick()
|
||||
{
|
||||
m_pHost.m_iMoveMode = (int)MoveMode.MOVE_STAND;
|
||||
m_pHost.PlayAction((int)EC_Player.PLAYER_ACTION_TYPE.ACT_ATTACK_1 + Random.Range(0, 3), true, 200, false);
|
||||
// On first tick
|
||||
protected virtual void OnFirstTick()
|
||||
{
|
||||
m_pHost.m_iMoveMode = (int)MoveMode.MOVE_STAND;
|
||||
m_pHost.PlayAction((int)EC_Player.PLAYER_ACTION_TYPE.ACT_ATTACK_1 + Random.Range(0, 3), true, 200, false);
|
||||
|
||||
m_idTarget = m_pHost.m_idSelTarget;
|
||||
}
|
||||
m_idTarget = m_pHost.m_idSelTarget;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -581,7 +581,7 @@ public class CECNPC : CECObject
|
||||
public bool IsDirFixed() { return (m_dwStates & PlayerNPCState.GP_STATE_NPC_FIXDIR) != 0 ? true : false; }
|
||||
public void ReleaseWork(int iWorkType)
|
||||
{
|
||||
BrewMonster.BMLogger.LogError("HoangDev : ReleaseWorkl :"+ iWorkType);
|
||||
//BrewMonster.BMLogger.LogError("HoangDev : ReleaseWorkl :"+ iWorkType);
|
||||
Debug.Assert(iWorkType >= 0 && iWorkType < (int)WorkType.NUM_WORKTYPE);
|
||||
|
||||
switch (m_aWorks[iWorkType])
|
||||
@@ -803,7 +803,7 @@ public class CECNPC : CECObject
|
||||
public bool IsDead(){ return (m_dwStates & PlayerNPCState.GP_STATE_CORPSE) != 0; }
|
||||
public void PlayMoveAction(int iMoveMode)
|
||||
{
|
||||
BrewMonster.BMLogger.LogError($"HoangDev: PlayMoveAction {iMoveMode}");
|
||||
//BrewMonster.BMLogger.LogError($"HoangDev: PlayMoveAction {iMoveMode}");
|
||||
// Play run or walk aciton
|
||||
if (iMoveMode == (int)GPMoveMode.GP_MOVE_RUN || iMoveMode == (int)GPMoveMode.GP_MOVE_RETURN)
|
||||
{
|
||||
|
||||
@@ -12,6 +12,7 @@ GameObject:
|
||||
- component: {fileID: 2542060226037108388}
|
||||
- component: {fileID: -3520322077839857420}
|
||||
- component: {fileID: -2400324395862947468}
|
||||
- component: {fileID: 8595541918946480801}
|
||||
m_Layer: 0
|
||||
m_Name: MonsterPrefab
|
||||
m_TagString: Untagged
|
||||
@@ -86,3 +87,24 @@ CharacterController:
|
||||
m_SkinWidth: 0.08
|
||||
m_MinMoveDistance: 0.001
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!65 &8595541918946480801
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6975799234359536760}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 2, y: 2, z: 2}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
|
||||
@@ -12,6 +12,7 @@ using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using TMPro;
|
||||
using UnityEditor.Experimental.GraphView;
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
using UnityEngine.SceneManagement;
|
||||
@@ -70,6 +71,7 @@ public class CECHostPlayer : EC_Player
|
||||
// cache tùy chọn (không bắt buộc)
|
||||
float ccRadius, ccSkin;
|
||||
RaycastHit lastGroundHit;
|
||||
Camera mainCam;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
@@ -99,6 +101,11 @@ public class CECHostPlayer : EC_Player
|
||||
}
|
||||
private void Start()
|
||||
{
|
||||
mainCam = Camera.main;
|
||||
if (mainCam == null)
|
||||
{
|
||||
mainCam = FindFirstObjectByType<Camera>();
|
||||
}
|
||||
_playerStateMachine.InitState(_idleState);
|
||||
// btnJump.onClick.AddListener(HandleJump);
|
||||
}
|
||||
@@ -111,6 +118,90 @@ public class CECHostPlayer : EC_Player
|
||||
// ccRadius = controller.radius; ccSkin = controller.skinWidth;
|
||||
|
||||
_playerStateMachine.UpdateState();
|
||||
|
||||
if (Input.GetMouseButtonDown(1) && mainCam != null)
|
||||
{
|
||||
int idTraceTarget = 0, idSelTarget = 0;
|
||||
bool bForceAttack = false;
|
||||
int iTraceReason = CECHPWorkTrace.Trace_reason.TRACE_NONE;
|
||||
bool bWikiMonster = false;
|
||||
|
||||
Ray ray = mainCam.ScreenPointToRay(Input.mousePosition);
|
||||
RaycastHit hit;
|
||||
|
||||
if (Physics.Raycast(ray, out hit))
|
||||
{
|
||||
CECObject clickedObject = hit.collider.gameObject.GetComponent<CECObject>();
|
||||
|
||||
if(clickedObject != null)
|
||||
{
|
||||
int idObject = CECObject.GetObjectID(clickedObject);
|
||||
if (idObject != 0)
|
||||
{
|
||||
CECNPC pNPC = EC_ManMessageMono.Instance._CECNPCMan.GetNPC(idObject);
|
||||
if(pNPC != null)
|
||||
{
|
||||
if (!pNPC.IsDead())
|
||||
{
|
||||
idTraceTarget = idObject;
|
||||
}
|
||||
if (idTraceTarget != 0)
|
||||
{
|
||||
if (AttackableJudge(idObject, bForceAttack) == 1)
|
||||
iTraceReason = CECHPWorkTrace.Trace_reason.TRACE_ATTACK;
|
||||
else if (pNPC.IsServerNPC())
|
||||
{
|
||||
if (!IsInBattle() || InSameBattleCamp(pNPC))
|
||||
iTraceReason = CECHPWorkTrace.Trace_reason.TRACE_TALK;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (idTraceTarget != 0)
|
||||
{
|
||||
//if (m_pWorkMan.IsSitting())
|
||||
//{
|
||||
// g_pGame.GetGameSession().c2s_CmdStandUp();
|
||||
// return;
|
||||
//}
|
||||
// Trace a object
|
||||
if (iTraceReason == CECHPWorkTrace.Trace_reason.TRACE_ATTACK)
|
||||
{
|
||||
//if (!CanDo(CANDO_MELEE))
|
||||
// return;
|
||||
Debug.LogError("Attack");
|
||||
NormalAttackObject(idTraceTarget, bForceAttack);
|
||||
}
|
||||
//else
|
||||
//{
|
||||
// if (!CanDo(CANDO_MOVETO))
|
||||
// return;
|
||||
|
||||
// if (iTraceReason == CECHPWorkTrace::TRACE_PICKUP)
|
||||
// {
|
||||
// PickupObject(idTraceTarget, false);
|
||||
// }
|
||||
// else if (iTraceReason == CECHPWorkTrace::TRACE_GATHER)
|
||||
// {
|
||||
// PickupObject(idTraceTarget, true);
|
||||
// }
|
||||
// else if (CECHPWork * pWork = m_pWorkMan.GetWork(CECHPWork::WORK_TRACEOBJECT))
|
||||
// {
|
||||
// CECHPWorkTrace* pWorkTrace = dynamic_cast<CECHPWorkTrace*>(pWork);
|
||||
// pWorkTrace.SetTraceTarget(pWorkTrace.CreatTraceTarget(idTraceTarget, iTraceReason, bForceAttack));
|
||||
// }
|
||||
// else if (m_pWorkMan.CanStartWork(CECHPWork::WORK_TRACEOBJECT) && !bWikiMonster)
|
||||
// {
|
||||
// CECHPWorkTrace* pWork = (CECHPWorkTrace*)m_pWorkMan.CreateWork(CECHPWork::WORK_TRACEOBJECT);
|
||||
// pWork.SetTraceTarget(pWork.CreatTraceTarget(idTraceTarget, iTraceReason, bForceAttack));
|
||||
// m_pWorkMan.StartWork_p1(pWork);
|
||||
// }
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
public void StopMovement()
|
||||
{
|
||||
@@ -229,7 +320,7 @@ public class CECHostPlayer : EC_Player
|
||||
case int value when value == EC_MsgDef.MSG_HST_TASKDATA:
|
||||
{
|
||||
OnMsgHstTaskData(Msg);
|
||||
Debug.LogError("[Dat]- OnMsgHstTaskData");
|
||||
//Debug.LogError("[Dat]- OnMsgHstTaskData");
|
||||
break;
|
||||
}
|
||||
case int value when value == EC_MsgDef.MSG_HST_ITEMOPERATION:
|
||||
@@ -837,7 +928,7 @@ public class CECHostPlayer : EC_Player
|
||||
//{
|
||||
// if (m_pPrepSkill)
|
||||
// {
|
||||
// float fRange = m_pPrepSkill->GetCastRange(m_ExtProps.ak.AttackRange, GetPrayDistancePlus());
|
||||
// float fRange = m_pPrepSkill.GetCastRange(m_ExtProps.ak.AttackRange, GetPrayDistancePlus());
|
||||
// if (fRange > 0.0f)
|
||||
// {
|
||||
// if (fDist - fTargetRad <= fRange)
|
||||
@@ -911,12 +1002,12 @@ public class CECHostPlayer : EC_Player
|
||||
// while (true)
|
||||
// {
|
||||
// if (!IsUnderWater()) break;
|
||||
// //CECWorld* pWorld = g_pGame->GetGameRun()->GetWorld();
|
||||
// //CECWorld* pWorld = g_pGame.GetGameRun().GetWorld();
|
||||
// //if (!pWorld) break;
|
||||
|
||||
// const A3DVECTOR3 vPos = GetPos();
|
||||
// float fTerrainHeight = pWorld->GetTerrainHeight(vPos);
|
||||
// float fWaterHeight = pWorld->GetWaterHeight(vPos);
|
||||
// float fTerrainHeight = pWorld.GetTerrainHeight(vPos);
|
||||
// float fWaterHeight = pWorld.GetWaterHeight(vPos);
|
||||
// if (fWaterHeight <= fTerrainHeight) break;
|
||||
|
||||
// float fBorderLine = fWaterHeight - 2.0f;
|
||||
|
||||
Reference in New Issue
Block a user