335 lines
11 KiB
Lua
335 lines
11 KiB
Lua
local QBCore = exports['qb-core']:GetCoreObject()
|
|
|
|
local isMelting = false
|
|
local canTake = false
|
|
local meltTime
|
|
local meltedItem = {}
|
|
|
|
CreateThread(function()
|
|
for _, value in pairs(Config.PawnLocation) do
|
|
local blip = AddBlipForCoord(value.coords.x, value.coords.y, value.coords.z)
|
|
SetBlipSprite(blip, 431)
|
|
SetBlipDisplay(blip, 4)
|
|
SetBlipScale(blip, 0.7)
|
|
SetBlipAsShortRange(blip, true)
|
|
SetBlipColour(blip, 5)
|
|
BeginTextCommandSetBlipName('STRING')
|
|
AddTextComponentSubstringPlayerName(Lang:t('info.title'))
|
|
EndTextCommandSetBlipName(blip)
|
|
end
|
|
end)
|
|
|
|
CreateThread(function()
|
|
if Config.UseTarget then
|
|
for key, value in pairs(Config.PawnLocation) do
|
|
exports['qb-target']:AddBoxZone('PawnShop'..key, value.coords, value.length, value.width, {
|
|
name = 'PawnShop'..key,
|
|
heading = value.heading,
|
|
minZ = value.minZ,
|
|
maxZ = value.maxZ,
|
|
debugPoly = value.debugPoly,
|
|
}, {
|
|
options = {
|
|
{
|
|
type = 'client',
|
|
event = 'qb-pawnshop:client:openMenu',
|
|
icon = 'fas fa-ring',
|
|
label = 'Pawn Shop',
|
|
},
|
|
},
|
|
distance = value.distance
|
|
})
|
|
end
|
|
else
|
|
local zone = {}
|
|
for key, value in pairs(Config.PawnLocation) do
|
|
zone[#zone+1] = BoxZone:Create(value.coords, value.length, value.width, {
|
|
name = 'PawnShop'..key,
|
|
heading = value.heading,
|
|
minZ = value.minZ,
|
|
maxZ = value.maxZ,
|
|
})
|
|
end
|
|
local pawnShopCombo = ComboZone:Create( zone, { name = 'NewPawnShopCombo', debugPoly = false })
|
|
pawnShopCombo:onPlayerInOut(function(isPointInside)
|
|
if isPointInside then
|
|
exports['qb-menu']:showHeader({
|
|
{
|
|
header = Lang:t('info.title'),
|
|
txt = Lang:t('info.open_pawn'),
|
|
params = {
|
|
event = 'qb-pawnshop:client:openMenu'
|
|
}
|
|
}
|
|
})
|
|
else
|
|
exports['qb-menu']:closeMenu()
|
|
end
|
|
end)
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('qb-pawnshop:client:openMenu', function()
|
|
if Config.UseTimes then
|
|
if GetClockHours() >= Config.TimeOpen and GetClockHours() <= Config.TimeClosed then
|
|
local pawnShop = {
|
|
{
|
|
header = Lang:t('info.title'),
|
|
isMenuHeader = true,
|
|
},
|
|
{
|
|
header = Lang:t('info.sell'),
|
|
txt = Lang:t('info.sell_pawn'),
|
|
params = {
|
|
event = 'qb-pawnshop:client:openPawn',
|
|
args = {
|
|
items = Config.PawnItems
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if not isMelting then
|
|
pawnShop[#pawnShop + 1] = {
|
|
header = Lang:t('info.melt'),
|
|
txt = Lang:t('info.melt_pawn'),
|
|
params = {
|
|
event = 'qb-pawnshop:client:openMelt',
|
|
args = {
|
|
items = Config.MeltingItems
|
|
}
|
|
}
|
|
}
|
|
end
|
|
if canTake then
|
|
pawnShop[#pawnShop + 1] = {
|
|
header = Lang:t('info.melt_pickup'),
|
|
txt = '',
|
|
params = {
|
|
isServer = true,
|
|
event = 'qb-pawnshop:server:pickupMelted',
|
|
args = {
|
|
items = meltedItem
|
|
}
|
|
}
|
|
}
|
|
end
|
|
exports['qb-menu']:openMenu(pawnShop)
|
|
else
|
|
QBCore.Functions.Notify(Lang:t('info.pawn_closed', { value = Config.TimeOpen, value2 = Config.TimeClosed }))
|
|
end
|
|
else
|
|
local pawnShop = {
|
|
{
|
|
header = Lang:t('info.title'),
|
|
isMenuHeader = true,
|
|
},
|
|
{
|
|
header = Lang:t('info.sell'),
|
|
txt = Lang:t('info.sell_pawn'),
|
|
params = {
|
|
event = 'qb-pawnshop:client:openPawn',
|
|
args = {
|
|
items = Config.PawnItems
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if not isMelting then
|
|
pawnShop[#pawnShop + 1] = {
|
|
header = Lang:t('info.melt'),
|
|
txt = Lang:t('info.melt_pawn'),
|
|
params = {
|
|
event = 'qb-pawnshop:client:openMelt',
|
|
args = {
|
|
items = Config.MeltingItems
|
|
}
|
|
}
|
|
}
|
|
end
|
|
if canTake then
|
|
pawnShop[#pawnShop + 1] = {
|
|
header = Lang:t('info.melt_pickup'),
|
|
txt = '',
|
|
params = {
|
|
isServer = true,
|
|
event = 'qb-pawnshop:server:pickupMelted',
|
|
args = {
|
|
items = meltedItem
|
|
}
|
|
}
|
|
}
|
|
end
|
|
exports['qb-menu']:openMenu(pawnShop)
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('qb-pawnshop:client:openPawn', function(data)
|
|
QBCore.Functions.TriggerCallback('qb-pawnshop:server:getInv', function(inventory)
|
|
local PlyInv = inventory
|
|
local pawnMenu = {
|
|
{
|
|
header = Lang:t('info.title'),
|
|
isMenuHeader = true,
|
|
}
|
|
}
|
|
for _, v in pairs(PlyInv) do
|
|
for i = 1, #data.items do
|
|
if v.name == data.items[i].item then
|
|
pawnMenu[#pawnMenu + 1] = {
|
|
header = QBCore.Shared.Items[v.name].label,
|
|
txt = Lang:t('info.sell_items', { value = data.items[i].price }),
|
|
params = {
|
|
event = 'qb-pawnshop:client:pawnitems',
|
|
args = {
|
|
label = QBCore.Shared.Items[v.name].label,
|
|
price = data.items[i].price,
|
|
name = v.name,
|
|
amount = v.amount
|
|
}
|
|
}
|
|
}
|
|
end
|
|
end
|
|
end
|
|
pawnMenu[#pawnMenu + 1] = {
|
|
header = Lang:t('info.back'),
|
|
params = {
|
|
event = 'qb-pawnshop:client:openMenu'
|
|
}
|
|
}
|
|
exports['qb-menu']:openMenu(pawnMenu)
|
|
end)
|
|
end)
|
|
|
|
RegisterNetEvent('qb-pawnshop:client:openMelt', function(data)
|
|
QBCore.Functions.TriggerCallback('qb-pawnshop:server:getInv', function(inventory)
|
|
local PlyInv = inventory
|
|
local meltMenu = {
|
|
{
|
|
header = Lang:t('info.melt'),
|
|
isMenuHeader = true,
|
|
}
|
|
}
|
|
for _, v in pairs(PlyInv) do
|
|
for i = 1, #data.items do
|
|
if v.name == data.items[i].item then
|
|
meltMenu[#meltMenu + 1] = {
|
|
header = QBCore.Shared.Items[v.name].label,
|
|
txt = Lang:t('info.melt_item', { value = QBCore.Shared.Items[v.name].label }),
|
|
params = {
|
|
event = 'qb-pawnshop:client:meltItems',
|
|
args = {
|
|
label = QBCore.Shared.Items[v.name].label,
|
|
reward = data.items[i].rewards,
|
|
name = v.name,
|
|
amount = v.amount,
|
|
time = data.items[i].meltTime
|
|
}
|
|
}
|
|
}
|
|
end
|
|
end
|
|
end
|
|
meltMenu[#meltMenu + 1] = {
|
|
header = Lang:t('info.back'),
|
|
params = {
|
|
event = 'qb-pawnshop:client:openMenu'
|
|
}
|
|
}
|
|
exports['qb-menu']:openMenu(meltMenu)
|
|
end)
|
|
end)
|
|
|
|
RegisterNetEvent('qb-pawnshop:client:pawnitems', function(item)
|
|
local sellingItem = exports['qb-input']:ShowInput({
|
|
header = Lang:t('info.title'),
|
|
submitText = Lang:t('info.sell'),
|
|
inputs = {
|
|
{
|
|
type = 'number',
|
|
isRequired = false,
|
|
name = 'amount',
|
|
text = Lang:t('info.max', { value = item.amount })
|
|
}
|
|
}
|
|
})
|
|
if sellingItem then
|
|
if not sellingItem.amount then
|
|
return
|
|
end
|
|
|
|
if tonumber(sellingItem.amount) > 0 then
|
|
TriggerServerEvent('qb-pawnshop:server:sellPawnItems', item.name, sellingItem.amount, item.price)
|
|
else
|
|
QBCore.Functions.Notify(Lang:t('error.negative'), 'error')
|
|
end
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('qb-pawnshop:client:meltItems', function(item)
|
|
local meltingItem = exports['qb-input']:ShowInput({
|
|
header = Lang:t('info.melt'),
|
|
submitText = Lang:t('info.submit'),
|
|
inputs = {
|
|
{
|
|
type = 'number',
|
|
isRequired = false,
|
|
name = 'amount',
|
|
text = Lang:t('info.max', { value = item.amount })
|
|
}
|
|
}
|
|
})
|
|
if meltingItem then
|
|
if not meltingItem.amount then
|
|
return
|
|
end
|
|
if meltingItem.amount ~= nil then
|
|
if tonumber(meltingItem.amount) > 0 then
|
|
TriggerServerEvent('qb-pawnshop:server:meltItemRemove', item.name, meltingItem.amount, item)
|
|
|
|
else
|
|
QBCore.Functions.Notify(Lang:t('error.no_melt'), 'error')
|
|
end
|
|
else
|
|
QBCore.Functions.Notify(Lang:t('error.no_melt'), 'error')
|
|
end
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('qb-pawnshop:client:startMelting', function(item, meltingAmount, meltTimees)
|
|
if not isMelting then
|
|
isMelting = true
|
|
meltTime = meltTimees
|
|
meltedItem = {}
|
|
CreateThread(function()
|
|
while isMelting do
|
|
if LocalPlayer.state.isLoggedIn then
|
|
meltTime = meltTime - 1
|
|
if meltTime <= 0 then
|
|
canTake = true
|
|
isMelting = false
|
|
table.insert(meltedItem, { item = item, amount = meltingAmount })
|
|
if Config.SendMeltingEmail then
|
|
TriggerServerEvent('qb-phone:server:sendNewMail', {
|
|
sender = Lang:t('info.title'),
|
|
subject = Lang:t('info.subject'),
|
|
message = Lang:t('info.message'),
|
|
button = {}
|
|
})
|
|
else
|
|
QBCore.Functions.Notify(Lang:t('info.message'), 'success')
|
|
end
|
|
end
|
|
else
|
|
break
|
|
end
|
|
Wait(1000)
|
|
end
|
|
end)
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('qb-pawnshop:client:resetPickup', function()
|
|
canTake = false
|
|
end)
|