Moonbase b5c9f3dd08 Move ParseInlineMap To TCPProtocol
Implement Lottso! Deluxe Singleplayer Mode Support
2026-10-07 13:21:55 -07:00

66 lines
2.2 KiB
C#

namespace NotPogo.Core.Rooms.GameRooms
{
[GameRoom("lottso2")]
public class Lottso2Room : IGameRoom
{
public Task OnGameJoinAsync(Room room, Player player)
{
// TODO - implement multiplayer
return Task.CompletedTask;
}
public Task<bool> OnMessageAsync(Room room, Player player, string op, Dictionary<string, string> msg)
{
return op switch
{
"ext.over" => HandleResults(player, msg),
_ => Task.FromResult(false),
};
}
private static async Task<bool> HandleResults(Player player, Dictionary<string, string> msg)
{
// determine jackpot win
msg.TryGetValue("gm.won", out var won);
bool isJackpot = won == "true";
// send ext.rslt
await player.SendAsync(
("msg.op", "ext.rslt"),
("tokb", "9999"),
("tokn.won", TCPProtocol.ParseInlineMap(msg["tokn.won"])["allt"].ToString()),
("spin.rslt", isJackpot ? "2" : "0"),
("spin.tokn", isJackpot ? Random.Shared.Next(0, 500).ToString() : "0"),
("inst.desc", ""),
("jpot", "0"),
("pzpm", ""),
("bmlt", "1"),
("bspo", "0"),
("xpup", "0")
);
// CDL games require more for the results screen
await player.SendAsync(
("msg.op", "ext.rank"),
("rank.ord", "1"), ("rank.nam", "Rookie"), ("rank.pts", "0"),
("rank.nord", "2"), ("rank.nnam", "Novice"), ("rank.npts", "100"),
("rank.ppts", "0"), ("rank.incr", "0"), ("rank.new", "false")
);
await player.SendAsync(
("msg.op", "cdl.awar"),
("nava", "false"), ("ilvl", "0"),
("nbad", "false"), ("badg", "0"),
("ainf", "")
);
return true;
}
public Task OnPlayerJoinedAsync(Room room, Player player) => Task.CompletedTask;
public Task OnPlayerLeftAsync(Room room, Player player) => Task.CompletedTask;
}
}