175 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| QBShared = QBShared or {}
 | |
| 
 | |
| local StringCharset = {}
 | |
| local NumberCharset = {}
 | |
| 
 | |
| QBShared.StarterItems = {
 | |
|     ['phone'] = { amount = 1, item = 'phone' },
 | |
|     ['id_card'] = { amount = 1, item = 'id_card' },
 | |
|     ['driver_license'] = { amount = 1, item = 'driver_license' },
 | |
| }
 | |
| 
 | |
| 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 QBShared.RandomStr(length)
 | |
|     if length <= 0 then return '' end
 | |
|     return QBShared.RandomStr(length - 1) .. StringCharset[math.random(1, #StringCharset)]
 | |
| end
 | |
| 
 | |
| function QBShared.RandomInt(length)
 | |
|     if length <= 0 then return '' end
 | |
|     return QBShared.RandomInt(length - 1) .. NumberCharset[math.random(1, #NumberCharset)]
 | |
| end
 | |
| 
 | |
| function QBShared.SplitStr(str, delimiter)
 | |
|     local result = {}
 | |
|     local from = 1
 | |
|     local delim_from, delim_to = string.find(str, delimiter, from)
 | |
|     while delim_from do
 | |
|         result[#result + 1] = string.sub(str, from, delim_from - 1)
 | |
|         from = delim_to + 1
 | |
|         delim_from, delim_to = string.find(str, delimiter, from)
 | |
|     end
 | |
|     result[#result + 1] = string.sub(str, from)
 | |
|     return result
 | |
| end
 | |
| 
 | |
| function QBShared.Trim(value)
 | |
|     if not value then return nil end
 | |
|     return (string.gsub(value, '^%s*(.-)%s*$', '%1'))
 | |
| end
 | |
| 
 | |
| function QBShared.FirstToUpper(value)
 | |
|     if not value then return nil end
 | |
|     return (value:gsub("^%l", string.upper))
 | |
| end
 | |
| 
 | |
| function QBShared.Round(value, numDecimalPlaces)
 | |
|     if not numDecimalPlaces then return math.floor(value + 0.5) end
 | |
|     local power = 10 ^ numDecimalPlaces
 | |
|     return math.floor((value * power) + 0.5) / (power)
 | |
| end
 | |
| 
 | |
| function QBShared.ChangeVehicleExtra(vehicle, extra, enable)
 | |
|     if DoesExtraExist(vehicle, extra) then
 | |
|         if enable then
 | |
|             SetVehicleExtra(vehicle, extra, false)
 | |
|             if not IsVehicleExtraTurnedOn(vehicle, extra) then
 | |
|                 QBShared.ChangeVehicleExtra(vehicle, extra, enable)
 | |
|             end
 | |
|         else
 | |
|             SetVehicleExtra(vehicle, extra, true)
 | |
|             if IsVehicleExtraTurnedOn(vehicle, extra) then
 | |
|                 QBShared.ChangeVehicleExtra(vehicle, extra, enable)
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| function QBShared.IsFunction(value)
 | |
|     if type(value) == 'table' then
 | |
|         return value.__cfx_functionReference ~= nil and type(value.__cfx_functionReference) == "string"
 | |
|     end
 | |
| 
 | |
|     return type(value) == 'function'
 | |
| end
 | |
| 
 | |
| function QBShared.SetDefaultVehicleExtras(vehicle, config)
 | |
|     -- Clear Extras
 | |
|     for i = 1, 20 do
 | |
|         if DoesExtraExist(vehicle, i) then
 | |
|             SetVehicleExtra(vehicle, i, 1)
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     for id, enabled in pairs(config) do
 | |
|         if type(enabled) ~= 'boolean' then
 | |
|             enabled = true
 | |
|         end
 | |
| 
 | |
|         QBShared.ChangeVehicleExtra(vehicle, tonumber(id), enabled)
 | |
|     end
 | |
| end
 | |
| 
 | |
| QBShared.MaleNoGloves = {
 | |
|     [0] = true,
 | |
|     [1] = true,
 | |
|     [2] = true,
 | |
|     [3] = true,
 | |
|     [4] = true,
 | |
|     [5] = true,
 | |
|     [6] = true,
 | |
|     [7] = true,
 | |
|     [8] = true,
 | |
|     [9] = true,
 | |
|     [10] = true,
 | |
|     [11] = true,
 | |
|     [12] = true,
 | |
|     [13] = true,
 | |
|     [14] = true,
 | |
|     [15] = true,
 | |
|     [18] = true,
 | |
|     [26] = true,
 | |
|     [52] = true,
 | |
|     [53] = true,
 | |
|     [54] = true,
 | |
|     [55] = true,
 | |
|     [56] = true,
 | |
|     [57] = true,
 | |
|     [58] = true,
 | |
|     [59] = true,
 | |
|     [60] = true,
 | |
|     [61] = true,
 | |
|     [62] = true,
 | |
|     [112] = true,
 | |
|     [113] = true,
 | |
|     [114] = true,
 | |
|     [118] = true,
 | |
|     [125] = true,
 | |
|     [132] = true
 | |
| }
 | |
| 
 | |
| QBShared.FemaleNoGloves = {
 | |
|     [0] = true,
 | |
|     [1] = true,
 | |
|     [2] = true,
 | |
|     [3] = true,
 | |
|     [4] = true,
 | |
|     [5] = true,
 | |
|     [6] = true,
 | |
|     [7] = true,
 | |
|     [8] = true,
 | |
|     [9] = true,
 | |
|     [10] = true,
 | |
|     [11] = true,
 | |
|     [12] = true,
 | |
|     [13] = true,
 | |
|     [14] = true,
 | |
|     [15] = true,
 | |
|     [19] = true,
 | |
|     [59] = true,
 | |
|     [60] = true,
 | |
|     [61] = true,
 | |
|     [62] = true,
 | |
|     [63] = true,
 | |
|     [64] = true,
 | |
|     [65] = true,
 | |
|     [66] = true,
 | |
|     [67] = true,
 | |
|     [68] = true,
 | |
|     [69] = true,
 | |
|     [70] = true,
 | |
|     [71] = true,
 | |
|     [129] = true,
 | |
|     [130] = true,
 | |
|     [131] = true,
 | |
|     [135] = true,
 | |
|     [142] = true,
 | |
|     [149] = true,
 | |
|     [153] = true,
 | |
|     [157] = true,
 | |
|     [161] = true,
 | |
|     [165] = true
 | |
| }
 | 
