fix: let `tag start` also send the new role to the actual players

Broadcast() with a sender never sends the packet to the sender.
Therefore only other players got informed about the new role.
But never the actual player that is supposed to change to that role.
This commit is contained in:
Robin C. Ladiges 2024-06-21 22:07:36 +02:00 committed by Aubrey
parent fb55820e2b
commit d69d9b8296
1 changed files with 14 additions and 9 deletions

View File

@ -497,17 +497,22 @@ CommandHandler.RegisterCommand("tag", args => {
int realTime = 1000 * time;
await Task.Delay(realTime);
await Task.WhenAll(
Parallel.ForEachAsync(seekers, async (seeker, _) =>
await server.Broadcast(new TagPacket {
Parallel.ForEachAsync(seekers, async (seeker, _) => {
TagPacket packet = new TagPacket {
UpdateType = TagPacket.TagUpdate.State,
IsIt = true
}, seeker)),
Parallel.ForEachAsync(server.Clients.Except(seekers), async (hider, _) =>
await server.Broadcast(new TagPacket {
IsIt = true,
};
await server.Broadcast(packet, seeker);
await seeker.Send(packet);
}),
Parallel.ForEachAsync(server.Clients.Except(seekers), async (hider, _) => {
TagPacket packet = new TagPacket {
UpdateType = TagPacket.TagUpdate.State,
IsIt = false
}, hider)
)
IsIt = false,
};
await server.Broadcast(packet, hider);
await hider.Send(packet);
})
);
consoleLogger.Info($"Started game with seekers {string.Join(", ", seekerNames)}");
});