function RemoveMoney(src, amount) local Player = GetPlayer(src) if Config.Framework == 'esx' or Config.Framework == 'oldesx' then if Player.getMoney() >= amount then Player.removeMoney(amount) return true else return false end else if Player.Functions.RemoveMoney('cash', amount) then return true else return false end end return false end function RemoveBankMoney(src, amount) local Player = GetPlayer(src) if Config.Framework == 'esx' or Config.Framework == 'oldesx' then if Player.getAccount("bank").money >= amount then Player.removeAccountMoney('bank', amount) return true else return false end else local bankBalance = Player.PlayerData.money["bank"] if bankBalance >= amount then Player.Functions.RemoveMoney('bank', amount) return true else return false end end return false end function AddBankMoney(src, amount) local Player = GetPlayer(src) if Config.Framework == 'esx' or Config.Framework == 'oldesx' then Player.addAccountMoney('bank', amount) else Player.Functions.AddMoney('bank', amount) end end function AddMoney(src, amount) local Player = GetPlayer(src) if Config.Framework == 'esx' or Config.Framework == 'oldesx' then Player.addMoney(amount) else Player.Functions.AddMoney('cash', amount) end end function GiveVehicle(identifier, name, helicopter, custom_plate, color, license) local plate = GeneratePlate(custom_plate) local vehicleProps = GetVehicleProperties(name, plate, helicopter, color) if identifier then if Config.Framework == 'esx' or Config.Framework == 'oldesx' then ExecuteSql(string.format("INSERT INTO owned_vehicles (owner, plate, vehicle) VALUES ('%s', '%s', %q)", identifier, plate, json.encode(vehicleProps))) else local garage = Config.GarageQBCore or 'motelgarage' ExecuteSql(string.format("INSERT INTO `player_vehicles` (license, citizenid, vehicle, hash, mods, plate, garage, state) VALUES ('%s', '%s', '%s', '%s', %q, '%s', '%s', %f)", license, identifier, name, GetHashKey(name), json.encode(vehicleProps), plate, garage, 0)) end end return plate, vehicleProps end function Round(value, numDecimalPlaces) if numDecimalPlaces then local power = 10^numDecimalPlaces return math.floor((value * power) + 0.5) / (power) else return math.floor(value + 0.5) end end function GetVehicleProperties(name, plate, helicopter, color) local extras = {} for i=1, 12 do extras[i] = false end if Config.Framework == 'esx' or Config.Framework == 'oldesx' then local defaultProps = { model = GetHashKey(name), plate = plate, plateIndex = 0, bodyHealth = 1000, engineHealth = 1000, tankHealth = 1000, fuelLevel = 100, dirtLevel = 0, color1 = color or 0, color1Custom = {255, 255, 255}, color2 = color or 0, color2Custom = {255, 255, 255}, color1Type = 0, color2Type = 0, customPrimaryColor = nil, customSecondaryColor = nil, pearlescentColor = 111, wheelColor = 156, wheels = 0, windowTint = -1, xenonColor = 255, neonEnabled = { false, false, false, false }, neonColor = {255,0,255}, extras = extras, tyreSmokeColor = {255,255,255}, dashboardColor = 0, interiorColor = 0, modSpoilers = -1, modFrontBumper = -1, modRearBumper = -1, modSideSkirt = -1, modExhaust = -1, modFrame = -1, modGrille = -1, modHood = -1, modFender = -1, modRightFender = -1, modRoof = -1, modEngine = -1, modBrakes = -1, modTransmission = -1, modHorns = -1, modSuspension = -1, modArmor = -1, modTurbo = false, modSmokeEnabled = false, modXenon = false, modFrontWheels = -1, modBackWheels = -1, modPlateHolder = -1, modVanityPlate = -1, modTrimA = -1, modOrnaments = -1, modDashboard = -1, modDial = -1, modDoorSpeaker = -1, modSeats = -1, modSteeringWheel = -1, modShifterLeavers = -1, modAPlate = -1, modSpeakers = -1, modTrunk = -1, modHydrolic = -1, modEngineBlock = -1, modAirFilter = -1, modStruts = -1, modArchCover = -1, modAerials = -1, modTrimB = -1, modTank = -1, modWindows = -1, modDoorR = -1, modLivery = -1, modLightbar = -1, livery = -1, } if helicopter then defaultProps.liveryRoof = -1 defaultProps.extras = { ["1"] = true, ["2"] = true, ["7"] = true, } defaultProps.windowStatus = { ["1"] = true, ["2"] = true, ["3"] = true, ["4"] = true, ["5"] = true, ["6"] = true, ["7"] = false, ["0"] = true, } end return defaultProps else local defaultProps = { model = GetHashKey(name), plate = plate, color1 = color, color2 = color, } if helicopter then defaultProps.liveryRoof = -1 defaultProps.extras = { ["1"] = true, ["2"] = true, ["7"] = true, } defaultProps.windowStatus = { ["1"] = true, ["2"] = true, ["3"] = true, ["4"] = true, ["5"] = true, ["6"] = true, ["7"] = false, ["0"] = true, } end return defaultProps end end local StringCharset = {} local NumberCharset = {} for i = 48, 57 do NumberCharset[#NumberCharset+1] = string.char(i) end for i = 65, 90 do StringCharset[#StringCharset+1] = string.char(i) end for i = 97, 122 do StringCharset[#StringCharset+1] = string.char(i) end function RandomStr(length) if length <= 0 then return '' end return RandomStr(length - 1) .. StringCharset[math.random(1, #StringCharset)] end function RandomInt(length) if length <= 0 then return '' end return RandomInt(length - 1) .. NumberCharset[math.random(1, #NumberCharset)] end function CheckPlateExists(plate) local tableName = 'player_vehicles' if Config.Framework == 'esx' or Config.Framework == 'oldesx' then tableName = 'owned_vehicles' end plate = plate:upper() local result = ExecuteSql(string.format("SELECT plate FROM %s WHERE plate = '%s'", tableName, plate)) if result[1] then return true else return false end end function GeneratePlate(custom_plate) local tableName = 'player_vehicles' local plate = custom_plate and custom_plate or (RandomInt(1) .. RandomStr(2) .. RandomInt(3) .. RandomStr(2)) if Config.Framework == 'esx' or Config.Framework == 'oldesx' then tableName = 'owned_vehicles' plate = custom_plate and custom_plate or (RandomStr(3) .. ' ' .. RandomInt(3)) end plate = plate:upper() local result = ExecuteSql(string.format("SELECT plate FROM %s WHERE plate = '%s'", tableName, plate)) if result[1] then return GeneratePlate(false) else return plate:upper() end end