diff --git a/client/main.lua b/client/main.lua new file mode 100644 index 0000000..9238dd1 --- /dev/null +++ b/client/main.lua @@ -0,0 +1,165 @@ +ESX = nil +local IsAlreadyDrunk = false +local DrunkLevel = -1 + +Citizen.CreateThread(function() + while ESX == nil do + TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) + Citizen.Wait(0) + end +end) + +function Drunk(level, start) + + Citizen.CreateThread(function() + + local playerPed = GetPlayerPed(-1) + + if start then + DoScreenFadeOut(800) + Wait(1000) + end + + if level == 0 then + + RequestAnimSet("move_m@drunk@slightlydrunk") + + while not HasAnimSetLoaded("move_m@drunk@slightlydrunk") do + Citizen.Wait(0) + end + + SetPedMovementClipset(playerPed, "move_m@drunk@slightlydrunk", true) + + elseif level == 1 then + + RequestAnimSet("move_m@drunk@moderatedrunk") + + while not HasAnimSetLoaded("move_m@drunk@moderatedrunk") do + Citizen.Wait(0) + end + + SetPedMovementClipset(playerPed, "move_m@drunk@moderatedrunk", true) + + elseif level == 2 then + + RequestAnimSet("move_m@drunk@verydrunk") + + while not HasAnimSetLoaded("move_m@drunk@verydrunk") do + Citizen.Wait(0) + end + + SetPedMovementClipset(playerPed, "move_m@drunk@verydrunk", true) + + end + + SetTimecycleModifier("spectator5") + SetPedMotionBlur(playerPed, true) + SetPedIsDrunk(playerPed, true) + + if start then + DoScreenFadeIn(800) + end + + end) + +end + +function Reality() + + Citizen.CreateThread(function() + + local playerPed = GetPlayerPed(-1) + + DoScreenFadeOut(800) + Wait(1000) + + ClearTimecycleModifier() + ResetScenarioTypesEnabled() + ResetPedMovementClipset(playerPed, 0) + SetPedIsDrunk(playerPed, false) + SetPedMotionBlur(playerPed, false) + + DoScreenFadeIn(800) + + end) + +end + +AddEventHandler('esx_status:loaded', function(status) + + TriggerEvent('esx_status:registerStatus', 'drunk', 0, '#8F15A5', + function(status) + if status.val > 0 then + return true + else + return false + end + end, + function(status) + status.remove(1500) + end + ) + + Citizen.CreateThread(function() + + while true do + + Wait(1000) + + TriggerEvent('esx_status:getStatus', 'drunk', function(status) + + if status.val > 0 then + + local start = true + + if IsAlreadyDrunk then + start = false + end + + local level = 0 + + if status.val <= 250000 then + level = 0 + elseif status.val <= 500000 then + level = 1 + else + level = 2 + end + + if level ~= DrunkLevel then + Drunk(level, start) + end + + IsAlreadyDrunk = true + DrunkLevel = level + end + + if status.val == 0 then + + if IsAlreadyDrunk then + Reality() + end + + IsAlreadyDrunk = false + DrunkLevel = -1 + + end + + end) + + end + + end) + +end) + +RegisterNetEvent('esx_optionalneeds:onDrink') +AddEventHandler('esx_optionalneeds:onDrink', function() + + local playerPed = GetPlayerPed(-1) + + TaskStartScenarioInPlace(playerPed, "WORLD_HUMAN_DRINKING", 0, 1) + Citizen.Wait(1000) + ClearPedTasksImmediately(playerPed) + +end) \ No newline at end of file diff --git a/config.lua b/config.lua new file mode 100644 index 0000000..e4b5d74 --- /dev/null +++ b/config.lua @@ -0,0 +1,5 @@ +Config = {} + +Config.TickTime = 100 +Config.UpdateClientTime = 5000 +Config.Locale = 'de' \ No newline at end of file diff --git a/esx_optionalneeds.sql b/esx_optionalneeds.sql new file mode 100644 index 0000000..5cf24f7 --- /dev/null +++ b/esx_optionalneeds.sql @@ -0,0 +1,11 @@ + + +INSERT INTO `items` (`name`, `label`, `weight`) VALUES + ('beer', 'Bier', 1) +; + +INSERT INTO `shops` (store, item, price) VALUES + ('TwentyFourSeven', 'beer', 45), + ('RobsLiquor', 'beer', 45), + ('LTDgasoline', 'beer', 45) +; diff --git a/fxmanifest.lua b/fxmanifest.lua new file mode 100644 index 0000000..9285a25 --- /dev/null +++ b/fxmanifest.lua @@ -0,0 +1,22 @@ +fx_version 'adamant' + +game 'gta5' + +description 'ESX Optional Needs ' + +version '1.0.3' + +server_scripts { + '@es_extended/locale.lua', + 'locales/en.lua', + 'locales/de.lua', + 'locales/fi.lua', + 'locales/fr.lua', + 'locales/pl.lua', + 'config.lua', + 'server/main.lua' +} + +client_scripts { + 'client/main.lua' +} diff --git a/locales/de.lua b/locales/de.lua new file mode 100644 index 0000000..afb25de --- /dev/null +++ b/locales/de.lua @@ -0,0 +1,20 @@ +Locales['de'] = { + + ['used_beer'] = 'du hast ~y~1x~s~ ~b~Bier getrunken~s~', + ['used_tequila'] = 'du hast ~y~1x~s~ ~b~Tequila getrunken~s~', + ['used_vanil_smot'] = 'du hast ~y~1x~s~ ~b~Vanilleshake getrunken~s~', + ['used_vine'] = 'du hast ~y~1x~s~ ~b~Vine getrunken~s~', + ['used_vodka'] = 'du hast ~y~1x~s~ ~b~Wodka getrunken~s~', + ['used_vodkaenergy'] = 'du hast ~y~1x~s~ ~b~Wodka Energy getrunken~s~', + ['used_vodkafruit'] = 'du hast ~y~1x~s~ ~b~Wodkafruit getrunken~s~', + ['used_wine'] = 'du hast ~y~1x~s~ ~b~Wein getrunken~s~', + ['used_whiskycoca'] = 'du hast ~y~1x~s~ ~b~Whisky Cola getrunken~s~', + ['used_whisky'] = 'du hast ~y~1x~s~ ~b~Whisky getrunken~s~', + ['used_jager'] = 'du hast ~y~1x~s~ ~b~Jägermeister getrunken~s~', + ['used_martini'] = 'du hast ~y~1x~s~ ~b~Martini getrunken~s~', + ['used_rhum'] = 'du hast ~y~1x~s~ ~b~Rum getrunken~s~', + ['used_cubalibre'] = 'du hast ~y~1x~s~ ~b~Cuba Libre getrunken~s~', + ['used_golem'] = 'du hast ~y~1x~s~ ~b~Golem getrunken~s~', + ['used_bacardi'] = 'du hast ~y~1x~s~ ~b~Bacardi getrunken~s~', + +} \ No newline at end of file diff --git a/locales/en.lua b/locales/en.lua new file mode 100644 index 0000000..625a98e --- /dev/null +++ b/locales/en.lua @@ -0,0 +1,5 @@ +Locales['en'] = { + + ['used_beer'] = 'you used 1x ~y~Beer~s~', + +} \ No newline at end of file diff --git a/locales/fi.lua b/locales/fi.lua new file mode 100644 index 0000000..aa18e52 --- /dev/null +++ b/locales/fi.lua @@ -0,0 +1,5 @@ +Locales['fi'] = { + + ['used_beer'] = 'sinä joit 1x ~y~Olut~s~', + +} \ No newline at end of file diff --git a/locales/fr.lua b/locales/fr.lua new file mode 100644 index 0000000..4b0c436 --- /dev/null +++ b/locales/fr.lua @@ -0,0 +1,5 @@ +Locales['fr'] = { + + ['used_beer'] = 'vous avez utilisé 1x ~y~Bière~s~', + +} \ No newline at end of file diff --git a/locales/pl.lua b/locales/pl.lua new file mode 100644 index 0000000..0a4104c --- /dev/null +++ b/locales/pl.lua @@ -0,0 +1,5 @@ +Locales['pl'] = { + + ['used_beer'] = 'używasz 1x ~y~Piwo~s~', + +} \ No newline at end of file diff --git a/server/main.lua b/server/main.lua new file mode 100644 index 0000000..c42e530 --- /dev/null +++ b/server/main.lua @@ -0,0 +1,181 @@ +ESX = nil + +TriggerEvent('esx:getSharedObject', function(obj) + ESX = obj +end) + +ESX.RegisterUsableItem('beer', function(source) + + local xPlayer = ESX.GetPlayerFromId(source) + + xPlayer.removeInventoryItem('beer', 1) + + TriggerClientEvent('esx_status:add', source, 'drunk', 250000) + TriggerClientEvent('esx_optionalneeds:onDrink', source) + TriggerClientEvent('esx:showNotification', source, _U('used_beer')) + +end) + +ESX.RegisterUsableItem('whisky', function(source) + + local xPlayer = ESX.GetPlayerFromId(source) + + xPlayer.removeInventoryItem('whisky', 1) + + TriggerClientEvent('esx_status:add', source, 'drunk', 2300000) + TriggerClientEvent('esx_optionalneeds:onDrink', source) + TriggerClientEvent('esx:showNotification', source, _U('used_whisky')) + +end) + +ESX.RegisterUsableItem('whiskycoca', function(source) + + local xPlayer = ESX.GetPlayerFromId(source) + + xPlayer.removeInventoryItem('whiskycoca', 1) + + TriggerClientEvent('esx_status:add', source, 'drunk', 2300000) + TriggerClientEvent('esx_optionalneeds:onDrink', source) + TriggerClientEvent('esx:showNotification', source, _U('used_whiskycoca')) + +end) + +ESX.RegisterUsableItem('wine', function(source) + + local xPlayer = ESX.GetPlayerFromId(source) + + xPlayer.removeInventoryItem('wine', 1) + + TriggerClientEvent('esx_status:add', source, 'drunk', 260000) + TriggerClientEvent('esx_optionalneeds:onDrink', source) + TriggerClientEvent('esx:showNotification', source, _U('used_wine')) + +end) + +ESX.RegisterUsableItem('vine', function(source) + + local xPlayer = ESX.GetPlayerFromId(source) + + xPlayer.removeInventoryItem('vine', 1) + + TriggerClientEvent('esx_status:add', source, 'drunk', 260000) + TriggerClientEvent('esx_optionalneeds:onDrink', source) + TriggerClientEvent('esx:showNotification', source, _U('used_vine')) + +end) + +ESX.RegisterUsableItem('vodkafruit', function(source) + + local xPlayer = ESX.GetPlayerFromId(source) + + xPlayer.removeInventoryItem('vodkafruit', 1) + + TriggerClientEvent('esx_status:add', source, 'drunk', 2300000) + TriggerClientEvent('esx_optionalneeds:onDrink', source) + TriggerClientEvent('esx:showNotification', source, _U('used_vodkafruit')) + +end) + +ESX.RegisterUsableItem('vodkaenergy', function(source) + + local xPlayer = ESX.GetPlayerFromId(source) + + xPlayer.removeInventoryItem('vodkaenergy', 1) + + TriggerClientEvent('esx_status:add', source, 'drunk', 2300000) + TriggerClientEvent('esx_optionalneeds:onDrink', source) + TriggerClientEvent('esx:showNotification', source, _U('used_vodkaenergy')) + +end) + +ESX.RegisterUsableItem('vodka', function(source) + + local xPlayer = ESX.GetPlayerFromId(source) + + xPlayer.removeInventoryItem('vodka', 1) + + TriggerClientEvent('esx_status:add', source, 'drunk', 2300000) + TriggerClientEvent('esx_optionalneeds:onDrink', source) + TriggerClientEvent('esx:showNotification', source, _U('used_vodka')) + +end) + +ESX.RegisterUsableItem('tequila', function(source) + + local xPlayer = ESX.GetPlayerFromId(source) + + xPlayer.removeInventoryItem('tequila', 1) + + TriggerClientEvent('esx_status:add', source, 'drunk', 2300000) + TriggerClientEvent('esx_optionalneeds:onDrink', source) + TriggerClientEvent('esx:showNotification', source, _U('used_tequila')) + +end) + +ESX.RegisterUsableItem('rhum', function(source) + + local xPlayer = ESX.GetPlayerFromId(source) + + xPlayer.removeInventoryItem('rhum', 1) + + TriggerClientEvent('esx_status:add', source, 'drunk', 2300000) + TriggerClientEvent('esx_optionalneeds:onDrink', source) + TriggerClientEvent('esx:showNotification', source, _U('used_rhum')) + +end) + +ESX.RegisterUsableItem('martini', function(source) + + local xPlayer = ESX.GetPlayerFromId(source) + + xPlayer.removeInventoryItem('martini', 1) + + TriggerClientEvent('esx_status:add', source, 'drunk', 2300000) + TriggerClientEvent('esx_optionalneeds:onDrink', source) + TriggerClientEvent('esx:showNotification', source, _U('used_martini')) + +end) + +ESX.RegisterUsableItem('jager', function(source) + + local xPlayer = ESX.GetPlayerFromId(source) + + xPlayer.removeInventoryItem('jager', 1) + + TriggerClientEvent('esx_status:add', source, 'drunk', 1800000) + TriggerClientEvent('esx_optionalneeds:onDrink', source) + TriggerClientEvent('esx:showNotification', source, _U('used_jager')) + +end) + +ESX.RegisterUsableItem('cubalibre', function(source) + + local xPlayer = ESX.GetPlayerFromId(source) + + xPlayer.removeInventoryItem('cubalibre', 1) + + TriggerClientEvent('esx_status:add', source, 'drunk', 12000000) + TriggerClientEvent('esx_optionalneeds:onDrink', source) + TriggerClientEvent('esx:showNotification', source, _U('used_cubalibre')) + +end) + +ESX.RegisterUsableItem('bacardi', function(source) + + local xPlayer = ESX.GetPlayerFromId(source) + + xPlayer.removeInventoryItem('bacardi', 1) + + TriggerClientEvent('esx_status:add', source, 'drunk', 2300000) + TriggerClientEvent('esx_optionalneeds:onDrink', source) + TriggerClientEvent('esx:showNotification', source, _U('used_bacardi')) + +end) + + +print("^0======================================================================^7") +print("^0[^4Author^0] ^7:^0 ^0M_Viper^7") +print("^0[^3Version^0] ^7:^0 1.0.3^7") +print("^0[^2Discord^0] ^7:^0 ^5dc.Difficult-Knights.de") +print("^0[^1YouTube^0] ^7:^0 ^5https://www.youtube.com/channel/UCmTXYM0rY7VlVlNrOA-O63A^7") +print("^0======================================================================^7") \ No newline at end of file