πŸ”₯All scripts on our website are 50% off!πŸ”₯
Logo

Client config

Config, Noti, Lang = {}, {}, {}

-- $$$$$$\   $$$$$$\  $$\   $$\ $$$$$$$$\ $$$$$$\  $$$$$$\  $$\   $$\ $$$$$$$\   $$$$$$\ $$$$$$$$\ $$$$$$\  $$$$$$\  $$\   $$\
-- $$  __$$\ $$  __$$\ $$$\  $$ |$$  _____|\_$$  _|$$  __$$\ $$ |  $$ |$$  __$$\ $$  __$$\\__$$  __|\_$$  _|$$  __$$\ $$$\  $$ |
-- $$ /  \__|$$ /  $$ |$$$$\ $$ |$$ |        $$ |  $$ /  \__|$$ |  $$ |$$ |  $$ |$$ /  $$ |  $$ |     $$ |  $$ /  $$ |$$$$\ $$ |
-- $$ |      $$ |  $$ |$$ $$\$$ |$$$$$\      $$ |  $$ |$$$$\ $$ |  $$ |$$$$$$$  |$$$$$$$$ |  $$ |     $$ |  $$ |  $$ |$$ $$\$$ |
-- $$ |      $$ |  $$ |$$ \$$$$ |$$  __|     $$ |  $$ |\_$$ |$$ |  $$ |$$  __$$< $$  __$$ |  $$ |     $$ |  $$ |  $$ |$$ \$$$$ |
-- $$ |  $$\ $$ |  $$ |$$ |\$$$ |$$ |        $$ |  $$ |  $$ |$$ |  $$ |$$ |  $$ |$$ |  $$ |  $$ |     $$ |  $$ |  $$ |$$ |\$$$ |
-- \$$$$$$  | $$$$$$  |$$ | \$$ |$$ |      $$$$$$\ \$$$$$$  |\$$$$$$  |$$ |  $$ |$$ |  $$ |  $$ |   $$$$$$\  $$$$$$  |$$ | \$$ |
-- \______/  \______/ \__|  \__|\__|      \______| \______/  \______/ \__|  \__|\__|  \__|  \__|   \______| \______/ \__|  \__|

--TriggerServerEvent("bit-diseases:addDisease", playerID, "Flu")
--TriggerServerEvent("bit-diseases:removeDisease", playerID)
--exports["bit-diseases"]:getPlayerDisease(
--    playerID,
--    function(disease)
--        print(disease.name)
--    end
--)
-- Use "esx", "qb" or "qbox"
Config.Framework = "esx"
-- oxmysql, mysql-async or ghmattisql
Config.Mysql = "oxmysql"
-- Enable debug mode for disease timer
Config.debug = true
-- Vision loss effect
Config.visionLossFX = "HeistCelebPass"
-- Radius to infect other players
Config.infectionRadius = 5.0
-- Time elapsed between seizures. Default: 5 minutes (300000 ms)
Config.seizureCooldown = 300000
-- Duration of seizures. Default: 30 seconds
Config.seizureTime = 30
-- Medicine cure percentage. It is a percentage, if the illness lasts 100 minutes and 30% is applied, after taking the medicine you will have 70 minutes of illness left.
Config.medicineCure = 30
-- Admin command to assign diseases. Example: /adddisease [ID] [Disease]
Config.addDiseaseCommand = "adddisease"
-- Admin command to remove diseases. Example: /removedisease [ID]
Config.removeDiseaseCommand = "removedisease"

