- Darts: native 500-point match against Max with sway/fatigue mouse aim, parabolic throw camera, raster arm animations, and 16 camera-relative flying dart views - AI Observer: autonomous spectator mode for Hold'em, Blackjack, Durak, and Billiards with profile isolation and playback controls - Fortune Session: raster sprite packs, mist/orb animations, tarot divination spreads, and pack tools - Hall Integration: wall dartboard in lounge, observer terminal dispatch, and bot turn hooks - Packaging & Verification: updated installer streaming hash, synchronized launcher, passing check suites and release smoke checks
65 lines
2.3 KiB
C#
65 lines
2.3 KiB
C#
using System;
|
||
using System.Diagnostics;
|
||
using System.IO;
|
||
using System.Security.Cryptography;
|
||
using System.Windows.Forms;
|
||
|
||
namespace AssemblerCasinoLauncher
|
||
{
|
||
static class Program
|
||
{
|
||
const string ExpectedPokerSha256 = "C3D857FDBF7597C976B16C5021D7F07951628E54F86FF2B7BB53F8A83FDE11CA";
|
||
|
||
[STAThread]
|
||
static void Main()
|
||
{
|
||
var root = AppDomain.CurrentDomain.BaseDirectory;
|
||
// The installed launcher is at the root; developer builds live in dist.
|
||
if (!File.Exists(Path.Combine(root, "bin", "poker.exe")))
|
||
{
|
||
var parent = Directory.GetParent(root.TrimEnd(Path.DirectorySeparatorChar));
|
||
if (parent != null && Directory.Exists(Path.Combine(parent.FullName, "assets")) &&
|
||
File.Exists(Path.Combine(parent.FullName, "bin", "poker.exe")))
|
||
root = parent.FullName;
|
||
}
|
||
var game = Path.Combine(root, "bin", "poker.exe");
|
||
if (!File.Exists(game))
|
||
{
|
||
MessageBox.Show("bin\\poker.exe не найден рядом с лаунчером.", "Assembler Casino", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
return;
|
||
}
|
||
|
||
if (!VerifyGame(game))
|
||
{
|
||
MessageBox.Show("bin\\poker.exe был изменен или поврежден. Запуск остановлен.", "Assembler Casino", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
return;
|
||
}
|
||
|
||
Process.Start(new ProcessStartInfo
|
||
{
|
||
FileName = game,
|
||
WorkingDirectory = root,
|
||
UseShellExecute = false
|
||
});
|
||
}
|
||
|
||
static bool VerifyGame(string gamePath)
|
||
{
|
||
try
|
||
{
|
||
using (var sha = SHA256.Create())
|
||
using (var stream = File.OpenRead(gamePath))
|
||
{
|
||
var actual = BitConverter.ToString(sha.ComputeHash(stream)).Replace("-", "");
|
||
return actual.Equals(ExpectedPokerSha256, StringComparison.OrdinalIgnoreCase);
|
||
}
|
||
}
|
||
catch
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|