Skip to content

Commit

Permalink
refactor: bpt_unicornjob inventory implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
bitpredator committed Jan 12, 2024
1 parent 24733cf commit f5fb4c5
Show file tree
Hide file tree
Showing 11 changed files with 139 additions and 59 deletions.
3 changes: 2 additions & 1 deletion .github/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,5 @@ fix lint error: unused argument last; accessing undefined variable Invoke; unuse
64. [bpt_crafting]: fix: correct ingredients to use @bitpredator
65. [bpt_streetfight]: chore: supports map point through local translation @bitpredator
67. [bpt_teleport]: chore: set English as the default language @bitpredator
68. [bpt_teleport]: chore: update the license file and readme for the year 2024 @bitpredator
68. [bpt_teleport]: chore: update the license file and readme for the year 2024 @bitpredator
69. [bpt_unicornjob]: refactor: bpt_unicornjob inventory implementation @bitpredator
4 changes: 2 additions & 2 deletions server-data/resources/[bpt_addons]/bpt_unicornjob/LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -632,7 +632,7 @@ state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 2022-2023 bitpredator
Copyright (C) 2022-2024 bitpredator

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Expand All @@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

<program> Copyright (C) 2022-2023 bitpredator
<program> Copyright (C) 2022-2024 bitpredator
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
Expand Down
15 changes: 9 additions & 6 deletions server-data/resources/[bpt_addons]/bpt_unicornjob/README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
# bpt_unicornjob
<h1 align='center'>bpt_unicornjob</a></h1>
<p align='center'><a href='https://discord.gg/ksGfNvDEfq'>Discord</a>

Copyright (C) 2022-2023 bitpredator
Copyright (C) 2022-2024 bitpredator

This program is a project for the fivem community, you have legal permission to distribute and / or modify it only if you have forked this repository, if it is not a fork repository, the version will be removed from the DMCA request.
This program Is free software: you can redistribute it And/Or modify it under the terms Of the GNU General Public License As published by the Free Software Foundation, either version 3 Of the License, Or (at your option) any later version.

This program Is distributed In the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty Of MERCHANTABILITY Or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License For more details.

ATTENTION:
You are not authorized to change the name of the resource.
You are not authorized to change the name of the resource and the resources within it.

If you want to contribute you can open a pull request.

