Documentation

Pepper Newspaper

Newspaper stands, a newspaper item and a newsroom for journalists – ESX & QBCore.

Overview

Pepper Newspaper brings a daily newspaper to your roleplay server. Journalists write their own editions with articles and images in the newsroom menu, players buy the paper at the city's newspaper stands. The newspaper ends up as an item in the inventory, stays there and can be read as often as you like. The script is free.

Features

  • Buy at every GTA newspaper stand (ox_target, qb-target or the E key) – with a display of the current and up to 3 older editions
  • Newspaper item with the stored edition (ox_inventory, qb-inventory, ESX default inventory), bookmark when reopening
  • Newsroom: up to 8 articles per edition, images, preview, publish, archive
  • Sample edition with 8 articles while the newsroom has not published anything yet
  • /newsstand marks the nearest stand on the map and minimap
  • Permissions per job and grade, ACE permission for admins, all checks server-side
  • Notification for all players on a new edition, optional Discord webhook

Requirements

Dependency Required/optional Used for Link
FiveM server build 7290+ required declared in fxmanifest.lua as /server:7290; OneSync is not needed https://docs.fivem.net/docs/server-manual/setting-up-a-server/
ESX Legacy (es_extended) or QBCore (qb-core) required (one of them) players, money, jobs, item; detected automatically (Config.Framework = 'auto') https://github.com/esx-framework/esx_core · https://github.com/qbcore-framework/qb-core
oxmysql required database (editions) https://github.com/overextended/oxmysql
ox_target or qb-target optional interaction at the stand; without a target: help text with the E key https://github.com/overextended/ox_target
ox_inventory or qb-inventory optional item with the stored edition (metadata); in the ESX default inventory the paper is consumed when read https://github.com/overextended/ox_inventory

Installation

  1. Download the resource from the Cfx.re portal → Granted Assets.
  2. Extract it to resources/[pepper]/pepper_newspaper. Do not rename the pepper_newspaper folder – the ox_inventory item entry calls pepper_newspaper.useNewspaper, and other resources use exports.pepper_newspaper.
  3. Add it to your server.cfg after framework, inventory and target:
ensure oxmysql
ensure es_extended      # or: ensure qb-core
ensure ox_inventory     # optional
ensure ox_target        # optional
ensure pepper_newspaper
  1. Database: the table pepper_newspaper_editions is created automatically on first start. The manual way is install/pepper_newspaper.sql (it also contains the ESX item and, commented out, the weazel job).
  2. Add the newspaper item and copy install/newspaper.png into your inventory's image folder:
Inventory File Entry Image to
ox_inventory ox_inventory/data/items.lua see below (with server = { export = 'pepper_newspaper.useNewspaper' }) ox_inventory/web/images/
qb-inventory qb-core/shared/items.lua see below (unique = true, useable = true) qb-inventory/html/images/
ESX default inventory database INSERT IGNORE INTO items (name, label, weight) VALUES ('newspaper', 'Newspaper', 1); –
-- ox_inventory/data/items.lua
['newspaper'] = {
    label = 'Newspaper',
    weight = 100,
    stack = false,
    close = true,
    server = { export = 'pepper_newspaper.useNewspaper' },
},

-- qb-core/shared/items.lua
newspaper = { name = 'newspaper', label = 'Newspaper', weight = 100, type = 'item', image = 'newspaper.png', unique = true, useable = true, shouldClose = true, description = 'The latest issue' },
  1. Job for the newsroom: ESX – create the weazel job with the SQL at the end of install/pepper_newspaper.sql (grades 0 reporter, 1 editor, 2 editor-in-chief). QBCore ships the reporter job.
  2. Set language (Config.Locale, default 'en'), price and jobs in config/config.lua and restart the server.

First test

  1. Start the server – the console reports “Pepper Newspaper v1.1.0 started (framework: …)”.
  2. Type /newsstand and walk to the marked newspaper stand.
  3. Open the display at the stand and buy the sample edition – it ends up as the newspaper item in your inventory.
  4. Use the item: the newspaper opens for reading.
  5. As a journalist (job from Config.Jobs) or admin, type /newspaper and publish your own edition.

Configuration

All settings are open (readable and editable under Asset Escrow):

File Controls
config/config.lua language, framework, stands (price, account, interaction, models), item, back issues, /newsstand, newsroom (jobs, ACE, locations), sample edition, lengths, image hosts
config/server.lua server-side only: Discord webhook, purchase logs, update notice
config/demo.lua content of the sample edition (DE and EN)
locales/de.json, locales/en.json all in-game and UI texts
bridge/ framework bridge ESX/QBCore (open, adjustable if needed)

Stands and item

Config.Price = 5
Config.Account = 'money'
Config.Interaction = 'auto'
Config.Item = 'newspaper'
Config.ConsumeOnRead = false
Config.BackIssues = 3
Option Default Description
Config.Locale 'en' language (de or en)
Config.Framework 'auto' auto, esx or qbcore
Config.Price 5 price per newspaper (0 = free)
Config.Account 'money' money (cash) or bank
Config.Interaction 'auto' auto (ox_target → qb-target → key), ox_target, qb-target or key
Config.InteractKey 38 E key (only with key)
Config.VendingModels 10 GTA models stand models, simply add more
Config.Item 'newspaper' item name
Config.ConsumeOnRead false true = newspaper consumed after reading
Config.BackIssues 3 older editions at the stand (0–10)
Config.FindCommand 'newsstand' command for the nearest stand (false = off)
Config.StandLocations empty fixed stand locations for /newsstand (optional)

