feat: add minigame room player service

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ud18010
2026-07-29 12:24:58 +08:00
co-authored by Claude Opus 4.8
parent 053a95b4fb
commit 31afce6882
13 changed files with 1878 additions and 10 deletions
@@ -34,8 +34,24 @@ namespace XWorld.Framework.Tests
SelfPlayerId = 1001,
Players =
{
new PlayerInfo { PlayerId = 1001, Name = "Alice", IsAI = false },
new PlayerInfo { PlayerId = -1, Name = "AI", IsAI = true },
new PlayerInfo
{
PlayerId = 1001,
Name = "Alice",
IsAI = false,
Level = 12,
AppearanceType = 3,
AvatarId = 77,
},
new PlayerInfo
{
PlayerId = -1,
Name = "AI",
IsAI = true,
Level = 1,
AppearanceType = 0,
AvatarId = 0,
},
},
};
var d = MatchFoundMsg.Decode(m.Encode());
@@ -46,8 +62,13 @@ namespace XWorld.Framework.Tests
Assert.Equal(1001, d.Players[0].PlayerId);
Assert.Equal("Alice", d.Players[0].Name);
Assert.False(d.Players[0].IsAI);
Assert.Equal(12, d.Players[0].Level);
Assert.Equal(3, d.Players[0].AppearanceType);
Assert.Equal(77, d.Players[0].AvatarId);
Assert.Equal(-1, d.Players[1].PlayerId);
Assert.Equal("AI", d.Players[1].Name);
Assert.True(d.Players[1].IsAI);
Assert.Equal(1, d.Players[1].Level);
}
[Fact]
@@ -169,5 +190,35 @@ namespace XWorld.Framework.Tests
Assert.NotNull(d.Players);
Assert.Empty(d.Players);
}
[Fact]
public void MatchFound_DecodesLegacyPlayersWithoutDisplayFields()
{
var w = new PacketWriter();
w.WriteString("legacy-room");
w.WriteVarInt(1);
w.WriteVarInt(1001);
w.WriteVarUInt(2);
w.WriteVarInt(1001);
w.WriteString("LegacyAlice");
w.WriteBool(false);
w.WriteVarInt(-1);
w.WriteString("AI");
w.WriteBool(true);
MatchFoundMsg d = MatchFoundMsg.Decode(w.ToArray());
Assert.Equal("legacy-room", d.RoomId);
Assert.Equal(2, d.Players.Count);
Assert.Equal(1001, d.Players[0].PlayerId);
Assert.Equal("LegacyAlice", d.Players[0].Name);
Assert.False(d.Players[0].IsAI);
Assert.Equal(0, d.Players[0].Level);
Assert.Equal(0, d.Players[0].AppearanceType);
Assert.Equal(0, d.Players[0].AvatarId);
Assert.Equal(-1, d.Players[1].PlayerId);
Assert.Equal("AI", d.Players[1].Name);
Assert.True(d.Players[1].IsAI);
}
}
}