Suty
Character Scale Menu

Configuration

Configuration

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

Globals

Config.Framework  = 'qbx'           -- 'qbx' | 'qb' | 'esx'
Config.Lang       = 'es'            -- 'es' | 'en'
Config.UseSutyEMS = true            -- use suty-ems exports/state-bags for death state

Scale range

Config.DefaultScale = 1.0
Config.MinScale     = 0.80          -- lowest scale for normal players
Config.MaxScale     = 1.10

Bypass system

Config.BypassMinScale = 0.50        -- bypass players can go down to this
Config.BypassJobs = {
    ['ambulance'] = true,           -- on-duty ambulance gets bypass
}

Bypass is also automatically granted to admins (group.admin by default — see BypassPermission below). You can grant per-player bypass via /scalebypass <id> grant.

Auto-growth (for bypass players)

Config.Growth = {
    Enabled         = true,
    StartHeight     = 0.50,         -- only players AT this height grow
    EndHeight       = 0.55,         -- they grow until reaching this
    Step            = 0.01,         -- height added per interval
    IntervalSeconds = 14 * 24 * 3600,   -- 2 weeks of online time per +0.01
    TickSeconds     = 60 * 60,      -- check every 1 hour while online
    NotifyOnGrow    = true,         -- notify the player on each growth step
}

Designed so toddler/baby characters slowly grow back to "shorter adult" over weeks of real play. Catches up the moment they reconnect after being offline.

Commands

Config.AdminCommand     = 'scalemenu'           -- /scalemenu [id]
Config.AdminGroups      = { 'admin', 'god', 'mod' }
Config.BypassCommand    = 'scalebypass'         -- /scalebypass <id> <grant|revoke>
Config.SetHeightCommand = 'scaleset'            -- /scaleset <id> <altura>
Config.BypassPermission = 'group.admin'         -- ACE for bypass-related commands

NPC self-service

Config.Price = 20000

Config.Locations = {
    {
        coords = vector4(1136.41, -1529.71, 34.37, 272.23),
        ped    = 's_m_m_doctor_01',
        label  = 'Cambiar Altura',
        icon   = 'fas fa-up-down',
        job    = nil,                           -- optional job lock
    },
}

Discord role gate (optional)

Config.DiscordRoleRestriction = {
    Enabled       = false,
    BotToken      = '',                         -- same token as suty-queue if you use it
    GuildId       = '',
    RoleId        = '',
    DeniedMessage = 'No tienes el rol de Discord necesario para cambiar tu altura',
}

When enabled, only players with the specified Discord role can use the NPC locations.

Reset zones (e.g. barber chairs)

Config.UseScaleResetZones = false
Config.ScaleResetZones = {
    {
        coords = {
            vector3(-830.58, -1089.7, 10.74),
            vector3(-832.4,  -1090.74, 10.74),
            -- ...
        },
        radius = 1.5,
    },
}

When a player enters one of these radii, their scale is auto-reset to DefaultScale. Used for barber chairs or other locations where scale would break animations.

Hide-when conditions

Config.HideWhen = {
    Swimming  = true,
    Falling   = true,
    Ragdoll   = true,
    Climbing  = true,
    Invisible = true,
    Dead      = true,
}

When any active condition matches, scale is temporarily reset to 1.0 (re-applied on exit) — prevents weird visuals during these states.

Sync distance

Config.SyncDistance = 25.0          -- only apply visual scale to players within this range

Performance optimization — players outside this range render at default scale.

Webhook logging

Config.Webhook = {
    Enabled = true,
    URL     = '',                   -- paste webhook URL
    Title   = 'Scale Menu Log',
    Footer  = 'suty-scalemenu',
    Color   = 0xdc2626,
}

Logs scale changes, bypass grants/revokes, and admin-set heights.