From 3ffa295ca130a2b78303c43f26c9d288083d8c0c Mon Sep 17 00:00:00 2001 From: Jim Shield Date: Tue, 14 Feb 2023 14:38:08 +0000 Subject: [PATCH 1/9] Add support for "return" items on item usage --- config.lua | 169 ++--------------------------------------------------- 1 file changed, 6 insertions(+), 163 deletions(-) diff --git a/config.lua b/config.lua index 18f3b87..2650430 100644 --- a/config.lua +++ b/config.lua @@ -6,7 +6,9 @@ print("^2Jim^7-^2Consumables ^7v^41^7.^43^7.^42 ^7- ^2Consumables Script by ^1Ji Config = { Debug = false, + Notify = "qb", + UseProgbar = false, Consumables = { @@ -52,6 +54,10 @@ Config = { heal = 0, -- Set amount to heal by after consuming armor = 5, -- Amount of armor to add type = "food", -- Type: "alcohol" / "drink" / "food" + returnItem = { -- Item that will be given when the item is used + item = "plastic", -- eg. Plastic bottles can give "plastic" + amount = 1, + }, 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" @@ -109,168 +115,5 @@ Config = { ["sprunk"] = {"mp_player_intdrink", "loop_bottle", "Sprunk", AnimationOptions = { Prop = "v_res_tt_can03", PropBone = 18905, PropPlacement = {0.12, 0.008, 0.03, 240.0, -60.0}, EmoteMoving = true, EmoteLoop = true, }}, - --Jim-BeanMachine - ["bmcoffee1"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Coffee2", AnimationOptions = - { Prop = 'prop_fib_coffee', PropBone = 28422, PropPlacement = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - - ["bmcoffee2"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Coffee3", AnimationOptions = - { Prop = 'ng_proc_coffee_01a', PropBone = 28422, PropPlacement = {0.0, 0.0, -0.06, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - - ["bmcoffee3"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Coffee3", AnimationOptions = - { Prop = 'v_club_vu_coffeecup', PropBone = 28422, PropPlacement = {0.0, 0.0, -0.06, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - --Jim-PizzaThis - ["redwine"] = {"mp_player_intdrink", "loop_bottle", "Red Wine Bottle", AnimationOptions = - { Prop = "prop_wine_rose", PropBone = 18905, PropPlacement = {0.00, -0.26, 0.10, 240.0, -60.0}, - EmoteMoving = true, EmoteLoop = true, }}, - ["whitewine"] = {"mp_player_intdrink", "loop_bottle", "White Wine Bottle", AnimationOptions = - { Prop = "prop_wine_white", PropBone = 18905, PropPlacement = {0.00, -0.26, 0.10, 240.0, -60.0}, - EmoteMoving = true, EmoteLoop = true, }}, - ["pizza"] = {"mp_player_inteat@burger", "mp_player_int_eat_burger_fp", "Pizza", AnimationOptions = - { Prop = "v_res_tt_pizzaplate", PropBone = 18905, PropPlacement = {0.20, 0.038, 0.051, 15.0, 155.0}, - EmoteMoving = true, EmoteLoop = true, }}, - ["bowl"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "bowl", AnimationOptions = - { Prop = "h4_prop_h4_coke_plasticbowl_01", PropBone = 28422, PropPlacement = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, - EmoteMoving = true, EmoteLoop = true, }}, - ["pineapple"] = {"mp_player_inteat@burger", "mp_player_int_eat_burger_fp", "Pizza", AnimationOptions = - { Prop = "prop_pineapple", PropBone = 18905, PropPlacement = {0.10, 0.038, 0.03, 15.0, 50.0}, - EmoteMoving = true, EmoteLoop = true, }}, - ["foodbowl"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "bowl", AnimationOptions = - { Prop = "prop_cs_bowl_01", PropBone = 28422, PropPlacement = {0.0, 0.0, 0.050, 0.0, 0.0, 0.0}, - EmoteMoving = true, EmoteLoop = true, }}, - --Jim-BurgerShot - ["milk"] = {"mp_player_intdrink", "loop_bottle", "Milk", AnimationOptions = - { Prop = "v_res_tt_milk", PropBone = 18905, PropPlacement = {0.10, 0.008, 0.07, 240.0, -60.0}, - EmoteMoving = true, EmoteLoop = true, }}, - ["bscoke"] = {"mp_player_intdrink", "loop_bottle", "BS Coke", AnimationOptions = - { Prop = "prop_food_bs_juice01", PropBone = 18905, PropPlacement = {0.04, -0.10, 0.10, 240.0, -60.0}, - EmoteMoving = true, EmoteLoop = true, }}, - ["bscoffee"] = {"mp_player_intdrink", "loop_bottle", "BS Coffee", AnimationOptions = - { Prop = "prop_food_bs_coffee", PropBone = 18905, PropPlacement = {0.08, -0.10, 0.10, 240.0, -60.0}, - EmoteMoving = true, EmoteLoop = true, }}, - ["glass"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Tall Glass", AnimationOptions = - { Prop = 'prop_wheat_grass_glass', PropBone = 28422, PropPlacement = {0.0, 0.0, -0.1, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - - ["torpedo"] = {"mp_player_inteat@burger", "mp_player_int_eat_burger_fp", "Torpedo", AnimationOptions = - { Prop = "prop_food_bs_burger2", PropBone = 18905, PropPlacement = {0.10, -0.07, 0.091, 15.0, 135.0}, - EmoteMoving = true, EmoteLoop = true, }}, - ["bsfries"] = {"mp_player_inteat@burger", "mp_player_int_eat_burger_fp", "Fries", AnimationOptions = - { Prop = "prop_food_bs_chips", PropBone = 18905, PropPlacement = {0.09, -0.06, 0.05, 300.0, 150.0}, - EmoteMoving = true, EmoteLoop = true, }}, - ["donut2"] = {"mp_player_inteat@burger", "mp_player_int_eat_burger", "Donut2", AnimationOptions = - { Prop = 'prop_donut_02', PropBone = 18905, PropPlacement = {0.13, 0.05, 0.02, -50.0, 100.0, 270.0}, - EmoteMoving = true, EmoteLoop = true, }}, - - --Jim-CatCafe - ["boba1"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Boba 1", AnimationOptions = - { Prop = 'denis3d_catcafe_boobaA', PropBone = 28422, PropPlacement = {0.0, 0.0, -0.1, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["boba2"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Boba 2", AnimationOptions = - { Prop = 'denis3d_catcafe_boobaB', PropBone = 28422, PropPlacement = {0.0, 0.0, -0.1, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["boba3"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Boba 3", AnimationOptions = - { Prop = 'denis3d_catcafe_boobaC', PropBone = 28422, PropPlacement = {0.0, 0.0, -0.1, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["boba4"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Boba 4", AnimationOptions = - { Prop = 'denis3d_catcafe_boobaD', PropBone = 28422, PropPlacement = {0.0, 0.0, -0.1, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["mochi"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Mochi", AnimationOptions = - { Prop = 'denis3d_catcafe_plateD', PropBone = 28422, PropPlacement = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - - --Jim-Tequilala - ["whiskeyb"] = {"anim@amb@nightclub@mini@drinking@drinking_shots@ped_b@normal@", "glass_hold", "Whiskey Bottle", AnimationOptions = - { Prop = "prop_cs_whiskey_bottle", PropBone = 60309, PropPlacement = {0.08, 0.0, 0.05, 240.0, -60.0}, - EmoteMoving = true, EmoteLoop = true }}, - ["rumb"] = {"anim@amb@nightclub@mini@drinking@drinking_shots@ped_b@normal@", "glass_hold", "Rum Bottle", AnimationOptions = - { Prop = "prop_rum_bottle", PropBone = 60309, PropPlacement = {-0.04, -0.18, 0.12, 240.0, -60.0}, - EmoteMoving = true, EmoteLoop = true }}, - ["icream"] = {"anim@amb@nightclub@mini@drinking@drinking_shots@ped_b@normal@", "glass_hold", "Irish Cream Bottle", AnimationOptions = - { Prop = "prop_bottle_brandy", PropBone = 60309, PropPlacement = {-0.04, -0.18, 0.12, 240.0, -60.0}, - EmoteMoving = true, EmoteLoop = true }}, - ["ginb"] = {"anim@amb@nightclub@mini@drinking@drinking_shots@ped_b@normal@", "glass_hold", "Gin Bottle", AnimationOptions = - { Prop = "prop_tequila_bottle", PropBone = 60309, PropPlacement = {-0.04, -0.18, 0.12, 240.0, -60.0}, - EmoteMoving = true, EmoteLoop = true }}, - ["vodkab"] = {"anim@amb@nightclub@mini@drinking@drinking_shots@ped_b@normal@", "glass_hold", "Vodka Bottle", AnimationOptions = - { Prop = 'prop_vodka_bottle', PropBone = 60309, PropPlacement = {-0.04, -0.18, 0.12, 240.0, -60.0}, - EmoteMoving = true, EmoteLoop = true }}, - ["browncup"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Brown Cup", AnimationOptions = - { Prop = 'v_serv_bs_mug', PropBone = 28422, PropPlacement = {0.03, -0.02, 0.0, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["crisps"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Crisps", AnimationOptions = - { Prop = 'v_ret_ml_chips2', PropBone = 28422, PropPlacement = {0.01, -0.05, -0.1, 0.0, 0.0, 90.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["smoke2"] = {"amb@world_human_aa_smoke@male@idle_a", "idle_c", "Smoke 2", AnimationOptions = - { Prop = 'prop_cs_ciggy_01', PropBone = 28422, PropPlacement = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["smoke3"] = {"amb@world_human_aa_smoke@male@idle_a", "idle_b", "Smoke 3", AnimationOptions = - { Prop = 'prop_cs_ciggy_01', PropBone = 28422, PropPlacement = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["smoke4"] = {"amb@world_human_smoking@female@idle_a", "idle_b", "Smoke 4", AnimationOptions = - { Prop = 'prop_cs_ciggy_01', PropBone = 28422, PropPlacement = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["bong"] = {"anim@safehouse@bong", "bong_stage3", "Bong", AnimationOptions = - { Prop = 'hei_heist_sh_bong_01', PropBone = 18905, PropPlacement = {0.10,-0.25,0.0,95.0,190.0,180.0}, }}, - ["coffee"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Coffee", AnimationOptions = - { Prop = 'p_amb_coffeecup_01', PropBone = 28422, PropPlacement = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["whiskey"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Whiskey", AnimationOptions = - { Prop = 'prop_drink_whisky', PropBone = 28422, PropPlacement = {0.01, -0.01, -0.06, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["beer"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Beer", AnimationOptions = - { Prop = 'prop_amb_beer_bottle', PropBone = 28422, PropPlacement = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["cup"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Cup", AnimationOptions = - { Prop = 'prop_plastic_cup_02', PropBone = 28422, PropPlacement = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["donut"] = {"mp_player_inteat@burger", "mp_player_int_eat_burger", "Donut", AnimationOptions = - { Prop = 'prop_amb_donut', PropBone = 18905, PropPlacement = {0.13, 0.05, 0.02, -50.0, 16.0, 60.0}, - EmoteMoving = true, }}, - ["burger"] = {"mp_player_inteat@burger", "mp_player_int_eat_burger", "Burger", AnimationOptions = - { Prop = 'prop_cs_burger_01', PropBone = 18905, PropPlacement = {0.13, 0.05, 0.02, -50.0, 16.0, 60.0}, - EmoteMoving = true, }}, - ["sandwich"] = {"mp_player_inteat@burger", "mp_player_int_eat_burger", "Sandwich", AnimationOptions = - { Prop = 'prop_sandwich_01', PropBone = 18905, PropPlacement = {0.13, 0.05, 0.02, -50.0, 16.0, 60.0}, - EmoteMoving = true, }}, - ["soda"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Soda", AnimationOptions = - { Prop = 'prop_ecola_can', PropBone = 28422, PropPlacement = {0.0, 0.0, 0.0, 0.0, 0.0, 130.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["egobar"] = {"mp_player_inteat@burger", "mp_player_int_eat_burger", "Ego Bar", AnimationOptions = - { Prop = 'prop_choc_ego', PropBone = 60309, PropPlacement = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, - EmoteMoving = true, }}, - ["wine"] = {"anim@heists@humane_labs@finale@keycards", "ped_a_enter_loop", "Wine", AnimationOptions = - { Prop = 'prop_drink_redwine', PropBone = 18905, PropPlacement = {0.10, -0.03, 0.03, -100.0, 0.0, -10.0}, - EmoteMoving = true, EmoteLoop = true }}, - ["flute"] = {"anim@heists@humane_labs@finale@keycards", "ped_a_enter_loop", "Flute", AnimationOptions = - { Prop = 'prop_champ_flute', PropBone = 18905, PropPlacement = {0.10, -0.03, 0.03, -100.0, 0.0, -10.0}, - EmoteMoving = true, EmoteLoop = true }}, - ["champagne"] = {"anim@heists@humane_labs@finale@keycards", "ped_a_enter_loop", "Champagne", AnimationOptions = - { Prop = 'prop_drink_champ', PropBone = 18905, PropPlacement = {0.10, -0.03, 0.03, -100.0, 0.0, -10.0}, - EmoteMoving = true, EmoteLoop = true }}, - ["cigar"] = {"amb@world_human_smoking@male@male_a@enter", "enter", "Cigar", AnimationOptions = - { Prop = 'prop_cigar_02', PropBone = 47419, PropPlacement = {0.010, 0.0, 0.0, 50.0, 0.0, -80.0}, - EmoteMoving = true, EmoteDuration = 2600 }}, - ["cigar2"] = {"amb@world_human_smoking@male@male_a@enter", "enter", "Cigar 2", AnimationOptions = - { Prop = 'prop_cigar_01', PropBone = 47419, PropPlacement = {0.010, 0.0, 0.0, 50.0, 0.0, -80.0}, - EmoteMoving = true, EmoteDuration = 2600 }}, - ["joint"] = {"amb@world_human_smoking@male@male_a@enter", "enter", "Joint", AnimationOptions = - { Prop = 'p_cs_joint_02', PropBone = 47419, PropPlacement = {0.015, -0.009, 0.003, 55.0, 0.0, 110.0}, - EmoteMoving = true, EmoteDuration = 2600 }}, - ["cig"] = {"amb@world_human_smoking@male@male_a@enter", "enter", "Cig", AnimationOptions = - { Prop = 'prop_amb_ciggy_01', PropBone = 47419, PropPlacement = {0.015, -0.009, 0.003, 55.0, 0.0, 110.0}, - EmoteMoving = true, EmoteDuration = 2600 }}, - ["clean"] = {"timetable@floyd@clean_kitchen@base", "base", "Clean", AnimationOptions = - { Prop = "prop_sponge_01", PropBone = 28422, PropPlacement = {0.0, 0.0, -0.01, 90.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["clean2"] = {"amb@world_human_maid_clean@", "base", "Clean 2", AnimationOptions = - { Prop = "prop_sponge_01", PropBone = 28422, PropPlacement = {0.0, 0.0, -0.01, 90.0, 0.0, 0.0}, - EmoteLoop = true, EmoteMoving = true, }}, - ["coke"] = { "switch@trevor@trev_smoking_meth", "trev_smoking_meth_loop", "Coke", AnimationOptions = - { EmoteLoop = true, EmoteMoving = true, }}, - ["oxy"] = { "mp_suicide", "pill", "Oxy", AnimationOptions = - { EmoteLoop = true, EmoteMoving = true, }}, }, } From dbed114e05a73849d1eef56e84c54a263dba6c0c Mon Sep 17 00:00:00 2001 From: Jim Shield Date: Tue, 14 Feb 2023 14:38:57 +0000 Subject: [PATCH 2/9] Add support for returnItem and export item syncing --- client/client.lua | 59 +++++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/client/client.lua b/client/client.lua index 547c026..d8fc2cf 100644 --- a/client/client.lua +++ b/client/client.lua @@ -16,22 +16,30 @@ end local consuming = false local cancelled = false +AddEventHandler('onResourceStart', function(r) if GetCurrentResourceName() ~= r then return end TriggerServerEvent("jim-consumables:getSync") end) +RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function() TriggerServerEvent("jim-consumables:getSync") end) +RegisterNetEvent("jim-consumables:syncItems", function(consumables, emotes) + if consumables then for k, v in pairs(consumables) do if not Config.Consumables[k] then Config.Consumables[k] = v print("^5Debug^7 ^2Adding Item^7: '^6"..k.."^7'") end end end + if emotes then for k, v in pairs(emotes) do if not Config.Emotes[k] then Config.Emotes[k] = v print("^5Debug^7 ^2Adding Emote^7: '^6"..k.."^7'") end end end +end) + RegisterNetEvent('jim-consumables:Consume', function(itemName) 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) TriggerEvent('inventory:client:busy:status', true) TriggerEvent('canUseInventoryAndHotbar:toggle', false) local Player = PlayerPedId() - local emote = Config.Emotes[Config.Consumables[itemName].emote] + local emote = Config.Emotes[Config.Consumables[itemName].emote] or "eat" + local returnItem = Config.Consumables[itemName].returnItem or nil local animDict = tostring(emote[1]) local anim = tostring(emote[2]) local model, model2, bone, bone2, drugeffect, stress local P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12 = table.unpack({0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}) -- Default placement coord cariable if emote.AnimationOptions.Prop then model = emote.AnimationOptions.Prop - bone = GetPedBoneIndex(PlayerPedId(), emote.AnimationOptions.PropBone) + bone = GetPedBoneIndex(Player, emote.AnimationOptions.PropBone) P1, P2, P3, P4, P5, P6 = table.unpack(emote.AnimationOptions.PropPlacement) if emote.AnimationOptions.SecondProp then model2 = emote.AnimationOptions.SecondProp - bone2 = GetPedBoneIndex(PlayerPedId(), emote.AnimationOptions.SecondPropBone) + bone2 = GetPedBoneIndex(Player, emote.AnimationOptions.SecondPropBone) P7, P8, P9, P10, P11, P12 = table.unpack(emote.AnimationOptions.SecondPropPlacement) end end @@ -67,12 +75,12 @@ RegisterNetEvent('jim-consumables:Consume', function(itemName) end else MovementType = 0 end if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Checking if player is in a vehicle^7...") end - local InVehicle = IsPedInAnyVehicle(PlayerPedId(), true) + local InVehicle = IsPedInAnyVehicle(Player, true) if InVehicle == 1 then MovementType = 51 end --Load and Start animation if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Playing Animation^7...") end loadAnimDict(animDict) - TaskPlayAnim(PlayerPedId(), animDict, anim, 1.0, 1.0, -1, MovementType, 0, 0, 0, 0) + TaskPlayAnim(Player, animDict, anim, 1.0, 1.0, -1, MovementType, 0, 0, 0, 0) if Config.UseProgbar then QBCore.Functions.Progressbar('jimmy_consume_', string..QBCore.Shared.Items[itemName].label.."..", time, false, false, {disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true,}, {}, {}, {}, function() consuming = false end, function() end, itemName) @@ -87,11 +95,11 @@ RegisterNetEvent('jim-consumables:Consume', function(itemName) if IsModelValid(model) == 1 then if Config.Debug then print("^5Debug^7: ^3PropSpawn^7: ^2Spawning consumable prop^7.") end attachProp = makeProp({ prop = model, coords = vector4(0.0,0.0,0.0,0.0)}, 1, 1) - AttachEntityToEntity(attachProp, PlayerPedId(), bone, P1, P2, P3, P4, P5, P6, true, true, false, true, 1, true) + AttachEntityToEntity(attachProp, Player, bone, P1, P2, P3, P4, P5, P6, true, true, false, true, 1, true) if model2 then if IsModelValid(model2) == 1 then attachProp2 = makeProp({ prop = model2, coords = vector4(0.0,0.0,0.0,0.0)}, 1, 1) - AttachEntityToEntity(attachProp2, PlayerPedId(), bone2, P7, P8, P9, P10, P11, P12, true, true, false, true, 1, true) + AttachEntityToEntity(attachProp2, Player, bone2, P7, P8, P9, P10, P11, P12, true, true, false, true, 1, true) else print("^5Debug^7: ^3PropSpawn^7: ^2Second prop model isn't valid/found^7.") end end while consuming do Wait(50) end @@ -117,10 +125,11 @@ RegisterNetEvent('jim-consumables:Consume', function(itemName) Wait(10) time -= 10 end - StopEntityAnim(PlayerPedId(), anim, animDict, 1.0) + StopEntityAnim(Player, anim, animDict, 1.0) unloadAnimDict(animDict) if not cancelled then toggleItem(false, itemName, 1) + if returnItem ~= nil then toggleItem(true, returnItem.item, returnItem.amount) end if QBCore.Shared.Items[itemName].thirst then TriggerServerEvent("jim-consumables:server:addThirst", QBCore.Functions.GetPlayerData().metadata["thirst"] + QBCore.Shared.Items[itemName].thirst) end if QBCore.Shared.Items[itemName].hunger then TriggerServerEvent("jim-consumables:server:addHunger", QBCore.Functions.GetPlayerData().metadata["hunger"] + QBCore.Shared.Items[itemName].hunger) end if not QBCore.Shared.Items[itemName].thirst and not QBCore.Shared.Items[itemName].hunger then @@ -139,11 +148,11 @@ RegisterNetEvent('jim-consumables:Consume', function(itemName) 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) + SetEntityHealth(Player, GetEntityHealth(Player) + heal) 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)) + TriggerServerEvent('hospital:server:SetArmor', (GetPedArmour(Player) + armor)) SetPedArmour(Player, (GetPedArmour(Player) + armor)) end if type == "alcohol" then if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Current ^4alcoholCount^7: ^6"..(alcoholCount + 1)) end @@ -171,29 +180,33 @@ RegisterNetEvent('jim-consumables:Consume', function(itemName) drugCount += 1 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(Player) - math.random(10,15)) if drugCount >= 7 then CreateThread(function() AlienEffect() end) -- If too many drugs, if not dead will make you stumble end end end if stats.effect == "heal" then - if GetResourceState("ps-buffs") == "started" then exports["ps-buffs"]:AddHealthBuff((stats.time or 10000), (stats.amount or 6)) - else CreateThread(function() HealEffect({(stats.time or 10000), (stats.amount or 6)}) end) end + if GetResourceState("ps-buffs") == "started" then + if Config.Debug then print("^5Debug^7: ^3Consume^7: ^4PS^7-^4Buffs ^2found^7, ^2hooking in to get buffs and applying ^6Health Buff ^2for ^6"..stats.time.."^7ms") end + exports["ps-buffs"]:AddHealthBuff((tonumber(stats.time) or 10000), (stats.amount or 6)) + else CreateThread(function() HealEffect({(tonumber(stats.time) or 10000), (stats.amount or 6)}) end) end end if stats.effect == "stamina" then - if GetResourceState("ps-buffs") == "started" then exports["ps-buffs"]:StaminaBuffEffect((stats.time or 10000), (stats.amount or 6)) - else CreateThread(function() StaminaEffect({(stats.time or 10000), (stats.amount or 6)}) end) end + if GetResourceState("ps-buffs") == "started" then + if Config.Debug then print("^5Debug^7: ^3Consume^7: ^4PS^7-^4Buffs ^2found^7, ^2hooking in to get buffs and applying ^6Stamina Buff ^2for ^6"..stats.time.."^7ms") end + exports["ps-buffs"]:StaminaBuffEffect((tonumber(stats.time) or 10000), (stats.amount or 6)) + else CreateThread(function() StaminaEffect({(tonumber(stats.time) or 10000), (stats.amount or 6)}) end) 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.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.time or 10000), (stats.amount or 6)) end - if stats.effect == "hacking" then exports["ps-buffs"]:AddBuff("hacking", (stats.time or 10000)) end - if stats.effect == "intelligence" then exports["ps-buffs"]:AddBuff("intelligence", (stats.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 + if Config.Debug then print("^5Debug^7: ^3Consume^7: ^4PS^7-^4Buffs ^2found^7, ^2hooking in to get buffs and applying ^6"..stats.effect.." Buff ^2for ^6"..stats.time.."^7ms") end + if stats.effect == "armor" then exports["ps-buffs"]:AddArmorBuff((tonumber(stats.time) or 10000), (stats.amount or 6)) end + if stats.effect == "stress" then exports["ps-buffs"]:AddStressBuff((tonumber(stats.time) or 10000), (stats.amount or 6)) end + if stats.effect == "swimming" then exports["ps-buffs"]:SwimmingBuffEffect((tonumber(stats.time) or 10000), (stats.amount or 6)) end + if stats.effect == "hacking" then exports["ps-buffs"]:AddBuff("hacking", (tonumber(stats.time) or 10000)) end + if stats.effect == "intelligence" then exports["ps-buffs"]:AddBuff("intelligence", (tonumber(stats.time) or 10000)) end + if stats.effect == "luck" then exports["ps-buffs"]:AddBuff("luck", (tonumber(stats.time) or 10000)) end + if stats.effect == "strength" then exports["ps-buffs"]:AddBuff("strength", (tonumber(stats.time) or 10000)) end end if stats.widepupils then TriggerEvent("evidence:client:SetStatus", "widepupils", 200) end end From ad185183f7f7ed5938cfc8bfff080629ee565d22 Mon Sep 17 00:00:00 2001 From: Jim Shield Date: Tue, 14 Feb 2023 14:40:09 +0000 Subject: [PATCH 3/9] Add support for exports itemSyncing --- server/server.lua | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/server/server.lua b/server/server.lua index b5a695a..400cfd8 100644 --- a/server/server.lua +++ b/server/server.lua @@ -2,8 +2,8 @@ local QBCore = exports['qb-core']:GetCoreObject() for k, v in pairs(Config.Consumables) do 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 Config.Emotes[v.emote] then print("Emote check - '"..k.."' requested emote '"..v.emote.."' - not found in config.lua") end + if not QBCore.Shared.Items[k] then print("^1Debug^7: ^2Item check ^7- '^1"..k.."^7' ^2not found in the shared lua^7") end + if not Config.Emotes[v.emote] then print("^1Debug^7: ^2Emote check ^7- '^1"..k.."^7' ^2requested emote ^7'^6"..v.emote.."^7' - ^2not found in config^7.^2lua^7") end end RegisterNetEvent('jim-consumables:server:toggleItem', function(give, item, amount) @@ -13,8 +13,6 @@ RegisterNetEvent('jim-consumables:server:toggleItem', function(give, item, amoun TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[item], "remove", amount or 1) end else - if not Config.Consumables[give] then print(('%s may have potentially attempted an item exploit to gain %s %s'):format(src, amount, item)) return end -- cancel if item does not exist in config - if QBCore.Functions.GetPlayer(src).Functions.AddItem(item, amount or 1) then TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[item], "add", amount or 1) end @@ -34,3 +32,22 @@ RegisterNetEvent('jim-consumables:server:addHunger', function(amount) Player.Functions.SetMetaData('hunger', amount) TriggerClientEvent('hud:client:UpdateNeeds', source, amount, Player.PlayerData.metadata.thirst) end) + +--Export Import System-- +RegisterNetEvent("jim-consumables:getSync", function() local src = source TriggerClientEvent("jim-consumables:syncItems", source, Config.Consumables, Config.Emotes) end) +local function importEmote(emoteName, eInfo) + if Config.Debug then print("^5Debug^7: ^2Importing Item ^7'^6"..emoteName.."^7'") end + Config.Emotes[emoteName] = eInfo + TriggerClientEvent("jim-consumables:syncItems", -1, nil, Config.Emotes) +end + +local function importConsumable(itemName, conInfo) + if Config.Debug then print("^5Debug^7: ^2Importing Item ^7'^6"..itemName.."^7'") end + if not QBCore.Shared.Items[itemName] then print("^1Debug^7: ^2Item check ^7- '^1"..k.."^7' ^2not found in the shared lua^7") end + Config.Consumables[itemName] = conInfo + QBCore.Functions.CreateUseableItem(itemName, function(source, item) TriggerClientEvent('jim-consumables:Consume', source, itemName) end) + TriggerClientEvent("jim-consumables:syncItems", -1, Config.Consumables, nil) +end + +exports("importEmote", importEmote) +exports("importConsumable", importConsumable) From 6654b9a3f57d09b005f7bab9e09ab84de156c94e Mon Sep 17 00:00:00 2001 From: Jim Shield Date: Tue, 14 Feb 2023 14:52:10 +0000 Subject: [PATCH 4/9] Add HasItem() exploit protection --- shared/shared.lua | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/shared/shared.lua b/shared/shared.lua index be7d744..f4429b3 100644 --- a/shared/shared.lua +++ b/shared/shared.lua @@ -12,9 +12,9 @@ function loadModel(model) if not HasModelLoaded(model) then 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 not HasAnimDictLoaded(dict) then 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 end +function loadAnimDict(dict) if not HasAnimDictLoaded(dict) then 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 end function unloadAnimDict(dict) if Config.Debug then print("^5Debug^7: ^2Removing Anim Dictionary^7: '^6"..dict.."^7'") end RemoveAnimDict(dict) end -function loadPtfxDict(dict) if not HasNamedPtfxAssetLoaded(dict) then if Config.Debug then print("^5Debug^7: ^2Loading Ptfx Dictionary^7: '^6"..dict.."^7'") end while not HasNamedPtfxAssetLoaded(dict) do RequestNamedPtfxAsset(dict) Wait(5) end end end +function loadPtfxDict(dict) if not HasNamedPtfxAssetLoaded(dict) then if Config.Debug then print("^5Debug^7: ^2Loading Ptfx Dictionary^7: '^6"..dict.."^7'") end while not HasNamedPtfxAssetLoaded(dict) do RequestNamedPtfxAsset(dict) Wait(5) end end end function unloadPtfxDict(dict) if Config.Debug then print("^5Debug^7: ^2Removing Ptfx Dictionary^7: '^6"..dict.."^7'") end RemoveNamedPtfxAsset(dict) end function destroyProp(entity) @@ -58,6 +58,24 @@ function countTable(table) local i = 0 for keys in pairs(table) do i += 1 end re function toggleItem(give, item, amount) TriggerServerEvent("jim-consumables:server:toggleItem", give, item, amount) end +function HasItem(items, amount) + local amount = amount or 1 + local count = 0 + for _, itemData in pairs(QBCore.Functions.GetPlayerData().items) do + if itemData and (itemData.name == items) then + if Config.Debug then print("^5Debug^7: ^3HasItem^7: ^2Item^7: '^3"..tostring(items).."^7' ^2Slot^7: ^3"..itemData.slot.." ^7x(^3"..tostring(itemData.amount).."^7)") end + count += itemData.amount + end + end + if count >= amount then + if Config.Debug then print("^5Debug^7: ^3HasItem^7: ^2Items ^5FOUND^7 x^3"..count.."^7") end + return true + else + if Config.Debug then print("^5Debug^7: ^3HasItem^7: ^2Items ^1NOT FOUND^7") end + return false + end +end + --Screen Effects local alienEffect = false function AlienEffect() From e263aa32550d67d81b567bdf4aff6f6f6747865c Mon Sep 17 00:00:00 2001 From: Jim Shield Date: Tue, 14 Feb 2023 14:52:57 +0000 Subject: [PATCH 5/9] Add HasItem() exploit protection --- server/server.lua | 57 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/server/server.lua b/server/server.lua index 400cfd8..b4f8a3e 100644 --- a/server/server.lua +++ b/server/server.lua @@ -19,6 +19,41 @@ RegisterNetEvent('jim-consumables:server:toggleItem', function(give, item, amoun end end) +RegisterNetEvent("jim-consumables:server:DupeWarn", function(item, newsrc) + local src = newsrc or source + local P = QBCore.Functions.GetPlayer(src) + print("^5DupeWarn: ^1"..P.PlayerData.charinfo.firstname.." "..P.PlayerData.charinfo.lastname.."^7(^1"..tostring(src).."^7) ^2Tried to remove item ^7('^3"..item.."^7')^2 but it wasn't there^7") + if not Config.Debug then DropPlayer(src, "Kicked for attempting to duplicate items") end + print("^5DupeWarn: ^1"..P.PlayerData.charinfo.firstname.." "..P.PlayerData.charinfo.lastname.."^7(^1"..tostring(src).."^7) ^2Dropped from server for item duplicating^7") +end) + +RegisterNetEvent('jim-consumables:server:toggleItem', function(give, item, amount, newsrc) + local src = newsrc or source + local amount = amount or 1 + local remamount = amount + if not give then + if HasItem(src, item, amount) then -- check if you still have the item + if QBCore.Functions.GetPlayer(src).Functions.GetItemByName(item).unique then -- If unique item, keep removing until gone + while remamount > 0 do + QBCore.Functions.GetPlayer(src).Functions.RemoveItem(item, 1) + remamount -= 1 + end + TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[item], "remove", amount) -- Show removal item box when all are removed + return + end + if QBCore.Functions.GetPlayer(src).Functions.RemoveItem(item, amount) then + if Config.Debug then print("^5Debug^7: ^1Removing ^2from Player^7(^2"..src.."^7) '^6"..QBCore.Shared.Items[item].label.."^7(^2x^6"..(amount or "1").."^7)'") end + TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[item], "remove", amount) + end + else TriggerEvent("jim-consumables:server:DupeWarn", item, src) end -- if not boot the player + elseif give then + if QBCore.Functions.GetPlayer(src).Functions.AddItem(item, amount) then + if Config.Debug then print("^5Debug^7: ^4Giving ^2Player^7(^2"..src.."^7) '^6"..QBCore.Shared.Items[item].label.."^7(^2x^6"..(amount or "1").."^7)'") end + TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[item], "add", amount) + end + end +end) + RegisterNetEvent('jim-consumables:server:addThirst', function(amount) local Player = QBCore.Functions.GetPlayer(source) if not Player then return end @@ -33,6 +68,28 @@ RegisterNetEvent('jim-consumables:server:addHunger', function(amount) TriggerClientEvent('hud:client:UpdateNeeds', source, amount, Player.PlayerData.metadata.thirst) end) +function HasItem(source, items, amount) + local amount = amount or 1 + local Player = QBCore.Functions.GetPlayer(source) + if not Player then return false end + local count = 0 + + if Config.Debug then print("^5Debug^7: ^3HasItem^7: ^2Checking if player has required item^7 '^3"..tostring(items).."^7'") end + + for _, itemData in pairs(Player.PlayerData.items) do + if itemData and (itemData.name == items) then + if Config.Debug then print("^5Debug^7: ^3HasItem^7: ^2Item^7: '^3"..tostring(items).."^7' ^2Slot^7: ^3"..itemData.slot.." ^7x(^3"..tostring(itemData.amount).."^7)") end + count += itemData.amount + end + end + if count >= amount then + if Config.Debug then print("^5Debug^7: ^3HasItem^7: ^2Items ^5FOUND^7 x^3"..count.."^7") end + return true + end + if Config.Debug then print("^5Debug^7: ^3HasItem^7: ^2Items ^1NOT FOUND^7") end + return false +end + --Export Import System-- RegisterNetEvent("jim-consumables:getSync", function() local src = source TriggerClientEvent("jim-consumables:syncItems", source, Config.Consumables, Config.Emotes) end) local function importEmote(emoteName, eInfo) From 4648083127a91de6e100e9b50e7bdc1eda989eab Mon Sep 17 00:00:00 2001 From: Jim Shield Date: Tue, 14 Feb 2023 14:53:48 +0000 Subject: [PATCH 6/9] Add HasItem() exploit protection --- client/client.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/client.lua b/client/client.lua index d8fc2cf..5895d88 100644 --- a/client/client.lua +++ b/client/client.lua @@ -24,6 +24,7 @@ RegisterNetEvent("jim-consumables:syncItems", function(consumables, emotes) end) RegisterNetEvent('jim-consumables:Consume', function(itemName) + if not HasItem(itemName, 1) then print("^5Debug^7: ^1Error^7: ^2Item not found in inventory^7, ^2stopping^7..") end 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) TriggerEvent('inventory:client:busy:status', true) TriggerEvent('canUseInventoryAndHotbar:toggle', false) local Player = PlayerPedId() @@ -199,7 +200,7 @@ RegisterNetEvent('jim-consumables:Consume', function(itemName) else CreateThread(function() StaminaEffect({(tonumber(stats.time) or 10000), (stats.amount or 6)}) end) 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 and applying ^6"..stats.effect.." Buff ^2for ^6"..stats.time.."^7ms") end + if Config.Debug then print("^5Debug^7: ^3Consume^7: ^4PS^7-^4Buffs ^2found^7, ^2hooking in to get buffs and applying ^6"..stats.effect.." Buff ^2for ^6"..(stats.time or "nil").."^7ms") end if stats.effect == "armor" then exports["ps-buffs"]:AddArmorBuff((tonumber(stats.time) or 10000), (stats.amount or 6)) end if stats.effect == "stress" then exports["ps-buffs"]:AddStressBuff((tonumber(stats.time) or 10000), (stats.amount or 6)) end if stats.effect == "swimming" then exports["ps-buffs"]:SwimmingBuffEffect((tonumber(stats.time) or 10000), (stats.amount or 6)) end From b56cce89510317acabe486c436121097dc14a564 Mon Sep 17 00:00:00 2001 From: Jim Shield Date: Tue, 14 Feb 2023 14:55:32 +0000 Subject: [PATCH 7/9] v1.4 --- fxmanifest.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fxmanifest.lua b/fxmanifest.lua index 46488a7..eb55657 100644 --- a/fxmanifest.lua +++ b/fxmanifest.lua @@ -1,6 +1,6 @@ name "Jim-Consumables" author "Jimathy" -version "v1.3.2" +version "v1.4" description "Consumable Script By Jimathy" fx_version "cerulean" game "gta5" From a4901972b9f522da1bae90a1fad20ceb97782c61 Mon Sep 17 00:00:00 2001 From: Jim Shield Date: Tue, 14 Feb 2023 14:56:50 +0000 Subject: [PATCH 8/9] Update README.md --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4fb4660..af1f159 100644 --- a/README.md +++ b/README.md @@ -28,10 +28,14 @@ To add an item, you only need to add a new item table in the Config.Consumables heal = 0, -- Set amount to heal by after consuming armor = 5, -- Amount of armor to add type = "food", -- Type: "alcohol" / "drink" / "food" + returnItem = { -- Item that will be given when the item is used + item = "plastic", -- eg. Plastic bottles can give "plastic" + amount = 1, + }, 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) + time = 10000, -- How long the effect should last (if not added it will default to 10000 which is 10 seconds) 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 @@ -70,4 +74,4 @@ If this script is enabled it will automatically try to use their system to apply "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. \ No newline at end of file +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. From d0fa6b750ba0d0c4f72e0bb718e4e6bd5ea66b18 Mon Sep 17 00:00:00 2001 From: Jim Shield Date: Tue, 14 Feb 2023 15:14:53 +0000 Subject: [PATCH 9/9] Update README.md --- README.md | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index af1f159..a01bec0 100644 --- a/README.md +++ b/README.md @@ -6,15 +6,29 @@ This script is designed as a replacement/override for food and drink consumables It's main purpose was to make it possible to not stand up while sitting due to lazy events such as ClearPedTasks in most scripts, this one is designed to cancel the animation you have chosen, not all animations. This includes progressbar. +## v1.4 Beta Information +I've added a export system that allows scripts to easily add new foods and drinks to be usable and then sync them between players +This should work but may have issues. + +But because of the export system being used, Jim-Consumables **NEEDS** to start before any scripts that use it. + +And small example snippet for this imports the item and the emote, then syncs it to players + +```lua +local foodTable = { + ["shotfries"] = { emote = "bsfries", canRun = false, time = math.random(5000, 6000), stress = math.random(2, 4), heal = 0, armor = 0, type = "food", stats = { hunger = math.random(55,65), }}, +} +local emoteTable = { + ["bsfries"] = {"mp_player_inteat@burger", "mp_player_int_eat_burger_fp", "Fries", AnimationOptions = { Prop = "prop_food_bs_chips", PropBone = 18905, PropPlacement = {0.09, -0.06, 0.05, 300.0, 150.0}, EmoteMoving = true, EmoteLoop = true, }}, +} + +for k, v in pairs(emoteTable) do exports["jim-consumables"]:importEmote(k, v) end +for k, v in pairs(foodTable) do exports["jim-consumables"]:importConsumable(k, v) end +``` +This will grab the `shotfries` item info and add it to the `Config.Consumables` while the servers running and the same with the built-in emote system + # Installation -``` -Please stop asking to how add a progressbar...PLEASE - -This script was designed to not need one, because of how it cancels all the player animations instantly - -You can manage without a progressbar. -``` This script is recommended to be ran last/at the bottom of your server.cfg because this is intended to take control of items, if ran too early the original script may override this one. It already takes control of default qbcore food and drink, but you would probably want to add more. @@ -28,14 +42,14 @@ To add an item, you only need to add a new item table in the Config.Consumables heal = 0, -- Set amount to heal by after consuming armor = 5, -- Amount of armor to add type = "food", -- Type: "alcohol" / "drink" / "food" - returnItem = { -- Item that will be given when the item is used - item = "plastic", -- eg. Plastic bottles can give "plastic" + returnItem = { -- Item that will be given when the item is used + item = "plastic", -- eg. Plastic bottles can give "plastic" amount = 1, }, 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 which is 10 seconds) + 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