-- $$\   $$\  $$$$$$\ $$$$$$$$\ $$$$$$\ $$$$$$$$\ $$$$$$\  $$$$$$\   $$$$$$\ $$$$$$$$\ $$$$$$\  $$$$$$\  $$\   $$\  $$$$$$\
-- $$$\  $$ |$$  __$$\\__$$  __|\_$$  _|$$  _____|\_$$  _|$$  __$$\ $$  __$$\\__$$  __|\_$$  _|$$  __$$\ $$$\  $$ |$$  __$$\
-- $$$$\ $$ |$$ /  $$ |  $$ |     $$ |  $$ |        $$ |  $$ /  \__|$$ /  $$ |  $$ |     $$ |  $$ /  $$ |$$$$\ $$ |$$ /  \__|
-- $$ $$\$$ |$$ |  $$ |  $$ |     $$ |  $$$$$\      $$ |  $$ |      $$$$$$$$ |  $$ |     $$ |  $$ |  $$ |$$ $$\$$ |\$$$$$$\
-- $$ \$$$$ |$$ |  $$ |  $$ |     $$ |  $$  __|     $$ |  $$ |      $$  __$$ |  $$ |     $$ |  $$ |  $$ |$$ \$$$$ | \____$$\
-- $$ |\$$$ |$$ |  $$ |  $$ |     $$ |  $$ |        $$ |  $$ |  $$\ $$ |  $$ |  $$ |     $$ |  $$ |  $$ |$$ |\$$$ |$$\   $$ |
-- $$ | \$$ | $$$$$$  |  $$ |   $$$$$$\ $$ |      $$$$$$\ \$$$$$$  |$$ |  $$ |  $$ |   $$$$$$\  $$$$$$  |$$ | \$$ |\$$$$$$  |
-- \__|  \__| \______/   \__|   \______|\__|      \______| \______/ \__|  \__|  \__|   \______| \______/ \__|  \__| \______/

function notifications(notitype, message, time)
    -- Change this trigger for your notification system keeping the variables
    --
    --QBCore:
    --QBCore.Functions.Notify(message, notitype, time)
    --
    --ESX:
    --TriggerEvent("esx:showNotification", message, notitype, time)
end

-- Notifications types:
Noti.info = "info"
Noti.check = "success"
Noti.error = "error"

-- Notification time:
Noti.time = 5000

-- $$\        $$$$$$\  $$\   $$\  $$$$$$\  $$\   $$\  $$$$$$\   $$$$$$\  $$$$$$$$\
-- $$ |      $$  __$$\ $$$\  $$ |$$  __$$\ $$ |  $$ |$$  __$$\ $$  __$$\ $$  _____|
-- $$ |      $$ /  $$ |$$$$\ $$ |$$ /  \__|$$ |  $$ |$$ /  $$ |$$ /  \__|$$ |
-- $$ |      $$$$$$$$ |$$ $$\$$ |$$ |$$$$\ $$ |  $$ |$$$$$$$$ |$$ |$$$$\ $$$$$\
-- $$ |      $$  __$$ |$$ \$$$$ |$$ |\_$$ |$$ |  $$ |$$  __$$ |$$ |\_$$ |$$  __|
-- $$ |      $$ |  $$ |$$ |\$$$ |$$ |  $$ |$$ |  $$ |$$ |  $$ |$$ |  $$ |$$ |
-- $$$$$$$$\ $$ |  $$ |$$ | \$$ |\$$$$$$  |\$$$$$$  |$$ |  $$ |\$$$$$$  |$$$$$$$$\
-- \________|\__|  \__|\__|  \__| \______/  \______/ \__|  \__| \______/ \________|

Lang.diseaseInfo = "You have a disease"
Lang.diseaseCured = "You have been cured of the disease"
Lang.cantDrive = "You can't drive with this disease"
Lang.usedMedicine = "You have used"
Lang.diseaseNotFound = "Disease not found"
Lang.noPlayer = "You must provide a player ID"
Lang.noDisease = "You must provide a disease name"

-- $$$$$$$\  $$$$$$\  $$$$$$\  $$$$$$$$\  $$$$$$\   $$$$$$\  $$$$$$$$\  $$$$$$\
-- $$  __$$\ \_$$  _|$$  __$$\ $$  _____|$$  __$$\ $$  __$$\ $$  _____|$$  __$$\
-- $$ |  $$ |  $$ |  $$ /  \__|$$ |      $$ /  $$ |$$ /  \__|$$ |      $$ /  \__|
-- $$ |  $$ |  $$ |  \$$$$$$\  $$$$$\    $$$$$$$$ |\$$$$$$\  $$$$$\    \$$$$$$\
-- $$ |  $$ |  $$ |   \____$$\ $$  __|   $$  __$$ | \____$$\ $$  __|    \____$$\
-- $$ |  $$ |  $$ |  $$\   $$ |$$ |      $$ |  $$ |$$\   $$ |$$ |      $$\   $$ |
-- $$$$$$$  |$$$$$$\ \$$$$$$  |$$$$$$$$\ $$ |  $$ |\$$$$$$  |$$$$$$$$\ \$$$$$$  |
-- \_______/ \______| \______/ \________|\__|  \__| \______/ \________| \______/

