mirror of
https://github.com/jimathy/jim-consumables.git
synced 2026-08-18 15:06:03 +01:00
Compare commits
82 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5bbd8a70e8 | ||
|
|
9f5bde25ae | ||
|
|
445ddc82ac | ||
|
|
d9b97dc14c | ||
|
|
c96d1ec277 | ||
|
|
cf3d3c4147 | ||
|
|
4e565268cd | ||
|
|
9e8dcc39f9 | ||
|
|
c2d902c813 | ||
|
|
4d83c8c612 | ||
|
|
f23d2bbdd0 | ||
|
|
9323c46406 | ||
|
|
57ed8b2ae0 | ||
|
|
7492531621 | ||
|
|
531c93377a | ||
|
|
11f479d8f8 | ||
|
|
d60a93448d | ||
|
|
0b45087596 | ||
|
|
5b1c949903 | ||
|
|
61ca273b5f | ||
|
|
7feaa12f7e | ||
|
|
7f5383f90e | ||
|
|
e988fb216a | ||
|
|
6a17162638 | ||
|
|
cec84d4ba9 | ||
|
|
9558f71ce8 | ||
|
|
3565c9850f | ||
|
|
8f57772427 | ||
|
|
d7ec8dd90c | ||
|
|
429bf50b3a | ||
|
|
0b42cbc362 | ||
|
|
e7d9946532 | ||
|
|
c10860f788 | ||
|
|
7e10b7835f | ||
|
|
80ffb27ac2 | ||
|
|
d263b1d156 | ||
|
|
7d8aa1bbc6 | ||
|
|
3330724d4e | ||
|
|
3e2eef8a38 | ||
|
|
b1730d24f1 | ||
|
|
632fd1de5b | ||
|
|
d0fa6b750b | ||
|
|
52816242fa | ||
|
|
4e38c81645 | ||
|
|
7a6762ee08 | ||
|
|
6ba9febb0a | ||
|
|
7996100dad | ||
|
|
c25cb643bc | ||
|
|
a4901972b9 | ||
|
|
b56cce8951 | ||
|
|
4648083127 | ||
|
|
e263aa3255 | ||
|
|
6654b9a3f5 | ||
|
|
ad185183f7 | ||
|
|
dbed114e05 | ||
|
|
3ffa295ca1 | ||
|
|
18c6401581 | ||
|
|
118219c9aa | ||
|
|
b2c7c34e15 | ||
|
|
cba9a574bf | ||
|
|
41136ce949 | ||
|
|
18d903abcc | ||
|
|
909dd3ad19 | ||
|
|
cec8165556 | ||
|
|
4bdcc11d51 | ||
|
|
68b17642a6 | ||
|
|
5d084c3046 | ||
|
|
bc585cd9a5 | ||
|
|
1f9e16acf1 | ||
|
|
9fcc91e2bc | ||
|
|
00332d0ca3 | ||
|
|
a2d2355757 | ||
|
|
de68263240 | ||
|
|
931ba14933 | ||
|
|
50f5dab7cb | ||
|
|
f1cf454687 | ||
|
|
da27eb3f89 | ||
|
|
35bf894213 | ||
|
|
a0c83c0e1f | ||
|
|
a6f6492d5b | ||
|
|
7da98b53e1 | ||
|
|
1036f1dc21 |
12
.github/FUNDING.yml
vendored
Normal file
12
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||||
|
patreon: # Replace with a single Patreon username
|
||||||
|
open_collective: # Replace with a single Open Collective username
|
||||||
|
ko_fi: jixelpatterns
|
||||||
|
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||||
|
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||||
|
liberapay: # Replace with a single Liberapay username
|
||||||
|
issuehunt: # Replace with a single IssueHunt username
|
||||||
|
otechie: # Replace with a single Otechie username
|
||||||
|
custom: ['https://jimathy666.tebex.io/']
|
||||||
17
.github/workflows/notify-discord.yml
vendored
Normal file
17
.github/workflows/notify-discord.yml
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
name: Discord Commit Notifier
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '*' # triggers on all branches
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
notify:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Discord Commits
|
||||||
|
uses: Sniddl/discord-commits@v1.6
|
||||||
|
with:
|
||||||
|
webhook: ${{ secrets.DISCORD_WEBHOOK }}
|
||||||
|
template: "avatar-with-link"
|
||||||
|
include-extras: true
|
||||||
79
README.md
79
README.md
@@ -1,27 +1,69 @@
|
|||||||
# jim-consumables
|
# Jim-Consumables
|
||||||
Consumables script for QBCore
|
Consumables script for QBCore
|
||||||
|
|
||||||
# What is this?
|
# What is this?
|
||||||
This script is designed as a replacement/override for food and drink consumables in qb-smallresources
|
This script is designed as a replacement/override for food and drink consumables in `qb-smallresources`
|
||||||
|
|
||||||
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.
|
It's main purpose was to make it so players did not stand up while sitting with my scripts due to lazy events such as ClearPedTasks in progressbar and dpemotes, this one is designed to cancel the animation you have chosen, not all animations.
|
||||||
|
|
||||||
|
It's recommended to set `Config.UseProgBar` to `false` to get this effect.
|
||||||
|
|
||||||
|
# THIS DOESN'T USE DPEMOTES OR RPEMOTES
|
||||||
|
# YOU **NEED** TO PUT THE EMOTES IN THE BOTTOM OF THE CONFIG.LUA
|
||||||
|
|
||||||
|
## v1.5 Update 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.
|
||||||
|
|
||||||
|
This will be built into my scripts that use consumables to make it more plug and play
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
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.
|
- I always recommend starting my scripts **AFTER** `[qb]` not inside it as it can mess with any dependancies on server load
|
||||||
|
- I have a separate folder called `[jimextras]` (that is also in the resources folder) that starts before any scripts would use it.
|
||||||
|
- This ensure's it has everything it requires before trying to load
|
||||||
|
- Example of my load order:
|
||||||
|
```CSS
|
||||||
|
# QBCore & Extra stuff
|
||||||
|
ensure qb-core
|
||||||
|
ensure [qb]
|
||||||
|
ensure [standalone]
|
||||||
|
ensure [voice]
|
||||||
|
ensure [defaultmaps]
|
||||||
|
ensure [vehicles]
|
||||||
|
|
||||||
|
# Extra Jim Stuff
|
||||||
|
ensure [jimextras]
|
||||||
|
ensure [jim]
|
||||||
|
```
|
||||||
|
|
||||||
|
## QB-SmallResources
|
||||||
|
|
||||||
|
- It should already take control of default qbcore food, drink and drugs.
|
||||||
|
- If it fails to do this and attempts to use qb-smallresources still you will need to:
|
||||||
|
- `[qb]` > `qb-smallresources` > `server` > `consumables.lua`
|
||||||
|
- Remove or comment out the `CreateUseableItem` events for *alcohol*, *eat*, *drink* and *drug* in this file
|
||||||
|
- Not all of them! (such as armour related items)
|
||||||
|
- This ***should*** stop `qb-smallresources` taking control and confusing `jim-consumables`
|
||||||
|
|
||||||
|
## New Items
|
||||||
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
|
||||||
time = math.random(5000, 6000), -- Amount of time it takes to consume the item
|
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"
|
||||||
|
returnItem = { -- Item that will be given when the item is used
|
||||||
|
item = "plastic", -- eg. Plastic bottles can give "plastic"
|
||||||
|
amount = 1,
|
||||||
|
},
|
||||||
stats = {
|
stats = {
|
||||||
screen = "rampage" -- The screen effect to be played when after consuming the item
|
screen = "rampage", -- The screen effect to be played when after consuming the item
|
||||||
effect = "heal", -- The status effect given by the item, "heal" / "stamina"
|
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)
|
||||||
amount = 2, -- How much the value is changed by per second
|
amount = 2, -- How much the value is changed by per second
|
||||||
@@ -34,12 +76,14 @@ Consuming an item can also manually activate screen effects
|
|||||||
|
|
||||||
The example above uses `rampage` as this is what the effect is named after, you can use it for any item you think best
|
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
|
```lua
|
||||||
--The current list of effects are:
|
--The current list of screen effects are:
|
||||||
"turbo"
|
"turbo"
|
||||||
"focus"
|
"focus"
|
||||||
"rampage"
|
"rampage"
|
||||||
"weed"
|
"weed"
|
||||||
"trevor"
|
"trevor"
|
||||||
|
"nightvision"
|
||||||
|
"thermal"
|
||||||
```
|
```
|
||||||
|
|
||||||
## PS-Buffs Support
|
## PS-Buffs Support
|
||||||
@@ -61,3 +105,22 @@ If this script is enabled it will automatically try to use their system to apply
|
|||||||
```
|
```
|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
## Add consumables from external scripts
|
||||||
|
|
||||||
|
A small example of a server-sided snippet for this imports the item and the emote, then syncs it to players before and after they connect.
|
||||||
|
|
||||||
|
```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(foodTable) do TriggerEvent("jim-consumables:server:syncAddItem", k, v) end
|
||||||
|
for k, v in pairs(emoteTable) do TriggerEvent("jim-consumables:server:syncAddEmote", 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
|
||||||
|
|||||||
@@ -1,374 +1,423 @@
|
|||||||
local QBCore = exports['qb-core']:GetCoreObject()
|
local alcoholCount, drugCount, consuming, cancelled = 0, 0, false, false
|
||||||
|
Consumables, Emotes = {}, {}
|
||||||
|
|
||||||
PlayerJob = {}
|
local function syncConsumables()
|
||||||
local alcoholCount = 0
|
Consumables = triggerCallback(getScript()..":server:syncConsumables")
|
||||||
local drugCount = 0
|
Emotes = triggerCallback(getScript()..":server:syncEmotes")
|
||||||
|
debugPrint("^5Debug^7: ^2Retrieved ^6"..countTable(Consumables).." ^2Items and ^6"..countTable(Emotes).." ^2Emotes^7")
|
||||||
|
end
|
||||||
|
|
||||||
local time = 40
|
RegisterNetEvent(getScript()..":client:syncConsumables", function(NewConsumables)
|
||||||
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
|
if debugMode then
|
||||||
function unloadModel(model) if Config.Debug then print("^5Debug^7: ^2Removing Model^7: '^6"..model.."^7'") end SetModelAsNoLongerNeeded(model) end
|
for k, v in pairs(NewConsumables) do
|
||||||
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
|
if not Consumables[k] then
|
||||||
function unloadAnimDict(dict) if Config.Debug then print("^5Debug^7: ^2Removing Anim Dictionary^7: '^6"..dict.."^7'") end RemoveAnimDict(dict) end
|
print("^5Debug^7: ^2New Item Info added^7: ^6"..k.."^7")
|
||||||
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
|
|
||||||
|
|
||||||
--Convert Prop Model Names to Model HashKeys now to be more optimized when loading later
|
|
||||||
for k in pairs(Config.Emotes) do
|
|
||||||
if Config.Emotes[k].AnimationOptions.Prop then
|
|
||||||
Config.Emotes[k].AnimationOptions.Prop = GetHashKey(Config.Emotes[k].AnimationOptions.Prop)
|
|
||||||
end
|
end
|
||||||
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)
|
|
||||||
SetTimecycleModifier("Drunk")
|
|
||||||
SetPedMovementClipset(Ped, animDict, 1)
|
|
||||||
SetPedMotionBlur(Ped, true)
|
|
||||||
SetPedIsDrunk(Ped, true)
|
|
||||||
Wait(1500)
|
|
||||||
SetPedToRagdoll(Ped, 5000, 1000, 1, 0, 0, 0)
|
|
||||||
Wait(13500)
|
|
||||||
SetPedToRagdoll(Ped, 5000, 1000, 1, 0, 0, 0)
|
|
||||||
Wait(120500)
|
|
||||||
ClearTimecycleModifier()
|
|
||||||
ResetScenarioTypesEnabled()
|
|
||||||
ResetPedMovementClipset(Ped, 0)
|
|
||||||
SetPedIsDrunk(Ped, false)
|
|
||||||
SetPedMotionBlur(Ped, false)
|
|
||||||
AnimpostfxStopAll()
|
|
||||||
ShakeGameplayCam('DRUNK_SHAKE', 0.0)
|
|
||||||
AnimpostfxPlay("DrugsMichaelAliensFight", 3.0, 0)
|
|
||||||
Wait(math.random(45000, 60000))
|
|
||||||
AnimpostfxPlay("DrugsMichaelAliensFightOut", 3.0, 0)
|
|
||||||
AnimpostfxStop("DrugsMichaelAliensFightIn")
|
|
||||||
AnimpostfxStop("DrugsMichaelAliensFight")
|
|
||||||
AnimpostfxStop("DrugsMichaelAliensFightOut")
|
|
||||||
alienEffect = false
|
|
||||||
if Config.Debug then print("^5Debug^7: ^3AlienEffect^7() ^2stopped") end
|
|
||||||
end
|
|
||||||
local weedEffect = false
|
|
||||||
function WeedEffect()
|
|
||||||
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))
|
|
||||||
AnimpostfxPlay("DrugsMichaelAliensFight", 3.0, 0)
|
|
||||||
Wait(math.random(15000, 20000))
|
|
||||||
AnimpostfxPlay("DrugsMichaelAliensFightOut", 3.0, 0)
|
|
||||||
AnimpostfxStop("DrugsMichaelAliensFightIn")
|
|
||||||
AnimpostfxStop("DrugsMichaelAliensFight")
|
|
||||||
AnimpostfxStop("DrugsMichaelAliensFightOut")
|
|
||||||
weedEffect = false
|
|
||||||
if Config.Debug then print("^5Debug^7: ^3WeedEffect^7() ^2stopped") end
|
|
||||||
end
|
|
||||||
local trevorEffect = false
|
|
||||||
function TrevorEffect()
|
|
||||||
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)
|
|
||||||
AnimpostfxPlay("DrugsTrevorClownsFight", 3.0, 0)
|
|
||||||
Wait(30000)
|
|
||||||
AnimpostfxPlay("DrugsTrevorClownsFightOut", 3.0, 0)
|
|
||||||
AnimpostfxStop("DrugsTrevorClownsFight")
|
|
||||||
AnimpostfxStop("DrugsTrevorClownsFightIn")
|
|
||||||
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
|
|
||||||
|
|
||||||
--Built-in Buff effects
|
|
||||||
local healEffect = false
|
|
||||||
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
|
|
||||||
Wait(1000)
|
|
||||||
count = count - 1
|
|
||||||
SetEntityHealth(PlayerPedId(), GetEntityHealth(PlayerPedId()) + data[2])
|
|
||||||
end
|
end
|
||||||
healEffect = false
|
|
||||||
if Config.Debug then print("^5Debug^7: ^3HealEffect^7() ^2stopped") end
|
|
||||||
end
|
|
||||||
|
|
||||||
local staminaEffect = false
|
|
||||||
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)
|
|
||||||
while startStamina > 0 do
|
|
||||||
Wait(1000)
|
|
||||||
if math.random(5, 100) < 10 then RestorePlayerStamina(PlayerId(), data[2]) end
|
|
||||||
startStamina = startStamina - 1
|
|
||||||
if math.random(5, 100) < 51 then end
|
|
||||||
end
|
end
|
||||||
startStamina = 0
|
Consumables = NewConsumables
|
||||||
SetRunSprintMultiplierForPlayer(PlayerId(), 1.0)
|
end)
|
||||||
staminaEffect = false
|
RegisterNetEvent(getScript()..":client:syncEmotes", function(NewEmotes)
|
||||||
if Config.Debug then print("^5Debug^7: ^3StaminaEffect^7() ^2stopped") end
|
if debugMode then
|
||||||
end
|
for k, v in pairs(NewEmotes) do
|
||||||
|
if not Emotes[k] then
|
||||||
|
print("^5Debug^7: ^2New Emote Info added^7: ^6"..k.."^7")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Emotes = NewEmotes
|
||||||
|
end)
|
||||||
|
|
||||||
function StopEffects()
|
onPlayerLoaded(function()
|
||||||
if Config.Debug then print("^5Debug^7: ^2All screen effects stopped") end
|
syncConsumables()
|
||||||
ShakeGameplayCam('DRUNK_SHAKE', 0.0)
|
end, true)
|
||||||
SetPedToRagdoll(PlayerPedId(), 5000, 1000, 1, 0, 0, 0)
|
|
||||||
ClearTimecycleModifier()
|
|
||||||
ResetScenarioTypesEnabled()
|
|
||||||
ResetPedMovementClipset(PlayerPedId(), 0)
|
|
||||||
SetPedIsDrunk(PlayerPedId(), false)
|
|
||||||
SetPedMotionBlur(PlayerPedId(), false)
|
|
||||||
AnimpostfxStop("DrugsMichaelAliensFightIn")
|
|
||||||
AnimpostfxStop("DrugsMichaelAliensFight")
|
|
||||||
AnimpostfxStop("DrugsMichaelAliensFightOut")
|
|
||||||
AnimpostfxStop("DrugsTrevorClownsFight")
|
|
||||||
AnimpostfxStop("DrugsTrevorClownsFightIn")
|
|
||||||
AnimpostfxStop("DrugsTrevorClownsFightOut")
|
|
||||||
AnimpostfxStop('RaceTurbo')
|
|
||||||
AnimpostfxStop('FocusIn')
|
|
||||||
AnimpostfxStop('Rampage')
|
|
||||||
end
|
|
||||||
|
|
||||||
local consuming = false
|
RegisterNetEvent(getScript()..':Consume', function(itemName)
|
||||||
local cancelled = false
|
if not hasItem(itemName, 1) then
|
||||||
|
print("^5Debug^7: ^1Error^7: ^2Item not found in inventory^7, ^2stopping^7..")
|
||||||
|
end
|
||||||
|
local requiredItem = Consumables[itemName].requiredItem or nil
|
||||||
|
|
||||||
RegisterNetEvent('jim-consumables:Consume', function(itemName)
|
if requiredItem then
|
||||||
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Starting event, locking inventory and grabbing data^7..") end
|
if not hasItem(requiredItem, 1) then
|
||||||
LocalPlayer.state:set("inv_busy", true, true)
|
triggerNotify(nil, "You need a "..Items[requiredItem].label, "error")
|
||||||
|
return
|
||||||
|
else
|
||||||
|
-- if requiredItem == "lighter" then breakTool({ item = "lighter", damage = math.random(0, 1) }) end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
debugPrint("^5Debug^7: ^3Consume^7: ^2Starting event, locking inventory and grabbing data^7..")
|
||||||
|
tempLockInv(true)
|
||||||
local Player = PlayerPedId()
|
local Player = PlayerPedId()
|
||||||
local emote = Config.Emotes[Config.Consumables[itemName].emote]
|
local emote = Emotes[Consumables[itemName].emote] or Emotes["crisps"]
|
||||||
local animDict = tostring(emote[1])
|
if isAnimal then --- Animal ped adjustments
|
||||||
local anim = tostring(emote[2])
|
local presets = {
|
||||||
local model, bone, drugeffect, stress
|
["default"] = {
|
||||||
local P1, P2, P3, P4, P5, P6 = table.unpack({0.0, 0.0, 0.0, 0.0, 0.0, 0.0})
|
propPlacement = { 0.0, 0.25, -0.04, 0.0, 0.0, 0.0, },
|
||||||
|
propPlacement2 = { 0.0, 0.25, -0.02, 0.0, 0.0, 0.0, }
|
||||||
|
},
|
||||||
|
[`a_c_rabbit_01`] = {
|
||||||
|
propPlacement = { 0.0, 0.37, -0.15, 0.0, 0.0, 0.0, },
|
||||||
|
propPlacement2 = { 0.0, 0.37, -0.13, 0.0, 0.0, 0.0, }
|
||||||
|
},
|
||||||
|
[`a_c_rat`] = {
|
||||||
|
propPlacement = { 0.0, 0.25, -0.04, 0.0, 0.0, 0.0, },
|
||||||
|
propPlacement2 = { 0.0, 0.25, -0.02, 0.0, 0.0, 0.0, }
|
||||||
|
},
|
||||||
|
[`a_c_crow`] = {
|
||||||
|
propPlacement = { 0.0, 0.25, 0.02, 0.0, 0.0, 0.0, },
|
||||||
|
propPlacement2 = { 0.0, 0.25, 0.04, 0.0, 0.0, 0.0, }
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
local model = GetEntityModel(Player)
|
||||||
|
local isCat = (isCat() or model == `ft-raccoon`) and (model ~= `ft-sphynx`)
|
||||||
|
local isDog, bigDog = isDog()
|
||||||
|
if isDog and model == `a_c_coyote` then isDog = false end
|
||||||
|
local isCoyote = (model == `ft-sphynx` or model == `a_c_coyote`)
|
||||||
|
if model == `ft-capmonkey2` then isDog = true end
|
||||||
|
|
||||||
|
local propPlacement, propPlacement2 = { 0.0, 0.37, -0.19, 0.0, 0.0, 0.0, }, { 0.0, 0.37, -0.17, 0.0, 0.0, 0.0, }
|
||||||
|
if isDog then
|
||||||
|
if bigDog or isCoyote then
|
||||||
|
propPlacement = { 0.0, 0.53, -0.39, 0.0, 0.0, 0.0, } propPlacement2 = { 0.0, 0.53, -0.37, 0.0, 0.0, 0.0, }
|
||||||
|
else
|
||||||
|
propPlacement = { 0.0, 0.33, -0.28, 0.0, 0.0, 0.0, } propPlacement2 = { 0.0, 0.33, -0.26, 0.0, 0.0, 0.0, }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not isCat and not isDog then
|
||||||
|
propPlacement = presets[model] and presets[model].propPlacement or presets["default"].propPlacement
|
||||||
|
propPlacement2 = presets[model] and presets[model].propPlacement2 or presets["default"].propPlacement
|
||||||
|
end
|
||||||
|
|
||||||
|
emote = {
|
||||||
|
"creatures@pug@move", "nill", "",
|
||||||
|
AnimationOptions = {
|
||||||
|
EmoteLoop = true,
|
||||||
|
Prop = "v_res_tt_bowl",
|
||||||
|
PropBone = 64081,
|
||||||
|
PropPlacement = propPlacement,
|
||||||
|
SecondProp = Emotes[Consumables[itemName].emote].AnimationOptions.Prop or nil,
|
||||||
|
SecondPropBone = Emotes[Consumables[itemName].emote].AnimationOptions.Prop and 64081 or nil,
|
||||||
|
SecondPropPlacement = Emotes[Consumables[itemName].emote].AnimationOptions.Prop and propPlacement2 or nil,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
local returnItem = Consumables[itemName].returnItem or nil
|
||||||
|
local animDict, anim = tostring(emote[1]), 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
|
||||||
|
local RewardItem = Consumables[itemName].rewards or nil
|
||||||
|
local type = Consumables[itemName].type or ""
|
||||||
|
local pack = Consumables[itemName].pack or nil
|
||||||
|
local string = "Using "
|
||||||
|
local canRun = Consumables[itemName].canRun
|
||||||
|
local stats = Consumables[itemName].stats
|
||||||
|
|
||||||
|
local time, stress, heal, armor, needStats = GenerateRandomValues({
|
||||||
|
time = Consumables[itemName].time or { 5000, 6000 },
|
||||||
|
stress = Consumables[itemName].stress or 0,
|
||||||
|
heal = Consumables[itemName].heal or 0,
|
||||||
|
armor = Consumables[itemName].armor or 0,
|
||||||
|
hunger = Consumables[itemName].stats and Consumables[itemName].stats.hunger or 0,
|
||||||
|
thirst = Consumables[itemName].stats and Consumables[itemName].stats.thirst or 0,
|
||||||
|
})
|
||||||
if emote.AnimationOptions.Prop then
|
if emote.AnimationOptions.Prop then
|
||||||
model = emote.AnimationOptions.Prop
|
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)
|
P1, P2, P3, P4, P5, P6 = table.unpack(emote.AnimationOptions.PropPlacement)
|
||||||
|
if emote.AnimationOptions.SecondProp then
|
||||||
|
model2 = emote.AnimationOptions.SecondProp
|
||||||
|
bone2 = GetPedBoneIndex(Player, emote.AnimationOptions.SecondPropBone)
|
||||||
|
P7, P8, P9, P10, P11, P12 = table.unpack(emote.AnimationOptions.SecondPropPlacement)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
local time = Config.Consumables[itemName].time or math.random(5000, 6000)
|
|
||||||
local type = Config.Consumables[itemName].type or "food"
|
|
||||||
local stress = Config.Consumables[itemName].stress or 0
|
|
||||||
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 == "food" then string = "Eating " 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
|
debugPrint("^5Debug^7: ^3Consume^7: ^2Event already started^7, ^1Cancelling^7.")
|
||||||
LocalPlayer.state:set("inv_busy", false, true)
|
tempLockInv(false)
|
||||||
TriggerEvent("QBCore:Notify", "Stopped "..string, "error")
|
if Config.UseProgbar then
|
||||||
|
stopPropgressBar()
|
||||||
|
else
|
||||||
|
triggerNotify(nil, "Stopped "..string, "error")
|
||||||
|
end
|
||||||
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
|
debugPrint("^5Debug^7: ^3Consume^7: ^2Grabbing Emote Animation Options^7...")
|
||||||
if emote.AnimationOptions then
|
local InVehicle = IsPedInAnyVehicle(Player, true)
|
||||||
if emote.AnimationOptions.EmoteLoop then MovementType = 1
|
debugPrint("^5Debug^7: ^3Consume^7: ^2Checking if player is in a vehicle^7 - ^6"..tostring(InVehicle).."^7")
|
||||||
if emote.AnimationOptions.EmoteMoving then MovementType = 51
|
|
||||||
end
|
MovementType = 0 -- Default movement type
|
||||||
elseif emote.AnimationOptions.EmoteMoving then MovementType = 51
|
|
||||||
elseif emote.AnimationOptions.EmoteMoving == false then MovementType = 0
|
if InVehicle == 1 then
|
||||||
elseif emote.AnimationOptions.EmoteStuck then MovementType = 50
|
MovementType = 51
|
||||||
|
elseif emote.AnimationOptions then
|
||||||
|
if emote.AnimationOptions.EmoteMoving then
|
||||||
|
MovementType = 51
|
||||||
|
elseif emote.AnimationOptions.EmoteLoop then
|
||||||
|
MovementType = 1
|
||||||
|
elseif emote.AnimationOptions.EmoteStuck then
|
||||||
|
MovementType = emote.AnimationOptions.EmoteMoving and 50 or 2
|
||||||
|
elseif emote.AnimationOptions.EmoteMoving == false then
|
||||||
|
MovementType = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
else MovementType = 0 end
|
end
|
||||||
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
|
|
||||||
|
|
||||||
--Load and Start animation
|
--Load and Start animation
|
||||||
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Playing Animation^7...") end
|
debugPrint("^5Debug^7: ^3Consume^7: ^2Playing Animation^7...")
|
||||||
loadAnimDict(animDict)
|
if not (GetPedType(Player) == 28)then
|
||||||
TaskPlayAnim(PlayerPedId(), animDict, anim, 1.0, 1.0, -1, MovementType, 0, 0, 0, 0)
|
playAnim(animDict, anim, -1, MovementType)
|
||||||
|
end
|
||||||
|
debugPrint("^5Debug^7: ^3Consume^7: ^2Player Movement Flag^7 - ^6"..json.encode(MovementType).." ^7")
|
||||||
|
if Config.Main.UseProgbar then
|
||||||
|
CreateThread(function()
|
||||||
|
if progressBar({ time = time, label = string..Items[itemName].label.."..", dead = false, cancel = false}) then
|
||||||
|
consuming = false
|
||||||
|
else
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
else
|
||||||
|
triggerNotify(nil, string..Items[itemName].label.."..", "success")
|
||||||
|
end
|
||||||
|
|
||||||
TriggerEvent("QBCore:Notify", string..QBCore.Shared.Items[itemName].label.."..", "success", (time + 1000))
|
|
||||||
consuming = true
|
consuming = true
|
||||||
|
|
||||||
CreateThread(function()
|
CreateThread(function()
|
||||||
--Prop Spawning
|
--Prop Spawning
|
||||||
if model then
|
if model then
|
||||||
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Spawning consumable prop^7.") end
|
if IsModelValid(model) == 1 then
|
||||||
loadModel(model)
|
debugPrint("^5Debug^7: ^3PropSpawn^7: ^2Spawning consumable prop^7...")
|
||||||
local attachProp = CreateObject(model, 1.0, 1.0, 1.0, 1, 1, 0)
|
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)
|
||||||
while consuming do Wait(100) end
|
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, 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
|
||||||
|
if DoesEntityExist(attachProp) then
|
||||||
destroyProp(attachProp)
|
destroyProp(attachProp)
|
||||||
|
attachProp = nil
|
||||||
|
end
|
||||||
|
if DoesEntityExist(attachProp2) then
|
||||||
|
destroyProp(attachProp2)
|
||||||
|
attachProp2 = nil
|
||||||
|
end
|
||||||
|
else
|
||||||
|
print("^5Debug^7: ^3PropSpawn^7: ^2Prop model isn't valid/found^7.")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
while consuming do
|
while consuming do
|
||||||
if time <= 0 then consuming = false end
|
if debugMode then
|
||||||
if IsControlJustPressed(0, 21) then
|
drawText(nil, {
|
||||||
|
"Time: "..tostring(time),
|
||||||
|
"Type: "..(type or ""),
|
||||||
|
"Hunger: "..(needStats.hunger or 0).."%",
|
||||||
|
"Thirst: "..(needStats.thirst or 0).."%",
|
||||||
|
"Stress: "..(stress or 0).."%",
|
||||||
|
"Heal: "..(heal or 0).."%",
|
||||||
|
"Armour: "..(armor or 0).."%",
|
||||||
|
}, nil, nil)
|
||||||
|
end
|
||||||
|
makeInstructionalButtons({
|
||||||
|
{ keys = { 194 }, text = "Stop Consuming" },
|
||||||
|
})
|
||||||
|
if time <= 0 then
|
||||||
|
consuming = false
|
||||||
|
end
|
||||||
|
if (IsControlJustPressed(0, 21) and not canRun) or IsPedRagdoll(Player) or IsControlJustPressed(0, 177) then
|
||||||
consuming = false
|
consuming = false
|
||||||
cancelled = true
|
cancelled = true
|
||||||
LocalPlayer.state:set("inv_busy", false, true)
|
tempLockInv(false)
|
||||||
|
hideText()
|
||||||
|
if Config.Main.UseProgbar then
|
||||||
|
stopPropgressBar()
|
||||||
|
else
|
||||||
|
triggerNotify(nil, "Cancelled "..string, "error")
|
||||||
end
|
end
|
||||||
Wait(10)
|
|
||||||
time = time - 10
|
|
||||||
end
|
end
|
||||||
|
Wait(0)
|
||||||
StopEntityAnim(PlayerPedId(), anim, animDict, 1.0)
|
time -= 12
|
||||||
|
end
|
||||||
|
StopEntityAnim(Player, anim, animDict, 1.0)
|
||||||
unloadAnimDict(animDict)
|
unloadAnimDict(animDict)
|
||||||
|
|
||||||
if not cancelled then
|
if not cancelled then
|
||||||
TriggerServerEvent("QBCore:Server:RemoveItem", itemName, 1)
|
hideText()
|
||||||
TriggerEvent("inventory:client:ItemBox", QBCore.Shared.Items[itemName], "remove", 1)
|
removeItem(itemName, 1)
|
||||||
|
if returnItem ~= nil then
|
||||||
if QBCore.Shared.Items[itemName].thirst then
|
debugPrint("returnItem detected")
|
||||||
TriggerServerEvent("QBCore:Server:SetMetaData", "thirst", QBCore.Functions.GetPlayerData().metadata["thirst"] + QBCore.Shared.Items[itemName].thirst) end
|
currentToken = triggerCallback(AuthEvent)
|
||||||
if QBCore.Shared.Items[itemName].hunger then
|
addItem(returnItem.item, returnItem.amount)
|
||||||
TriggerServerEvent("QBCore:Server:SetMetaData", "hunger", 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
|
|
||||||
local hunger = 0
|
|
||||||
local thirst = 0
|
|
||||||
if Config.Consumables[itemName].stats then
|
|
||||||
if Config.Consumables[itemName].stats.hunger then hunger = Config.Consumables[itemName].stats.hunger end
|
|
||||||
TriggerServerEvent("QBCore:Server:SetMetaData", "hunger", QBCore.Functions.GetPlayerData().metadata["hunger"] + hunger)
|
|
||||||
if Config.Consumables[itemName].stats.thirst then thirst = Config.Consumables[itemName].stats.thirst end
|
|
||||||
TriggerServerEvent("QBCore:Server:SetMetaData", "thirst", QBCore.Functions.GetPlayerData().metadata["thirst"] + thirst)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Reward Item calculations
|
||||||
|
CreateThread(function()
|
||||||
|
if RewardItem then
|
||||||
|
debugPrint("Reward Item detected")
|
||||||
|
for i = 1, Consumables[itemName].amounttogive do
|
||||||
|
local rarity = math.random(1, 4) -- rarity calculation
|
||||||
|
while true do
|
||||||
|
local item = math.random(1, countTable(RewardItem)) -- random item in the list to pick
|
||||||
|
if RewardItem[item].rarity >= rarity then
|
||||||
|
currentToken = triggerCallback(AuthEvent)
|
||||||
|
addItem(RewardItem[item].item, math.random(1, RewardItem[item].max or 1))
|
||||||
|
debugPrint("^5Debug^7: ^2Given reward prize^7: '^6"..RewardItem[item].item.."^7'")
|
||||||
|
break
|
||||||
|
end
|
||||||
|
Wait(100)
|
||||||
|
end
|
||||||
|
Wait(1500)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
if needStats then
|
||||||
|
if needStats.hunger then
|
||||||
|
TriggerServerEvent(getScript()..":server:addNeed", Core.Functions.GetPlayerData().metadata["hunger"] + needStats.hunger, "hunger")
|
||||||
|
end
|
||||||
|
if needStats.thirst then
|
||||||
|
TriggerServerEvent(getScript()..":server:addNeed", Core.Functions.GetPlayerData().metadata["thirst"] + needStats.thirst, "thirst")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
debugPrint("^5Debug^7: ^2Hunger^7: [^6"..(needStats.hunger or 0).."^7] ^2Thrist^7: [^6"..(needStats.thirst or 0).."^7]" )
|
||||||
if stress and stress ~= 0 then
|
if stress and stress ~= 0 then
|
||||||
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Reliving ^6"..stress.." ^2stress^7.") end
|
debugPrint("^5Debug^7: ^3Consume^7: ^2Relieving ^6"..stress.." ^2stress^7.")
|
||||||
TriggerServerEvent('hud:server:RelieveStress', stress)
|
TriggerServerEvent('hud:server:RelieveStress', stress)
|
||||||
end
|
end
|
||||||
|
|
||||||
if heal and heal ~= 0 then
|
if heal and heal ~= 0 then
|
||||||
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Healing player by^7: ^6"..heal) end
|
debugPrint("^5Debug^7: ^3Consume^7: ^2Healing player by^7: ^6"..heal)
|
||||||
SetEntityHealth(PlayerPedId(), GetEntityHealth(PlayerPedId()) + heal)
|
SetEntityHealth(Player, GetEntityHealth(Player) + heal)
|
||||||
end
|
end
|
||||||
|
|
||||||
if armor and armor ~= 0 then
|
if armor and armor ~= 0 then
|
||||||
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Adding ^6"..armor.." ^2armour^7.") end
|
debugPrint("^5Debug^7: ^3Consume^7: ^2Adding ^6"..armor.." ^2armour^7.")
|
||||||
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
|
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 += 1
|
||||||
alcoholCount = alcoholCount + 1
|
debugPrint("^5Debug^7: ^3Consume^7: ^2Current ^4alcoholCount^7: ^6"..alcoholCount)
|
||||||
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)
|
||||||
CreateThread(function() AlienEffect() end) -- Used as overdosing/too drunk effect
|
CreateThread(function()
|
||||||
|
AlienEffect()
|
||||||
|
end) -- Used as overdosing/too drunk effect
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if pack then
|
||||||
stats = Config.Consumables[itemName].stats or nil
|
currentToken = triggerCallback(AuthEvent)
|
||||||
|
addItem(pack.item, pack.amount)
|
||||||
if Config.Consumables[itemName].stats then
|
end
|
||||||
|
if stats then
|
||||||
if stats.screen then -- Screen effect activation
|
if stats.screen then -- Screen effect activation
|
||||||
if stats.screen == "turbo" then CreateThread(function() TurboEffect() end) end
|
debugPrint(stats.screen)
|
||||||
if stats.screen == "focus" then CreateThread(function() FocusEffect() end) end
|
local statFunctions = {
|
||||||
if stats.screen == "rampage" then CreateThread(function() RampageEffect() end) end
|
["turbo"] = TurboEffect,
|
||||||
if stats.screen == "weed" then CreateThread(function() WeedEffect() end) end
|
["focus"] = FocusEffect,
|
||||||
if stats.screen == "trevor" then CreateThread(function() TrevorEffect() end) end
|
["rampage"] = RampageEffect,
|
||||||
|
["weed"] = WeedEffect,
|
||||||
|
["trevor"] = TrevorEffect,
|
||||||
|
["nightvision"] = NightVisionEffect,
|
||||||
|
["thermal"] = ThermalEffect,
|
||||||
|
}
|
||||||
|
if statFunctions[stats.screen] then
|
||||||
|
CreateThread(function()
|
||||||
|
statFunctions[stats.screen]()
|
||||||
|
end)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if stats.canOD then
|
if stats.canOD then
|
||||||
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Current ^4drugCount^7: ^6"..(drugCount + 1)) end
|
drugCount += 1
|
||||||
drugCount = drugCount + 1
|
debugPrint("^5Debug^7: ^3Consume^7: ^2Current ^4drugCount^7: ^6"..drugCount)
|
||||||
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
|
debugPrint("^5Debug^7: ^3Consume^7: ^2Current ^4drugCount^7: ^6"..drugCount.."^7 - ^2 removing health")
|
||||||
SetEntityHealth(PlayerPedId(), GetEntityHealth(PlayerPedId()) - math.random(10,15))
|
SetEntityHealth(PlayerPedId(), GetEntityHealth(Player) - math.random(10, 15))
|
||||||
if drugCount >= 7 then
|
if drugCount >= 7 then
|
||||||
CreateThread(function() AlienEffect() end) -- If too many drugs, if not dead will make you stumble
|
CreateThread(function() AlienEffect() end) -- If too many drugs, if not dead will make you stumble
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if stats.effect == "heal" then
|
if stats.effect then
|
||||||
if GetResourceState("ps-buffs") == "started" then exports["ps-buffs"]:AddHealthBuff((stats.effect.time or 10000), (stats.amount or 6))
|
local effectTable = {
|
||||||
else CreateThread(function() HealEffect({(stats.effect.time or 10000), (stats.amount or 6)}) end) end
|
["heal"] = function(stats)
|
||||||
|
if isStarted("ps-buffs") then
|
||||||
|
debugPrint("^5Debug^7: ^3Consume^7: ^4PS^7-^4Buffs ^2found^7, ^2hooking in to get buffs and applying ^6Health Buff ^2for ^6"..stats.time.."^7ms")
|
||||||
|
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
|
end,
|
||||||
if GetResourceState("ps-buffs") == "started" then exports["ps-buffs"]:StaminaBuffEffect((stats.effect.time or 10000), (stats.amount or 6))
|
["stamina"] = function(stats)
|
||||||
else CreateThread(function() StaminaEffect({(stats.effect.time or 10000), (stats.amount or 6)}) end) end
|
if isStarted("ps-buffs") then
|
||||||
|
debugPrint("^5Debug^7: ^3Consume^7: ^4PS^7-^4Buffs ^2found^7, ^2hooking in to get buffs and applying ^6Stamina Buff ^2for ^6"..stats.time.."^7ms")
|
||||||
|
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
|
end,
|
||||||
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^4PS^7-^4Buffs ^2found^7, ^2hooking in to get buffs") end
|
["armor"] = function(stats)
|
||||||
if stats.effect == "armor" then exports["ps-buffs"]:AddArmorBuff((stats.effect.time or 10000), (stats.amount or 6)) end
|
if isStarted("ps-buffs") then --PS-BUFFS ONLY
|
||||||
if stats.effect == "stress" then exports["ps-buffs"]:AddStressBuff((stats.time or 10000), (stats.amount or 6)) end
|
exports["ps-buffs"]:AddArmorBuff((tonumber(stats.time) or 10000), (stats.amount or 6))
|
||||||
if stats.effect == "swimming" then exports["ps-buffs"]:SwimmingBuffEffect((stats.effect.time or 10000), (stats.amount or 6)) end
|
end
|
||||||
if stats.effect == "hacking" then exports["ps-buffs"]:AddBuff("hacking", (stats.effect.time or 10000)) end
|
end,
|
||||||
if stats.effect == "intelligence" then exports["ps-buffs"]:AddBuff("intelligence", (stats.effect.time or 10000)) end
|
["stress"] = function(stats)
|
||||||
if stats.effect == "luck" then exports["ps-buffs"]:AddBuff("luck", (stats.time or 10000)) end
|
if isStarted("ps-buffs") then --PS-BUFFS ONLY
|
||||||
if stats.effect == "strength" then exports["ps-buffs"]:AddBuff("strength", (stats.time or 10000)) end
|
exports["ps-buffs"]:AddStressBuff((tonumber(stats.time) or 10000), (stats.amount or 6))
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
["swimming"] = function(stats)
|
||||||
|
if isStarted("ps-buffs") then --PS-BUFFS ONLY
|
||||||
|
exports["ps-buffs"]:SwimmingBuffEffect((tonumber(stats.time) or 10000), (stats.amount or 6))
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
["hacking"] = function(stats)
|
||||||
|
if isStarted("ps-buffs") then --PS-BUFFS ONLY
|
||||||
|
exports["ps-buffs"]:AddBuff("hacking", (tonumber(stats.time) or 10000))
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
["intelligence"] = function(stats)
|
||||||
|
if isStarted("ps-buffs") then --PS-BUFFS ONLY
|
||||||
|
exports["ps-buffs"]:AddBuff("intelligence", (tonumber(stats.time) or 10000))
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
["luck"] = function(stats)
|
||||||
|
if isStarted("ps-buffs") then --PS-BUFFS ONLY
|
||||||
|
exports["ps-buffs"]:AddBuff("luck", (tonumber(stats.time) or 10000))
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
["strength"] = function(stats)
|
||||||
|
if isStarted("ps-buffs") then --PS-BUFFS ONLY
|
||||||
|
exports["ps-buffs"]:AddBuff("strength", (tonumber(stats.time) or 10000))
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
if effectTable[stats.effect] then
|
||||||
|
effectTable[stats.effect](stats)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if stats.widepupils then
|
||||||
|
TriggerEvent("evidence:client:SetStatus", "widepupils", 200)
|
||||||
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
|
||||||
|
debugPrint("^5Debug^7: ^3Consume^7: ^2Finished, unlocking inventory^7...")
|
||||||
if Config.Debug then print("^5Debug^7: ^3Consume^7: ^2Finished, unlocking inventory^7..") end
|
tempLockInv(false)
|
||||||
LocalPlayer.state:set("inv_busy", false, true)
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
CreateThread(function()
|
CreateThread(function()
|
||||||
@@ -376,24 +425,23 @@ CreateThread(function()
|
|||||||
Wait(10)
|
Wait(10)
|
||||||
if alcoholCount > 0 then
|
if alcoholCount > 0 then
|
||||||
Wait(1000 * 60 * 15)
|
Wait(1000 * 60 * 15)
|
||||||
alcoholCount = alcoholCount - 1
|
alcoholCount -= 1
|
||||||
else
|
else
|
||||||
Wait(2000)
|
Wait(1000)
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end)
|
|
||||||
CreateThread(function()
|
|
||||||
while true do
|
|
||||||
Wait(10)
|
|
||||||
if drugCount > 0 then
|
if drugCount > 0 then
|
||||||
Wait(1000 * 60 * 15)
|
Wait(1000 * 60 * 15)
|
||||||
drugCount = drugCount - 1
|
drugCount -= 1
|
||||||
else
|
else
|
||||||
Wait(2000)
|
Wait(1000)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
AddEventHandler('onResourceStop', function(r) if r ~= GetCurrentResourceName() then return end
|
onResourceStop(function()
|
||||||
|
|
||||||
|
lockInv(false)
|
||||||
|
|
||||||
StopEffects()
|
StopEffects()
|
||||||
end)
|
|
||||||
|
end, true)
|
||||||
249
client/consumableCreator.lua
Normal file
249
client/consumableCreator.lua
Normal file
@@ -0,0 +1,249 @@
|
|||||||
|
RegisterNetEvent("jim-consumables:client:consumableCreator", function()
|
||||||
|
local itemTable, emoteTable = {}, {}
|
||||||
|
for k, v in pairsByKeys(Items) do itemTable[#itemTable+1] = { value = tostring(k), label = tostring((v.label or k)) } end
|
||||||
|
table.sort(itemTable, function(a, b) return a.label < b.label end)
|
||||||
|
for k in pairsByKeys(Emotes) do emoteTable[#emoteTable+1] = { value = k, label = k } end
|
||||||
|
local input = lib.inputDialog("Consumable Creator", {
|
||||||
|
{ type = "select",
|
||||||
|
label = "Item List",
|
||||||
|
options = itemTable,
|
||||||
|
required = true,
|
||||||
|
icon = "fas fa-burger",
|
||||||
|
clearable = true,
|
||||||
|
searchable = true -- Doesnt work as i think only ox_lib lua was updated, the web stuff doesn't support this
|
||||||
|
},
|
||||||
|
{ type = "select",
|
||||||
|
label = "Emote",
|
||||||
|
options = emoteTable,
|
||||||
|
required = true,
|
||||||
|
icon = "fas fa-user",
|
||||||
|
clearable = true,
|
||||||
|
searchable = true, -- Doesnt work as i think only ox_lib lua was updated, the web stuff doesn't support this
|
||||||
|
default = "burger",
|
||||||
|
},
|
||||||
|
{ type = "select",
|
||||||
|
label = "Item Required for consuming",
|
||||||
|
options = itemTable,
|
||||||
|
required = false,
|
||||||
|
icon = "fas fa-utensils",
|
||||||
|
clearable = true,
|
||||||
|
searchable = true -- Doesnt work as i think only ox_lib lua was updated, the web stuff doesn't support this
|
||||||
|
},
|
||||||
|
{ type = 'number', label = 'Time', description = "How long it takes in ms to consume item", default = 5000, icon = "fas fa-clock", },
|
||||||
|
{ type = 'number', label = 'Stress Relief', description = "How much stress to relieve", default = 0, icon = "fas fa-mug-hot", },
|
||||||
|
{ type = 'number', label = 'Healing Amount', description = "How much to heal after consuming", default = 0, icon = "fas fa-notes-medical", },
|
||||||
|
{ type = 'number', label = 'Armour', description = "How much armour to give after consuming", default = 0, icon = "fas fa-shield-halved", },
|
||||||
|
{ type = "select", label = "Type", default = "food", icon = "fas fa-box", options = {
|
||||||
|
{ value = "food", label = "Food" },
|
||||||
|
{ value = "drink", label = "Drink" },
|
||||||
|
{ value = "alcohol", label = "Alcohol" },
|
||||||
|
{ value = "drug", label = "Drugs" },
|
||||||
|
{ value = "smoke", label = "Cigar/Cigarette" },
|
||||||
|
{ value = "pack", label = "Pack (Container Item)" },
|
||||||
|
}},
|
||||||
|
})
|
||||||
|
if not input or not input[1] then return end
|
||||||
|
local resultTable = {
|
||||||
|
item = input[1],
|
||||||
|
emote = input[2],
|
||||||
|
requireItem = input[3] or nil,
|
||||||
|
time = { input[4], input[4] + 1000 },
|
||||||
|
stress = input[5],
|
||||||
|
heal = input[6],
|
||||||
|
armor = input[7],
|
||||||
|
type = input[8],
|
||||||
|
}
|
||||||
|
if resultTable.type == "food" or resultTable.type == "drink" then foodInput(resultTable)
|
||||||
|
elseif resultTable.type == "pack" then packInput(resultTable, itemTable)
|
||||||
|
else
|
||||||
|
ExtraStatsInput(resultTable)
|
||||||
|
end
|
||||||
|
end, false)
|
||||||
|
|
||||||
|
function foodInput(prevInput)
|
||||||
|
local resultTable = prevInput
|
||||||
|
local input = lib.inputDialog((Items[prevInput.item].label or prevInput.item).." - Food or Drink",{
|
||||||
|
{ type = 'number', label = 'Hunger %', default = 0, icon = "fas fa-burger", },
|
||||||
|
{ type = 'number', label = 'Thirst %', default = 0, icon = "fas fa-mug-hot", },
|
||||||
|
})
|
||||||
|
if not input or not input[1] then return end
|
||||||
|
resultTable["stats"] = {
|
||||||
|
hunger = input[1] ~= 0 and { input[1], input[1] + 10 } or 0,
|
||||||
|
thirst = input[2] ~= 0 and { input[2], input[2] + 10 } or 0,
|
||||||
|
}
|
||||||
|
ExtraStatsInput(resultTable)
|
||||||
|
end
|
||||||
|
|
||||||
|
function packInput(prevInput, itemTable)
|
||||||
|
local resultTable = prevInput
|
||||||
|
local input = lib.inputDialog((Items[prevInput.item].label or prevInput.item).." - Pack", {
|
||||||
|
{ type = "select",
|
||||||
|
label = "Item List",
|
||||||
|
options = itemTable,
|
||||||
|
required = true,
|
||||||
|
icon = "fas fa-burger",
|
||||||
|
},
|
||||||
|
{ type = 'number', label = 'Amount to give of item', default = 1, icon = "fas fa-box", },
|
||||||
|
})
|
||||||
|
resultTable["pack"] = { item = input[1], amount = input[2], }
|
||||||
|
getConsumableResult(resultTable)
|
||||||
|
end
|
||||||
|
|
||||||
|
function ExtraStatsInput(prevInput)
|
||||||
|
local resultTable = prevInput
|
||||||
|
local input = lib.inputDialog((Items[prevInput.item].label or prevInput.item).." - Extra Stats", {
|
||||||
|
{ type = "select", label = "Buff Type", description = "These are 'gradual' buff effects", default = "none", options = {
|
||||||
|
{ value = "none", label = "None" },
|
||||||
|
{ value = "heal", label = "Healing" },
|
||||||
|
{ value = "stamina", label = "Stamina" },
|
||||||
|
{ value = "armor", label = "Armour" },
|
||||||
|
{ value = "stress", label = "Stress" },
|
||||||
|
{ value = "swimming", label = "Swimming" },
|
||||||
|
{ value = "hacking", label = "Hacking" },
|
||||||
|
{ value = "intelligence", label = "Intelligence" },
|
||||||
|
{ value = "luck", label = "Luck" },
|
||||||
|
{ value = "strength", label = "Strength" },
|
||||||
|
}},
|
||||||
|
{ type = "select", label = "Screen Effect", default = "none", options = {
|
||||||
|
{ value = "none", label = "None" },
|
||||||
|
{ value = "rampage", label = "Rampage" },
|
||||||
|
{ value = "turbo", label = "Turbo" },
|
||||||
|
{ value = "focus", label = "Focus" },
|
||||||
|
{ value = "weed", label = "Weed" },
|
||||||
|
{ value = "trevor", label = "Trevor" },
|
||||||
|
{ value = "nightvision", label = "Night Vision" },
|
||||||
|
{ value = "thermal", label = "Thermal Vision" },
|
||||||
|
}},
|
||||||
|
{ type = "number", label = "Total Time of 'Buff'", default = 10000, },
|
||||||
|
{ type = "number", label = "Amount to give per second", default = 6, },
|
||||||
|
((prevInput.type ~= "food" and prevInput.type ~= "drink") and { type = "select", label = "Wide Pupils", default = "false", options = {
|
||||||
|
{ value = "true", label = "True" },
|
||||||
|
{ value = "false", label = "False" },
|
||||||
|
}} or nil),
|
||||||
|
((prevInput.type ~= "food" and prevInput.type ~= "drink") and { type = "select", label = "Can Over Dose", default = "false", options = {
|
||||||
|
{ value = "true", label = "True" },
|
||||||
|
{ value = "false", label = "False" },
|
||||||
|
}} or nil),
|
||||||
|
})
|
||||||
|
if not input or not input[1] then return end
|
||||||
|
resultTable["stats"] = {
|
||||||
|
hunger = resultTable["stats"] and resultTable["stats"].hunger or 0,
|
||||||
|
thirst = resultTable["stats"] and resultTable["stats"].thirst or 0,
|
||||||
|
screen = input[2] or nil,
|
||||||
|
effect = input[1] or nil,
|
||||||
|
time = input[1] ~= "none" and input[3] or nil,
|
||||||
|
amount = input[1] ~= "none" and input[4] or nil,
|
||||||
|
widepupils = input[5],
|
||||||
|
canOD = input[6],
|
||||||
|
}
|
||||||
|
getConsumableResult(resultTable)
|
||||||
|
end
|
||||||
|
|
||||||
|
function getConsumableResult(data)
|
||||||
|
local resultString = '["'..data.item..'"] = { '
|
||||||
|
resultString = resultString..'emote = "'..data.emote..'", '
|
||||||
|
resultString = resultString.."canRun = true, "
|
||||||
|
resultString = resultString.."time = {"..data.time[1]..", "..data.time[2].."}, "
|
||||||
|
resultString = (data.stress > 0 and resultString.."stress = "..data.stress..", ") or resultString..""
|
||||||
|
resultString = (data.heal > 0 and resultString.."heal = "..data.heal..", ") or resultString..""
|
||||||
|
resultString = (data.armor > 0 and resultString.."armor = "..data.armor..", ") or resultString..""
|
||||||
|
resultString = resultString..'type = "'..data.type..'", '
|
||||||
|
if data.type == "pack" then
|
||||||
|
resultString = resultString..'pack = { item = "'..data.pack.item..'", amount = "'..data.pack.amount..'", }, '
|
||||||
|
end
|
||||||
|
if data.stats then
|
||||||
|
resultString = resultString.."stats = { "
|
||||||
|
if data.stats.hunger and type(data.stats.hunger) == "table" then
|
||||||
|
resultString = resultString..'hunger = { '..data.stats.hunger[1]..', '..data.stats.hunger[2]..' }, '
|
||||||
|
end
|
||||||
|
if data.stats.thirst and type(data.stats.thirst) == "table" then
|
||||||
|
resultString = resultString..'thirst = { '..data.stats.thirst[1]..', '..data.stats.thirst[2]..' }, '
|
||||||
|
end
|
||||||
|
if data.stats.screen and data.stats.screen ~= "none" then
|
||||||
|
resultString = resultString..'screen = "'..data.stats.screen..'", '
|
||||||
|
end
|
||||||
|
if data.stats.effect and data.stats.effect ~= "none" then
|
||||||
|
resultString = resultString..'effect = "'..data.stats.effect..'", '
|
||||||
|
resultString = resultString..'time = "'..data.stats.time..'", '
|
||||||
|
resultString = resultString..'amount = "'..data.stats.amount..'", '
|
||||||
|
end
|
||||||
|
if data.stats.widepupils == "true" then
|
||||||
|
resultString = resultString..'widepupils = "'..data.stats.widepupils..'", '
|
||||||
|
end
|
||||||
|
if data.stats.canOD == "true" then
|
||||||
|
resultString = resultString..'canOD = "'..data.stats.canOD..'", '
|
||||||
|
end
|
||||||
|
end
|
||||||
|
triggerNotify(nil, "Copied new consumable info to clipboard", "success")
|
||||||
|
lib.setClipboard(resultString .. " },")
|
||||||
|
end
|
||||||
|
|
||||||
|
RegisterNetEvent("jim-consumables:client:testEmotes", function()
|
||||||
|
local Menu = {}
|
||||||
|
for k, v in pairsByKeys(Emotes) do
|
||||||
|
Menu[#Menu+1] = {
|
||||||
|
header = k,
|
||||||
|
onSelect = function()
|
||||||
|
testEmote(v, k)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
end
|
||||||
|
openMenu(Menu, { header = "Test Consumable Emotes" })
|
||||||
|
end)
|
||||||
|
|
||||||
|
function testEmote(emote, name)
|
||||||
|
triggerNotify(nil, "Testing "..name, "warning")
|
||||||
|
triggerNotify(nil, "Anim will loop twice then return to menu", "warning")
|
||||||
|
local MovementType = nil
|
||||||
|
local Player = PlayerPedId()
|
||||||
|
local InVehicle = IsPedInAnyVehicle(Player, true)
|
||||||
|
|
||||||
|
local animDict, anim = tostring(emote[1]), tostring(emote[2])
|
||||||
|
local model, model2, bone, bone2
|
||||||
|
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(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(Player, emote.AnimationOptions.SecondPropBone)
|
||||||
|
P7, P8, P9, P10, P11, P12 = table.unpack(emote.AnimationOptions.SecondPropPlacement)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if InVehicle == 1 then
|
||||||
|
MovementType = 51
|
||||||
|
elseif emote.AnimationOptions then
|
||||||
|
if emote.AnimationOptions.EmoteMoving then MovementType = 51
|
||||||
|
elseif emote.AnimationOptions.EmoteLoop then MovementType = 1
|
||||||
|
elseif emote.AnimationOptions.EmoteStuck then MovementType = emote.AnimationOptions.EmoteMoving and 50 or 2
|
||||||
|
elseif emote.AnimationOptions.EmoteMoving == false then MovementType = 0 end
|
||||||
|
end
|
||||||
|
|
||||||
|
playAnim(animDict, anim, (GetAnimDuration(animDict, anim) * 1000 )*2, MovementType)
|
||||||
|
local consuming = true
|
||||||
|
--Prop Spawning
|
||||||
|
CreateThread(function()
|
||||||
|
if model then
|
||||||
|
if IsModelValid(model) == 1 then
|
||||||
|
triggerNotify(nil, "Debug: Spawning consumable prop")
|
||||||
|
attachProp = makeProp({ prop = model, coords = vector4(0.0,0.0,0.0,0.0)}, 1, 1)
|
||||||
|
AttachEntityToEntity(attachProp, Player, bone, P1, P2, P3, P4, P5, P6, true, true, false, true, 1, true)
|
||||||
|
if model2 then
|
||||||
|
triggerNotify(nil, "Debug: Spawning consumable prop 2")
|
||||||
|
if IsModelValid(model2) == 1 then
|
||||||
|
attachProp2 = makeProp({ prop = model2, coords = vector4(0.0,0.0,0.0,0.0)}, 1, 1)
|
||||||
|
AttachEntityToEntity(attachProp2, Player, bone2, P7, P8, P9, P10, P11, P12, true, true, false, true, 1, true)
|
||||||
|
else triggerNotify(nil, "Debug: Second prop model isn't valid", "error") end
|
||||||
|
end
|
||||||
|
while consuming do Wait(50) end
|
||||||
|
if DoesEntityExist(attachProp) then destroyProp(attachProp) attachProp = nil end
|
||||||
|
if DoesEntityExist(attachProp2) then destroyProp(attachProp2) attachProp2 = nil end
|
||||||
|
else triggerNotify(nil, "Debug: Prop model isn't valid", "error") end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
Wait((GetAnimDuration(animDict, anim) * 1000)*2)
|
||||||
|
consuming = false
|
||||||
|
stopAnim(animDict, anim)
|
||||||
|
TriggerEvent("jim-consumables:client:testEmotes")
|
||||||
|
end
|
||||||
277
config.lua
277
config.lua
@@ -1,272 +1,19 @@
|
|||||||
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.
|
|
||||||
|
|
||||||
-- https://discord.gg/xKgQZ6wZvS
|
|
||||||
|
|
||||||
Config = {
|
Config = {
|
||||||
|
System = {
|
||||||
Debug = false,
|
Debug = false,
|
||||||
Consumables = {
|
EventDebug = false,
|
||||||
-- Default QB food and drink item override
|
|
||||||
|
|
||||||
--Effects can be applied here, like stamina on coffee for example
|
Menu = "qb", -- "qb", "ox"
|
||||||
["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 }},
|
Notify = "gta", -- "qb", "ox", "gta"
|
||||||
["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 }},
|
ProgressBar = "gta", -- "qb", "ox", "gta"
|
||||||
["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 }},
|
drawText = "gta", -- "qb", "ox", "gta"
|
||||||
|
|
||||||
["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), }},
|
|
||||||
["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), }},
|
|
||||||
["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
|
|
||||||
-- Testing these but they may be best left handled by default scripts
|
|
||||||
["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", 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
|
|
||||||
["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", 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", 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", 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", 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", 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
|
|
||||||
["heartstopper"] = {
|
|
||||||
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
|
|
||||||
heal = 0, -- Set amount to heal by after consuming
|
|
||||||
armor = 5, -- Amount of armor to add
|
|
||||||
type = "food", -- Type: "alcohol" / "drink" / "food"
|
|
||||||
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 = 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
|
|
||||||
},
|
},
|
||||||
|
Main = {
|
||||||
|
UseProgbar = false, -- Disabled this, progress bars stop all anims when complete.
|
||||||
|
-- This is intended to create a progressbar to show consuming but it was usually forces animations to end weirdly
|
||||||
},
|
},
|
||||||
]]
|
Crafting = {
|
||||||
},
|
showItemBox = true -- Display "use" item boxes on some inventories that need to be told to
|
||||||
Emotes = {
|
}
|
||||||
["drink"] = {"mp_player_intdrink", "loop_bottle", "Drink", AnimationOptions =
|
|
||||||
{ Prop = "prop_ld_flow_bottle", PropBone = 18905, PropPlacement = {0.12, 0.008, 0.03, 240.0, -60.0},
|
|
||||||
EmoteMoving = true, EmoteLoop = true, }},
|
|
||||||
["whiskeyb"] = {"mp_player_intdrink", "loop_bottle", "(Don't Use) Whiskey Bottle", AnimationOptions =
|
|
||||||
{ Prop = "prop_cs_whiskey_bottle", PropBone = 60309, PropPlacement = {0.0, 0.0, 0.0, 0.0, 0.0},
|
|
||||||
EmoteMoving = true, EmoteLoop = true }},
|
|
||||||
["rumb"] = {"mp_player_intdrink", "loop_bottle", "(Don't Use) Rum Bottle", AnimationOptions =
|
|
||||||
{ Prop = "prop_rum_bottle", PropBone = 18905, PropPlacement = {0.03, -0.18, 0.10, 240.0, -60.0},
|
|
||||||
EmoteMoving = true, EmoteLoop = true }},
|
|
||||||
["icream"] = {"mp_player_intdrink", "loop_bottle", "Irish Cream Bottle", AnimationOptions =
|
|
||||||
{ Prop = "prop_bottle_brandy", PropBone = 18905, PropPlacement = {0.00, -0.26, 0.10, 240.0, -60.0},
|
|
||||||
EmoteMoving = true, EmoteLoop = true }},
|
|
||||||
["ginb"] = {"mp_player_intdrink", "loop_bottle", "(Don't Use) Gin Bottle", AnimationOptions =
|
|
||||||
{ Prop = "prop_tequila_bottle", PropBone = 18905, PropPlacement = {0.00, -0.26, 0.10, 240.0, -60.0},
|
|
||||||
EmoteMoving = true, EmoteLoop = true }},
|
|
||||||
["vodkab"] = {"mp_player_intdrink", "loop_bottle", "(Don't Use) Vodka Bottle", AnimationOptions =
|
|
||||||
{ Prop = 'prop_vodka_bottle', PropBone = 18905, PropPlacement = {0.00, -0.26, 0.10, 240.0, -60.0},
|
|
||||||
EmoteMoving = true, EmoteLoop = true }},
|
|
||||||
["crisps"] = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Chrisps", 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, }},
|
|
||||||
["beer1"] = {"mp_player_intdrink", "loop_bottle", "Dusche", AnimationOptions =
|
|
||||||
{ Prop = "prop_beerdusche", PropBone = 18905, PropPlacement = {0.04, -0.14, 0.10, 240.0, -60.0},
|
|
||||||
EmoteMoving = true, EmoteLoop = true, }},
|
|
||||||
["beer2"] = {"mp_player_intdrink", "loop_bottle", "Logger", AnimationOptions =
|
|
||||||
{ Prop = "prop_beer_logopen", PropBone = 18905, PropPlacement = {0.03, -0.18, 0.10, 240.0, -60.0},
|
|
||||||
EmoteMoving = true, EmoteLoop = true, }},
|
|
||||||
["beer3"] = {"mp_player_intdrink", "loop_bottle", "AM Beer", AnimationOptions =
|
|
||||||
{ Prop = "prop_beer_amopen", PropBone = 18905, PropPlacement = {0.03, -0.18, 0.10, 240.0, -60.0},
|
|
||||||
EmoteMoving = true, EmoteLoop = true, }},
|
|
||||||
["beer4"] = {"mp_player_intdrink", "loop_bottle", "Pisswasser1", AnimationOptions =
|
|
||||||
{ Prop = "prop_beer_pissh", PropBone = 18905, PropPlacement = {0.03, -0.18, 0.10, 240.0, -60.0},
|
|
||||||
EmoteMoving = true, EmoteLoop = true, }},
|
|
||||||
["beer5"] = {"mp_player_intdrink", "loop_bottle", "Pisswasser2", AnimationOptions =
|
|
||||||
{ Prop = "prop_amb_beer_bottle", PropBone = 18905, PropPlacement = {0.12, 0.008, 0.03, 240.0, -60.0},
|
|
||||||
EmoteMoving = true, EmoteLoop = true, }},
|
|
||||||
["beer6"] = {"mp_player_intdrink", "loop_bottle", "Pisswasser3", AnimationOptions =
|
|
||||||
{ Prop = "prop_cs_beer_bot_02", PropBone = 18905, PropPlacement = {0.12, 0.008, 0.03, 240.0, -60.0},
|
|
||||||
EmoteMoving = true, EmoteLoop = true, }},
|
|
||||||
["ecola"] = {"mp_player_intdrink", "loop_bottle", "E-cola", AnimationOptions =
|
|
||||||
{ Prop = "prop_ecola_can", PropBone = 18905, PropPlacement = {0.12, 0.008, 0.03, 240.0, -60.0},
|
|
||||||
EmoteMoving = true, EmoteLoop = true, }},
|
|
||||||
["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, }},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,27 @@
|
|||||||
name "Jim-Consumables"
|
name "Jim-Consumables"
|
||||||
author "Jimathy"
|
author "Jimathy"
|
||||||
version "v1.2"
|
version "2.0.02"
|
||||||
description "Consumable Script By Jimathy"
|
description "Consumables Script"
|
||||||
fx_version "cerulean"
|
fx_version "cerulean"
|
||||||
game "gta5"
|
game "gta5"
|
||||||
|
lua54 'yes'
|
||||||
|
|
||||||
client_scripts { 'client/*.lua', }
|
server_script '@oxmysql/lib/MySQL.lua'
|
||||||
server_scripts { 'server/*.lua' }
|
|
||||||
shared_scripts { 'config.lua', }
|
shared_scripts {
|
||||||
|
'config.lua',
|
||||||
|
'shared/emotes.lua',
|
||||||
|
'shared/consumables.lua',
|
||||||
|
'shared/shared.lua',
|
||||||
|
|
||||||
|
--Jim Bridge - https://github.com/jimathy/jim_bridge
|
||||||
|
'@jim_bridge/starter.lua',
|
||||||
|
}
|
||||||
|
|
||||||
|
client_scripts {
|
||||||
|
'client/*.lua',
|
||||||
|
}
|
||||||
|
|
||||||
|
server_script 'server/*.lua'
|
||||||
|
|
||||||
|
dependency 'jim_bridge'
|
||||||
@@ -1,13 +1,83 @@
|
|||||||
local QBCore = exports['qb-core']:GetCoreObject()
|
local Consumables = Config.Consumables
|
||||||
|
local Emotes = Config.Emotes
|
||||||
|
|
||||||
--Consumables
|
onResourceStart(function()
|
||||||
for k in pairs(Config.Consumables) do
|
for k, v in pairs(Config.Consumables) do
|
||||||
QBCore.Functions.CreateUseableItem(k, function(source, item)
|
createUseableItem(k, function(source, item) TriggerClientEvent(getScript()..':Consume', source, item.name) end)
|
||||||
TriggerClientEvent('jim-consumables:Consume', source, item.name)
|
if not Items[k] then print("^1Debug^7: ^2Item check ^7- '^1"..k.."^7' ^2not found in the shared lua^7") end
|
||||||
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
|
||||||
|
|
||||||
|
--Export Import System--
|
||||||
|
createCallback(getScript()..':server:syncConsumables', function(source) return Consumables end)
|
||||||
|
createCallback(getScript()..':server:syncEmotes', function(source) return Emotes end)
|
||||||
|
|
||||||
|
end, true)
|
||||||
|
|
||||||
|
RegisterNetEvent(getScript()..':server:addNeed', function(amount, type)
|
||||||
|
local Player = Core.Functions.GetPlayer(source) if not Player then return end
|
||||||
|
if type == "thirst" then
|
||||||
|
Player.Functions.SetMetaData('thirst', amount)
|
||||||
|
TriggerClientEvent('hud:client:UpdateNeeds', source, Player.PlayerData.metadata.hunger, amount)
|
||||||
|
elseif type == "hunger" then
|
||||||
|
Player.Functions.SetMetaData('hunger', amount)
|
||||||
|
TriggerClientEvent('hud:client:UpdateNeeds', source, amount, Player.PlayerData.metadata.thirst)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
local syncScheduled = false
|
||||||
|
function syncConsumables()
|
||||||
|
debugPrint("^5Debug^7: ^2Sending ^6"..countTable(Consumables).." ^3Consumables ^2to all clients^7")
|
||||||
|
TriggerClientEvent(getScript()..":client:syncConsumables", -1, Consumables)
|
||||||
|
syncScheduled = false
|
||||||
end
|
end
|
||||||
for k, v in pairs(Config.Consumables) do
|
local emoteSyncScheduled = false
|
||||||
QBCore.Functions.CreateUseableItem(k, function(source, item) TriggerClientEvent('jim-consumables:Consume', source, item.name) end)
|
function syncEmotes()
|
||||||
if not QBCore.Shared.Items[k] then print("Item check - '"..k.."' not found in the shared lua") end
|
debugPrint("^5Debug^7: ^2Sending ^6"..countTable(Emotes).." ^3Emotes to all clients^7")
|
||||||
if not Config.Emotes[v.emote] then print("Emote check - '"..k.."' requested emote '"..v.emote.."' - not found in config.lua") end
|
TriggerClientEvent(getScript()..":client:syncEmotes", -1, Emotes)
|
||||||
|
emoteSyncScheduled = false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
RegisterNetEvent(getScript()..':server:syncAddItem', function(itemName, data)
|
||||||
|
if not Consumables[itemName] then
|
||||||
|
Consumables[itemName] = data
|
||||||
|
createUseableItem(itemName, function(source, item) TriggerClientEvent(getScript()..':Consume', source, itemName) end)
|
||||||
|
debugPrint("^5Debug^7: "..GetInvokingResource().." ^2is sending new ^3Item^7: '"..itemName.."'")
|
||||||
|
if not syncScheduled then
|
||||||
|
syncScheduled = true
|
||||||
|
Citizen.SetTimeout(5000, syncConsumables)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
debugPrint("^1Debug^7: "..GetInvokingResource().." ^2is sending ^1duplicate ^3Item^7: '"..itemName.."'")
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterNetEvent(getScript()..':server:syncAddEmote', function(emoteName, data)
|
||||||
|
if not Emotes[emoteName] then
|
||||||
|
Emotes[emoteName] = data
|
||||||
|
debugPrint("^5Debug^7: "..GetInvokingResource().." ^2is sending new ^3Emote^7: '"..emoteName.."'")
|
||||||
|
if not emoteSyncScheduled then
|
||||||
|
emoteSyncScheduled = true
|
||||||
|
Citizen.SetTimeout(5000, syncEmotes)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
debugPrint("^1Debug^7: "..GetInvokingResource().." ^2is sending ^1duplicate ^3Emote^7: '"..emoteName.."'")
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterNetEvent(getScript()..":server:syncConsumables", function()
|
||||||
|
TriggerClientEvent(getScript()..':client:syncConsumables', -1, Consumables)
|
||||||
|
end)
|
||||||
|
RegisterNetEvent(getScript()..":server:syncEmotes", function()
|
||||||
|
TriggerClientEvent(getScript()..':client:syncEmotes', -1, Emotes)
|
||||||
|
|
||||||
|
end)
|
||||||
|
--[[
|
||||||
|
Core.Commands.Add('consumableCreator', "Create consumables (admin only)", {}, false, function(source)
|
||||||
|
if source > 0 then return TriggerClientEvent(getScript()..":client:consumableCreator", source) end
|
||||||
|
end, 'admin')
|
||||||
|
|
||||||
|
Core.Commands.Add('testConsumableEmotes', "Test consumables Emotes (admin only)", {}, false, function(source)
|
||||||
|
if source > 0 then return TriggerClientEvent(getScript()..":client:testEmotes", source) end
|
||||||
|
end, 'admin')
|
||||||
|
]]
|
||||||
86
shared/consumables.lua
Normal file
86
shared/consumables.lua
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
Config = Config or {}
|
||||||
|
|
||||||
|
Config.Consumables = {
|
||||||
|
|
||||||
|
--Effects can be applied here, like stamina on coffee for example
|
||||||
|
vodka = { emote = "vodkab", canRun = false, 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 }},
|
||||||
|
beer = { emote = "beer", canRun = false, time = math.random(5000, 6000), stress = math.random(2, 4), heal = 0, armor = 0, type = "alcohol", stats = { thirst = math.random(10,20), canOD = true }},
|
||||||
|
whiskey = { emote = "whiskey", canRun = false, time = math.random(5000, 6000), stress = math.random(2, 4), heal = 0, armor = 0, type = "alcohol", stats = { thirst = math.random(10,20), canOD = true }},
|
||||||
|
sandwich = { emote = "sandwich", canRun = false, time = math.random(5000, 6000), stress = 0, heal = 0, armor = 0, type = "food", stats = { hunger = 20, }},
|
||||||
|
|
||||||
|
twerks_candy = { emote = "egobar", canRun = true, time = math.random(5000, 6000), stress = 0, heal = 0, armor = 0, type = "food", stats = { hunger = math.random(10,15), }},
|
||||||
|
snikkel_candy = { emote = "egobar", canRun = true, time = math.random(5000, 6000), stress = 0, heal = 0, armor = 0, type = "food", stats = { hunger = math.random(10,15), }},
|
||||||
|
|
||||||
|
coffee = { emote = "coffee", canRun = false, time = math.random(5000, 6000), stress = 0, heal = 0, armor = 0, type = "drink", stats = { time = 10000, thirst = math.random(10,15), }},
|
||||||
|
water_bottle = { emote = "drink", canRun = false, time = math.random(5000, 6000), stress = 0, heal = 0, armor = 0, type = "drink", stats = { thirst = 20, }},
|
||||||
|
tosti = { emote = "sandwich", canRun = false, time = math.random(5000, 6000), stress = math.random(2, 4), heal = 0, armor = 0, type = "food", stats = { hunger = math.random(10,15), }},
|
||||||
|
|
||||||
|
kurkakola = { emote = "ecola", canRun = false, 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
|
||||||
|
-- Testing these but they may be best left handled by default scripts
|
||||||
|
["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", 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", 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", 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", 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", 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", 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", 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
|
||||||
|
-- heartstopper = {
|
||||||
|
-- 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
|
||||||
|
-- heal = 0, -- Set amount to heal by after consuming
|
||||||
|
-- armor = 5, -- Amount of armor to add
|
||||||
|
-- type = "food", -- Type: "alcohol" / "drink" / "food"
|
||||||
|
-- canRun = true, -- If true player can run while using the item, not to it will cancel the event
|
||||||
|
--
|
||||||
|
-- stats = {
|
||||||
|
-- screen = "thermal", -- The screen effect to be played when after consuming the item "rampage" "turbo" "focus" "weed" "trevor" "nightvision" "thermal"
|
||||||
|
-- effect = "heal", -- The status effect given by the item, "heal" / "stamina"
|
||||||
|
-- -- This supports ps-buffs effects "armor" "stress" "swimming" "hacking" "intelligence" "luck" "strength"
|
||||||
|
-- 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
|
||||||
|
-- canOD = true, -- This creates an OD Effect, killing the user if they have too much
|
||||||
|
-- },
|
||||||
|
-- --Reward Items Variables
|
||||||
|
-- -- These can be the only thing in a consumable table and the item will still work
|
||||||
|
-- amounttogive = 3, -- Used for "RewardItems", tells the script how many to give
|
||||||
|
-- rewards = {
|
||||||
|
-- [1] = {
|
||||||
|
-- item = "plastic", -- prize item name
|
||||||
|
-- max = 10, -- max amount to give (this is put into math.random(1, max) )
|
||||||
|
-- rarity = 1, -- the rarity system, 1 being rarest, 4 being most common
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
|
||||||
|
-- Example Box Item
|
||||||
|
-- ["9_box"] = { -- Name of the box item in the shared
|
||||||
|
-- emote = "uncuff", -- The emote than should run when "unboxing"
|
||||||
|
-- canRun = true, -- If true player can run while using the item, not to it will cancel the event
|
||||||
|
-- time = 3500, -- How long it takes to use the item
|
||||||
|
-- type = "pack", -- Designate it as a "pack" to the script knows what to do
|
||||||
|
-- pack = {
|
||||||
|
-- item = "9_ammo", -- The item to give from the box when complete
|
||||||
|
-- amount = 20 -- How many of the item to give
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
|
||||||
|
}
|
||||||
89
shared/emotes.lua
Normal file
89
shared/emotes.lua
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
Config = Config or {}
|
||||||
|
|
||||||
|
Config.Emotes = {
|
||||||
|
drink = { "mp_player_intdrink", "loop_bottle", "Drink", AnimationOptions = { Prop = "prop_ld_flow_bottle", PropBone = 18905, PropPlacement = {0.12, 0.008, 0.03, 240.0, -60.0}, EmoteMoving = true, EmoteLoop = true, }},
|
||||||
|
milk = {"mp_player_intdrink", "loop_bottle", "Glass of milk", AnimationOptions = { Prop = 'bzzz_farmprops_milk_a', PropBone = 18905, PropPlacement = {-0.02, -0.04, 0.1, 34.0, 140.0, 224.0}, EmoteLoop = true, EmoteMoving = true, }},
|
||||||
|
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 }},
|
||||||
|
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 }},
|
||||||
|
beer = {"amb@world_human_drinking@beer@male@idle_a", "idle_c", "Beer", AnimationOptions = { Prop = 'prop_amb_beer_bottle', PropBone = 28422, PropPlacement = {0.0,0.0,0.06,0.0,15.0,0.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 }},
|
||||||
|
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 }},
|
||||||
|
apple = {"mp_player_inteat@burger", "mp_player_int_eat_burger", "Apple", AnimationOptions = { Prop = 'idrp_apple_solo', PropBone = 18905, PropPlacement = {0.13,0.05,0.02,-50.0,16.0,60.0}, EmoteMoving = true }},
|
||||||
|
avacado = {"mp_player_inteat@burger", "mp_player_int_eat_burger", "Avacado", AnimationOptions = { Prop = 'idrp_avo_solo', PropBone = 18905, PropPlacement = {0.13,0.05,0.02,-50.0,16.0,60.0}, EmoteMoving = true }},
|
||||||
|
banana = {"mp_player_inteat@burger", "mp_player_int_eat_burger", "Banana", AnimationOptions = { Prop = 'idrp_bana_solo', PropBone = 18905, PropPlacement = {0.13,0.05,0.02,-50.0,16.0,60.0}, EmoteMoving = true }},
|
||||||
|
carrot = {"mp_player_inteat@burger", "mp_player_int_eat_burger", "Carrot", AnimationOptions = { Prop = 'idrp_carrot_single', PropBone = 18905, PropPlacement = {0.13,0.05,0.02,-50.0,16.0,60.0}, EmoteMoving = true }},
|
||||||
|
orange = {"mp_player_inteat@burger", "mp_player_int_eat_burger", "Orange", AnimationOptions = { Prop = 'idrp_bana_solo', PropBone = 18905, PropPlacement = {0.13,0.05,0.02,-50.0,16.0,60.0}, 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 }},
|
||||||
|
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 } },
|
||||||
|
vodkab = {"mp_player_intdrink", "loop_bottle", "(Don't Use) Vodka Bottle", AnimationOptions = { Prop = 'prop_vodka_bottle', PropBone = 18905, PropPlacement = {0.00, -0.26, 0.10, 240.0, -60.0}, EmoteMoving = true, EmoteLoop = true }},
|
||||||
|
cherenkov1 = {"mp_player_intdrink", "loop_bottle", "(Don't Use) Vodka Bottle", AnimationOptions = { Prop = 'prop_cherenkov_01', PropBone = 18905, PropPlacement = {0.00, -0.26, 0.10, 240.0, -60.0}, EmoteMoving = true, EmoteLoop = true }},
|
||||||
|
cherenkov2 = {"mp_player_intdrink", "loop_bottle", "(Don't Use) Vodka Bottle", AnimationOptions = { Prop = 'prop_cherenkov_04', PropBone = 18905, PropPlacement = {0.00, -0.26, 0.10, 240.0, -60.0}, EmoteMoving = true, EmoteLoop = true }},
|
||||||
|
cherenkov3 = {"mp_player_intdrink", "loop_bottle", "(Don't Use) Vodka Bottle", AnimationOptions = { Prop = 'prop_cherenkov_03', PropBone = 18905, PropPlacement = {0.00, -0.26, 0.10, 240.0, -60.0}, EmoteMoving = true, EmoteLoop = true }},
|
||||||
|
cherenkov4 = {"mp_player_intdrink", "loop_bottle", "(Don't Use) Vodka Bottle", AnimationOptions = { Prop = 'prop_cherenkov_02', PropBone = 18905, PropPlacement = {0.00, -0.26, 0.10, 240.0, -60.0}, EmoteMoving = true, EmoteLoop = true }},
|
||||||
|
bleuturd = {"mp_player_intdrink", "loop_bottle", "(Don't Use) Vodka Bottle", AnimationOptions = { Prop = 'prop_champ_01b', PropBone = 18905, PropPlacement = {0.00, -0.26, 0.10, 240.0, -60.0}, EmoteMoving = true, EmoteLoop = true }},
|
||||||
|
bourgeoix = {"mp_player_intdrink", "loop_bottle", "(Don't Use) Vodka Bottle", AnimationOptions = { Prop = 'prop_bottle_cognac', PropBone = 18905, PropPlacement = {0.00, -0.26, 0.10, 240.0, -60.0}, EmoteMoving = true, EmoteLoop = true }},
|
||||||
|
cardiaque = {"mp_player_intdrink", "loop_bottle", "(Don't Use) Vodka Bottle", AnimationOptions = { Prop = 'prop_bottle_brandy', PropBone = 18905, PropPlacement = {0.00, -0.26, 0.10, 240.0, -60.0}, EmoteMoving = true, EmoteLoop = true }},
|
||||||
|
raggae = {"mp_player_intdrink", "loop_bottle", "(Don't Use) Vodka Bottle", AnimationOptions = { Prop = 'prop_rum_bottle', PropBone = 18905, PropPlacement = {0.00, -0.26, 0.10, 240.0, -60.0}, EmoteMoving = true, EmoteLoop = true }},
|
||||||
|
ecola = {"mp_player_intdrink", "loop_bottle", "E-cola", AnimationOptions = { Prop = "prop_ecola_can", PropBone = 18905, PropPlacement = {0.12, 0.008, 0.03, 240.0, -60.0}, EmoteMoving = true, EmoteLoop = true, }},
|
||||||
|
crisps = {"amb@world_human_drinking@coffee@male@idle_a", "idle_c", "Chrisps", 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, }},
|
||||||
|
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, }},
|
||||||
|
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 }},
|
||||||
|
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 }},
|
||||||
|
croissant = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Croissant", AnimationOptions = { Prop = 'bzzz_foodpack_croissant001', PropBone = 60309, PropPlacement = { 0.00, 0.0, -0.01, 0.0, 0.0, 90.0 }, 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 }},
|
||||||
|
desert = { "mp_player_inteat@burger", "mp_player_int_eat_burger","Eat dessert", AnimationOptions = { Prop = 'bzzz_food_dessert_a', PropBone = 18905, PropPlacement = { 0.15, 0.03, 0.03, -42.0, -36.0, 0.0 }, EmoteMoving = true}},
|
||||||
|
dinner = { "anim@scripted@island@special_peds@pavel@hs4_pavel_ig5_caviar_p1", "base_idle", "Dinner", AnimationOptions = { Prop = "prop_cs_plate_01", PropBone = 60309, PropPlacement = { 0.0, 0.0, 0.0, 0.0, 0.0 }, SecondProp = 'h4_prop_h4_caviar_spoon_01a', SecondPropBone = 28422, SecondPropPlacement = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, EmoteLoop = true, EmoteMoving = 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 }},
|
||||||
|
frappe = { "amb@code_human_wander_drinking@male@base", "static", "Frappe", AnimationOptions = { Prop = 'brum_heartfrappe', PropBone = 28422, PropPlacement = { 0.0, -0.0150, -0.0100, 0.0, -3.9999, 0.0 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
frappe2 = { "amb@code_human_wander_drinking@female@base", "static", "Frappe 2", AnimationOptions = { Prop = 'beanmachine_cup', PropBone = 28422, PropPlacement = { 0.0110, 0.0, 0.0300, 0.0, 0.0, -140.0 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
frappe3 = { "amb@code_human_wander_drinking@female@base", "static", "Frappe 3", AnimationOptions = { Prop = 'beanmachine_cup2', PropBone = 28422, PropPlacement = { 0.0, 0.0, -0.0600, 0.0, 0.0, -178.0 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
frappe4 = { "amb@code_human_wander_drinking@female@base", "static", "Frappe 4", AnimationOptions = { Prop = 'beanmachine_cup3', PropBone = 28422, PropPlacement = { 0.0, 0.0, -0.0600, 0.0, 0.0, -178.0 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
hotdog = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Hotdog", AnimationOptions = { Prop = 'prop_cs_hotdog_02', PropBone = 60309, PropPlacement = { -0.0300, 0.0100, -0.0100, 95.1071, 94.7001, -66.9179 }, EmoteMoving = true }},
|
||||||
|
icecreama = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Ice cream Cherry", AnimationOptions = { Prop = 'bzzz_icecream_cherry', PropBone = 18905, PropPlacement = { 0.14, 0.03, 0.01, 85.0, 70.0, -203.0 }, EmoteMoving = true }},
|
||||||
|
icecreamb = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Ice cream Chocolate", AnimationOptions = { Prop = 'bzzz_icecream_chocolate', PropBone = 18905, PropPlacement = { 0.14, 0.03, 0.01, 85.0, 70.0, -203.0 }, EmoteMoving = true }},
|
||||||
|
icecreamc = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Ice cream Lemon", AnimationOptions = { Prop = 'bzzz_icecream_lemon', PropBone = 18905, PropPlacement = { 0.14, 0.03, 0.01, 85.0, 70.0, -203.0 }, EmoteMoving = true }},
|
||||||
|
icecreamd = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Ice cream Pistachio", AnimationOptions = { Prop = 'bzzz_icecream_pistachio', PropBone = 18905, PropPlacement = { 0.14, 0.03, 0.01, 85.0, 70.0, -203.0 }, EmoteMoving = true }},
|
||||||
|
icecreame = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Ice cream Raspberry", AnimationOptions = { Prop = 'bzzz_icecream_raspberry', PropBone = 18905, PropPlacement = { 0.14, 0.03, 0.01, 85.0, 70.0, -203.0 }, EmoteMoving = true }},
|
||||||
|
icecreamf = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Ice cream Stracciatella", AnimationOptions = { Prop = 'bzzz_icecream_stracciatella', PropBone = 18905, PropPlacement = { 0.14, 0.03, 0.01, 85.0, 70.0, -203.0 }, EmoteMoving = true }},
|
||||||
|
icecreamg = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Ice cream Strawberry", AnimationOptions = { Prop = 'bzzz_icecream_strawberry', PropBone = 18905, PropPlacement = { 0.14, 0.03, 0.01, 85.0, 70.0, -203.0 }, EmoteMoving = true }},
|
||||||
|
icecreamh = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Ice cream Walnut", AnimationOptions = { Prop = 'bzzz_icecream_walnut', PropBone = 18905, PropPlacement = { 0.14, 0.03, 0.01, 85.0, 70.0, -203.0 }, EmoteMoving = true }},
|
||||||
|
macaroon = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Macaroon", AnimationOptions = { Prop = 'bzzz_food_xmas_macaroon_a', PropBone = 18905, PropPlacement = { 0.15, 0.07, 0.00, 38.0, 7.0, 7.0 }, EmoteMoving = true }},
|
||||||
|
sipshake = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Milkshake - Bubblegum", AnimationOptions = { Prop = 'brum_cherryshake_raspberry', PropBone = 28422, PropPlacement = { 0.0850, 0.0670, -0.0350, -115.0862, -165.7841, 24.1318 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
sipshakeb = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Milkshake - Cherry", AnimationOptions = { Prop = 'brum_cherryshake_cherry', PropBone = 28422, PropPlacement = { 0.0850, 0.0670, -0.0350, -115.0862, -165.7841, 24.1318 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
sipshakec = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Milkshake - Chocolate", AnimationOptions = { Prop = 'brum_cherryshake_chocolate', PropBone = 28422, PropPlacement = { 0.0850, 0.0670, -0.0350, -115.0862, -165.7841, 24.1318 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
sipshaked = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Milkshake - Coffee", AnimationOptions = { Prop = 'brum_cherryshake_coffee', PropBone = 28422, PropPlacement = { 0.0850, 0.0670, -0.0350, -115.0862, -165.7841, 24.1318 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
sipshakee = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Milkshake - Double Chocolate", AnimationOptions = { Prop = 'brum_cherryshake_doublechocolate', PropBone = 28422, PropPlacement = { 0.0850, 0.0670, -0.0350, -115.0862, -165.7841, 24.1318 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
sipshakef = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Milkshake - Frappe", AnimationOptions = { Prop = 'brum_cherryshake_frappe', PropBone = 28422, PropPlacement = { 0.0850, 0.0670, -0.0350, -115.0862, -165.7841, 24.1318 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
sipshakeg = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Milkshake - Lemon", AnimationOptions = { Prop = 'brum_cherryshake_lemon', PropBone = 28422, PropPlacement = { 0.0850, 0.0670, -0.0350, -115.0862, -165.7841, 24.1318 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
sipshakeh = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Milkshake - Mint", AnimationOptions = { Prop = 'brum_cherryshake_mint', PropBone = 28422, PropPlacement = { 0.0850, 0.0670, -0.0350, -115.0862, -165.7841, 24.1318 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
sipshakei = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Milkshake - Strawberry", AnimationOptions = { Prop = 'brum_cherryshake_strawberry', PropBone = 28422, PropPlacement = { 0.0850, 0.0670, -0.0350, -115.0862, -165.7841, 24.1318 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
sipshakej = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Milkshake - Raspberry", AnimationOptions = { Prop = 'brum_cherryshake_raspberry', PropBone = 28422, PropPlacement = { 0.0850, 0.0670, -0.0350, -115.0862, -165.7841, 24.1318 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
sipshakek = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Milkshake - Salted", AnimationOptions = { Prop = 'brum_cherryshake_salted', PropBone = 28422, PropPlacement = { 0.0850, 0.0670, -0.0350, -115.0862, -165.7841, 24.1318 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
sipshakel = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Milkshake - Vanilla", AnimationOptions = { Prop = 'brum_cherryshake_vanilla', PropBone = 28422, PropPlacement = { 0.0850, 0.0670, -0.0350, -115.0862, -165.7841, 24.1318 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
pizzaslice = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Pizza Slice - Jalapeño And Peperoni", AnimationOptions = { Prop = 'knjgh_pizzaslice1', PropBone = 60309, PropPlacement = { 0.0500, -0.0200, -0.0200, 73.6928, -66.7427, 68.3677 }, EmoteMoving = true }},
|
||||||
|
pizzas = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Pizza Slice - Jalapeño And Peperoni", AnimationOptions = { Prop = 'knjgh_pizzaslice1', PropBone = 60309, PropPlacement = { 0.0500, -0.0200, -0.0200, 73.6928, -66.7427, 68.3677 }, EmoteMoving = true }},
|
||||||
|
pizzas2 = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Pizza Slice - Tomato And Pesto", AnimationOptions = { Prop = 'knjgh_pizzaslice2', PropBone = 60309, PropPlacement = { 0.0500, -0.0200, -0.0200, 73.6928, -66.7427, 68.3677 }, EmoteMoving = true }},
|
||||||
|
pizzas3 = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Pizza Slice - Mushroom", AnimationOptions = { Prop = 'knjgh_pizzaslice3', PropBone = 60309, PropPlacement = { 0.0500, -0.0200, -0.0200, 73.6928, -66.7427, 68.3677 }, EmoteMoving = true }},
|
||||||
|
pizzas4 = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Pizza Slice - Margherita", AnimationOptions = { Prop = 'knjgh_pizzaslice4', PropBone = 60309, PropPlacement = { 0.0500, -0.0200, -0.0200, 73.6928, -66.7427, 68.3677 }, EmoteMoving = true }},
|
||||||
|
pizzas5 = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Pizza Slice - Double Peperoni", AnimationOptions = { Prop = 'knjgh_pizzaslice5', PropBone = 60309, PropPlacement = { 0.0500, -0.0200, -0.0200, 73.6928, -66.7427, 68.3677 }, EmoteMoving = true }},
|
||||||
|
popcorn = { "amb@code_human_wander_drinking@female@base", "static", "Popcorn", AnimationOptions = { Prop = 'prop_taymckenzienz_popcorn', PropBone = 28422, PropPlacement = { -0.0200, -0.0100, -0.0700, -179.3626, 176.9331, 11.9833 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
sipsoda = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Soda Cup - Sprunk", AnimationOptions = { Prop = 'prop_rpemotes_soda01', PropBone = 28422, PropPlacement = { 0.0470, 0.0040, -0.0600, -88.0263, -25.0367, -27.3898 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
sipsodab = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Soda Cup - Sprunk Light", AnimationOptions = { Prop = 'prop_rpemotes_soda02', PropBone = 28422, PropPlacement = { 0.0470, 0.0040, -0.0600, -88.0263, -25.0367, -27.3898 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
sipsodac = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Soda Cup - eCola", AnimationOptions = { Prop = 'prop_rpemotes_soda03', PropBone = 28422, PropPlacement = { 0.0470, 0.0040, -0.0600, -88.0263, -25.0367, -27.3898 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
sipsodad = { "smo@milkshake_idle", "milkshake_idle_clip", "Sip Soda Cup - eCola Light", AnimationOptions = { Prop = 'prop_rpemotes_soda04', PropBone = 28422, PropPlacement = { 0.0470, 0.0040, -0.0600, -88.0263, -25.0367, -27.3898 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
taco = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Taco", AnimationOptions = { Prop = 'prop_taco_01', PropBone = 60309, PropPlacement = { -0.0170, 0.0070, -0.0210, 107.9846, -105.0251, 55.7779 }, EmoteMoving = true }},
|
||||||
|
xmascc = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Xmas Cupcake", AnimationOptions = { Prop = 'pata_christmasfood6', PropBone = 60309, PropPlacement = { 0.0100, 0.0200, -0.0100, -170.1788, 87.6716, 30.0540 }, EmoteMoving = true }},
|
||||||
|
xmascc2 = { "mp_player_inteat@burger", "mp_player_int_eat_burger", "Xmas Cupcake 2", AnimationOptions = { Prop = 'pata_christmasfood8', PropBone = 60309, PropPlacement = { 0.0200, 0.0, -0.0100, 9.3608, -90.1809, 66.3689 }, EmoteMoving = true }},
|
||||||
|
xmasic = { "anim@scripted@island@special_peds@pavel@hs4_pavel_ig5_caviar_p1", "base_idle", "Xmas Ice Cream", AnimationOptions = { Prop = "pata_christmasfood7", PropBone = 60309, PropPlacement = { -0.0460, 0.0000, -0.0300, 0.0, 0.0, -50.0000 }, SecondProp = 'h4_prop_h4_coke_spoon_01', SecondPropBone = 28422, SecondPropPlacement = { 0.0, 0.0, 0.0, 0.0, 20.0, 0.0 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
xmaswine = { "mp_player_intdrink", "loop_bottle", "Xmas Mulled Wine", AnimationOptions = { Prop = 'bzzz_food_xmas_mulled_wine_a', PropBone = 18905, PropPlacement = { 0.13, 0.03, 0.05, -110.0, -47.0, 7.0 }, EmoteMoving = true }},
|
||||||
|
cocoa = { "amb@world_human_aa_coffee@base", "base", "Xmas Cocoa", AnimationOptions = { Prop = 'pata_christmasfood1', PropBone = 28422, PropPlacement = { 0.0100, -0.1100, -0.1300, 0.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 }},
|
||||||
|
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 }},
|
||||||
|
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 }},
|
||||||
|
smokecigar = { "amb@world_human_aa_smoke@male@idle_a", "idle_c", "Smoke Cigar", AnimationOptions = { Prop = 'prop_cigar_01', PropBone = 28422, PropPlacement = { 0.0, 0.0, 0.0, 0.0, 0.0, 180.0 }, EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
uncuff = { "mp_arresting", "a_uncuff", "Uncuff", AnimationOptions = { EmoteLoop = true, EmoteMoving = true }},
|
||||||
|
}
|
||||||
23
shared/shared.lua
Normal file
23
shared/shared.lua
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
function tempLockInv(toggle)
|
||||||
|
LocalPlayer.state:set("inv_busy", toggle, true)
|
||||||
|
TriggerEvent('inventory:client:busy:status', toggle)
|
||||||
|
TriggerEvent('canUseInventoryAndHotbar:toggle', not toggle)
|
||||||
|
end
|
||||||
|
|
||||||
|
function GenerateRandomValues(data)
|
||||||
|
local transData = {}
|
||||||
|
for k, v in pairs(data) do
|
||||||
|
if type(v) == "table" then
|
||||||
|
debugPrint("Converting Table "..json.encode(v).." to math.random")
|
||||||
|
transData[k] = math.random(v[1], v[2])
|
||||||
|
debugPrint("Translated value: "..k.." - "..transData[k])
|
||||||
|
else
|
||||||
|
transData[k] = v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return transData["time"],
|
||||||
|
transData["stress"],
|
||||||
|
transData["heal"],
|
||||||
|
transData["armor"],
|
||||||
|
{ hunger = transData["hunger"], thirst = transData["thirst"] }
|
||||||
|
end
|
||||||
1
version.txt
Normal file
1
version.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
2.0.02
|
||||||
Reference in New Issue
Block a user