Graffiti Tags
Persistent wall tags players write themselves, flush against any wall, feeding a gang territory system. Nothing to stream.
- Version
- 1.0.0
- Resource
- SF-Graffiti
Overview#
The player writes it
Their own text, or one of eighteen motifs. Nine fonts, seven effects, a colour, an outline, a size โ with a live preview.
Flat on any wall
Aim, and the tag appears in transparency where you point. Wheel rotates, arrows resize, E sprays.
Nothing to stream
No .ytd, no .ydr. Tags are rendered in HTML and projected into the world โ which is what makes them endlessly customisable.
Persistent
Everything is kept in the database and comes back after a restart.
Covering a rival
Tagging close to an existing tag replaces it, for a configurable number of charges. Covering your own gang is refused.
Cleaning
With a remover in hand, E scrubs a tag off. Optionally paid, optionally reserved to certain jobs โ a city-cleaning job in two settings.
Gang territories
Each zone counts tags by gang. The gang holding the most controls it, with coloured blips on the map.
Exports and an event
Read zone ownership and statistics, and react to a capture from your own scripts.
Dependencies#
| Resource | Required | What for |
|---|---|---|
ox_lib | Required | Interface and shared helpers |
oxmysql | Required | Tag storage โ the table is created on its own |
Installation#
- Drop
SF-Graffitiinto yourresourcesfolder. - Declare the two items โ see
ITEMS.md. - Add the line below to your
server.cfg, after ox_lib, oxmysql and your framework. - Adjust
Config.Zonesto your own map, then setConfig.Debug = false.
ensure ox_lib ensure oxmysql ensure SF-Graffiti
Configuration#
| Setting | Default | What it does |
|---|---|---|
Config.Fonts / Effects / Motifs / Colors | 9 / 7 / 18 | The creative catalogue offered in the editor |
Config.Size | โ | Minimum and maximum size, and the height/width ratio |
Config.MinSpacing | โ | How close you must be to cover an existing tag |
Config.CoverCost | 2 | Charges spent to cover a rival tag |
Config.CleanReward | โ | Optional pay for scrubbing a tag off |
Config.CleanJobs | โ | Which jobs may be paid for cleaning |
Config.MaxRendered | 15 | Cannot be raised โ it is the capacity of the atlas |
Config.MaxTotal | 500 | Global ceiling on stored tags |
Config.Zones | โ | Territories, with Config.MinTagsToOwn and Config.GangBlipColors |
Commands#
| Command | What it does |
|---|---|
/tag | Place a tag โ requires a spray can |
/territoires | Gang influence, zone by zone |
/cleartags [all] | (admin) Purge 20 m around you, or the whole map |
/sf_graffiti_debug | (console) Bridges, loaded tags, zone owners |
/graffiti_admin | (Config.Debug) Why this player is admin, or is not |
Exports#
exports['SF-Graffiti']:GetZoneOwner('grove') --> 'ballas' | nil
exports['SF-Graffiti']:GetZoneStats('grove') --> { owner=, total=, gangs={...} }
exports['SF-Graffiti']:GetAllZones()
AddEventHandler('sf-graffiti:server:zoneCaptured', function(zoneId, newGang, oldGang)
-- territory income, gang alert, Discord notification...
end)