else player and npc
This commit is contained in:
@@ -108,7 +108,7 @@ public class CECNPCMan : CECObject, IMsgHandler
|
||||
if (pTarget.IsPetNPC() && pTarget.GetMasterID() == pHost.GetCharacterID())
|
||||
{
|
||||
// Pet của mình bị đánh → hiển thị damage
|
||||
pTarget.Damaged(nDamage,(uint) dwModifier);
|
||||
//pTarget.Damaged(nDamage,(uint) dwModifier);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using TMPro;
|
||||
using DG.Tweening;
|
||||
|
||||
public class DamageTextPool : MonoBehaviour
|
||||
{
|
||||
public static DamageTextPool Instance { get; private set; }
|
||||
|
||||
[SerializeField] private GameObject textPrefab;
|
||||
[SerializeField] private int poolSize = 50;
|
||||
private Queue<TextMeshPro> _pool = new Queue<TextMeshPro>();
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (Instance != null)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
return;
|
||||
}
|
||||
Instance = this;
|
||||
InitializePool();
|
||||
}
|
||||
|
||||
private void InitializePool()
|
||||
{
|
||||
for (int i = 0; i < poolSize; i++)
|
||||
{
|
||||
var obj = Instantiate(textPrefab, transform);
|
||||
var tmp = obj.GetComponent<TextMeshPro>();
|
||||
obj.SetActive(false);
|
||||
_pool.Enqueue(tmp);
|
||||
}
|
||||
}
|
||||
|
||||
public void Show(Vector3 worldPos, int value, DamageType type = DamageType.Normal)
|
||||
{
|
||||
if (_pool.Count == 0)
|
||||
InitializePool(); // mở rộng nếu thiếu
|
||||
|
||||
var tmp = _pool.Dequeue();
|
||||
tmp.gameObject.SetActive(true);
|
||||
|
||||
tmp.text = type switch
|
||||
{
|
||||
DamageType.Critical => $"CRIT -{value}",
|
||||
DamageType.Heal => $"+{value}",
|
||||
DamageType.Miss => "MISS",
|
||||
DamageType.Immune => "IMMUNE",
|
||||
_ => $"-{value}"
|
||||
};
|
||||
|
||||
tmp.color = type switch
|
||||
{
|
||||
DamageType.Critical => Color.yellow,
|
||||
DamageType.Heal => Color.green,
|
||||
DamageType.Miss => Color.gray,
|
||||
DamageType.Immune => Color.white,
|
||||
_ => Color.red
|
||||
};
|
||||
|
||||
tmp.transform.position = worldPos + Vector3.up * 2f;
|
||||
tmp.transform.localScale = Vector3.one;
|
||||
|
||||
// Animation bay lên rồi fade ra
|
||||
var seq = DOTween.Sequence();
|
||||
seq.Append(tmp.transform.DOMoveY(worldPos.y + 3f, 1f).SetEase(Ease.OutQuad));
|
||||
seq.Join(tmp.DOFade(0, 1f));
|
||||
seq.OnComplete(() =>
|
||||
{
|
||||
tmp.alpha = 1;
|
||||
tmp.gameObject.SetActive(false);
|
||||
_pool.Enqueue(tmp);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Các loại damage để đổi màu & text
|
||||
/// </summary>
|
||||
public enum DamageType
|
||||
{
|
||||
Normal,
|
||||
Critical,
|
||||
Heal,
|
||||
Miss,
|
||||
Immune
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c9f785775e0231e488e0cbe93016b31a
|
||||
@@ -148,7 +148,7 @@ public int GetIdleTime() { return m_iIdleTime; }
|
||||
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_pHost.PlayAction((int)CECPlayer.PLAYER_ACTION_TYPE.ACT_ATTACK_1 + Random.Range(0, 3), true, 200, false);
|
||||
|
||||
m_idTarget = m_pHost.m_idSelTarget;
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ public abstract class CECTracedObject
|
||||
}
|
||||
else
|
||||
{
|
||||
EC_Player pPlayer = pObject.GetComponent<CECHostPlayer>();
|
||||
CECPlayer pPlayer = pObject.GetComponent<CECHostPlayer>();
|
||||
fTouchRadius = pPlayer.GetTouchRadius();
|
||||
}
|
||||
return m_pHost.CanTouchTarget(vHostPos, vTargetPos, fTouchRadius, iTouchReason, fMaxCut);
|
||||
@@ -384,7 +384,7 @@ public class CECTracedPlayer : CECTracedObject
|
||||
{
|
||||
return true;
|
||||
}
|
||||
EC_Player pPlayer = GetTargetObject() as EC_Player;
|
||||
CECPlayer pPlayer = GetTargetObject() as CECPlayer;
|
||||
if (pPlayer.IsElsePlayer())
|
||||
{
|
||||
if (pPlayer.IsDead())
|
||||
@@ -612,10 +612,10 @@ public class CECHPWorkTrace : CECHPWork
|
||||
{
|
||||
// Continue tracing object
|
||||
float fDeltaTime = dwDeltaTime /** 0.001f*/;
|
||||
if (m_pHost.m_iMoveEnv == EC_Player.Move_environment.MOVEENV_GROUND)
|
||||
if (m_pHost.m_iMoveEnv == CECPlayer.Move_environment.MOVEENV_GROUND)
|
||||
{
|
||||
// Play appropriate actions
|
||||
if (!m_pHost.IsJumping() && !m_pHost.IsPlayingAction((int)EC_Player.PLAYER_ACTION_TYPE.ACT_TRICK_RUN) &&
|
||||
if (!m_pHost.IsJumping() && !m_pHost.IsPlayingAction((int)CECPlayer.PLAYER_ACTION_TYPE.ACT_TRICK_RUN) &&
|
||||
m_pHost.m_iMoveMode != (int)MoveMode.MOVE_SLIDE)
|
||||
{
|
||||
int iAction = m_pHost.GetMoveStandAction(true);
|
||||
@@ -807,7 +807,7 @@ public class CECHPWorkTrace : CECHPWork
|
||||
|
||||
if (m_pHost.m_iMoveMode == (int)MoveMode.MOVE_SLIDE)
|
||||
{
|
||||
m_pHost.PlayAction((int)EC_Player.PLAYER_ACTION_TYPE.ACT_JUMP_LOOP, false, 200, false);
|
||||
m_pHost.PlayAction((int)CECPlayer.PLAYER_ACTION_TYPE.ACT_JUMP_LOOP, false, 200, false);
|
||||
|
||||
// This will cause stop moming after we slide down.
|
||||
A3DVECTOR3 vDir = vTargetPos - vCurPos;
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
using BrewMonster;
|
||||
using CSNetwork;
|
||||
using CSNetwork.GPDataType;
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using UnityEngine;
|
||||
|
||||
namespace PerfectWorld.Scripts.Managers
|
||||
{
|
||||
namespace BrewMonster.Managers
|
||||
{
|
||||
public class EC_HostPlayer : IMsgHandler
|
||||
{
|
||||
public int HandlerId => (int)MANAGER_INDEX.MAN_PLAYER;
|
||||
public bool ProcessMessage(ECMSG Msg)
|
||||
{
|
||||
switch ((int)Msg.dwMsg)
|
||||
{
|
||||
case int value when value == EC_MsgDef.MSG_HST_IVTRINFO:
|
||||
{
|
||||
OnMsgHstIvtrInfo(Msg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public void OnMsgHstIvtrInfo(ECMSG Msg)
|
||||
{
|
||||
switch (Convert.ToInt32(Msg.dwParam2))
|
||||
{
|
||||
case CommandID.OWN_IVTR_DATA:
|
||||
{
|
||||
Debug.Log("Chay OWN_IVTR_DATA");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eece34ce0cfd6bc409982ce9b90b263b
|
||||
@@ -482,19 +482,6 @@ namespace PerfectWorld.Scripts.Managers
|
||||
}
|
||||
|
||||
// Get a player (may be host or else player) by id
|
||||
public EC_Player GetPlayer(int cid, uint dwBornStamp = 0)
|
||||
{
|
||||
CECHostPlayer pHost = GetHostPlayer();
|
||||
if (pHost && pHost.GetCharacterID() == cid)
|
||||
return pHost;
|
||||
else
|
||||
return GetElsePlayer(cid, dwBornStamp);
|
||||
}
|
||||
|
||||
public CECHostPlayer GetHostPlayer()
|
||||
{
|
||||
return GameController.Instance.GetHostPlayer();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -185,7 +185,7 @@ public class CECObject : MonoBehaviour
|
||||
return 0;
|
||||
|
||||
if (pObject.IsPlayer())
|
||||
return ((EC_Player)pObject).GetCharacterID();
|
||||
return ((CECPlayer)pObject).GetCharacterID();
|
||||
else if (pObject.IsNPC())
|
||||
return ((CECNPC)pObject).GetNPCID();
|
||||
//else if (pObject.IsMatter())
|
||||
|
||||
@@ -157,6 +157,63 @@ public class CECNPC : CECObject
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public void Damaged(int iDamage, uint dwModifier = 0)
|
||||
{
|
||||
// == Trường hợp 1: damage là -1 hoặc -2 (chỉ để hiển thị hiệu ứng)
|
||||
if (iDamage == -1 || iDamage == -2)
|
||||
{
|
||||
// Nếu -1 thì chơi animation bị thương
|
||||
if (iDamage == -1)
|
||||
PlayModelAction((int)NPCActionIndex. ACT_WOUNDED);
|
||||
DamageTextPool.Instance.Show(transform.position, 0);
|
||||
// Xét các kiểu modifier
|
||||
/* if ((dwModifier & CECAttackEvent.MOD_IMMUNE) != 0 && !IsImmuneDisable())
|
||||
BubbleText(BUBBLE_IMMUNE, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_NULLITY) != 0)
|
||||
BubbleText(BUBBLE_INVALIDHIT, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_ENCHANT_FAILED) != 0)
|
||||
BubbleText(BUBBLE_LOSE, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_SUCCESS) != 0)
|
||||
BubbleText(BUBBLE_SUCCESS, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_DODGE_DEBUFF) != 0)
|
||||
BubbleText(BUBBLE_DODGE_DEBUFF, 0);*/
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// == Trường hợp 2: có damage thật
|
||||
/* bool bDeadlyStrike = (dwModifier & CECAttackEvent.MOD_CRITICAL_STRIKE) != 0;
|
||||
bool bRetort = (dwModifier & CECAttackEvent.MOD_RETORT) != 0;*/
|
||||
|
||||
if (iDamage > 0)
|
||||
{
|
||||
PlayModelAction((int)NPCActionIndex.ACT_WOUNDED);
|
||||
DamageTextPool.Instance.Show(transform.position, iDamage);
|
||||
/* int p1 = 0;
|
||||
if (bDeadlyStrike)
|
||||
p1 |= 0x0001;
|
||||
else if (bRetort)
|
||||
p1 |= 0x0002;
|
||||
|
||||
if ((dwModifier & CECAttackEvent.MOD_REBOUND) != 0)
|
||||
BubbleText(BUBBLE_REBOUND, (uint)iDamage);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_BEAT_BACK) != 0)
|
||||
BubbleText(BUBBLE_BEAT_BACK, (uint)iDamage);
|
||||
else
|
||||
BubbleText(BUBBLE_DAMAGE, (uint)iDamage, p1);*/
|
||||
}
|
||||
/* else if ((dwModifier & CECAttackEvent.MOD_IMMUNE) != 0 && !IsImmuneDisable())
|
||||
BubbleText(BUBBLE_IMMUNE, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_NULLITY) != 0)
|
||||
BubbleText(BUBBLE_INVALIDHIT, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_ENCHANT_FAILED) != 0)
|
||||
BubbleText(BUBBLE_LOSE, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_SUCCESS) != 0)
|
||||
BubbleText(BUBBLE_SUCCESS, 0);
|
||||
else
|
||||
BubbleText(BUBBLE_HITMISSED, 0);*/
|
||||
}
|
||||
}
|
||||
|
||||
private void OnMsgNPCAtkResult(ECMSG msg)
|
||||
{
|
||||
@@ -347,7 +404,10 @@ public class CECNPC : CECObject
|
||||
if (iWorkID == (int)WorkID.WORK_MOVE)
|
||||
m_iPassiveMove = 0;
|
||||
}
|
||||
|
||||
public bool IsDead()
|
||||
{
|
||||
return (m_dwStates & PlayerNPCState.GP_STATE_CORPSE) != 0;
|
||||
}
|
||||
public static bool InitStaticRes()
|
||||
{
|
||||
m_ActionNames = new CECStringTab();
|
||||
@@ -853,68 +913,8 @@ public class CECNPC : CECObject
|
||||
return (int)NPCActionIndex.ACT_NPC_WALK;
|
||||
}
|
||||
}
|
||||
public void Damaged(int iDamage, uint dwModifier = 0)
|
||||
{
|
||||
// == Trường hợp 1: damage là -1 hoặc -2 (chỉ để hiển thị hiệu ứng)
|
||||
if (iDamage == -1 || iDamage == -2)
|
||||
{
|
||||
// Nếu -1 thì chơi animation bị thương
|
||||
if (iDamage == -1)
|
||||
PlayModelAction((int)NPCActionIndex.ACT_WOUNDED);
|
||||
|
||||
// Xét các kiểu modifier
|
||||
/* if ((dwModifier & CECAttackEvent.MOD_IMMUNE) != 0 && !IsImmuneDisable())
|
||||
BubbleText(BUBBLE_IMMUNE, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_NULLITY) != 0)
|
||||
BubbleText(BUBBLE_INVALIDHIT, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_ENCHANT_FAILED) != 0)
|
||||
BubbleText(BUBBLE_LOSE, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_SUCCESS) != 0)
|
||||
BubbleText(BUBBLE_SUCCESS, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_DODGE_DEBUFF) != 0)
|
||||
BubbleText(BUBBLE_DODGE_DEBUFF, 0);*/
|
||||
}
|
||||
else
|
||||
{
|
||||
// == Trường hợp 2: có damage thật
|
||||
/* bool bDeadlyStrike = (dwModifier & CECAttackEvent.MOD_CRITICAL_STRIKE) != 0;
|
||||
bool bRetort = (dwModifier & CECAttackEvent.MOD_RETORT) != 0;*/
|
||||
|
||||
if (iDamage > 0)
|
||||
{
|
||||
PlayModelAction((int)NPCActionIndex.ACT_WOUNDED);
|
||||
|
||||
/* int p1 = 0;
|
||||
if (bDeadlyStrike)
|
||||
p1 |= 0x0001;
|
||||
else if (bRetort)
|
||||
p1 |= 0x0002;*/
|
||||
|
||||
/* if ((dwModifier & CECAttackEvent.MOD_REBOUND) != 0)
|
||||
BubbleText(BUBBLE_REBOUND, (uint)iDamage);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_BEAT_BACK) != 0)
|
||||
BubbleText(BUBBLE_BEAT_BACK, (uint)iDamage);
|
||||
else
|
||||
BubbleText(BUBBLE_DAMAGE, (uint)iDamage, p1);*/
|
||||
}
|
||||
/* else if ((dwModifier & CECAttackEvent.MOD_IMMUNE) != 0 && !IsImmuneDisable())
|
||||
BubbleText(BUBBLE_IMMUNE, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_NULLITY) != 0)
|
||||
BubbleText(BUBBLE_INVALIDHIT, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_ENCHANT_FAILED) != 0)
|
||||
BubbleText(BUBBLE_LOSE, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_SUCCESS) != 0)
|
||||
BubbleText(BUBBLE_SUCCESS, 0);
|
||||
else
|
||||
BubbleText(BUBBLE_HITMISSED, 0);*/
|
||||
}
|
||||
}
|
||||
|
||||
public int GetMasterID() { return m_idMaster; }
|
||||
public bool IsMonsterOrPet() { return IsMonsterNPC() || IsPetNPC(); }
|
||||
public bool IsMonsterNPC() { return (int)ClassID.OCID_MONSTER == m_iCID; }
|
||||
public bool IsPetNPC() { return (int)ClassID.OCID_PET == m_iCID; }
|
||||
public bool IsDead() { return (m_dwStates & PlayerNPCState.GP_STATE_CORPSE) != 0; }
|
||||
public bool IsPetNPC() { return (int)Class_ID.OCID_PET == m_iCID; }
|
||||
public void PlayMoveAction(int iMoveMode)
|
||||
{
|
||||
BrewMonster.BMLogger.LogError($"HoangDev: PlayMoveAction {iMoveMode}");
|
||||
@@ -984,8 +984,8 @@ public class CECNPC : CECObject
|
||||
|
||||
// Get NPC's real position on server
|
||||
public A3DVECTOR3 GetServerPos()
|
||||
{
|
||||
return EC_Utility.ToA3DVECTOR3(m_vServerPos);
|
||||
{
|
||||
return EC_Utility.ToA3DVECTOR3(m_vServerPos);
|
||||
}
|
||||
|
||||
// Get master id
|
||||
@@ -996,22 +996,22 @@ public class CECNPC : CECObject
|
||||
public virtual bool IsInBattleDefenderCamp() { return false; }
|
||||
// Get role in battle
|
||||
public virtual int GetRoleInBattle() { return 0; }
|
||||
public int GetOwnerFaction(){ return m_idOwnerFaction; }
|
||||
public int GetOwnerFaction() { return m_idOwnerFaction; }
|
||||
|
||||
public bool IsFactionPVPMineCar()
|
||||
{
|
||||
//if (const MONSTER_ESSENCE* pMonsterEssence = GetMonsterEssence()){
|
||||
// return (pMonsterEssence.faction & (1 << 19)) != 0;
|
||||
//}
|
||||
return false;
|
||||
{
|
||||
//if (const MONSTER_ESSENCE* pMonsterEssence = GetMonsterEssence()){
|
||||
// return (pMonsterEssence.faction & (1 << 19)) != 0;
|
||||
//}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool IsFactionPVPMineBase()
|
||||
{
|
||||
//if (const MONSTER_ESSENCE *pMonsterEssence = GetMonsterEssence()){
|
||||
// return (pMonsterEssence->faction & (1 << 20)) != 0;
|
||||
//}
|
||||
return false;
|
||||
{
|
||||
//if (const MONSTER_ESSENCE *pMonsterEssence = GetMonsterEssence()){
|
||||
// return (pMonsterEssence->faction & (1 << 20)) != 0;
|
||||
//}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get NPC ID
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Collections.Generic;
|
||||
using System.Numerics;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using Unity.VisualScripting.Antlr3.Runtime.Tree;
|
||||
|
||||
namespace CSNetwork.GPDataType
|
||||
{
|
||||
@@ -36,6 +37,13 @@ namespace CSNetwork.GPDataType
|
||||
GP_MOVE_WATER = 0x80,
|
||||
GP_MOVE_ENVMASK = 0xc0,
|
||||
};
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct cmd_be_hurt
|
||||
{
|
||||
public int attacker_id;
|
||||
public int damage;
|
||||
public byte flag; // 1, attacker ±ä³ÈÃû
|
||||
};
|
||||
|
||||
public static class CommandID // Command ID
|
||||
{
|
||||
@@ -537,13 +545,19 @@ namespace CSNetwork.GPDataType
|
||||
}
|
||||
};
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct cmd_hurt_result
|
||||
{
|
||||
public int target_id;
|
||||
public int damage;
|
||||
};
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct cmd_enchant_result
|
||||
{
|
||||
public int caster;
|
||||
public int target;
|
||||
public int skill;
|
||||
public char level;
|
||||
public char orange_name;
|
||||
public byte level;
|
||||
public byte orange_name;
|
||||
public int attack_flag;
|
||||
public byte section;
|
||||
};
|
||||
@@ -555,7 +569,7 @@ namespace CSNetwork.GPDataType
|
||||
public int skill_id;
|
||||
public int damage;
|
||||
public int attack_flag; //±ê¼Ç¸Ã¹¥»÷ÊÇ·ñÓй¥»÷ÓÅ»¯·ûºÍ·ÀÓùÓÅ»¯·ûºÍÖØ»÷·¢Éú
|
||||
public char speed; //¹¥»÷ËÙ¶È speed * 50 ms
|
||||
public byte speed; //¹¥»÷ËÙ¶È speed * 50 ms
|
||||
public byte section;
|
||||
};
|
||||
// Gender
|
||||
@@ -610,7 +624,7 @@ namespace CSNetwork.GPDataType
|
||||
public int target_id;
|
||||
public int damage;
|
||||
public int attack_flag; //±ê¼Ç¸Ã¹¥»÷ÊÇ·ñÓй¥»÷ÓÅ»¯·ûºÍ·ÀÓùÓÅ»¯·ûºÍÖØ»÷·¢Éú
|
||||
public char speed; //¹¥»÷ËÙ¶È speed * 50 ms
|
||||
public byte speed; //¹¥»÷ËÙ¶È speed * 50 ms
|
||||
};
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct A3DVECTOR3
|
||||
|
||||
@@ -419,12 +419,12 @@ namespace CSNetwork
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_HURTRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
|
||||
break;
|
||||
case CommandID.OBJECT_ATTACK_RESULT:
|
||||
_logger.Info($"TASK_DATA: " + pCmdHeader);
|
||||
_logger.Info($"OBJECT_ATTACK_RESULT: " + pCmdHeader);
|
||||
int id = GPDataTypeHelper.FromBytes<int>(pDataBuf);
|
||||
if (ISPLAYERID(id))
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TASKDATA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, dwDataSize);
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERATKRESULT, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
|
||||
else if (ISNPCID(id))
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TASKDATA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, dwDataSize);
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCATKRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
|
||||
break;
|
||||
case CommandID.ERROR_MESSAGE:
|
||||
_logger.Info($"### GameDataSend: ERROR_MESSAGE: {BitConverter.ToInt32(pDataBuf, 0)}");
|
||||
|
||||
@@ -74,8 +74,8 @@ namespace BrewMonster
|
||||
if (!(pObject = EC_ManPlayer.GetPlayer(idObject)))
|
||||
return null;
|
||||
|
||||
if ((iAliveFlag == 1 && (pObject as EC_Player).IsDead()) ||
|
||||
(iAliveFlag == 2 && !(pObject as EC_Player).IsDead()))
|
||||
if ((iAliveFlag == 1 && (pObject as CECPlayer).IsDead()) ||
|
||||
(iAliveFlag == 2 && !(pObject as CECPlayer).IsDead()))
|
||||
return null;
|
||||
}
|
||||
//else if (GPDataTypeHelper.ISMATTERID(idObject))
|
||||
|
||||
@@ -128,6 +128,32 @@ namespace PerfectWorld.Scripts.Player
|
||||
visual.InitHostPlayerEventDoneHandler();
|
||||
}
|
||||
}
|
||||
public bool ProcessMessage(ECMSG Msg)
|
||||
{
|
||||
switch (Msg.dwMsg)
|
||||
{
|
||||
case long value when value == EC_MsgDef. MSG_PM_PLAYERATKRESULT: OnMsgPlayerAtkResult(Msg); break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void OnMsgPlayerAtkResult(ECMSG Msg)
|
||||
{
|
||||
cmd_object_atk_result pCmd = (cmd_object_atk_result)Msg.dwParam1;
|
||||
|
||||
// Face to target
|
||||
TurnFaceTo(pCmd.target_id);
|
||||
|
||||
/* PlayAttackEffect(pCmd.target_id, 0, 0, -1, pCmd.attack_flag, pCmd.speed * 50);
|
||||
|
||||
if (!m_pEPWorkMan->FindWork(CECEPWorkMan::WT_NORMAL, CECEPWork::WORK_HACKOBJECT))
|
||||
{
|
||||
m_pEPWorkMan->StartNormalWork(new CECEPWorkMelee(m_pEPWorkMan, pCmd->target_id));
|
||||
}
|
||||
|
||||
// Enter fight state
|
||||
EnterFightState();*/
|
||||
}
|
||||
|
||||
void CalcPlayerAABB()
|
||||
{
|
||||
|
||||
@@ -11885,6 +11885,53 @@ Transform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 127793384}
|
||||
m_LocalEulerAnglesHint: {x: 22.094265, y: 53.346302, z: -7.076923}
|
||||
--- !u!1 &157741349
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 157741351}
|
||||
- component: {fileID: 157741350}
|
||||
m_Layer: 0
|
||||
m_Name: DamageTextManager
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &157741350
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 157741349}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: c9f785775e0231e488e0cbe93016b31a, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
textPrefab: {fileID: 1329996621}
|
||||
poolSize: 50
|
||||
--- !u!4 &157741351
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 157741349}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: 2.7755576e-17, w: 1}
|
||||
m_LocalPosition: {x: -769.91, y: 47.922, z: -258.54}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1329996622}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &158051892
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -104038,6 +104085,182 @@ Transform:
|
||||
- {fileID: 1116563098}
|
||||
m_Father: {fileID: 1492662512}
|
||||
m_LocalEulerAnglesHint: {x: -3.4098623, y: -32.42809, z: -6.723053}
|
||||
--- !u!1 &1329996621
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1329996622}
|
||||
- component: {fileID: 1329996624}
|
||||
- component: {fileID: 1329996623}
|
||||
m_Layer: 0
|
||||
m_Name: damageTextPrefab
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1329996622
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1329996621}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 157741351}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 20, y: 5}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1329996623
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1329996621}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text:
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 1
|
||||
m_fontSizeBase: 1
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_TextWrappingMode: 0
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 0
|
||||
m_ActiveFontFeatures: 6e72656b
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_EmojiFallbackSupport: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 0
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
_SortingLayer: 0
|
||||
_SortingLayerID: 0
|
||||
_SortingOrder: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_renderer: {fileID: 1329996624}
|
||||
m_maskType: 0
|
||||
--- !u!23 &1329996624
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1329996621}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &1330341667
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -165578,4 +165801,5 @@ SceneRoots:
|
||||
- {fileID: 960760104}
|
||||
- {fileID: 1801883899}
|
||||
- {fileID: 1755699698}
|
||||
- {fileID: 157741351}
|
||||
- {fileID: 96894795}
|
||||
|
||||
@@ -238,9 +238,39 @@ public class CECHostPlayer : CECPlayer
|
||||
case int value when value == EC_MsgDef.MSG_HST_PICKUPITEM:
|
||||
OnMsgHstPickupItem(Msg);
|
||||
break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_HURTRESULT: OnMsgHstHurtResult(Msg); break;
|
||||
}
|
||||
}
|
||||
private void OnMsgHstHurtResult(ECMSG Msg)
|
||||
{
|
||||
BMLogger.LogError("HoangDev : OnMsgHstHurtResult");
|
||||
int cmd = Convert.ToInt32(Msg.dwParam2);
|
||||
if (cmd == CommandID. BE_HURT)
|
||||
{
|
||||
cmd_be_hurt pCmd = (cmd_be_hurt)Msg.dwParam1;
|
||||
/* if (pCmd.damage!=0)
|
||||
Damaged(pCmd->damage);*/
|
||||
}
|
||||
else if (cmd == CommandID. HURT_RESULT)
|
||||
{
|
||||
cmd_hurt_result pCmd = (cmd_hurt_result)Msg.dwParam1;
|
||||
if (pCmd.target_id == m_PlayerInfo.cid)
|
||||
return; // Host himself will receive BE_HURT, so ignore this.
|
||||
|
||||
if (UnityGameSession.Instance.GameSession. ISPLAYERID(pCmd.target_id))
|
||||
{
|
||||
/*CECElsePlayer pTarget = m_pPlayerMan.GetElsePlayer(pCmd.target_id);
|
||||
if (pTarget)
|
||||
pTarget->Damaged(pCmd->damage);*/
|
||||
}
|
||||
else if (UnityGameSession.Instance.GameSession.ISNPCID(pCmd.target_id))
|
||||
{
|
||||
CECNPC pTarget = EC_ManMessageMono.Instance._CECNPCMan.GetNPC(pCmd.target_id);
|
||||
if (pTarget)
|
||||
pTarget.Damaged(pCmd.damage);
|
||||
}
|
||||
}
|
||||
}
|
||||
public void OnMsgHstPickupItem(in ECMSG Msg)
|
||||
{
|
||||
var data = Msg.dwParam1 as byte[];
|
||||
|
||||
@@ -88,7 +88,7 @@ public class CECHostMove
|
||||
float fSpeed = 0f;
|
||||
switch (m_pHost.GetMoveEnv())
|
||||
{
|
||||
case EC_Player.Move_environment.MOVEENV_AIR:
|
||||
case CECPlayer.Move_environment.MOVEENV_AIR:
|
||||
|
||||
iMoveMode |= (int)GPMoveMode.GP_MOVE_AIR;
|
||||
fSpeed = m_pHost.GetFlySpeed();
|
||||
|
||||
@@ -6,7 +6,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public abstract class EC_Player : CECObject
|
||||
public abstract class CECPlayer : CECObject
|
||||
{
|
||||
private static PLAYER_ACTION[] _default_actions;
|
||||
private static PLAYER_ACTION[] _turning_actions;
|
||||
@@ -383,7 +383,6 @@ public abstract class EC_Player : CECObject
|
||||
// Get move environment
|
||||
public int GetMoveEnv(){ return m_iMoveEnv; }
|
||||
// Get character ID
|
||||
public int GetCharacterID(){ return m_PlayerInfo.cid; }
|
||||
}
|
||||
public struct PlayActionEvent
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user