Territory
Turfs, influence, holding the street, street crime, rivalries, hotspots and rackets.
Time windows use 24-hour 'HH:MM' and your server time plus UtcOffset from shared/core.lua. A window can cross midnight, e.g. '23:00' to '11:00'.
🏳️ Turfs
The turf shapes are drawn in Admin → Turfs. These settings control how turfs behave.
Ownership
| Setting | Default | What it does |
|---|---|---|
Turfs.OwnershipPercent | 51 | % of a turf's influence a gang needs to own it |
Turfs.OwnershipMinPoints | 100 | Points the leading gang also needs. 0 = no minimum |
Turfs.CaptureMilestones | { 50, 90 } | Notifications at these % of the way to owning a turf. false = off |
Turfs.MaxPoints | 100000 | Most points one gang can have in one turf |
Activity window
| Setting | Default | What it does |
|---|---|---|
Turfs.ActivityWindow.Enabled | false | Only count influence from sales, graffiti, kills and crime during set hours |
Turfs.ActivityWindow.Start / End | '23:00' / '11:00' | The hours |
Influence per action
| Setting | Default | What it does |
|---|---|---|
Turfs.Influence.DrugSale | 50 | Your gang gains per corner sale |
Turfs.Influence.DrugSaleOthers | -15 | Other gangs lose per sale |
Turfs.Influence.Spray | 75 | Your gang gains per graffiti tag |
Turfs.Influence.SprayOthers | -5 | Other gangs lose per tag |
Turfs.Influence.RemoveEnemy | 15 | Your gang gains for scrubbing a rival tag |
Turfs.Influence.RemoveVictim | -15 | The tag's owner loses |
Turfs.Influence.RemoveOwn | 0 | Gained for removing your own tag |
Turfs.Influence.KillEnemy | 15 | Your gang gains for killing a rival gang member |
Turfs.Influence.KillVictim | -5 | The victim's gang loses |
Turfs.OthersMode | 'all' | Who takes the "others" losses: 'all' gangs there, or only the 'owner' |
Turfs.KillPairCooldown | 120 | Seconds before the same killer and victim count again |
Turfs.DrugSaleXp | true | Turf sales give gang XP |
Turfs.KillXp | true | Turf kills give gang XP |
Repeat penalty
Repeating the same action in the same turf is worth less each time.
| Setting | Default | What it does |
|---|---|---|
Turfs.Diminishing.Enabled | true | Turn the penalty on |
Turfs.Diminishing.WindowMinutes | 60 | The count resets after this long |
Turfs.Diminishing.Factor | 0.8 | Each repeat is worth 80% of the last (100%, 80%, 64%…) |
Turfs.Diminishing.Floor | 0.2 | Never goes below 20% |
Turfs.Diminishing.Reasons | spray, remove, kill on; drug sale off | Which actions are affected |
Turfs.Diminishing.Crimes | true | Also reduce influence from street crime |
Decay & spread (optional)
| Setting | Default | What it does |
|---|---|---|
Turfs.Decay.Enabled | false | Owners slowly lose influence |
Turfs.Decay.IntervalMinutes | 60 | How often |
Turfs.Decay.Percent | 1.0 | % of points lost each time |
Turfs.Decay.MinLoss | 1 | At least this many points |
Turfs.Spread.Enabled | false | Part of every gain also goes to nearby turfs |
Turfs.Spread.Percent | 10 | % that spreads |
Turfs.Spread.MaxDistance | 700.0 | How close the other turf's centre must be |
Notifications
| Setting | Default | What it does |
|---|---|---|
Turfs.NotifyOwner | all on | Tell owners when outsiders sell, spray, remove tags, kill, kill NPCs, rob, steal cars, occupy or walk into their turf. Keys: drug, spray, remove, kill, npc, robbery, theft, occupy, intrude |
Turfs.NotifyCooldown | 90 | Seconds between the same kind of alert per turf |
Turfs.EnterNotify | false | Notify members when they enter or leave a turf |
Map & HUD
| Setting | Default | What it does |
|---|---|---|
Turfs.Hud.Enabled | true | Show the turf badge. Capture milestones need this on |
Turfs.Blips.Enabled | true | Draw turfs on the map |
Turfs.Blips.Alpha | 80 | Fill transparency (0–255) |
Turfs.Blips.Shape | 'auto' | 'box', 'polygon' or 'auto' |
Turfs.Blips.FillRatio | 0.85 | In auto mode, how rectangular a turf must be to draw as a box |
Turfs.Blips.NeutralColor | '#9ca3af' | Colour of unowned turfs |
Turfs.Blips.ShowUnowned | true | Draw turfs nobody owns |
Turfs.Blips.ShowToEveryone | false | Let non-gang players see turfs |
Turfs.Blips.FlashContested | true | Flash turfs that are close to changing hands |
Turfs.Blips.ContestedRatio | 0.75 | Contested when second place has 75% of the leader's points |
Turfs.InfoKey.Enabled / Key / Label | true / 'Z' / 'Turf info (hold)' | Hold-for-info key (players can rebind it) |
Abandoning & saving
| Setting | Default | What it does |
|---|---|---|
Turfs.Abandon.Enabled | true | Gangs can abandon turfs from the tablet |
Turfs.Abandon.LockMinutes | 30 | Minutes before they can gain influence there again |
Turfs.FlushSeconds | 60 | How often influence is saved |
🧍 Presence (holding the street)
| Setting | Default | What it does |
|---|---|---|
Presence.Enabled | true | Members earn influence by standing in turfs |
Presence.TickSeconds | 60 | How often presence is paid |
Presence.MinMinutesInside | 3 | Minutes a member must stay before counting ("Settling in"). 0 = counts right away |
Presence.PointsPerMember | 2 | Points per member each tick |
Presence.MaxMembersCounted | 4 | Most members counted per gang |
Presence.RequireOnFoot | false | Members in vehicles don't count |
Presence.ContestedBlocks | true | If two gangs are there, nobody gains |
Presence.OccupyOwnerLoss | -1 | Owner loses this per tick when rivals hold their turf with no owner present. 0 = off |
Presence.AllowedBuckets | { 0 } | Worlds where presence counts (0 = normal world) |
Presence.UseActivityWindow | true | Follow the turf activity window |
🚨 Street crime
When the criminal belongs to the owning gang, only OwnSelf applies. Otherwise the owner gets Owner and the criminal's gang gets Actor.
| Setting | Default | What it does |
|---|---|---|
Crimes.AffectCivilians | true | Crimes by non-gang players also hurt the owner |
Crimes.AllowedBuckets | { 0 } | Worlds where crimes count |
| Crime | Actor | Owner | OwnSelf | Per player / hour | Per turf / hour |
|---|---|---|---|---|---|
NpcKill | -15 | -10 | -15 | 20 | 40 |
Robbery | +10 | -40 | -25 | 6 | 8 |
Theft (car theft) | 0 | -10 | -5 | 6 | 15 |
Robbery extras
| Setting | Default | What it does |
|---|---|---|
Crimes.Robbery.Cooldown | 120 | Seconds between robbery reports from one player |
Crimes.Robbery.RacketRadius | 75.0 | Rackets this close to a robbery pay less. 0 = off |
Crimes.Robbery.RacketPayoutFactor | 0.5 | Payout multiplier after a robbery (cooldown racket mode) |
Crimes.Robbery.RacketPenaltyMinutes | 60 | How long the reduced payout lasts (cooldown racket mode) |
Crimes.Robbery.Events | empty | Events from your robbery script that count as robberies, e.g. { event = 'myrobbery:done', kind = 'store' } |
Crimes.RobberyDispatch | on, 10-90 | Police alert for robberies inside turfs (code, title, message, blip, jobs) |
Car theft is detected automatically. For robberies, use Events above or the ReportRobbery export.
🔥 Rivalry
| Setting | Default | What it does |
|---|---|---|
Rivalry.Enabled | true | Turn rivalries on |
Rivalry.Cost | 5000 | Price to start one |
Rivalry.Account | 'dirty' | Paid from 'dirty' or 'cash' treasury |
Rivalry.AddCostToPot | false | Put the start cost in the prize pot |
Rivalry.DurationMinutes | 60 | How long it lasts |
Rivalry.PotShare | 0.5 | Share of each sale added to the pot (extra money; sellers keep full price) |
Rivalry.MinLevel | 1 | Gang level needed |
Rivalry.MaxActivePerGang | 1 | Rivalries one gang can run at once |
Rivalry.Anonymous | true | Hide the starting gang |
Rivalry.NotifyAllGangs | true | Tell every gang when one starts |
Rivalry.Dispatch | on, 100%, 10-37 | Police alert when a rivalry starts |
🎯 Hotspots
Zones are created in Admin → Hotspots.
| Setting | Default | What it does |
|---|---|---|
Hotspots.SecondsPerPercent | 0.3 | Capture speed (0.3 = 30 seconds to capture) |
Hotspots.CooldownMinutes | 15 | Lock after a capture |
Hotspots.EmptyBehaviour | 'decay' | Empty zone: 'decay' drains progress, 'hold' keeps it |
Hotspots.DecaySecondsPerPercent | 0.6 | Drain speed |
Hotspots.MinMembers | 1 | Members needed inside to capture |
Hotspots.AllowedBuckets | { 0 } | Worlds where capture works |
Hotspots.Window.Enabled / Start / End | false / '02:00' / '11:00' | Capture hours |
Hotspots.NotifyOwnerOnAttack | true | Tell the owner when capture starts |
Hotspots.Blips | on, sprite 379 | Map blip, zone circle, and the attack blip owners see |
Hotspots.Defaults | Sandy Scrapyard | Hotspots added on first install only |
War zones
A hotspot is at war while a gang is capturing it or it is contested.
| Setting | Default | What it does |
|---|---|---|
Hotspots.WarZone.ShowTo | 'police' | Who sees active wars on the map: 'none', 'police' or 'everyone' |
Hotspots.WarZone.Notify | true | Those players also get a notification when a war starts |
Hotspots.WarZone.Sprite / Color / Scale | 437 / 1 / 1.0 | War zone blip |
Hotspots.WarZone.Alpha | 110 | Zone fill opacity (0–255) |
Hotspots.WarZone.Flash | true | Flash the war zone on the map |
Police
| Setting | Default | What it does |
|---|---|---|
Hotspots.Police.BlockCapture | true | On-duty police inside a hotspot pause the capture |
Hotspots.Police.MinOfficers | 1 | Officers needed inside to pause it |
Hotspots.Police.Alert.Enabled | true | Send a dispatch call when a war starts |
Hotspots.Police.Alert.Chance | 100 | % chance the call is sent |
Hotspots.Police.Alert.code / title / message | '10-10' / 'Gang Turf War' | Dispatch call text |
Hotspots.Police.Alert.blip | sprite 437, red | Dispatch blip |
Hotspots.Police.Alert.jobs | { 'police' } | Jobs that get the call |
💼 Rackets
Shops are created in Admin → Rackets.
| Setting | Default | What it does |
|---|---|---|
Rackets.Mode | 'passive' | 'passive': shops fill up hourly. 'cooldown': random payout, then a lock |
Rackets.Passive.HourlyFactor | 1.0 | Hourly income = average payout × this |
Rackets.Passive.MaxHours | 6 | Most hours of money a shop stores |
Rackets.Passive.MinCollect | 100 | Money needed before collecting |
Rackets.Passive.CollectCooldownMinutes | 5 | Wait between collections |
Rackets.Passive.KeepWhenUnowned | false | Keep stored money when the turf loses its owner |
Rackets.Passive.RobberyTakePercent | 50 | % of stored money a nearby robbery wipes |
Rackets.Passive.FlushMinutes | 5 | How often stored money is saved |
Rackets.CooldownMinutes | 30 | Lock time in cooldown mode |
Rackets.DefaultMin / DefaultMax | 500 / 2500 | Pre-filled payout for new shops |
Rackets.Account | 'dirty' | Treasury the money goes to |
Rackets.RequireTurfOwnership | true | Only the turf owner can collect |
Rackets.UseActivityWindow | true | Follow the turf activity window |
Rackets.CollectSeconds | 8 | Collection time |
Rackets.Distance | 3.0 | Interaction range |
Rackets.Dispatch | on, 60%, 10-90 | Police extortion alert |
Rackets.Blips | on, sprite 500 | Shop blips for gang members |
Rackets.Ped | on, 4 shopkeeper models | Shopkeeper NPC, spawn distance, idle and hands-up animations |
Rackets.Anim | clipboard | Collector's animation and prop |
Business sales
A cut of sales reported by other scripts with the BusinessSale export. See Rackets.
| Setting | Default | What it does |
|---|---|---|
Rackets.BusinessSales.Enabled | true | Accept business sales |
Rackets.BusinessSales.CutPercent | 10 | % of each sale given to the turf owner |
Rackets.BusinessSales.Businesses | empty | Cut per business name, e.g. burgershot = 15. 0 = never pays |
Rackets.BusinessSales.OnlyListed | false | true: only businesses listed above pay a cut |
Rackets.BusinessSales.Radius | 60.0 | A racket shop must be this close to the sale to hold the cut |
Rackets.BusinessSales.MaxStored | 50000 | How much sale money a shop can hold on top of its passive cap |
Rackets.BusinessSales.DailyCap | 100000 | Most a gang can get from one turf per day |
Rackets.BusinessSales.Fallback | 'treasury' | No racket shop nearby (or Mode = 'cooldown'): 'treasury' pays the gang directly, 'none' pays nothing |
Rackets.BusinessSales.LogMin | 100 | Smaller cuts aren't written to the activity log |
🛒 Turf dealers
Dealers that only sell to the gang owning their turf. See Turf Dealers for adding dealers and items.
| Setting | Default | What it does |
|---|---|---|
BlackMarket.Enabled | true | Turn turf dealers on or off |
BlackMarket.PayFrom | 'gang' | 'gang': paid from the treasury. 'player': the buyer pays |
BlackMarket.Account | 'dirty' | Gang: 'cash' or 'dirty'. Player: 'cash' or 'bank' |
BlackMarket.MaxPerPurchase | 10 | Most items in one purchase |
BlackMarket.RestockMinutes | 60 | How often items with stock refill |
BlackMarket.Distance | 3.0 | Interaction range |
BlackMarket.Ped | 50 m, smoking | Spawn distance and idle scenario |
BlackMarket.Blip | on, sprite 586 | Dealer blip, only shown to the owning gang |
BlackMarket.Dealers | Grove Street | The dealers, their models and their items. Dealers can also be added in Admin → Turf Dealers |
🛡️ Turf guards
Armed guards placed per turf in Admin → Turf Guards. They protect the gang owning their turf. See Turf Guards.
| Setting | Default | What it does |
|---|---|---|
Guards.Enabled | true | Turn turf guards on or off |
Guards.Weapons | pistol, micro SMG | Weapons picked at random for guards set to Random from the config |
Guards.Ammo | 250 | Ammo each guard gets |
Guards.Armour | 50 | Armour each guard gets |
Guards.SpawnRange | 120.0 | Guards only stand while a player is this close (metres) |
Guards.RespawnMinutes | 15 | A killed guard is replaced after this |
Guards.NotifyAttack | true | Tell online members of the owning gang when a guard is in a fight |
How guards fight (targets, reaction range, health, accuracy) uses Guards in shared/hideout.lua, the same as hideout guards.
Guards = {
Enabled = true,
Weapons = { 'WEAPON_PISTOL', 'WEAPON_MICROSMG' },
Ammo = 250,
Armour = 50,
SpawnRange = 120.0,
RespawnMinutes = 15,
NotifyAttack = true,
},Updating from an older version? Add this block to Settings.Territory in shared/territory.lua. Without it, these defaults are used.
🛡️ Turf defense
NPC crews attack an owned turf and the owning gang has to beat every wave in time. See Turf Defense.
| Setting | Default | What it does |
|---|---|---|
Defense.Enabled | true | Turn turf attacks on or off |
Defense.Auto.Enabled | true | Start attacks on a timer. false keeps only /turfattack |
Defense.Auto.EveryMinutes | 60 | How often the timer rolls |
Defense.Auto.Chance | 0.5 | Chance per roll (0.0 to 1.0) |
Defense.Auto.MinOnline | 3 | Members of the owning gang that must be online for the timer to pick a turf |
Defense.Cooldown | 120 | Minutes before the same turf can be attacked again |
Defense.WarnSeconds | 90 | Warning before the first wave can show up |
Defense.TimeLimit | 10 | Minutes to beat every wave |
Defense.Waves | 3 | Number of waves |
Defense.PerWave | 4 | Attackers per wave |
Defense.NextWaveWhenLeft | 1 | The next wave comes when this many attackers are left |
Defense.SpawnDistance | { 40.0, 70.0 } | How far from a member inside the turf a wave spawns |
Defense.Attackers | 3 gang models | models, weapons, health, armour, accuracy (0 to 100), ammo |
Defense.Reward | 300 XP, 15,000, 150 | xp for the gang, dirty money for the treasury, influence in the turf |
Defense.Penalty | 200 | influence lost in the turf when it is not held |
Defense.Blip | sprite 437, red | Turf marker for the owning gang during an attack (Sprite, Color, Scale, Radius) |
Defense = {
Enabled = true,
Auto = { Enabled = true, EveryMinutes = 60, Chance = 0.5, MinOnline = 3 },
Cooldown = 120,
WarnSeconds = 90,
TimeLimit = 10,
Waves = 3,
PerWave = 4,
NextWaveWhenLeft = 1,
SpawnDistance = { 40.0, 70.0 },
Attackers = {
models = { 'g_m_y_ballaorig_01', 'g_m_y_mexgoon_01', 'g_m_y_salvagoon_01' },
weapons = { 'weapon_pistol', 'weapon_microsmg', 'weapon_bat' },
health = 200, armour = 25, accuracy = 30, ammo = 250,
},
Reward = { xp = 300, dirty = 15000, influence = 150 },
Penalty = { influence = 200 },
Blip = { Sprite = 437, Color = 1, Scale = 1.0, Radius = 150.0 },
},