All documentation

Free scripts

Poggy Util

A set of small, optional server utilities: an area-of-play box with clock and duty count, music zones, object cleanup, unstuck, weapon jams, a /help guide, armor protection and a stipend. Each one has its own switch.

  • poggy_utilv2.0.7
  • FrameworksVORP Core, RSG Core, QBCore RedM
  • Updated5 Oct 2026

Overview#

Poggy Util bundles small utilities most servers want. Each has its own on/off switch, so you turn on only what you use. Everything framework-related (characters, jobs, duty, money, inventory, notifications) comes from poggy_core.

UtilityWhat it doesDefault
Area of playA box on screen with the busiest zone and the player counton
Clock and weatherGame time and weather under the area-of-play boxon
Duty countOn-duty law and doctors, inside the boxon
Music zonesA YouTube track plays near set locationson
Object removalDeletes listed object models on a timeron
Dead entity cleanupClears dead NPCs, horses, animals and wrecked wagonsoff
UnstuckTeleports a stuck player to the nearest roadon
Weapon jamDirty guns can jamon
Help menuA searchable /help guideon
Armor protectionArmor clothing blocks torso shots until it breaksoff
Government stipendPays unemployed characters on a timer (VORP only)off

Requirements#

NeedsWhy
poggy_core 0.13.0 or newerThe framework layer.
oxmysqlThe database.
weathersyncOnly for the clock and weather widget.

Every utility works on VORP Core, RSG Core and QBCore RedM, except the government stipend, which is VORP only: it reads VORP's character table. On another framework it prints one line in the console at start and stays off.

Installation#

  1. Download Poggy Util and put the poggy_util folder in your resources folder.
  2. Add it to server.cfg, after poggy_core and oxmysql:
    ensure oxmysql
    ensure poggy_core
    ensure poggy_util
  3. For the armor repair kit, copy docs/armor_kit.png into your inventory's item image folder.
  4. Set your server name for the help menu, and replace the example guide with your own (see Using it in game).
  5. Restart the server.

There is no SQL to import. When the script starts it automatically creates its table (the armor icon position per character), adds the armor_kit item on VORP, and adds a created_at column to VORP's character table for the stipend. On RSG, add armor_kit to rsg-core/shared/items.lua yourself; the console prints one line while it is missing.

Characters that existed before poggy_util get the creation date 2025-11-01 00:00:00 for the stipend. To use another date, change it in sql/install.sql before poggy_util first starts. Changing Config.Stipend.LegacyDate alone does nothing.

Configuration#

Every setting can be changed in game: type /poggy, open Poggy Util, save, and restart poggy_util. The switches are on the General tab. You can also edit config.lua (every utility) and config/help.lua (the help pages) by hand. Config.Debug = true prints debug lines from every utility.

Area of play, clock and duty count

SettingDefaultWhat it does
Config.AOP.EnabledtrueThe area-of-play box. Off also hides the clock and duty count, which sit inside it.
Config.AOP.Zones10 townsThe zones, each a name and a position. The server picks the zone with the most players every 5 seconds.
Config.AOP.SearchRadius1000.0A player counts for the nearest zone within this many metres; further from every zone counts for none.
Config.AOP.UpdateInterval20Seconds between each player's refresh of the box.
Config.ClockWeather.EnabledtrueClock with sun, moon and weather. Needs weathersync.
Config.ClockWeather.UpdateInterval5Seconds between time and weather updates.
Config.DutyCount.EnabledtrueOn-duty law and doctors in the box.
Config.DutyCount.LawJobspolice, sheriff, marshalJobs counted as law. Case-sensitive. Doctors are the jobs poggy_core counts as medical (PoggyCoreConfig.MedicalJobs).
Config.DutyCount.UpdateInterval10Seconds between recounts.

Music zones

