local RSGCore = exports['rsg-core']:GetCoreObject() local speed = 0.0 local radarActive = false local stress = 0 local cleanliness = 100 local hunger = 100 local thirst = 100 local cashAmount = 0 local bankAmount = 0 local isLoggedIn = false local youhavemail = false local incinematic = false local inBathing = false local showUI = true RegisterNetEvent("HideAllUI") AddEventHandler("HideAllUI", function() showUI = not showUI if not showUI then Citizen.InvokeNative(0xC116E6DF68DCE667, 6, 2) -- ICON_HORSE_HEALTH / HIDE Citizen.InvokeNative(0xC116E6DF68DCE667, 7, 2) -- ICON_HORSE_HEALTH_CORE / HIDE Citizen.InvokeNative(0xC116E6DF68DCE667, 8, 2) -- ICON_HORSE_STAMINA / HIDE Citizen.InvokeNative(0xC116E6DF68DCE667, 9, 2) -- ICON_HORSE_STAMINA_CORE / HIDE else Citizen.InvokeNative(0xC116E6DF68DCE667, 6, 1) -- ICON_HORSE_HEALTH / HIDE Citizen.InvokeNative(0xC116E6DF68DCE667, 7, 1) -- ICON_HORSE_HEALTH_CORE / HIDE Citizen.InvokeNative(0xC116E6DF68DCE667, 8, 1) -- ICON_HORSE_STAMINA / HIDE Citizen.InvokeNative(0xC116E6DF68DCE667, 9, 1) -- ICON_HORSE_STAMINA_CORE / HIDE end end) -- functions local function GetShakeIntensity(stresslevel) local retval = 0.05 for _, v in pairs(Config.Intensity['shake']) do if stresslevel >= v.min and stresslevel <= v.max then retval = v.intensity break end end return retval end local function GetEffectInterval(stresslevel) local retval = 60000 for _, v in pairs(Config.EffectInterval) do if stresslevel >= v.min and stresslevel <= v.max then retval = v.timeout break end end return retval end -- Events RegisterNetEvent('RSGCore:Client:OnPlayerUnload', function() isLoggedIn = false end) RegisterNetEvent('RSGCore:Client:OnPlayerLoaded', function() isLoggedIn = true end) RegisterNetEvent('hud:client:UpdateNeeds', function(newHunger, newThirst) hunger = newHunger thirst = newThirst end) RegisterNetEvent('hud:client:UpdateThirst', function(newThirst) thirst = newThirst end) RegisterNetEvent('hud:client:UpdateStress', function(newStress) stress = newStress end) RegisterNetEvent('hud:client:UpdateCleanliness', function(newCleanliness) cleanliness = newCleanliness end) local voicelevel = 50 local voicetalking = false AddEventHandler('onClientMapStart', function() local getVoiceRange = exports.saltychat:GetVoiceRange(true) if getVoiceRange == 3.5 then voicelevel = 25 elseif getVoiceRange == 8.0 then voicelevel = 50 elseif getVoiceRange == 15.0 then voicelevel = 75 elseif getVoiceRange == 32.0 then voicelevel = 100 end end) RegisterNetEvent('SaltyChat_TalkStateChanged') AddEventHandler("SaltyChat_TalkStateChanged", function(isTalking) voicetalking = isTalking end) RegisterNetEvent('SaltyChat_VoiceRangeChanged') AddEventHandler("SaltyChat_VoiceRangeChanged", function(TalkRange, Index, Count) voicelevel = Index / Count end) -- Player HUD CreateThread(function() while true do Wait(250) if LocalPlayer.state['isLoggedIn'] and incinematic == false and inBathing == false and showUI then local show = true local player = PlayerPedId() local playerid = PlayerId() if IsPauseMenuActive() then show = false end -- local voice = 0 -- local talking = Citizen.InvokeNative(0x33EEF97F, playerid) -- if LocalPlayer.state['proximity'] then -- voice = LocalPlayer.state['proximity'].distance -- end --Citizen.Wait(1000) -- local getVoiceRange = exports.saltychat:GetVoiceRange(true) local playerPed = PlayerPedId() local coords = GetEntityCoords(playerPed) local metric = ShouldUseMetricTemperature() or ShouldUseMetricMeasurements() local temperature local stamina = tonumber(string.format("%.2f", Citizen.InvokeNative(0x0FF421E467373FCF, PlayerId(), Citizen.ResultAsFloat()))) local mounted = IsPedOnMount(PlayerPedId()) if metric then temperature = math.floor(GetTemperatureAtCoords(coords)) .. "°C" --Uncomment for celcius -- temperature = math.floor(GetTemperatureAtCoords(coords) * 9/5 + 32) .. "°F" --Comment out for celcius end ---@type any local horsehealth = 0 ---@type any local horsestam = 0 if mounted then local horse = GetMount(PlayerPedId()) local maxHealth = Citizen.InvokeNative(0x4700A416E8324EF3, horse, Citizen.ResultAsInteger()) local maxStamina = Citizen.InvokeNative(0xCB42AFE2B613EE55, horse, Citizen.ResultAsFloat()) horsehealth = tonumber( string.format( "%.2f", Citizen.InvokeNative(0x82368787EA73C0F7, horse) / maxHealth * 100 ) ) horsestam = tonumber( string.format( "%.2f", Citizen.InvokeNative(0x775A1CA7893AA8B5, horse, Citizen.ResultAsFloat()) / maxStamina * 100 ) ) end SendNUIMessage({ action = 'hudtick', show = show, health = GetEntityHealth(player) / 6, -- health in red dead max health is 600 so dividing by 6 makes it 100 here armor = Citizen.InvokeNative(0x2CE311A7, player), thirst = thirst, hunger = hunger, stress = stress, cleanliness = cleanliness, talking = voicetalking, temp = temperature, onHorse = mounted, horsehealth = horsehealth, horsestamina = horsestam, stamina = stamina, voice = voicelevel, youhavemail = youhavemail, }) else SendNUIMessage({ action = 'hudtick', show = false, }) end end end) CreateThread(function() while true do Wait(1000) local ped = PlayerPedId() local isMounted = IsPedOnMount(ped) or IsPedInAnyVehicle(ped) local IsBirdPostApproaching = exports['rsg-telegram']:IsBirdPostApproaching() if isMounted or IsBirdPostApproaching then if Config.MounttMinimap and showUI then if Config.MountCompass then SetMinimapType(3) else SetMinimapType(1) end else SetMinimapType(0) end else if Config.OnFootMinimap and showUI then SetMinimapType(1) else if Config.OnFootCompass and showUI then SetMinimapType(3) else SetMinimapType(0) end end end end end) -- Money HUD RegisterNetEvent('hud:client:ShowAccounts', function(type, amount) if type == 'cash' then SendNUIMessage({ action = 'show', type = 'cash', cash = string.format("%.2f", amount) }) elseif type == 'bloodmoney' then SendNUIMessage({ action = 'show', type = 'bloodmoney', bloodmoney = string.format("%.2f", amount) }) elseif type == 'bank' then SendNUIMessage({ action = 'show', type = 'bank', bank = string.format("%.2f", amount) }) end end) RegisterNetEvent('hud:client:OnMoneyChange', function(type, amount, isMinus) RSGCore.Functions.GetPlayerData(function(PlayerData) cashAmount = PlayerData.money['cash'] bloodmoneyAmount = PlayerData.money['bloodmoney'] bankAmount = PlayerData.money['bank'] end) SendNUIMessage({ action = 'update', cash = RSGCore.Shared.Round(cashAmount, 2), bloodmoney = RSGCore.Shared.Round(bloodmoneyAmount, 2), bank = RSGCore.Shared.Round(bankAmount, 2), amount = RSGCore.Shared.Round(amount, 2), minus = isMinus, type = type, }) end) -- Stress Gain CreateThread(function() -- Speeding while true do if RSGCore ~= nil --[[ and isLoggedIn ]] then local ped = PlayerPedId() if IsPedInAnyVehicle(ped, false) then speed = GetEntitySpeed(GetVehiclePedIsIn(ped, false)) * 2.237 --mph if speed >= Config.MinimumSpeed then TriggerServerEvent('hud:server:GainStress', math.random(2, 4)) end end end Wait(20000) end end) CreateThread(function() -- Shooting while true do if RSGCore ~= nil --[[ and isLoggedIn ]] then if IsPedShooting(PlayerPedId()) then if math.random() < Config.StressChance then TriggerServerEvent('hud:server:GainStress', math.random(1, 3)) end end end Wait(6) end end) -- Stress Screen Effects CreateThread(function() while true do local ped = PlayerPedId() local sleep = GetEffectInterval(stress) if stress >= 100 then local ShakeIntensity = GetShakeIntensity(stress) local FallRepeat = math.random(1, 2) local RagdollTimeout = (FallRepeat * 1750) ShakeGameplayCam('SMALL_EXPLOSION_SHAKE', ShakeIntensity) if not IsPedRagdoll(ped) and IsPedOnFoot(ped) and not IsPedSwimming(ped) then local player = PlayerPedId() SetPedToRagdollWithFall(player, RagdollTimeout, RagdollTimeout, 1, GetEntityForwardVector(player), 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) end Wait(500) for i = 1, FallRepeat, 1 do Wait(750) DoScreenFadeOut(200) Wait(1000) DoScreenFadeIn(200) ShakeGameplayCam('SMALL_EXPLOSION_SHAKE', ShakeIntensity) end elseif stress >= Config.MinimumStress then local ShakeIntensity = GetShakeIntensity(stress) ShakeGameplayCam('SMALL_EXPLOSION_SHAKE', ShakeIntensity) end Wait(sleep) end end) local ipea = false local cphi = false function GetDirtyEffect() local npd = "scr_fme_spawn_effects" local npn = "scr_animal_poop_flies" local cpd = npd local cpn = npn local bones = 1058 local po_x = -0.35 local po_y = 0.85 local po_z = 0.10 local pr_x = -90.0 local pr_y = -20.0 local pr_z = -170.00 local ps = 0.9 local pa_x = 0 local pa_y = 0 local pa_z = 0 if not ipea then cpd = npd cpn = npn if not Citizen.InvokeNative(0x65BB72F29138F5D6, GetHashKey(cpd)) then -- HasNamedPtfxAssetLoaded Citizen.InvokeNative(0xF2B2353BBC0D4E8F, GetHashKey(cpd)) -- RequestNamedPtfxAsset local counter = 0 while not Citizen.InvokeNative(0x65BB72F29138F5D6, GetHashKey(cpd)) and counter <= 300 do -- while not HasNamedPtfxAssetLoaded Citizen.Wait(0) end end if Citizen.InvokeNative(0x65BB72F29138F5D6, GetHashKey(cpd)) then -- HasNamedPtfxAssetLoaded Citizen.InvokeNative(0xA10DB07FC234DD12, cpd) -- UseParticleFxAsset cphi = Citizen.InvokeNative(0x9C56621462FFE7A6,cpn,PlayerPedId(),po_x,po_y,po_z,pr_x,pr_y,pr_z,bones,ps,pa_x,pa_y,pa_z) -- StartNetworkedParticleFxLoopedOnEntityBone ipea = true else print("Can't load ptfx dictionary!") end else if cphi then if Citizen.InvokeNative(0x9DD5AFF561E88F2A, cphi) then -- DoesParticleFxLoopedExist Citizen.InvokeNative(0x459598F579C98929, cphi, false) -- RemoveParticleFx end end cphi = false ipea = false end end exports("GetDirtyEffect", GetDirtyEffect) -- Dirty Fiels & Sickness Effects CreateThread(function() while true do local iPed = PlayerPedId() local sleep = cleanliness -- if IsPedOnFoot(iPed) and IsPedOnMount(iPed) and IsPedSitting(iPed) and IsPedAPlayer(iPed) and not IsPedSwimming(iPed) then if cleanliness >= Config.MinimumClean then GetDirtyEffect(iPed) end -- end Wait(sleep) end end) -- Cleanliness / Dirtylevel CreateThread(function() while true do Wait(30000) -- Every 1 minutes if RSGCore ~= nil then TriggerServerEvent('hud:server:RelieveCleanliness', 0.1) -- 3Hours from Fullbar to End. end end end) CreateThread(function() while true do Wait(10) if cleanliness < 20 then RSGCore.Functions.Notify("You smell like *****..", 'primary', 7500) Wait(60000) end end end) -- check telegrams CreateThread(function() while true do if isLoggedIn == true then RSGCore.Functions.TriggerCallback('hud:server:getTelegramsAmount', function(amount) if amount > 0 then youhavemail = true else youhavemail = false end end) end Wait(Config.TelegramCheck) end end) -- check cinematic and hide hud CreateThread(function() while true do if LocalPlayer.state['isLoggedIn'] then local cinematic = Citizen.InvokeNative(0xBF7C780731AADBF8, Citizen.ResultAsInteger()) local isBathingActive = exports['rsg-bathing']:IsBathingActive() if cinematic == 1 then incinematic = true else incinematic = false end if isBathingActive then inBathing = true else inBathing = false end end Wait(500) end end)
Write, Run & Share Lua code online using OneCompiler's Lua online compiler for free. It's one of the robust, feature-rich online compilers for Lua language, running the latest Lua version 5.4. Getting started with the OneCompiler's Lua editor is easy and fast. The editor shows sample boilerplate code when you choose language as Lua and start coding.
OneCompiler's Lua online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample Lua program which takes name as input and prints hello message with your name.
name = io.read("*a")
print ("Hello ", name)
Lua is a light weight embeddable scripting language which is built on top of C. It is used in almost all kind of applications like games, web applications, mobile applications, image processing etc. It's a very powerful, fast, easy to learn, open-source scripting language.
-- global variables
a = 10
-- local variables
local x = 30
Value Type | Description |
---|---|
number | Represents numbers |
string | Represents text |
nil | Differentiates values whether it has data or not |
boolean | Value can be either true or false |
function | Represents a sub-routine |
userdata | Represents arbitary C data |
thread | Represents independent threads of execution. |
table | Can hold any value except nil |
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while(condition)
do
--code
end
Repeat-Until is also used to iterate a set of statements based on a condition. It is very similar to Do-While, it is mostly used when you need to execute the statements atleast once.
repeat
--code
until( condition )
For loop is used to iterate a set of statements based on a condition.
for init,max/min value, increment
do
--code
end
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increase re-usuability and modularity.
optional_function_scope function function_name( argument1, argument2, argument3........, argumentn)
--code
return params with comma seperated
end