Newsroom and content

Config.Jobs = {
    weazel = { write = 0, publish = 0, manage = 2 },
    reporter = { write = 0, publish = 0, manage = 0 },
}
Config.EditorAce = 'pepper.newspaper.editor'
Option Default Description
Config.Jobs weazel, reporter from which grade write, publish and manage (delete/archive) apply
Config.EditorAce 'pepper.newspaper.editor' ACE permission for full access regardless of job
Config.EditorCommand 'newspaper' command for the newsroom
Config.EditorLocations empty places where the newsroom also opens via interaction
Config.AnnounceNewEdition true notify all players about a new edition
Config.DemoEdition true sample edition while no own edition is published
Config.MaxArticles 8 articles per edition
Config.MaxBodyLength 3000 characters per article text
Config.ImageHosts Imgur, Discord, Fivemanage, ImgBB allowed image hosts (https only); also your own images from html/img/

Server settings

ServerConfig.LogWebhook = ''      -- Discord webhook for publications, deletions, purchases ('' = off)
ServerConfig.LogPurchases = false -- also log purchases
ServerConfig.VersionUrl = ''      -- update notice in the console (downloads no code)

Newsroom

/newspaper opens the newsroom: create an edition, write up to 8 articles with headline, text and image, check the preview, publish. With the manage permission you can archive or delete editions. The sample edition from config/demo.lua is at the stands until the newsroom publishes its own paper – remove it with “Archive”, recreate it with newspaperdemo.

Commands and permissions

Command Who What
/newspaper journalists (Config.Jobs), ACE pepper.newspaper.editor open the newsroom
/newsstand everyone mark the nearest newspaper stand on the map and minimap
newspaperdemo server console or ACE command.newspaperdemo publish the sample edition again
E / target everyone open the display at the stand
add_ace group.admin pepper.newspaper.editor allow
add_ace group.admin command.newspaperdemo allow

Newsroom permissions depend on the job grade (write, publish, manage in Config.Jobs); the ACE permission grants full access. All checks run server-side.

Exports and events

Server exports:

Export Returns
getCurrentEdition() current edition or nil
getVersion() version number of the resource
useNewspaper for ox_inventory only (item entry server.export), not meant to be called directly
local edition = exports.pepper_newspaper:getCurrentEdition()

FAQ

The console says “Kein unterstütztes Framework gefunden” (no supported framework found).

es_extended or qb-core must start before pepper_newspaper in your server.cfg. Alternatively set the framework explicitly with Config.Framework = 'esx' or 'qbcore'.

Does Pepper Newspaper run on Qbox?

Officially supported are ESX Legacy and QBCore. Detection looks for the resources es_extended and qb-core; you can add your own bridge in the open files under bridge/.

The table is missing in the database.

It is created on first start while oxmysql is running. Otherwise import install/pepper_newspaper.sql manually.

The item cannot be used.

With ox_inventory the item entry must contain server = { export = 'pepper_newspaper.useNewspaper' }. With QBCore the item needs useable = true.

The item has no image.

Copy install/newspaper.png into your inventory's image folder (e.g. ox_inventory/web/images/).

The newspaper disappears after reading.

The ESX default inventory has no item metadata – there the paper is always consumed. With ox_inventory or qb-inventory it stays as long as Config.ConsumeOnRead = false.

The newsroom does not open.

Check job and grade in Config.Jobs or grant the ACE permission pepper.newspaper.editor.

Nothing happens at the stand.

Check Config.Interaction: with 'key' you press E directly at the stand, with ox_target/qb-target the target script must start before pepper_newspaper. Add your own stand models to Config.VendingModels.

An image is rejected.

Only https links from hosts in Config.ImageHosts are allowed – or your own images from html/img/ of the resource (e.g. img/harbor.jpg).

Can the newspaper be free for players?

Yes – set Config.Price = 0.

Can I use a job other than weazel?

Yes. Add your job with the grades you want to Config.Jobs.

How do I change texts or the language?

Language via Config.Locale (de or en, default en); all texts are in locales/de.json and locales/en.json.

How much performance does the resource need?

Measured with resmon: 0.00 ms idle and 0.01 ms active.

Will an update delete my editions?

No, editions live in the database. Back up your changed files in config/, locales/ and bridge/ before updating and carry your changes over to the new version. You can enable an update notice in the console via ServerConfig.VersionUrl.

Support

Questions and bugs: open a ticket in our Discord: https://discord.gg/6NaFJWKDYu – link your purchase with /verify first.

Permanently tested on the Pepper Scripts dev server.

Changelog

Current version: 1.1.0 (10 Oct 2026) – display with older editions, newspaper stays in the inventory after reading, bookmark, /newsstand, sample edition and your own images from html/img/. All changes are listed in the CHANGELOG.md file in the resource folder.


Found a mistake? Report it on Discord.