From 816fb39441866409768113606265e086e2eff6d7 Mon Sep 17 00:00:00 2001 From: Somebody Date: Wed, 10 Jul 2024 22:11:04 +0800 Subject: [PATCH] Better MuipServer --- Common/Enums/PlayerStatusEnum.cs | 17 +++++++- GameServer/Game/Rogue/BaseRogueInstance.cs | 5 ++- ...tSyncRogueCommonVirtualItemInfoScNotify.cs | 28 +++++++++++++ Program/Program/EntryPoint.cs | 33 ++++++++++++++- WebServer/Response/InformationResponse.cs | 9 +++++ WebServer/Server/MuipManager.cs | 40 ++++++++++++++----- 6 files changed, 118 insertions(+), 14 deletions(-) create mode 100644 GameServer/Server/Packet/Send/Rogue/PacketSyncRogueCommonVirtualItemInfoScNotify.cs diff --git a/Common/Enums/PlayerStatusEnum.cs b/Common/Enums/PlayerStatusEnum.cs index ee406ac5..47dd61ab 100644 --- a/Common/Enums/PlayerStatusEnum.cs +++ b/Common/Enums/PlayerStatusEnum.cs @@ -11,7 +11,20 @@ namespace EggLink.DanhengServer.Enums Offline = 0, Explore = 1, Rogue = 2, - Challenge = 3, - Mission = 4 + ChessRogue = 3, + ChessRogueNous = 4, + RogueTourn = 5, + Challenge = 6, + ChallengeStory = 7, + ChallengeBoss = 8, + Raid = 9, + StoryLine = 10, + Activity = 11, + } + + public enum PlayerSubStatusEnum + { + None = 0, + Battle = 1 } } diff --git a/GameServer/Game/Rogue/BaseRogueInstance.cs b/GameServer/Game/Rogue/BaseRogueInstance.cs index a66ebb68..4b73388b 100644 --- a/GameServer/Game/Rogue/BaseRogueInstance.cs +++ b/GameServer/Game/Rogue/BaseRogueInstance.cs @@ -11,6 +11,7 @@ using EggLink.DanhengServer.Util; using EggLink.DanhengServer.Server.Packet.Send.Scene; using EggLink.DanhengServer.Game.Battle; using EggLink.DanhengServer.Game.Scene.Entity; +using EggLink.DanhengServer.GameServer.Server.Packet.Send.Rogue; namespace EggLink.DanhengServer.Game.Rogue { @@ -210,7 +211,7 @@ namespace EggLink.DanhengServer.Game.Rogue public void CostMoney(int amount, RogueActionDisplayType displayType = RogueActionDisplayType.RogueCommonActionResultDisplayTypeNone) { CurMoney -= amount; - Player.SendPacket(new PacketSyncRogueVirtualItemScNotify(this)); + Player.SendPacket(new PacketSyncRogueCommonVirtualItemInfoScNotify(this)); Player.SendPacket(new PacketSyncRogueCommonActionResultScNotify(RogueVersionId, new RogueCommonActionResult() { @@ -229,7 +230,7 @@ namespace EggLink.DanhengServer.Game.Rogue public void GainMoney(int amount, int displayType = 2, RogueActionDisplayType display = RogueActionDisplayType.RogueCommonActionResultDisplayTypeNone) { CurMoney += amount; - Player.SendPacket(new PacketSyncRogueVirtualItemScNotify(this)); + Player.SendPacket(new PacketSyncRogueCommonVirtualItemInfoScNotify(this)); Player.SendPacket(new PacketScenePlaneEventScNotify(new Database.Inventory.ItemData() { ItemId = 31, diff --git a/GameServer/Server/Packet/Send/Rogue/PacketSyncRogueCommonVirtualItemInfoScNotify.cs b/GameServer/Server/Packet/Send/Rogue/PacketSyncRogueCommonVirtualItemInfoScNotify.cs new file mode 100644 index 00000000..a539a169 --- /dev/null +++ b/GameServer/Server/Packet/Send/Rogue/PacketSyncRogueCommonVirtualItemInfoScNotify.cs @@ -0,0 +1,28 @@ +using EggLink.DanhengServer.Game.Rogue; +using EggLink.DanhengServer.Proto; +using EggLink.DanhengServer.Server.Packet; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Rogue +{ + public class PacketSyncRogueCommonVirtualItemInfoScNotify : BasePacket + { + public PacketSyncRogueCommonVirtualItemInfoScNotify(BaseRogueInstance instance) : base(CmdIds.SyncRogueCommonVirtualItemInfoScNotify) + { + var proto = new SyncRogueCommonVirtualItemInfoScNotify + { + CommonItemInfo = { new RogueCommonVirtualItemInfo() + { + VirtualItemId = 31, + VirtualItemNum = (uint)instance.CurMoney, + } } + }; + + SetData(proto); + } + } +} diff --git a/Program/Program/EntryPoint.cs b/Program/Program/EntryPoint.cs index f3b9c58c..4aa03e8f 100644 --- a/Program/Program/EntryPoint.cs +++ b/Program/Program/EntryPoint.cs @@ -150,8 +150,9 @@ namespace EggLink.DanhengServer.Program } } }; - MuipManager.OnGetPlayerStatus += (int uid, out PlayerStatusEnum status) => + MuipManager.OnGetPlayerStatus += (int uid, out PlayerStatusEnum status, out PlayerSubStatusEnum subStatus) => { + subStatus = PlayerSubStatusEnum.None; foreach (var con in Listener.Connections.Values) { if (con.Player != null && con.Player.Uid == uid) @@ -159,15 +160,45 @@ namespace EggLink.DanhengServer.Program if (con.Player.RogueManager?.GetRogueInstance() != null) { status = PlayerStatusEnum.Rogue; + if (con.Player.ChessRogueManager?.RogueInstance?.AreaExcel.RogueVersionId == 202) + { + status = PlayerStatusEnum.ChessRogueNous; + } + else if (con.Player.ChessRogueManager?.RogueInstance?.AreaExcel.RogueVersionId == 201) + { + status = PlayerStatusEnum.ChessRogue; + } } else if (con.Player.ChallengeManager?.ChallengeInstance != null) { status = PlayerStatusEnum.Challenge; + if (con.Player.ChallengeManager.ChallengeInstance.Excel.StoryExcel != null) + { + status = PlayerStatusEnum.ChallengeStory; + } + else if (con.Player.ChallengeManager.ChallengeInstance.Excel.BossExcel != null) + { + status = PlayerStatusEnum.ChallengeBoss; + } + } + else if (con.Player.RaidManager?.RaidData.CurRaidId != 0) + { + status = PlayerStatusEnum.Raid; + } + else if (con.Player.StoryLineManager?.StoryLineData.CurStoryLineId != 0) + { + status = PlayerStatusEnum.StoryLine; } else { status = PlayerStatusEnum.Explore; } + + if (con.Player.BattleInstance != null) + { + subStatus = PlayerSubStatusEnum.Battle; + } + return; } } diff --git a/WebServer/Response/InformationResponse.cs b/WebServer/Response/InformationResponse.cs index 05c40fd7..c70cb089 100644 --- a/WebServer/Response/InformationResponse.cs +++ b/WebServer/Response/InformationResponse.cs @@ -35,6 +35,8 @@ namespace EggLink.DanhengServer.WebServer.Response public string Name { get; set; } = ""; public string Signature { get; set; } = ""; public int HeadIconId { get; set; } + public int Credit { get; set; } + public int Jade { get; set; } // Scene info public int CurPlaneId { get; set; } @@ -44,6 +46,10 @@ namespace EggLink.DanhengServer.WebServer.Response [JsonConverter(typeof(StringEnumConverter))] [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.JsonStringEnumConverter))] public PlayerStatusEnum PlayerStatus { get; set; } = PlayerStatusEnum.Explore; + + [JsonConverter(typeof(StringEnumConverter))] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.JsonStringEnumConverter))] + public PlayerSubStatusEnum PlayerSubStatus { get; set; } = PlayerSubStatusEnum.None; public int Stamina { get; set; } = 0; public int RecoveryStamina { get; set; } = 0; public List AssistAvatarList { get; set; } = []; @@ -55,5 +61,8 @@ namespace EggLink.DanhengServer.WebServer.Response public List AcceptedMainMissionIdList { get; set; } = []; public List AcceptedSubMissionIdList { get; set; } = []; + // Lineup info + public List LineupBaseAvatarIdList { get; set; } = []; + } } diff --git a/WebServer/Server/MuipManager.cs b/WebServer/Server/MuipManager.cs index 4c572d45..b9140364 100644 --- a/WebServer/Server/MuipManager.cs +++ b/WebServer/Server/MuipManager.cs @@ -15,6 +15,8 @@ using EggLink.DanhengServer.Database.Avatar; using EggLink.DanhengServer.Database.Mission; using EggLink.DanhengServer.Enums; using Spectre.Console; +using EggLink.DanhengServer.Database.Lineup; +using EggLink.DanhengServer.Data; namespace EggLink.DanhengServer.WebServer.Server { @@ -24,7 +26,7 @@ namespace EggLink.DanhengServer.WebServer.Server public static event ExecuteCommandDelegate? OnExecuteCommand; public delegate void ServerInformationDelegate(Dictionary resultData); public static event ServerInformationDelegate? OnGetServerInformation; - public delegate void GetPlayerStatusDelegate(int uid, out PlayerStatusEnum status); + public delegate void GetPlayerStatusDelegate(int uid, out PlayerStatusEnum status, out PlayerSubStatusEnum subStatus); public static event GetPlayerStatusDelegate? OnGetPlayerStatus; public static string RsaPublicKey { get; private set; } = ""; @@ -187,22 +189,38 @@ namespace EggLink.DanhengServer.WebServer.Server } var result = new Dictionary(); - var sync = Task.Run(() => OnGetServerInformation?.Invoke(result)); - - sync.Wait(); - - result.TryGetValue(uid, out var player); - if (player == null) return new(2, "Player not exist or is offline!", null); + var player = DatabaseHelper.Instance?.GetInstance(uid); + if (player == null) return new(2, "Player not exist!", null); var status = PlayerStatusEnum.Offline; + var subStatus = PlayerSubStatusEnum.None; - var statusSync = Task.Run(() => OnGetPlayerStatus?.Invoke(player.Uid, out status)); + var statusSync = Task.Run(() => OnGetPlayerStatus?.Invoke(player.Uid, out status, out subStatus)); statusSync.Wait(); var avatarData = DatabaseHelper.Instance!.GetInstance(player.Uid)!; + var lineupData = DatabaseHelper.Instance!.GetInstance(player.Uid)!; var missionData = DatabaseHelper.Instance!.GetInstance(player.Uid)!; + var curLineupAvatars = new List(); + var index = lineupData.CurExtraLineup > 0 ? lineupData.CurExtraLineup : lineupData.CurLineup; + + lineupData.Lineups.TryGetValue(index, out var lineup); + + if (lineup != null) + { + foreach (var avatar in lineup.BaseAvatars ?? []) + { + GameData.AvatarConfigData.TryGetValue(avatar.BaseAvatarId, out var excel); + if (excel != null) + { + curLineupAvatars.Add(avatar.BaseAvatarId); + } + } + } + + return new(0, "Success", new() { Uid = player.Uid, @@ -219,7 +237,11 @@ namespace EggLink.DanhengServer.WebServer.Server AcceptedMainMissionIdList = missionData.RunningMainMissionIds, FinishedMainMissionIdList = missionData.FinishedMainMissionIds, FinishedSubMissionIdList = missionData.FinishedSubMissionIds, - PlayerStatus = status + PlayerStatus = status, + PlayerSubStatus = subStatus, + Credit = player.Scoin, + Jade = player.Hcoin, + LineupBaseAvatarIdList = curLineupAvatars }); } return new(3, "Session not found!", null);