SettingDefaultWhat it does
Config.MusicZones.EnabledtrueMaster switch. Off also removes /togglemusic.
Config.MusicZones.Zonesone exampleEach zone: name, youtubeId, radius, volume, loop, optional timestamps, and one or more locations.
Config.MusicZones.VolumeMultiplier0.5Multiplies every zone's volume. 0 silences all zones.
Config.MusicZones.Falloff2.0How volume drops toward the edge: 1 straight line, 2 realistic.
Config.MusicZones.DirectionalAudiotrueThe music drops to 60% when the camera faces away from the source.
Config.MusicZones.UnloadDistance100.0The track stays loaded (silent) until the player is this far away. Keep it larger than every zone's radius.
Config.MusicZones.Quality'small'Quality YouTube is asked for. Only the audio is used, so the lowest saves bandwidth.

Object removal and dead entity cleanup

SettingDefaultWhat it does
Config.ObjectRemoval.EnabledtrueMaster switch. Off also turns off dead entity cleanup and both admin commands.
Config.ObjectRemoval.Objectss_coachlock02xObject models deleted on every player's game.
Config.ObjectRemoval.IntervalMinutes1Minutes between removals. The first runs 30 seconds after start.
Config.ObjectRemoval.AdminGroupsadmin, superadmin, moderatorStaff groups allowed to use /removeobjects and /cleandead.
DeadEntityCleanup.EnabledfalseClears dead bodies and wrecks on a timer.
DeadEntityCleanup.IntervalMinutes60Minutes between cleanups.
CleanPeds, CleanHorses, CleanAnimals, CleanWagonsall trueWhat the cleanup removes: dead NPCs (never players), dead horses, dead animals (carcasses a player wants to skin go too), destroyed wagons.

Unstuck

SettingDefaultWhat it does
Config.Unstuck.EnabledtrueMaster switch.
Config.Unstuck.Command"unstuck"The command name. The help menu's I'M STUCK button uses it too.
Config.Unstuck.DelaySeconds10Countdown before the teleport. The player is frozen meanwhile.
Config.Unstuck.MoveTolerance2.0Metres the player may drift during the countdown before it is cancelled.

Weapon jam

SettingDefaultWhat it does
Config.WeaponJam.EnabledtrueMaster switch.
JamStartThreshold0.2Gun dirt (0 clean, 1 filthy) at which jams become possible.
MaxJamProbability0.25Jam chance per shot for a filthy gun (25%). Cleaner guns scale down from this.
JamChanceExponent1.5How steeply the chance rises with dirt. Higher means only very dirty guns jam often.
UnjamThreshold0.05A jammed gun works again once it is this clean.
JamSound.EnabledtrueA dry click when a gun jams. Only the shooter hears it.
GunsToJam27 pistols, revolvers, rifles and shotgunsWeapon names that can jam. Any gun not listed never jams.

Help menu

SettingDefaultWhat it does
Config.Help.EnabledtrueOff: the /help command is not registered.
Config.Help.ServerName"Your Server Name"Shown in the guide's header.
Config.Help.Logo""Optional image left of the name: a full https:// URL. Empty for no logo.

Armor protection

SettingDefaultWhat it does
Config.ArmorProtection.EnabledfalseMaster switch.
MaxShots10Torso hits blocked before the armor breaks. Each character starts full every session.
ShotsPerStage2Hits per stage of the 10-stage HUD icon. Keep MaxShots รท this at exactly 10.
RepairKitItem"armor_kit"The item that repairs the armor. Used up only when the repair finishes.
RepairTime8000Milliseconds for the repair animation and progress bar.
NotifyPlayerfalseShows a tip each time the armor absorbs a hit.
HUD.EnabledtrueShows the durability icon while armor is worn. Its position and size are CSS values (default 80px from the bottom, 30px from the left).

Government stipend (VORP only)

SettingDefaultWhat it does
Config.Stipend.EnabledfalseMaster switch.
IntervalMinutes60Minutes between pay rounds. Only players online at that moment are paid.
BasePay5.00Cash paid each round.
MinimumTenureDays30A character must be this many days old before being paid.
IncreaseAmount0.25Added to the pay for each full step of tenure past the minimum.
IncreaseIntervalDays30Length of one tenure step, in days.
UnemployedJobName"unemployed"Only characters with this job are paid. Not case-sensitive.

Commands#

