done fix anim npc and hostplayer attack anim
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -248,7 +248,7 @@ Transform:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1450290190322086200}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0.000000041676675, y: 0.70710677, z: 0.000000009546054, w: -0.7071067}
|
||||
m_LocalRotation: {x: 0.000000041676678, y: 0.7071068, z: 0.000000009546055, w: -0.70710677}
|
||||
m_LocalPosition: {x: 0.20218171, y: -0.00000011874363, z: 0.14265004}
|
||||
m_LocalScale: {x: 1, y: 0.99999994, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
@@ -559,7 +559,7 @@ Transform:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3779568298678900252}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.0000024752133, y: -0.24174231, z: 0.0000009670787, w: 0.97034043}
|
||||
m_LocalRotation: {x: -0.0000024752135, y: -0.24174233, z: 0.0000009670788, w: 0.9703405}
|
||||
m_LocalPosition: {x: 0.2888395, y: 0.0000000024365652, z: 0.00000007817289}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
@@ -592,7 +592,7 @@ Transform:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4030888598971003578}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.6044032, y: -0.07699761, z: -0.7905391, w: 0.061774462}
|
||||
m_LocalRotation: {x: -0.60440326, y: -0.07699761, z: -0.79053915, w: 0.061774462}
|
||||
m_LocalPosition: {x: -0.18489406, y: 0.12445245, z: 0.05787985}
|
||||
m_LocalScale: {x: 0.99999994, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
@@ -1012,7 +1012,7 @@ Transform:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4948442401136316024}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.4488744, y: 0.51203674, z: -0.54636633, w: 0.4876617}
|
||||
m_LocalRotation: {x: -0.44887444, y: 0.5120368, z: -0.5463664, w: 0.48766172}
|
||||
m_LocalPosition: {x: -0.1453542, y: -0.04050339, z: -0.038502775}
|
||||
m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994}
|
||||
m_ConstrainProportionsScale: 0
|
||||
@@ -1044,7 +1044,7 @@ Transform:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4997153185552211034}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0.65481967, y: 0.0053792964, z: 0.019061971, w: -0.7555255}
|
||||
m_LocalRotation: {x: 0.6548197, y: 0.0053792964, z: 0.019061973, w: -0.7555255}
|
||||
m_LocalPosition: {x: 0.42279825, y: -0.000000058457182, z: 0.00000035064298}
|
||||
m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994}
|
||||
m_ConstrainProportionsScale: 0
|
||||
@@ -1350,7 +1350,7 @@ GameObject:
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8291201483499919416}
|
||||
- component: {fileID: 5100284403898444692}
|
||||
- component: {fileID: 884070991123099207}
|
||||
m_Layer: 0
|
||||
m_Name: "\u96CC\u6027\u51E4\u7FBD\u9E7F"
|
||||
m_TagString: Untagged
|
||||
@@ -1374,7 +1374,7 @@ Transform:
|
||||
- {fileID: 8685953938703042471}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &5100284403898444692
|
||||
--- !u!114 &884070991123099207
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
@@ -1390,7 +1390,7 @@ MonoBehaviour:
|
||||
_ActionOnDisable: 0
|
||||
_PlayAutomatically: 1
|
||||
_Animations:
|
||||
- {fileID: 7400000, guid: 153bbba8a7a5243a698dc273553eca2a, type: 2}
|
||||
- {fileID: 7400000, guid: 90cc8644824b249a38b2379b6251ce34, type: 2}
|
||||
- {fileID: 7400000, guid: 8665cc7619ce84512a3c2de61fd63c98, type: 2}
|
||||
- {fileID: 7400000, guid: 8826e424623004a4b8ed903ef7744ab0, type: 2}
|
||||
- {fileID: 7400000, guid: 102f1710aedd54d2dbbcca62840b9a7e, type: 2}
|
||||
|
||||
@@ -134,6 +134,9 @@ namespace BrewMonster.Managers
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -555,7 +555,6 @@ namespace BrewMonster
|
||||
|
||||
protected void ClearComActFlagAllRankNodes(bool v)
|
||||
{
|
||||
BMLogger.LogError("ClearComActFlagAllRankNodes " + gameObject.name + ": " + m_PlayerInfo.cid);
|
||||
EventBus.PublishChannel(m_PlayerInfo.cid, new ClearComActFlagAllRankNodesEvent(v));
|
||||
}
|
||||
public bool PlayAttackAction(int nAttackSpeed, ref int attackTime, CECAttackEvent attackEvent)
|
||||
@@ -697,9 +696,6 @@ namespace BrewMonster
|
||||
|
||||
public int GetShowingWeaponType()
|
||||
{
|
||||
//todo: mr Hoang should double check it
|
||||
return 10;
|
||||
|
||||
int weapon_type = 0;
|
||||
if (CanShowFashionWeapon((int)m_uAttackType, m_iFashionWeaponType) &&
|
||||
m_aEquips[(int)IndexOfIteminEquipmentInventory.EQUIPIVTR_FASHION_WEAPON] != 0)
|
||||
|
||||
@@ -393,6 +393,10 @@ public class CECModel
|
||||
EventBus.PublishChannel(iNFO.nid, new QueueNPCActionEvent(szActName));
|
||||
return true;
|
||||
}
|
||||
public void StopChannelAction(int nChannel, bool bStopAct, bool bStopFx = false)
|
||||
{
|
||||
//TODO: Implement StopChannelAction
|
||||
}
|
||||
public struct QueueNPCActionEvent
|
||||
{
|
||||
public string AnimationName;
|
||||
|
||||
@@ -1,15 +1,13 @@
|
||||
using Animancer;
|
||||
using BrewMonster;
|
||||
using BrewMonster.Managers;
|
||||
using BrewMonster.Scripts;
|
||||
using CSNetwork;
|
||||
using CSNetwork.GPDataType;
|
||||
using ModelRenderer.Scripts.Common;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine;
|
||||
using static Unity.Burst.Intrinsics.X86.Avx;
|
||||
|
||||
public class CECNPC : CECObject
|
||||
{
|
||||
@@ -47,7 +45,10 @@ public class CECNPC : CECObject
|
||||
protected CECPolicyAction m_pPolicyAction;
|
||||
public int m_iMMIndex;
|
||||
public int m_idAttackTarget;
|
||||
public UINPC m_npcUI;
|
||||
protected UINPC m_npcUI;
|
||||
CECCounter m_IdleCnt = new CECCounter();
|
||||
protected float m_nFightTimeLeft = 0; // Work Fight time left
|
||||
|
||||
[SerializeField] protected float m_fMoveSpeed;
|
||||
[SerializeField] protected CharacterController _characterController;
|
||||
[SerializeField] protected bool isDebug;
|
||||
@@ -64,6 +65,10 @@ public class CECNPC : CECObject
|
||||
base.SetUpCECObject();
|
||||
m_vServerPos = new A3DVECTOR3();
|
||||
m_iCID = (int)Class_ID.OCID_NPC;
|
||||
m_DisappearCnt.SetPeriod(5000);
|
||||
m_IdleCnt.SetPeriod(25000);
|
||||
m_IdleCnt.IncCounter(UnityEngine.Random.Range(0, 6000));
|
||||
m_pNPCModelPolicy = new CECNPCModelDefaultPolicy(this);
|
||||
}
|
||||
|
||||
public string GetName()
|
||||
@@ -86,7 +91,7 @@ public class CECNPC : CECObject
|
||||
m_iCurWork = 0;
|
||||
m_bStartFight = false;
|
||||
m_bAboutToDie = false;
|
||||
m_DisappearCnt.SetPeriod(5000);
|
||||
|
||||
m_StartDisappearCnt = 0;
|
||||
|
||||
m_BasicProps = new ROLEBASICPROP(true); // struct mặc định, các trường số = 0, mảng đã tạo
|
||||
@@ -185,8 +190,37 @@ public class CECNPC : CECObject
|
||||
switch (Msg.dwMsg)
|
||||
{
|
||||
case long value when value == EC_MsgDef.MSG_NM_NPCATKRESULT: OnMsgNPCAtkResult(Msg); break;
|
||||
case long value when value == EC_MsgDef.MSG_NM_NPCSTARTPLAYACTION: OnMsgNPCStartPlayAction(Msg); break;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnMsgNPCStartPlayAction(ECMSG Msg)
|
||||
{
|
||||
if (IsInPolicyAction())
|
||||
CheckStopPolicyAction();
|
||||
cmd_object_start_play_action cmd = GPDataTypeHelper.FromBytes<cmd_object_start_play_action>((byte[])Msg.dwParam1);
|
||||
StartWork((int)WorkType.WT_INTERRUPT, (int)WorkID.WORK_POLICYACTION, 0, cmd);
|
||||
}
|
||||
|
||||
private void CheckStopPolicyAction()
|
||||
{
|
||||
if (!IsInPolicyAction()) return;
|
||||
|
||||
WorkFinished((int)WorkID.WORK_POLICYACTION);
|
||||
|
||||
if (m_pPolicyAction != null)
|
||||
{
|
||||
m_pNPCModelPolicy.StopChannelAction();
|
||||
m_pPolicyAction = null;
|
||||
m_nPolicyActionIntervalTimer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsInPolicyAction()
|
||||
{
|
||||
return m_pPolicyAction != null;
|
||||
}
|
||||
|
||||
public void OnMsgAttackHostResult(int idHost, int nDamage, int nFlag, int nSpeed)
|
||||
{
|
||||
//BMLogger.LogError("HoangDev: OnMsgAttackHostResultNPC");
|
||||
@@ -423,6 +457,11 @@ public class CECNPC : CECObject
|
||||
switch (m_iCurWork)
|
||||
{
|
||||
case (int)WorkID.WORK_MOVE: TickWork_Move(Time.deltaTime); break;
|
||||
case (int)WorkID.WORK_STAND: TickWork_Stand(Time.deltaTime); break;
|
||||
case (int)WorkID.WORK_FIGHT: TickWork_Fight(Time.deltaTime); break;
|
||||
case (int)WorkID.WORK_SPELL: TickWork_Spell(Time.deltaTime); break;
|
||||
case (int)WorkID.WORK_DEAD: TickWork_Dead(Time.deltaTime); break;
|
||||
//case (int)WorkID.WORK_POLICYACTION: TickWork_PolicyAction(Time.deltaTime); break;
|
||||
}
|
||||
|
||||
// Calculate distance to host player
|
||||
@@ -448,6 +487,60 @@ public class CECNPC : CECObject
|
||||
StartAdjustTransparency(-1.0f, GetTransparentLimit(), 500);
|
||||
}
|
||||
}
|
||||
|
||||
private void TickWork_Dead(float deltaTime)
|
||||
{
|
||||
}
|
||||
|
||||
private void TickWork_Spell(float deltaTime)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void TickWork_Fight(float deltaTime)
|
||||
{
|
||||
m_nFightTimeLeft -= deltaTime;
|
||||
|
||||
if (m_nFightTimeLeft < 0)
|
||||
{
|
||||
m_nFightTimeLeft = 0;
|
||||
WorkFinished((int)WorkID.WORK_FIGHT);
|
||||
return;
|
||||
}
|
||||
|
||||
NPCTurnFaceTo(m_idAttackTarget, 100);
|
||||
|
||||
A3DVECTOR3 vDir = m_vServerPos - GetPos();
|
||||
float fDist = vDir.Normalize();
|
||||
if (fDist > 0.0001f)
|
||||
{
|
||||
float fMoveDist = 10.0f * deltaTime * 0.001f;
|
||||
if (fMoveDist > fDist)
|
||||
fMoveDist = fDist;
|
||||
|
||||
SetPos(EC_Utility.ToVector3(GetPos() + vDir * fMoveDist));
|
||||
}
|
||||
}
|
||||
|
||||
private void TickWork_Stand(float deltaTime)
|
||||
{
|
||||
if (m_IdleCnt.IncCounter(deltaTime * 1000))
|
||||
{
|
||||
m_IdleCnt.Reset();
|
||||
|
||||
if (IsMonsterOrPet())
|
||||
{
|
||||
PlayModelAction((int)NPCActionIndex.ACT_IDLE);
|
||||
if (IsPetNPC() && !IsDead() && !IsDisappearing())
|
||||
{
|
||||
//OnPetSays(CECPetWords::TW_REST);
|
||||
}
|
||||
}
|
||||
else
|
||||
PlayModelAction((int)NPCActionIndex.ACT_NPC_IDLE1 + UnityEngine.Random.Range(0, 2));
|
||||
}
|
||||
}
|
||||
|
||||
public void DestroySelf()
|
||||
{
|
||||
Destroy(gameObject);
|
||||
@@ -500,10 +593,6 @@ public class CECNPC : CECObject
|
||||
}
|
||||
else if (MovingTo(dwDeltaTime))
|
||||
{
|
||||
if (-2041571143 == m_NPCInfo.nid)
|
||||
{
|
||||
BMLogger.LogError("CECNPC::TickWork_Move, MovingTo returned true, finishing WORK_MOVE naturally");
|
||||
}
|
||||
if (!IsDirFixed())
|
||||
{
|
||||
SetDestDirAndUp((m_vStopDir), g_vAxisY, 150);
|
||||
@@ -579,18 +668,10 @@ public class CECNPC : CECObject
|
||||
float fDist = vDir.Normalize();
|
||||
A3DVECTOR3 vPos = vDir * m_fMoveSpeed * deltaTime;
|
||||
float fMoveDelta = Vector3.Magnitude(EC_Utility.ToVector3(vPos) - EC_Utility.ToVector3(vCurPos));
|
||||
if (-2041571143 == m_NPCInfo.nid)
|
||||
{
|
||||
BMLogger.LogError($"CECNPC::MovingTo, m_bStopMove=true, dist={fDist}, curPos={vCurPos}, m_vServerPos={m_vServerPos}");
|
||||
}
|
||||
// If already very close to destination, consider it reached
|
||||
if (fMoveDelta >= fDist)
|
||||
{
|
||||
// Already at destination
|
||||
if (-2041571143 == m_NPCInfo.nid)
|
||||
{
|
||||
BMLogger.LogError("CECNPC::MovingTo, dist <= 0.001f, setting reachedDestination = true");
|
||||
}
|
||||
_characterController.enabled = false;
|
||||
transform.position = EC_Utility.ToVector3(m_vServerPos);
|
||||
_characterController.enabled = true;
|
||||
@@ -763,24 +844,14 @@ public class CECNPC : CECObject
|
||||
{
|
||||
throw new InvalidOperationException("Invalid work state in WorkFinished");
|
||||
}
|
||||
|
||||
// Release current work
|
||||
ReleaseWork(m_iCurWorkType);
|
||||
|
||||
if (-2041571143 == m_NPCInfo.nid && iWorkID == (int)WorkID.WORK_MOVE)
|
||||
{
|
||||
BMLogger.LogError("CECNPC::WorkFinished, finishing WORK_MOVE, looking for next work");
|
||||
}
|
||||
|
||||
bool foundNextWork = false;
|
||||
for (int i = m_iCurWorkType - 1; i >= 0; i--)
|
||||
{
|
||||
if (m_aWorks[i] != 0) // giả định m_aWorks là mảng int workIDs
|
||||
{
|
||||
if (-2041571143 == m_NPCInfo.nid)
|
||||
{
|
||||
BMLogger.LogError($"CECNPC::WorkFinished, found next work: {m_aWorks[i]} (type: {i})");
|
||||
}
|
||||
m_iCurWorkType = i;
|
||||
StartWorkByID(m_aWorks[i], 0);
|
||||
foundNextWork = true;
|
||||
@@ -792,10 +863,6 @@ public class CECNPC : CECObject
|
||||
// This matches C++ behavior where NPC should stand when movement finishes
|
||||
if (!foundNextWork && !IsDead())
|
||||
{
|
||||
if (-2041571143 == m_NPCInfo.nid)
|
||||
{
|
||||
BMLogger.LogError("CECNPC::WorkFinished, no next work found, defaulting to WORK_STAND");
|
||||
}
|
||||
StartWork((int)WorkType.WT_NORMAL, (int)WorkID.WORK_STAND, 0);
|
||||
}
|
||||
|
||||
@@ -943,12 +1010,6 @@ public class CECNPC : CECObject
|
||||
(float)Math.Round(cmd.dest.z, 4)
|
||||
);
|
||||
m_vMoveDir = (cmd.dest) - EC_Utility.ToA3DVECTOR3(transform.position);
|
||||
if (-2041571143 == m_NPCInfo.nid)
|
||||
{
|
||||
BMLogger.LogError($"CECNPC::StopMoveTo, MoveDir=" + m_vMoveDir);
|
||||
BMLogger.LogError($"CECNPC::StopMoveTo, cmd.dest=" + cmd.dest);
|
||||
BMLogger.LogError($"CECNPC::StopMoveTo, EC_Utility.ToA3DVECTOR3(transform.position)=" + EC_Utility.ToA3DVECTOR3(transform.position));
|
||||
}
|
||||
m_bStopMove = true;
|
||||
m_fMoveSpeed = EC_Utility.FIX8TOFLOAT(cmd.sSpeed);
|
||||
m_vServerPos = cmd.dest;
|
||||
@@ -966,10 +1027,6 @@ public class CECNPC : CECObject
|
||||
}
|
||||
|
||||
float fDist = m_vMoveDir.Normalize();
|
||||
if (-2041571143 == m_NPCInfo.nid)
|
||||
{
|
||||
BMLogger.LogError("HoangDEv iMoveMode" + iMoveMode);
|
||||
}
|
||||
// Trong các trường hợp dưới thì kéo NPC về đích
|
||||
if (iMoveMode != (int)GPMoveMode.GP_MOVE_RETURN &&
|
||||
iMoveMode != (int)GPMoveMode.GP_MOVE_PUSH &&
|
||||
@@ -990,10 +1047,6 @@ public class CECNPC : CECObject
|
||||
vDirH.Normalize();
|
||||
if (DotProduct(vDirH, (m_vStopDir)) < 0.7f)
|
||||
bPull = true;
|
||||
if (-2041571143 == m_NPCInfo.nid)
|
||||
{
|
||||
BMLogger.LogError($"vDirH={vDirH}, m_vStopDir= {m_vStopDir}, HoangDEv DotProduct =" + DotProduct(vDirH, (m_vStopDir)));
|
||||
}
|
||||
}
|
||||
else if (iMoveMode == (int)GPMoveMode.GP_MOVE_BLINK)
|
||||
{
|
||||
@@ -1164,7 +1217,7 @@ public class CECNPC : CECObject
|
||||
case (int)WorkID.WORK_MOVE:
|
||||
{
|
||||
var pos = EC_Utility.ToVector3(m_vServerPos);
|
||||
var vDelta = pos -transform.position;
|
||||
var vDelta = pos - transform.position;
|
||||
float fDist = vDelta.magnitude; // Vector3.magnitude trong Unity
|
||||
|
||||
if (fDist > 0.1f)
|
||||
@@ -1194,7 +1247,7 @@ public class CECNPC : CECObject
|
||||
m_iCurWork = 0;
|
||||
}
|
||||
|
||||
public void StartWork(int iWorkType, int iNewWork, uint dwParam = 0)
|
||||
public void StartWork(int iWorkType, int iNewWork, uint dwParam = 0, cmd_object_start_play_action cmd_Object_Start_Play_Action = default)
|
||||
{
|
||||
Debug.Assert(iWorkType >= 0 && iWorkType < (int)WorkType.NUM_WORKTYPE);
|
||||
|
||||
@@ -1247,13 +1300,13 @@ public class CECNPC : CECObject
|
||||
return;
|
||||
}
|
||||
|
||||
StartWorkByID(iNewWork, dwParam);
|
||||
StartWorkByID(iNewWork, dwParam, cmd_Object_Start_Play_Action);
|
||||
}
|
||||
public bool ShouldDisappear() { return m_DisappearCnt.IsFull(); }
|
||||
public void StopWork(int iWorkType)
|
||||
{
|
||||
}
|
||||
public void StartWorkByID(int iWorkID, uint dwParam)
|
||||
public void StartWorkByID(int iWorkID, uint dwParam, cmd_object_start_play_action cmd_Object_Start_Play_Action = default)
|
||||
{
|
||||
// Ignore all message if this NPC is dead.
|
||||
// if (IsDead())
|
||||
@@ -1266,7 +1319,7 @@ public class CECNPC : CECObject
|
||||
case (int)WorkID.WORK_SPELL: StartWork_Spell(dwParam); break;
|
||||
case (int)WorkID.WORK_DEAD: StartWork_Dead(dwParam); break;
|
||||
case (int)WorkID.WORK_MOVE: StartWork_Move(dwParam); break;
|
||||
case (int)WorkID.WORK_POLICYACTION: StartWork_PolicyAction(dwParam); break;
|
||||
case (int)WorkID.WORK_POLICYACTION: StartWork_PolicyAction(cmd_Object_Start_Play_Action); break;
|
||||
}
|
||||
|
||||
// if (iWorkID != WORK_MOVE) m_iPassiveMove = 0;
|
||||
@@ -1320,18 +1373,17 @@ public class CECNPC : CECObject
|
||||
}*/
|
||||
}
|
||||
|
||||
public void StartWork_PolicyAction(uint dwParam)
|
||||
public void StartWork_PolicyAction(cmd_object_start_play_action cmd_Object_Start_Play_Action)
|
||||
{
|
||||
/* if (m_pPolicyAction == null)
|
||||
m_pPolicyAction = new CECPolicyAction();
|
||||
/* if (m_pPolicyAction == null)
|
||||
m_pPolicyAction = new CECPolicyAction();
|
||||
|
||||
// Trong C++: m_pPolicyAction->Init((const S2C::cmd_object_start_play_action *)dwParam);
|
||||
// Sang C#: dwParam không thể cast trực tiếp. Bạn sẽ cần truyền object phù hợp vào.
|
||||
m_pPolicyAction.Init((S2C.cmd_object_start_play_action)dwParam);
|
||||
m_pPolicyAction.Tick(0);
|
||||
m_nPolicyActionIntervalTimer = 0;
|
||||
|
||||
CheckStartPolicyAction();*/
|
||||
m_pPolicyAction.Init((cmd_object_start_play_action)cmd_Object_Start_Play_Action);
|
||||
m_pPolicyAction.Tick(0);
|
||||
m_nPolicyActionIntervalTimer = 0;
|
||||
|
||||
CheckStartPolicyAction();*/
|
||||
}
|
||||
|
||||
public bool ShouldPlayNewActionFor(int iMoveMode)
|
||||
|
||||
@@ -55,6 +55,13 @@ public class CECNPCModelDefaultPolicy
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public override void StopChannelAction()
|
||||
{
|
||||
if (m_pNPCModel != null)
|
||||
{
|
||||
m_pNPCModel.StopChannelAction(0, true);
|
||||
}
|
||||
}
|
||||
public override bool GetCHAABB(ref A3DAABB aabb)
|
||||
{
|
||||
|
||||
@@ -172,9 +179,6 @@ public class CECNPCModelDefaultPolicy
|
||||
}
|
||||
else
|
||||
{
|
||||
if (iAction == (int)NPCActionIndex.ACT_DIE || iAction == (int)NPCActionIndex.ACT_NPC_DIE)
|
||||
{
|
||||
}
|
||||
if (_npcVisual.isDebug)
|
||||
{
|
||||
BMLogger.LogError("CECNPCModelDefaultPolicy::PlayModelAction iAction :" + iAction);
|
||||
|
||||
@@ -14,6 +14,6 @@ namespace BrewMonster
|
||||
public abstract void ClearComActFlag(bool bSignalCurrent);
|
||||
public abstract bool PlayAttackAction(int nAttackSpeed, CECAttackEvent attackevent);
|
||||
public abstract bool GetCHAABB(ref A3DAABB ab);
|
||||
|
||||
public abstract void StopChannelAction();
|
||||
}
|
||||
}
|
||||
@@ -1801,7 +1801,17 @@ namespace CSNetwork.GPDataType
|
||||
}
|
||||
|
||||
};
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
|
||||
public struct cmd_object_start_play_action
|
||||
{
|
||||
public int id;
|
||||
public int play_times;
|
||||
public int action_last_time;
|
||||
public int interval_time;
|
||||
public uint name_length;
|
||||
public char[] action_name;
|
||||
}
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct cmd_change_curr_title_re
|
||||
{
|
||||
@@ -1824,7 +1834,7 @@ namespace CSNetwork.GPDataType
|
||||
// In C++, placeholder is byte. It used to first byte of a byte[] data
|
||||
// but in C# we need to define it as byte[] to hold the whole data.
|
||||
//public byte placeholder; // Task data ...
|
||||
public byte[] placeholder; // Task data ...
|
||||
public byte[] placeholder; // Task data ...
|
||||
}
|
||||
|
||||
// PLAYER_EXT_PROP_BASE
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using CSNetwork.GPDataType;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -8,6 +9,43 @@ namespace BrewMonster
|
||||
{
|
||||
public class CECPolicyAction
|
||||
{
|
||||
public void Init(cmd_object_start_play_action pCmd)
|
||||
{
|
||||
// TODO: CECPolicyAction convert
|
||||
// Çå³ýÒÑÓÐÊý¾Ý
|
||||
/* Reset();
|
||||
|
||||
// ÉèÖÃÐÒéÊý¾Ý
|
||||
m_playTimes = pCmd->play_times;
|
||||
m_actionTime = pCmd->action_last_time;
|
||||
m_intervalTime = pCmd->interval_time;
|
||||
if (pCmd->name_length && pCmd->action_name[0])
|
||||
m_actionName = AString(pCmd->action_name, pCmd->name_length);
|
||||
|
||||
// ÑéÖ¤ÐÒéÄÚÈÝ
|
||||
ASSERT(m_actionTime >= 0); // ÔÊÐí²¥·Å¶¯×÷ʱ¼äΪ0
|
||||
ASSERT(m_intervalTime >= 0); // ÔÊÐí¶¯×÷²¥·Å¼ä¸ôʱ¼äΪ0
|
||||
ASSERT(m_actionTime > 0 || m_intervalTime > 0); // ²»ÔÊÐí¶¯×÷²¥·Åʱ¼äºÍ¶¯×÷²¥·Å¼ä¸ôͬʱΪ0
|
||||
ASSERT(m_actionTime == 0 || m_actionTime > 0 && !m_actionName.IsEmpty()); // ²»ÔÊÐí²¥·Å¶¯×÷ʱµ«¶¯×÷Ãû³ÆÎª¿Õ
|
||||
ASSERT(m_playTimes > 0); // ²»ÔÊÐí²¥·Å´ÎÊý·ÇÕý
|
||||
|
||||
if (m_playTimes > 0 && m_actionTime >= 0 && m_intervalTime >= 0)
|
||||
m_timeLength = m_playTimes * m_actionTime + (m_playTimes - 1) * m_intervalTime;
|
||||
|
||||
// ³õʼ»¯×´Ì¬±äÁ¿
|
||||
m_validPolicy = true;
|
||||
if (m_actionTime < 0 || m_intervalTime < 0 || m_actionTime == 0 && m_intervalTime == 0 ||
|
||||
m_playTimes <= 0)
|
||||
{
|
||||
m_validPolicy = false;
|
||||
}
|
||||
|
||||
m_inPolicy = (m_validPolicy && m_timeLength > 0);
|
||||
m_inPlay = (m_inPolicy && m_playTimes > 0 && m_actionTime > 0);
|
||||
m_policyTimer = 0;
|
||||
m_playedTimes = 0;
|
||||
m_playTimer = 0;
|
||||
m_internalTimer = 0;*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,3 +167,6 @@ namespace BrewMonster
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -165,3 +165,6 @@ namespace BrewMonster
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -104,3 +104,6 @@ namespace BrewMonster
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@ namespace BrewMonster
|
||||
{
|
||||
if (pSkill != null)
|
||||
{
|
||||
BMLogger.Log("HoangDev: QuickBar Set Skill Icon: " + (uint)pSkill.GetSkillID() + " : " + ElementSkill.GetIcon((uint)pSkill.GetSkillID()));
|
||||
//BMLogger.Log("HoangDev: QuickBar Set Skill Icon: " + (uint)pSkill.GetSkillID() + " : " + ElementSkill.GetIcon((uint)pSkill.GetSkillID()));
|
||||
var nameskill = ElementSkill.GetIcon((uint)pSkill.GetSkillID());
|
||||
Sprite[] sprites = Resources.LoadAll<Sprite>("iconlist_skill_multisprite");
|
||||
pCell.SetSkillImage(sprites.FirstOrDefault(s => s.name == nameskill));
|
||||
|
||||
@@ -1966,7 +1966,6 @@ namespace BrewMonster
|
||||
m_bMelee = false;
|
||||
//
|
||||
// // if there is an attack event currently, we should let it fire now.
|
||||
BMLogger.LogError("HoangDev: OnMsgHstStopAttack " + gameObject.name);
|
||||
ClearComActFlagAllRankNodes(true);
|
||||
|
||||
cmd_host_stop_attack pCmd = GPDataTypeHelper.FromBytes<cmd_host_stop_attack>((byte[])Msg.dwParam1);
|
||||
|
||||
+44
-17
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user