Objective

The Objective API is a flexible HUD component designed for the right side of the screen. It can display everything from a single line of text to complex instruction sets with multiple sections, lists, and rich text formatting.

🛠️ Exports

ShowObjective

Displays the objective card with specified content and positioning.

exports['ak47_lib']:ShowObjective(text, title, position)
--
Lib47.ShowObjective(text, title, position)

Parameters:

Argument Type Optional Description
text String/Table No The content to display. Can be a string, a simple list, or a complex sectioned table.
title String Yes The header title. Defaults to Config value.
position String Yes Screen position: 'top', 'center', or 'bottom'.

HideObjective

Removes the objective card from the HUD.

exports['ak47_lib']:HideObjective()
-- or
Lib47.HideObjective()

🧬 Data Structures

The text parameter is highly versatile and handles four main types of input:

1. Simple String

A single line of descriptive text.

local text = "Locate the package in the warehouse."

2. Simple List

An array of strings rendered as a bulleted list.

local text = {
    "Collect the evidence",
    "Escape the police"
}

3. Named Section

An object containing a sub-header and a list.

local text = {
    Title = "Quick Menu",
    List = {
        "Option One <m>1</m>",
        "Option Two <m>2</m>"
    }
}

4. Multi-Section Array

A complex array containing multiple sections or footer text.

local text = {
    { Title = "Combat", List = { "Attack <m>1</m>", "Block <m>2</m>" } },
    { Title = "Movement", List = { "Sprint <k>SHIFT</k>" } },
    "Press <k>ESC</k> to quit" -- Footer text
}

💡 Examples

Example 1: Basic Mission Objective

Ideal for simple tracking at the top right of the screen.

exports['ak47_lib']:ShowObjective(
    "Infiltrate the Humane Labs facility.", 
    "Current Task", 
    "top"
)

Example 2: Editor or Tool Controls

Using the center position and sections to explain controls to a player.

local controls = {
    {
        Title = "Zone Controls",
        List = {
            "Add Point <m>1</m>",
            "Undo Last Point <m>2</m>",
            "Confirm Zone <k>ENTER</k>",
        }
    },
    {
        Title = "Camera",
        List = {
            "Rotate <m>3</m>",
            "Move <k>W</k> <k>A</k> <k>S</k> <k>D</k>",
        }
    },
    "Exit Editor <k>DEL</k>"
}

exports['ak47_lib']:ShowObjective(controls, "Editor Mode", "center")        

Example 3: Dynamic Updates

You can overwrite the current objective simply by calling the export again.

-- First Objective
exports['ak47_lib']:ShowObjective("Wait for the contact...", "The Deal")

-- Update later in the script
Citizen.SetTimeout(5000, function()
    exports['ak47_lib']:ShowObjective("Meet the contact at the pier.", "The Deal")
    PlaySoundFrontend(-1, "Mission_Pass_Notify", "DLC_HEISTS_GENERAL_FRONTEND_SOUNDS", 0)
end)

Example 4: Instruction With Buttons

Lib47.ShowObjective({
    {
        Title = "Current Mode: " .. currentMode,
        List = {}
    },
    {
        Title = "Path Nodes:",
        List = {
            "Add Node <m>1<m>",
            "Undo Node <m>2<m>",
            "Rotate Ped <m>3<m>",
            "Precision Mode <k>SHIFT<k>",
        },
    },
    {
        Title = "Node Types:",
        List = {
            "Toggle Wait (Stoppage) <k>F<k>",
            "Toggle Action (Checkout) <k>G<k>",
        },
    },
    {
        Title = "Navigation:",
        List = {
            "Complete Path <k>ENTER<k>",
            "Skip Step <k>TAB<k>",
            "Go Back <k>BACKSPACE<k>",
            "Cancel Creation <k>DEL<k>",
        }
    },
    {
        Title = "Camera Controls:",
        List = {
            "<m><m> <k>W<k> <k>A<k> <k>S<k> <k>D<k>",
            "Move UP <k>Q<k>",
            "Move Down <k>E<k>",
        },
    },
}, "NPC Navigation")

🎨 Visual Features

  • Night Mode: The card background automatically dims between 21:00 and 06:00 for better visibility.
  • Rich Text: Supports the same <k> (Key) and <m> (Mouse) tags as the Checklist system.
  • Right-Aligned: All text and list bullets are automatically aligned to the right edge of the screen.