Skip to content

๐ŸŒŸ BLN Native Wheel โ€‹

bln wheel

๐Ÿ“บ Preview โ€‹

Video Preview

๐Ÿ’ฐ Buy Now โ€‹

Get it now

Introducing BLN Wheel Menu - a premium radial menu system built using native RedM functions, offering the smoothest and most authentic experience possible. Say goodbye to laggy NUI-based menus and hello to seamless, game-like interaction!

โœจ Why Choose BLN Wheel Menu? โ€‹

  • ๐Ÿš€ Native Implementation - Built using game natives for that authentic RedM feel
  • โšก Zero NUI Impact - No performance hit from web-based interfaces
  • ๐ŸŽฏ Pixel-Perfect Recreation - Matches the original game's wheel menu design
  • ๐Ÿ’ซ Unlimited Menu Items - No more 8-item limit, create detailed nested menus
  • ๐ŸŽจ Fully Customizable - Easy to configure and adapt to your server's needs
  • ๐Ÿ”’ Advanced Filtering System - Control access to menu items based on any condition
  • ๐Ÿ–๏ธ Emotes Menu - Emotes menu out of the box for you, contains many emotes ready to be used
  • ๐ŸŽฎ Complete Controller Support - Full keyboard, mouse and controller navigation support
  • ๐Ÿ”„ Hybrid Input System - Seamless switching between mouse and keyboard/controller
  • ๐Ÿ”ฅ Resource-Friendly - Minimal performance impact on your server
  • ๐ŸŽฎ Customizable Controls - Choose between toggle or hold modes

๐Ÿ“‹ Quick Setup โ€‹

  1. Add to your resources folder
  2. Add ensure bln_wheel to your server.cfg
  3. Configure your menu items
  4. Enjoy!

โš™๏ธ Configuration โ€‹

The menu can be fully customized through the config.lua file:

Core Settings โ€‹

lua
Config = {
    showMode = 'hold',        -- 'toggle' or 'hold'
    zoomEffectEnabled = true, -- Enable zoom effect when menu is shown

    -- Keybind settings
    keys = {
        toggle = 0x8AAA0AD4, -- LEFT ALT - to show/hide the menu
        left = 0xA65EBAB4,   -- LEFT ARROW
        right = 0xDEB34313,  -- RIGHT ARROW
        select = 0xCEFD9220, -- E
        back = 0x156F7119,   -- BACKSPACE
    },
}

Visual Settings โ€‹

lua
Config = {
    fontId = 7,                                         -- Font index
    bgColor = { r = 0, g = 0, b = 0, a = 200 },         -- Background color (RGBA)
    hoverColor = { r = 219, g = 2, b = 2 },             -- Hover highlight color (RGB)
    textColor = { r = 255, g = 255, b = 255, a = 255 }, -- Text color (RGBA)
    
    -- Back button customization
    backIcon = {
        icon = {
            dict = 'generic_textures',
            name = 'selection_arrow_left',
            color = { r = 255, g = 255, b = 255, a = 255 }
        },
        label = "Back",
        hoverColor = { r = 255, g = 255, b = 255, a = 100 }
    },
    
    -- Locked item icon customization
    lockIcon = {
        dict = 'generic_textures',
        name = 'lock',
        scale = 0.02,
        offsetX = 0.015,
        offsetY = 0.015,
        color = { r = 255, g = 255, b = 255, a = 255 }
    }
}

๐ŸŽฎ Navigation Controls โ€‹

BLN Wheel Menu now features full keyboard and controller support with intuitive navigation:

Keyboard Controls โ€‹

Example config:

lua
keys = {
    toggle = 0x8AAA0AD4, -- LEFT ALT - to show/hide the menu
    left = 0xA65EBAB4,   -- LEFT ARROW - navigate counter-clockwise
    right = 0xDEB34313,  -- RIGHT ARROW - navigate clockwise
    select = 0xCEFD9220, -- E - select item
    back = 0x156F7119,   -- BACKSPACE - go back to previous menu
},

Controller Support โ€‹

The menu works seamlessly with controllers, using the left/right directional inputs to navigate and standard controller buttons for selection. Example config:

lua
keys = {
    toggle = 0x80F28E95,    -- L key - to show/hide the menu (controller L arrow)
    left = 0xC0651D40,      -- R stick up on controller
    right = 0x8ED92E16,     -- R stick down on controller
    select = 0xCEFD9220,    -- E
    back = 0x156F7119,      -- BACKSPACE
},

Hybrid Input System โ€‹

  • Automatic Detection - Seamlessly switch between mouse and keyboard/controller
  • Mouse Movement - Any mouse movement automatically switches to mouse control
  • Speed Navigation - Hold arrow keys for faster menu navigation
  • Contextual Feedback - Visual and sound feedback mirrors the input method used

๐ŸŽฏ Advanced Filtering System โ€‹