Diseases = {
    ["flu"] = {
        name = "Flu",
        movementFaults = false,
        cough = true,
        canDrive = true,
        drivingFaults = true,
        canUseWeapons = true,
        canJump = true,
        canRun = false,
        wheelchair = false,
        crutches = false,
        visionLoss = true,
        vomits = true,
        seizures = false,
        minutes = 120,
        contagious = true, -- require cough = true
        medicine = "paracetamol"
    },
    ["cold"] = {
        name = "Cold",
        movementFaults = true,
        cough = true,
        canDrive = true,
        drivingFaults = true,
        canUseWeapons = true,
        canJump = true,
        canRun = true,
        wheelchair = false,
        crutches = false,
        visionLoss = false,
        vomits = false,
        minutes = 90,
        contagious = true, -- require cough = true
        medicine = "paracetamol"
    },
    ["legfracture"] = {
        name = "Leg Fracture",
        movementFaults = true,
        cough = false,
        canDrive = false,
        drivingFaults = false,
        canUseWeapons = true,
        canJump = false,
        canRun = false,
        wheelchair = false,
        crutches = true,
        visionLoss = false,
        vomits = false,
        minutes = 300,
        contagious = false, -- require cough = true
        medicine = "antiinflammatory"
    },
    ["concussion"] = {
        name = "Concussion",
        movementFaults = true,
        cough = false,
        canDrive = false,
        drivingFaults = false,
        canUseWeapons = false,
        canJump = false,
        canRun = false,
        wheelchair = true,
        crutches = false,
        visionLoss = false,
        vomits = false,
        minutes = 180,
        contagious = false, -- require cough = true
        medicine = "analgesic"
    },
    ["internalbleeding"] = {
        name = "Internal Bleeding",
        movementFaults = true,
        cough = false,
        canDrive = false,
        drivingFaults = false,
        canUseWeapons = false,
        canJump = false,
        canRun = false,
        wheelchair = true,
        crutches = false,
        visionLoss = false,
        vomits = true,
        minutes = 60,
        contagious = false, -- require cough = true
        medicine = "bloodtransfusion"
    },
    ["legdislocation"] = {
        name = "Leg Dislocation",
        movementFaults = true,
        cough = false,
        canDrive = false,
        drivingFaults = false,
        canUseWeapons = true,
        canJump = false,
        canRun = false,
        wheelchair = false,
        crutches = true,
        visionLoss = false,
        vomits = false,
        minutes = 200,
        contagious = false, -- require cough = true
        medicine = "antiinflammatory"
    },
    ["covid19"] = {
        name = "Covid-19",
        movementFaults = true,
        cough = true,
        canDrive = true,
        drivingFaults = true,
        canUseWeapons = true,
        canJump = true,
        canRun = false,
        wheelchair = false,
        crutches = false,
        visionLoss = true,
        vomits = true,
        minutes = 600,
        contagious = true, -- require cough = true
        medicine = "vaccine"
    },
    ["gastroenteritis"] = {
        name = "Gastroenteritis",
        movementFaults = false,
        cough = false,
        canDrive = true,
        drivingFaults = true,
        canUseWeapons = true,
        canJump = false,
        canRun = false,
        wheelchair = false,
        crutches = false,
        visionLoss = false,
        vomits = false,
        minutes = 150,
        contagious = true, -- require cough = true
        medicine = "antidiarrheal"
    },
    ["chickenpox"] = {
        name = "Chickenpox",
        movementFaults = false,
        cough = true,
        canDrive = true,
        drivingFaults = true,
        canUseWeapons = true,
        canJump = true,
        canRun = true,
        wheelchair = false,
        crutches = false,
        visionLoss = false,
        vomits = false,
        minutes = 480,
        contagious = true, -- require cough = true
        medicine = "antipyretic"
    },
    ["food_poisoning"] = {
        name = "Food Poisoning",
        movementFaults = true,
        cough = false,
        canDrive = false,
        drivingFaults = true,
        canUseWeapons = true,
        canJump = false,
        canRun = false,
        wheelchair = false,
        crutches = false,
        visionLoss = true,
        vomits = true,
        seizures = false,
        minutes = 90,
        contagious = false, -- require cough = true
        medicine = "antidiarrheal"
    },
    ["pneumonia"] = {
        name = "Pneumonia",
        movementFaults = true,
        cough = true,
        canDrive = false,
        drivingFaults = true,
        canUseWeapons = true,
        canJump = false,
        canRun = false,
        wheelchair = false,
        crutches = false,
        visionLoss = true,
        vomits = false,
        seizures = false,
        minutes = 360,
        contagious = true, -- require cough = true
        medicine = "antibiotic"
    },
    ["sinusitis"] = {
        name = "Sinusitis",
        movementFaults = true,
        cough = true,
        canDrive = true,
        drivingFaults = true,
        canUseWeapons = true,
        canJump = true,
        canRun = true,
        wheelchair = false,
        crutches = false,
        visionLoss = false,
        vomits = false,
        seizures = false,
        minutes = 180,
        contagious = true, -- require cough = true
        medicine = "antibiotic"
    },
    ["bronchitis"] = {
        name = "Bronchitis",
        movementFaults = true,
        cough = true,
        canDrive = true,
        drivingFaults = true,
        canUseWeapons = true,
        canJump = true,
        canRun = false,
        wheelchair = false,
        crutches = false,
        visionLoss = true,
        vomits = false,
        seizures = false,
        minutes = 240,
        contagious = true, -- require cough = true
        medicine = "antibiotic"
    },
    ["hepatitis"] = {
        name = "Hepatitis",
        movementFaults = true,
        cough = true,
        canDrive = false,
        drivingFaults = false,
        canUseWeapons = false,
        canJump = false,
        canRun = false,
        wheelchair = false,
        crutches = false,
        visionLoss = true,
        vomits = false,
        seizures = false,
        minutes = 720,
        contagious = true, -- require cough = true
        medicine = "antiviral"
    },
    ["malaria"] = {
        name = "Malaria",
        movementFaults = true,
        cough = true,
        canDrive = false,
        drivingFaults = false,
        canUseWeapons = false,
        canJump = false,
        canRun = false,
        wheelchair = false,
        crutches = false,
        visionLoss = true,
        vomits = false,
        seizures = true,
        minutes = 900,
        contagious = true, -- require cough = true
        medicine = "antimalarial"
    }
}

