diff --git a/client/main.lua b/client/main.lua index 8df0062b..5b858f37 100644 --- a/client/main.lua +++ b/client/main.lua @@ -136,7 +136,15 @@ function OpenArmoryMenu(station) if data.current.value == 'buy_weapons' then OpenBuyWeaponsMenu(station) - end + end + + if data.current.value == 'put_stock' then + OpenPutStocksMenu() + end + + if data.current.value == 'get_stock' then + OpenGetStocksMenu() + end end, function(data, menu) @@ -827,84 +835,121 @@ function OpenBuyWeaponsMenu(station) end -function OpenBossActionsMenu() +function OpenGetStocksMenu() - ESX.UI.Menu.CloseAll() + ESX.TriggerServerCallback('esx_policejob:getStockItems', function(items) - ESX.UI.Menu.Open( - 'default', GetCurrentResourceName(), 'realestateagent', - { - title = PlayerData.job.grade_label, - elements = { - {label = _U('take_company_money'), value = 'withdraw_society_money'}, - {label = _U('deposit_money'), value = 'deposit_money'}, - } - }, - function(data, menu) + print(json.encode(items)) - if data.current.value == 'withdraw_society_money' then + local elements = {} + + for i=1, #items, 1 do + table.insert(elements, {label = 'x' .. items[i].count .. ' ' .. items[i].label, value = items[i].name}) + end + + ESX.UI.Menu.Open( + 'default', GetCurrentResourceName(), 'stocks_menu', + { + title = 'Police Stock', + elements = elements + }, + function(data, menu) + + local itemName = data.current.value ESX.UI.Menu.Open( - 'dialog', GetCurrentResourceName(), 'withdraw_society_money_amount', + 'dialog', GetCurrentResourceName(), 'stocks_menu_get_item_count', { - title = _U('amount_of_withdrawal') + title = 'Quantité' }, - function(data, menu) + function(data2, menu2) - local amount = tonumber(data.value) + local count = tonumber(data2.value) - if amount == nil then - ESX.ShowNotification(_U('invalid_amount')) + if count == nil then + ESX.ShowNotification('Quantité invalide') else - menu.close() - TriggerServerEvent('esx_society:withdrawMoney', 'police', amount) + menu2.close() + menu.close() + OpenGetStocksMenu() + + TriggerServerEvent('esx_policejob:getStockItem', itemName, count) end end, - function(data, menu) - menu.close() + function(data2, menu2) + menu2.close() end ) + end, + function(data, menu) + menu.close() + end + ) + + end) + +end + +function OpenPutStocksMenu() + + ESX.TriggerServerCallback('esx_policejob:getPlayerInventory', function(inventory) + + local elements = {} + + for i=1, #inventory.items, 1 do + + local item = inventory.items[i] + + if item.count > 0 then + table.insert(elements, {label = item.label .. ' x' .. item.count, type = 'item_standard', value = item.name}) end - if data.current.value == 'deposit_money' then - - ESX.UI.Menu.Open( - 'dialog', GetCurrentResourceName(), 'deposit_money_amount', - { - title = _U('amount_of_deposit') - }, - function(data, menu) - - local amount = tonumber(data.value) - - if amount == nil then - ESX.ShowNotification(_U('invalid_amount')) - else - menu.close() - TriggerServerEvent('esx_society:depositMoney', 'police', amount) - end - - end, - function(data, menu) - menu.close() - end - ) - - end - - end, - function(data, menu) - - menu.close() - - CurrentAction = 'menu_boss_actions' - CurrentActionMsg = _U('open_bossmenu') - CurrentActionData = {} - end - ) + + ESX.UI.Menu.Open( + 'default', GetCurrentResourceName(), 'stocks_menu', + { + title = 'Inventaire', + elements = elements + }, + function(data, menu) + + local itemName = data.current.value + + ESX.UI.Menu.Open( + 'dialog', GetCurrentResourceName(), 'stocks_menu_put_item_count', + { + title = 'Quantité' + }, + function(data2, menu2) + + local count = tonumber(data2.value) + + if count == nil then + ESX.ShowNotification('Quantité invalide') + else + menu2.close() + menu.close() + OpenPutStocksMenu() + + TriggerServerEvent('esx_policejob:putStockItems', itemName, count) + end + + end, + function(data2, menu2) + menu2.close() + end + ) + + end, + function(data, menu) + menu.close() + end + ) + + end) end @@ -1420,7 +1465,19 @@ Citizen.CreateThread(function() end if CurrentAction == 'menu_boss_actions' then - OpenBossActionsMenu() + + ESX.UI.menu.CloseAll() + + TriggerEvent('esx_society:openBossMenu', 'police', function(data, menu) + + menu.close() + + CurrentAction = 'menu_boss_actions' + CurrentActionMsg = _U('open_bossmenu') + CurrentActionData = {} + + end) + end if CurrentAction == 'remove_entity' then diff --git a/de_esx_policejob_full.sql b/de_esx_policejob_full.sql index a13e74fe..7889aae5 100644 --- a/de_esx_policejob_full.sql +++ b/de_esx_policejob_full.sql @@ -6,6 +6,10 @@ INSERT INTO `datastore` (name, label, shared) VALUES ('society_police','Polizei',1) ; +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_police', 'Polizei', 1) +; + INSERT INTO `jobs` (name, label) VALUES ('police','LSPD') ; diff --git a/de_esx_policejob_minimal.sql b/de_esx_policejob_minimal.sql index d0d67a2b..0a4e0d61 100644 --- a/de_esx_policejob_minimal.sql +++ b/de_esx_policejob_minimal.sql @@ -9,6 +9,10 @@ INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_ ('police',3,'boss','Commandant',80,'{\"tshirt_1\":58,\"torso_1\":55,\"shoes\":24,\"pants_1\":35,\"pants_2\":0,\"decals_2\":3,\"hair_color_2\":0,\"face\":19,\"helmet_2\":0,\"hair_2\":0,\"arms\":41,\"torso_2\":0,\"hair_color_1\":5,\"hair_1\":2,\"skin\":34,\"sex\":0,\"glasses_1\":0,\"glasses_2\":1,\"decals_1\":8,\"glasses\":0,\"tshirt_2\":0,\"helmet_1\":11}','{\"tshirt_1\":35,\"torso_1\":48,\"arms\":44,\"pants_1\":34,\"pants_2\":0,\"decals_2\":3,\"hair_color_2\":0,\"face\":21,\"helmet_2\":0,\"hair_2\":3,\"decals_1\":7,\"torso_2\":0,\"hair_color_1\":10,\"hair_1\":11,\"skin\":34,\"sex\":1,\"glasses_1\":5,\"glasses_2\":1,\"shoes\":24,\"glasses\":0,\"tshirt_2\":0,\"helmet_1\":57}') ; +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_police', 'Polizei', 1) +; + CREATE TABLE `fine_types` ( `id` int(11) NOT NULL AUTO_INCREMENT, diff --git a/esx_policejob_en_full.sql b/esx_policejob_en_full.sql index be26c653..c21720ae 100644 --- a/esx_policejob_en_full.sql +++ b/esx_policejob_en_full.sql @@ -6,6 +6,10 @@ INSERT INTO `datastore` (name, label, shared) VALUES ('society_police','Police',1) ; +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_police', 'Police', 1) +; + INSERT INTO `jobs` (name, label) VALUES ('police','LSPD') ; diff --git a/esx_policejob_en_minimal.sql b/esx_policejob_en_minimal.sql index 35fd99df..f28257d6 100644 --- a/esx_policejob_en_minimal.sql +++ b/esx_policejob_en_minimal.sql @@ -9,6 +9,10 @@ INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_ ('police',3,'boss','Commandant',80,'{\"tshirt_1\":58,\"torso_1\":55,\"shoes\":24,\"pants_1\":35,\"pants_2\":0,\"decals_2\":3,\"hair_color_2\":0,\"face\":19,\"helmet_2\":0,\"hair_2\":0,\"arms\":41,\"torso_2\":0,\"hair_color_1\":5,\"hair_1\":2,\"skin\":34,\"sex\":0,\"glasses_1\":0,\"glasses_2\":1,\"decals_1\":8,\"glasses\":0,\"tshirt_2\":0,\"helmet_1\":11}','{\"tshirt_1\":35,\"torso_1\":48,\"arms\":44,\"pants_1\":34,\"pants_2\":0,\"decals_2\":3,\"hair_color_2\":0,\"face\":21,\"helmet_2\":0,\"hair_2\":3,\"decals_1\":7,\"torso_2\":0,\"hair_color_1\":10,\"hair_1\":11,\"skin\":34,\"sex\":1,\"glasses_1\":5,\"glasses_2\":1,\"shoes\":24,\"glasses\":0,\"tshirt_2\":0,\"helmet_1\":57}') ; +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_police', 'Police', 1) +; + CREATE TABLE `fine_types` ( `id` int(11) NOT NULL AUTO_INCREMENT, diff --git a/esx_policejob_full.sql b/esx_policejob_full.sql index 3c26e954..f0eb8786 100644 --- a/esx_policejob_full.sql +++ b/esx_policejob_full.sql @@ -6,6 +6,10 @@ INSERT INTO `datastore` (name, label, shared) VALUES ('society_police','Police',1) ; +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_police', 'Police', 1) +; + INSERT INTO `jobs` (name, label) VALUES ('police','LSPD') ; diff --git a/esx_policejob_minimal.sql b/esx_policejob_minimal.sql index 0105430d..ee413e4c 100644 --- a/esx_policejob_minimal.sql +++ b/esx_policejob_minimal.sql @@ -9,6 +9,10 @@ INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_ ('police',3,'boss','Commandant',80,'{\"tshirt_1\":58,\"torso_1\":55,\"shoes\":24,\"pants_1\":35,\"pants_2\":0,\"decals_2\":3,\"hair_color_2\":0,\"face\":19,\"helmet_2\":0,\"hair_2\":0,\"arms\":41,\"torso_2\":0,\"hair_color_1\":5,\"hair_1\":2,\"skin\":34,\"sex\":0,\"glasses_1\":0,\"glasses_2\":1,\"decals_1\":8,\"glasses\":0,\"tshirt_2\":0,\"helmet_1\":11}','{\"tshirt_1\":35,\"torso_1\":48,\"arms\":44,\"pants_1\":34,\"pants_2\":0,\"decals_2\":3,\"hair_color_2\":0,\"face\":21,\"helmet_2\":0,\"hair_2\":3,\"decals_1\":7,\"torso_2\":0,\"hair_color_1\":10,\"hair_1\":11,\"skin\":34,\"sex\":1,\"glasses_1\":5,\"glasses_2\":1,\"shoes\":24,\"glasses\":0,\"tshirt_2\":0,\"helmet_1\":57}') ; +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_police', 'Police', 1) +; + CREATE TABLE `fine_types` ( `id` int(11) NOT NULL AUTO_INCREMENT, diff --git a/server/main.lua b/server/main.lua index b97d9624..3fbb6288 100644 --- a/server/main.lua +++ b/server/main.lua @@ -64,6 +64,50 @@ AddEventHandler('esx_policejob:putInVehicle', function(target) TriggerClientEvent('esx_policejob:putInVehicle', target) end) +RegisterServerEvent('esx_policejob:getStockItem') +AddEventHandler('esx_policejob:getStockItem', function(itemName, count) + + local xPlayer = ESX.GetPlayerFromId(source) + + TriggerEvent('esx_addoninventory:getSharedInventory', 'society_policestock', function(inventory) + + local item = inventory.getItem(itemName) + + if item.count >= count then + inventory.removeItem(itemName, count) + xPlayer.addInventoryItem(itemName, count) + else + TriggerClientEvent('esx:showNotification', xPlayer.source, 'Quantité invalide') + end + + TriggerClientEvent('esx:showNotification', xPlayer.source, 'Vous avez retiré x' .. count .. ' ' .. item.label) + + end) + +end) + +RegisterServerEvent('esx_policejob:putStockItems') +AddEventHandler('esx_policejob:putStockItems', function(itemName, count) + + local xPlayer = ESX.GetPlayerFromId(source) + + TriggerEvent('esx_addoninventory:getSharedInventory', 'society_policestock', function(inventory) + + local item = inventory.getItem(itemName) + + if item.count >= 0 then + xPlayer.removeInventoryItem(itemName, count) + inventory.addItem(itemName, count) + else + TriggerClientEvent('esx:showNotification', xPlayer.source, 'Quantité invalide') + end + + TriggerClientEvent('esx:showNotification', xPlayer.source, 'Vous avez ajouté x' .. count .. ' ' .. item.label) + + end) + +end) + ESX.RegisterServerCallback('esx_policejob:getOtherPlayerData', function(source, cb, target) local xPlayer = ESX.GetPlayerFromId(target) @@ -267,3 +311,22 @@ ESX.RegisterServerCallback('esx_policejob:buy', function(source, cb, amount) end) end) + +ESX.RegisterServerCallback('esx_policejob:getStockItems', function(source, cb) + + TriggerEvent('esx_addoninventory:getSharedInventory', 'society_policestock', function(inventory) + cb(inventory.items) + end) + +end) + +ESX.RegisterServerCallback('esx_policejob:getPlayerInventory', function(source, cb) + + local xPlayer = ESX.GetPlayerFromId(source) + local items = xPlayer.inventory + + cb({ + items = items + }) + +end) \ No newline at end of file