You are not authorized to sell this software (this is a free project).
You are not authorized to sell this software (this is free project).

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_
('unicorn',2,'driver','barrista',36,'{"hair_2":0,"hair_color_2":0,"torso_1":26,"bags_1":0,"helmet_2":0,"chain_2":0,"eyebrows_3":0,"makeup_3":0,"makeup_2":0,"tshirt_1":57,"makeup_1":0,"bags_2":0,"makeup_4":0,"eyebrows_4":0,"chain_1":0,"lipstick_4":0,"bproof_2":0,"hair_color_1":0,"decals_2":0,"pants_2":4,"age_2":0,"glasses_2":0,"ears_2":0,"arms":11,"lipstick_1":0,"ears_1":-1,"mask_2":0,"sex":0,"lipstick_3":0,"helmet_1":-1,"shoes_2":0,"beard_2":0,"beard_1":0,"lipstick_2":0,"beard_4":0,"glasses_1":0,"bproof_1":0,"mask_1":0,"decals_1":0,"hair_1":0,"eyebrows_2":0,"beard_3":0,"age_1":0,"tshirt_2":0,"skin":0,"torso_2":0,"eyebrows_1":0,"face":0,"shoes_1":10,"pants_1":24}', '{"hair_2":0,"hair_color_2":0,"torso_1":57,"bags_1":0,"helmet_2":0,"chain_2":0,"eyebrows_3":0,"makeup_3":0,"makeup_2":0,"tshirt_1":38,"makeup_1":0,"bags_2":0,"makeup_4":0,"eyebrows_4":0,"chain_1":0,"lipstick_4":0,"bproof_2":0,"hair_color_1":0,"decals_2":0,"pants_2":1,"age_2":0,"glasses_2":0,"ears_2":0,"arms":21,"lipstick_1":0,"ears_1":-1,"mask_2":0,"sex":1,"lipstick_3":0,"helmet_1":-1,"shoes_2":0,"beard_2":0,"beard_1":0,"lipstick_2":0,"beard_4":0,"glasses_1":5,"bproof_1":0,"mask_1":0,"decals_1":1,"hair_1":0,"eyebrows_2":0,"beard_3":0,"age_1":0,"tshirt_2":0,"skin":0,"torso_2":0,"eyebrows_1":0,"face":0,"shoes_1":49,"pants_1":11}'),
('unicorn',3,'responsible','responsabile',48,'{"hair_2":0,"hair_color_2":0,"torso_1":26,"bags_1":0,"helmet_2":0,"chain_2":0,"eyebrows_3":0,"makeup_3":0,"makeup_2":0,"tshirt_1":57,"makeup_1":0,"bags_2":0,"makeup_4":0,"eyebrows_4":0,"chain_1":0,"lipstick_4":0,"bproof_2":0,"hair_color_1":0,"decals_2":0,"pants_2":4,"age_2":0,"glasses_2":0,"ears_2":0,"arms":11,"lipstick_1":0,"ears_1":-1,"mask_2":0,"sex":0,"lipstick_3":0,"helmet_1":-1,"shoes_2":0,"beard_2":0,"beard_1":0,"lipstick_2":0,"beard_4":0,"glasses_1":0,"bproof_1":0,"mask_1":0,"decals_1":0,"hair_1":0,"eyebrows_2":0,"beard_3":0,"age_1":0,"tshirt_2":0,"skin":0,"torso_2":0,"eyebrows_1":0,"face":0,"shoes_1":10,"pants_1":24}', '{"hair_2":0,"hair_color_2":0,"torso_1":57,"bags_1":0,"helmet_2":0,"chain_2":0,"eyebrows_3":0,"makeup_3":0,"makeup_2":0,"tshirt_1":38,"makeup_1":0,"bags_2":0,"makeup_4":0,"eyebrows_4":0,"chain_1":0,"lipstick_4":0,"bproof_2":0,"hair_color_1":0,"decals_2":0,"pants_2":1,"age_2":0,"glasses_2":0,"ears_2":0,"arms":21,"lipstick_1":0,"ears_1":-1,"mask_2":0,"sex":1,"lipstick_3":0,"helmet_1":-1,"shoes_2":0,"beard_2":0,"beard_1":0,"lipstick_2":0,"beard_4":0,"glasses_1":5,"bproof_1":0,"mask_1":0,"decals_1":1,"hair_1":0,"eyebrows_2":0,"beard_3":0,"age_1":0,"tshirt_2":0,"skin":0,"torso_2":0,"eyebrows_1":0,"face":0,"shoes_1":49,"pants_1":11}'),
('unicorn',4,'boss','Direttore',0,'{"hair_2":0,"hair_color_2":0,"torso_1":29,"bags_1":0,"helmet_2":0,"chain_2":0,"eyebrows_3":0,"makeup_3":0,"makeup_2":0,"tshirt_1":31,"makeup_1":0,"bags_2":0,"makeup_4":0,"eyebrows_4":0,"chain_1":0,"lipstick_4":0,"bproof_2":0,"hair_color_1":0,"decals_2":0,"pants_2":4,"age_2":0,"glasses_2":0,"ears_2":0,"arms":1,"lipstick_1":0,"ears_1":-1,"mask_2":0,"sex":0,"lipstick_3":0,"helmet_1":-1,"shoes_2":0,"beard_2":0,"beard_1":0,"lipstick_2":0,"beard_4":0,"glasses_1":0,"bproof_1":0,"mask_1":0,"decals_1":0,"hair_1":0,"eyebrows_2":0,"beard_3":0,"age_1":0,"tshirt_2":0,"skin":0,"torso_2":4,"eyebrows_1":0,"face":0,"shoes_1":10,"pants_1":24}', '{"hair_2":0,"hair_color_2":0,"torso_1":57,"bags_1":0,"helmet_2":0,"chain_2":0,"eyebrows_3":0,"makeup_3":0,"makeup_2":0,"tshirt_1":38,"makeup_1":0,"bags_2":0,"makeup_4":0,"eyebrows_4":0,"chain_1":0,"lipstick_4":0,"bproof_2":0,"hair_color_1":0,"decals_2":0,"pants_2":1,"age_2":0,"glasses_2":0,"ears_2":0,"arms":21,"lipstick_1":0,"ears_1":-1,"mask_2":0,"sex":1,"lipstick_3":0,"helmet_1":-1,"shoes_2":0,"beard_2":0,"beard_1":0,"lipstick_2":0,"beard_4":0,"glasses_1":5,"bproof_1":0,"mask_1":0,"decals_1":1,"hair_1":0,"eyebrows_2":0,"beard_3":0,"age_1":0,"tshirt_2":0,"skin":0,"torso_2":0,"eyebrows_1":0,"face":0,"shoes_1":49,"pants_1":11}')
;
;
68 changes: 43 additions & 25 deletions server-data/resources/[bpt_addons]/bpt_unicornjob/client/main.lua
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
local HasAlreadyEnteredMarker, CurrentAction, CurrentActionData = false, false, false
local LastZone, CurrentActionMsg
local HasAlreadyEnteredMarker
local CurrentAction, CurrentActionMsg, CurrentActionData = nil, '', {}
local LastZone

