1
0
Fork 0
forked from Simnation/Main
Main/resources/[creator]/drugs_creator/client/drugs_effects.lua
2025-06-07 08:51:21 +02:00

753 lines
26 KiB
Lua

DrugsCreator.allEffects = {}
DrugsCreator.activeEffects = {}
local function startTimecycle(timecycleName, maxTimecycleStrenght)
maxTimecycleStrenght = maxTimecycleStrenght or 1.0
local time = 10000 -- Time to reach max strenght
local interval = 100 -- Strenght increases each interval
local streghtToAddEachInterval = maxTimecycleStrenght / (time/interval)
local timecycleStrength = 0.0
SetTimecycleModifier(timecycleName)
while time >= 0 do
SetTimecycleModifierStrength(timecycleStrength)
Citizen.Wait(interval)
time = time - interval
timecycleStrength = timecycleStrength + streghtToAddEachInterval
end
end
local function startShakingGameplayCam(shakeName, maxAmplitude)
local time = 10000
local interval = 100
local streghtToAddEachInterval = maxAmplitude / (time/interval)
local amplitude = 0.0
ShakeGameplayCam(shakeName, amplitude)
while time >= 0 do
SetGameplayCamShakeAmplitude(amplitude)
Citizen.Wait(interval)
time = time - interval
amplitude = amplitude + streghtToAddEachInterval
end
end
DrugsCreator.allEffects.pink_visual = function(duration)
local effectName = "visual_color"
if(not DrugsCreator.activeEffects[effectName]) then
DrugsCreator.activeEffects[effectName] = duration
local timer = 0
local currentTimecycle = GetTimecycleModifierIndex()
local timecycleName = "drug_flying_02"
local timecycleStrenght = 1.0
startTimecycle(timecycleName, timecycleStrenght)
while timer <= DrugsCreator.activeEffects[effectName] do
if(GetTimecycleModifierIndex() == -1 or GetTimecycleModifierIndex() == currentTimecycle) then
SetTimecycleModifier(timecycleName)
SetTimecycleModifierStrength(timecycleStrenght)
end
Citizen.Wait(1000)
timer = timer + 1000
end
ClearTimecycleModifier()
DrugsCreator.activeEffects[effectName] = false
else
DrugsCreator.activeEffects[effectName] = DrugsCreator.activeEffects[effectName] + duration
end
end
DrugsCreator.allEffects.visual_shaking = function(duration)
local effectName = "visual_shaking"
if(not DrugsCreator.activeEffects[effectName]) then
DrugsCreator.activeEffects[effectName] = duration
local shakeName = "FAMILY5_DRUG_TRIP_SHAKE"
local shakeStrenght = 0.6
startShakingGameplayCam(shakeName, shakeStrenght)
local timer = 0
while timer <= DrugsCreator.activeEffects[effectName] do
if(not IsGameplayCamShaking()) then
ShakeGameplayCam(shakeName, shakeStrenght)
end
Citizen.Wait(1000)
timer = timer + 1000
end
StopGameplayCamShaking()
DrugsCreator.activeEffects[effectName] = false
else
DrugsCreator.activeEffects[effectName] = DrugsCreator.activeEffects[effectName] + duration
end
end
DrugsCreator.allEffects.drunk_walk = function(duration)
local effectName = "drunk_walk"
if(not DrugsCreator.activeEffects[effectName]) then
DrugsCreator.activeEffects[effectName] = duration
local plyPed = PlayerPedId()
local timer = 0
local animSet = "move_m@drunk@moderatedrunk"
local transitionSpeed = 5.0
RequestAnimSet(animSet)
while not HasAnimSetLoaded(animSet) do
Citizen.Wait(0)
end
while timer <= DrugsCreator.activeEffects[effectName] do
SetPedMovementClipset(plyPed, animSet, transitionSpeed)
Citizen.Wait(1000)
timer = timer + 1000
end
ResetPedMovementClipset(plyPed, transitionSpeed)
DrugsCreator.activeEffects[effectName] = false
else
DrugsCreator.activeEffects[effectName] = DrugsCreator.activeEffects[effectName] + duration
end
end
DrugsCreator.allEffects.green_visual = function(duration)
local effectName = "visual_color"
if(not DrugsCreator.activeEffects[effectName]) then
DrugsCreator.activeEffects[effectName] = duration
local timer = 0
local currentTimecycle = GetTimecycleModifierIndex()
local timecycleName = "stoned"
local timecycleStrenght = 0.54
startTimecycle(timecycleName, timecycleStrenght)
while timer <= DrugsCreator.activeEffects[effectName] do
if(GetTimecycleModifierIndex() == -1 or GetTimecycleModifierIndex() == currentTimecycle) then
SetTimecycleModifier(timecycleName)
SetTimecycleModifierStrength(timecycleStrenght)
end
Citizen.Wait(1000)
timer = timer + 1000
end
ClearTimecycleModifier()
DrugsCreator.activeEffects[effectName] = false
else
DrugsCreator.activeEffects[effectName] = DrugsCreator.activeEffects[effectName] + duration
end
end
DrugsCreator.allEffects.confused_visual = function(duration)
local effectName = "visual_color"
if(not DrugsCreator.activeEffects[effectName]) then
DrugsCreator.activeEffects[effectName] = duration
local timer = 0
local currentTimecycle = GetTimecycleModifierIndex()
local timecycleName = "drug_wobbly"
local timecycleStrenght = 1.0
startTimecycle(timecycleName, timecycleStrenght)
while timer <= DrugsCreator.activeEffects[effectName] do
if(GetTimecycleModifierIndex() == -1 or GetTimecycleModifierIndex() == currentTimecycle) then
SetTimecycleModifier(timecycleName)
SetTimecycleModifierStrength(timecycleStrenght)
end
Citizen.Wait(1000)
timer = timer + 1000
end
ClearTimecycleModifier()
DrugsCreator.activeEffects[effectName] = false
else
DrugsCreator.activeEffects[effectName] = DrugsCreator.activeEffects[effectName] + duration
end
end
DrugsCreator.allEffects.yellow_visual = function(duration)
local effectName = "visual_color"
if(not DrugsCreator.activeEffects[effectName]) then
DrugsCreator.activeEffects[effectName] = duration
local timer = 0
local currentTimecycle = GetTimecycleModifierIndex()
local timecycleName = "BeastIntro01"
local timecycleStrenght = 1.0
startTimecycle(timecycleName, timecycleStrenght)
while timer <= DrugsCreator.activeEffects[effectName] do
if(GetTimecycleModifierIndex() == -1 or GetTimecycleModifierIndex() == currentTimecycle) then
SetTimecycleModifier(timecycleName)
SetTimecycleModifierStrength(timecycleStrenght)
end
Citizen.Wait(1000)
timer = timer + 1000
end
ClearTimecycleModifier()
DrugsCreator.activeEffects[effectName] = false
else
DrugsCreator.activeEffects[effectName] = DrugsCreator.activeEffects[effectName] + duration
end
end
DrugsCreator.allEffects.blurred_visual = function(duration)
local effectName = "visual_color"
if(not DrugsCreator.activeEffects[effectName]) then
DrugsCreator.activeEffects[effectName] = duration
local timer = 0
local currentTimecycle = GetTimecycleModifierIndex()
local timecycleName = "BlackOut"
local timecycleStrenght = 0.84
startTimecycle(timecycleName, timecycleStrenght)
while timer <= DrugsCreator.activeEffects[effectName] do
if(GetTimecycleModifierIndex() == -1 or GetTimecycleModifierIndex() == currentTimecycle) then
SetTimecycleModifier(timecycleName)
SetTimecycleModifierStrength(timecycleStrenght)
end
Citizen.Wait(1000)
timer = timer + 1000
end
ClearTimecycleModifier()
DrugsCreator.activeEffects[effectName] = false
else
DrugsCreator.activeEffects[effectName] = DrugsCreator.activeEffects[effectName] + duration
end
end
DrugsCreator.allEffects.red_visual = function(duration)
local effectName = "visual_color"
if(not DrugsCreator.activeEffects[effectName]) then
DrugsCreator.activeEffects[effectName] = duration
local timer = 0
local currentTimecycle = GetTimecycleModifierIndex()
local timecycleName = "damage"
local timecycleStrenght = 2.16
startTimecycle(timecycleName, timecycleStrenght)
while timer <= DrugsCreator.activeEffects[effectName] do
if(GetTimecycleModifierIndex() == -1 or GetTimecycleModifierIndex() == currentTimecycle) then
SetTimecycleModifier(timecycleName)
SetTimecycleModifierStrength(timecycleStrenght)
end
Citizen.Wait(1000)
timer = timer + 1000
end
ClearTimecycleModifier()
DrugsCreator.activeEffects[effectName] = false
else
DrugsCreator.activeEffects[effectName] = DrugsCreator.activeEffects[effectName] + duration
end
end
DrugsCreator.allEffects.foggy_visual = function(duration)
local effectName = "visual_color"
if(not DrugsCreator.activeEffects[effectName]) then
DrugsCreator.activeEffects[effectName] = duration
local timer = 0
local currentTimecycle = GetTimecycleModifierIndex()
local timecycleName = "graveyard_shootout"
local timecycleStrenght = 0.48
startTimecycle(timecycleName, timecycleStrenght)
while timer <= DrugsCreator.activeEffects[effectName] do
if(GetTimecycleModifierIndex() == -1 or GetTimecycleModifierIndex() == currentTimecycle) then
SetTimecycleModifier(timecycleName)
SetTimecycleModifierStrength(timecycleStrenght)
end
Citizen.Wait(1000)
timer = timer + 1000
end
ClearTimecycleModifier()
DrugsCreator.activeEffects[effectName] = false
else
DrugsCreator.activeEffects[effectName] = DrugsCreator.activeEffects[effectName] + duration
end
end
DrugsCreator.allEffects.blue_visual = function(duration)
local effectName = "visual_color"
if(not DrugsCreator.activeEffects[effectName]) then
DrugsCreator.activeEffects[effectName] = duration
local timer = 0
local currentTimecycle = GetTimecycleModifierIndex()
local timecycleName = "MichaelColorCodeBright"
local timecycleStrenght = 1.04
startTimecycle(timecycleName, timecycleStrenght)
while timer <= DrugsCreator.activeEffects[effectName] do
if(GetTimecycleModifierIndex() == -1 or GetTimecycleModifierIndex() == currentTimecycle) then
SetTimecycleModifier(timecycleName)
SetTimecycleModifierStrength(timecycleStrenght)
end
Citizen.Wait(1000)
timer = timer + 1000
end
ClearTimecycleModifier()
DrugsCreator.activeEffects[effectName] = false
else
DrugsCreator.activeEffects[effectName] = DrugsCreator.activeEffects[effectName] + duration
end
end
DrugsCreator.allEffects.armor50 = function()
AddArmourToPed(PlayerPedId(), 50)
end
DrugsCreator.allEffects.armor100 = function()
AddArmourToPed(PlayerPedId(), 100)
end
DrugsCreator.allEffects.health50 = function()
local plyPed = PlayerPedId()
local currentHealth = GetEntityHealth(plyPed)
local newHealth = currentHealth + 50
local maxHealth = GetEntityMaxHealth(plyPed)
if(newHealth > maxHealth) then
SetEntityHealth(plyPed, maxHealth)
else
SetEntityHealth(plyPed, newHealth)
end
end
DrugsCreator.allEffects.health100 = function()
local plyPed = PlayerPedId()
local maxHealth = GetEntityMaxHealth(plyPed)
SetEntityHealth(plyPed, maxHealth)
end
DrugsCreator.allEffects.sprint_faster = function(duration)
local effectName = "sprint_faster"
if(not DrugsCreator.activeEffects[effectName]) then
DrugsCreator.activeEffects[effectName] = duration
local ply = PlayerId()
local timer = 0
while timer <= DrugsCreator.activeEffects[effectName] do
SetRunSprintMultiplierForPlayer(ply, 1.3) -- About 1.49 doesn't work at all
Citizen.Wait(1000)
timer = timer + 1000
end
SetRunSprintMultiplierForPlayer(ply, 1.0)
DrugsCreator.activeEffects[effectName] = false
else
DrugsCreator.activeEffects[effectName] = DrugsCreator.activeEffects[effectName] + duration
end
end
DrugsCreator.allEffects.swim_faster = function(duration)
local effectName = "swim_faster"
if(not DrugsCreator.activeEffects[effectName]) then
DrugsCreator.activeEffects[effectName] = duration
local ply = PlayerId()
local timer = 0
while timer <= DrugsCreator.activeEffects[effectName] do
SetSwimMultiplierForPlayer(ply, 1.3)
Citizen.Wait(1000)
timer = timer + 1000
end
SetSwimMultiplierForPlayer(ply, 1.0)
DrugsCreator.activeEffects[effectName] = false
else
DrugsCreator.activeEffects[effectName] = DrugsCreator.activeEffects[effectName] + duration
end
end
DrugsCreator.allEffects.fall = function(duration)
local effectName = "fall"
if(not DrugsCreator.activeEffects[effectName]) then
DrugsCreator.activeEffects[effectName] = duration
local plyPed = PlayerPedId()
local timer = 0
while timer <= DrugsCreator.activeEffects[effectName] do
local randomNumber = math.random(1, 3)
if(randomNumber == 1) then
SetPedToRagdollWithFall(plyPed, 1500, 2000, 1, GetEntityForwardVector(plyPed), 5.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
end
Citizen.Wait(5000)
timer = timer + 5000
end
DrugsCreator.activeEffects[effectName] = false
else
DrugsCreator.activeEffects[effectName] = DrugsCreator.activeEffects[effectName] + duration
end
end
DrugsCreator.allEffects.infinite_stamina = function(duration)
local effectName = "infinite_stamina"
if(not DrugsCreator.activeEffects[effectName]) then
DrugsCreator.activeEffects[effectName] = duration
local ply = PlayerId()
local timer = 0
while timer <= DrugsCreator.activeEffects[effectName] do
ResetPlayerStamina(ply)
Citizen.Wait(1000)
timer = timer + 1000
end
DrugsCreator.activeEffects[effectName] = false
else
DrugsCreator.activeEffects[effectName] = DrugsCreator.activeEffects[effectName] + duration
end
end
DrugsCreator.allEffects.remove_old_effects = function()
for effectName, effectTime in pairs(DrugsCreator.activeEffects) do
if(effectTime) then
DrugsCreator.activeEffects[effectName] = 0
end
end
end
local function assumeDrug(type)
local plyPed = PlayerPedId()
if(type == "pill") then
local animDict = "mp_suicide"
local anim = "pill"
RequestAnimDict(animDict)
while not HasAnimDictLoaded(animDict) do
Citizen.Wait(0)
end
local animDuration = 3200
TaskPlayAnim(plyPed, animDict, anim, 4.0, 4.0, animDuration, 49, 0.0, 0, 0, 0)
Citizen.Wait(animDuration)
elseif(type == "drink") then
if(IsPedInAnyVehicle(plyPed, false)) then return end
TaskStartScenarioInPlace(plyPed, "world_human_drinking", 0, true)
Citizen.Wait(10000)
ClearPedTasks(plyPed)
elseif(type == "drink_soda") then
if(IsPedInAnyVehicle(plyPed, false)) then return end
local animDict = "amb@world_human_drinking@beer@male@idle_a"
local animName = "idle_c"
Utils.loadAnimDict(animDict)
local objectModel = DRINK_SODA_MODEL
Utils.loadModel(objectModel, 10)
local object = CreateObject(objectModel, GetEntityCoords(plyPed), true, false, false)
TaskPlayAnim(plyPed, animDict, animName, 8.0, 8.0, 10000, 16, 0.0, false, 0, false)
AttachEntityToEntity(object, plyPed, 91, 0.13620177363839, 0.051340419212092, -0.032412815738839, -78.198566893409, 0, 0, true, true, false, true, 1, true)
Citizen.Wait(10000)
DetachEntity(object, false, true)
DeleteObject(object)
ClearPedTasks(plyPed)
elseif(type == "smoke") then
if(IsPedInAnyVehicle(plyPed, false)) then return end
TaskStartScenarioInPlace(plyPed, "WORLD_HUMAN_SMOKING_POT", 0, true)
Citizen.Wait(10000)
ClearPedTasks(plyPed)
elseif(type == "snort") then
if(IsPedInAnyVehicle(plyPed, false)) then return end
local animDict = 'missfbi3_party'
local animName = 'snort_coke_b_male3'
Utils.loadAnimDict(animDict)
TaskPlayAnim(plyPed, animDict, animName, 8.0, 8.0, 7000, 16, 0.22, false, 0, false)
Citizen.Wait(7000)
ClearPedTasks(plyPed)
elseif(type == "needle") then
local syringeProp = GetHashKey('prop_syringe_01')
local syringeDict = "rcmpaparazzo1ig_4"
local syringeAnim = "miranda_shooting_up"
local syringeBone = 28422
local syringeOffset = vector3(0, 0, -0.045)
local syringeRot = vector3(0, 0, 0)
RequestAnimDict(syringeDict)
while not HasAnimDictLoaded(syringeDict) do
Citizen.Wait(150)
end
RequestModel(syringeProp)
while not HasModelLoaded(syringeProp) do
Citizen.Wait(150)
end
local syringeObj = CreateObject(syringeProp, 0.0, 0.0, 0.0, true, true, false)
local syringeBoneIndex = GetPedBoneIndex(plyPed, syringeBone)
SetCurrentPedWeapon(plyPed, "weapon_unarmed", true)
AttachEntityToEntity(syringeObj, plyPed, syringeBoneIndex, syringeOffset.x, syringeOffset.y, syringeOffset.z, syringeRot.x, syringeRot.y, syringeRot.z, false, false, false, false, 2, true)
SetModelAsNoLongerNeeded(syringeProp)
local pos = GetEntityCoords(plyPed)
local he = GetEntityHeading(plyPed)
TaskPlayAnim(plyPed, syringeDict, syringeAnim, 8.0, 8.0, 6000, 49, 0, 0, 0, 0)
RemoveAnimDict(syringeDict)
Citizen.Wait(1)
SetEntityAnimCurrentTime(plyPed, syringeDict, syringeAnim, 0.55)
while(IsEntityPlayingAnim(plyPed, syringeDict, syringeAnim, 3)) do
Citizen.Wait(0)
DisableControlAction(0,21,true) -- no sprint
DisableControlAction(0,24,true) -- no attack
DisableControlAction(0,25,true) -- no aim
DisableControlAction(0,47,true) -- no weapon
DisableControlAction(0,58,true) -- no weapon
DisableControlAction(0,263,true) -- no melee
DisableControlAction(0,264,true) -- no melee
DisableControlAction(0,257,true) -- no melee
DisableControlAction(0,140,true) -- no melee
DisableControlAction(0,141,true) -- no melee
DisableControlAction(0,142,true) -- no melee
DisableControlAction(0,143,true) -- no melee
DisableControlAction(0,37,true) -- no weapon select
DisableControlAction(0,22,true) -- no jump
end
SetEntityAsMissionEntity(syringeObj, false, false)
DeleteObject(syringeObj)
end
end
local function processCumulativeEffects(cumulativeEffects)
if not cumulativeEffects then return end
for i = 1, #cumulativeEffects do
local effect = cumulativeEffects[i]
local actionKey = effect.action .. effect.type:gsub("^%l", string.upper) -- Merge action + type ex. "increaseArmor"
local event = CUMULATIVE_EFFECTS_EVENTS[actionKey]
if event then
TriggerEvent(event, effect.amount)
end
end
end
local function drugEffects(type, effects, duration, cumulativeEffects)
assumeDrug(type)
processCumulativeEffects(cumulativeEffects)
duration = duration * 1000
for k, effect in pairs(effects) do
Citizen.CreateThread(function()
DrugsCreator.allEffects[effect](duration)
end)
end
end
RegisterNetEvent(Utils.eventsPrefix .. ':drugEffects', drugEffects)
--[[
██████ ██ ██ ███ ███ ██ ██ ██ █████ ████████ ██ ██ ██ ███████ ███████ ███████ ███████ ███████ ██████ ████████ ███████
██ ██ ██ ████ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ██ ██ ██ ████ ██ ██ ██ ██ ███████ ██ ██ ██ ██ █████ █████ █████ █████ █████ ██ ██ ███████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██████ ██████ ██ ██ ██████ ███████ ██ ██ ██ ██ ████ ███████ ███████ ██ ██ ███████ ██████ ██ ███████
]]
local fw = Framework.getFramework() -- 'ESX' o 'QBCore'
RegisterNetEvent(Utils.eventsPrefix .. ":cumulative:increaseArmor", function(amount)
local ped=PlayerPedId()
local oldArmor=GetPedArmour(ped)
local newArmor=math.min(100, oldArmor+amount)
if (newArmor<0) then return end
SetPedArmour(ped, newArmor)
end)
RegisterNetEvent(Utils.eventsPrefix .. ":cumulative:decreaseArmor", function(amount)
local ped=PlayerPedId()
local oldArmor=GetPedArmour(ped)
local newArmor=math.max(0, oldArmor-amount)
if (newArmor<0) then return end
SetPedArmour(ped, newArmor)
end)
RegisterNetEvent(Utils.eventsPrefix .. ":cumulative:increaseHealth", function(amount)
local ped=PlayerPedId()
local oldHealth=GetEntityHealth(ped)
local maxHealth=GetEntityMaxHealth(ped)
local newHealth=math.min(maxHealth, oldHealth+amount)
if (newHealth<=0) then return end
SetEntityHealth(ped, newHealth)
end)
RegisterNetEvent(Utils.eventsPrefix .. ":cumulative:decreaseHealth", function(amount)
local ped=PlayerPedId()
local oldHealth=GetEntityHealth(ped)
local newHealth=math.max(0, oldHealth-amount)
if (newHealth<0) then return end
SetEntityHealth(ped, newHealth)
end)
RegisterNetEvent(Utils.eventsPrefix .. ":cumulative:increaseThirst", function(amount)
if (fw == 'ESX') then
TriggerEvent('esx_status:add', 'thirst', -amount)
return
end
local pd = QBCore.Functions.GetPlayerData()
local thirst = (pd.metadata and pd.metadata.thirst) and pd.metadata.thirst or 100
local newThirst = math.max(0, math.min(100, thirst - amount)) -- Diminuisci l'idratazione
TriggerServerEvent('consumables:server:addThirst', newThirst)
end)
RegisterNetEvent(Utils.eventsPrefix .. ":cumulative:decreaseThirst", function(amount)
if (fw == 'ESX') then
TriggerEvent('esx_status:add', 'thirst', amount)
return
end
local pd = QBCore.Functions.GetPlayerData()
local thirst = (pd.metadata and pd.metadata.thirst) and pd.metadata.thirst or 100
local newThirst = math.max(0, math.min(100, thirst + amount)) -- Aumenta l'idratazione
TriggerServerEvent('consumables:server:addThirst', newThirst)
end)
RegisterNetEvent(Utils.eventsPrefix .. ":cumulative:increaseHunger", function(amount)
if (fw == 'ESX') then
TriggerEvent('esx_status:add', 'hunger', -amount)
return
end
local pd = QBCore.Functions.GetPlayerData()
local hunger = (pd.metadata and pd.metadata.hunger) and pd.metadata.hunger or 100
local newHunger = math.max(0, math.min(100, hunger - amount)) -- Diminuisci la sazietà
TriggerServerEvent('consumables:server:addHunger', newHunger)
end)
RegisterNetEvent(Utils.eventsPrefix .. ":cumulative:decreaseHunger", function(amount)
if (fw == 'ESX') then
TriggerEvent('esx_status:add', 'hunger', amount)
return
end
local pd = QBCore.Functions.GetPlayerData()
local hunger = (pd.metadata and pd.metadata.hunger) and pd.metadata.hunger or 100
local newHunger = math.max(0, math.min(100, hunger + amount)) -- Aumenta la sazietà
TriggerServerEvent('consumables:server:addHunger', newHunger)
end)
RegisterNetEvent(Utils.eventsPrefix .. ":cumulative:increaseStress", function(amount)
if (fw=='ESX') then
TriggerEvent('esx_status:add','stress',amount)
return
end
TriggerServerEvent('hud:server:GainStress', amount)
end)
RegisterNetEvent(Utils.eventsPrefix .. ":cumulative:decreaseStress", function(amount)
if (fw=='ESX') then
TriggerEvent('esx_status:add','stress',-amount)
return
end
TriggerServerEvent('hud:server:RelieveStress', amount)
end)