initial commit

This commit is contained in:
Kamal Tufekcic 2026-07-05 12:14:39 +03:00
commit 2d966b8198
28 changed files with 2901 additions and 0 deletions

62
Pages/Index.cshtml Normal file
View file

@ -0,0 +1,62 @@
@page
@using CsWeb.Services
@model IndexModel
@{
ViewData["Title"] = "";
}
@section Meta {
<meta property="og:title" content="Outnumbered — CS2 PvE RPG servers" />
<meta property="og:description" content="@Model.ServersUp servers up, @Model.HumansOnline player(s) in game. Level up, prestige, fight the horde — TDM, Gun Game, Survival." />
<meta property="og:type" content="website" />
}
<h1>Outnumbered</h1>
<p>
A players-vs-bots RPG mod for CS2: you and a few humans versus a scaling horde. Kill for XP, level up,
spend points on permanent stats, prestige for keeps — across three modes. No matchmaking, no ranks lost,
no teenagers screaming into your ear. Pick a server and shoot something.
</p>
<p class="muted small">
These servers run <a href="/faq">deliberately without VAC</a> (it's a PvE mod that rewrites half the game).
Your account is safe — see the FAQ.
</p>
@if (Model.Servers.Count == 0)
{
<div class="notice err">No servers found. If you just deployed, the game instances may still be starting.</div>
}
<div class="cards">
@foreach (var (id, s) in Model.Servers)
{
var d = s.Data;
<div class="card">
<div class="row">
<h3><a href="/s/@id">@(d?.Hostname is { Length: > 0 } h ? h : id)</a></h3>
@if (!s.Online) { <span class="badge off">offline</span> }
else { <span class="badge mode">@Fmt.ModeName(d?.Mode)</span> }
</div>
@if (d is not null)
{
<div class="row">
<span class="muted">@d.Map</span>
<span>@d.Humans.Count/@d.MaxHumans players · @d.Bots bots</span>
</div>
@if (Fmt.ExtraLine(d) is { Length: > 0 } extra)
{
<div class="muted small">@extra</div>
}
@if (d.Port > 0)
{
<div class="row">
<span class="connect">connect @Model.Fleet.PublicHost:@d.Port</span>
<a class="btn" href="steam://connect/@Model.Fleet.PublicHost:@d.Port">Join</a>
</div>
}
}
else
{
<div class="muted small">@Fmt.Age(s)</div>
}
</div>
}
</div>