Config

Config = {}

--- Debug mode
---
--- This feature will enable additional debug views as well as some debug prints
--- Should only be used in a development-environment
Config.debug = false


--- Default keybinds & tooltip look
Config.keybinds = {
    play = {
        key = 'minus', -- Default keybind - After loading the script once. This keybind will be assigned to your game settings
    },
    style = {
        -- Whether to show the suggested animation tooltip
        show = true,

        -- Positioning of the keybind tooltip (offsets)
        top = 'auto',
        left = 'auto',
        bottom = '16px',
        right = '16px',

        -- Size of the tooltip text
        fontSize = 1.4,

        -- RGBA value of the tooltip background
        bgColor = { 194, 207, 204, 0.6 },

        -- RGBA value of the tooltip text
        textColor = { 20, 20, 20, 1 },

        -- RGBA value of the keybind background
        keybindBgColor = { 40, 40, 40, 0.6 },

        -- RGBA value of the keybind text
        keybindTextColor = { 255, 255, 255, 1 },

        -- Strength of corner rounding
        borderRadius = 0.1,
    }
}


--- Animation play cooldown in ms
Config.cooldown = 1000


--- Controls which will cancel the animation when pressed
-- https://docs.fivem.net/docs/game-references/controls/
Config.cancelControls = {
    22, 23, 25, 263, 264,
}


--- Animation lists
---
--- Here you can create your own lists of animations which you may want to reuse
---
--- Mind that not all pre-configured events use lists. You can also simply input the animations directly into the
--- specific events.
---
--- Animations can also contain tools, noted under a "tool" attribute.
--- these should be a table containing the following values:
--- pos = vector3 of the tool offset position
--- rot = vector3 of the tool offset rotation
--- model = the model name of the tool
--- bone = the numerical bone of attachment
---
--- e.g.
-- tool = {
--     pos = vector3(0.08, -0.1, -0.03),
--     rot = vector3(-75.0, 0.0, 10.0),
--     model = 'prop_tool_pickaxe',
--     bone = 28422,
-- },
---
--- The animations are able to trigger events as well. Noted under an "event" attribute
--- these should contain the following values:
--- event = name of the event
--- type = "client" or "server"
---
---e.g.
-- event = {
--    event = "kq_yourscript:random-event",
--    type = "client"
-- }
---
--- You can see the barbeque prop for an example of the "tool" and "event" usage
Config.animLists = {
    ['sitting'] = {
        {
            dict = 'timetable@ron@ig_5_p3',
            anim = 'ig_5_p3_base',
            flag = 33,
            offset = vector3(0.0, 0.55, 0.52),
        },
        {
            dict = 'timetable@reunited@ig_10',
            anim = 'base_amanda',
            flag = 33,
            offset = vector3(0.0, 0.55, 0.52),
        },
        {
            dict = 'timetable@ron@ig_3_couch',
            anim = 'base',
            flag = 33,
            offset = vector3(0.0, 0.65, 0.52),
        },
        {
            dict = 'timetable@maid@couch@',
            anim = 'base',
            flag = 33,
            offset = vector3(0.0, 0.45, 0.65),
        },
    },
    ['dance'] = {
        {
            dict = 'anim@amb@nightclub@dancers@solomun_entourage@',
            anim = 'mi_dance_facedj_17_v1_female^1',
            flag = 33,
            offset = vector3(0.0, 0.0, 0.0),
        },
        {
            dict = 'anim@amb@nightclub@mini@dance@dance_solo@female@var_a@',
            anim = 'high_center',
            flag = 33,
            offset = vector3(0.0, 0.0, 0.0),
        },
        {
            dict = 'anim@amb@nightclub@mini@dance@dance_solo@female@var_b@',
            anim = 'high_center',
            flag = 33,
            offset = vector3(0.0, 0.0, 0.0),
        },
        {
            dict = 'anim@amb@nightclub@mini@dance@dance_solo@male@var_b@',
            anim = 'high_center_down',
            flag = 33,
            offset = vector3(0.0, 0.0, 0.0),
        },
        {
            dict = 'anim@amb@nightclub@dancers@podium_dancers@',
            anim = 'hi_dance_facedj_17_v2_male^5',
            flag = 33,
            offset = vector3(0.0, 0.0, 0.0),
        },
        {
            dict = 'anim@amb@nightclub@dancers@crowddance_facedj@hi_intensity',
            anim = 'hi_dance_facedj_09_v2_female^1',
            flag = 33,
            offset = vector3(0.0, 0.0, 0.0),
        },
        {
            dict = 'anim@amb@nightclub@mini@dance@dance_solo@female@var_a@',
            anim = 'high_center_up',
            flag = 33,
            offset = vector3(0.0, 0.0, 0.0),
        },
    }
}


