Rework How Room OPs Are Handled Per Room (if the game server itself isn't handling it, just send it to the room every time)
69 lines
2.3 KiB
C#
69 lines
2.3 KiB
C#
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<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";
|
|
|
|
// Lottso Deluxe is weird and takes a sec to want to take in results
|
|
await Task.Delay(TimeSpan.FromSeconds(8));
|
|
|
|
// 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;
|
|
}
|
|
}
|