mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-02 20:26:03 +08:00
Better MuipServer
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; } = [];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user