4 Commits

Author SHA1 Message Date
Jim Shield
59540d95b6 v1.2 - ps-buffs support / screen effect changes 2022-07-21 17:23:47 +01:00
Jim Shield
b15836d42e Version Bump 1.1 - Optimizations, Tidy, Fixes 2022-07-20 15:51:38 +01:00
Jim Shield
d17334e6fe More specific model removal 2022-07-20 13:43:17 +01:00
Jim Shield
61de2ece5a lock inventory until done or cancelled 2022-07-14 15:25:20 +01:00
5 changed files with 322 additions and 233 deletions

View File

@@ -14,14 +14,50 @@ It already takes control of default qbcore food and drink, but you would probabl
To add an item, you only need to add a new item table in the Config.Consumables like this: To add an item, you only need to add a new item table in the Config.Consumables like this:
```lua ```lua
["heartstopper"] = { ["heartstopper"] = {
emote = "burger", -- Select an emote from below, it has to be in here emote = "burger", -- Select an emote from below, it has to be in here
stress = math.random(1,2), -- Amount of stress relief, can be 0 time = math.random(5000, 6000), -- Amount of time it takes to consume the item
heal = 0, -- Set amount to heal by after consuming stress = math.random(1,2), -- Amount of stress relief, can be 0
armor = 5, -- Amount of armor to add heal = 0, -- Set amount to heal by after consuming
type = "food", -- Type: "alcohol" / "drink" / "food" armor = 5, -- Amount of armor to add
effect = { effect = "healdouble", }, -- The status effect given by the item, "heal" / "healdouble" / "stamina" type = "food", -- Type: "alcohol" / "drink" / "food"
stats = { hunger = math.random(10,20), }, -- The stats of the item, if not found in the items.lua stats = {
screen = "rampage" -- The screen effect to be played when after consuming the item
effect = "heal", -- The status effect given by the item, "heal" / "stamina"
time = 10000, -- How long the effect should last (if not added it will default to 10000)
amount = 2, -- How much the value is changed by per second
hunger = math.random(10,20), -- The hunger/thirst stats of the item, if not found in the items.lua
thirst = math.random(10,20), -- The hunger/thirst stats of the item, if not found in the items.lua
},
}, },
``` ```
Consuming an item can also manually activate screen effects
This script supports dpemotes style emotes, so if you have some that you want to be triggered when eating or drinking drop it in the Config.Emotes The example above uses `rampage` as this is what the effect is named after, you can use it for any item you think best
```lua
--The current list of effects are:
"turbo"
"focus"
"rampage"
"weed"
"trevor"
```
## PS-Buffs Support
This scripts can be expanded with ps-buffs (https://github.com/Project-Sloth/ps-buffs)
If this script is enabled it will automatically try to use their system to apply buffs:
```lua
--The extra buffs that can be set include:
"heal" -- Health recovery buff
"stamina" -- Stamina recovery buff
"swimming" -- Swimming speed buff
"stress" -- Stress recovery buff
"armor" -- Armour recovery buff
"hacking" -- Hacking effect
"intelligence" -- Intelligence effect
"luck" -- Luck effect
"strength" -- Strength effect
```
This script supports dpemotes style emotes, so if you have some that you want to be triggered when eating or drinking drop it in the Config.Emotes section.

View File

@@ -1,207 +1,232 @@
local QBCore = exports['qb-core']:GetCoreObject() local QBCore = exports['qb-core']:GetCoreObject()
PlayerJob = {} PlayerJob = {}
local onDuty = false
local alcoholCount = 0 local alcoholCount = 0
local drugCount = 0 local drugCount = 0
local function loadAnimDict(dict) while (not HasAnimDictLoaded(dict)) do RequestAnimDict(dict) Wait(5) end end local time = 40
function loadModel(model) if not HasModelLoaded(model) then if Config.Debug then print("^5Debug^7: ^2Loading Model^7: '^6"..model.."^7'") end while not HasModelLoaded(model) do if time > 0 then time = time - 1 RequestModel(model) else time = 40 break end Wait(10) end end end
function unloadModel(model) if Config.Debug then print("^5Debug^7: ^2Removing Model^7: '^6"..model.."^7'") end SetModelAsNoLongerNeeded(model) end
function loadAnimDict(dict) if Config.Debug then print("^5Debug^7: ^2Loading Anim Dictionary^7: '^6"..dict.."^7'") end while not HasAnimDictLoaded(dict) do RequestAnimDict(dict) Wait(5) end end
function unloadAnimDict(dict) if Config.Debug then print("^5Debug^7: ^2Removing Anim Dictionary^7: '^6"..dict.."^7'") end RemoveAnimDict(dict) end
function destroyProp(entity) if Config.Debug then print("^5Debug^7: ^2Destroying Prop^7: '^6"..entity.."^7'") end SetEntityAsMissionEntity(entity) Wait(5) DetachEntity(entity, true, true) Wait(5) DeleteObject(entity) end
--Alcohol Effects --Convert Prop Model Names to Model HashKeys now to be more optimized when loading later
function AlienEffect() for k in pairs(Config.Emotes) do
StartScreenEffect("DrugsMichaelAliensFightIn", 3.0, 0) if Config.Emotes[k].AnimationOptions.Prop then
Wait(math.random(5000, 8000)) Config.Emotes[k].AnimationOptions.Prop = GetHashKey(Config.Emotes[k].AnimationOptions.Prop)
local ped = PlayerPedId()
RequestAnimSet("MOVE_M@DRUNK@VERYDRUNK")
while not HasAnimSetLoaded("MOVE_M@DRUNK@VERYDRUNK") do
Citizen.Wait(0)
end end
SetPedCanRagdoll( ped, true ) end
--Screen Effects
local alienEffect = false
function AlienEffect()
if alienEffect then return end
alienEffect = true
if Config.Debug then print("^5Debug^7: ^3AlienEffect^7() ^2activated") end
AnimpostfxPlay("DrugsMichaelAliensFightIn", 3.0, 0)
Wait(math.random(5000, 8000))
local Ped = PlayerPedId()
local animDict = "MOVE_M@DRUNK@VERYDRUNK"
loadAnimDict(animDict)
SetPedCanRagdoll(Ped, true)
ShakeGameplayCam('DRUNK_SHAKE', 2.80) ShakeGameplayCam('DRUNK_SHAKE', 2.80)
SetTimecycleModifier("Drunk") SetTimecycleModifier("Drunk")
SetPedMovementClipset(ped, "MOVE_M@DRUNK@VERYDRUNK", true) SetPedMovementClipset(Ped, animDict, 1)
SetPedMotionBlur(ped, true) SetPedMotionBlur(Ped, true)
SetPedIsDrunk(ped, true) SetPedIsDrunk(Ped, true)
Wait(1500) Wait(1500)
SetPedToRagdoll(ped, 5000, 1000, 1, false, false, false ) SetPedToRagdoll(Ped, 5000, 1000, 1, 0, 0, 0)
Wait(13500) Wait(13500)
SetPedToRagdoll(ped, 5000, 1000, 1, false, false, false ) SetPedToRagdoll(Ped, 5000, 1000, 1, 0, 0, 0)
Wait(120500) Wait(120500)
ClearTimecycleModifier() ClearTimecycleModifier()
ResetScenarioTypesEnabled() ResetScenarioTypesEnabled()
ResetPedMovementClipset(ped, 0) ResetPedMovementClipset(Ped, 0)
SetPedIsDrunk(ped, false) SetPedIsDrunk(Ped, false)
SetPedMotionBlur(ped, false) SetPedMotionBlur(Ped, false)
AnimpostfxStopAll() AnimpostfxStopAll()
ShakeGameplayCam('DRUNK_SHAKE', 0.0) ShakeGameplayCam('DRUNK_SHAKE', 0.0)
StartScreenEffect("DrugsMichaelAliensFight", 3.0, 0) AnimpostfxPlay("DrugsMichaelAliensFight", 3.0, 0)
Wait(math.random(45000, 60000)) Wait(math.random(45000, 60000))
StartScreenEffect("DrugsMichaelAliensFightOut", 3.0, 0) AnimpostfxPlay("DrugsMichaelAliensFightOut", 3.0, 0)
StopScreenEffect("DrugsMichaelAliensFightIn") AnimpostfxStop("DrugsMichaelAliensFightIn")
StopScreenEffect("DrugsMichaelAliensFight") AnimpostfxStop("DrugsMichaelAliensFight")
StopScreenEffect("DrugsMichaelAliensFightOut") AnimpostfxStop("DrugsMichaelAliensFightOut")
alienEffect = false
if Config.Debug then print("^5Debug^7: ^3AlienEffect^7() ^2stopped") end
end end
--Weed Effects local weedEffect = false
function WeedEffect() function WeedEffect()
StartScreenEffect("DrugsMichaelAliensFightIn", 3.0, 0) if weedEffect then return end
weedEffect = true
if Config.Debug then print("^5Debug^7: ^3WeedEffect^7() ^2activated") end
AnimpostfxPlay("DrugsMichaelAliensFightIn", 3.0, 0)
Wait(math.random(3000, 20000)) Wait(math.random(3000, 20000))
StartScreenEffect("DrugsMichaelAliensFight", 3.0, 0) AnimpostfxPlay("DrugsMichaelAliensFight", 3.0, 0)
Wait(math.random(15000, 20000)) Wait(math.random(15000, 20000))
StartScreenEffect("DrugsMichaelAliensFightOut", 3.0, 0) AnimpostfxPlay("DrugsMichaelAliensFightOut", 3.0, 0)
StopScreenEffect("DrugsMichaelAliensFightIn") AnimpostfxStop("DrugsMichaelAliensFightIn")
StopScreenEffect("DrugsMichaelAliensFight") AnimpostfxStop("DrugsMichaelAliensFight")
StopScreenEffect("DrugsMichaelAliensFightOut") AnimpostfxStop("DrugsMichaelAliensFightOut")
weedEffect = false
if Config.Debug then print("^5Debug^7: ^3WeedEffect^7() ^2stopped") end
end end
--Other Effects local trevorEffect = false
function TrevorEffect() function TrevorEffect()
StartScreenEffect("DrugsTrevorClownsFightIn", 3.0, 0) if trevorEffect then return end
if Config.Debug then print("^5Debug^7: ^3TrevorEffect^7() ^2activated") end
trevorEffect = true
AnimpostfxPlay("DrugsTrevorClownsFightIn", 3.0, 0)
Wait(3000) Wait(3000)
StartScreenEffect("DrugsTrevorClownsFight", 3.0, 0) AnimpostfxPlay("DrugsTrevorClownsFight", 3.0, 0)
Wait(30000) Wait(30000)
StartScreenEffect("DrugsTrevorClownsFightOut", 3.0, 0) AnimpostfxPlay("DrugsTrevorClownsFightOut", 3.0, 0)
StopScreenEffect("DrugsTrevorClownsFight") AnimpostfxStop("DrugsTrevorClownsFight")
StopScreenEffect("DrugsTrevorClownsFightIn") AnimpostfxStop("DrugsTrevorClownsFightIn")
StopScreenEffect("DrugsTrevorClownsFightOut") AnimpostfxStop("DrugsTrevorClownsFightOut")
trevorEffect = false
if Config.Debug then print("^5Debug^7: ^3TrevorEffect^7() ^2stopped") end
end
local turboEffect = false
function TurboEffect()
if turboEffect then return end
if Config.Debug then print("^5Debug^7: ^3TurboEffect^7() ^2activated") end
turboEffect = true
AnimpostfxPlay('RaceTurbo', 0, true)
SetTimecycleModifier('rply_motionblur')
ShakeGameplayCam('SKY_DIVING_SHAKE', 0.25)
Wait(30000)
StopGameplayCamShaking(true)
SetTransitionTimecycleModifier('default', 0.35)
Wait(1000)
ClearTimecycleModifier()
AnimpostfxStop('RaceTurbo')
turboEffect = false
if Config.Debug then print("^5Debug^7: ^3TurboEffect^7() ^2stopped") end
end
local rampageEffect = false
function RampageEffect()
if rampageEffect then return end
if Config.Debug then print("^5Debug^7: ^3RampageEffect^7() ^2activated") end
rampageEffect = true
AnimpostfxPlay('Rampage', 0, true)
SetTimecycleModifier('rply_motionblur')
ShakeGameplayCam('SKY_DIVING_SHAKE', 0.25)
Wait(30000)
StopGameplayCamShaking(true)
SetTransitionTimecycleModifier('default', 0.35)
Wait(1000)
ClearTimecycleModifier()
AnimpostfxStop('Rampage')
rampageEffect = false
if Config.Debug then print("^5Debug^7: ^3RampageEffect^7() ^2stopped") end
end
local focusEffect = false
function FocusEffect()
if focusEffect then return end
if Config.Debug then print("^5Debug^7: ^3FocusEffect^7() ^2activated") end
focusEffect = true
AnimpostfxPlay('FocusIn', 0, true)
Wait(30000)
Wait(1000)
AnimpostfxStop('FocusIn')
focusEffect = false
if Config.Debug then print("^5Debug^7: ^3FocusEffect^7() ^2stopped") end
end end
function HealEffectDouble() --Built-in Buff effects
if not healing then healing = true else return end local healEffect = false
local count = 9 function HealEffect(data)
if healEffect then return end
if Config.Debug then print("^5Debug^7: ^3HealEffect^7() ^2activated") end
healEffect = true
local count = (data[1] / 1000)
while count > 0 do while count > 0 do
Wait(1000) Wait(1000)
count = count - 1 count = count - 1
SetEntityHealth(PlayerPedId(), GetEntityHealth(PlayerPedId()) + 6) SetEntityHealth(PlayerPedId(), GetEntityHealth(PlayerPedId()) + data[2])
end end
healing = false healEffect = false
end if Config.Debug then print("^5Debug^7: ^3HealEffect^7() ^2stopped") end
function HealEffect()
if not healing then healing = true else return end
local count = 4
while count > 0 do
Wait(1000)
count = count - 1
SetEntityHealth(PlayerPedId(), GetEntityHealth(PlayerPedId()) + 6)
end
healing = false
end end
function StaminaEffect() local staminaEffect = false
local startStamina = 8 function StaminaEffect(data)
if staminaEffect then return end
if Config.Debug then print("^5Debug^7: ^3StaminaEffect^7() ^2activated") end
staminaEffect = true
local startStamina = (data[1] / 1000)
SetRunSprintMultiplierForPlayer(PlayerId(), 1.49) SetRunSprintMultiplierForPlayer(PlayerId(), 1.49)
while startStamina > 0 do while startStamina > 0 do
Wait(1000) Wait(1000)
if math.random(5, 100) < 10 then RestorePlayerStamina(PlayerId(), 1.0) end if math.random(5, 100) < 10 then RestorePlayerStamina(PlayerId(), data[2]) end
startStamina = startStamina - 1 startStamina = startStamina - 1
if math.random(5, 100) < 51 then end if math.random(5, 100) < 51 then end
end end
startStamina = 0 startStamina = 0
SetRunSprintMultiplierForPlayer(PlayerId(), 1.0) SetRunSprintMultiplierForPlayer(PlayerId(), 1.0)
staminaEffect = false
if Config.Debug then print("^5Debug^7: ^3StaminaEffect^7() ^2stopped") end
end end
--[[function EcstasyEffect() function StopEffects()
local startStamina = 30 if Config.Debug then print("^5Debug^7: ^2All screen effects stopped") end
SetFlash(0, 0, 500, 7000, 500) ShakeGameplayCam('DRUNK_SHAKE', 0.0)
while startStamina > 0 do SetPedToRagdoll(PlayerPedId(), 5000, 1000, 1, 0, 0, 0)
Wait(1000) ClearTimecycleModifier()
startStamina = startStamina - 1 ResetScenarioTypesEnabled()
RestorePlayerStamina(PlayerId(), 1.0) ResetPedMovementClipset(PlayerPedId(), 0)
if math.random(1, 100) < 51 then SetPedIsDrunk(PlayerPedId(), false)
SetFlash(0, 0, 500, 7000, 500) SetPedMotionBlur(PlayerPedId(), false)
ShakeGameplayCam('SMALL_EXPLOSION_SHAKE', 0.08) AnimpostfxStop("DrugsMichaelAliensFightIn")
end AnimpostfxStop("DrugsMichaelAliensFight")
end AnimpostfxStop("DrugsMichaelAliensFightOut")
if IsPedRunning(PlayerPedId()) then AnimpostfxStop("DrugsTrevorClownsFight")
SetPedToRagdoll(PlayerPedId(), math.random(1000, 3000), math.random(1000, 3000), 3, 0, 0, 0) AnimpostfxStop("DrugsTrevorClownsFightIn")
end AnimpostfxStop("DrugsTrevorClownsFightOut")
AnimpostfxStop('RaceTurbo')
startStamina = 0 AnimpostfxStop('FocusIn')
AnimpostfxStop('Rampage')
end end
function CrackBaggyEffect()
local startStamina = 8
local ped = PlayerPedId()
--AlienEffect()
SetRunSprintMultiplierForPlayer(PlayerId(), 1.3)
while startStamina > 0 do
Wait(1000)
if math.random(1, 100) < 10 then
RestorePlayerStamina(PlayerId(), 1.0)
end
startStamina = startStamina - 1
if math.random(1, 100) < 60 and IsPedRunning(ped) then
SetPedToRagdoll(ped, math.random(1000, 2000), math.random(1000, 2000), 3, 0, 0, 0)
end
if math.random(1, 100) < 51 then
--AlienEffect()
end
end
if IsPedRunning(ped) then
SetPedToRagdoll(ped, math.random(1000, 3000), math.random(1000, 3000), 3, 0, 0, 0)
end
startStamina = 0
SetRunSprintMultiplierForPlayer(PlayerId(), 1.0)
end
function CokeBaggyEffect()
local startStamina = 20
local ped = PlayerPedId()
--AlienEffect()
SetRunSprintMultiplierForPlayer(PlayerId(), 1.1)
while startStamina > 0 do
Wait(1000)
if math.random(1, 100) < 20 then
RestorePlayerStamina(PlayerId(), 1.0)
end
startStamina = startStamina - 1
if math.random(1, 100) < 10 and IsPedRunning(ped) then
SetPedToRagdoll(ped, math.random(1000, 3000), math.random(1000, 3000), 3, 0, 0, 0)
end
if math.random(1, 300) < 10 then
--AlienEffect()
Wait(math.random(3000, 6000))
end
end
if IsPedRunning(ped) then
SetPedToRagdoll(ped, math.random(1000, 3000), math.random(1000, 3000), 3, 0, 0, 0)
end
startStamina = 0
SetRunSprintMultiplierForPlayer(PlayerId(), 1.0)
end]]
local consuming = false local consuming = false
local cancelled = false local cancelled = false
RegisterNetEvent('jim-consumables:Consume', function(itemName) RegisterNetEvent('jim-consumables:Consume', function(itemName)
local time = math.random(5000, 6000) -- How long it takes to consume something if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Starting event, locking inventory and grabbing data^7..") end
LocalPlayer.state:set("inv_busy", true, true)
local Player = PlayerPedId() local Player = PlayerPedId()
local emote = Config.Emotes[Config.Consumables[itemName].emote] local emote = Config.Emotes[Config.Consumables[itemName].emote]
local animDict = tostring(emote[1]) local animDict = tostring(emote[1])
local anim = tostring(emote[2]) local anim = tostring(emote[2])
local model, bone, drugeffect, stress = nil local model, bone, drugeffect, stress
local P1, P2, P3, P4, P5, P6 = table.unpack({0.0, 0.0, 0.0, 0.0, 0.0, 0.0}) local P1, P2, P3, P4, P5, P6 = table.unpack({0.0, 0.0, 0.0, 0.0, 0.0, 0.0})
if emote.AnimationOptions.Prop then if emote.AnimationOptions.Prop then
model = tostring(emote.AnimationOptions.Prop) model = emote.AnimationOptions.Prop
bone = GetPedBoneIndex(PlayerPedId(), emote.AnimationOptions.PropBone) bone = GetPedBoneIndex(PlayerPedId(), emote.AnimationOptions.PropBone)
P1, P2, P3, P4, P5, P6 = table.unpack(emote.AnimationOptions.PropPlacement) P1, P2, P3, P4, P5, P6 = table.unpack(emote.AnimationOptions.PropPlacement)
end end
local type = Config.Consumables[itemName].type local time = Config.Consumables[itemName].time or math.random(5000, 6000)
local stress = Config.Consumables[itemName].stress local type = Config.Consumables[itemName].type or "food"
local heal = Config.Consumables[itemName].heal local stress = Config.Consumables[itemName].stress or 0
local armor = Config.Consumables[itemName].armor local heal = Config.Consumables[itemName].heal or 0
local armor = Config.Consumables[itemName].armor or 0
if type == "drink" or type == "alcohol" then string = "Drinking " end if type == "drink" or type == "alcohol" then string = "Drinking " end
if type == "food" then string = "Eating " end if type == "food" then string = "Eating " end
if type == "drug" then string = "Using " end if type == "drug" then string = "Using " end
if consuming then if consuming then
cancelled = true cancelled = true
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Event already started^7, ^1Cancelling^7.") end
LocalPlayer.state:set("inv_busy", false, true)
TriggerEvent("QBCore:Notify", "Stopped "..string, "error") TriggerEvent("QBCore:Notify", "Stopped "..string, "error")
consuming = not consuming consuming = not consuming
return return
end end
--Emote Stuff --Emote Stuff
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Grabbing Emote Animation Options^7...") end
if emote.AnimationOptions then if emote.AnimationOptions then
if emote.AnimationOptions.EmoteLoop then MovementType = 1 if emote.AnimationOptions.EmoteLoop then MovementType = 1
if emote.AnimationOptions.EmoteMoving then MovementType = 51 if emote.AnimationOptions.EmoteMoving then MovementType = 51
@@ -212,40 +237,47 @@ RegisterNetEvent('jim-consumables:Consume', function(itemName)
end end
else MovementType = 0 end else MovementType = 0 end
InVehicle = IsPedInAnyVehicle(PlayerPedId(), true) if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Checking if player is in a vehicle^7...") end
local InVehicle = IsPedInAnyVehicle(PlayerPedId(), true)
if InVehicle == 1 then MovementType = 51 end if InVehicle == 1 then MovementType = 51 end
--Load and Start animation --Load and Start animation
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Playing Animation^7...") end
loadAnimDict(animDict) loadAnimDict(animDict)
TaskPlayAnim(Player, animDict, anim, 1.0, 1.0, -1, MovementType, 0, 0, 0, 0) TaskPlayAnim(PlayerPedId(), animDict, anim, 1.0, 1.0, -1, MovementType, 0, 0, 0, 0)
--Prop Spawning
if model then
RequestModel(GetHashKey(model))
while not HasModelLoaded(GetHashKey(model)) do Citizen.Wait(1) end
local attachProp = CreateObject(GetHashKey(model), 1.0, 1.0, 1.0, 1, 1, 0)
AttachEntityToEntity(attachProp, PlayerPedId(), bone, P1, P2, P3, P4, P5, P6, true, true, false, true, 1, true)
end
TriggerEvent("QBCore:Notify", string..QBCore.Shared.Items[itemName].label.."..", "success", (time + 1000)) TriggerEvent("QBCore:Notify", string..QBCore.Shared.Items[itemName].label.."..", "success", (time + 1000))
consuming = true consuming = true
CreateThread(function()
--Prop Spawning
if model then
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Spawning consumable prop^7.") end
loadModel(model)
local attachProp = CreateObject(model, 1.0, 1.0, 1.0, 1, 1, 0)
AttachEntityToEntity(attachProp, PlayerPedId(), bone, P1, P2, P3, P4, P5, P6, true, true, false, true, 1, true)
while consuming do Wait(100) end
destroyProp(attachProp)
end
end)
while consuming do while consuming do
if time <= 0 then consuming = false end if time <= 0 then consuming = false end
if IsControlJustPressed(0, 21) then if IsControlJustPressed(0, 21) then
consuming = false consuming = false
cancelled = true cancelled = true
LocalPlayer.state:set("inv_busy", false, true)
end end
Wait(10) Wait(10)
time = time - 10 time = time - 10
end end
StopEntityAnim(Player, anim, animDict, 1.0) StopEntityAnim(PlayerPedId(), anim, animDict, 1.0)
DeleteEntity(attachProp) unloadAnimDict(animDict)
if not cancelled then if not cancelled then
TriggerEvent("inventory:client:ItemBox", QBCore.Shared.Items[itemName], "remove", 1)
TriggerServerEvent("QBCore:Server:RemoveItem", itemName, 1) TriggerServerEvent("QBCore:Server:RemoveItem", itemName, 1)
TriggerEvent("inventory:client:ItemBox", QBCore.Shared.Items[itemName], "remove", 1)
if QBCore.Shared.Items[itemName].thirst then if QBCore.Shared.Items[itemName].thirst then
TriggerServerEvent("QBCore:Server:SetMetaData", "thirst", QBCore.Functions.GetPlayerData().metadata["thirst"] + QBCore.Shared.Items[itemName].thirst) end TriggerServerEvent("QBCore:Server:SetMetaData", "thirst", QBCore.Functions.GetPlayerData().metadata["thirst"] + QBCore.Shared.Items[itemName].thirst) end
@@ -263,69 +295,80 @@ RegisterNetEvent('jim-consumables:Consume', function(itemName)
end end
end end
if stress then TriggerServerEvent('hud:server:RelieveStress', stress) end if stress and stress ~= 0 then
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Reliving ^6"..stress.." ^2stress^7.") end
TriggerServerEvent('hud:server:RelieveStress', stress)
end
if heal then SetEntityHealth(Player, GetEntityHealth(Player) + heal) end if heal and heal ~= 0 then
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Healing player by^7: ^6"..heal) end
SetEntityHealth(PlayerPedId(), GetEntityHealth(PlayerPedId()) + heal)
end
if armor then TriggerServerEvent('hospital:server:SetArmor', (GetPedArmour(Player) + armor)) SetPedArmour(Player, (GetPedArmour(Player) + armor)) end if armor and armor ~= 0 then
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Adding ^6"..armor.." ^2armour^7.") end
TriggerServerEvent('hospital:server:SetArmor', (GetPedArmour(PlayerPedId()) + armor)) SetPedArmour(PlayerPedId(), (GetPedArmour(PlayerPedId()) + armor))
end
if type == "alcohol" then if type == "alcohol" then
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Current ^4alcoholCount^7: ^6"..(alcoholCount + 1)) end
alcoholCount = alcoholCount + 1 alcoholCount = alcoholCount + 1
if alcoholCount > 1 and alcoholCount < 4 then if alcoholCount > 1 and alcoholCount < 4 then
TriggerEvent("evidence:client:SetStatus", "alcohol", 200) TriggerEvent("evidence:client:SetStatus", "alcohol", 200)
elseif alcoholCount >= 4 then elseif alcoholCount >= 4 then
TriggerEvent("evidence:client:SetStatus", "heavyalcohol", 200) TriggerEvent("evidence:client:SetStatus", "heavyalcohol", 200)
AlienEffect() CreateThread(function() AlienEffect() end) -- Used as overdosing/too drunk effect
end end
end end
effect = Config.Consumables[itemName].effect stats = Config.Consumables[itemName].stats or nil
if effect ~= nil then if Config.Consumables[itemName].stats then
if effect.canOD then if stats.screen then -- Screen effect activation
if stats.screen == "turbo" then CreateThread(function() TurboEffect() end) end
if stats.screen == "focus" then CreateThread(function() FocusEffect() end) end
if stats.screen == "rampage" then CreateThread(function() RampageEffect() end) end
if stats.screen == "weed" then CreateThread(function() WeedEffect() end) end
if stats.screen == "trevor" then CreateThread(function() TrevorEffect() end) end
end
if stats.canOD then
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Current ^4drugCount^7: ^6"..(drugCount + 1)) end
drugCount = drugCount + 1 drugCount = drugCount + 1
if drugCount >= 4 then if drugCount >= 4 then
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Current ^4drugCount^7: ^6"..drugCount.."^7 - ^2 removing health") end
SetEntityHealth(PlayerPedId(), GetEntityHealth(PlayerPedId()) - math.random(10,15)) SetEntityHealth(PlayerPedId(), GetEntityHealth(PlayerPedId()) - math.random(10,15))
if drugCount >= 6 then if drugCount >= 7 then
AlienEffect() CreateThread(function() AlienEffect() end) -- If too many drugs, if not dead will make you stumble
end end
end end
end end
if effect.effect == "weed" then if stats.effect == "heal" then
if drugCount >= 2 then if GetResourceState("ps-buffs") == "started" then exports["ps-buffs"]:AddHealthBuff((stats.effect.time or 10000), (stats.amount or 6))
TrevorEffect() else CreateThread(function() HealEffect({(stats.effect.time or 10000), (stats.amount or 6)}) end) end
end end
end if stats.effect == "stamina" then
if effect.effect == "heal" then if GetResourceState("ps-buffs") == "started" then exports["ps-buffs"]:StaminaBuffEffect((stats.effect.time or 10000), (stats.amount or 6))
HealEffect() else CreateThread(function() StaminaEffect({(stats.effect.time or 10000), (stats.amount or 6)}) end) end
end
if effect.effect == "healdouble" then
HealEffect()
end
if effect.effect == "stamina" then
StaminaEffect()
if drugCount >= 4 then
TrevorEffect()
end
end
if effect.widepupils then
TriggerEvent("evidence:client:SetStatus", "widepupils", 200)
--EcstasyEffect()
end end
if GetResourceState("ps-buffs") == "started" then --PS-BUFFS ONLY
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^4PS^7-^4Buffs ^2found^7, ^2hooking in to get buffs") end
if stats.effect == "armor" then exports["ps-buffs"]:AddArmorBuff((stats.effect.time or 10000), (stats.amount or 6)) end
if stats.effect == "stress" then exports["ps-buffs"]:AddStressBuff((stats.time or 10000), (stats.amount or 6)) end
if stats.effect == "swimming" then exports["ps-buffs"]:SwimmingBuffEffect((stats.effect.time or 10000), (stats.amount or 6)) end
if stats.effect == "hacking" then exports["ps-buffs"]:AddBuff("hacking", (stats.effect.time or 10000)) end
if stats.effect == "intelligence" then exports["ps-buffs"]:AddBuff("intelligence", (stats.effect.time or 10000)) end
if stats.effect == "luck" then exports["ps-buffs"]:AddBuff("luck", (stats.time or 10000)) end
if stats.effect == "strength" then exports["ps-buffs"]:AddBuff("strength", (stats.time or 10000)) end
end
if stats.widepupils then TriggerEvent("evidence:client:SetStatus", "widepupils", 200) end
end end
end end
cancelled = false cancelled = false
consuming = false consuming = false
for k, v in pairs(GetGamePool('CObject')) do
if IsEntityAttachedToEntity(PlayerPedId(), v) then if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Finished, unlocking inventory^7..") end
DeleteObject(v) LocalPlayer.state:set("inv_busy", false, true)
DetachEntity(v, 0, 0)
SetEntityAsMissionEntity(v, true, true)
Wait(100)
DeleteEntity(v)
end
end
end) end)
CreateThread(function() CreateThread(function()
@@ -350,3 +393,7 @@ CreateThread(function()
end end
end end
end) end)
AddEventHandler('onResourceStop', function(r) if r ~= GetCurrentResourceName() then return end
StopEffects()
end)

View File

@@ -1,4 +1,4 @@
print("Jim-Consumables v1.0 - Consumables Script by Jimathy") print("^2Jim^7-^2Consumables v^41^7.^42 ^7- ^2Consumables Script by ^1Jimathy^7")
-- If you need support I now have a discord available, it helps me keep track of issues and give better support. -- If you need support I now have a discord available, it helps me keep track of issues and give better support.
@@ -8,46 +8,54 @@ Config = {
Debug = false, Debug = false,
Consumables = { Consumables = {
-- Default QB food and drink item override -- Default QB food and drink item override
["vodka"] = { emote = "vodkab", stress = math.random(2, 4), heal = 0, armor = 0, type = "alcohol", stats = { thirst = math.random(10,20), }},
["beer"] = { emote = "beer", stress = math.random(2, 4), heal = 0, armor = 0, type = "alcohol", stats = { thirst = math.random(10,20), }},
["whiskey"] = { emote = "whiskey", stress = math.random(2, 4), heal = 0, armor = 0, type = "alcohol", stats = { thirst = math.random(10,20), }},
["sandwich"] = { emote = "sandwich", stress = math.random(2, 4), heal = 0, armor = 0, type = "food", stats = { hunger = math.random(10,20), }}, --Effects can be applied here, like stamina on coffee for example
["twerks_candy"] = { emote = "egobar", stress = math.random(2, 4), heal = 0, armor = 0, type = "food", stats = { hunger = math.random(10,20), }}, ["vodka"] = { emote = "vodkab", time = math.random(5000, 6000), stress = 0, heal = 0, armor = 0, type = "alcohol", stats = { effect = "stress", time = 5000, amount = 2, thirst = math.random(10,20), canOD = true }},
["snikkel_candy"] = { emote = "egobar", stress = math.random(2, 4), heal = 0, armor = 0, type = "food", stats = { hunger = math.random(10,20), }}, ["beer"] = { emote = "beer", time = math.random(5000, 6000), stress = math.random(2, 4), heal = 0, armor = 0, type = "alcohol", stats = { thirst = math.random(10,20), canOD = true }},
["tosti"] = { emote = "sandwich", stress = math.random(2, 4), heal = 0, armor = 0, type = "food", stats = { hunger = math.random(10,20), }}, ["whiskey"] = { emote = "whiskey", time = math.random(5000, 6000), stress = math.random(2, 4), heal = 0, armor = 0, type = "alcohol", stats = { thirst = math.random(10,20), canOD = true }},
["coffee"] = { emote = "coffee", stress = math.random(2, 4), heal = 0, armor = 0, type = "drink", stats = { thirst = math.random(10,20), }}, ["sandwich"] = { emote = "sandwich", time = math.random(5000, 6000), stress = math.random(2, 4), heal = 0, armor = 0, type = "food", stats = { hunger = math.random(10,20), }},
["water_bottle"] = { emote = "drink", stress = math.random(2, 4), heal = 0, armor = 0, type = "drink", stats = { thirst = math.random(10,20), }}, ["twerks_candy"] = { emote = "egobar", time = math.random(5000, 6000), stress = math.random(2, 4), heal = 0, armor = 0, type = "food", stats = { hunger = math.random(10,20), }},
["kurkakola"] = { emote = "ecola", stress = math.random(2, 4), heal = 0, armor = 0, type = "drink", stats = { thirst = math.random(10,20), }}, ["snikkel_candy"] = { emote = "egobar", time = math.random(5000, 6000), stress = math.random(2, 4), heal = 0, armor = 0, type = "food", stats = { hunger = math.random(10,20), }},
["tosti"] = { emote = "sandwich", time = math.random(5000, 6000), stress = math.random(2, 4), heal = 0, armor = 0, type = "food", stats = { hunger = math.random(10,20), }},
["coffee"] = { emote = "coffee", time = math.random(5000, 6000), stress = math.random(2, 4), heal = 0, armor = 0, type = "drink", stats = { effect = "stamina", time = 10000, thirst = math.random(10,20), }},
["water_bottle"] = { emote = "drink", time = math.random(5000, 6000), stress = math.random(2, 4), heal = 0, armor = 0, type = "drink", stats = { thirst = math.random(10,20), }},
["kurkakola"] = { emote = "ecola", time = math.random(5000, 6000), stress = math.random(2, 4), heal = 0, armor = 0, type = "drink", stats = { thirst = math.random(10,20), }},
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --[[----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Items that effect status changes, like bleeding can cause problems as they are all handled in their own scripts -- Items that effect status changes, like bleeding can cause problems as they are all handled in their own scripts
--[[--Testing these but they may be best left handled by default scripts -- Testing these but they may be best left handled by default scripts
["ifaks"] = { emote = "oxy", stress = math.random(12, 24), heal = 10, armor = 0, type = "drug", }, ["ifaks"] = { emote = "oxy", time = math.random(5000, 6000), stress = math.random(12, 24), heal = 10, armor = 0, type = "drug", stats = { effect = "heal", amount = 6, widepupils = false, canOD = false } },
["bandage"] = { emote = "oxy", stress = 0, heal = 10, armor = 0, type = "drug", }, ["bandage"] = { emote = "oxy", time = math.random(5000, 6000), stress = 0, heal = 10, armor = 0, type = "drug", stats = { effect = "heal", amount = 3, widepupils = false, canOD = false } }, },]]
--Testing effects & armor with small functionality to drugs - This may be another one left to default scripts --Testing effects & armor with small functionality to drugs - This may be another one left to default scripts
["joint"] = { emote = "smoke3", stress = math.random(12, 24), heal = 0, armor = 10, type = "drug", effect = { effect = "weed", widepupils = false, canOD = false } }, ["joint"] = { emote = "smoke3", time = math.random(5000, 6000), stress = math.random(12, 24), heal = 0, armor = 10, type = "drug", stats = { screen = "weed", effect = "armor", widepupils = false, canOD = false } },
["cokebaggy"] = { emote = "coke", stress = math.random(12, 24), heal = 0, armor = 10, type = "drug", effect = { effect = "stamina", widepupils = false, canOD = true } }, ["cokebaggy"] = { emote = "coke", time = math.random(5000, 6000), stress = math.random(12, 24), heal = 0, armor = 0, type = "drug", stats = { screen = "focus", effect = "stamina", widepupils = false, canOD = true } },
--["crackbaggy"] = { emote = "coke", stress = math.random(12, 24), heal = 0, armor = 10, type = "drug", effect = { effect = "heal", widepupils = false, canOD = true } }, --["crackbaggy"] = { emote = "coke", time = math.random(5000, 6000), stress = math.random(12, 24), heal = 0, armor = 0, type = "drug", stats = { effect = "heal", widepupils = false, canOD = true } },
["xtcbaggy"] = { emote = "oxy", stress = math.random(12, 24), heal = 0, armor = 10, type = "drug", effect = { effect = "stamina", widepupils = true, canOD = true } }, ["xtcbaggy"] = { emote = "oxy", time = math.random(5000, 6000), stress = math.random(12, 24), heal = 0, armor = 10, type = "drug", stats = { effect = "strength", widepupils = true, canOD = true } },
["oxy"] = { emote = "oxy", stress = math.random(12, 24), heal = 0, armor = 10, type = "drug", effect = { effect = "heal", widepupils = false, canOD = false } }, ["oxy"] = { emote = "oxy", time = math.random(5000, 6000), stress = math.random(12, 24), heal = 0, armor = 0, type = "drug", stats = { effect = "heal", widepupils = false, canOD = false } },
["meth"] = { emote = "coke", stress = math.random(12, 24), heal = 0, armor = 10, type = "drug", effect = { effect = "stamina", widepupils = false, canOD = true } },]] ["meth"] = { emote = "coke", time = math.random(5000, 6000), stress = math.random(12, 24), heal = 0, armor = 10, type = "drug", stats = { effect = "stamina", widepupils = false, canOD = true } },
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--[[ --[[
Example item --Example item
--["heartstopper"] = { ["heartstopper"] = {
emote = "burger", -- Select an emote from below, it has to be in here emote = "burger", -- Select an emote from below, it has to be in here
time = math.random(5000, 6000), -- Amount of time it takes to consume the item
stress = math.random(1,2), -- Amount of stress relief, can be 0 stress = math.random(1,2), -- Amount of stress relief, can be 0
heal = 0, -- Set amount to heal by after consuming heal = 0, -- Set amount to heal by after consuming
armor = 5, -- Amount of armor to add armor = 5, -- Amount of armor to add
type = "food", -- Type: "alcohol" / "drink" / "food" type = "food", -- Type: "alcohol" / "drink" / "food"
effect = { effect = "healdouble", }, -- The status effect given by the item, "heal" / "healdouble" / "stamina" stats = {
stats = { hunger = math.random(10,20), }, -- The stats of the item, if not found in the items.lua screen = "rampage" -- The screen effect to be played when after consuming the item
effect = "heal", -- The status effect given by the item, "heal" / "stamina"
time = 10000, -- How long the effect should last (if not added it will default to 10000)
amount = 6, -- How much the value is changed by per second
hunger = math.random(10,20), -- The hunger/thirst stats of the item, if not found in the items.lua
thirst = math.random(10,20), -- The hunger/thirst stats of the item, if not found in the items.lua
},
}, },
]] ]]
}, },

View File

@@ -1,6 +1,6 @@
name "Jim-Consumables" name "Jim-Consumables"
author "Jimathy" author "Jimathy"
version "v1.0" version "v1.2"
description "Consumable Script By Jimathy" description "Consumable Script By Jimathy"
fx_version "cerulean" fx_version "cerulean"
game "gta5" game "gta5"

View File

@@ -1,15 +1,13 @@
local QBCore = exports['qb-core']:GetCoreObject() local QBCore = exports['qb-core']:GetCoreObject()
--Consumables --Consumables
CreateThread(function() for k in pairs(Config.Consumables) do
for k,v in pairs(Config.Consumables) do QBCore.Functions.CreateUseableItem(k, function(source, item)
QBCore.Functions.CreateUseableItem(k, function(source, item) TriggerClientEvent('jim-consumables:Consume', source, item.name)
TriggerClientEvent('jim-consumables:Consume', source, item.name) end)
end) end
end for k, v in pairs(Config.Consumables) do
for k,v in pairs(Config.Consumables) do QBCore.Functions.CreateUseableItem(k, function(source, item) TriggerClientEvent('jim-consumables:Consume', source, item.name) end)
QBCore.Functions.CreateUseableItem(k, function(source, item) TriggerClientEvent('jim-consumables:Consume', source, item.name) end) if not QBCore.Shared.Items[k] then print("Item check - '"..k.."' not found in the shared lua") end
if not QBCore.Shared.Items[k] then print("Item check - '"..k.."' not found in the shared lua") end if not Config.Emotes[v.emote] then print("Emote check - '"..k.."' requested emote '"..v.emote.."' - not found in config.lua") end
if not Config.Emotes[v.emote] then print("Emote check - '"..k.."' requested emote '"..v.emote.."' - not found in config.lua") end end
end
end)