Interactive Power-ups

Interactive Power-ups

Looking to bring a vibrant and unique menu full of new features to your server? This interactive power-up menu is a fully customizable menu, with build in features like a flashlight, rappelling rope, area scan, mini-drone and much more.

:shopping_cart: Get it here: gamzkystore.com

:question: Support: Discord

:movie_camera: Detailed preview: Youtube

Features

  • The overlay position and rotation is updated with the player and camera movement, creating an immersive 3D effect.
  • A total of 8 slots are configurable with a unique power-up, cooldown, job/item restriction, icon, sound-effect and more.
  • Can works as a s̲t̲a̲n̲d̲a̲l̲o̲n̲e̲ script without any requirements, but it is also configured and tested for o̲x̲, e̲s̲x̲ and q͟b to handle item and job restrictions.
  • Includes 6 highly configurable power-ups, which are described in more detail below.

Power-ups included with the script (any power-up can be tweaked or removed)

  • A toggleable flashlight, which is synchronized between nearby players.
  • An area scan, revealing either all nearby peds or only real players for a defined amount of time.
  • A mini-drone, looks for nearby peds or only real players, and aims a laser at the closest one.
  • A smokescreen to quickly create cover.
  • The ability to equip armour.
  • A rappelling rope, enabling you to rappel down any building (only partially synced between clients).
  • (Additionally) an indication of the ammo in the currently equipped weapon.

How it works

  • Press [E] (or another configured key) to open the overlay.
  • Use a configured key, to toggle a power-up.
  • The power-up is executed, if you meet the cooldown, item and/or job requirements.
  • After the cooldown has passed, the power-up is ready to be used again.

Resmon: Idle: 0.02ms - Overlay with power-ups active: 0.04 to 0.1ms

Core/framework related functions are still accessible in the encrypted version, feel free to create a support ticket in our Discord in case of questions.

Config
Config = {}

