RUST PLUGINTerritoryWars
Facepunch shipped the hex territory grid and no game to play on it. This is the game: claim cells, plant a capital, keep your supply lines intact, and hold ground that other factions want.
## The problem
The September wipe put a hex territory grid in vanilla Rust — a hex overlay on the map, 32 faction slots with names and colours, per-cell ownership, contiguous-region counting, save and load. All of it already renders on your players' map screen.
None of it does anything. Cells can only be painted by an admin typing console commands. There is no way to claim, no protection, no scoring, no decay — nothing a player can do with it. Facepunch built the board and shipped no rules.
## The basics
**A faction is your clan, else your vanilla team, else you on your own.** Nothing to sign up for, and each of those three sources is a switch you can turn off.
**Stand in a hex to take it.** A capture starts when the cell is neutral or enemy-held, no living enemy is inside it, and it borders a cell you already own. A faction with no land anywhere gets one free beachhead so it can get started.
**More people is faster**, up to a cap you set. Walk away and progress drains back down.
**An enemy walking in stops you.** By default their arrival wipes your progress; one setting makes it freeze instead.
**Holding pays.** Every owned cell earns points every minute, and taking one pays a bonus.
**Neglect costs.** A cell nobody from the owning faction stands in for the decay window reverts to neutral.
## Capitals
Every faction plants a capital with `/tw capital`. It is the anchor of everything else:
- A capital costs **three times** the normal capture time to take, so it is the fight worth having
- It carries a map marker and a label on everyone's map, so your enemies know where it is
- Moving it has a cooldown, so nobody dodges an attack by relocating mid-siege
- **Lose it and your whole empire is cut off.** You get a grace window to declare a new one before your cells start rotting
## Supply lines
Owned cells must chain back to your capital. Cut a faction's territory in half and the half that no longer connects is orphaned — it reverts to neutral on a timer, without anyone having to stand there capturing it.
That turns the map into a real front line. Punching through the middle of an empire is worth more than nibbling at its edge, and a defender has something to defend that is not just "every cell at once".
## You cannot hold the whole map
Cells are capped by faction size: a base allowance every faction gets, plus extra per member, up to a hard ceiling. A five-man clan cannot paint the island.
At the cap, taking new ground means giving some up — `/tw abandon` releases the cell you are standing in, on a cooldown so it is a decision rather than a toggle.
Scoring pushes the same way. Cells past your full-value count pay a reduced rate, so sprawl earns less and less, while a cell bordering an enemy faction pays a **frontline multiplier**. The points are where the fighting is.
## Sieges you find out about
When an attacker gets a quarter of the way through taking one of your cells, your faction is told — with a cooldown so a griefer cannot spam your chat by tapping cells.
Repel them and they are locked out of that cell for a while. Take a cell and it is shielded from immediate recapture, so a contested border does not flip every thirty seconds.
## And a reason to own the ground
Harvesting inside your own supplied territory pays a yield multiplier. Territory stops being a scoreboard and starts being where your faction farms.
## Features
- Claim, contest and lose hex cells on the vanilla territory map
- Clans, vanilla teams and solo factions, each independently switchable
- Adjacency rule, beachhead rule, and excluded cells that can never be taken
- Capture blocked in safe zones, and optionally while building blocked
- Multi-player capture speed bonus, with drain when you leave
- Capitals with map markers, labels, a capture multiplier and a move cooldown
- Supply chains, with orphaned cells decaying back to neutral
- Cell caps by faction size, with `/tw abandon` and an abandon cooldown
- Diminishing returns on sprawl, and a frontline multiplier on contested cells
- Gather yield bonus inside your own supplied cells
- Siege alerts, attacker repel lockouts and post-capture shields
- Capture progress bar, position and size configurable
- Standings panel with paging, and optional Steam avatars
- Capture broadcasts, server-wide or only to the factions involved
- Automatic v1 → v2 migration: existing claims get a capital and a claim time
- `tw.selftest` — a full self-check covering capitals, supply, caps, scoring, sieges and the migration, using scratch records it removes afterwards
- Public API for other plugin authors
- Oxide and Carbon
- Clans used when present, not required
## Commands
**Players**
| Command | Does |
|---|---|
| `/tw` | Standings panel — rank, faction, cells, score, your own line and the cell you are in |
| `/tw top` | The same top ten in chat |
| `/tw here` | Cell id, owner, capital status, neighbours you hold, capture cost |
| `/tw capital` | Declare the cell you are standing in as your capital |
| `/tw abandon` | Give up the cell you are standing in |
| `/tw colour #RRGGBB` | Recolour your faction on everyone's map |
**Admin** — console, or in-game with `territorywars.admin`
| Command | Does |
|---|---|
| `tw.createfaction <key> <name> [#RRGGBB]` | Create a faction up front, for event servers |
| `tw.delfaction <key>` | Remove a faction and return its land to neutral |
| `tw.setcell <cell> <faction\|none>` | Paint one cell by hand |
| `tw.setcapital <faction> <cell>` | Set a faction's capital |
| `tw.reset` | Every cell neutral, every faction cleared |
| `tw.selftest` | Run the full self-check |
## Permissions
| Permission | Effect |
|---|---|
| `territorywars.admin` | The `tw.*` console commands from in-game |
| `territorywars.play` | Only checked when the play-permission setting is on. Off by default, so everyone plays |
## Settings worth tuning first
**Hex size in metres** (default 100). Decide this before you open the server: changing it rebuilds the grid and clears every claim. On a 4250 map, 100m gives roughly 1300 cells.
**Seconds one player needs to take a cell** (default 30). Multiply by your hex size to sanity-check it. Push it to 60–120 on a slower server.
**Cell caps** (default 4 base, +2 per member, 24 hard ceiling). This is the setting that decides whether your map is carved up by everyone or owned by one clan.
**Supply chain** (default on). Turning it off removes the front-line mechanic entirely and makes claims independent again.
**Hours a cell survives with no owner inside it** (default 24). Zero disables decay, and the map will fill and stay full.
**Frontline multiplier** (default 2) and **diminishing returns** (full value for 6 cells, 0.4 after). Together these decide whether your server rewards fighting or farming.
## Configuration
```json
{
"Grid: hex size in metres (centre to corner) - changing this rebuilds the grid and clears every claim": 100.0,
"Grid: east/west offset in metres": 0.0,
"Grid: north/south offset in metres": 0.0,
"Capture: seconds one player needs to take a cell": 30.0,
"Capture: extra members that still speed up a capture (1 = no group bonus)": 3,
"Capture: how fast unattended progress drains, as a multiple of the fill rate": 0.5,
"Capture: a cell must border one you already own": true,
"Capture: a faction with no cells may take any one cell as a beachhead": true,
"Capture: an enemy stepping in wipes progress instead of freezing it": true,
"Capture: block capturing inside safe zones": true,
"Capture: block capturing while building blocked": false,
"Capture: cell ids that can never be captured": [],
"Capture: only players with the territorywars.play permission may capture": false,
"Scoring: points awarded for taking a cell": 50,
"Scoring: points per owned cell per minute": 1.0,
"Scoring: seconds between scoring ticks": 60.0,
"Scoring: cells that pay the full rate before diminishing returns start": 6,
"Scoring: what every cell past the full-value count pays, as a fraction": 0.4,
"Scoring: multiplier for a cell bordering an enemy faction (1 = off)": 2.0,
"Decay: hours a cell survives with no owner inside it (0 disables decay)": 24.0,
"Decay: minutes between decay checks": 15.0,
"Capital: how much longer a capital takes to capture than a normal cell": 3.0,
"Capital: hours before the capital may be moved again": 6.0,
"Capital: minutes to declare a new capital after losing one before the empire starts rotting": 15.0,
"Capital: show a map marker on each faction capital": true,
"Capital: map label text, {0} is the faction name (empty = no label)": "{0} CAPITAL",
"Supply: owned cells must chain back to the capital (false disables supply entirely)": true,
"Supply: minutes a cut-off cell survives before reverting to neutral": 30.0,
"Cap: cells every faction may hold regardless of size": 4,
"Cap: extra cells allowed per faction member": 2,
"Cap: cells no faction may exceed, however large": 24,
"Cap: minutes before a faction may abandon another cell (0 = off)": 10.0,
"Gather: yield multiplier while harvesting inside your own supplied cell (1 = off)": 1.25,
"Siege: capture progress (0-1) at which the owning faction is warned": 0.25,
"Siege: minutes before the same cell may raise another alert (0 = off)": 3.0,
"Siege: seconds an attacker is locked out of a cell after being repelled (0 = off)": 60.0,
"Siege: minutes a freshly captured cell cannot be captured again (0 = off)": 10.0,
"Factions: use the Clans plugin when it is loaded": true,
"Factions: fall back to the vanilla team": true,
"Factions: fall back to the individual player": true,
"Announce: broadcast captures in chat": true,
"Announce: only tell the factions involved, not the whole server": false,
"UI: show the capture progress bar": true,
"UI: capture bar anchor, 'x y' in screen fractions": "0.5 0.18",
"UI: capture bar size in pixels, 'width height'": "320 46",
"UI: standings rows per page": 12,
"UI: show Steam avatars in the standings": false,
"UI: colours": { },
"Admin: reuse the slot of a faction holding no cells and no score when all 31 are taken": true
}
```
Anything that would divide by zero or spin the grid into nonsense is clamped on load, so a bad edit warns rather than breaking a live server.
## The 31-faction limit
Vanilla allows 31 factions plus neutral. That is an engine limit, not a plugin choice.
Faction slots are only allocated the moment a capture genuinely starts progressing, so players wandering the map never burn one. When all 31 are held, TerritoryWars reuses the slot of a faction that holds no cells and has no score — it **never** evicts a faction that still owns ground; the new claimant is told the board is full instead. On a server with more than 31 active groups, use clans so the slots go further.
## Steam avatars are off by default
A standings row with a Steam avatar makes the client fetch that image, and a slow fetch delays the whole panel opening. Turn them on once you have confirmed the panel opens instantly without them.
## For other plugin authors
`TerritoryZoneController` is public and this plugin does not wrap it, so you can read the grid directly:
```csharp
var grid = PointEntity<TerritoryZoneController>.ServerInstance;
int cell = HexGridLayout.WorldToCell(player.transform.position, grid.HexSize, grid.GridOffset);
int owner = grid.GetFaction(cell);
string who = grid.FactionNames[owner];
```
## Requirements
Rust server on the September 2026 build (25011799) or newer — the build that added the territory grid. Oxide or Carbon. No other plugin required; a Clans plugin is used if you have one.
## Support
Every purchase comes with the private updates channel in our Discord and updates for the life of the plugin. Your licence key and download live on your purchases page the moment payment clears.
$29.99 · v2.0.0