RegisterNetEvent('esx:playerLoaded')
AddEventHandler('esx:playerLoaded', function(xPlayer)
Expand Down Expand Up @@ -59,7 +60,7 @@ function OpenCloakroom()
end
end)
end
ESX.CloseContext()
ESX.CloseContext()
end, function()
CurrentAction = 'cloakroom'
CurrentActionMsg = _U('cloakroom_prompt')
Expand All @@ -75,7 +76,7 @@ function OpenVehicleSpawnerMenu()
if Config.EnableSocietyOwnedVehicles then
ESX.TriggerServerCallback('esx_society:getVehiclesInGarage', function(vehicles)

if #vehicles == 0 then
if #vehicles == 0 then
ESX.ShowNotification(_U('empty_garage'))
return
end
Expand All @@ -94,7 +95,7 @@ function OpenVehicleSpawnerMenu()
return
end

if element.value == nil then
if element.value == nil then
print("ERROR: Context menu clicked item value is nil!")
return
end
Expand All @@ -111,7 +112,8 @@ function OpenVehicleSpawnerMenu()
end)
end, 'unicorn')
else -- not society vehicles
if #Config.AuthorizedVehicles == 0 then

if #Config.AuthorizedVehicles == 0 then
ESX.ShowNotification(_U('empty_garage'))
return
end
Expand All @@ -129,13 +131,15 @@ function OpenVehicleSpawnerMenu()
ESX.ShowNotification(_U('spawnpoint_blocked'))
return
end
if element.value == nil then

if element.value == nil then
print("ERROR: Context menu clicked item value is nil!")
return
end

ESX.TriggerServerCallback("bpt_unicornjob:SpawnVehicle", function()
ESX.ShowNotification(_U('vehicle_spawned'), "success")
end, element.value, {plate = "UNIC JOB"})
end, element.value, {plate = "CORN JOB"})
ESX.CloseContext()
end, function()
CurrentAction = 'vehicle_spawner'
Expand All @@ -146,14 +150,17 @@ function OpenVehicleSpawnerMenu()
end

function DeleteJobVehicle()

if Config.EnableSocietyOwnedVehicles then
local vehicleProps = ESX.Game.GetVehicleProperties(CurrentActionData.vehicle)
TriggerServerEvent('esx_society:putVehicleInGarage', 'unicorn', vehicleProps)
ESX.Game.DeleteVehicle(CurrentActionData.vehicle)
else
if IsInAuthorizedVehicle() then
ESX.Game.DeleteVehicle(CurrentActionData.vehicle)

