From 77c57ece720372db39baaba1060d8c4f31b59775 Mon Sep 17 00:00:00 2001 From: SticksDev Date: Sat, 24 Sep 2022 20:39:52 -0400 Subject: [PATCH] Add WIP files --- client/main.lua | 128 ++++++++++++++++++++++++++++++++++++++++++++++ config/config.lua | 8 +++ fxmanifest.lua | 21 ++++++++ server/main.lua | 125 ++++++++++++++++++++++++++++++++++++++++++++ utils/globals.lua | 24 +++++++++ 5 files changed, 306 insertions(+) create mode 100644 client/main.lua create mode 100644 config/config.lua create mode 100644 fxmanifest.lua create mode 100644 server/main.lua create mode 100644 utils/globals.lua diff --git a/client/main.lua b/client/main.lua new file mode 100644 index 0000000..507c1cb --- /dev/null +++ b/client/main.lua @@ -0,0 +1,128 @@ +if (clientConfig.showLogos) then + print(clientLogo) +end + +local status = { + coreLoaded = false, + eventsEnabled = false, + eventCurrentlyRunning = false +} + +local vehs = {"adder", "banshee", "bullet", "cheetah", "cyclone", "entityxf", "fmj", "gp1", "infernus", "italigtb", + "italigtb2", "nero", "nero2", "osiris", "penetrator", "pfister811", "reaper", "sc1", "sultanrs", "t20", + "tempesta", "turismor", "tyrus", "vacca", "vagner", "visione", "voltic", "xa21", "zentorno", "zorrusso"} + +local clientEvents = {{ + name = "chaosMod:SendStatus", + callback = function(data) + if (data.eventsEnabled ~= status.eventsEnabled) then + if (data.eventsEnabled) then + print("^1[ChaosMod Server ]^7: Events enabled") + else + print("^1[ChaosMod Server]^7: Events disabled") + end + end + + if (data.eventCurrentlyRunning ~= status.eventCurrentlyRunning) then + if (data.eventCurrentlyRunning) then + print("^1[ChaosMod Server]^7: Event started") + else + print("^1[ChaosMod Server]^7: Event ended") + end + end + + status.coreLoaded = data.coreLoaded + status.eventsEnabled = data.eventsEnabled + status.eventCurrentlyRunning = data.eventCurrentlyRunning + end +}, { + name = "chaosMod:RandomHealthDesc", + callback = function() + -- Descreese health by a random amount + local health = GetEntityHealth(PlayerPedId()) + + -- Make sure random health does not kill the player, so we set the minimum to 1 + local randomHealth = math.random(1, health) + + -- Set the new health + SetEntityHealth(PlayerPedId(), randomHealth) + end +}, { + name = "chaosMod:RandomHealthInc", + callback = function() + -- Increase health by a random amount + local health = GetEntityHealth(PlayerPedId()) + local randomHealth = math.random(1, health) + + -- Set the new health + SetEntityHealth(PlayerPedId(), randomHealth) + end +}, { + name = "chaosMod:SpawnRandomVehicles", + callback = function() + -- Check if the event is still running + if not status.eventCurrentlyRunning then + return + end + + -- Get a random vehicle + local veh = vehs[math.random(1, #vehs)] + local ped = GetPlayerPed(source) + local playerCoords = GetEntityCoords(ped) + local playerHeading = GetEntityHeading(ped) + + print(("^1[ChaosMod]^7: Spawning vehicle: %s (playerCords: %s)"):format(veh, playerCoords)) + + -- Spawn the vehicle + local veh = CreateVehicle(GetHashKey(veh), playerCoords.x, playerCoords.y, 50, playerHeading, true, false) + + -- Set the vehicle to be invincible + SetEntityInvincible(veh, true) + + SetTimeout(1000, function() + -- Delete + DeleteEntity(veh) + end) + + Wait(500) + end +}} +local commands = {{ + name = "eventtoggle", + desc = "Toggles the chaos events.", + func = function(source, args) + local enabled = args[1] == "true" and true or false + if args[1] == "true" or args[1] == "false" then + TriggerServerEvent('chaosMod:ToggleEvents', enabled) + + TriggerEvent('chat:addMessage', { + color = {255, 0, 0}, + multiline = true, + args = {"^1[ChaosMod]^7 ", ("Toggled events to be %s"):format(enabled and "^2enabled" or "^2disabled")} + }) + else + -- Chat incorrect usage + TriggerEvent('chat:addMessage', { + color = {255, 0, 0}, + multiline = true, + args = {"^1[ChaosMod]^7 Incorrect usage. Usage: /eventtoggle "} + }) + end + end +}} + +-- Register client events +for _, event in pairs(clientEvents) do + print("^1[ChaosMod Client]^7: Registering client event: " .. event.name) + RegisterNetEvent(event.name) + AddEventHandler(event.name, event.callback) +end + +-- Register commands +for _, command in pairs(commands) do + print("^1[ChaosMod Client]^7: Registering command: " .. command.name) + RegisterCommand(command.name, command.func) +end + +-- Call for intial status when client is loaded +TriggerServerEvent('chaosMod:GetStatus') diff --git a/config/config.lua b/config/config.lua new file mode 100644 index 0000000..a7d729d --- /dev/null +++ b/config/config.lua @@ -0,0 +1,8 @@ +clientConfig = { + showLogos = true, -- Show logos on server/client start +} + +serverConfig = { + showLogos = true, -- Show logos on server/client start + eventsEnabled = false, -- Enable events on server start +} \ No newline at end of file diff --git a/fxmanifest.lua b/fxmanifest.lua new file mode 100644 index 0000000..680ad0d --- /dev/null +++ b/fxmanifest.lua @@ -0,0 +1,21 @@ +-- Resource Metadata +fx_version 'cerulean' +games { 'gta5' } + +author 'SticksDev (sticks#2701)' +description 'A chaos mod for your FiveM server.' +version '1.0.0' + +-- Load server scripts +server_script { + 'config/*.lua', + 'utils/*.lua', + 'server/*.lua', +} + +-- Load client scripts +client_scripts { + 'config/*.lua', + 'utils/*.lua', + 'client/*.lua', +} \ No newline at end of file diff --git a/server/main.lua b/server/main.lua new file mode 100644 index 0000000..370d4f9 --- /dev/null +++ b/server/main.lua @@ -0,0 +1,125 @@ +if(serverConfig.showLogos) then + print(serverLogo) +end + +local status = { + eventsEnabled = false, + coreLoaded = false, + eventsAlreadyRunning = false, + eventCurrentlyRunning = false, +} + +local serverEvents = { + { + name = "chaosMod:GetStatus", + callback = function() + TriggerClientEvent('chaosMod:SendStatus', source, status) + end + }, + { + name = "chaosMod:ToggleEvents", + callback = function(arg) + status.eventsEnabled = arg + end + } +} + +local events = { + { + name = "Random Health Decrease", + desc = "Decreases your health by a random amount", + time = 5, + func = function() + TriggerClientEvent('chaosMod:RandomHealthDesc', -1) + end + }, + { + name = "Random Health Increase", + desc = "Increases your health by a random amount", + time = 5, + func = function() + TriggerClientEvent('chaosMod:RandomHealthInc', -1) + end + }, + -- { + -- name = "Spawn Random Vehicles", + -- desc = "Spawns random vehicles around you", + -- time = 60, + -- func = function() + -- TriggerClientEvent('chaosMod:SpawnRandomVehicles', -1) + -- end + -- } + { + name = "Random Explosions", + desc = "Spawns random explosions around you", + time = 60, + func = function() + TriggerClientEvent('chaosMod:RandomExplosions', -1) + end + } +} + +print("^1[ChaosMod]^7: Initializing...") + +-- Regsiter server events +for _, event in pairs(serverEvents) do + print("^1[ChaosMod]^7: Registering server event: " .. event.name) + RegisterServerEvent(event.name) + AddEventHandler(event.name, event.callback) +end + + +print("^1[ChaosMod]^7: Server events registered. Initializing core thread...") + +function eventMainHandler() + -- Choose a random event + local event = events[math.random(1, #events)] + + -- Chat that the event is starting + TriggerClientEvent('chat:addMessage', -1, { + color = { 255, 0, 0}, + multiline = true, + args = {"^1[ChaosMod]^7 ", "Starting event: " .. event.name} + }) + + -- Call the event + event.func() + + -- Set that event is already running + status.eventsAlreadyRunning = true + status.eventCurrentlyRunning = true + + -- Wait for the event to finish + Wait(event.time * 1000) + + -- Chat that the event is finished + TriggerClientEvent('chat:addMessage', -1, { + color = { 255, 0, 0}, + multiline = true, + args = {"^1[ChaosMod]^7 ", "Finished event: " .. event.name .. "! The next event will start in 30 seconds."} + }) + + -- Wait 30 seconds and then remove the already running status + -- SetTimeout(30000, function() + -- status.eventsAlreadyRunning = false + -- end) + + status.eventsAlreadyRunning = false +end + +-- Create a thread to handle events +Citizen.CreateThread(function() + while true do + Citizen.Wait(500) + + if status.eventsEnabled and not status.eventsAlreadyRunning then + eventMainHandler() + end + + -- Push an update to status + TriggerClientEvent('chaosMod:SendStatus', -1, status) + end +end) + +print("^1[ChaosMod]^7: Core thread initialized. Ready!") +status.coreLoaded = true \ No newline at end of file diff --git a/utils/globals.lua b/utils/globals.lua new file mode 100644 index 0000000..cea4b62 --- /dev/null +++ b/utils/globals.lua @@ -0,0 +1,24 @@ +clientLogo = [[ + + _____ _ __ __ _ + / ____| | | \/ | | | + | | | |__ __ _ ___ ___| \ / | ___ __| | + | | | '_ \ / _` |/ _ \/ __| |\/| |/ _ \ / _` | + | |____| | | | (_| | (_) \__ \ | | | (_) | (_| | + \_____|_| |_|\__,_|\___/|___/_| |_|\___/ \__,_| + + +]] + +serverLogo = [[ + + _____ _ __ __ _ + / ____| | | \/ | | | + | | | |__ __ _ ___ ___| \ / | ___ __| | + | | | '_ \ / _` |/ _ \/ __| |\/| |/ _ \ / _` | + | |____| | | | (_| | (_) \__ \ | | | (_) | (_| | + \_____|_| |_|\__,_|\___/|___/_| |_|\___/ \__,_| + + + "Wha'cha gonna do, stab me?" +]] \ No newline at end of file