Scripts/resources/[qb]/[qb_crimes]/qb-weed/server/main.lua
2024-12-29 21:03:28 +01:00

193 lines
8.9 KiB
Lua

local QBCore = exports['qb-core']:GetCoreObject()
QBCore.Functions.CreateCallback('qb-weed:server:getBuildingPlants', function(_, cb, building)
local buildingPlants = {}
MySQL.query('SELECT * FROM house_plants WHERE building = ?', {building}, function(plants)
for i = 1, #plants, 1 do
buildingPlants[#buildingPlants+1] = plants[i]
end
if buildingPlants ~= nil then
cb(buildingPlants)
else
cb(nil)
end
end)
end)
RegisterNetEvent('qb-weed:server:placePlant', function(coords, sort, currentHouse)
local random = math.random(1, 2)
local gender
if random == 1 then
gender = "man"
else
gender = "woman"
end
MySQL.insert('INSERT INTO house_plants (building, coords, gender, sort, plantid) VALUES (?, ?, ?, ?, ?)',
{currentHouse, coords, gender, sort, math.random(111111, 999999)})
TriggerClientEvent('qb-weed:client:refreshHousePlants', -1, currentHouse)
end)
RegisterNetEvent('qb-weed:server:removeDeathPlant', function(building, plantId)
MySQL.query('DELETE FROM house_plants WHERE plantid = ? AND building = ?', {plantId, building})
TriggerClientEvent('qb-weed:client:refreshHousePlants', -1, building)
end)
CreateThread(function()
while true do
local housePlants = MySQL.query.await('SELECT * FROM house_plants', {})
for k, _ in pairs(housePlants) do
if housePlants[k].food >= 50 then
MySQL.update('UPDATE house_plants SET food = ? WHERE plantid = ?',
{(housePlants[k].food - 1), housePlants[k].plantid})
if housePlants[k].health + 1 < 100 then
MySQL.update('UPDATE house_plants SET health = ? WHERE plantid = ?',
{(housePlants[k].health + 1), housePlants[k].plantid})
end
end
if housePlants[k].food < 50 then
if housePlants[k].food - 1 >= 0 then
MySQL.update('UPDATE house_plants SET food = ? WHERE plantid = ?',
{(housePlants[k].food - 1), housePlants[k].plantid})
end
if housePlants[k].health - 1 >= 0 then
MySQL.update('UPDATE house_plants SET health = ? WHERE plantid = ?',
{(housePlants[k].health - 1), housePlants[k].plantid})
end
end
end
TriggerClientEvent('qb-weed:client:refreshPlantStats', -1)
Wait((60 * 1000) * 19.2)
end
end)
CreateThread(function()
while true do
local housePlants = MySQL.query.await('SELECT * FROM house_plants', {})
for k, _ in pairs(housePlants) do
if housePlants[k].health > 50 then
local Grow = math.random(1, 3)
if housePlants[k].progress + Grow < 100 then
MySQL.update('UPDATE house_plants SET progress = ? WHERE plantid = ?',
{(housePlants[k].progress + Grow), housePlants[k].plantid})
elseif housePlants[k].progress + Grow >= 100 then
if housePlants[k].stage ~= QBWeed.Plants[housePlants[k].sort]["highestStage"] then
if housePlants[k].stage == "stage-a" then
MySQL.update('UPDATE house_plants SET stage = ? WHERE plantid = ?',
{'stage-b', housePlants[k].plantid})
elseif housePlants[k].stage == "stage-b" then
MySQL.update('UPDATE house_plants SET stage = ? WHERE plantid = ?',
{'stage-c', housePlants[k].plantid})
elseif housePlants[k].stage == "stage-c" then
MySQL.update('UPDATE house_plants SET stage = ? WHERE plantid = ?',
{'stage-d', housePlants[k].plantid})
elseif housePlants[k].stage == "stage-d" then
MySQL.update('UPDATE house_plants SET stage = ? WHERE plantid = ?',
{'stage-e', housePlants[k].plantid})
elseif housePlants[k].stage == "stage-e" then
MySQL.update('UPDATE house_plants SET stage = ? WHERE plantid = ?',
{'stage-f', housePlants[k].plantid})
elseif housePlants[k].stage == "stage-f" then
MySQL.update('UPDATE house_plants SET stage = ? WHERE plantid = ?',
{'stage-g', housePlants[k].plantid})
end
MySQL.update('UPDATE house_plants SET progress = ? WHERE plantid = ?',
{0, housePlants[k].plantid})
end
end
end
end
TriggerClientEvent('qb-weed:client:refreshPlantStats', -1)
Wait((60 * 1000) * 9.6)
end
end)
QBCore.Functions.CreateUseableItem("weed_white-widow_seed", function(source, item)
TriggerClientEvent('qb-weed:client:placePlant', source, 'white-widow', item)
end)
QBCore.Functions.CreateUseableItem("weed_skunk_seed", function(source, item)
TriggerClientEvent('qb-weed:client:placePlant', source, 'skunk', item)
end)
QBCore.Functions.CreateUseableItem("weed_purple-haze_seed", function(source, item)
TriggerClientEvent('qb-weed:client:placePlant', source, 'purple-haze', item)
end)
QBCore.Functions.CreateUseableItem("weed_og-kush_seed", function(source, item)
TriggerClientEvent('qb-weed:client:placePlant', source, 'og-kush', item)
end)
QBCore.Functions.CreateUseableItem("weed_amnesia_seed", function(source, item)
TriggerClientEvent('qb-weed:client:placePlant', source, 'amnesia', item)
end)
QBCore.Functions.CreateUseableItem("weed_ak47_seed", function(source, item)
TriggerClientEvent('qb-weed:client:placePlant', source, 'ak47', item)
end)
QBCore.Functions.CreateUseableItem("weed_nutrition", function(source, item)
TriggerClientEvent('qb-weed:client:foodPlant', source, item)
end)
RegisterServerEvent('qb-weed:server:removeSeed', function(itemslot, seed)
local src = source
local Player = QBCore.Functions.GetPlayer(src)
Player.Functions.RemoveItem(seed, 1, itemslot)
end)
RegisterNetEvent('qb-weed:server:harvestPlant', function(house, amount, plantName, plantId)
local src = source
local Player = QBCore.Functions.GetPlayer(src)
local weedBag = Player.Functions.GetItemByName('empty_weed_bag')
local sndAmount = math.random(12, 16)
if weedBag ~= nil then
if weedBag.amount >= sndAmount then
if house ~= nil then
local result = MySQL.query.await(
'SELECT * FROM house_plants WHERE plantid = ? AND building = ?', {plantId, house})
if result[1] ~= nil then
Player.Functions.AddItem('weed_' .. plantName .. '_seed', amount)
Player.Functions.AddItem('weed_' .. plantName, sndAmount)
Player.Functions.RemoveItem('empty_weed_bag', sndAmount)
MySQL.query('DELETE FROM house_plants WHERE plantid = ? AND building = ?',
{plantId, house})
TriggerClientEvent('QBCore:Notify', src, Lang:t('text.the_plant_has_been_harvested'), 'success', 3500)
TriggerClientEvent('qb-weed:client:refreshHousePlants', -1, house)
else
TriggerClientEvent('QBCore:Notify', src, Lang:t('error.this_plant_no_longer_exists'), 'error', 3500)
end
else
TriggerClientEvent('QBCore:Notify', src, Lang:t('error.house_not_found'), 'error', 3500)
end
else
TriggerClientEvent('QBCore:Notify', src, Lang:t('error.you_dont_have_enough_resealable_bags'), 'error', 3500)
end
else
TriggerClientEvent('QBCore:Notify', src, Lang:t('error.you_Dont_have_enough_resealable_bags'), 'error', 3500)
end
end)
RegisterNetEvent('qb-weed:server:foodPlant', function(house, amount, plantName, plantId)
local src = source
local Player = QBCore.Functions.GetPlayer(src)
local plantStats = MySQL.query.await(
'SELECT * FROM house_plants WHERE building = ? AND sort = ? AND plantid = ?',
{house, plantName, tostring(plantId)})
TriggerClientEvent('QBCore:Notify', src,
QBWeed.Plants[plantName]["label"] .. ' | Nutrition: ' .. plantStats[1].food .. '% + ' .. amount .. '% (' ..
(plantStats[1].food + amount) .. '%)', 'success', 3500)
if plantStats[1].food + amount > 100 then
MySQL.update('UPDATE house_plants SET food = ? WHERE building = ? AND plantid = ?',
{100, house, plantId})
else
MySQL.update('UPDATE house_plants SET food = ? WHERE building = ? AND plantid = ?',
{(plantStats[1].food + amount), house, plantId})
end
Player.Functions.RemoveItem('weed_nutrition', 1)
TriggerClientEvent('qb-weed:client:refreshHousePlants', -1, house)
end)