mirror of
https://github.com/MikuLeaks/MikuSB.git
synced 2026-06-04 21:13:59 +00:00
add lineup manager
This commit is contained in:
31
Common/Database/Lineup/LineupData.cs
Normal file
31
Common/Database/Lineup/LineupData.cs
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
using SqlSugar;
|
||||||
|
|
||||||
|
namespace MikuSB.Database.Lineup;
|
||||||
|
|
||||||
|
[SugarTable("lineup_data")]
|
||||||
|
public class LineupData : BaseDatabaseDataHelper
|
||||||
|
{
|
||||||
|
[SugarColumn(IsJson = true)] public Dictionary<int, LineupDataInfo> LineupInfo { get; set; } = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
public class LineupDataInfo
|
||||||
|
{
|
||||||
|
public uint Index { get; set; }
|
||||||
|
public string Name { get; set; } = "";
|
||||||
|
public uint Member1 { get; set; }
|
||||||
|
public uint Member2 { get; set; }
|
||||||
|
public uint Member3 { get; set; }
|
||||||
|
|
||||||
|
public Proto.Lineup ToProto()
|
||||||
|
{
|
||||||
|
var proto = new Proto.Lineup
|
||||||
|
{
|
||||||
|
Index = Index,
|
||||||
|
Name = Name,
|
||||||
|
Member1 = Member1,
|
||||||
|
Member2 = Member2,
|
||||||
|
Member3 = Member3,
|
||||||
|
};
|
||||||
|
return proto;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@ public class PlayerGameData : BaseDatabaseDataHelper
|
|||||||
public long RegisterTime { get; set; } = Extensions.GetUnixSec();
|
public long RegisterTime { get; set; } = Extensions.GetUnixSec();
|
||||||
public long LastActiveTime { get; set; }
|
public long LastActiveTime { get; set; }
|
||||||
public Sex Gender { get; set; } = Sex.Female;
|
public Sex Gender { get; set; } = Sex.Female;
|
||||||
|
public uint Vigor { get; set; } = 240;
|
||||||
[SugarColumn(IsJson = true)] public List<PlayerAttr> Attrs { get; set; } = [];
|
[SugarColumn(IsJson = true)] public List<PlayerAttr> Attrs { get; set; } = [];
|
||||||
[SugarColumn(IsJson = true)] public List<ulong> ShowItems { get; set; } = [];
|
[SugarColumn(IsJson = true)] public List<ulong> ShowItems { get; set; } = [];
|
||||||
|
|
||||||
|
|||||||
29
GameServer/Game/Lineup/LineupManager.cs
Normal file
29
GameServer/Game/Lineup/LineupManager.cs
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
using MikuSB.Database;
|
||||||
|
using MikuSB.GameServer.Game.Player;
|
||||||
|
using MikuSB.Database.Lineup;
|
||||||
|
|
||||||
|
namespace MikuSB.GameServer.Game.Lineup;
|
||||||
|
|
||||||
|
public class LineupManager(PlayerInstance player) : BasePlayerManager(player)
|
||||||
|
{
|
||||||
|
public LineupData LineupData { get; } = DatabaseHelper.GetInstanceOrCreateNew<LineupData>(player.Uid);
|
||||||
|
|
||||||
|
public async ValueTask<LineupDataInfo?> UpdateLineup(int lineupId, uint member1, uint member2, uint member3)
|
||||||
|
{
|
||||||
|
if (!LineupData.LineupInfo.TryGetValue(lineupId, out var formation))
|
||||||
|
{
|
||||||
|
formation = new LineupDataInfo
|
||||||
|
{
|
||||||
|
Index = (uint)lineupId,
|
||||||
|
Name = lineupId.ToString()
|
||||||
|
};
|
||||||
|
|
||||||
|
LineupData.LineupInfo[lineupId] = formation;
|
||||||
|
}
|
||||||
|
|
||||||
|
formation.Member1 = member1;
|
||||||
|
formation.Member2 = member2;
|
||||||
|
formation.Member3 = member3;
|
||||||
|
return formation;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@ using MikuSB.Enums.Item;
|
|||||||
using MikuSB.GameServer.Game.Character;
|
using MikuSB.GameServer.Game.Character;
|
||||||
using MikuSB.GameServer.Game.Inventory;
|
using MikuSB.GameServer.Game.Inventory;
|
||||||
using MikuSB.GameServer.Server;
|
using MikuSB.GameServer.Server;
|
||||||
using MikuSB.Proto;
|
using MikuSB.GameServer.Game.Lineup;
|
||||||
using MikuSB.TcpSharp;
|
using MikuSB.TcpSharp;
|
||||||
using MikuSB.Util.Extensions;
|
using MikuSB.Util.Extensions;
|
||||||
|
|
||||||
@@ -29,6 +29,7 @@ public class PlayerInstance(PlayerGameData data)
|
|||||||
public PlayerGameData Data { get; set; } = data;
|
public PlayerGameData Data { get; set; } = data;
|
||||||
public CharacterManager CharacterManager { get; set; } = null!;
|
public CharacterManager CharacterManager { get; set; } = null!;
|
||||||
public InventoryManager InventoryManager { get; set; } = null!;
|
public InventoryManager InventoryManager { get; set; } = null!;
|
||||||
|
public LineupManager LineupManager { get; set; } = null!;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -65,6 +66,14 @@ public class PlayerInstance(PlayerGameData data)
|
|||||||
await CharacterManager.AddCharacter((ItemTypeEnum)card.Genre, card.Detail, card.Particular, card.Level);
|
await CharacterManager.AddCharacter((ItemTypeEnum)card.Genre, card.Detail, card.Particular, card.Level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var selected = CharacterManager.CharacterData.Characters
|
||||||
|
.OrderBy(_ => Guid.NewGuid())
|
||||||
|
.Take(3)
|
||||||
|
.Select(x => x.Guid)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
await LineupManager.UpdateLineup(1, selected[0], selected[1], selected[2]);
|
||||||
|
|
||||||
var bootstrapAttrs = BuildLobbyBootstrapAttrs();
|
var bootstrapAttrs = BuildLobbyBootstrapAttrs();
|
||||||
var existingAttrs = Data.Attrs
|
var existingAttrs = Data.Attrs
|
||||||
.ToDictionary(x => (x.Gid, x.Sid));
|
.ToDictionary(x => (x.Gid, x.Sid));
|
||||||
@@ -103,6 +112,7 @@ public class PlayerInstance(PlayerGameData data)
|
|||||||
Uid = Data.Uid;
|
Uid = Data.Uid;
|
||||||
Data.LastActiveTime = Extensions.GetUnixSec();
|
Data.LastActiveTime = Extensions.GetUnixSec();
|
||||||
InventoryManager = new InventoryManager(this);
|
InventoryManager = new InventoryManager(this);
|
||||||
|
LineupManager = new LineupManager(this);
|
||||||
CharacterManager = new CharacterManager(this);
|
CharacterManager = new CharacterManager(this);
|
||||||
|
|
||||||
await Task.CompletedTask;
|
await Task.CompletedTask;
|
||||||
@@ -162,18 +172,8 @@ public class PlayerInstance(PlayerGameData data)
|
|||||||
Name = Data.Name,
|
Name = Data.Name,
|
||||||
Level = Data.Level,
|
Level = Data.Level,
|
||||||
Sex = Data.Gender,
|
Sex = Data.Gender,
|
||||||
Vigor = 240,
|
Vigor = Data.Vigor,
|
||||||
Solutions =
|
Solutions = { LineupManager.LineupData.LineupInfo.Values.Select(x => x.ToProto()) },
|
||||||
{
|
|
||||||
new Lineup // TODO Lineup Manager
|
|
||||||
{
|
|
||||||
Index = 1,
|
|
||||||
Name = "Default",
|
|
||||||
Member1 = 1,
|
|
||||||
Member2 = 2,
|
|
||||||
Member3 = 3
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
foreach (var item in InventoryManager.InventoryData.Items.Values) proto.Items.Add(item.ToProto());
|
foreach (var item in InventoryManager.InventoryData.Items.Values) proto.Items.Add(item.ToProto());
|
||||||
|
|||||||
@@ -1,10 +1,42 @@
|
|||||||
namespace MikuSB.GameServer.Server.CallGS.Handlers.Lineup;
|
using MikuSB.Proto;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Lineup;
|
||||||
|
|
||||||
[CallGSApi("Lineup_Update")]
|
[CallGSApi("Lineup_Update")]
|
||||||
public class Lineup_Update : ICallGSHandler
|
public class Lineup_Update : ICallGSHandler
|
||||||
{
|
{
|
||||||
public async Task Handle(Connection connection, string param, ushort seqNo)
|
public async Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
{
|
{
|
||||||
|
var req = JsonSerializer.Deserialize<LineupUpdateParam>(param);
|
||||||
|
if (req == null)
|
||||||
|
{
|
||||||
|
await CallGSRouter.SendScript(connection, "UpdateLineup", "{}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var formation = await connection.Player!.LineupManager.UpdateLineup(req.Index,req.Member1,req.Member2,req.Member3);
|
||||||
|
if (formation == null)
|
||||||
|
{
|
||||||
|
await CallGSRouter.SendScript(connection, "UpdateLineup", "{}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var rsp = new NtfSyncLineup
|
||||||
|
{
|
||||||
|
Lineup = formation.ToProto()
|
||||||
|
};
|
||||||
|
await connection.SendPacket(CmdIds.NtfSyncLineup, rsp);
|
||||||
await CallGSRouter.SendScript(connection, "UpdateLineup", "{}");
|
await CallGSRouter.SendScript(connection, "UpdateLineup", "{}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal sealed class LineupUpdateParam
|
||||||
|
{
|
||||||
|
[JsonPropertyName("name")] public string Name { get; set; } = "";
|
||||||
|
[JsonPropertyName("index")] public int Index { get; set; }
|
||||||
|
[JsonPropertyName("member1")] public uint Member1 { get; set; }
|
||||||
|
[JsonPropertyName("member2")] public uint Member2 { get; set; }
|
||||||
|
[JsonPropertyName("member3")] public uint Member3 { get; set; }
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user