The new filtering system allows you to control access to menu items based on any condition you define. This is perfect for permission-based features, context-sensitive actions, or dynamic menu adjustments.

Setting Up Filters โ€‹

You can choose between two modes for handling filtered items:

lua
Config = {
    filterMode = 'disable', -- 'disable' or 'hide'
}
  • disable - Shows filtered items but displays them as locked (with a lock icon)
  • hide - Completely hides filtered items from the menu

Creating Filter Functions โ€‹

Filters are created using a function that returns a boolean value and an optional mode:

lua
Config = {
    filter = function(itemName)
        -- Example: disable delivery wagon
        if itemName == "delivery_wagon" then
            return false, 'disable'  -- Return false to filter out, and specify mode
        end
        
        -- Example: hide an item completely
        if itemName == "admin_panel" and not IsPlayerAdmin() then
            return false, 'hide'
        end
        
        return true  -- Return true to allow the item
    end
}

The filter function receives the item name and can use any logic to determine accessibility. You can check:

  • Player roles/permissions
  • Game state conditions
  • Character attributes
  • Time-based availability
  • Location-based restrictions

Filter Mode Override โ€‹

You can override the global filter mode on a per-item basis by returning a second parameter:

lua
return false, 'disable'  -- Always show but disable this item
-- or
return false, 'hide'     -- Always hide this item completely

๐ŸŽฏ Adding Menu Items โ€‹

The wheel menu now supports unlimited items with nested submenus. Adding items has been enhanced with better organization:

lua
Config.items = {
    {
        name = "item_unique_id",                   -- Unique identifier for filtering
        label = "Item Name",                        -- Display name
        icon = {
            texture_dict = "texture_dictionary",    -- Icon texture dictionary
            texture_name = "texture_name"           -- Icon texture name
        },
        color = { r = 255, g = 255, b = 255, a = 255 }, -- Icon color (RGBA)
        action = function()                         -- Action to execute when clicked
            -- Your code here
        end
    },
    
    -- Item with submenu
    {
        name = "submenu_id",
        label = "Submenu Name",
        icon = { ... },
        color = { ... },
        items = {
            -- Submenu items go here
            {
                name = "sub_item_1",
                label = "Submenu Item 1",
                icon = { ... },
                color = { ... },
                action = function() 
                    -- Action for submenu item 
                end
            },
            -- More submenu items...
        }
    }
}

You can add as many items and menus as you wants, like menu > menu > menu > menu ....etc

๐Ÿ’ก Example With Nested Menus and Filtering โ€‹

lua
Config.items = {
    -- Clothing Menu with nested categories
    {
        name = "clothing_menu",
        label = "Clothes Menu",
        icon = { texture_dict = "inventory_items_mp", texture_name = "clothing_generic_m_sweater" },
        color = { r = 255, g = 255, b = 255, a = 255 },
        items = {
            {
                name = "hat_menu",
                label = "Hat",
                icon = { texture_dict = "inventory_items_mp", texture_name = "clothing_generic_m_sweater" },
                color = { r = 255, g = 255, b = 255, a = 255 },
                items = {
                    -- Hat submenu items
                }
            },
            -- More clothing categories
        }
    },
    
    -- Wagon Menu with filtering
    {
        name = "wagon_menu",
        label = "Call My Wagon",
        icon = { texture_dict = "inventory_items_mp", texture_name = "generic_coach" },
        color = { r = 255, g = 255, b = 255, a = 255 },
        items = {
            {
                name = "hunting_wagon",
                label = "Hunting Wagon",
                icon = { texture_dict = "inventory_items_mp", texture_name = "generic_coach" },
                color = { r = 255, g = 255, b = 255, a = 255 },
                action = function() print('Calling hunting wagon..') end
            },
            {
                name = "delivery_wagon", -- This will be filtered in our example
                label = "Delivery Wagon",
                icon = { texture_dict = "inventory_items_mp", texture_name = "generic_coach" },
                color = { r = 255, g = 255, b = 255, a = 255 },
                action = function() print('Calling delivery wagon..') end
            }
        }
    }
}

๐ŸŽฎ Interaction Modes โ€‹

Choose how players interact with the wheel menu:

lua
Config = {
    showMode = 'hold', -- 'toggle' or 'hold'
}
  • toggle - Press the key once to open the menu, press again to close
  • hold - Hold the key to keep the menu open, release to close

๐Ÿ›‘ Exports โ€‹

lua
-- To disable the menu:
exports.bln_wheel:DisableMenu()

-- To enable the menu:
exports.bln_wheel:EnableMenu()

-- To check if the menu is enabled:
local isEnabled = exports.bln_wheel:IsMenuEnabled()

-- To check if the menu is currently visible:
local isVisible = exports.bln_wheel:IsMenuVisible()

-- To force close the menu:
exports.bln_wheel:CloseMenu()

๐ŸŽจ Customization โ€‹

