Put the plt_lumberjack & plt_lumberjack-streams files in your resource file. Add them to your server.cfg.
Check the config.lua. and configure to script settings how you want.
If you are using ESX or QB-Core frameworks; you don't have to make any changes. it is ready to work. Otherwise check #Framework money & job functions
The script has no requirements. ui and notifications itself. if you want you can use other notification system. check #Notifications system
If you want to do something when vehicle spawns, like giving a key to the player, changing the fuel of the vehicle or something #Arrangement about spawned vehicles
You should set the outfit values according to your own server #Clothing System. The clothes changing system can work standalone. If you want, you can use the qb-clothing or esx_skin system.
If you are use ESX & QB-Core frameworks you don't need to change or add anything, they already been added.
server/server.lua
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
if ESX then
function PltAddMoney(src,money)
...
end
else
QBCore = exports['qb-core']:GetCoreObject()
function PltAddMoney(src,money)
...
end
end
client/jobs.lua
RegisterNetEvent('esx:playerLoaded')
AddEventHandler('esx:playerLoaded', function(PlayerData)
JobUpdate(PlayerData.job.name,PlayerData.job.grade)
end)
RegisterNetEvent('esx:setJob')
AddEventHandler('esx:setJob', function(job)
JobUpdate(job.name,job.grade)
end)
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
local QBCore = exports['qb-core']:GetCoreObject()
while QBCore.Functions.GetPlayerData().job == nil do Citizen.Wait(1000) end
local PlayerData = QBCore.Functions.GetPlayerData()
JobUpdate(PlayerData.job.name,PlayerData.job.grade.level)
end)
RegisterNetEvent('QBCore:Client:OnJobUpdate')
AddEventHandler('QBCore:Client:OnJobUpdate', function(JobInfo)
JobUpdate(JobInfo.name,JobInfo.grade.level)
end)
Delete the ESX and QB-Core function before,
I added the necessary codes, but they are comment lines, activate the codes.
fxmanifest.lua
server_scripts {
'@vrp/lib/utils.lua',
...
}
server/server.lua
local Tunnel = module("vrp", "lib/Tunnel")
local Proxy = module("vrp", "lib/Proxy")
vRP = Proxy.getInterface("vRP")
function PltAddMoney(src,money)
local user_id = vRP.getUserId(src)
vRP.giveBankMoney(user_id,money)
end
AddEventHandler("vRP:playerSpawn",function(user_id, source, first_spawn)
if first_spawn then
local job = vRP.getUserGroupByType({user_id,"job"})
TriggerClientEvent('plt_lumberjack:JobUpdate',user_id,job,false)
end
end)
AddEventHandler("vRP:playerJoinGroup", function(user_id, group, gtype)
if gtype == "job" then
TriggerClientEvent('plt_lumberjack:JobUpdate',user_id,jobName,false)
end
end)
Delete the ESX and QB-Core function before, add the following function to give money in your own framework.
server/server.lua
function PltAddMoney(src,money)
-- add "money" amount of money to the player whose id is "src", for example;
-- local xPlayer = ESX.GetPlayerFromId(src)
-- xPlayer.addMoney(money)
end
Job information should be updated when the player loaded and player's profession is updated, as in the example following
from any where
--following is when will trigger from CLIENT side.
TriggerEvent('plt_lumberjack:JobUpdate',jobName,jobGrade)
--following is when will trigger from Server side.
TriggerServerEvent('plt_lumberjack:JobUpdate',source,jobName,jobGrade)
I added the event that will be triggered, you don't need to do anything about it.
---- Adjust the 'PLT.Clothing' table following according to the job clothes on your server.
PLT.Clothing={
male ={
--[[ Arms ]] ['arms'] = 67,
--[[ Tshirt ]] ['tshirt_1'] = 85, ['tshirt_2'] = 0,
--[[ Torso Parts ]] ['torso_1'] = 177, ['torso_2'] = 11,
..
},
female={..}
}
function ChangeOutfit()
ChangeOutfitStandalone()-- if you want to use the esx_skin or qb-clothing system; Deactivate the this function then Activate the following which you want.
--ChangeOutfitEsx() -- if you want to use the esx_skin system; Deactivate the ChangeOutfitStandalone() function then Activate the this function.
--ChangeOutfitQB() -- if you want to use the qb-clothing system; Deactivate the ChangeOutfitStandalone() function then Activate the this function.
TriggerEvent("plt_lumberjack:ClotheChangeAnim")
end
Notifications system
client/other.lua
function Notification(type, message, time)
SendNUIMessage({statu="single", type = type, text = message, duration = time})
--exports['mythic_ notify']:DoCustomHudText(type, message, time)
--exports['okokNotify']:Alert("Lumberjack", message, time, type)
--TriggerEvent('okokNotify:Alert', "Lumberjack", message, time, type)
--TriggerEvent('QBCore:Notify', message, type, time)
end
client/other.lua
function permenantNotification(msg, thisFrame, beep, duration)
permenantNotificationText = msg
--[[ AddTextEntry('pltLumberjackNotify', msg)
if thisFrame then
DisplayHelpTextThisFrame('pltLumberjackNotify', false)
else
if beep == nil then beep = true end
BeginTextCommandDisplayHelp('pltLumberjackNotify')
EndTextCommandDisplayHelp(0, false, beep, duration or -1)
end ]]
end
Arrangement about spawned vehicles
client/other.lua
function SpawnedVehicle(vehicle, needGiveKey, vehicleModelName)
if needGiveKey then
TriggerEvent("vehiclekeys:client:SetOwner", string.gsub(GetVehicleNumberPlateText(vehicle), '^%s*(.-)%s*$', '%1'))
TriggerServerEvent('garage:addKeys', GetVehicleNumberPlateText(vehicle))
TriggerServerEvent("plateEveryone",GetVehicleNumberPlateText(vehicle))
if vehicleModelName == PLT.Vehicles.forklift or vehicleModelName == PLT.Vehicles.telehandler then
SetVehicleFuelLevel(vehicle, 99.9) DecorSetFloat(vehicle, "_FUEL_LEVEL", GetVehicleFuelLevel(vehicle))
else -- here for trucks
SetVehicleFuelLevel(vehicle, 99.9) DecorSetFloat(vehicle, "_FUEL_LEVEL", GetVehicleFuelLevel(vehicle))
end
--next line vehicle max car mod
--SetVehicleMod(vehicle, 11, (GetNumVehicleMods(vehicle, tonumber(modType)) - 1), false) SetVehicleMod(vehicle, 12, (GetNumVehicleMods(vehicle, tonumber(modType)) - 1), false) SetVehicleMod(vehicle, 13, (GetNumVehicleMods(vehicle, tonumber(modType)) - 1), false) SetVehicleMod(vehicle, 15, (GetNumVehicleMods(vehicle, tonumber(modType)) - 1), false) SetVehicleMod(vehicle, 16, (GetNumVehicleMods(vehicle, tonumber(modType)) - 1), false) ToggleVehicleMod(vehicle, 18, true)
end
end