mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-02 20:26:03 +08:00
sync: main repo
This commit is contained in:
@@ -101,15 +101,23 @@ public class ServerAnnounce
|
||||
|
||||
public class ServerProfile
|
||||
{
|
||||
public string Name { get; set; } = "Server";
|
||||
public int Uid { get; set; } = 80;
|
||||
public string Name { get; set; } = "StopWuyu";
|
||||
public int Uid { get; set; } = 5201314;
|
||||
public string Signature { get; set; } = "Type /help for a list of commands";
|
||||
public int Level { get; set; } = 1;
|
||||
public int Level { get; set; } = 70;
|
||||
public int HeadIcon { get; set; } = 200105;
|
||||
public int ChatBubbleId { get; set; } = 220001;
|
||||
public int PersonalCardId { get; set; } = 253001;
|
||||
public int DisplayAvatarId { get; set; } = 1001;
|
||||
public int DisplayAvatarLevel { get; set; } = 1;
|
||||
public List<ServerAssistInfo> AssistInfo { get; set; } = [
|
||||
new() { AvatarId = 1213, Level = 80 }
|
||||
];
|
||||
}
|
||||
|
||||
public class ServerAssistInfo
|
||||
{
|
||||
public int AvatarId { get; set; }
|
||||
public int Level { get; set; }
|
||||
public int SkinId { get; set; }
|
||||
}
|
||||
|
||||
public class MuipServerConfig
|
||||
|
||||
@@ -5,7 +5,9 @@ namespace EggLink.DanhengServer.Database.Friend;
|
||||
[SugarTable("Friend")]
|
||||
public class FriendData : BaseDatabaseDataHelper
|
||||
{
|
||||
[SugarColumn(IsJson = true)] public List<int> FriendList { get; set; } = [];
|
||||
|
||||
[SugarColumn(IsJson = true, ColumnDataType = "TEXT")]
|
||||
public Dictionary<int, FriendDetailData> FriendList { get; set; } = [];
|
||||
|
||||
[SugarColumn(IsJson = true)] public List<int> BlackList { get; set; } = [];
|
||||
|
||||
@@ -17,6 +19,12 @@ public class FriendData : BaseDatabaseDataHelper
|
||||
public Dictionary<int, FriendChatHistory> ChatHistory { get; set; } = []; // key: friend uid
|
||||
}
|
||||
|
||||
public class FriendDetailData
|
||||
{
|
||||
public bool IsMark { get; set; }
|
||||
public string RemarkName { get; set; } = "";
|
||||
}
|
||||
|
||||
public class FriendChatHistory
|
||||
{
|
||||
public List<FriendChatData> MessageList { get; set; } = [];
|
||||
|
||||
@@ -93,8 +93,6 @@ public class PlayerData : BaseDatabaseDataHelper
|
||||
if (!GameData.ChatBubbleConfigData.ContainsKey(ChatBubble)) // to avoid npe
|
||||
ChatBubble = 220000;
|
||||
|
||||
var instance = DatabaseHelper.Instance!.GetInstance<AvatarData>(Uid)!;
|
||||
|
||||
var info = new PlayerSimpleInfo
|
||||
{
|
||||
Nickname = Name,
|
||||
@@ -110,14 +108,38 @@ public class PlayerData : BaseDatabaseDataHelper
|
||||
};
|
||||
|
||||
var pos = 0;
|
||||
foreach (var avatar in instance.AssistAvatars.Select(
|
||||
assist => instance.FormalAvatars.Find(x => x.AvatarId == assist)!))
|
||||
info.AssistSimpleInfoList.Add(new AssistSimpleInfo
|
||||
var instance = DatabaseHelper.Instance!.GetInstance<AvatarData>(Uid)!;
|
||||
if (instance == null)
|
||||
{
|
||||
// Handle server profile
|
||||
var serverProfile = ConfigManager.Config.ServerOption.ServerProfile;
|
||||
if (Uid == serverProfile.Uid)
|
||||
{
|
||||
AvatarId = (uint)avatar.AvatarId,
|
||||
Level = (uint)avatar.Level,
|
||||
Pos = (uint)pos++
|
||||
});
|
||||
info.OnlineStatus = FriendOnlineStatus.Online;
|
||||
info.AssistSimpleInfoList.AddRange(
|
||||
serverProfile.AssistInfo.Select((x, index) =>
|
||||
new AssistSimpleInfo
|
||||
{
|
||||
AvatarId = (uint)x.AvatarId,
|
||||
Level = (uint)x.Level,
|
||||
DressedSkinId = (uint)x.SkinId,
|
||||
Pos = (uint)index
|
||||
}));
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
foreach (var avatar in instance.AssistAvatars.Select(
|
||||
assist => instance.FormalAvatars.Find(x => x.AvatarId == assist)!))
|
||||
if (avatar != null)
|
||||
info.AssistSimpleInfoList.Add(new AssistSimpleInfo
|
||||
{
|
||||
AvatarId = (uint)avatar.AvatarId,
|
||||
Level = (uint)avatar.Level,
|
||||
DressedSkinId = (uint)avatar.GetCurPathInfo().Skin,
|
||||
Pos = (uint)pos++
|
||||
});
|
||||
|
||||
return info;
|
||||
}
|
||||
@@ -135,6 +157,7 @@ public class PlayerData : BaseDatabaseDataHelper
|
||||
Platform = PlatformType.Pc,
|
||||
Uid = (uint)Uid,
|
||||
WorldLevel = (uint)WorldLevel,
|
||||
EMOBIJBDKEI = true, // ShowDisplayAvatar
|
||||
RecordInfo = new PlayerRecordInfo(),
|
||||
PrivacySettings = new PrivacySettings()
|
||||
};
|
||||
@@ -142,25 +165,36 @@ public class PlayerData : BaseDatabaseDataHelper
|
||||
var avatarInfo = DatabaseHelper.Instance!.GetInstance<AvatarData>(Uid);
|
||||
var inventoryInfo = DatabaseHelper.Instance!.GetInstance<InventoryData>(Uid);
|
||||
|
||||
if (avatarInfo == null || inventoryInfo == null) return info;
|
||||
if (avatarInfo == null || inventoryInfo == null)
|
||||
{
|
||||
// Handle server profile
|
||||
var serverProfile = ConfigManager.Config.ServerOption.ServerProfile;
|
||||
if (Uid == serverProfile.Uid)
|
||||
info.AssistAvatarList.AddRange(
|
||||
serverProfile.AssistInfo.Select((x, index) =>
|
||||
new DisplayAvatarDetailInfo
|
||||
{
|
||||
AvatarId = (uint)x.AvatarId,
|
||||
Level = (uint)x.Level,
|
||||
DressedSkinId = (uint)x.SkinId,
|
||||
Pos = (uint)index
|
||||
}));
|
||||
return info;
|
||||
}
|
||||
|
||||
var pos = 0;
|
||||
foreach (var avatarId in avatarInfo.AssistAvatars)
|
||||
{
|
||||
var avatar = avatarInfo.FormalAvatars.Find(x => x.AvatarId == avatarId);
|
||||
foreach (var avatar in avatarInfo.AssistAvatars.Select(assist =>
|
||||
avatarInfo.FormalAvatars.Find(x => x.AvatarId == assist)))
|
||||
if (avatar != null)
|
||||
info.AssistAvatarList.Add(avatar.ToDetailProto(pos++,
|
||||
new PlayerDataCollection(this, inventoryInfo, new LineupInfo())));
|
||||
}
|
||||
new PlayerDataCollection(this, inventoryInfo, new())));
|
||||
|
||||
pos = 0;
|
||||
foreach (var avatar in avatarInfo.DisplayAvatars.Select(display =>
|
||||
avatarInfo.FormalAvatars.Find(x => x.AvatarId == display)))
|
||||
{
|
||||
avatarInfo.FormalAvatars.Find(x => x.AvatarId == display)))
|
||||
if (avatar != null)
|
||||
info.DisplayAvatarList.Add(avatar.ToDetailProto(pos++,
|
||||
new PlayerDataCollection(this, inventoryInfo, new LineupInfo())));
|
||||
}
|
||||
new PlayerDataCollection(this, inventoryInfo, new())));
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ using EggLink.DanhengServer.GameServer.Game.Player;
|
||||
using EggLink.DanhengServer.GameServer.Server;
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Chat;
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
using EggLink.DanhengServer.Util;
|
||||
|
||||
@@ -16,79 +17,109 @@ public class FriendManager(PlayerInstance player) : BasePlayerManager(player)
|
||||
public FriendData FriendData { get; set; } =
|
||||
DatabaseHelper.Instance!.GetInstanceOrCreateNew<FriendData>(player.Uid);
|
||||
|
||||
public async ValueTask AddFriend(int targetUid)
|
||||
public async ValueTask<Retcode> AddFriend(int targetUid)
|
||||
{
|
||||
if (targetUid == Player.Uid) return Retcode.RetSucc; // Cannot add self
|
||||
if (FriendData.FriendList.ContainsKey(targetUid)) return Retcode.RetFriendAlreadyIsFriend;
|
||||
if (FriendData.BlackList.Contains(targetUid)) return Retcode.RetFriendInBlacklist;
|
||||
if (FriendData.SendApplyList.Contains(targetUid)) return Retcode.RetSucc; // Already send apply
|
||||
|
||||
var target = DatabaseHelper.Instance!.GetInstance<FriendData>(targetUid);
|
||||
if (target == null) return;
|
||||
|
||||
if (FriendData.FriendList.Contains(targetUid)) // already friend
|
||||
return;
|
||||
|
||||
if (FriendData.BlackList.Contains(targetUid)) // in black list
|
||||
return;
|
||||
|
||||
if (FriendData.SendApplyList.Contains(targetUid)) // already send apply
|
||||
return;
|
||||
|
||||
if (FriendData.ReceiveApplyList.Contains(targetUid)) // already receive apply
|
||||
return;
|
||||
if (target == null) return Retcode.RetFriendPlayerNotFound;
|
||||
if (target.BlackList.Contains(Player.Uid)) return Retcode.RetFriendInTargetBlacklist;
|
||||
if (target.ReceiveApplyList.Contains(targetUid)) return Retcode.RetSucc; // Already receive apply
|
||||
|
||||
FriendData.SendApplyList.Add(targetUid);
|
||||
target.ReceiveApplyList.Add(Player.Uid);
|
||||
|
||||
var targetPlayer = Listener.GetActiveConnection(targetUid);
|
||||
if (targetPlayer != null)
|
||||
{
|
||||
await targetPlayer.SendPacket(new PacketSyncApplyFriendScNotify(Player.Data));
|
||||
targetPlayer.Player!.FriendManager!.FriendData.ReceiveApplyList.Add(Player.Uid);
|
||||
}
|
||||
|
||||
DatabaseHelper.ToSaveUidList.Add(targetUid);
|
||||
return Retcode.RetSucc;
|
||||
}
|
||||
|
||||
public async ValueTask<PlayerData?> ConfirmAddFriend(int targetUid)
|
||||
{
|
||||
var target = DatabaseHelper.Instance!.GetInstance<FriendData>(targetUid);
|
||||
if (target == null) return null;
|
||||
|
||||
if (FriendData.FriendList.Contains(targetUid)) return null;
|
||||
|
||||
if (targetUid == Player.Uid) return null; // Cannot add self
|
||||
if (FriendData.FriendList.ContainsKey(targetUid)) return null;
|
||||
if (FriendData.BlackList.Contains(targetUid)) return null;
|
||||
|
||||
if (!FriendData.ReceiveApplyList.Contains(targetUid)) return null;
|
||||
var target = DatabaseHelper.Instance!.GetInstance<FriendData>(targetUid);
|
||||
var targetData = PlayerData.GetPlayerByUid(targetUid);
|
||||
if (target == null || targetData == null) return null;
|
||||
if (target.FriendList.ContainsKey(Player.Uid)) return null;
|
||||
if (target.BlackList.Contains(Player.Uid)) return null;
|
||||
|
||||
FriendData.ReceiveApplyList.Remove(targetUid);
|
||||
FriendData.FriendList.Add(targetUid);
|
||||
target.FriendList.Add(Player.Uid);
|
||||
FriendData.FriendList.Add(targetUid, new());
|
||||
target.SendApplyList.Remove(Player.Uid);
|
||||
target.FriendList.Add(Player.Uid, new());
|
||||
|
||||
var targetData = PlayerData.GetPlayerByUid(targetUid)!;
|
||||
var targetPlayer = Listener.GetActiveConnection(targetUid);
|
||||
if (targetPlayer != null)
|
||||
await targetPlayer.SendPacket(new PacketSyncHandleFriendScNotify((uint)Player.Uid, true, Player.Data));
|
||||
|
||||
await Player.SendPacket(new PacketSyncHandleFriendScNotify((uint)targetData.Uid, true, targetData));
|
||||
|
||||
DatabaseHelper.ToSaveUidList.Add(targetUid);
|
||||
return targetData;
|
||||
}
|
||||
|
||||
public void RefuseAddFriend(int targetUid)
|
||||
public async ValueTask RefuseAddFriend(int targetUid)
|
||||
{
|
||||
var target = DatabaseHelper.Instance!.GetInstance<FriendData>(targetUid);
|
||||
if (target == null) return;
|
||||
|
||||
if (!FriendData.ReceiveApplyList.Contains(targetUid)) return;
|
||||
|
||||
FriendData.ReceiveApplyList.Remove(targetUid);
|
||||
target.SendApplyList.Remove(Player.Uid);
|
||||
|
||||
var targetPlayer = Listener.GetActiveConnection(targetUid);
|
||||
targetPlayer?.Player!.FriendManager!.FriendData.SendApplyList.Remove(Player.Uid);
|
||||
if (targetPlayer != null)
|
||||
await targetPlayer.SendPacket(new PacketSyncHandleFriendScNotify((uint)Player.Uid, false, Player.Data));
|
||||
|
||||
DatabaseHelper.ToSaveUidList.Add(targetUid);
|
||||
}
|
||||
|
||||
public void RemoveFriend()
|
||||
public async ValueTask<PlayerData?> AddBlackList(int targetUid)
|
||||
{
|
||||
var blackInfo = GetFriendPlayerData([targetUid]).First();
|
||||
var target = DatabaseHelper.Instance!.GetInstance<FriendData>(targetUid);
|
||||
if (blackInfo == null || target == null) return null;
|
||||
|
||||
FriendData.FriendList.Remove(targetUid);
|
||||
target.FriendList.Remove(Player.Uid);
|
||||
if (!FriendData.BlackList.Contains(targetUid))
|
||||
FriendData.BlackList.Add(targetUid);
|
||||
|
||||
var targetPlayer = Listener.GetActiveConnection(targetUid);
|
||||
if (targetPlayer != null)
|
||||
await targetPlayer.SendPacket(new PacketSyncAddBlacklistScNotify(Player.Uid));
|
||||
|
||||
DatabaseHelper.ToSaveUidList.Add(targetUid);
|
||||
return blackInfo;
|
||||
}
|
||||
|
||||
public void RemoveBlackList(int targetUid)
|
||||
{
|
||||
var target = DatabaseHelper.Instance!.GetInstance<FriendData>(targetUid);
|
||||
if (target == null) return;
|
||||
FriendData.BlackList.Remove(targetUid);
|
||||
}
|
||||
|
||||
public async ValueTask<int?> RemoveFriend(int targetUid)
|
||||
{
|
||||
var target = DatabaseHelper.Instance!.GetInstance<FriendData>(targetUid);
|
||||
if (target == null) return null;
|
||||
|
||||
FriendData.FriendList.Remove(targetUid);
|
||||
target.FriendList.Remove(Player.Uid);
|
||||
|
||||
var targetPlayer = Listener.GetActiveConnection(targetUid);
|
||||
if (targetPlayer != null)
|
||||
await targetPlayer.SendPacket(new PacketSyncDeleteFriendScNotify(Player.Uid));
|
||||
|
||||
DatabaseHelper.ToSaveUidList.Add(targetUid);
|
||||
return targetUid;
|
||||
}
|
||||
|
||||
public async ValueTask SendMessage(int sendUid, int recvUid, string? message = null, int? extraId = null)
|
||||
@@ -196,6 +227,16 @@ public class FriendManager(PlayerInstance player) : BasePlayerManager(player)
|
||||
await Player.SendPacket(proto);
|
||||
}
|
||||
|
||||
public FriendDetailData? GetFriendDetailData(int uid)
|
||||
{
|
||||
if (uid == ConfigManager.Config.ServerOption.ServerProfile.Uid)
|
||||
return new FriendDetailData { IsMark = true };
|
||||
|
||||
if (!FriendData.FriendList.TryGetValue(uid, out var friend)) return null;
|
||||
|
||||
return friend;
|
||||
}
|
||||
|
||||
public List<ChatMessageData> GetHistoryInfo(int uid)
|
||||
{
|
||||
if (!FriendData.ChatHistory.TryGetValue(uid, out var history)) return [];
|
||||
@@ -217,17 +258,30 @@ public class FriendManager(PlayerInstance player) : BasePlayerManager(player)
|
||||
return info;
|
||||
}
|
||||
|
||||
public List<PlayerData> GetFriendList()
|
||||
public List<PlayerData> GetFriendPlayerData(List<int>? uids = null)
|
||||
{
|
||||
List<PlayerData> list = [];
|
||||
var list = new List<PlayerData>();
|
||||
uids ??= [.. FriendData.FriendList.Keys];
|
||||
|
||||
foreach (var friend in FriendData.FriendList)
|
||||
foreach (var friend in uids)
|
||||
{
|
||||
var player = PlayerData.GetPlayerByUid(friend);
|
||||
|
||||
if (player != null) list.Add(player);
|
||||
}
|
||||
|
||||
var serverProfile = ConfigManager.Config.ServerOption.ServerProfile;
|
||||
list.Add(new PlayerData
|
||||
{
|
||||
Uid = serverProfile.Uid,
|
||||
HeadIcon = serverProfile.HeadIcon,
|
||||
Signature = serverProfile.Signature,
|
||||
Level = serverProfile.Level,
|
||||
WorldLevel = 0,
|
||||
Name = serverProfile.Name,
|
||||
ChatBubble = serverProfile.ChatBubbleId,
|
||||
PersonalCard = serverProfile.PersonalCardId
|
||||
});
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
@@ -273,41 +327,51 @@ public class FriendManager(PlayerInstance player) : BasePlayerManager(player)
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<PlayerData> GetRandomFriend()
|
||||
{
|
||||
var list = new List<PlayerData>();
|
||||
|
||||
foreach (var kcp in DanhengListener.Connections.Values)
|
||||
{
|
||||
if (kcp.State != SessionStateEnum.ACTIVE) continue;
|
||||
if (kcp is not Connection connection) continue;
|
||||
if (connection.Player?.Uid == Player.Uid) continue;
|
||||
var data = connection.Player?.Data;
|
||||
if (data == null) continue;
|
||||
list.Add(data);
|
||||
}
|
||||
|
||||
return list.Take(20).ToList();
|
||||
}
|
||||
|
||||
public void RemarkFriendName(int uid, string remarkName)
|
||||
{
|
||||
if (!FriendData.FriendList.TryGetValue(uid, out var friend)) return;
|
||||
friend.RemarkName = remarkName;
|
||||
}
|
||||
|
||||
public void MarkFriend(int uid, bool isMark)
|
||||
{
|
||||
if (!FriendData.FriendList.TryGetValue(uid, out var friend)) return;
|
||||
friend.IsMark = isMark;
|
||||
}
|
||||
|
||||
public GetFriendListInfoScRsp ToProto()
|
||||
{
|
||||
var proto = new GetFriendListInfoScRsp();
|
||||
|
||||
var serverProfile = ConfigManager.Config.ServerOption.ServerProfile;
|
||||
|
||||
proto.FriendList.Add(new FriendSimpleInfo
|
||||
{
|
||||
PlayerInfo = new PlayerSimpleInfo
|
||||
{
|
||||
Uid = (uint)serverProfile.Uid,
|
||||
HeadIcon = (uint)serverProfile.HeadIcon,
|
||||
IsBanned = false,
|
||||
Level = (uint)serverProfile.Level,
|
||||
Nickname = serverProfile.Name,
|
||||
ChatBubbleId = (uint)serverProfile.ChatBubbleId,
|
||||
PersonalCard = (uint)serverProfile.PersonalCardId,
|
||||
OnlineStatus = FriendOnlineStatus.Online,
|
||||
Platform = PlatformType.Pc,
|
||||
Signature = serverProfile.Signature
|
||||
},
|
||||
IsMarked = false,
|
||||
RemarkName = ""
|
||||
});
|
||||
|
||||
foreach (var player in GetFriendList())
|
||||
foreach (var player in GetFriendPlayerData())
|
||||
{
|
||||
var status = Listener.GetActiveConnection(player.Uid) == null
|
||||
? FriendOnlineStatus.Offline
|
||||
: FriendOnlineStatus.Online;
|
||||
var friend = GetFriendDetailData(player.Uid) ?? new();
|
||||
|
||||
proto.FriendList.Add(new FriendSimpleInfo
|
||||
{
|
||||
PlayerInfo = player.ToSimpleProto(status),
|
||||
IsMarked = false,
|
||||
RemarkName = ""
|
||||
IsMarked = friend.IsMark,
|
||||
RemarkName = friend.RemarkName
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Chat;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Chat;
|
||||
|
||||
@@ -7,6 +8,8 @@ public class HandlerGetChatFriendHistoryCsReq : Handler
|
||||
{
|
||||
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
|
||||
{
|
||||
await connection.SendPacket(CmdIds.GetChatFriendHistoryScRsp);
|
||||
var history = connection.Player!.FriendManager!.FriendData.ChatHistory;
|
||||
|
||||
await connection.SendPacket(new PacketGetChatFriendHistoryScRsp(history));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Friend;
|
||||
|
||||
[Opcode(CmdIds.AddBlacklistCsReq)]
|
||||
public class HandlerAddBlacklistCsReq : Handler
|
||||
{
|
||||
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
|
||||
{
|
||||
var req = AddBlacklistCsReq.Parser.ParseFrom(data);
|
||||
|
||||
var player = await connection.Player!.FriendManager!.AddBlackList((int)req.Uid);
|
||||
|
||||
if (player != null)
|
||||
await connection.SendPacket(new PacketAddBlacklistScRsp(player));
|
||||
else
|
||||
await connection.SendPacket(new PacketAddBlacklistScRsp());
|
||||
}
|
||||
}
|
||||
@@ -11,8 +11,8 @@ public class HandlerApplyFriendCsReq : Handler
|
||||
{
|
||||
var req = ApplyFriendCsReq.Parser.ParseFrom(data);
|
||||
|
||||
await connection.Player!.FriendManager!.AddFriend((int)req.Uid);
|
||||
var ret = await connection.Player!.FriendManager!.AddFriend((int)req.Uid);
|
||||
|
||||
await connection.SendPacket(new PacketApplyFriendScRsp(req.Uid));
|
||||
await connection.SendPacket(new PacketApplyFriendScRsp(ret, req.Uid));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Friend;
|
||||
|
||||
[Opcode(CmdIds.DeleteBlacklistCsReq)]
|
||||
public class HandlerDeleteBlacklistCsReq : Handler
|
||||
{
|
||||
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
|
||||
{
|
||||
var req = DeleteBlacklistCsReq.Parser.ParseFrom(data);
|
||||
|
||||
connection.Player!.FriendManager!.RemoveBlackList((int)req.Uid);
|
||||
|
||||
await connection.SendPacket(new PacketDeleteBlacklistScRsp(req.Uid));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Friend;
|
||||
|
||||
[Opcode(CmdIds.DeleteFriendCsReq)]
|
||||
public class HandlerDeleteFriendCsReq : Handler
|
||||
{
|
||||
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
|
||||
{
|
||||
var req = DeleteFriendCsReq.Parser.ParseFrom(data);
|
||||
|
||||
var uid = await connection.Player!.FriendManager!.RemoveFriend((int)req.Uid);
|
||||
if (uid == null)
|
||||
await connection.SendPacket(new PacketDeleteFriendScRsp());
|
||||
else
|
||||
await connection.SendPacket(new PacketDeleteFriendScRsp((uint)uid));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Friend;
|
||||
|
||||
[Opcode(CmdIds.GetFriendLoginInfoCsReq)]
|
||||
public class HandlerGetFriendLoginInfoCsReq : Handler
|
||||
{
|
||||
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
|
||||
{
|
||||
var friends = connection.Player!.FriendManager!
|
||||
.GetFriendPlayerData().Select(x => x.Uid).ToList();
|
||||
|
||||
await connection.SendPacket(new PacketGetFriendLoginInfoScRsp(friends));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Friend;
|
||||
|
||||
[Opcode(CmdIds.GetFriendRecommendListInfoCsReq)]
|
||||
public class HandlerGetFriendRecommendListInfoCsReq : Handler
|
||||
{
|
||||
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
|
||||
{
|
||||
var friends = connection.Player!.FriendManager!.GetRandomFriend();
|
||||
|
||||
await connection.SendPacket(new PacketGetFriendRecommendListInfoScRsp(friends));
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,6 @@
|
||||
using EggLink.DanhengServer.Database.Player;
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
using EggLink.DanhengServer.Util;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Friend;
|
||||
|
||||
@@ -13,32 +11,13 @@ public class HandlerGetPlayerDetailInfoCsReq : Handler
|
||||
{
|
||||
var req = GetPlayerDetailInfoCsReq.Parser.ParseFrom(data);
|
||||
|
||||
var playerData = PlayerData.GetPlayerByUid(req.Uid);
|
||||
|
||||
var playerData = connection.Player!.FriendManager!.GetFriendPlayerData([(int)req.Uid]).First();
|
||||
if (playerData == null)
|
||||
{
|
||||
var serverProfile = ConfigManager.Config.ServerOption.ServerProfile;
|
||||
if (req.Uid == serverProfile.Uid)
|
||||
{
|
||||
playerData = new PlayerData
|
||||
{
|
||||
Uid = serverProfile.Uid,
|
||||
HeadIcon = serverProfile.HeadIcon,
|
||||
Signature = serverProfile.Signature,
|
||||
Level = serverProfile.Level,
|
||||
WorldLevel = 0,
|
||||
Name = serverProfile.Name,
|
||||
ChatBubble = serverProfile.ChatBubbleId,
|
||||
PersonalCard = serverProfile.PersonalCardId
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
await connection.SendPacket(new PacketGetPlayerDetailInfoScRsp());
|
||||
return;
|
||||
}
|
||||
await connection.SendPacket(new PacketGetPlayerDetailInfoScRsp());
|
||||
return;
|
||||
}
|
||||
|
||||
await connection.SendPacket(new PacketGetPlayerDetailInfoScRsp(playerData));
|
||||
await connection.SendPacket(new PacketGetPlayerDetailInfoScRsp(playerData.ToDetailProto()));
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,7 @@ public class HandlerHandleFriendCsReq : Handler
|
||||
if (req.IsAccept)
|
||||
playerData = await connection.Player!.FriendManager!.ConfirmAddFriend((int)req.Uid);
|
||||
else
|
||||
connection.Player!.FriendManager!.RefuseAddFriend((int)req.Uid);
|
||||
await connection.Player!.FriendManager!.RefuseAddFriend((int)req.Uid);
|
||||
|
||||
if (playerData != null)
|
||||
await connection.SendPacket(new PacketHandleFriendScRsp(req.Uid, req.IsAccept, playerData));
|
||||
|
||||
@@ -15,7 +15,7 @@ public class HandlerSearchPlayerCsReq : Handler
|
||||
|
||||
foreach (var uid in req.UidList)
|
||||
{
|
||||
var player = PlayerData.GetPlayerByUid(uid);
|
||||
var player = connection.Player!.FriendManager!.GetFriendPlayerData([(int)uid]).First();
|
||||
if (player != null) playerList.Add(player);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Friend;
|
||||
|
||||
[Opcode(CmdIds.SetFriendMarkCsReq)]
|
||||
public class HandlerSetFriendMarkCsReq : Handler
|
||||
{
|
||||
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
|
||||
{
|
||||
var req = SetFriendMarkCsReq.Parser.ParseFrom(data);
|
||||
|
||||
connection.Player!.FriendManager!.MarkFriend((int)req.Uid, req.ADJGKCOKOLN);
|
||||
|
||||
await connection.SendPacket(new PacketSetFriendMarkScRsp(req.Uid, req.ADJGKCOKOLN));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Friend;
|
||||
|
||||
[Opcode(CmdIds.SetFriendRemarkNameCsReq)]
|
||||
public class HandlerSetFriendRemarkNameCsReq : Handler
|
||||
{
|
||||
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
|
||||
{
|
||||
var req = SetFriendRemarkNameCsReq.Parser.ParseFrom(data);
|
||||
|
||||
connection.Player!.FriendManager!.RemarkFriendName((int)req.Uid, req.RemarkName);
|
||||
|
||||
await connection.SendPacket(new PacketSetFriendRemarkNameScRsp(req.Uid, req.RemarkName));
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,10 @@ public class HandlerSetAssistAvatarCsReq : Handler
|
||||
foreach (var id in req.AvatarIdList)
|
||||
{
|
||||
if (id == 0) continue;
|
||||
avatars.Add((int)id);
|
||||
|
||||
var avatarData = player.AvatarManager!.AvatarData.FormalAvatars.First(x =>
|
||||
x.BaseAvatarId == (int)id);
|
||||
if (avatarData != null) avatars.Add(avatarData.AvatarId);
|
||||
}
|
||||
|
||||
await connection.SendPacket(new PacketSetAssistAvatarScRsp(req.AvatarIdList));
|
||||
|
||||
@@ -13,10 +13,13 @@ public class HandlerSetDisplayAvatarCsReq : Handler
|
||||
var player = connection.Player!;
|
||||
var avatars = player.AvatarManager!.AvatarData!.DisplayAvatars;
|
||||
avatars.Clear();
|
||||
foreach (var id in req.DisplayAvatarList)
|
||||
foreach (var avatar in req.DisplayAvatarList)
|
||||
{
|
||||
if (id.AvatarId == 0) continue;
|
||||
avatars.Add((int)id.AvatarId);
|
||||
if (avatar.AvatarId == 0) continue;
|
||||
|
||||
var avatarData = player.AvatarManager!.AvatarData.FormalAvatars.First(x =>
|
||||
x.BaseAvatarId == (int)avatar.AvatarId);
|
||||
if (avatarData != null) avatars.Add(avatarData.AvatarId);
|
||||
}
|
||||
|
||||
await connection.SendPacket(new PacketSetDisplayAvatarScRsp(req.DisplayAvatarList));
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
using EggLink.DanhengServer.Database.Friend;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Chat;
|
||||
|
||||
public class PacketGetChatFriendHistoryScRsp : BasePacket
|
||||
{
|
||||
public PacketGetChatFriendHistoryScRsp(Dictionary<int, FriendChatHistory> history)
|
||||
: base(CmdIds.GetChatFriendHistoryScRsp)
|
||||
{
|
||||
var proto = new GetChatFriendHistoryScRsp();
|
||||
|
||||
foreach (var item in history)
|
||||
{
|
||||
proto.FriendHistoryInfo.Add(new FriendHistoryInfo
|
||||
{
|
||||
ContactSide = (uint)item.Key,
|
||||
LastSendTime = item.Value.MessageList.Last().SendTime
|
||||
});
|
||||
}
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using EggLink.DanhengServer.Database.Player;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
|
||||
public class PacketAddBlacklistScRsp : BasePacket
|
||||
{
|
||||
public PacketAddBlacklistScRsp() : base(CmdIds.AddBlacklistScRsp)
|
||||
{
|
||||
var proto = new AddBlacklistScRsp();
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
|
||||
public PacketAddBlacklistScRsp(PlayerData player) : base(CmdIds.AddBlacklistScRsp)
|
||||
{
|
||||
var status = Listener.GetActiveConnection(player.Uid) == null
|
||||
? FriendOnlineStatus.Offline
|
||||
: FriendOnlineStatus.Online;
|
||||
|
||||
var proto = new AddBlacklistScRsp
|
||||
{
|
||||
BlackInfo = player.ToSimpleProto(status)
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
}
|
||||
@@ -5,10 +5,11 @@ namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
|
||||
public class PacketApplyFriendScRsp : BasePacket
|
||||
{
|
||||
public PacketApplyFriendScRsp(uint uid) : base(CmdIds.ApplyFriendScRsp)
|
||||
public PacketApplyFriendScRsp(Retcode ret, uint uid) : base(CmdIds.ApplyFriendScRsp)
|
||||
{
|
||||
var proto = new ApplyFriendScRsp
|
||||
{
|
||||
Retcode = (uint)ret,
|
||||
Uid = uid
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
|
||||
public class PacketDeleteBlacklistScRsp : BasePacket
|
||||
{
|
||||
public PacketDeleteBlacklistScRsp(uint uid) : base(CmdIds.DeleteBlacklistScRsp)
|
||||
{
|
||||
var proto = new DeleteBlacklistScRsp
|
||||
{
|
||||
Uid = uid
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
|
||||
public class PacketDeleteFriendScRsp : BasePacket
|
||||
{
|
||||
public PacketDeleteFriendScRsp() : base(CmdIds.DeleteFriendScRsp)
|
||||
{
|
||||
var proto = new DeleteFriendScRsp();
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
|
||||
public PacketDeleteFriendScRsp(uint uid) : base(CmdIds.DeleteFriendScRsp)
|
||||
{
|
||||
var proto = new DeleteFriendScRsp
|
||||
{
|
||||
Uid = uid
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
|
||||
public class PacketGetFriendLoginInfoScRsp : BasePacket
|
||||
{
|
||||
public PacketGetFriendLoginInfoScRsp(List<int> friends) : base(CmdIds.GetFriendLoginInfoScRsp)
|
||||
{
|
||||
var proto = new GetFriendLoginInfoScRsp
|
||||
{
|
||||
FriendUidList = { friends.Select(x => (uint)x) }
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using EggLink.DanhengServer.Database.Player;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
|
||||
public class PacketGetFriendRecommendListInfoScRsp : BasePacket
|
||||
{
|
||||
public PacketGetFriendRecommendListInfoScRsp(List<PlayerData> friends)
|
||||
: base(CmdIds.GetFriendRecommendListInfoScRsp)
|
||||
{
|
||||
var proto = new GetFriendRecommendListInfoScRsp
|
||||
{
|
||||
PlayerInfoList = { friends.Select(x => new FriendRecommendInfo
|
||||
{
|
||||
PlayerInfo = x.ToSimpleProto(FriendOnlineStatus.Online)
|
||||
})}
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,15 @@
|
||||
using EggLink.DanhengServer.Database.Player;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
|
||||
public class PacketGetPlayerDetailInfoScRsp : BasePacket
|
||||
{
|
||||
public PacketGetPlayerDetailInfoScRsp(PlayerData data) : base(CmdIds.GetPlayerDetailInfoScRsp)
|
||||
public PacketGetPlayerDetailInfoScRsp(PlayerDetailInfo info) : base(CmdIds.GetPlayerDetailInfoScRsp)
|
||||
{
|
||||
var proto = new GetPlayerDetailInfoScRsp
|
||||
{
|
||||
DetailInfo = data.ToDetailProto()
|
||||
DetailInfo = info
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
|
||||
@@ -28,8 +28,6 @@ public class PacketHandleFriendScRsp : BasePacket
|
||||
IsAccept = isAccept,
|
||||
FriendInfo = new FriendSimpleInfo
|
||||
{
|
||||
IsMarked = false,
|
||||
RemarkName = "",
|
||||
PlayerInfo = playerData.ToSimpleProto(status)
|
||||
}
|
||||
};
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
|
||||
public class PacketSetFriendMarkScRsp : BasePacket
|
||||
{
|
||||
public PacketSetFriendMarkScRsp(uint uid, bool isMark) : base(CmdIds.SetFriendMarkScRsp)
|
||||
{
|
||||
var proto = new SetFriendMarkScRsp
|
||||
{
|
||||
Uid = uid,
|
||||
ADJGKCOKOLN = isMark
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
|
||||
public class PacketSetFriendRemarkNameScRsp : BasePacket
|
||||
{
|
||||
public PacketSetFriendRemarkNameScRsp(uint uid, string remarkName)
|
||||
: base(CmdIds.SetFriendRemarkNameScRsp)
|
||||
{
|
||||
var proto = new SetFriendRemarkNameScRsp
|
||||
{
|
||||
Uid = uid,
|
||||
RemarkName = remarkName
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
|
||||
public class PacketSyncAddBlacklistScNotify : BasePacket
|
||||
{
|
||||
public PacketSyncAddBlacklistScNotify(int uid)
|
||||
: base(CmdIds.SyncAddBlacklistScNotify)
|
||||
{
|
||||
var proto = new SyncAddBlacklistScNotify
|
||||
{
|
||||
Uid = (uint)uid
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Friend;
|
||||
|
||||
public class PacketSyncDeleteFriendScNotify : BasePacket
|
||||
{
|
||||
public PacketSyncDeleteFriendScNotify(int uid)
|
||||
: base(CmdIds.SyncDeleteFriendScNotify)
|
||||
{
|
||||
var proto = new SyncDeleteFriendScNotify
|
||||
{
|
||||
Uid = (uint)uid
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
}
|
||||
@@ -18,8 +18,6 @@ public class PacketSyncHandleFriendScNotify : BasePacket
|
||||
IsAccept = isAccept,
|
||||
FriendInfo = new FriendSimpleInfo
|
||||
{
|
||||
IsMarked = false,
|
||||
RemarkName = "",
|
||||
PlayerInfo = playerData.ToSimpleProto(status)
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user