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
)