The menu now offers more customization options:

Font Selection โ€‹

lua
Config = {
    fontId = 7, -- Font index for menu text
}

Back Button Customization โ€‹

lua
Config = {
    backIcon = {
        icon = {
            dict = 'generic_textures',
            name = 'selection_arrow_left',
            color = { r = 255, g = 255, b = 255, a = 255 }
        },
        label = "Back",
        hoverColor = { r = 255, g = 255, b = 255, a = 100 }
    }
}

Lock Icon for Disabled Items โ€‹

lua
Config = {
    lockIcon = {
        dict = 'generic_textures',
        name = 'lock',
        scale = 0.02,
        offsetX = 0.015,
        offsetY = 0.015,
        color = { r = 255, g = 255, b = 255, a = 255 }
    }
}

๐ŸŽจ Color Schemes Ready Examples โ€‹

๐ŸŒŸ Classic Dark (Default) โ€‹

lua
Config = {
    bgColor = { r = 0, g = 0, b = 0, a = 200 },          -- Solid black with transparency
    hoverColor = { r = 219, g = 2, b = 2 },              -- Bright red
    textColor = { r = 255, g = 255, b = 255, a = 255 },  -- Pure white
}

๐ŸŒ… Western Sunset โ€‹

lua
Config = {
    bgColor = { r = 139, g = 69, b = 19, a = 200 },      -- Dark brown with transparency
    hoverColor = { r = 255, g = 140, b = 0 },            -- Dark orange
    textColor = { r = 255, g = 248, b = 220, a = 255 },  -- Cornsilk white
}

๐ŸŒŒ Night Sky โ€‹

lua
Config = {
    bgColor = { r = 25, g = 25, b = 112, a = 200 },      -- Midnight blue
    hoverColor = { r = 138, g = 43, b = 226 },           -- Blue violet
    textColor = { r = 176, g = 196, b = 222, a = 255 },  -- Light steel blue
}

๐Ÿƒ Forest Theme โ€‹

lua
Config = {
    bgColor = { r = 34, g = 56, b = 34, a = 200 },       -- Dark forest green
    hoverColor = { r = 107, g = 142, b = 35 },           -- Olive drab
    textColor = { r = 245, g = 245, b = 220, a = 255 },  -- Beige
}

๐Ÿœ๏ธ Desert Sand โ€‹

lua
Config = {
    bgColor = { r = 160, g = 82, b = 45, a = 200 },      -- Saddle brown
    hoverColor = { r = 210, g = 180, b = 140 },          -- Tan
    textColor = { r = 255, g = 235, b = 205, a = 255 },  -- Blanched almond
}

๐ŸŒ‘ Stealth Mode โ€‹

lua
Config = {
    bgColor = { r = 47, g = 47, b = 47, a = 200 },       -- Dark gray
    hoverColor = { r = 105, g = 105, b = 105 },          -- Dim gray
    textColor = { r = 192, g = 192, b = 192, a = 255 },  -- Silver
}

๐Ÿ’Ž Royal Theme โ€‹

lua
Config = {
    bgColor = { r = 25, g = 25, b = 112, a = 200 },      -- Dark blue
    hoverColor = { r = 218, g = 165, b = 32 },           -- Goldenrod
    textColor = { r = 240, g = 230, b = 140, a = 255 },  -- Khaki
}

๐Ÿ”ฅ Ember โ€‹

lua
Config = {
    bgColor = { r = 128, g = 0, b = 0, a = 200 },        -- Maroon
    hoverColor = { r = 255, g = 140, b = 0 },            -- Dark orange
    textColor = { r = 255, g = 228, b = 196, a = 255 },  -- Bisque
}

๐ŸŒŠ Ocean Deep โ€‹

lua
Config = {
    bgColor = { r = 0, g = 51, b = 102, a = 200 },       -- Deep blue
    hoverColor = { r = 32, g = 178, b = 170 },           -- Light sea green
    textColor = { r = 240, g = 248, b = 255, a = 255 },  -- Alice blue
}

๐Ÿ‡ Purple Dusk โ€‹

lua
Config = {
    bgColor = { r = 48, g = 25, b = 52, a = 200 },       -- Dark purple
    hoverColor = { r = 147, g = 112, b = 219 },          -- Medium purple
    textColor = { r = 230, g = 230, b = 250, a = 255 },  -- Lavender
}

To apply any of these themes, simply copy the color configuration and replace the existing color settings in your config.lua file.

๐ŸŒŸ Premium Support โ€‹

Need help? Our dedicated support team is ready to assist you with:

  • Custom implementation
  • Configuration assistance
  • Technical support

๐Ÿค Support โ€‹

Need help? Have questions? Join our Discord server for support and updates!

  • ๐Ÿ’ฌ Discord: Join Here
  • ๐ŸŽฎ Live support and community help
  • ๐Ÿ”„ Regular updates and improvements