fix ui for dlg FriendList

This commit is contained in:
VuNgocHaiC7
2026-03-19 17:50:49 +07:00
parent 82994a9c1c
commit f9dbdc1c3c
4 changed files with 66 additions and 23 deletions
@@ -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}";
}
}
@@ -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;
}
}
}
}
@@ -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<TextMeshProUGUI>();
var stateTxt = go.transform.Find("text_state")?.GetComponent<TextMeshProUGUI>();
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
}
/// <summary>Delete friend: send PROTOCOL_DELFRIEND and wait for server to refresh list.</summary>
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<TMP_InputField>(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;
}
}
}
@@ -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