npc leave after die

This commit is contained in:
VDH
2025-10-16 10:53:05 +07:00
parent 36b17caa5a
commit 32e42d2db8
19 changed files with 667 additions and 101 deletions
+51 -41
View File
@@ -1,14 +1,16 @@
using BrewMonster;
using BrewMonster;
using BrewMonster.Network;
using CSNetwork;
using CSNetwork.Common;
using CSNetwork.GPDataType;
using CSNetwork.Protocols;
using CSNetwork.Protocols.RPCData;
using NUnit.Framework;
using PerfectWorld.Scripts.Managers;
using PerfectWorld.Scripts.Player;
using PerfectWorld.Scripts.Task;
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
@@ -45,6 +47,7 @@ public class CECHostPlayer : CECPlayer
int m_iJumpCount = 0;
bool m_bJumpInWater = false;
public A3DVECTOR3 m_vVelocity; // Velocity
List<CECObject> m_aTabSels = new List<CECObject>();
float playerSpeed = 5.0f;
float jumpHeight = 1.5f;
@@ -368,33 +371,33 @@ public class CECHostPlayer : CECPlayer
}
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.
/* 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);
}
}*/
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)
{
@@ -410,9 +413,9 @@ public class CECHostPlayer : CECPlayer
uint iSlotAmount = BitConverter.ToUInt32(data, 12);
byte byPackage = data[16];
byte bySlot = data[17];
Debug.Log($"[Inventory] PICKUP_ITEM: tid={tid}, expire_date={expire_date}, iAmount={iAmount}, iSlotAmount={iSlotAmount}, byPackage={byPackage}, bySlot={bySlot}");
// Notify pickupItem script about successful pickup
pickupItem pickupScript = pickupItem.Instance;
if (pickupScript != null)
@@ -560,13 +563,11 @@ public class CECHostPlayer : CECPlayer
{
case CommandID.OWN_IVTR_DATA:
{
Debug.Log("[Inventory] OWN_IVTR_DATA received");
PerfectWorld.Scripts.Managers.EC_Inventory.LogInventoryPacket("OWN_IVTR_DATA", data, hostId);
break;
}
case CommandID.OWN_IVTR_DETAIL_DATA:
{
Debug.Log("[Inventory] OWN_IVTR_DETAIL_DATA received");
PerfectWorld.Scripts.Managers.EC_Inventory.LogInventoryPacket("OWN_IVTR_DETAIL_DATA", data, hostId);
// Parse and store
if (data != null && data.Length >= 6)
@@ -604,13 +605,13 @@ public class CECHostPlayer : CECPlayer
// Message MSG_HST_SELTARGET handler
void OnMsgHstSelTarget(ECMSG Msg)
{
if (Convert.ToInt32(Msg.dwParam2) == CommandID.SELECT_TARGET)
{
if (Convert.ToInt32(Msg.dwParam2) == CommandID.SELECT_TARGET)
{
var data = (byte[])Msg.dwParam1;
cmd_select_target pCmd = GPDataTypeHelper.FromBytes<cmd_select_target>(data);
m_idSelTarget = pCmd.idTarget;
m_idUCSelTarget = 0;
}
cmd_select_target pCmd = GPDataTypeHelper.FromBytes<cmd_select_target>(data);
m_idSelTarget = pCmd.idTarget;
m_idUCSelTarget = 0;
}
else if (Convert.ToInt32(Msg.dwParam2) == CommandID.UNSELECT)
{
m_idSelTarget = 0;
@@ -648,7 +649,6 @@ public class CECHostPlayer : CECPlayer
transform.position = pos;
SetModelHostPlayer();
m_dwResFlags = (uint)PlayerResourcesReadyFlag.RESFG_ALL;
Debug.LogError("Pos Character = " + pos);
joystick = FindAnyObjectByType<Joystick>();
EventBus.Subscribe<JoystickRealeaseEvent>(JoystickRelease);
EventBus.Subscribe<JoystickPressEvent>(JoystickStartDrag);
@@ -1051,7 +1051,17 @@ public class CECHostPlayer : CECPlayer
return false;
}
public void RemoveObjectFromTabSels(CECObject pObject)
{
for (int i = 0; i < m_aTabSels.Count; i++)
{
if (m_aTabSels[i] == pObject)
{
m_aTabSels.RemoveAt(i);
break;
}
}
}
public bool CanTouchTarget(A3DVECTOR3 vTargetPos, float fTargetRad, int iReason, float fMaxCut = 1.0f)
{
A3DVECTOR3 vector = new A3DVECTOR3(gameObject.transform.position.x, gameObject.transform.position.y, gameObject.transform.position.z);
@@ -1091,7 +1101,7 @@ public class CECHostPlayer : CECPlayer
public float GetFlySpeed() { return m_ExtProps.mv.flight_speed; }
public float GetSwimSpeed() { return m_ExtProps.mv.swim_speed; }
bool SelectTarget(int idTarget)
public bool SelectTarget(int idTarget)
{
bool bRet = false;
bool canDo = CanDo(ActionCanDo.CANDO_CHANGESELECT);
@@ -1476,7 +1486,7 @@ public struct GNDINFO
// Behavior id used by CanDo()
public static class ActionCanDo
{
{
public const int CANDO_SITDOWN = 0,
CANDO_MOVETO = 1,
CANDO_MELEE = 2,
+1 -1
View File
@@ -35,7 +35,7 @@ public class CharacterItemUI : MonoBehaviour
nameCharacter.text = roleName;
}
void OnClickBtn()
public void OnClickBtn()
{
onClick?.Invoke(dataItem);
}
+22 -9
View File
@@ -7,17 +7,30 @@ using BrewMonster;
namespace BrewMonster.UI
{
public class SelecScreenCharacter : MonoBehaviour
{
[SerializeField] private GameObject characterItemPrefab;
[SerializeField] private RectTransform parentItems;
public void InitScreen(List<RoleInfo> roleInfos, Action<RoleInfo> OnClickItemChar)
{
foreach(RoleInfo info in roleInfos)
[SerializeField] private GameObject characterItemPrefab;
[SerializeField] private RectTransform parentItems;
public void InitScreen(List<RoleInfo> roleInfos, Action<RoleInfo> OnClickItemChar)
{
CharacterItemUI item = Instantiate(characterItemPrefab, parentItems).GetComponent<CharacterItemUI>();
item.InitItem(info, OnClickItemChar);
#if UNITY_EDITOR
int count = roleInfos.Count;
#endif
foreach (RoleInfo info in roleInfos)
{
CharacterItemUI item = Instantiate(characterItemPrefab, parentItems).GetComponent<CharacterItemUI>();
item.InitItem(info, OnClickItemChar);
#if UNITY_EDITOR
count--;
if (count <= 0)
{
item.OnClickBtn();
}
#endif
}
}
}
}
}