Scripts/resources/[custom_script]/mb-chicken/client/main.lua

431 lines
16 KiB
Lua
Raw Normal View History

2024-12-29 19:48:41 +00:00
local Keys = {
["ESC"] = 322, ["F1"] = 288, ["F2"] = 289, ["F3"] = 170, ["F5"] = 166, ["F6"] = 167, ["F7"] = 168, ["F8"] = 169, ["F9"] = 56, ["F10"] = 57,
["~"] = 243, ["1"] = 157, ["2"] = 158, ["3"] = 160, ["4"] = 164, ["5"] = 165, ["6"] = 159, ["7"] = 161, ["8"] = 162, ["9"] = 163, ["-"] = 84, ["="] = 83, ["BACKSPACE"] = 177,
["TAB"] = 37, ["Q"] = 44, ["W"] = 32, ["E"] = 38, ["R"] = 45, ["T"] = 245, ["Y"] = 246, ["U"] = 303, ["P"] = 199, ["["] = 39, ["]"] = 40, ["ENTER"] = 18,
["CAPS"] = 137, ["A"] = 34, ["S"] = 8, ["D"] = 9, ["F"] = 23, ["G"] = 47, ["H"] = 74, ["K"] = 311, ["L"] = 182,
["LEFTSHIFT"] = 21, ["Z"] = 20, ["X"] = 73, ["C"] = 26, ["V"] = 0, ["B"] = 29, ["N"] = 249, ["M"] = 244, [","] = 82, ["."] = 81,
["LEFTCTRL"] = 36, ["LEFTALT"] = 19, ["SPACE"] = 22, ["RIGHTCTRL"] = 70,
["HOME"] = 213, ["PAGEUP"] = 10, ["PAGEDOWN"] = 11, ["DELETE"] = 178,
["LEFT"] = 174, ["RIGHT"] = 175, ["TOP"] = 27, ["DOWN"] = 173,
["NENTER"] = 201, ["N4"] = 108, ["N5"] = 60, ["N6"] = 107, ["N+"] = 96, ["N-"] = 97, ["N7"] = 117, ["N8"] = 61, ["N9"] = 118
}
local QBCore = exports['qb-core']:GetCoreObject()
----------------------------------------------
--******************************************--
-- Global variable --
--******************************************--
----------------------------------------------
local isLoggedIn = true
local spawnChicken = false
local prop
local chickenPackage = false
local box_object, chicken_object, alive_chicken_object, knife_object
local isWorking = false
local chicken = {}
local getCaught = 0
----------------------------------------------
--******************************************--
-- Functions --
--******************************************--
----------------------------------------------
function StartCatching()
local ped = PlayerPedId()
local chickenModel = Config.SpawnChicken["model"]
getCaught = 0
for v in pairs(chicken) do
DeleteEntity(chicken[v])
end
DoScreenFadeOut(500)
Citizen.Wait(500)
SetEntityCoordsNoOffset(ped, Config.CatchAliveChicken["spawnCoords"].x, Config.CatchAliveChicken["spawnCoords"].y, Config.CatchAliveChicken["spawnCoords"].z, 0, 0, 1)
RequestModel(GetHashKey(chickenModel))
while not HasModelLoaded(GetHashKey(chickenModel)) do
Citizen.Wait(100)
end
for k, v in pairs(Config.SpawnChicken["quantity"]) do
chicken[k] = CreatePed(26, chickenModel, v["coords"].x, v["coords"].y, v["coords"].z, v["coords"].h, true, false)
TaskReactAndFleePed(chicken[k], ped)
end
Citizen.Wait(500)
DoScreenFadeIn(500)
spawnChicken = true
end
function CatchingChicken()
local ped = PlayerPedId()
local x,y,z = table.unpack(GetEntityCoords(ped))
local startCatching = true
chicken = {}
getCaught = 0
DoScreenFadeOut(500)
Citizen.Wait(500)
SetEntityCoordsNoOffset(ped, Config.CatchAliveChicken["coords"].x + 2, Config.CatchAliveChicken["coords"].y + 2, Config.CatchAliveChicken["coords"].z, 0, 0, 1)
DoScreenFadeIn(500)
prop = CreateObject(GetHashKey('hei_prop_heist_box'), x, y, z+0.2, true, true, true)
AttachEntityToEntity(prop, ped, GetPedBoneIndex(ped, 60309), 0.025, 0.08, 0.255, -145.0, 290.0, 0.0, true, true, false, true, 1, true)
while startCatching do
Citizen.Wait(250)
local coords = GetEntityCoords(ped)
local veh = GetClosestVehicle(coords.x, coords.y, coords.z, 3.000, 0, 70)
local vCoords = GetEntityCoords(veh)
local dist = #(coords - vCoords)
LoadDict('anim@heists@box_carry@')
if not IsEntityPlayingAnim(ped, "anim@heists@box_carry@", "idle", 3 ) and startCatching then
TaskPlayAnim(ped, 'anim@heists@box_carry@', "idle", 3.0, -8, -1, 63, 0, 0, 0, 0 )
end
if veh and (dist < 3.0) then
startCatching = false
MBNotify(Lang:t("notify.title"), Lang:t("success.put_alive_chicken_in_trunk"), "success")
LoadDict('anim@heists@narcotics@trash')
TaskPlayAnim(ped, 'anim@heists@narcotics@trash', "throw_a", 3.0, -8, -1, 63, 0, 0, 0, 0 )
Citizen.Wait(300)
ClearPedTasks(ped)
DeleteEntity(prop)
TriggerServerEvent("mb-chicken:server:AddAliveChicken")
end
end
end
function chickenGotCaught(pass)
LoadDict('move_jump')
TaskPlayAnim(PlayerPedId(), 'move_jump', 'dive_start_run', 8.0, -8.0, -1, 0, 0.0, 0, 0, 0)
Citizen.Wait(600)
SetPedToRagdoll(PlayerPedId(), 1000, 1000, 0, 0, 0, 0)
Citizen.Wait(1000)
local chance = math.random(1,100)
if chance <= Config.SpawnChicken["catching_chance"] then
getCaught = getCaught + 1
MBNotify(Lang:t("notify.title"), Lang:t("success.catch_success"), "success")
DeleteEntity(chicken[pass])
else
MBNotify(Lang:t("notify.title"), Lang:t("error.catch_failed"), "error")
end
end
function processAliveChicken(position)
local Player = PlayerPedId()
if Player then
local dict = 'anim@amb@business@coc@coc_unpack_cut_left@'
LoadDict(dict)
FreezeEntityPosition(Player,true)
TaskPlayAnim(Player, dict, "coke_cut_v1_coccutter", 3.0, -8, -1, 63, 0, 0, 0, 0 )
local PedCoords = GetEntityCoords(Player)
knife_object = CreateObject(GetHashKey('prop_knife'), PedCoords.x, PedCoords.y,PedCoords.z, true, true, true)
AttachEntityToEntity(knife_object, Player, GetPedBoneIndex(Player, 0xDEAD), 0.13, 0.14, 0.09, 40.0, 0.0, 0.0, false, false, false, false, 2, true)
if Player then
QBCore.Functions.Progressbar("cutting_chicken", Lang:t("process.cutting"), Config.SlaughteredChicken[position]["processing_time"], false, true, {disableMovement = true,
disableCarMovement = true,
disableMouse = false,
disableCombat = true,
disableInventory = true,
}, {}, {}, {}, function()
TriggerServerEvent("mb-chicken:server:SlaughteredChicken", position)
end, function()
end)
SetEntityHeading(Player, Config.SlaughteredChicken[position]["heading"])
alive_chicken_object = CreateObject(GetHashKey(Config.SlaughteredChicken[position]["prop"]["model"]), Config.SlaughteredChicken[position]["prop"]["coords"].x, Config.SlaughteredChicken[position]["prop"]["coords"].y, Config.SlaughteredChicken[position]["prop"]["coords"].z, true, true, true)
SetEntityRotation(alive_chicken_object, 90.0, 0.0, Config.SlaughteredChicken[position]["prop"]["heading"], 1, true)
Citizen.Wait(Config.SlaughteredChicken[position]["processing_time"])
end
FreezeEntityPosition(Player,false)
DeleteEntity(alive_chicken_object)
DeleteEntity(knife_object)
ClearPedTasks(Player)
end
end
function packChicken(position)
local Player = PlayerPedId()
local PedCoords = GetEntityCoords(Player)
if Player then
QBCore.Functions.Progressbar("packing_chicken", Lang:t("process.packing"), Config.PackagedChicken[position]["processing_time"], false, true, {disableMovement = true,
disableCarMovement = true,
disableMouse = false,
disableCombat = true,
disableInventory = true,
}, {}, {}, {}, function()
TriggerServerEvent("mb-chicken:server:PackagedChicken", position)
MBNotify(Lang:t("notify.title"), Lang:t("success.keep_going_or_sell"), "info")
end, function()
end)
SetEntityHeading(Player, Config.PackagedChicken[position]["heading"])
chicken_object = CreateObject(GetHashKey('prop_cs_steak'),PedCoords.x, PedCoords.y,PedCoords.z, true, true, true)
AttachEntityToEntity(chicken_object, Player, GetPedBoneIndex(Player, 0x49D9), 0.15, 0.0, 0.01, 0.0, 0.0, 0.0, false, false, false, false, 2, true)
box_object = CreateObject(GetHashKey('prop_cs_clothes_box'),PedCoords.x, PedCoords.y,PedCoords.z, true, true, true)
AttachEntityToEntity(box_object, Player, GetPedBoneIndex(Player, 57005), 0.13, 0.0, -0.16, 250.0, -30.0, 0.0, false, false, false, false, 2, true)
isWorking = true
LoadDict("anim@heists@ornate_bank@grab_cash_heels")
TaskPlayAnim(Player, "anim@heists@ornate_bank@grab_cash_heels", "grab", 8.0, -8.0, -1, 1, 0, false, false, false)
FreezeEntityPosition(Player, true)
Citizen.Wait(Config.PackagedChicken[position]["processing_time"])
ClearPedTasks(Player)
DeleteEntity(chicken_object)
DeleteEntity(box_object)
end
end
function StopPacking()
local ped = PlayerPedId()
local x,y,z = table.unpack(GetEntityCoords(ped))
FreezeEntityPosition(ped, false)
chickenPackage = true
prop = CreateObject(GetHashKey('hei_prop_heist_box'), x, y, z+0.2, true, true, true)
AttachEntityToEntity(prop, ped, GetPedBoneIndex(ped, 60309), 0.025, 0.08, 0.255, -145.0, 290.0, 0.0, true, true, false, true, 1, true)
isWorking = false
while chickenPackage do
Citizen.Wait(250)
local coords = GetEntityCoords(ped)
local veh = GetClosestVehicle(coords.x, coords.y, coords.z, 3.000, 0, 70)
local vCoords = GetEntityCoords(veh)
local dist = #(coords - vCoords)
LoadDict('anim@heists@box_carry@')
if not IsEntityPlayingAnim(ped, "anim@heists@box_carry@", "idle", 3 ) and chickenPackage == true then
TaskPlayAnim(ped, 'anim@heists@box_carry@', "idle", 3.0, -8, -1, 63, 0, 0, 0, 0 )
end
if veh and (dist < 3.0) then
chickenPackage = false
MBNotify(Lang:t("notify.title"), Lang:t("success.put_chicken_on_car"), 'success') --success
LoadDict('anim@heists@narcotics@trash')
TaskPlayAnim(ped, 'anim@heists@narcotics@trash', "throw_a", 3.0, -8, -1, 63, 0, 0, 0, 0 )
Citizen.Wait(1000)
ClearPedTasks(ped)
DeleteEntity(prop)
end
end
end
function LoadDict(dict)
RequestAnimDict(dict)
while not HasAnimDictLoaded(dict) do
Citizen.Wait(10)
end
end
function SellingChicken()
local ped = PlayerPedId()
local x,y,z = table.unpack(GetOffsetFromEntityInWorldCoords(ped, 0.0, 0.9, -0.98))
----
if ped then
QBCore.Functions.Progressbar("selling_chicken", Lang:t("process.selling"), Config.Selling["processing_time"], false, true, {
disableMovement = true,
disableCarMovement = true,
disableMouse = false,
disableCombat = true,
disableInventory = true,
}, {}, {}, {}, function() end, function()
end)
prop = CreateObject(GetHashKey('hei_prop_heist_box'), x, y, z, true, true, true)
SetEntityHeading(prop, GetEntityHeading(ped))
LoadDict('amb@medic@standing@tendtodead@idle_a')
TaskPlayAnim(ped, 'amb@medic@standing@tendtodead@idle_a', 'idle_a', 8.0, -8.0, -1, 1, 0.0, 0, 0, 0)
Citizen.Wait(5000)
LoadDict('amb@medic@standing@tendtodead@exit')
TaskPlayAnim(ped, 'amb@medic@standing@tendtodead@exit', 'exit', 8.0, -8.0, -1, 1, 0.0, 0, 0, 0)
ClearPedTasks(ped)
DeleteEntity(prop)
TriggerServerEvent("mb-chicken:server:SellingMoney")
end
end
----------------------------------------------
--******************************************--
-- Citizen Thread --
--******************************************--
----------------------------------------------
-- Load data
Citizen.CreateThread(function()
while QBCore.Functions.GetPlayerData().job == nil do
Citizen.Wait(10)
end
-- Display blips
displayAliveChickenBlips()
displaySlaughteredChicken()
displaySellingBlips()
PlayerData = QBCore.Functions.GetPlayerData()
end)
Citizen.CreateThread(function()
while (isLoggedIn) do
Citizen.Wait(1)
-- Catching chicken
local plyCoords = GetEntityCoords(PlayerPedId())
local startCoords = Config.CatchAliveChicken["coords"]
local distance = #(plyCoords - startCoords)
if distance <= 10.0 then
DrawMarker(27, Config.CatchAliveChicken["coords"].x, Config.CatchAliveChicken["coords"].y, Config.CatchAliveChicken["coords"].z-0.97, 0, 0, 0, 0, 0, 0, 0.90, 0.90, 0.90, 255, 255, 255, 200, 0, 0, 0, 0)
if distance <= 2.5 then
QBCore.Functions.DrawText3D(Config.CatchAliveChicken["coords"].x, Config.CatchAliveChicken["coords"].y, Config.CatchAliveChicken["coords"].z, Lang:t("action.get_started"))
if distance <= 0.5 then
if IsControlJustPressed(0, Keys['E']) then
StartCatching()
end
end
end
end
-- Processing chicken
for farm in pairs(Config.SlaughteredChicken) do
local processCoords = Config.SlaughteredChicken[farm]["coords"]
local dist = #(plyCoords - processCoords)
if dist <= 10.0 then
DrawMarker(27, Config.SlaughteredChicken[farm]["coords"].x, Config.SlaughteredChicken[farm]["coords"].y, Config.SlaughteredChicken[farm]["coords"].z-0.97, 0, 0, 0, 0, 0, 0, 0.90, 0.90, 0.90, 255, 255, 255, 200, 0, 0, 0, 0)
if dist < 2.5 then
QBCore.Functions.DrawText3D(Config.SlaughteredChicken[farm]["coords"].x, Config.SlaughteredChicken[farm]["coords"].y, Config.SlaughteredChicken[farm]["coords"].z, Lang:t("action.cut_alive_chicken"))
if dist < 1 then
if IsControlJustPressed(0, Keys['E']) then -- "E"
local hasItem = QBCore.Functions.HasItem('alive_chicken')
if hasItem then
processAliveChicken(farm)
Citizen.Wait(100)
else
MBNotify(Lang:t("notify.title"), Lang:t("error.no_alive_chicken"), "error")
end
end
end
end
end
end
-- Packing chicken
for spot in pairs(Config.PackagedChicken) do
local packCoords = Config.PackagedChicken[spot]["coords"]
local dist = #(plyCoords - packCoords)
if dist <= 10.0 then
DrawMarker(27, Config.PackagedChicken[spot]["coords"].x, Config.PackagedChicken[spot]["coords"].y, Config.PackagedChicken[spot]["coords"].z-0.97, 0, 0, 0, 0, 0, 0, 0.90, 0.90, 0.90, 255, 255, 255, 200, 0, 0, 0, 0)
if dist < 2.5 and not isWorking then
QBCore.Functions.DrawText3D(Config.PackagedChicken[spot]["coords"].x, Config.PackagedChicken[spot]["coords"].y, Config.PackagedChicken[spot]["coords"].z, Lang:t("action.pack_chicken"))
if dist < 1 then
if IsControlJustPressed(0, Keys['E']) then -- "E"
local hasItem = QBCore.Functions.HasItem('slaughtered_chicken')
if hasItem then
packChicken(spot)
Citizen.Wait(100)
else
MBNotify(Lang:t("notify.title"), Lang:t("error.no_slaughtered_chicken"), "error")
end
end
end
elseif dist < 2.5 and isWorking then
QBCore.Functions.DrawText3D(Config.PackagedChicken[spot]["coords"].x, Config.PackagedChicken[spot]["coords"].y, Config.PackagedChicken[spot]["coords"].z+0.5, Lang:t("action.stop_packing"))
QBCore.Functions.DrawText3D(Config.PackagedChicken[spot]["coords"].x, Config.PackagedChicken[spot]["coords"].y, Config.PackagedChicken[spot]["coords"].z, Lang:t("action.keep_packing"))
if dist < 1 then
if IsControlJustPressed(0, Keys['E']) then -- "E"
local hasItem = QBCore.Functions.HasItem("slaughtered_chicken")
if hasItem then
packChicken(spot)
Citizen.Wait(100)
else
MBNotify(Lang:t("notify.title"), Lang:t("error.no_slaughtered_chicken"), "error")
end
elseif IsControlJustPressed(0, Keys['G']) then
StopPacking()
end
end
end
end
end
-- Selling
local sellCoords = Config.Selling["coords"]
local sellDist = #(plyCoords - sellCoords)
if sellDist < 10.0 then
DrawMarker(27, Config.Selling["coords"].x, Config.Selling["coords"].y, Config.Selling["coords"].z-0.96, 0, 0, 0, 0, 0, 0, 2.20, 2.20, 2.20, 255, 255, 255, 200, 0, 0, 0, 0)
if sellDist <= 2.5 then
QBCore.Functions.DrawText3D(Config.Selling["coords"].x, Config.Selling["coords"].y, Config.Selling["coords"].z, Lang:t("action.sell_packing"))
if sellDist <= 0.5 then
if IsControlJustPressed(0, Keys['E']) then
local hasItem = QBCore.Functions.HasItem("packagedchicken")
if hasItem then
SellingChicken()
Citizen.Wait(100)
else
MBNotify(Lang:t("notify.title"), Lang:t("error.no_packaged_chicken"), "error")
end
end
end
end
end
end
end)
Citizen.CreateThread(function()
while true do
Citizen.Wait(5)
local plyCoords = GetEntityCoords(PlayerPedId(), false)
if spawnChicken then
for k, v in pairs(chicken) do
local chickenCoords = GetEntityCoords(v)
local dist = #(plyCoords - chickenCoords)
if dist < 1 then
QBCore.Functions.DrawText3D(chickenCoords.x, chickenCoords.y, chickenCoords.z+0.5, Lang:t("action.catching"))
if IsControlJustPressed(0, Keys['E']) then
chickenGotCaught(k)
end
end
end
if getCaught == #(Config.SpawnChicken["quantity"]) then
MBNotify(Lang:t("notify.title"), Lang:t("action.bring_close_to_vehicle"), "info")
spawnChicken = false
ClearPedTasks(PlayerPedId())
for v in pairs(chicken) do
DeleteEntity(v)
end
CatchingChicken()
end
else
Citizen.Wait(500)
end
end
end)
----------------------------------------------
--******************************************--
-- Register Event --
--******************************************--
----------------------------------------------
--On player load
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
QBCore.Functions.GetPlayerData(function(PlayerData)
PlayerJob = PlayerData.job
PlayerData = QBCore.Functions.GetPlayerData()
end)
isLoggedIn = true
end)