Wanted levels and police¶
Single-player's crimes and cops, plus a bounty: robbing the bank makes a player wanted, and whoever kills a wanted player collects.
police.ts
import { Server, Player, Color } from "@sagl/server";
export function police(server: Server) {
server.population = { peds: true, traffic: true, police: true, wanted: true };
// Never more than four stars from crimes alone.
server.on("playerWantedLevel", (_player, level) => Math.min(level, 4));
const bank = server.createZone({ center: { x: 2315, y: -8, z: 26.7 }, radius: 6 });
server.on("zoneEnter", (player, zone) => {
if (zone !== bank || Date.now() < ((player.data.robbedAt as number) ?? 0) + 300_000) return;
player.data.robbedAt = Date.now();
player.giveMoney(5000);
player.wantedLevel = 5;
server.broadcast(`${player.name} robbed the bank! Bounty: $2,500`, Color.Red);
});
server.on("playerDeath", (player, killer) => {
if (player.wantedLevel >= 3 && killer instanceof Player && killer !== player) {
const bounty = player.wantedLevel * 500;
killer.giveMoney(bounty);
server.broadcast(`${killer.name} collected $${bounty} for ${player.name}.`, Color.Green);
}
player.wantedLevel = 0;
});
}