diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index 014b6da8c1..a912480e04 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -1,4 +1,4 @@ -using BrewMonster; +using BrewMonster; using BrewMonster.Assets.PerfectWorld.Scripts.Players; using BrewMonster.Managers; using BrewMonster.Network; @@ -125,6 +125,7 @@ namespace BrewMonster const int ID_SUMMONPLAYER_SKILL = 1824; private CECAutoTeam m_pAutoTeam; + private CECTeam m_pTeam; // Current team (null when not in team) // ====== Ground cast config ====== [Header("Ground Cast")] @@ -199,6 +200,16 @@ namespace BrewMonster { return m_pAutoTeam; } + + public override CECTeam GetTeam() + { + return m_pTeam; + } + + internal void SetTeam(CECTeam team) + { + m_pTeam = team; + } public EC_Inventory GetPack() { return m_pPack; @@ -588,6 +599,10 @@ namespace BrewMonster case int value when value == EC_MsgDef.MSG_PM_PLAYERFLY: OnMsgPlayerFly(Msg); break; case int value when value == EC_MsgDef.MSG_HST_EMBEDITEM: OnMsgHstEmbedItem(Msg); break; + case int value when value == EC_MsgDef.MSG_HST_JOINTEAM: OnMsgHstJoinTeam(Msg); break; + case int value when value == EC_MsgDef.MSG_HST_LEAVETEAM: OnMsgHstLeaveTeam(Msg); break; + case int value when value == EC_MsgDef.MSG_HST_NEWTEAMMEM: OnMsgHstNewTeamMem(Msg); break; + case int value when value == EC_MsgDef.MSG_HST_TEAMMEMBERDATA: OnMsgHstTeamMemberData(Msg); break; } @@ -611,6 +626,76 @@ namespace BrewMonster }*/ } + private void OnMsgHstJoinTeam(ECMSG Msg) + { + var data = (byte[])Msg.dwParam1; + if (data == null || data.Length < Marshal.SizeOf()) return; + var pCmd = GPDataTypeHelper.FromBytes(data); + var pTeamMan = CECGameRun.Instance?.GetTeamMan(); + if (pTeamMan == null) return; + var pTeam = pTeamMan.GetTeam(pCmd.idLeader); + if (pTeam == null) + pTeam = pTeamMan.CreateTeam(pCmd.idLeader); + if (pTeam == null) return; + if (pCmd.idLeader == m_PlayerInfo.cid) + pTeam.AddMember(pCmd.idLeader); + pTeam.SetPickupFlag(pCmd.wPickFlag); + SetTeam(pTeam); + NotifyUIUpdateTeam(); + } + + private void OnMsgHstLeaveTeam(ECMSG Msg) + { + var data = (byte[])Msg.dwParam1; + if (data == null || data.Length < Marshal.SizeOf()) return; + var pCmd = GPDataTypeHelper.FromBytes(data); + if (m_pTeam == null) return; + var pTeamMan = CECGameRun.Instance?.GetTeamMan(); + if (pTeamMan != null) + pTeamMan.ReleaseTeam(pCmd.idLeader); + SetTeam(null); + NotifyUIUpdateTeam(); + } + + private void OnMsgHstNewTeamMem(ECMSG Msg) + { + var data = (byte[])Msg.dwParam1; + if (data == null || data.Length < Marshal.SizeOf()) return; + var pCmd = GPDataTypeHelper.FromBytes(data); + if (m_pTeam == null) return; + int cid = pCmd.idMember; + m_pTeam.AddMember(cid); + m_pTeam.AddUnknownID(cid); + if (EC_ManMessageMono.Instance?.GetECManPlayer?.GetPlayer(cid, 0) == null && UnityGameSession.Instance != null) + UnityGameSession.c2s_CmdTeamMemberPos(1, new[] { cid }); + NotifyUIUpdateTeam(); + } + + private void OnMsgHstTeamMemberData(ECMSG Msg) + { + var data = (byte[])Msg.dwParam1; + if (data == null) return; + try + { + var (header, members) = GPDataTypeHelper.ParseTeamMemberData(data); + if (m_pTeam == null || header.idLeader != m_pTeam.GetLeaderID()) return; + m_pTeam.UpdateTeamData(header, members); + NotifyUIUpdateTeam(); + } + catch { } + } + + private void NotifyUIUpdateTeam() + { + try + { + var ui = EC_Game.GetGameRun()?.GetUIManager()?.GetInGameUIMan(); + if (ui is CECGameUIMan gui) + gui.UpdateTeam(false); + } + catch { } + } + private void OnMsgHstLearnSkill(ECMSG Msg) { BMLogger.LogError("OnMsgHstLearnSkill"); @@ -2725,6 +2810,7 @@ namespace BrewMonster isDataAwaitToReady = true; Vector3 pos = new Vector3(role.pos.x, role.pos.y, role.pos.z); string roleName = Encoding.Unicode.GetString(UnityGameSession.Instance.GetRoleInfo().name.ByteArray); + SetPlayerName(roleName); if (txtName != null) txtName.text = roleName; EventBus.Publish(new InfoHostPlayer(roleName)); playerTransform.position = pos;