else player and npc

This commit is contained in:
VDH
2025-10-09 15:31:53 +07:00
parent 7c5652ec2e
commit 6a0125be95
18 changed files with 478 additions and 150 deletions
@@ -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())
+75 -75
View File
@@ -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()
{
+224
View File
@@ -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}
+30
View File
@@ -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[];
+1 -1
View File
@@ -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();
+1 -2
View File
@@ -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
{