Server config

-- $$\      $$\ $$$$$$$$\ $$$$$$$\  $$$$$$\  $$$$$$\  $$$$$$\ $$\   $$\ $$$$$$$$\       $$$$$$\ $$$$$$$$\ $$$$$$$$\ $$\      $$\  $$$$$$\
-- $$$\    $$$ |$$  _____|$$  __$$\ \_$$  _|$$  __$$\ \_$$  _|$$$\  $$ |$$  _____|      \_$$  _|\__$$  __|$$  _____|$$$\    $$$ |$$  __$$\
-- $$$$\  $$$$ |$$ |      $$ |  $$ |  $$ |  $$ /  \__|  $$ |  $$$$\ $$ |$$ |              $$ |     $$ |   $$ |      $$$$\  $$$$ |$$ /  \__|
-- $$\$$\$$ $$ |$$$$$\    $$ |  $$ |  $$ |  $$ |        $$ |  $$ $$\$$ |$$$$$\            $$ |     $$ |   $$$$$\    $$\$$\$$ $$ |\$$$$$$\
-- $$ \$$$  $$ |$$  __|   $$ |  $$ |  $$ |  $$ |        $$ |  $$ \$$$$ |$$  __|           $$ |     $$ |   $$  __|   $$ \$$$  $$ | \____$$\
-- $$ |\$  /$$ |$$ |      $$ |  $$ |  $$ |  $$ |  $$\   $$ |  $$ |\$$$ |$$ |              $$ |     $$ |   $$ |      $$ |\$  /$$ |$$\   $$ |
-- $$ | \_/ $$ |$$$$$$$$\ $$$$$$$  |$$$$$$\ \$$$$$$  |$$$$$$\ $$ | \$$ |$$$$$$$$\       $$$$$$\    $$ |   $$$$$$$$\ $$ | \_/ $$ |\$$$$$$  |
-- \__|     \__|\________|\_______/ \______| \______/ \______|\__|  \__|\________|      \______|   \__|   \________|\__|     \__| \______/

