Suty
Job Announcements

Configuration

Configuration

config.lua at the resource root. Unencrypted and freely editable.

Globals

Config.Framework            = 'qbx'         -- 'qbx' | 'qb' | 'esx'
Config.Command              = 'anuncio'     -- job announcement command
Config.AdminCommand         = 'announce'    -- global admin announce command (NOT /evento, see below)
Config.AnnouncementDuration = 15000         -- ms a banner stays on screen
Config.AnnouncementCooldown = 10            -- seconds between announcements per player

Admin groups for the global command

Config.AdminGroups = {
    ['god']        = true,
    ['admin']      = true,
    ['mod']        = true,
    ['moderator']  = true,
}

These groups can use Config.AdminCommand (defaults to /announce) which broadcasts as a generic server-wide message.

Postal script integration

Config.UsePostalScript = true               -- auto-detect popular postal scripts
Config.PostalScript    = nil                -- manual override resource name (optional)
Config.PostalExport    = nil                -- manual override export name (optional)

Auto-detects: nearest-postal, Chow_Postal, melons_postals, jc-postal, qb-postal.

Job-based jobs (Config.AllowedJobs)

Each entry is a job that can use /anuncio. Sample:

police = {
    label       = 'HOOD LIFE POLICE DEPARTMENT',
    icon        = '👮',
    logo        = false,                    -- 'police.png' in html/img/ for a logo (false to skip)
    banner      = false,                    -- banner image (URL or local file in html/img/)
    color       = '#0066cc',                -- accent color (one var theming)
    postalCode  = '10001',                  -- default postal shown
    gps         = vector3(428.46, -981.19, 30.71),  -- GPS waypoint when player presses E
    permissions = {
        canSendGlobal = true,               -- true = banner goes to ALL players; false = job-only
    },
},
  • postalCode = 'RANDOM' uses the postal script's nearest-postal lookup
  • logo and banner accept either an https:// URL or a filename in html/img/
  • canSendGlobal = false restricts the broadcast to other people in the same job

UI / notification

Config.NotificationPosition = 'top-right'   -- 'top-left' | 'top-center' | 'top-right'
Config.UseOxLib             = false         -- true = ox_lib notifications, false = native QB notify

Config.EnableSounds = true
Config.SoundVolume  = 0.3

GPS marking

Config.EnableGPSMarking = true              -- hold E to set waypoint
Config.Use3DWaypoint    = true              -- spawn 3D world marker via sleepless_waypoints (soft dep)

Anonymous event broadcaster (/evento)

Config.AnonymousEvent = {
    Enabled  = true,
    Command  = 'evento',
    AceGroup = 'admin',                     -- 'admin' OR 'group.admin' both accepted at runtime

    DefaultDurationMs = 15000,
    MinDurationMs     = 5000,
    MaxDurationMs     = 60000,
    CooldownSeconds   = 10,

    VehicleFollow = {
        Enabled        = true,
        UpdateMs       = 5000,              -- server pushes new coords every X ms
        DurationMs     = 5 * 60 * 1000,     -- follow up to N ms after broadcast ends
        ArriveDistance = 25.0,              -- player's waypoint auto-clears within X m
    },

    Style = {
        AlertLabel = '⚠ TRANSMISIÓN ANÓNIMA INTERCEPTADA',
        Accent     = '#fcd000',             -- caution-stripe amber accent
    },
}

Discord webhook

Config.DiscordLogs = {
    enabled = true,
    webhook = 'https://discord.com/api/webhooks/...',
    botName = 'HoodLife Announce',
    botLogo = 'https://r2.fivemanage.com/.../suty.png',
}

Logs all announcements with sender identity — including anonymous /evento (the webhook captures who sent it for audit even though players don't see).