Config.InteractionKey = 38                           -- E (see https://docs.fivem.net/docs/game-references/controls/ if you want to change the key)
Config.CenteredPedBoneId = 24816                     -- 24816 is the bone for the spine, you can change this to the bone you want to center the UI on.
Config.CenteredPedOffset = vector3(0.3, -0.2, -0.03) -- The offset of the UI from the bone, you can change this to the offset you want.
Config.FirstPersonPosition = vector2(0.9, 0.15)      -- The position of the UI in first person view {values between 0.0 and 1.0, vector2(0.5, 0.5) is the center of the screen}, you can change this to the position you want. You can completely remove this variable if you do not want the UI to be shown in first person view.

Config.Layout = {
    [1] = { -- This cell is not used by default, feel free to use and tweak it. All the options are explained below.

        -- !! REQUIRED PARAMETERS !!
        -- label = 'flashlight-icon.svg',        -- The displayed label, can also be an image defined in the resources/images folder
        -- row = 1,                              -- The row of the powerup icon in the 3x3 grid
        -- col = 1,                              -- The column of the powerup icon in the 3x3 grid

        -- !! OPTIONAL PARAMETERS !!
        -- keyLabel = 'L',                       -- The key label of the powerup
        -- keyNumber = 182,                      -- The key number of the powerup (see https://docs.fivem.net/docs/game-references/controls/ if you want to change the key)
        -- startSound = 'flashlight-enable.wav', -- The sound that plays when the powerup is enabled, remove if you don't want a sound
        -- endSound = 'flashlight-disable.wav',  -- The sound that plays when the powerup is disabled, remove if you don't want a sound
        -- action = function(toggled)            -- The action that is executed when the powerup is toggled
        --     ToggleFlashlight(toggled)         -- Toggle the flashlight
        -- end,
        -- animation = 'flashlight',             -- The animation that plays when the powerup is toggled, remove if you don't want an animation
        -- cooldown = 1000,                      -- The cooldown of the powerup in milliseconds, if you do not define a cooldown the powerup can be toggled on and off.
        -- requiredJob = { 'police' },           -- The jobs that can use the powerup, remove if you don't want a job restriction. You can define multiple jobs like this: { 'police', 'ambulance' }
        -- requiredItem = 'flashlight',          -- The required item to use the powerup, remove if you don't want an item restriction
        -- removeOnToggle = false,               -- If true, the item will be removed when the powerup is toggled
        -- volume = 0.75,                        -- The volume of the startSound and endSound, value between 0.0 and 1.0
        -- randomizeSound = 0.1,                 -- The amount of randomization to the sound, towards -1 decreases frequency, towards 1 increases frequency. This makes sure the sound is not too repetitive over multiple uses.
        -- outlineStyle = 'dotted',              -- The style of the cell outline, remove if you don't want an outline
    },
    [2] = { -- This cell toggles the flashlight
        label = 'flashlight-icon.svg',
        row = 1,
        col = 2,
        keyLabel = 'L',
        keyNumber = 182,
        startSound = 'flashlight-enable.wav',
        endSound = 'flashlight-disable.wav',
        action = function(toggled)
            ToggleFlashlight(toggled)
        end,
        animation = 'flashlight',
    },
    [3] = { -- This cell displays the current ammo of the player's weapon
        label = '0/0',
        row = 1,
        col = 3,
        update = function()
            return GetWeaponAmmo()
        end,
    },
    [4] = { -- This cell enables the drone
        label = 'drone-icon.svg',
        row = 2,
        col = 1,
        keyLabel = 'H',
        keyNumber = 74,
        cooldown = 15000,
        action = function(toggled)
            EnableAreaDrone()
        end,
    },
    [5] = { -- This cell refreshes the player's armour
        label = 'vest-icon.svg',
        row = 2,
        col = 3,
        keyLabel = 'K',
        keyNumber = 311,
        cooldown = 20000,
        animation = 'armour',
        requiredItem = 'armour',
        removeOnToggle = true,
        action = function(toggled)
            GiveArmorToPlayer()
        end,
    },
    [6] = { -- This cell deploys a smoke grenade
        label = 'smoke-icon.svg',
        row = 3,
        col = 1,
        keyLabel = 'Z',
        keyNumber = 20,
        cooldown = 10000,
        requiredItem = 'weapon_smokegrenade',
        removeOnToggle = true,
        action = function(toggled)
            DeploySmoke()
        end,
    },
    [7] = { -- This cell scans the area for peds/players
        label = 'scan-icon.svg',
        row = 3,
        col = 2,
        keyLabel = 'X',
        keyNumber = 73,
        cooldown = 3000,
        animation = 'scan',
        startSound = 'scan.wav',
        randomizeSound = -0.05,
        action = function(toggled)
            ExecuteAreaScan()
        end,
    },
    [8] = { -- This cell allows the player to rappel down a rope
        label = 'rope-icon.svg',
        row = 3,
        col = 3,
        keyLabel = 'B',
        keyNumber = 29,
        cooldown = 3000,
        requiredItem = 'rope',
        removeOnToggle = false,
        action = function(toggled)
            RappelDownRope()
        end,
    },
}

-- All animations that are used are defined below
Config.Animations = {
    flashlight = {                      -- The animation label used throughout the script
        dict = 'random@arrests',        -- The dictionary of the animation
        anim = 'generic_radio_chatter', -- The animation
        duration = 300,                 -- The duration of the animation in milliseconds
        flag = 51,                      -- The flag of the animation
        -- animationStart = 0.5,        -- If you want to start the animation at a specific point, you can set the animationStart to the point you want to start the animation at (value between 0.0 and 1.0)
    },
    -- More animations are defined in the script here, but left out of this preview.
}

-- The configuration for the flashlight powerup
Config.Flashlight = {
    attachBone = 64729,                        -- The bone id to attach the flashlight to, 10706 is the bone for the right clavicle
    boneOffset = vector3(0.08, 0.07, -0.06),   -- The offset of the flashlight from the bone
    pointOffset = vector3(0.1, 4.0, -0.9),     -- The offset of the point from the bone where the light will point at
    intensity = 1.0,                           -- The intensity of the flashlight
    distance = 20.0,                           -- The distance of the flashlight
    syncDistance = 200.0,                      -- The maximum distance at which the flashlight will be visible to other players
    prop = {                                   -- Configure a flashlight prop
        enabled = true,                        -- if true, the prop will be spawned when the player is using the flashlight
        presistent = true,                     -- if true, the prop will not be despawned when the player is using the flashlight
        model = 'prop_flash_unit',             -- The model of the prop
        position = vector3(0.14, 0.02, -0.06), -- The position of the prop with respect to the attachBone
        rotation = vector3(180, -0.60, 22.0)   -- The rotation of the prop with respect to the attachBone
    }
}

-- The configuration for the scan powerup
Config.Scan = {
    scanRadius = 75.0,                         -- The radius of the scan
    fadeOpacityRadius = 25.0,                  -- The radius after which the opacity of the scan is gradually reduced
    scanDuration = 3000,                       -- The duration of the scan
    opacity = 0.3,                             -- The opacity of the scan
    color = { r = 255, g = 230, b = 128 },     -- The rgb color of the scan
    onlyTargetPlayers = false,                 -- If true, the scan will only highlight actual players, not peds
    highlight = {
        boneId = 12844,                        -- The bone id of the player to highlight, in this case 12844 is the head
        spriteSize = 0.01,                     -- The size of the highlight sprite
        textureDict = 'trafficcam',            -- The texture dictionary of the highlight sprite
        textureName = 'cursor',                -- The texture name of the highlight sprite
        color = { r = 255, g = 255, b = 255 }, -- The rgb color of the sprite (note that the default sprite itself is already yellow, so this will color will be applied on top of it)
        additionalHighlightDuration = 5000,    -- The additional duration of the highlight after the scan has fully completed
    }
}

-- The configuration for the drone powerup
Config.Drone = {
    model = 'ba_prop_battle_cameradrone',                -- The model of the drone
    height = 1.25,                                       -- The average height at which the drone moves above the player
    radius = 1.0,                                        -- The radius of the drone's movement
    speed = 0.5,                                         -- The speed of the drone's movement
    activeTime = 10000,                                  -- The time the drone is active for untill it despawns
    laserColor = { r = 255, g = 230, b = 128, a = 255 }, -- The color of the laser
    maxLaserDistance = 75.0,                             -- The maximum distance of the laser, if no ped/player is within this distance, the drone will not be able to target them
    requiresLineOfSight = true,                          -- If true, the drone will only be able to target peds/players that are within line of sight
    onlyTargetPlayers = false,                           -- If true, the drone will only be able to target actual players, not peds
    particle = {                                         -- The particle effects that play when the drone spawns and despawns
        ['start'] = { dict = 'core', name = 'ent_sht_telegraph_pole', size = 0.3, duration = 1000 },
        ['end'] = { dict = 'core', name = 'ent_sht_electrical_box', size = 0.5, duration = 7500 }
    }
}

-- The configuration for the rope powerup
Config.Rope = {
    minLength = 1.0,                 -- The minimum length of the rope
    maxLength = 100.0,               -- The maximum length of the rope
    introAnimation = 'rappel_start', -- The animation that plays when the player starts rappelling (see Config.Animations)
    outroAnimation = 'rappel_end',   -- The animation that plays when the player stops rappelling (see Config.Animations)
    syncPositionOnStandStill = true, -- If true, the player's position will be synced to other clients every 500ms if the player is not moving. If this is set to false, the position of the rappeling player will not be synced to other clients until the ground is reached.
}

-- The configuration for the smoke powerup
Config.Smoke = {
    dict = 'core',                  -- The dictionary of the smoke particle effect
    name = 'exp_grd_grenade_smoke', -- The name of the smoke particle effect
    size = 2.0,                     -- The size of the smoke particle effect
    duration = 20000,               -- The duration of the smoke particle effect
    syncDistance = 400.0,           -- The maximum distance at which the smoke particle effect will be synced to other players
    useExplosionForSound = true,    -- If true, the script will also create a very small smoke explosion at the smoke location, to create the sound effect
}

-- Change any notification text below
Config.Locales = {
    ['missing_job'] = 'You do not have the required job to use this.',
    ['missing_item'] = 'You do not have the required item to use this.',
    ['cannot_toggle'] = 'You cannot toggle this action.',
    ['no_suitable_location'] = 'Could not find a suitable location to rappel down.',
    ['unable_to_find_rope_ground'] = 'Unable to find any ground beneath the rope.',
    ['rope_too_short'] = 'The rope would be too short to rappel down.',
    ['rope_too_long'] = 'The rope would be too long to rappel down.',
    ['cannot_rappel'] = 'You cannot rappel down right now.',
}

-- Debug mode enables some prints that can help you debug the script.
Config.Debug = false
Code is accessible Partially (config/framework/ui related code is accessible)
Subscription-based No
Lines (approximately) ~2000
Requirements None
Support Yes
7 Likes

very nice the mod

1 Like

Thanks a lot :smiley:

Very cool all in one package and price is great too, well done!

1 Like