Skip to content

Customization

Behaviour is in config.lua. Anything that touches your framework, your notifications or what an effect actually does is in the bridge/ folder, which is left open for exactly that reason.


File or folderWhat it decidesOpen?
config.luaEvery setting on this page, and the list of vapesOpen
locales/*.luaNotification texts, one file per languageOpen
bridge/client_bridge.luaFramework detection on the client, notifications, the progress bar, and what every effect doesOpen
bridge/server_bridge.luaFramework detection on the server, removing an empty vape, the inventory check, and the stress hook OnVapePuffOpen
bridge/stress.luaAn older copy of the stress hook. It is not loaded by the manifest; edit server_bridge.lua insteadOpen
client/client.luaTaking the vape out, the puff, the smoke and its syncEscrowed
server.luaRegisters every vape as a usable item and relays the smokeEscrowed
html/The progress bar: index.html, style.css, script.jsPlain files
stream/The ten vape models and def_props.ytypAssets
inventory_items/Ready-made item definitions for ESX, ox_inventory and QBCoreReference
inventory_images/One icon per itemAssets

OptionWhat it doesDefault
Config.LocaleLanguage of the notificationsen
Config.ShowNotificationsShow notifications at all. Off means no “took out”, “on cooldown”, “empty” or power messagesfalse
Config.EnableMaxPuffsVapes run out after their puffs counttrue
Config.RemoveVapeCommandChat command that puts the vape awayvape
Config.PuffKeyDefault key for the puffE
Config.DisableCombatButtonsBlocks the combat buttons (attack and aim) while the smoke comes outtrue
Config.StressCalls the stress hook on every puff (see Stress)true

Config.PuffKey is a default. The puff is a FiveM key binding called “Vape Puff”, so each player can change it under Settings › Key Bindings › FiveM, and once a player has the binding saved, changing Config.PuffKey no longer changes it for them.


OptionWhat it doesDefault
Config.SpeedVapeInfiniteStaminaStamina does not drain during the speed effecttrue
Config.StaticHealthfalse: every health puff adds Config.Health. true: a puff raises health to Config.Health if it is below itfalse
Config.HealthAmount added, or the level to raise to. On the static setting use 101–200, the game’s health scale10
Config.StaticArmorSame idea for armour: add, or raise tofalse
Config.ArmorAmount added, or the level to raise to (up to 100)10

Health is always kept between 100 and 200, armour at or below 100.


OptionWhat it doesDefault
Config.VapeExhaleSize of the smoke particle0.4
Config.SmokeOpacityHow solid the smoke is, 0.0 to 1.01.0
Config.SmokeDelaySeconds between the puff animation and the smoke appearing1.5
Config.ParticleWhich particle is used: a dict and a name. Ships as the burnout smoke from scr_recartheftscr_recartheft / scr_wheel_burnout
Config.SmokeOffsetWhere the smoke starts relative to the head: PosX, PosY, PosZ, RotX, RotY, RotZ0.05, 0.0, 0.5, 0, 0, 0

Each cloud lasts 1.5 seconds and is shown to players within 30 metres.


Each entry is item name → settings. The full shipped list is on 🎒 Items.

FieldWhat it does
propWhich model is held: mic_black, mic_blue, mic_green, mic_lightblue, mic_orange, mic_pink, mic_purple, mic_red, mic_white, mic_yellow
LabelName used on the progress bar
SmokeColorAn R, G, B colour, or the word Rainbow for cycling colours
CooldownSeconds before this vape can be puffed again
puffsPuffs before it runs out and one is taken from the inventory
EffectDurationSeconds the power lasts. 0 for flavours
ShowProgressShow the progress bar while the power lasts. Off on every shipped vape
SpeedMultiplierFor speed_vape (sprint) and carspeed_vape (engine) only
powerOptional. A list of effects to run together, each with its own number (see below)

The item name decides the effect. invisibility_vape makes you invisible because it is called invisibility_vape; any other name without a power list is a flavour.

The effect names the bridge understands: invisibility_vape, speed_vape, superjump_vape, teleport_vape, invincibility_vape, health_vape (or health), armor_vape (or armor), carspeed_vape, freeze_vape, gravity_vape — plus random_vape, which picks one of the others.

Give a vape a power list and it runs every effect in it on each puff, whatever the vape is called. The number next to each effect is its duration in seconds, except for health and armor, where it is the amount. vape_custom in the config is a working example: health 10, armour 10, speed for 10 seconds.

  1. Copy an existing entry in Config.Vapes and give it a new item name.
  2. Choose a prop, a SmokeColor, puffs and Cooldown. For a power, either use one of the effect names above as the item name or add a power list.
  3. Add the item to your inventory the same way as the others, with an icon.
  4. refresh, then restart mic_vape.

freeze_vape (you cannot move) and gravity_vape (low gravity, slower movement) are handled in bridge/client_bridge.lua, and their item definitions are already in inventory_items/, but they have no entry in Config.Vapes. Add an entry for each — copy superjump_vape and rename it — and they work.

transform_vape is in the item files too, but it needs a Config.TransformAnimals list that the shipped config does not have. Leave it out unless you are ready to write that list and test it.


With Config.Stress = true, every puff calls OnVapePuff in bridge/server_bridge.lua with the player’s server ID. Out of the box that function only prints a line to the server console. Commented examples for QBCore metadata and esx_status sit inside it: uncomment the one that fits, or call your own HUD or stress resource there.

If you do not use stress, set Config.Stress = false and the console stays quiet.


Nine files ship in locales/: en, de, es, fr, it, pl, pt, ru, tr. Pick one with Config.Locale.

The car_speed line — shown when the car speed vape kicks in — reads “No waypoint set!” in the shipped files. Reword it in your language file.

To add a language: copy locales/en.lua, change the key at the top to your code, translate, and add the file to both client_scripts and server_scripts in fxmanifest.lua. Set Config.Locale, refresh and restart.


Everything that depends on your server is in bridge/.

FileWhat to change there
bridge/client_bridge.luaShowNotification — route messages to your own notify resource. The effect code — change what a power does, or add a new effect name. ShowProgressBar / HideProgressBar for the bar
bridge/server_bridge.luaOnVapePuff for stress. Removing an empty vape and checking whether the player still carries it — adapt these two for an inventory that does not go through ESX or QBCore’s own item functions

Both files find the framework the same way: es_extended if it is started, otherwise qb-core — which is also how QBox is found, through its QBCore compatibility. For another framework, add a branch there and in the two item functions next to it.


Command or keyWhat it doesSet in
Use the itemTakes the vape out; using it again puts it awayInventory
E (“Vape Puff”)Takes a puffConfig.PuffKey, then each player’s key bindings
/vapePuts the vape awayConfig.RemoveVapeCommand

A vape is also put away when the player no longer carries the item; the resource checks every 2.5 seconds.