SM-Smoke | Realistic smoking system wit Puff control
Hello! Today I’m showing you my Smoking System script — you can smoke different types of cigarettes, control puff length, put them in your mouth, share with others and more. Check out all the features below!
Installation
Download a resource (opens in a new tab) from keymaster or buy it by buttons at the top
Resource start order
It's important for your resources to start in a logical order to prevent errors from missing dependencies.
start your_framework
start sm-smokingAdding custom cigarretes & packs
To make custom cigarettes & packs, follow this steps
- Open config.lua inside sm-smoking folder
- Add this line after
Config.CigTypes(For Standalone)
{name = 'CIGNAME', model = 'PROP_MODEL_HERE', puffcount = 50, func= ''},- In name you must write your cigarette name, in model, paste the model of your cigarette. You can find it in here: https://www.gtahash.ru/ (opens in a new tab) For puffcount specify a value of puff count you want. For func option go to step 4
- If you want cigarette with effect, you need to add function above. For example you have Config.Joint function. If you want use a function, you need to put your function name into func, like this:
{name = 'CIGNAME', model = 'PROP_MODEL_HERE', puffcount = 50, func= Config.Joint},- For example, you can add this to your function:
level = AddSmokeEffect() -- Adding screen effect and returns your drunk level
if level >= 5 then -- If drunk level >= 5 then doing this actions
RequestAnimSet("move_m@business@a") -- Requesting drunk movement
SetPedMovementClipset(PlayerPedId(), "move_m@business@a", true) -- Applying drunk movement
SetPedIsDrunk(PlayerPedId(), true) -- Enable drunk state for ped
SetPedMotionBlur(PlayerPedId(), true) -- Enable motion blur
local health = GetEntityHealth(PlayerPedId()) -- Get player health
SetEntityHealth(PlayerPedId(), health + 5) -- Add 5 health to player for each puff
else -- If drunk level < 5 then
ResetPedMovementClipset(PlayerPedId(), 0) -- Set normal movement
SetPedIsDrunk(PlayerPedId(), false) -- Disable drunk state
SetPedMotionBlur(PlayerPedId(), false) -- Disable motion blur
end- If you are using framework, go to step 2 and add following lines after Config.PackItems
{packmodel = 'PROP_MODEL_HERE', modelpos = vector3(0.020, -0.05, -0.030), modelrot = vector3(0.0, 0.0, 0.0), packitem = 'INVENTORY_PACK_NAME', cigitem = 'INVENTORY_CIG_NAME', count = CIG_COUNT},- Packmodel you can find here: https://www.gtahash.ru/ (opens in a new tab). For modelpos and modelrot you need to play with this value and place it into hand. Packitem and cigitem is inventory item names. Count is a count of cigarettes in this pack
- After Config.CigItems paste this code:
{cigmodel = 'PROP_MODEL_HERE', cigitem = 'INVENTORY_CIG_ITEM', puffcount = 50, func= ''},- In cigmodel, paste the model of your cigarette. You can find it in here: https://www.gtahash.ru/ (opens in a new tab) In cigitem write you cigarette inventory item. For puffcount specify a value of puff count you want. For func option go to step 4
Config
There you can find an config of resource with description for all params
Config = {}
Config.Framework = "auto" -- auto/esx/qb/none
Config.UseLighter = false
Config.LighterItem = "lighter"
Config.GiveDist = 1.5
Config.UseCommand = true
local function isResourceStarted(resourceName)
local state = GetResourceState(resourceName)
return state == "started" or state == "starting"
end
local function detectFramework()
if Config.Framework ~= "auto" then
return Config.Framework
end
if isResourceStarted("es_extended") then
return "esx"
end
if isResourceStarted("qb-core") then
return "qb"
end
return "none"
end
Config.ResolvedFramework = detectFramework()
Config.Joint = function()
local level = AddSmokeEffect()
if level >= 5 then
RequestAnimSet("move_m@business@a")
SetPedMovementClipset(PlayerPedId(), "move_m@business@a", true)
SetPedIsDrunk(PlayerPedId(), true)
SetPedMotionBlur(PlayerPedId(), true)
local health = GetEntityHealth(PlayerPedId())
SetEntityHealth(PlayerPedId(), health + 5)
else
ResetPedMovementClipset(PlayerPedId(), 0)
SetPedIsDrunk(PlayerPedId(), false)
SetPedMotionBlur(PlayerPedId(), false)
end
end
Config.CigTypes = {
{ name = "cig", model = "prop_cs_ciggy_01", puffcount = 20, func = "" },
{ name = "joint", model = "p_cs_joint_02", puffcount = 10, func = Config.Joint },
{ name = "cigar", model = "prop_cigar_03", puffcount = 50, func = "" },
}
Config.PackItems = {
{ packmodel = "prop_cigar_pack_01", modelpos = vector3(0.020, -0.05, -0.010), modelrot = vector3(100.0, 0.0, 0.0), packitem = "redwood_pack", cigitem = "redwood_cig", count = 20 },
{ packmodel = "ng_proc_cigpak01a", modelpos = vector3(0.020, -0.05, -0.030), modelrot = vector3(0.0, 0.0, 0.0), packitem = "joint_pack", cigitem = "joint", count = 5 },
{ packmodel = "ng_proc_cigpak01a", modelpos = vector3(0.020, -0.05, -0.030), modelrot = vector3(0.0, 0.0, 0.0), packitem = "cigar_pack", cigitem = "cigar", count = 5 },
}
Config.CigItems = {
{ cigmodel = "prop_cs_ciggy_01", cigitem = "redwood_cig", puffcount = 20, func = "" },
{ cigmodel = "p_cs_joint_02", cigitem = "joint", puffcount = 10, func = Config.Joint },
{ cigmodel = "prop_cigar_03", cigitem = "cigar", puffcount = 50, func = "" },
}
Config.LocalesDefault = {
command_description = "Light a cigarette",
arg_name = "Cigarette type",
args = "cig / joint / cigar",
}
Config.LocalesPed = {
help_keys = "~INPUT_PICKUP~ - Puff\n~INPUT_VEH_DUCK~ - Drop\n~INPUT_DETONATE~ - Put in mouth\n~INPUT_VEH_HEADLIGHT~ - Give\nPuffs left: ",
puff = "~g~Doing puff",
in_mouth = "~INPUT_DETONATE~ - Take out of mouth",
give_other = "~INPUT_PICKUP~ - Give\n~INPUT_VEH_DUCK~ - Cancel",
give_confirm = "~INPUT_PICKUP~ - Take\n~INPUT_VEH_DUCK~ - Cancel",
give_cancel = "~INPUT_VEH_DUCK~ - Cancel give",
give_canceled = "~r~Give cancelled",
give_canceled_already_have = "~r~Player already have a cig",
command_description = "Light a cigarette",
arg_name = "Cigarette type",
args = "cig / joint",
}
Config.LocalesVeh = {
help_keys = "~INPUT_MAP_POI~ - Puff\n~INPUT_VEH_DUCK~ - Drop\n~INPUT_DETONATE~ - Put in mouth\n~INPUT_MP_TEXT_CHAT_TEAM~ - Give\nPuffs left: ",
puff = "~g~Doing puff",
in_mouth = "~INPUT_DETONATE~ - Take out of mouth",
give_other = "~INPUT_MAP_POI~ - Give\n~INPUT_VEH_DUCK~ - Cancel",
give_confirm = "~INPUT_MAP_POI~ - Take\n~INPUT_VEH_DUCK~ - Cancel",
give_cancel = "~INPUT_VEH_DUCK~ - Cancel give",
give_canceled = "~r~Give cancelled",
give_canceled_already_have = "~r~Player already have a cig",
}
Config.PedKeys = {
puff = 38,
cancel = 73,
mouth = 47,
give = 74,
}
Config.VehKeys = {
puff = 348,
cancel = 73,
mouth = 47,
give = 246,
}