Citizen.CreateThread(
    function()
        local medicines = {}
        for k, v in pairs(Diseases) do
            medicines[v.name] = v.medicine
        end
        if Config.Framework == "esx" then
            for _, medicine in pairs(medicines) do
                ESX.RegisterUsableItem(
                    medicine,
                    function(source)
                        local xPlayer = ESX.GetPlayerFromId(source)
                        if not xPlayer then
                            return
                        end
                        local identifier = xPlayer.getIdentifier()
                        local result =
                            SqlFunc(
                            Config.Mysql,
                            "fetchAll",
                            "SELECT disease FROM users WHERE identifier = @identifier",
                            {["@identifier"] = identifier}
                        )

                        if not result or not result[1] or not result[1].disease then
                            return
                        end

                        local disease = json.decode(result[1].disease)
                        if not disease or not disease.name or not disease.minutes then
                            return
                        end

                        local diseaseName = disease.name
                        local medicineItem = medicines[diseaseName]
                        if not medicineItem then
                            return
                        end

                        local percentage = (Config.medicineCure or 0) / 100
                        local minutes = disease.minutes or 1
                        local newMinutes = math.max(0, math.floor(minutes - (minutes * percentage)))

                        disease.minutes = newMinutes

                        SqlFunc(
                            Config.Mysql,
                            "execute",
                            "UPDATE users SET disease = @disease WHERE identifier = @identifier",
                            {
                                ["@identifier"] = identifier,
                                ["@disease"] = json.encode(disease)
                            }
                        )

                        usersList[identifier] = usersList[identifier] or {}
                        usersList[identifier].disease = disease
                        xPlayer.removeInventoryItem(medicine, 1)

                        TriggerClientEvent("bit-diseases:sendData", source, usersList[identifier])
                        TriggerClientEvent("bit-diseases:playerPillsAnimation", source)
                        TriggerClientEvent(
                            "bit-diseases:notifications",
                            source,
                            Noti.check,
                            Lang.usedMedicine .. " " .. medicineItem,
                            5000
                        )
                    end
                )
            end
        else
            for _, medicine in pairs(medicines) do
                QBCore.Functions.CreateUseableItem(
                    medicine,
                    function(source, item)
                        local Player = QBCore.Functions.GetPlayer(source)
                        if not Player then
                            return
                        end
                        local identifier = Player.PlayerData.citizenid
                        local result =
                            SqlFunc(
                            Config.Mysql,
                            "fetchAll",
                            "SELECT disease FROM players WHERE citizenid = @citizenid",
                            {["@citizenid"] = identifier}
                        )

                        if not result or not result[1] or not result[1].disease then
                            return
                        end

                        local disease = json.decode(result[1].disease)
                        if not disease or not disease.name or not disease.minutes then
                            return
                        end

                        local diseaseName = disease.name
                        local medicineItem = medicines[diseaseName]
                        if not medicineItem then
                            return
                        end

                        local percentage = (Config.medicineCure or 0) / 100
                        local minutes = disease.minutes or 1
                        local newMinutes = math.max(0, math.floor(minutes - (minutes * percentage)))

                        disease.minutes = newMinutes

                        SqlFunc(
                            Config.Mysql,
                            "execute",
                            "UPDATE players SET disease = @disease WHERE citizenid = @citizenid",
                            {
                                ["@citizenid"] = identifier,
                                ["@disease"] = json.encode(disease)
                            }
                        )

                        usersList[identifier] = usersList[identifier] or {}
                        usersList[identifier].disease = disease
                        Player.Functions.RemoveItem(medicine, 1)

                        TriggerClientEvent("bit-diseases:sendData", source, usersList[identifier])
                        TriggerClientEvent("bit-diseases:playerPillsAnimation", source)
                        TriggerClientEvent(
                            "bit-diseases:notifications",
                            source,
                            Noti.check,
                            Lang.usedMedicine .. " " .. medicineItem,
                            5000
                        )
                    end
                )
            end
        end
    end
)