Fixed inability to connect via port

Added Scrollbar to choose Relic with more than 4 players
Added custom player name feature, Now host will synchronize client names
This commit is contained in:
kmyuhkyuk
2026-03-15 08:06:26 +08:00
parent 24a06e3a00
commit 6ff7a9dc2b
25 changed files with 785 additions and 107 deletions
@@ -0,0 +1,25 @@
using MegaCrit.Sts2.Core.Logging;
using MegaCrit.Sts2.Core.Multiplayer.Serialization;
using MegaCrit.Sts2.Core.Multiplayer.Transport;
namespace SlayTheSpire2.LAN.Multiplayer.Models
{
public struct LanPlayerNameRequestMessage : INetMessage
{
public string playerName;
public bool ShouldBroadcast => false;
public NetTransferMode Mode => NetTransferMode.Reliable;
public LogLevel LogLevel => LogLevel.Info;
public void Serialize(PacketWriter writer)
{
writer.WriteString(playerName);
}
public void Deserialize(PacketReader reader)
{
playerName = reader.ReadString();
}
}
}
@@ -0,0 +1,35 @@
using MegaCrit.Sts2.Core.Logging;
using MegaCrit.Sts2.Core.Multiplayer.Serialization;
using MegaCrit.Sts2.Core.Multiplayer.Transport;
namespace SlayTheSpire2.LAN.Multiplayer.Models
{
public struct LanPlayerNameResponseMessage : INetMessage
{
public LanPlayerNames playerNameDictionary;
public bool ShouldBroadcast => false;
public NetTransferMode Mode => NetTransferMode.Reliable;
public LogLevel LogLevel => LogLevel.Info;
public void Serialize(PacketWriter writer)
{
writer.WriteInt(playerNameDictionary.Count);
foreach (var keyValue in playerNameDictionary)
{
writer.WriteULong(keyValue.Key);
writer.WriteString(keyValue.Value);
}
}
public void Deserialize(PacketReader reader)
{
var count = reader.ReadInt();
playerNameDictionary = new LanPlayerNames();
for (var i = 0; i < count; i++)
{
playerNameDictionary.Add(reader.ReadULong(), reader.ReadString());
}
}
}
}
@@ -0,0 +1,9 @@
using System.Text.Json.Serialization;
namespace SlayTheSpire2.LAN.Multiplayer.Models
{
[JsonSerializable(typeof(LanPlayerNames))]
public partial class LanPlayerNamesContext : JsonSerializerContext;
public class LanPlayerNames : Dictionary<ulong, string>;
}
@@ -1,5 +1,6 @@
using System.Text.Json.Serialization;
using MegaCrit.Sts2.Core.Saves;
using Steamworks;
namespace SlayTheSpire2.LAN.Multiplayer.Models
{
@@ -12,6 +13,7 @@ namespace SlayTheSpire2.LAN.Multiplayer.Models
[JsonPropertyName("host_max_players")] public int HostMaxPlayers { get; set; } = 4;
[JsonPropertyName("ip_address")] public string IPAddress { get; set; } = "127.0.0.1";
[JsonPropertyName("net_id")] public ulong NetId { get; set; } = 1000u;
[JsonPropertyName("player_name")] public string PlayerName { get; set; } = SteamFriends.GetPersonaName();
public int SchemaVersion { get; set; }
}