--- Animation suggestions for specific props
---
--- Define specific props along with their co-responding animations
--- Feel free to add or remove these
---
--- label: text displayed in the keybind tooltip
--- align: whether or not to align the player with the prop (make sure to specify the offset when true)
--- offset: offset of the animation from the prop
--- models: models of the props on which this action will be possible
--- animations: an inline table of animations or an `Config.animList` table of animations
Config.propSpecific = {
    {
        label = 'sit down',
        align = true,
        offset = vector3(0.0, -1.3, 0.45),
        models = {
            'prop_bench_01a',
            'prop_bench_01c',
            'prop_bench_02',
            'prop_bench_03',
            'prop_bench_04',
            'prop_bench_05',
            'prop_bench_06',
            'prop_bench_07',
            'prop_bench_08',
            'prop_bench_09',
            'prop_bench_10',
            'prop_bench_11',
        },
        animations = Config.animLists['sitting'],
    },
    {
        label = 'dig through the bin',
        align = false,
        models = {
            'prop_bin_01a',
            'prop_bin_03a',
            'prop_bin_05a',
        },
        animations = {
            {
                dict = 'mini@repair',
                anim = 'fixing_a_ped',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
            },
        },
    },
    { -- Complete example with all the options
        label = 'barbeque',
        align = false,
        models = {
            'prop_bbq_5',
        },
        animations = {
            {
                dict = 'amb@prop_human_bbq@male@idle_a',
                anim = 'idle_b',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
                event = {
                    event = 'your-event:name',
                    type = 'client', -- client or server
                    params = 'bbq-start', -- this could be a table as well. It will be sent as the first attribute of the event
                },
                tool = {
                    pos = vector3(0.0, 0.0, 0.0),
                    rot = vector3(0.0, 0.0, 0.0),
                    model = 'prop_fish_slice_01',
                    bone = 28422,
                },
            },
        },
    },
}

--- Animation suggestions for specific areas
---
--- Define specific areas along with their co-responding animations
--- Feel free to add or remove these
---
--- label: text displayed in the keybind tooltip
--- coords: coordinates of the area
--- radius: radius of the animation area
--- animations: an inline table of animations or an `Config.animList` table of animations
Config.areaSpecific = {
    { -- vanilla unicorn
        label = 'dance',
        coords = vector3(115.6, -1289.0, 28.2),
        radius = 13.0,
        animations = Config.animLists['dance'],
    },
    { -- tequilalala
        label = 'dance',
        coords = vector3(-557.65, 285.32, 82.2),
        radius = 10.0,
        animations = Config.animLists['dance'],
    },
    { -- bahamas mammas
        label = 'dance',
        coords = vector3(-1386.73, -619.17, 30.8),
        radius = 10.0,
        animations = Config.animLists['dance'],
    },
}


