function Utils.Framework.givePlayerVehicle(source, vehicle, vehicle_type, plate, vehicle_props, state, finance_details)
local xPlayer = QBCore.Functions.GetPlayer(source)
local plate = vehicle_props and vehicle_props.plate or Utils.Framework.generatePlate(plate)
local mods = vehicle_props and vehicle_props or {}
local state = state or 0
local finance_details = finance_details or {}
local vehicle_type = vehicle_type or 'car'
local garage = Config.owned_vehicles['default'].garage
if Config.owned_vehicles[vehicle_type] then
garage = Config.owned_vehicles[vehicle_type].garage
end
Utils.Database.execute('INSERT INTO player_vehicles (license, citizenid, plate, vehicle, hash, mods, garage, state, balance, paymentamount, paymentsleft, financetime) VALUES (@license, @citizenid, @plate, @vehicle, @hash, @mods, @garage, @state, @balance, @paymentamount, @paymentsleft, @financetime)',
{
['@license'] = xPlayer.PlayerData.license,
['@citizenid'] = xPlayer.PlayerData.citizenid,
['@plate'] = plate,
['@state'] = state, -- 1 = inside garage | 0 = outside garage
['@vehicle'] = vehicle,
['@hash'] = GetHashKey(vehicle),
['@garage'] = garage,
['@mods'] = json.encode(mods),
['@balance'] = finance_details.balance or 0,
['@paymentamount'] = finance_details.paymentamount or 0,
['@paymentsleft'] = finance_details.paymentsleft or 0,
['@financetime'] = finance_details.financetime or 0
})
return true
end
function Utils.Framework.givePlayerVehicle(source, vehicle, vehicle_type, plate, vehicle_props, state, finance_details)
local xPlayer = QBCore.Functions.GetPlayer(source)
local plate = vehicle_props and vehicle_props.plate or Utils.Framework.generatePlate(plate)
local mods = vehicle_props and vehicle_props or {}
local state = state or 0
local finance_details = finance_details or {}
local vehicle_type = vehicle_type or 'car'
local garage = Config.owned_vehicles['default'].garage
if Config.owned_vehicles[vehicle_type] then
garage = Config.owned_vehicles[vehicle_type].garage
end
exports["m-Insurance"]:GiveCarRegistration(source, plate, vehicle, 1, xPlayer.PlayerData.citizenid)
Utils.Database.execute('INSERT INTO player_vehicles (license, citizenid, plate, vehicle, hash, mods, garage, state, balance, paymentamount, paymentsleft, financetime) VALUES (@license, @citizenid, @plate, @vehicle, @hash, @mods, @garage, @state, @balance, @paymentamount, @paymentsleft, @financetime)',
{
['@license'] = xPlayer.PlayerData.license,
['@citizenid'] = xPlayer.PlayerData.citizenid,
['@plate'] = plate,
['@state'] = state, -- 1 = inside garage | 0 = outside garage
['@vehicle'] = vehicle,
['@hash'] = GetHashKey(vehicle),
['@garage'] = garage,
['@mods'] = json.encode(mods),
['@balance'] = finance_details.balance or 0,
['@paymentamount'] = finance_details.paymentamount or 0,
['@paymentsleft'] = finance_details.paymentsleft or 0,
['@financetime'] = finance_details.financetime or 0
})
return true
end
AddEventHandler("ps-housing:server:registerProperty", function (propertyData, preventEnter) -- triggered by realtor job
local propertyData = propertyData
propertyData.owner = propertyData.owner or nil
propertyData.has_access = propertyData.has_access or {}
propertyData.extra_imgs = propertyData.extra_imgs or {}
propertyData.furnitures = propertyData.furnitures or {}
propertyData.door_data = propertyData.door_data or {}
propertyData.garage_data = propertyData.garage_data or {}
local cols = "(owner_citizenid, street, region, description, has_access, extra_imgs, furnitures, for_sale, price, shell, apartment, door_data, garage_data)"
local vals = "(@owner_citizenid, @street, @region, @description, @has_access, @extra_imgs, @furnitures, @for_sale, @price, @shell, @apartment, @door_data, @garage_data)"
local id = MySQL.insert.await("INSERT INTO properties " .. cols .. " VALUES " .. vals , {
["@owner_citizenid"] = propertyData.owner or nil,
["@street"] = propertyData.street,
["@region"] = propertyData.region,
["@description"] = propertyData.description,
["@has_access"] = json.encode(propertyData.has_access),
["@extra_imgs"] = json.encode(propertyData.extra_imgs),
["@furnitures"] = json.encode(propertyData.furnitures),
["@for_sale"] = propertyData.for_sale ~= nil and propertyData.for_sale or 1,
["@price"] = propertyData.price or 0,
["@shell"] = propertyData.shell,
["@apartment"] = propertyData.apartment,
["@door_data"] = json.encode(propertyData.door_data),
["@garage_data"] = json.encode(propertyData.garage_data),
})
id = tostring(id)
propertyData.property_id = id
PropertiesTable[id] = Property:new(propertyData)
TriggerClientEvent("ps-housing:client:addProperty", -1, propertyData)
if propertyData.apartment and not preventEnter then
local player = QBCore.Functions.GetPlayerByCitizenId(propertyData.owner)
local src = player.PlayerData.source
local property = Property.Get(id)
property:PlayerEnter(src)
Wait(1000)
local query = "SELECT skin FROM playerskins WHERE citizenid = ?"
local result = MySQL.Sync.fetchAll(query, {propertyData.owner})
if result and result[1] then
Debug("Player: " .. propertyData.owner .. " skin already exists!")
else
TriggerClientEvent("qb-clothes:client:CreateFirstCharacter", src)
Debug("Player: " .. propertyData.owner .. " is creating a new character!")
end
Framework[Config.Notify].Notify(src, "Open radial menu for furniture menu and place down your stash and clothing locker.", "info")
-- This will create the stash for the apartment and migrate the items from the old apartment stash if applicable
TriggerEvent("ps-housing:server:createApartmentStash", propertyData.owner, id)
end
end)
AddEventHandler("ps-housing:server:registerProperty", function (propertyData, preventEnter) -- triggered by realtor job
local propertyData = propertyData
propertyData.owner = propertyData.owner or nil
propertyData.has_access = propertyData.has_access or {}
propertyData.extra_imgs = propertyData.extra_imgs or {}
propertyData.furnitures = propertyData.furnitures or {}
propertyData.door_data = propertyData.door_data or {}
propertyData.garage_data = propertyData.garage_data or {}
local cols = "(owner_citizenid, street, region, description, has_access, extra_imgs, furnitures, for_sale, price, shell, apartment, door_data, garage_data)"
local vals = "(@owner_citizenid, @street, @region, @description, @has_access, @extra_imgs, @furnitures, @for_sale, @price, @shell, @apartment, @door_data, @garage_data)"
local id = MySQL.insert.await("INSERT INTO properties " .. cols .. " VALUES " .. vals , {
["@owner_citizenid"] = propertyData.owner or nil,
["@street"] = propertyData.street,
["@region"] = propertyData.region,
["@description"] = propertyData.description,
["@has_access"] = json.encode(propertyData.has_access),
["@extra_imgs"] = json.encode(propertyData.extra_imgs),
["@furnitures"] = json.encode(propertyData.furnitures),
["@for_sale"] = propertyData.for_sale ~= nil and propertyData.for_sale or 1,
["@price"] = propertyData.price or 0,
["@shell"] = propertyData.shell,
["@apartment"] = propertyData.apartment,
["@door_data"] = json.encode(propertyData.door_data),
["@garage_data"] = json.encode(propertyData.garage_data),
})
id = tostring(id)
propertyData.property_id = id
PropertiesTable[id] = Property:new(propertyData)
TriggerClientEvent("ps-housing:client:addProperty", -1, propertyData)
if propertyData.apartment and not preventEnter then
local player = QBCore.Functions.GetPlayerByCitizenId(propertyData.owner)
local src = player.PlayerData.source
local property = Property.Get(id)
property:PlayerEnter(src)
Wait(1000)
local query = "SELECT skin FROM playerskins WHERE citizenid = ?"
local result = MySQL.Sync.fetchAll(query, {propertyData.owner})
if result and result[1] then
Debug("Player: " .. propertyData.owner .. " skin already exists!")
else
TriggerClientEvent("qb-clothes:client:CreateFirstCharacter", src)
Debug("Player: " .. propertyData.owner .. " is creating a new character!")
end
Framework[Config.Notify].Notify(src, "Open radial menu for furniture menu and place down your stash and clothing locker.", "info")
-- This will create the stash for the apartment and migrate the items from the old apartment stash if applicable
TriggerEvent("ps-housing:server:createApartmentStash", propertyData.owner, id)
end
local src = source
local Player = QBCore.Functions.GetPlayer(src)
local citizenid = Player.PlayerData.citizenid
local name = Player.PlayerData.charinfo.firstname .. " " .. Player.PlayerData.charinfo.lastname
exports["m-Insurance"]:GiveHomeInsurance(src, citizenid, 1, name)
end)
RegisterNetEvent("jg-dealerships:client:purchase-vehicle:config", function(vehicle, plate, purchaseType, amount, paymentMethod, financed)
if Config.InsuranceEnable then
function GetVehicleName(model)
name = GetLabelText(GetDisplayNameFromVehicleModel(model))
return name
end
local hash = GetEntityModel(vehicle)
local modelName = GetVehicleName(hash)
TriggerServerEvent("jg-dealerships:server:AddRegistration", modelName, plate)
end
end)
if Config.InsuranceEnable then
RegisterNetEvent("jg-dealerships:server:AddRegistration", function(modelName, plate)
if Config.Framework == "QBCore" then
local QBCore = exports["qb-core"]:GetCoreObject()
local src = source
local Player = QBCore.Functions.GetPlayer(src)
local citizenid = Player.PlayerData.citizenid
exports["m-Insurance"]:GiveCarRegistration(src, plate, modelName, 1, citizenid)
elseif Config.Framework == "Qbox" then
local QBX = exports['qb-core']:GetCoreObject()
local src = source
local Player = QBX.Functions.GetPlayer(src)
local citizenid = Player.PlayerData.citizenid
exports["m-Insurance"]:GiveCarRegistration(src, plate, modelName, 1, identifier)
elseif Config.Framework == "ESX" then
ESX = exports.es_extended:getSharedObject()
local src = source
local xPlayer = ESX.GetPlayerFromId(src)
local name = xPlayer.getName()
local identifier = GetPlayerIdentifier(src, 0)
exports["m-Insurance"]:GiveCarRegistration(src, plate, modelName, 1, identifier)
end
end)
end