namespace ReboundEmulator.Core.Rooms.GameRooms { [GameRoom("lottso2")] public class Lottso2Room : IGameRoom { public Task OnGameJoinAsync(Room room, Player player) { // TODO - implement multiplayer return Task.CompletedTask; } public Task OnMessageAsync(Room room, Player player, string op, Dictionary msg) { return op switch { "ext.over" => HandleResults(player, msg), _ => Task.FromResult(false), }; } private static async Task HandleResults(Player player, Dictionary msg) { // determine jackpot win msg.TryGetValue("gm.won", out var won); bool isJackpot = won == "true"; // Lottso Deluxe is weird and takes a sec to want to take in results await Task.Delay(TimeSpan.FromSeconds(1)); // 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; } }