diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs
index 556064d102..387b90d6b2 100644
--- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs
+++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs
@@ -68,6 +68,7 @@ namespace CSNetwork
/// Raised when server sends PROTOCOL_GETFRIENDS_RE(207).
public event Action FriendListReceived;
+ public event Action FriendDeletedReceived;
/// Raised when server sends PROTOCOL_FRIENDSTATUS(214). Args: roleid, status.
public event Action FriendStatusChanged;
@@ -633,12 +634,26 @@ namespace CSNetwork
OnFriendStatus((friendstatus)protocol);
break;
+ case ProtocolType.PROTOCOL_DELFRIEND_RE:
+ OnDelFriendRe((delfriend_re)protocol);
+ break;
+
default:
_logger.Log(LogType.Warning, $"Received unhandled protocol type: {protocol.GetPType()}");
break;
}
}
+ private void OnDelFriendRe(delfriend_re p)
+ {
+ PostToUnityContext(() =>
+ {
+ FriendDeletedReceived?.Invoke(p);
+ if (p != null && p.retcode == 0)
+ Friend_GetList();
+ });
+ }
+
private void HandlePlayerLogout(playerlogout protocol)
{
// old code of HUNGDK
@@ -2538,7 +2553,6 @@ namespace CSNetwork
p.Friendid = friendId;
p.Localsid = (int)_localsid;
SendProtocol(p);
- Friend_GetList();
}
public void c2s_SendCmdTeamKickMember(int idMember)
diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/Protocols/delfriend_re.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/Protocols/delfriend_re.cs
new file mode 100644
index 0000000000..f901eec9ed
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/Protocols/delfriend_re.cs
@@ -0,0 +1,42 @@
+namespace CSNetwork.Protocols
+{
+ /// PROTOCOL_DELFRIEND_RE(213). Delete friend response.
+ public class delfriend_re : Protocol
+ {
+ public byte retcode { get; set; }
+ public int roleid { get; set; }
+ public int friendid { get; set; }
+ public uint srclsid { get; set; }
+
+ public delfriend_re() : base(ProtocolType.PROTOCOL_DELFRIEND_RE) { }
+
+ public override Protocol Clone() => new delfriend_re
+ {
+ retcode = retcode,
+ roleid = roleid,
+ friendid = friendid,
+ srclsid = srclsid
+ };
+
+ public override void Marshal(OctetsStream os)
+ {
+ os.Write(retcode);
+ os.Write(roleid);
+ os.Write(friendid);
+ os.Write(srclsid);
+ }
+
+ public override void Unmarshal(OctetsStream os)
+ {
+ retcode = os.ReadByte();
+ roleid = os.ReadInt32();
+ friendid = os.ReadInt32();
+ srclsid = os.ReadUInt32();
+ }
+
+ public override int PriorPolicy() => 1;
+
+ public override bool SizePolicy(int size) => size <= 32;
+ }
+}
+
diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/Protocols/delfriend_re.cs.meta b/Assets/PerfectWorld/Scripts/Network/CSNetwork/Protocols/delfriend_re.cs.meta
new file mode 100644
index 0000000000..ec990c57c9
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/Protocols/delfriend_re.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 2c7fd991e4b531e48856e282ffee5cf2
\ 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 ba44ae801e..4ad0b7e7b0 100644
--- a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgFriendList.cs
+++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgFriendList.cs
@@ -130,12 +130,7 @@ namespace BrewMonster
if (m_deleteBtn != null)
{
m_deleteBtn.onClick.RemoveAllListeners();
- m_deleteBtn.onClick.AddListener(() =>
- {
- if (_session == null) return;
- if (_selectedFriendId <= 0) return;
- _session.Friend_Del(_selectedFriendId);
- });
+ m_deleteBtn.onClick.AddListener(OnDeleteFriendClicked);
}
if (m_fuctionBtn != null)
@@ -329,6 +324,13 @@ namespace BrewMonster
_selectedRowOriginalColor = default;
}
+ /// Delete friend: send PROTOCOL_DELFRIEND and wait for server to refresh list.
+ private void OnDeleteFriendClicked()
+ {
+ if (_session == null || _selectedFriendId <= 0) return;
+ _session.Friend_Del(_selectedFriendId);
+ }
+
private void EnsureAddNameInput()
{
if (_addNameInput != null) return;