npcAttack
This commit is contained in:
Binary file not shown.
@@ -1,3 +1,4 @@
|
||||
using CSNetwork.GPDataType;
|
||||
using UnityEngine;
|
||||
|
||||
public class CECObject : MonoBehaviour
|
||||
@@ -39,4 +40,10 @@ public class CECObject : MonoBehaviour
|
||||
MOVEENV_WATER,
|
||||
MOVEENV_AIR,
|
||||
}
|
||||
protected void TurnFaceTo(int idTarget, float dwTime)
|
||||
{
|
||||
// Face to target
|
||||
A3DVECTOR3 vTarget;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -32,11 +32,34 @@ public class CECNPCMan : CECObject, IMsgHandler
|
||||
case long value when value == EC_MsgDef.MSG_NM_NPCINFO: OnMsgNPCInfo(Msg); break;
|
||||
case long value when value == EC_MsgDef.MSG_NM_NPCMOVE: OnMsgNPCMove(Msg); break;
|
||||
case long value when value == EC_MsgDef.MSG_NM_NPCSTOPMOVE: OnMsgNPCStopMove(Msg); break;
|
||||
case long value when value == EC_MsgDef. MSG_NM_NPCATKRESULT : TransmitMessage(Msg); break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool TransmitMessage(ECMSG msg)
|
||||
{
|
||||
int nid = 0;
|
||||
switch (msg.dwMsg)
|
||||
{
|
||||
case long value when value == EC_MsgDef.MSG_NM_NPCATKRESULT:
|
||||
|
||||
nid = ((cmd_object_atk_result )msg.dwParam1).attacker_id;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
CECNPC pNPC = SeekOutNPC(nid);
|
||||
if (pNPC)
|
||||
pNPC.ProcessMessage(msg);
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool OnMsgNPCStopMove(ECMSG msg)
|
||||
{
|
||||
cmd_object_stop_move pCmd = EC_Utility.ByteArrayToStructure<cmd_object_stop_move>((byte[])msg.dwParam1);
|
||||
|
||||
@@ -48,4 +48,5 @@ public class CECMonster : CECNPC
|
||||
StartWork((int)WorkType.WT_NOTHING, (int)WorkID.WORK_STAND);
|
||||
return true;
|
||||
}
|
||||
public MONSTER_ESSENCE GetDBEssence() { return m_pDBEssence; }
|
||||
}
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
using CSNetwork.GPDataType;
|
||||
using System.Text;
|
||||
using BrewMonster;
|
||||
using CSNetwork;
|
||||
using CSNetwork.GPDataType;
|
||||
using ModelRenderer.Scripts.Common;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using UnityEditor.Rendering;
|
||||
using UnityEngine;
|
||||
using BrewMonster;
|
||||
using CSNetwork;
|
||||
using ModelRenderer.Scripts.Common;
|
||||
using System.IO;
|
||||
|
||||
public class CECNPC : CECObject
|
||||
{
|
||||
@@ -32,7 +33,9 @@ public class CECNPC : CECObject
|
||||
protected int m_iAction;
|
||||
protected int m_idSelTarget;
|
||||
protected int m_iCurWorkType;
|
||||
protected int m_nFightTimeLeft;
|
||||
protected int m_iCurWork;
|
||||
protected int m_idAttackTarget;
|
||||
protected int m_DisappearCnt;
|
||||
protected bool m_bAboutToDie;
|
||||
protected Vector3 m_vStopDir;
|
||||
@@ -145,6 +148,54 @@ public class CECNPC : CECObject
|
||||
|
||||
return true;
|
||||
}
|
||||
public bool ProcessMessage(ECMSG Msg)
|
||||
{
|
||||
switch (Msg.dwMsg)
|
||||
{
|
||||
case long value when value == EC_MsgDef.MSG_NM_NPCATKRESULT: OnMsgNPCAtkResult(Msg); break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void OnMsgNPCAtkResult(ECMSG msg)
|
||||
{
|
||||
cmd_object_atk_result pCmd = MemoryMarshal.Read<cmd_object_atk_result>(
|
||||
((byte[])msg.dwParam1).AsSpan());
|
||||
|
||||
if (true)
|
||||
{
|
||||
// Face to target
|
||||
NPCTurnFaceTo(pCmd.target_id, Time.deltaTime);
|
||||
m_idAttackTarget = pCmd.target_id;
|
||||
|
||||
// now start a fight work
|
||||
if (IsMonsterNPC())
|
||||
{
|
||||
CECMonster pMonster = (CECMonster)this;
|
||||
MONSTER_ESSENCE pMonsterEssence = pMonster.GetDBEssence();
|
||||
StartWork((int)WorkType.WT_NORMAL, (int)WorkID.WORK_FIGHT, (uint)(pMonsterEssence.attack_speed * 1000));
|
||||
}
|
||||
}
|
||||
//TODO: Hiệu ứng đánh
|
||||
//PlayAttackEffect(pCmd->target_id, 0, 0, iDamage, pCmd->attack_flag, pCmd->speed * 50);
|
||||
}
|
||||
void NPCTurnFaceTo(int idTarget, float dwTime)
|
||||
{
|
||||
if (IsDirFixed())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// tower in war can not turn face to.
|
||||
if (IsMonsterNPC())
|
||||
{
|
||||
int role_in_war = (int)((CECMonster)this).GetDBEssence().role_in_war;
|
||||
if (role_in_war == 2 || role_in_war == 5)
|
||||
return;
|
||||
}
|
||||
|
||||
TurnFaceTo(idTarget, dwTime);
|
||||
}
|
||||
private void Update()
|
||||
{
|
||||
switch (m_iCurWork)
|
||||
@@ -268,7 +319,7 @@ public class CECNPC : CECObject
|
||||
{
|
||||
// Note: below judge can prevent many problems when we attempt to
|
||||
// finish a work but don't assure we are doing this work
|
||||
BrewMonster.BMLogger.Log("HoangDev : WorkFinished :"+ iWorkID);
|
||||
BrewMonster.BMLogger.Log("HoangDev : WorkFinished :" + iWorkID);
|
||||
if (m_iCurWork != iWorkID)
|
||||
return;
|
||||
|
||||
@@ -581,7 +632,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])
|
||||
@@ -724,9 +775,14 @@ public class CECNPC : CECObject
|
||||
|
||||
public void StartWork_Fight(uint dwParam)
|
||||
{
|
||||
m_nFightTimeLeft = (int)dwParam;
|
||||
|
||||
BMLogger.LogError("HoangDev: StartWork_Fight");
|
||||
// dwParam được dùng như “thời gian chiến đấu còn lại”
|
||||
//m_nFightTimeLeft = (int)dwParam;
|
||||
// Không play animation ở đây vì animation được điều khiển bởi message tấn công
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void StartWork_Spell(uint dwParam)
|
||||
|
||||
@@ -91,6 +91,7 @@ namespace BrewMonster.Network
|
||||
public void c2s_CmdPlayerMove(in Vector3 vCurPos, in Vector3 vDest,
|
||||
int iTime, float fSpeed, int iMoveMode, ushort wStamp)
|
||||
{
|
||||
BMLogger.LogError($"SendMoveCmd:");
|
||||
Instance._gameSession.c2s_CmdPlayerMove(EC_Utility.ToNumerics(vCurPos), EC_Utility.ToNumerics(vDest), iTime, fSpeed, iMoveMode, wStamp);
|
||||
}
|
||||
protected override void Initialize()
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace BrewMonster.UI
|
||||
#if UNITY_EDITOR
|
||||
if (Input.GetKeyUp(KeyCode.LeftAlt))
|
||||
{
|
||||
_usernameInputField.text = "test004";
|
||||
_usernameInputField.text = "test002";
|
||||
_passwordInputField.text = "123456";
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -8,6 +8,7 @@ using System.Text;
|
||||
using UnityEngine;
|
||||
using CSNetwork.Protocols;
|
||||
using CSNetwork;
|
||||
using BrewMonster;
|
||||
|
||||
public class CECHostMove
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user