Better MuipServer

This commit is contained in:
Somebody
2024-07-10 22:11:04 +08:00
parent 1ac92def6c
commit 816fb39441
6 changed files with 118 additions and 14 deletions

View File

@@ -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
}
}

View File

@@ -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,

View File

@@ -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);
}
}
}

View File

@@ -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;
}
}

View File

@@ -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<int> AssistAvatarList { get; set; } = [];
@@ -55,5 +61,8 @@ namespace EggLink.DanhengServer.WebServer.Response
public List<int> AcceptedMainMissionIdList { get; set; } = [];
public List<int> AcceptedSubMissionIdList { get; set; } = [];
// Lineup info
public List<int> LineupBaseAvatarIdList { get; set; } = [];
}
}

View File

@@ -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<int, PlayerData> 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<int, PlayerData>();
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<PlayerData>(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<AvatarData>(player.Uid)!;
var lineupData = DatabaseHelper.Instance!.GetInstance<LineupData>(player.Uid)!;
var missionData = DatabaseHelper.Instance!.GetInstance<MissionData>(player.Uid)!;
var curLineupAvatars = new List<int>();
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);