2025-06-15 04:13:56 +02:00
local QBCore = exports [ " qb-core " ] : GetCoreObject ( )
Targets = { }
local function despawntargets ( )
for k in pairs ( Targets ) do exports [ ' qb-target ' ] : RemoveZone ( k ) end
end
RegisterNetEvent ( " moon-warehouse:client:openmenu " , function ( meow )
DisablePurchase = false
DisableOwnerMenu = true
DisablePoliceRaid = true
local Player = QBCore.Functions . GetPlayerData ( )
if Player.job . type == " leo " then DisablePoliceRaid = false end
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:warehousepurchased ' , function ( result )
if not result then
DisablePurchase = false
DisableOwnerMenu = true
else
DisablePurchase = true
end
end , meow )
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:isowner ' , function ( result )
local CitizenID = QBCore.Functions . GetPlayerData ( ) . citizenid
if result then
DisableOwnerMenu = false
else
DisableOwnerMenu = true
end
end , meow )
Wait ( 400 )
lib.registerContext ( {
id = ' warehouse_menu ' ,
2025-06-15 04:34:41 +02:00
title = ' Lager Interaktion ' ,
2025-06-15 04:13:56 +02:00
options = {
{
icon = " check " ,
2025-06-15 04:34:41 +02:00
title = ' Lager verwalten ' ,
2025-06-15 04:13:56 +02:00
disabled = DisableOwnerMenu ,
arrow = false , -- puts arrow to the right
onSelect = function ( )
lib.registerContext ( {
id = ' warehouse_owner_menu ' ,
2025-06-15 04:34:41 +02:00
title = ' Lager Interaktion ' ,
2025-06-15 04:13:56 +02:00
options = {
{
icon = " hand " ,
2025-06-15 04:34:41 +02:00
title = ' Lager öffnen ' ,
2025-06-15 04:13:56 +02:00
arrow = false , -- puts arrow to the right
onSelect = function ( )
TriggerEvent ( " moon-warehouse:client:openwarehousestash " , meow )
end
} ,
{
icon = " arrows-up-to-line " ,
2025-06-15 04:34:41 +02:00
title = " Lager upgraden " ,
2025-06-15 04:13:56 +02:00
arrow = false , -- puts arrow to the right
onSelect = function ( )
lib.registerContext ( {
id = ' warehouse_upgrade_menu ' ,
2025-06-15 04:34:41 +02:00
title = ' Lagermodernisierung ' ,
2025-06-15 04:13:56 +02:00
options = {
{
icon = " arrows-up-to-line " ,
2025-06-15 04:34:41 +02:00
title = ' Lager Plätze ausbauen ' ,
2025-06-15 04:13:56 +02:00
arrow = false ,
onSelect = function ( )
TriggerEvent ( " moon-warehouse:client:upgradewarehousesize " , meow )
end
} ,
{
icon = " arrows-up-to-line " ,
2025-06-15 04:34:41 +02:00
title = ' Lagerplätze erhöhen ' ,
2025-06-15 04:13:56 +02:00
arrow = false ,
onSelect = function ( )
TriggerEvent ( " moon-warehouse:client:upgradewarehouseslots " , meow )
end
} ,
{
icon = " backward " ,
2025-06-15 04:34:41 +02:00
title = " Zurück " ,
2025-06-15 04:13:56 +02:00
arrow = false , -- puts arrow to the right
onSelect = function ( )
TriggerEvent ( " moon-warehouse:client:openmenu " , meow )
end ,
} ,
}
} )
lib.showContext ( ' warehouse_upgrade_menu ' )
end ,
} ,
{
icon = " arrows-up-to-line " ,
2025-06-15 04:34:41 +02:00
title = ' Lagerpasswort zurücksetzen ' ,
2025-06-15 04:13:56 +02:00
arrow = false ,
onSelect = function ( )
TriggerEvent ( " moon-warehouse:client:resetpassword " , meow )
end
} ,
{
icon = " xmark " ,
2025-06-15 04:34:41 +02:00
title = " Lager verkaufen " ,
2025-06-15 04:13:56 +02:00
arrow = false , -- puts arrow to the right
onSelect = function ( )
TriggerEvent ( " moon-warehouse:client:sellwarehouse " , { location = meow } )
end ,
} ,
{
icon = " clock " ,
2025-06-15 04:34:41 +02:00
title = ' Lager erneuern ' ,
2025-06-15 04:13:56 +02:00
arrow = false ,
onSelect = function ( )
TriggerEvent ( " moon-warehouse:client:renewwarehouse " , meow )
end
} ,
{
icon = " clock " ,
2025-06-15 04:34:41 +02:00
title = ' Lager Ablaufdatum prüfen ' ,
2025-06-15 04:13:56 +02:00
arrow = false ,
onSelect = function ( )
TriggerEvent ( " moon-warehouse:client:checkwarehouse " , meow )
end
} ,
{
icon = " backward " ,
2025-06-15 04:34:41 +02:00
title = " zurück " ,
2025-06-15 04:13:56 +02:00
arrow = false , -- puts arrow to the right
onSelect = function ( )
TriggerEvent ( " moon-warehouse:client:openmenu " , meow )
end ,
} ,
}
} )
lib.showContext ( ' warehouse_owner_menu ' )
end
} ,
{
icon = " dollar-sign " ,
2025-06-15 04:34:41 +02:00
title = ' Lager kaufen ' ,
2025-06-15 04:13:56 +02:00
disabled = DisablePurchase ,
arrow = false , -- puts arrow to the right
onSelect = function ( )
TriggerEvent ( " moon-warehouse:client:openbuyingcontext " , meow )
end ,
} ,
{
icon = " dollar-sign " ,
2025-06-15 04:34:41 +02:00
title = ' Lager mit Passwort öffnen ' ,
2025-06-15 04:13:56 +02:00
arrow = false , -- puts arrow to the right
onSelect = function ( )
TriggerEvent ( " moon-warehouse:client:openwithpassword " , meow )
end ,
} ,
{
icon = " dollar-sign " ,
2025-06-15 04:34:41 +02:00
title = ' Lager durchsuchen ' ,
2025-06-15 04:13:56 +02:00
disabled = DisablePoliceRaid ,
arrow = false , -- puts arrow to the right
onSelect = function ( )
local HasItem = exports [ ' qb-inventory ' ] : HasItem ( " police_stormram " )
if not HasItem then QBCore.Functions . Notify ( " You Dont have " .. QBCore.Shared . Items [ " police_stormram " ] . label .. " To raid this warehouse " , " primary " , 2500 ) return end
TriggerEvent ( ' animations:client:EmoteCommandStart ' , { " knock2 " } )
local success = lib.skillCheck ( { ' easy ' , ' easy ' , { areaSize = 60 , speedMultiplier = 2 } , ' hard ' } , { ' w ' , ' a ' , ' s ' , ' d ' } )
if success then
TriggerEvent ( ' animations:client:EmoteCommandStart ' , { " c " } )
TriggerEvent ( " moon-warehouse:client:openwarehousestash " , meow )
else
TriggerEvent ( ' animations:client:EmoteCommandStart ' , { " c " } )
QBCore.Functions . Notify ( " You Failed to Raid " , " primary " , 2500 )
end
end ,
} ,
{
icon = " xmark " ,
2025-06-15 04:34:41 +02:00
title = " Menü schließen " ,
2025-06-15 04:13:56 +02:00
arrow = false , -- puts arrow to the right
onSelect = function ( )
lib.hideContext ( )
end ,
} ,
}
} )
lib.showContext ( ' warehouse_menu ' )
end )
RegisterNetEvent ( " moon-warehouse:client:openwithpassword " , function ( id )
local warehouseid = id
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:ispwdset ' , function ( result )
if result then
isPwdSet = true
else
isPwdSet = false
end
Wait ( 100 )
if isPwdSet then
local input = lib.inputDialog ( ' Enter Password for Warehouse # ' .. warehouseid , {
{ type = ' input ' , label = ' Enter Password ' , password = true , disabled = false } ,
} )
if input ~= nil then
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:getdetails ' , function ( result )
if result.password == input [ 1 ] then
local stashname = " warehouse " .. warehouseid .. " _moon "
TriggerEvent ( " inventory:client:SetCurrentStash " , stashname )
TriggerServerEvent ( " inventory:server:OpenInventory " , " stash " , stashname ,
{ maxweight = result.stashsize , slots = result.slots } )
else
QBCore.Functions . Notify ( " Wrong Password " , " error " , 3000 )
end
end , warehouseid )
else
QBCore.Functions . Notify ( " You Cancelled the Process " , " error " , 2500 )
end
elseif not isPwdSet then
QBCore.Functions . Notify ( " Owner Did not Set A Password Yet " , " error " , 2500 )
end
end , warehouseid )
end )
RegisterNetEvent ( " moon-warehouse:client:resetpassword " , function ( id )
local input = lib.inputDialog ( ' Set Password for Warehouse # ' .. id , {
{ type = ' input ' , label = ' Enter Password ' , password = true , disabled = false } ,
} )
if input ~= nil then
TriggerEvent ( " moon-warehouse:client:client:updatepassword " , { location = id , password = input [ 1 ] } )
else
QBCore.Functions . Notify ( " You Cancelled the Process " , " error " , 2500 )
end
end )
RegisterNetEvent ( " moon-warehouse:client:openwarehousestash " , function ( id )
local warehouseid = id
if Config.inventory == " qb " then
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:ispwdset ' , function ( result )
if result then
isPwdSet = true
else
isPwdSet = false
end
Wait ( 100 )
if isPwdSet then
local input = lib.inputDialog ( ' Enter Password for Warehouse # ' .. warehouseid , {
{ type = ' input ' , label = ' Enter Password ' , password = true , disabled = false } ,
} )
if input ~= nil then
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:getdetails ' , function ( result )
if result.password == input [ 1 ] then
local stashname = " warehouse " .. warehouseid .. " _moon "
TriggerEvent ( " inventory:client:SetCurrentStash " , stashname )
TriggerServerEvent ( " inventory:server:OpenInventory " , " stash " , stashname ,
{ maxweight = result.stashsize , slots = result.slots } )
else
QBCore.Functions . Notify ( " Wrong Password " , " error " , 3000 )
end
end , warehouseid )
else
QBCore.Functions . Notify ( " You Cancelled the Process " , " error " , 2500 )
end
elseif not isPwdSet then
local input = lib.inputDialog ( ' Set Password for Warehouse # ' .. warehouseid , {
{ type = ' input ' , label = ' Enter Password ' , password = true , disabled = false } ,
} )
if input ~= nil then
TriggerEvent ( " moon-warehouse:client:client:updatepassword " , { location = warehouseid , password = input [ 1 ] } )
else
QBCore.Functions . Notify ( " You Cancelled the Process " , " error " , 2500 )
end
end
end , warehouseid )
elseif Config.inventory == " ox " then
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:getdetails ' , function ( result )
local stashname = " warehouse " .. warehouseid .. " _moon "
TriggerServerEvent ( ' moon:warehouse:server:oxinventorystash ' , warehouseid , stashname , result.stashsize , result.slots )
end , warehouseid )
end
end )
RegisterNetEvent ( ' moon-warehouse:client:openstash ' , function ( id )
exports.ox_inventory : openInventory ( ' stash ' , id )
end )
RegisterNetEvent ( " moon-warehouse:client:checkwarehouse " , function ( id )
local warehouseid = id
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:getdetails ' , function ( result )
local date = result.date_purchased / 1000
TriggerServerEvent ( " moon-warehouse:server:checkwarehouse " , warehouseid , date )
end , warehouseid )
end )
RegisterNetEvent ( " moon-warehouse:client:renewwarehouse " , function ( id )
local warehouseid = id
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:getdetails ' , function ( result )
local renewwarehouse = lib.alertDialog ( {
header = ' Renew Warehouse ' ,
content = ' Your Renewal Will Cost $ ' .. result.price .. ' , Do you Want Renew? ' ,
centered = true ,
cancel = true
} )
if renewwarehouse == " cancel " then QBCore.Functions . Notify ( " You Cancelled the Renwal of your Warehouse " , " error " , 3500 ) return end
local date = result.date_purchased / 1000
TriggerServerEvent ( " moon-warehouse:server:renewwarehouse " , warehouseid , result.price , date )
end , warehouseid )
end )
RegisterNetEvent ( " moon-warehouse:client:upgradewarehouseslots " , function ( meow )
local warehouseid = meow
local currentPos = GetEntityCoords ( PlayerPedId ( ) )
local locationInfo = getStreetandZone ( currentPos )
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:getdetails ' , function ( result )
local requiredSlotsOptions = { }
if result.slots == 50 then
requiredSlotsOptions = {
{ label = " +20 Slots " , value = 20 } ,
}
elseif result.slots == 70 then
requiredSlotsOptions = {
{ label = " +40 Slots " , value = 40 } ,
}
elseif result.slots == 110 then
requiredSlotsOptions = {
{ label = " +60 Slots " , value = 60 } ,
}
elseif result.slots == 170 then
QBCore.Functions . Notify ( " Can't Upgrade More " , " error " , 5200 )
return
end
local input = lib.inputDialog ( ' Upgrade Warehouse # ' .. warehouseid , {
{ type = ' input ' , label = ' Warehouse Location ' , default = locationInfo .. " Warehouse# " .. warehouseid , disabled = true } ,
{ type = ' input ' , label = ' Default Stash Slots ' , default = result.slots , disabled = true , min = 1 , max = 7 } ,
{ type = ' select ' , label = ' Required Stash Slots ' , options = requiredSlotsOptions , disabled = false } ,
} )
if input ~= nil then
TriggerEvent ( " moon-warehouse:client:client:upgradewarehouseslots " , { location = warehouseid , slotsinc = input [ 3 ] } )
else
QBCore.Functions . Notify ( " You Cancelled the Process " , " error " , 2500 )
end
end , warehouseid )
end )
RegisterNetEvent ( " moon-warehouse:client:upgradewarehousesize " , function ( meow )
local warehouseid = meow
local currentPos = GetEntityCoords ( PlayerPedId ( ) )
local locationInfo = getStreetandZone ( currentPos )
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:getdetails ' , function ( result )
local requiredSizeOptions = { }
if result.stashsize == 3000 * 1000 then
requiredSizeOptions = {
{ label = " +500 Kg " , value = 500 } ,
}
elseif result.stashsize == 3500 * 1000 then
requiredSizeOptions = {
{ label = " +1000 Kg " , value = 1000 } ,
}
elseif result.stashsize == 4500 * 1000 then
requiredSizeOptions = {
{ label = " +1500 Kg " , value = 1500 } ,
}
elseif result.stashsize == 6000 * 1000 then
QBCore.Functions . Notify ( " Can't Upgrade More " , " error " , 5200 )
return
end
local input = lib.inputDialog ( ' Upgrade Warehouse # ' .. warehouseid , {
{ type = ' input ' , label = ' Warehouse Location ' , default = locationInfo .. " Warehouse# " .. warehouseid , disabled = true } ,
{ type = ' input ' , label = ' Default Stash Size [Kg] ' , default = result.stashsize / 1000 , disabled = true , min = 1 , max = 7 } ,
{ type = ' select ' , label = ' Required Stash Size ' , options = requiredSizeOptions , disabled = false } ,
} )
if input ~= nil then
TriggerEvent ( " moon-warehouse:client:client:upgradewarehousesize " , { location = warehouseid , sizeinc = input [ 3 ] } )
else
QBCore.Functions . Notify ( " Your Cancelled the Process " , " error " , 2500 )
end
end , warehouseid )
end )
RegisterNetEvent ( ' moon-warehouse:client:client:upgradewarehouseslots ' , function ( data )
local warehouseid = data.location
local slots = data.slotsinc
local CitizenID = QBCore.Functions . GetPlayerData ( ) . citizenid
canUpgrade = false
Wait ( 5 )
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:isowner ' , function ( result )
if result then
canUpgrade = true
else
QBCore.Functions . Notify ( " You Dont Own This Warehouse " , ' error ' , 7500 )
canUpgrade = false
end
end , warehouseid )
Wait ( 400 )
if canUpgrade then
TriggerServerEvent ( ' moon-warehouse:server:Upgradewarehouseslots ' , warehouseid , CitizenID , slots )
else
QBCore.Functions . Notify ( " Cannot Sale the Ware House " , ' error ' , 7500 )
end
end )
RegisterNetEvent ( ' moon-warehouse:client:client:updatepassword ' , function ( data )
local warehouseid = data.location
local password = data.password
local CitizenID = QBCore.Functions . GetPlayerData ( ) . citizenid
ispwdset = false
Wait ( 5 )
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:isowner ' , function ( result )
if result then
ispwdset = true
else
QBCore.Functions . Notify ( " You Dont Own This Warehouse " , ' error ' , 7500 )
ispwdset = false
end
end , warehouseid )
Wait ( 400 )
if ispwdset then
TriggerServerEvent ( ' moon-warehouse:server:updatepassword ' , warehouseid , CitizenID , password )
else
QBCore.Functions . Notify ( " Cannot Sale the Ware House " , ' error ' , 7500 )
end
end )
RegisterNetEvent ( ' moon-warehouse:client:client:upgradewarehousesize ' , function ( data )
local warehouseid = data.location
local size = data.sizeinc
local CitizenID = QBCore.Functions . GetPlayerData ( ) . citizenid
canUpgrade = false
Wait ( 5 )
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:isowner ' , function ( result )
if result then
canUpgrade = true
else
QBCore.Functions . Notify ( " You Dont Own This Warehouse " , ' error ' , 7500 )
canUpgrade = false
end
end , warehouseid )
Wait ( 400 )
if canUpgrade then
TriggerServerEvent ( ' moon-warehouse:server:upgradewarehousesize ' , warehouseid , CitizenID , size )
else
QBCore.Functions . Notify ( " Cannot Sale the Ware House " , ' error ' , 7500 )
end
end )
RegisterNetEvent ( " moon-warehouse:client:openbuyingcontext " , function ( meow )
local warehouseid = meow
local currentPos = GetEntityCoords ( PlayerPedId ( ) )
local locationInfo = getStreetandZone ( currentPos )
local Player = QBCore.Functions . GetPlayerData ( )
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:getdetails ' , function ( result )
local input = lib.inputDialog ( ' Buy Warehouse # ' .. warehouseid , {
{ type = ' input ' , label = ' Warehouse Location ' , default = locationInfo .. " Warehouse# " .. warehouseid , disabled = true } ,
{ type = ' input ' , label = ' Price ' , default = result.price , disabled = true , min = 1 , max = 7 } ,
{ type = ' input ' , label = ' Stash Size ' , default = result.stashsize / 1000 .. " Kg " , disabled = true , min = 1 , max = 7 } ,
{ type = ' input ' , label = ' CitizenID ' , default = Player.citizenid , disabled = true , min = 1 , max = 7 } ,
{ type = ' input ' , label = ' Full Name ' , default = Player.charinfo . firstname .. " " .. Player.charinfo . lastname , disabled = true , min = 1 , max = 7 } ,
{ type = ' input ' , label = ' Birthdate ' , default = Player.charinfo . birthdate , disabled = true , min = 1 , max = 7 } ,
} )
if input ~= nil then
TriggerEvent ( " moon-warehouse:client:client:purchasewarehouse " , { location = warehouseid , price = result.price } )
else
QBCore.Functions . Notify ( " Your Cancelled the Process " , " error " , 2500 )
end
end , warehouseid )
end )
RegisterNetEvent ( ' moon-warehouse:client:client:purchasewarehouse ' , function ( data )
local warehouseid = data.location
local price = data.price
local CitizenID = QBCore.Functions . GetPlayerData ( ) . citizenid
CanOpen = false
Wait ( 5 )
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:warehousepurchased ' , function ( result )
if result then
IsOwned = true
else
IsOwned = false
end
end , warehouseid )
Wait ( 400 )
if not IsOwned then
TriggerServerEvent ( ' moon-warehouse:server:buyWareHouse ' , warehouseid , CitizenID , price )
elseif IsOwned then
QBCore.Functions . Notify ( " Warehouse Already Owned " , ' error ' , 7500 )
end
end )
RegisterNetEvent ( ' moon-warehouse:client:sellwarehouse ' , function ( data )
local sellwarehousealert = lib.alertDialog ( {
header = ' Sell Warehouse ' ,
content = ' Your Upgradation Would be Reset, Do you Want To Still Sell the warehouse? ' ,
centered = true ,
cancel = true
} )
if sellwarehousealert == " cancel " then QBCore.Functions . Notify ( " You Cancelled the Sale of your Warehouse " , " error " , 3500 ) return end
local warehouseid = data.location
local CitizenID = QBCore.Functions . GetPlayerData ( ) . citizenid
CanSell = false
Wait ( 5 )
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:isowner ' , function ( result )
if result then
CanSell = true
else
QBCore.Functions . Notify ( " You Dont Own This Warehouse " , ' error ' , 7500 )
CanSell = false
end
end , warehouseid )
Wait ( 400 )
if CanSell then
TriggerServerEvent ( ' moon-warehouse:server:sellwarehouse ' , warehouseid )
else
QBCore.Functions . Notify ( " Cannot Sale the Ware House " , ' error ' , 7500 )
end
end )
RegisterNetEvent ( " moon-warehouse:client:pullstash " , function ( id )
local warehouseid = id
TriggerServerEvent ( " inventory:server:OpenInventory " , " stash " , " warehouse " .. warehouseid .. " _moon " )
end )
CreateThread ( function ( )
while true do
for k , v in pairs ( Config.WareHouses ) do
for k , v in pairs ( v ) do
local name = " Warehouse " .. k
QBCore.Functions . TriggerCallback ( ' moon-warehouse:server:warehousepurchased ' , function ( result )
if result then
IsOwned2 = true
else
IsOwned2 = false
end
end , k )
Wait ( 400 )
if not IsOwned2 then
makeBlip ( { coords = v , sprite = 474 , col = 2 , name = name } )
elseif IsOwned2 then
makeBlip ( { coords = v , sprite = 474 , col = 5 , name = name } )
end
end
end
Wait ( Config.RefreshBlipInterval * 60 * 60 * 1000 )
end
end )
CreateThread ( function ( )
2025-06-15 04:52:08 +02:00
-- Warte kurz, um sicherzustellen, dass qb-target geladen ist
Wait ( 1000 )
2025-06-15 04:13:56 +02:00
for k , v in pairs ( Config.WareHouses ) do
for k , v in pairs ( v ) do
local name = ' WareHouse ' .. k
2025-06-15 04:52:08 +02:00
-- Korrigierte Vektorverarbeitung
local coords = vector3 ( v.x , v.y , v.z )
2025-06-15 04:13:56 +02:00
Targets [ name ] =
2025-06-15 04:52:08 +02:00
exports [ ' qb-target ' ] : AddBoxZone ( name , coords , 2.0 , 2.0 , {
2025-06-15 04:13:56 +02:00
heading = v.w ,
debugPoly = false ,
minZ = v.z - 1 ,
maxZ = v.z + 4 ,
} , {
options = {
{
action = function ( )
TriggerEvent ( " moon-warehouse:client:openmenu " , k )
end ,
icon = " fas fa-clipboard " ,
label = ' Interact ' ,
} ,
} ,
distance = 3.0
} )
end
end
end )
AddEventHandler ( ' onResourceStop ' , function ( resource )
if resource == GetCurrentResourceName ( ) then
despawntargets ( )
end
end )
2025-06-15 04:52:08 +02:00