--- Main animation suggestion configuration
---
--- Available events:
--- - lean - Leaning when something is directly behind the player
--- - leanBar - Leaning forward when something is directly in front the player but not higher up than their chest (bar etc.)
--- - sit - Sitting down when something is located behind the player below their waist (walls, stairs, chairs etc.)
--- - idle - May be used anywhere. Active after the player has been stationary for 4 or more seconds
--- - intimidate - General intimidation gestures. Active for few seconds after player has been in melee combat
--- - showPain - Shows that the player is hurt. Active when player has below 60% of their health
--- - inspectCar - Inspects cars engine/trunk. Active when player is looking at an engine bay or trunk which is open
--- - cheerBurnout - Cheering/clapping. Active when player is looking at a car performing a burnout or drifting
--- - greet - Waving hello. Active when a player is looking at another player whom he hasn't greeted before in the last 15 minutes
--- - conversation - Hand motion imitating player talking with others. Active when player is looking at a nearby player
---
--- enabled: whether the specific action type should be enabled
--- label: text displayed in the keybind tooltip
--- animations: an inline table of animations or an `Config.animList` table of animations
Config.animations = {
    lean = {
        enabled = true,
        label = 'lean',
        animations = {
            {
                dict = 'anim@scripted@freemode_npc@fix_agy_ig4_lamar@',
                anim = 'lean_wall_idle_01_lamar',
                flag = 33,
                offset = vector3(0.0, 0.35, 0.0),
            },
            {
                dict = 'amb@world_human_leaning@male@wall@back@foot_up@idle_a',
                anim = 'idle_a',
                flag = 33,
                offset = vector3(0.0, 0.35, 0.0),
            },
            {
                dict = 'anim@scripted@freemode_npc@fix_agy_ig4_lamar@',
                anim = 'lean_wall_idle_01_lamar',
                flag = 33,
                offset = vector3(0.0, 0.35, 0.0),
            },
            {
                dict = 'amb@world_human_leaning@female@wall@back@holding_elbow@idle_a',
                anim = 'idle_a',
                flag = 33,
                offset = vector3(0.0, 0.35, 0.0),
            }
        },
    },
    leanBar = {
        enabled = true,
        label = 'lean over',
        animations = {
            {
                dict = 'anim@amb@nightclub@lazlow@ig1_vip@',
                anim = 'clubvip_base_laz',
                flag = 33,
                offset = vector3(0.0, -0.55, 0.02),
            },
            {
                dict = 'amb@prop_human_bum_shopping_cart@male@idle_a',
                anim = 'idle_c',
                flag = 33,
                offset = vector3(0.0, -0.55, 0.02),
            },
            {
                dict = 'anim@amb@nightclub@lazlow@ig1_vip@',
                anim = 'clubvip_dlg_jimmyboston_laz',
                flag = 33,
                offset = vector3(0.0, -0.45, 0.085),
            },
        },
    },
    sit = {
        enabled = true,
        label = 'sit down',
        animations = Config.animLists['sitting'],
    },
    idle = {
        enabled = true,
        label = 'idle',
        minimumTime = 4, -- Minimum time in seconds it'll take before the suggestion appears
        animations = {
            {
                dict = 'rcmjosh1',
                anim = 'idle',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'rcmnigel1a',
                anim = 'base',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'missbigscore2aig_3',
                anim = 'wait_for_van_c',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'amb@world_human_hang_out_street@female_arms_crossed@idle_a',
                anim = 'idle_a',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'anim@heists@heist_corona@single_team',
                anim = 'single_team_loop_boss',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
            },
        }
    },
    intimidate = {
        enabled = true,
        label = 'intimidate',
        animations = {
            {
                dict = 'anim@mp_player_intselfiethe_bird',
                anim = 'idle_a',
                flag = 48,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'anim@mp_player_intupperfinger',
                anim = 'idle_a_fp',
                flag = 48,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'mini@triathlon',
                anim = 'want_some_of_this',
                flag = 48,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'anim@mp_player_intcelebrationfemale@knuckle_crunch',
                anim = 'knuckle_crunch',
                flag = 48,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'mp_player_int_uppergrab_crotch',
                anim = 'mp_player_int_grab_crotch',
                flag = 48,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'misscommon@response',
                anim = 'bring_it_on',
                flag = 48,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'misscommon@response',
                anim = 'screw_you',
                flag = 48,
                offset = vector3(0.0, 0.0, 0.0),
            },
        }
    },
    showPain = {
        enabled = true,
        label = 'show pain',
        animations = {
            {
                dict = 'anim@amb@casino@valet_scenario@pose_d@',
                anim = 'scratch_face_a_m_y_vinewood_01',
                flag = 48,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'anim@amb@machinery@lathe@',
                anim = 'scratch_amy_skater_01',
                flag = 48,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'timetable@gardener@smoking_joint',
                anim = 'idle_cough',
                flag = 48,
                offset = vector3(0.0, 0.0, 0.0),
            },
        }
    },
    inspectCar = {
        enabled = true,
        label = 'inspect vehicle',
        animations = {
            {
                dict = 'anim@amb@carmeet@checkout_engine@male_a@base',
                anim = 'base',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'anim@amb@carmeet@checkout_engine@male_b@base',
                anim = 'base',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'anim@amb@carmeet@checkout_engine@male_c@base',
                anim = 'base',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'anim@amb@carmeet@checkout_engine@male_d@base',
                anim = 'base',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'anim@amb@carmeet@checkout_engine@male_f@base',
                anim = 'base',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'anim@amb@carmeet@checkout_engine@male_g@base',
                anim = 'base',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'anim@amb@carmeet@checkout_engine@male_h@base',
                anim = 'base',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
            },
        },
    },
    cheerBurnout = {
        enabled = true,
        label = 'cheer',
        animations = {
            {
                dict = 'amb@world_human_cheering@male_a',
                anim = 'base',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'anim@amb@nightclub@peds@',
                anim = 'amb_world_human_cheering_female_c',
                flag = 33,
                offset = vector3(0.0, 0.0, 0.0),
            },
        },
    },
    greet = {
        enabled = true,
        label = 'greet',
        animations = {
            {
                dict = 'friends@frj@ig_1',
                anim = 'wave_e',
                flag = 48,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'gestures@m@standing@casual',
                anim = 'gesture_hello',
                flag = 48,
                offset = vector3(0.0, 0.0, 0.0),
            },
        },
    },
    conversation = {
        enabled = true,
        label = 'talk',
        animations = {
            {
                dict = 'misscarsteal4@vendor',
                anim = 'idle_a_customer1',
                flag = 48,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'missfbi3_party_d',
                anim = 'stand_talk_loop_a_male1',
                flag = 48,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'missfbi3_party_d',
                anim = 'stand_talk_loop_a_male2',
                flag = 48,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'missfbi3_party_d',
                anim = 'stand_talk_loop_b_male2',
                flag = 49,
                offset = vector3(0.0, 0.0, 0.0),
            },
            {
                dict = 'missfbi3_party_d',
                anim = 'stand_talk_loop_b_male3',
                flag = 49,
                offset = vector3(0.0, 0.0, 0.0),
            },
        },
    },

}

Last updated