From f9dbdc1c3cae3ad8e599c3871e216bbdde281d28 Mon Sep 17 00:00:00 2001 From: VuNgocHaiC7 Date: Thu, 19 Mar 2026 17:50:49 +0700 Subject: [PATCH] fix ui for dlg FriendList --- .../Scripts/Network/CSNetwork/GameSession.cs | 31 ++++++++---- .../Scripts/Network/UnityGameSession.cs | 6 +-- .../Scripts/UI/Dialogs/DlgFriendList.cs | 50 +++++++++++++++---- .../UI/friend/DlgFriendList.prefab | 2 + 4 files changed, 66 insertions(+), 23 deletions(-) diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs index ee7525407a..33c2d27d61 100644 --- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs +++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs @@ -721,8 +721,8 @@ namespace CSNetwork if (p.info?.name != null && p.info.name.Size > 0) friendName = System.Text.Encoding.Unicode.GetString(p.info.name.ToArray(), 0, p.info.name.Size); string msg = p.retcode == 0 - ? $"Add friend success: {friendName}" - : $"Add friend failed: {GetAddFriendRetcodeMessage(p.retcode)}"; + ? $"Thêm bạn thành công: {friendName}" + : $"Không thể thêm bạn do: {GetAddFriendRetcodeMessage(p.retcode)}"; if (p.retcode == 0) { Friend_GetList(); @@ -736,15 +736,24 @@ namespace CSNetwork { switch (retcode) { - case 0: return "Success"; - case 1: return "Player is offline"; - case 2: return "Request was refused"; - case 3: return "Timeout"; - case 4: return "No remaining space"; - case 5: return "Not found"; - case 6: return "Invalid parameter"; - case 7: return "Duplicate entry"; - case 8: return "Friend list has not been retrieved yet"; + //case 0: return "Success"; + //case 1: return "Player is offline"; + //case 2: return "Request was refused"; + //case 3: return "Timeout"; + //case 4: return "No remaining space"; + //case 5: return "Not found"; + //case 6: return "Invalid parameter"; + //case 7: return "Duplicate entry"; + //case 8: return "Friend list has not been retrieved yet"; + case 0: return "thành công"; + case 1: return "người chơi đang offline"; + case 2: return "yêu cầu bị từ chối"; + case 3: return "hết thời gian yêu cầu"; + case 4: return "không còn chỗ trống"; + case 5: return "không tìm thấy"; + case 6: return "tham số không hợp lệ"; + case 7: return "mục nhập trùng lặp"; + case 8: return "danh sách bạn bè chưa được tải về"; default: return $"retcode={retcode}"; } } diff --git a/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs b/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs index e2ddc41577..13cb2e5dc3 100644 --- a/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs +++ b/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs @@ -738,7 +738,7 @@ namespace BrewMonster.Network string name = string.IsNullOrEmpty(askerName) ? ("Player " + srcroleid) : askerName; CECUIManager.Instance?.ShowMessageBoxYesAndNo( title: "Friend Request", - message: $"{name} wants to add you as a friend.", + message: $"{name} muốn hảo hữu với bạn.", dlg: null, onClickedYes: () => Friend_AddResponse(xid, agree: true), onClickedNo: () => Friend_AddResponse(xid, agree: false)); @@ -747,7 +747,7 @@ namespace BrewMonster.Network private void OnAddFriendResultReceived(byte retcode, string message) { CECUIManager.Instance?.ShowMessageBoxYes( - title: retcode == 0 ? "Friend added" : "Add friend failed", + title: retcode == 0 ? "Friend added" : "Đã có trong danh sách bạn bè, không thể hảo hữu", message: message, dlg: null, null); @@ -891,4 +891,4 @@ namespace BrewMonster.Network return v; } } -} \ No newline at end of file +} diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgFriendList.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgFriendList.cs index 4ad0b7e7b0..ee3c4242cf 100644 --- a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgFriendList.cs +++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgFriendList.cs @@ -49,10 +49,13 @@ namespace BrewMonster [Header("GameObject")] [SerializeField] private GameObject m_contextMenu; [SerializeField] private GameObject m_inputName; + [SerializeField] private Sprite m_normalBtn; + [SerializeField] private Sprite m_grayBtn; private CSNetwork.GameSession _session; private FriendTab _currentTab = FriendTab.Friend; private int _selectedFriendId; + private string _selectedFriendName; private Image _selectedRowImage; private Color _selectedRowOriginalColor; private TMP_InputField _addNameInput; @@ -75,6 +78,7 @@ namespace BrewMonster _session.Friend_GetList(); } + UpdateButtonTabUI(_currentTab); RefreshListFromHost(); if (m_helpBtn != null) @@ -92,6 +96,7 @@ namespace BrewMonster m_friendBtn.onClick.AddListener(() => { _currentTab = FriendTab.Friend; + UpdateButtonTabUI(_currentTab); RefreshListFromHost(); }); } @@ -102,6 +107,7 @@ namespace BrewMonster m_blacklistBtn.onClick.AddListener(() => { _currentTab = FriendTab.Blacklist; + UpdateButtonTabUI(_currentTab); RefreshListFromHost(); }); } @@ -112,6 +118,7 @@ namespace BrewMonster m_archrivalBtn.onClick.AddListener(() => { _currentTab = FriendTab.Archrival; + UpdateButtonTabUI(_currentTab); RefreshListFromHost(); }); } @@ -130,7 +137,12 @@ namespace BrewMonster if (m_deleteBtn != null) { m_deleteBtn.onClick.RemoveAllListeners(); - m_deleteBtn.onClick.AddListener(OnDeleteFriendClicked); + m_deleteBtn.onClick.AddListener(() => CECUIManager.Instance.ShowMessageBoxYesAndNo( + title: "Del Friend Requets", + message: $"Bạn có chắc muốn xóa {_selectedFriendName} ra khỏi danh sách hảo hữu", + dlg: null, + onClickedYes:() => OnDeleteFriendClicked(true), + onClickedNo: () => OnDeleteFriendClicked(false))); } if (m_fuctionBtn != null) @@ -164,6 +176,7 @@ namespace BrewMonster m_cancelBtn.onClick.RemoveAllListeners(); m_cancelBtn.onClick.AddListener(() => { + _addNameInput.text = string.Empty; m_inputName.SetActive(false); }); } @@ -173,6 +186,7 @@ namespace BrewMonster m_closeBtn.onClick.RemoveAllListeners(); m_closeBtn.onClick.AddListener(() => { + m_contextMenu.SetActive(false); CloseDialogue(); }); } @@ -182,7 +196,8 @@ namespace BrewMonster m_associate.onClick.RemoveAllListeners(); m_associate.onClick.AddListener(() => { - // TODO: Associate friend with group + m_inputName.SetActive(true); + m_contextMenu.SetActive(false); }); } @@ -274,21 +289,24 @@ namespace BrewMonster foreach (var f in g.Friends) { var go = Instantiate(m_friendDetailPrefabs, m_friendContainer); - WireRowSelection(go, f.Id); var nameTxt = go.transform.Find("text_name")?.GetComponent(); var stateTxt = go.transform.Find("text_state")?.GetComponent(); + string displayName = string.IsNullOrEmpty(f.Name) ? f.Id.ToString() : f.Name; if (nameTxt != null) nameTxt.text = string.IsNullOrEmpty(f.Name) ? f.Id.ToString() : f.Name; if (stateTxt != null) { bool online = f.IsGameOnline(); + Debug.Log($"[Friend] id={f.Id}, name={f.Name}, status={f.Status}, isGame={f.IsGameOnline()}, isGT={f.IsGTOnline()}"); stateTxt.text = online ? "Online" : "Offline"; } + + WireRowSelection(go, f.Id, displayName); } } } - private void WireRowSelection(GameObject rowGo, int friendId) + private void WireRowSelection(GameObject rowGo, int friendId, string displayName) { if (rowGo == null) return; @@ -297,15 +315,16 @@ namespace BrewMonster if (btn == null) return; btn.onClick.RemoveAllListeners(); - btn.onClick.AddListener(() => SelectRow(friendId, img)); + btn.onClick.AddListener(() => SelectRow(friendId, displayName, img)); } - private void SelectRow(int friendId, Image rowImage) + private void SelectRow(int friendId, string displayName, Image rowImage) { if (_selectedRowImage != null) _selectedRowImage.color = _selectedRowOriginalColor; _selectedFriendId = friendId; + _selectedFriendName = displayName; _selectedRowImage = rowImage; if (_selectedRowImage != null) { @@ -325,10 +344,13 @@ namespace BrewMonster } /// Delete friend: send PROTOCOL_DELFRIEND and wait for server to refresh list. - private void OnDeleteFriendClicked() + private void OnDeleteFriendClicked(bool isDel) { - if (_session == null || _selectedFriendId <= 0) return; - _session.Friend_Del(_selectedFriendId); + if (isDel) + { + if (_session == null || _selectedFriendId <= 0) return; + _session.Friend_Del(_selectedFriendId); + } } private void EnsureAddNameInput() @@ -337,5 +359,15 @@ namespace BrewMonster if (m_inputName == null) return; _addNameInput = m_inputName.GetComponentInChildren(true); } + + private void UpdateButtonTabUI(FriendTab friendTab) + { + if (m_friendBtn != null) + m_friendBtn.image.sprite = friendTab == FriendTab.Friend ? m_normalBtn : m_grayBtn; + if (m_blacklistBtn != null) + m_blacklistBtn.image.sprite = friendTab == FriendTab.Blacklist ? m_normalBtn : m_grayBtn; + if (m_archrivalBtn != null) + m_archrivalBtn.image.sprite = friendTab == FriendTab.Archrival ? m_normalBtn : m_grayBtn; + } } } diff --git a/Assets/PerfectWorld/UI/friend/DlgFriendList.prefab b/Assets/PerfectWorld/UI/friend/DlgFriendList.prefab index 076001e942..ddd62f5933 100644 --- a/Assets/PerfectWorld/UI/friend/DlgFriendList.prefab +++ b/Assets/PerfectWorld/UI/friend/DlgFriendList.prefab @@ -4393,6 +4393,8 @@ MonoBehaviour: m_friendDetailPrefabs: {fileID: 5752057303472545993, guid: e684e5343545d9e40b917dd166aab2b1, type: 3} m_contextMenu: {fileID: 8872269839583632195} m_inputName: {fileID: 5862432234042242884} + m_normalBtn: {fileID: 21300000, guid: a3a0e047e45566c4aa15080b346621b1, type: 3} + m_grayBtn: {fileID: 21300000, guid: 3b5dda180f088234f97e05dd0bf05463, type: 3} --- !u!1 &8303299344314577934 GameObject: m_ObjectHideFlags: 0