if Config.MaxInService ~= -1 then
TriggerServerEvent('esx_service:disableService', 'unicorn')
end
else
ESX.ShowNotification(_U('only_unicorn'))
end
Expand All @@ -162,7 +169,9 @@ end

function OpenUnicornActionsMenu()
local elements = {
{unselectable = true, icon = "fas fa-unicorn", title = _U('unicorn')}
{unselectable = true, icon = "fas fa-unicorn", title = _U('unicorn')},
{icon = "fas fa-box",title = _U('deposit_stock'),value = 'put_stock'},
{icon = "fas fa-box", title = _U('take_stock'), value = 'get_stock'}
}

if Config.EnablePlayerManagement and ESX.PlayerData.job ~= nil and ESX.PlayerData.job.grade_name == 'boss' then
Expand All @@ -173,8 +182,15 @@ function OpenUnicornActionsMenu()
}
end

ESX.OpenContext("right", elements, function(_,element)
if element.value == 'boss_actions' then
ESX.OpenContext("right", elements, function(_, element)
if Config.OxInventory and (element.value == 'put_stock' or element.value == 'get_stock') then
exports.ox_inventory:openInventory('stash', 'society_unicorn')
return ESX.CloseContext()
elseif element.value == 'put_stock' then
OpenPutStocksMenu()
elseif element.value == 'get_stock' then
OpenGetStocksMenu()
elseif element.value == 'boss_actions' then
TriggerEvent('esx_society:openBossMenu', 'unicorn', function(_, menu)
menu.close()
end)
Expand All @@ -192,12 +208,12 @@ function OpenMobileUnicornActionsMenu()
{icon = "fas fa-scroll", title = _U('billing'), value = "billing"},
}

ESX.OpenContext("right", elements, function(_,element)
ESX.OpenContext("right", elements, function(_, element)
if element.value == "billing" then
local elements2 = {
{unselectable = true, icon = "fas fa-unicorn", title = element.title},
{title = "Amount", input = true, inputType = "number", inputMin = 1, inputMax = 250000, inputPlaceholder = "Amount to bill.."},
{icon = "fas fa-check-double", title = "Confirm", value = "confirm"}
{title = _U('amount'), input = true, inputType = "number", inputMin = 1, inputMax = 250000, inputPlaceholder = _U('bill_amount')},
{icon = "fas fa-check-double", title = _U('confirm'), value = "confirm"}
}

ESX.OpenContext("right", elements2, function(menu2)
Expand Down Expand Up @@ -271,11 +287,11 @@ CreateThread(function()
local blip = AddBlipForCoord(Config.Zones.UnicornActions.Pos.x, Config.Zones.UnicornActions.Pos.y,
Config.Zones.UnicornActions.Pos.z)

SetBlipSprite(blip, 121)
SetBlipDisplay(blip, 4)
SetBlipScale(blip, 1.0)
SetBlipColour(blip, 27)
SetBlipAsShortRange(blip, true)
SetBlipSprite(blip, 121)
SetBlipDisplay(blip, 4)
SetBlipScale(blip, 1.0)
SetBlipColour(blip, 27)
SetBlipAsShortRange(blip, true)

BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName(_U('blip_unicorn'))
Expand All @@ -290,23 +306,24 @@ CreateThread(function()

local coords = GetEntityCoords(PlayerPedId())
local isInMarker, currentZone = false
local inVeh = IsPedInAnyVehicle(PlayerPedId())
local inVeh = IsPedInAnyVehicle(PlayerPedId())

for k, v in pairs(Config.Zones) do
local zonePos = vector3(v.Pos.x, v.Pos.y, v.Pos.z)
local distance = #(coords - zonePos)

if v.Type ~= -1 and distance < Config.DrawDistance then
sleep = 0
if k == "VehicleDeleter" then
if k == "VehicleDeleter" then
if inVeh then
DrawMarker(v.Type, v.Pos.x, v.Pos.y, v.Pos.z, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, v.Size.x, v.Size.y,
v.Size.z, v.Color.r, v.Color.g, v.Color.b, 100, false, false, 2, v.Rotate, nil, nil, false)
v.Size.z, v.Color.r, v.Color.g, v.Color.b, 100, false, false, 2, v.Rotate, nil, nil, false)
end
else
DrawMarker(v.Type, v.Pos.x, v.Pos.y, v.Pos.z, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, v.Size.x, v.Size.y,
v.Size.z, v.Color.r, v.Color.g, v.Color.b, 100, false, false, 2, v.Rotate, nil, nil, false)
v.Size.z, v.Color.r, v.Color.g, v.Color.b, 100, false, false, 2, v.Rotate, nil, nil, false)
end

end

if distance < v.Size.x then
Expand Down Expand Up @@ -355,7 +372,8 @@ CreateThread(function()
end)

RegisterCommand('unicornmenu', function()
if not ESX.PlayerData.dead and Config.EnablePlayerManagement and ESX.PlayerData.job and ESX.PlayerData.job.name == 'unicorn' then
if not ESX.PlayerData.dead and Config.EnablePlayerManagement and ESX.PlayerData.job and ESX.PlayerData.job.name ==
'unicorn' then
OpenMobileUnicornActionsMenu()
end
end, false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ Config.DrawDistance = 10.0 -- How close do you need to be for the
Config.EnablePlayerManagement = true -- Enable society managing.
Config.EnableSocietyOwnedVehicles = false
Config.Locale = 'en'
Config.OxInventory = ESX.GetConfig().OxInventory

Config.AuthorizedVehicles = {
{model = 'rentalbus', label = 'rentalbus'}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
fx_version 'adamant'

game 'gta5'

description 'bpt_unicornjob'
lua54 'yes'
version '0.0.4'
version '1.0.0'

shared_script '@es_extended/imports.lua'

Expand Down
11 changes: 10 additions & 1 deletion server-data/resources/[bpt_addons]/bpt_unicornjob/locales/en.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ Locales['en'] = {
['cloakroom_prompt'] = 'press [E] to access the cloakroom.',
['wear_citizen'] = 'civilian clothes',
['wear_work'] = 'work clothes',
-- Inventory
['deposit_stock'] = 'Deposit stock',
['take_stock'] = 'Take stock',
['have_deposited'] = 'Have deposited',
['quantity_invalid'] = 'Quantity invelid',
-- garage
['spawner_prompt'] = 'press [E] to access the Garage.',
["vehicle_spawned"] = "Vehicle picked up successfully!",
Expand All @@ -19,5 +24,9 @@ Locales['en'] = {
['no_players_near'] = 'no players nearby',
['boss_actions'] = 'Boss action',
['blip_unicorn'] = 'unicorn',
['unicorn'] = 'unicorn'
['unicorn'] = 'unicorn',
-- billing
['bill_amount'] = "Amount to bill..",
['confirm'] = "Confirm",
['amount'] = "Amount"
}
11 changes: 10 additions & 1 deletion server-data/resources/[bpt_addons]/bpt_unicornjob/locales/it.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ Locales['it'] = {
['cloakroom_prompt'] = 'premi [E] per accedere al guardaroba.',
['wear_citizen'] = 'abiti civili',
['wear_work'] = 'abiti da lavoro',
-- Inventory
['deposit_stock'] = 'Depositare',
['take_stock'] = 'Prendi',
['have_deposited'] = 'Hai depositato',
['quantity_invalid'] = 'Quantità non valida',
-- garage
['spawner_prompt'] = 'premi [E] per accedere al Garage.',
["vehicle_spawned"] = "Veicolo ritirato con successo!",
Expand All @@ -19,5 +24,9 @@ Locales['it'] = {
['no_players_near'] = 'nessun giocatore nelle vicinanze',
['boss_actions'] = 'Azioni del boss',
['blip_unicorn'] = 'unicorn',
['unicorn'] = 'unicorn'
['unicorn'] = 'unicorn',
-- billing
['bill_amount'] = "importo della fattura",
['confirm'] = "Conferma",
['amount'] = "Importo"
}
Loading

0 comments on commit f5fb4c5

Please sign in to comment.