CommandWhoWhat it does
/aopEveryoneHides or shows the area-of-play box (with the clock and duty count).
/aop l, /aop rEveryoneMoves the box to the left or right. Remembered.
/helpEveryoneOpens or closes the help guide.
/unstuckEveryoneTeleports you to the nearest road after a countdown. Moving or dying cancels it.
/togglemusicEveryoneMusic zones off or on for yourself. Remembered.
/movearmorEveryoneDrag the armor icon; click anywhere to save. Saved per character.
/removeobjects [model ...]Staff groups, server consoleRemoves the given models, or every listed one, on every player's game.
/cleandeadStaff groups, server consoleRuns dead entity cleanup now. Does nothing while it is off.

Each command works only while its utility is on.

Permissions#

Only /removeobjects and /cleandead are restricted. They work for a player in one of the staff groups in Config.ObjectRemoval.AdminGroups (default admin, superadmin, moderator), and from the server console. No ACE is needed.

Using it in game#

Writing your /help guide

The guide ships with example content. Replace it with your own in /poggy โ†’ Poggy Util โ†’ Help pages, or in config/help.lua.

  • The guide is a list of pages. Each page has an id (letters, digits and underscores), a title, one of 16 built-in icons, a colour and its sections.
  • The page with id getting_started is the large first tile; the others are sorted by title.
  • Section types: info (bullets), steps (numbered), tips (bullets with a light bulb) and commands (write them as /cmd โ€” what it does). Two advanced types for item guides with inventory icons are described at the top of config/help.lua.
  • Search looks through every title and line, so use the words players will type.
  • The I'M STUCK button on the front page runs the unstuck command.

Setting up armor protection

  1. In /poggy โ†’ Poggy Util, turn on Armor protection (General tab).
  2. On the Combat tab, check the repair kit item. On VORP armor_kit is added for you; on RSG add it to rsg-core/shared/items.lua.
  3. Copy docs/armor_kit.png into your inventory's image folder.
  4. Save and restart poggy_util.

A player wearing something in the native armor clothing slot is protected: shots to the torso are blocked, one hit at a time, until the armor breaks. Head, arm and leg shots are never blocked. Broken armor blocks nothing until the player uses the repair kit. Clothing stores that use the armor slot (vorp_character, jo_libs, jo_clothingstore) work.

Weapon jams

The dirtier a gun, the likelier it jams when fired. A jammed gun clicks instead of firing, and works again once it has been cleaned.

For developers#

Client exports:

exports.poggy_util:ArmorIsWearing()            -- wearing armor
exports.poggy_util:ArmorGetShots()             -- hits left
exports.poggy_util:ArmorIsBroken()             -- no hits left
exports.poggy_util:ArmorShouldBlockBleeding()  -- wearing, not broken, last hit on the torso
exports.poggy_util:IsWeaponJammed(weaponHash)  -- that weapon is jammed
exports.poggy_util:OpenHelp()
exports.poggy_util:CloseHelp()

Server exports:

exports.poggy_util:RemoveObjectsByModel('s_coachlock02x')
exports.poggy_util:RemoveConfiguredObjects()   -- returns how many models were requested

Client event for keybinds: TriggerEvent('poggy_util:unstuck') starts unstuck.

Troubleshooting#

The clock never shows
It needs weathersync running, and the area of play on.
/removeobjects says "You don't have permission."
Add your staff group to Config.ObjectRemoval.AdminGroups, or run it from the server console.
/cleandead does nothing
Turn on dead entity cleanup (Config.ObjectRemoval.DeadEntityCleanup.Enabled).
The stipend never pays
It is VORP only. The character's job must be the unemployed job, the character must be at least MinimumTenureDays old, and they must be online when a pay round runs.
The armor kit does nothing
Armor protection is off by default. Turn it on and restart.

Updating#

Poggy Util updates through poggy_core's updater, which keeps your values in config.lua and config/help.lua (see Updates).

From 1.x

2.0.0 removed everything poggy_core now provides: the notification helpers, character, job, player and database helpers, and the blip and weapon helpers. Scripts that called those poggy_util exports should use poggy_core's Poggy() verbs instead (for example Poggy('notify.styled', ...), Poggy('char.get'), Poggy('job.get')). Config.PoggyDebug is now Config.Debug. The armor icon position moved to its own table, so a player who had moved the icon sets it again with /movearmor.

Join the Discord Discord