forked from Simnation/Main
ed
This commit is contained in:
parent
6d22d5f77c
commit
63fbc60a00
86 changed files with 8352 additions and 3428 deletions
|
@ -1,488 +1,488 @@
|
|||
-- logs text to the console
|
||||
function Log(text)
|
||||
if (Config.isDebug) then
|
||||
Log(text)
|
||||
end
|
||||
end
|
||||
|
||||
-- Return all vehicle modifications in an array
|
||||
function GetVehicleModifications(vehicle)
|
||||
local color1, color2 = GetVehicleColours(vehicle)
|
||||
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
|
||||
|
||||
local extras = {}
|
||||
for i = 0, 20, 1 do
|
||||
if (DoesExtraExist(vehicle, i)) then
|
||||
if (IsVehicleExtraTurnedOn(vehicle, i)) then
|
||||
table.insert(extras, { i, 0 })
|
||||
else
|
||||
table.insert(extras, { i, 1 })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local tiresBurst = {}
|
||||
for i = 0, 5, 1 do
|
||||
if (IsVehicleTyreBurst(vehicle, i, true)) then
|
||||
table.insert(tiresBurst, { i, true })
|
||||
elseif (IsVehicleTyreBurst(vehicle, i, false)) then
|
||||
table.insert(tiresBurst, { i, false })
|
||||
end
|
||||
end
|
||||
|
||||
local doorsMissing = {}
|
||||
for i = 0, 7, 1 do
|
||||
if (IsVehicleDoorDamaged(vehicle, i)) then
|
||||
table.insert(doorsMissing, i)
|
||||
end
|
||||
end
|
||||
|
||||
local windowsBroken = {}
|
||||
--for i = 0, 13, 1 do
|
||||
-- if (not IsVehicleWindowIntact(vehicle, i)) then
|
||||
-- table.insert(windowsBroken, i)
|
||||
-- end
|
||||
--end
|
||||
|
||||
-- custom colors
|
||||
local hasCustomPrimaryColor = GetIsVehiclePrimaryColourCustom(vehicle)
|
||||
local customPrimaryColor = nil
|
||||
if (hasCustomPrimaryColor) then
|
||||
local r, g, b = GetVehicleCustomPrimaryColour(vehicle)
|
||||
customPrimaryColor = { r, g, b }
|
||||
end
|
||||
|
||||
local hasCustomSecondaryColor = GetIsVehicleSecondaryColourCustom(vehicle)
|
||||
local customSecondaryColor = nil
|
||||
if (hasCustomSecondaryColor) then
|
||||
local r, g, b = GetVehicleCustomSecondaryColour(vehicle)
|
||||
customSecondaryColor = { r, g, b }
|
||||
end
|
||||
|
||||
return {
|
||||
-- 1 model
|
||||
GetEntityModel(vehicle),
|
||||
|
||||
-- 2 lockStatus
|
||||
GetVehicleDoorLockStatus(vehicle),
|
||||
|
||||
-- 3 health
|
||||
math.floor(GetEntityHealth(vehicle) * 10.0) / 10.0,
|
||||
-- 4 bodyHealth
|
||||
math.floor(GetVehicleBodyHealth(vehicle) * 10.0) / 10.0,
|
||||
-- 5 engineHealth
|
||||
math.floor(GetVehicleEngineHealth(vehicle) * 10.0) / 10.0,
|
||||
-- 6 petrolTankHealth
|
||||
math.floor(GetVehiclePetrolTankHealth(vehicle) * 10.0) / 10.0,
|
||||
|
||||
-- 7 dirtLevel
|
||||
math.floor(GetVehicleDirtLevel(vehicle) * 10.0) / 10.0,
|
||||
-- 8 fuelLevel
|
||||
math.floor(exports[Config.exports]:GetFuel(vehicle) * 10.0) / 10.0,
|
||||
|
||||
---------------------------------------------------------------------- Implementierung Miho
|
||||
--math.floor(DecorGetFloat(vehicle, Config.FuelDecor)*10) / 10.0,
|
||||
---------------------------------------------------------------------- Implementierung Miho ENDE
|
||||
|
||||
-- 9 plateIndex
|
||||
GetVehicleNumberPlateTextIndex(vehicle),
|
||||
|
||||
-- 10 primaryColor
|
||||
color1,
|
||||
-- 11 secondaryColor
|
||||
color2,
|
||||
-- 12 pearlescentColor
|
||||
pearlescentColor,
|
||||
-- 13 wheelColor
|
||||
wheelColor,
|
||||
|
||||
-- 14 wheelType
|
||||
GetVehicleWheelType(vehicle),
|
||||
-- 15 customWheelsFront
|
||||
GetVehicleModVariation(vehicle, 23);
|
||||
-- 16 customWheelsBack
|
||||
GetVehicleModVariation(vehicle, 24);
|
||||
-- 17 windowTint
|
||||
GetVehicleWindowTint(vehicle),
|
||||
-- 18 enabledNeon
|
||||
{
|
||||
IsVehicleNeonLightEnabled(vehicle, 0),
|
||||
IsVehicleNeonLightEnabled(vehicle, 1),
|
||||
IsVehicleNeonLightEnabled(vehicle, 2),
|
||||
IsVehicleNeonLightEnabled(vehicle, 3),
|
||||
},
|
||||
-- 19 neonColor
|
||||
table.pack(GetVehicleNeonLightsColour(vehicle)),
|
||||
-- 20 tireSmokeColor
|
||||
table.pack(GetVehicleTyreSmokeColor(vehicle)),
|
||||
|
||||
-- 21 extras
|
||||
extras,
|
||||
|
||||
-- 22-32 mods
|
||||
GetVehicleMod(vehicle, 0),
|
||||
GetVehicleMod(vehicle, 1),
|
||||
GetVehicleMod(vehicle, 2),
|
||||
GetVehicleMod(vehicle, 3),
|
||||
GetVehicleMod(vehicle, 4),
|
||||
GetVehicleMod(vehicle, 5),
|
||||
GetVehicleMod(vehicle, 6),
|
||||
GetVehicleMod(vehicle, 7),
|
||||
GetVehicleMod(vehicle, 8),
|
||||
GetVehicleMod(vehicle, 9),
|
||||
GetVehicleMod(vehicle, 10),
|
||||
|
||||
-- 33-38 mods
|
||||
GetVehicleMod(vehicle, 11),
|
||||
GetVehicleMod(vehicle, 12),
|
||||
GetVehicleMod(vehicle, 13),
|
||||
GetVehicleMod(vehicle, 14),
|
||||
GetVehicleMod(vehicle, 15),
|
||||
GetVehicleMod(vehicle, 16),
|
||||
|
||||
-- 39-41 mods
|
||||
IsToggleModOn(vehicle, 18),
|
||||
IsToggleModOn(vehicle, 20),
|
||||
IsToggleModOn(vehicle, 22),
|
||||
|
||||
-- 42-43 mods
|
||||
GetVehicleMod(vehicle, 23),
|
||||
GetVehicleMod(vehicle, 24),
|
||||
|
||||
-- 44-66 mods
|
||||
GetVehicleMod(vehicle, 25),
|
||||
GetVehicleMod(vehicle, 26),
|
||||
GetVehicleMod(vehicle, 27),
|
||||
GetVehicleMod(vehicle, 28),
|
||||
GetVehicleMod(vehicle, 29),
|
||||
GetVehicleMod(vehicle, 30),
|
||||
GetVehicleMod(vehicle, 31),
|
||||
GetVehicleMod(vehicle, 32),
|
||||
GetVehicleMod(vehicle, 33),
|
||||
GetVehicleMod(vehicle, 34),
|
||||
GetVehicleMod(vehicle, 35),
|
||||
GetVehicleMod(vehicle, 36),
|
||||
GetVehicleMod(vehicle, 37),
|
||||
GetVehicleMod(vehicle, 38),
|
||||
GetVehicleMod(vehicle, 39),
|
||||
GetVehicleMod(vehicle, 40),
|
||||
GetVehicleMod(vehicle, 41),
|
||||
GetVehicleMod(vehicle, 42),
|
||||
GetVehicleMod(vehicle, 43),
|
||||
GetVehicleMod(vehicle, 44),
|
||||
GetVehicleMod(vehicle, 45),
|
||||
GetVehicleMod(vehicle, 46),
|
||||
GetVehicleMod(vehicle, 48),
|
||||
|
||||
-- 67 livery
|
||||
GetVehicleLivery(vehicle),
|
||||
|
||||
-- 68 missingDoors
|
||||
doorsMissing,
|
||||
|
||||
-- 69 bulletproofTires
|
||||
not GetVehicleTyresCanBurst(vehicle),
|
||||
-- 70 tiresBurst
|
||||
tiresBurst,
|
||||
|
||||
-- 71 brokenWindows
|
||||
windowsBroken,
|
||||
|
||||
-- 72 xenon lights
|
||||
GetVehicleXenonLightsColour(vehicle),
|
||||
|
||||
-- 73 custom primary color
|
||||
customPrimaryColor,
|
||||
-- 74 custom secondary color
|
||||
customSecondaryColor,
|
||||
|
||||
-- 75 interior color
|
||||
GetVehicleInteriorColor(vehicle)
|
||||
}
|
||||
end
|
||||
|
||||
-- Apply all modifications to a vehicle entity
|
||||
function SetVehicleModifications(vehicle, plate, modifications)
|
||||
SetVehicleModKit(vehicle, 0)
|
||||
|
||||
-- plate
|
||||
SetVehicleNumberPlateText(vehicle, plate)
|
||||
SetVehicleNumberPlateTextIndex(vehicle, modifications[9])
|
||||
|
||||
-- lockStatus
|
||||
SetVehicleDoorsLocked(vehicle, modifications[2])
|
||||
|
||||
-- colours
|
||||
SetVehicleColours(vehicle, modifications[10], modifications[11])
|
||||
if (modifications[73]) then
|
||||
SetVehicleCustomPrimaryColour(vehicle, modifications[73][1], modifications[73][2], modifications[73][3])
|
||||
end
|
||||
if (modifications[74]) then
|
||||
SetVehicleCustomSecondaryColour(vehicle, modifications[74][1], modifications[74][2], modifications[74][3])
|
||||
end
|
||||
if (modifications[75]) then
|
||||
SetVehicleInteriorColor(vehicle, modifications[75])
|
||||
end
|
||||
|
||||
SetVehicleExtraColours(vehicle, modifications[12], modifications[13])
|
||||
|
||||
SetVehicleTyreSmokeColor(vehicle, modifications[20][1], modifications[20][2], modifications[20][3])
|
||||
|
||||
-- wheels
|
||||
SetVehicleWheelType(vehicle, modifications[14])
|
||||
|
||||
-- windows
|
||||
SetVehicleWindowTint(vehicle, modifications[17])
|
||||
|
||||
-- neonlight
|
||||
SetVehicleNeonLightEnabled(vehicle, 0, modifications[18][1])
|
||||
SetVehicleNeonLightEnabled(vehicle, 1, modifications[18][2])
|
||||
SetVehicleNeonLightEnabled(vehicle, 2, modifications[18][3])
|
||||
SetVehicleNeonLightEnabled(vehicle, 3, modifications[18][4])
|
||||
|
||||
SetVehicleNeonLightsColour(vehicle, modifications[19][1], modifications[19][2], modifications[19][3])
|
||||
|
||||
-- mods
|
||||
SetVehicleMod(vehicle, 0, modifications[22], modifications[15])
|
||||
SetVehicleMod(vehicle, 1, modifications[23], modifications[15])
|
||||
SetVehicleMod(vehicle, 2, modifications[24], modifications[15])
|
||||
SetVehicleMod(vehicle, 3, modifications[25], modifications[15])
|
||||
SetVehicleMod(vehicle, 4, modifications[26], modifications[15])
|
||||
SetVehicleMod(vehicle, 5, modifications[27], modifications[15])
|
||||
SetVehicleMod(vehicle, 6, modifications[28], modifications[15])
|
||||
SetVehicleMod(vehicle, 7, modifications[29], modifications[15])
|
||||
SetVehicleMod(vehicle, 8, modifications[30], modifications[15])
|
||||
SetVehicleMod(vehicle, 9, modifications[31], modifications[15])
|
||||
SetVehicleMod(vehicle, 10, modifications[32], modifications[15])
|
||||
|
||||
SetVehicleMod(vehicle, 11, modifications[33], modifications[15])
|
||||
SetVehicleMod(vehicle, 12, modifications[34], modifications[15])
|
||||
SetVehicleMod(vehicle, 13, modifications[35], modifications[15])
|
||||
|
||||
SetVehicleMod(vehicle, 14, modifications[36], modifications[15])
|
||||
|
||||
SetVehicleMod(vehicle, 15, modifications[37], modifications[15])
|
||||
SetVehicleMod(vehicle, 16, modifications[38], modifications[15])
|
||||
|
||||
ToggleVehicleMod(vehicle, 18, modifications[39])
|
||||
ToggleVehicleMod(vehicle, 20, modifications[40])
|
||||
ToggleVehicleMod(vehicle, 22, modifications[41])
|
||||
|
||||
SetVehicleMod(vehicle, 23, modifications[42], modifications[15])
|
||||
SetVehicleMod(vehicle, 24, modifications[43], modifications[16])
|
||||
|
||||
SetVehicleMod(vehicle, 25, modifications[44], modifications[15])
|
||||
SetVehicleMod(vehicle, 26, modifications[45], modifications[15])
|
||||
SetVehicleMod(vehicle, 27, modifications[46], modifications[15])
|
||||
SetVehicleMod(vehicle, 28, modifications[47], modifications[15])
|
||||
SetVehicleMod(vehicle, 29, modifications[48], modifications[15])
|
||||
SetVehicleMod(vehicle, 30, modifications[49], modifications[15])
|
||||
SetVehicleMod(vehicle, 31, modifications[50], modifications[15])
|
||||
SetVehicleMod(vehicle, 32, modifications[51], modifications[15])
|
||||
SetVehicleMod(vehicle, 33, modifications[52], modifications[15])
|
||||
SetVehicleMod(vehicle, 34, modifications[53], modifications[15])
|
||||
SetVehicleMod(vehicle, 35, modifications[54], modifications[15])
|
||||
SetVehicleMod(vehicle, 36, modifications[55], modifications[15])
|
||||
SetVehicleMod(vehicle, 37, modifications[56], modifications[15])
|
||||
SetVehicleMod(vehicle, 38, modifications[57], modifications[15])
|
||||
SetVehicleMod(vehicle, 39, modifications[58], modifications[15])
|
||||
SetVehicleMod(vehicle, 40, modifications[59], modifications[15])
|
||||
SetVehicleMod(vehicle, 41, modifications[60], modifications[15])
|
||||
SetVehicleMod(vehicle, 42, modifications[61], modifications[15])
|
||||
SetVehicleMod(vehicle, 43, modifications[62], modifications[15])
|
||||
SetVehicleMod(vehicle, 44, modifications[63], modifications[15])
|
||||
SetVehicleMod(vehicle, 45, modifications[64], modifications[15])
|
||||
SetVehicleMod(vehicle, 46, modifications[65], modifications[15])
|
||||
SetVehicleMod(vehicle, 48, modifications[66], modifications[15])
|
||||
|
||||
SetVehicleLivery(vehicle, modifications[67])
|
||||
|
||||
-- extras
|
||||
for i = 1, #modifications[21], 1 do
|
||||
SetVehicleExtra(vehicle, modifications[21][i][1], modifications[21][i][2])
|
||||
end
|
||||
|
||||
-- stats
|
||||
SetEntityHealth(vehicle, modifications[3])
|
||||
SetVehicleBodyHealth(vehicle, modifications[4])
|
||||
SetVehicleEngineHealth(vehicle, modifications[5])
|
||||
SetVehiclePetrolTankHealth(vehicle, modifications[6])
|
||||
if (Config.renderScorched and (modifications[5] < -3999.0 or modifications[6] < -999.0)) then
|
||||
TriggerServerEvent("mh_Parking:renderScorched", NetworkGetNetworkIdFromEntity(vehicle), true)
|
||||
end
|
||||
|
||||
SetVehicleDirtLevel(vehicle, modifications[7])
|
||||
exports[Config.exports]:SetFuel(vehicle, modifications[8])
|
||||
|
||||
---------------------------------------------------------------------- Implementierung Miho
|
||||
--[[
|
||||
fuel = modifications[8]
|
||||
if type(fuel) == 'number' and fuel >= 0 and fuel <= 100 then
|
||||
SetVehicleFuelLevel(vehicle, fuel + 0.0)
|
||||
DecorSetFloat(vehicle, Config.FuelDecor, GetVehicleFuelLevel(vehicle))
|
||||
end
|
||||
]]
|
||||
---------------------------------------------------------------------- Implementierung Miho ENDE
|
||||
|
||||
|
||||
-- doors
|
||||
for i = 1, #modifications[68], 1 do
|
||||
SetVehicleDoorBroken(vehicle, modifications[68][i], true)
|
||||
end
|
||||
|
||||
-- tires
|
||||
SetVehicleTyresCanBurst(vehicle, not modifications[69])
|
||||
if (not modifications[69]) then
|
||||
for i = 1, #modifications[70], 1 do
|
||||
SetVehicleTyreBurst(vehicle, modifications[70][i][1], modifications[70][i][2], 1000.0)
|
||||
end
|
||||
end
|
||||
|
||||
-- windows
|
||||
for i = 1, #modifications[71], 1 do
|
||||
SmashVehicleWindow(vehicle, modifications[71][i])
|
||||
end
|
||||
|
||||
-- xenon lights
|
||||
if (modifications[72]) then
|
||||
SetVehicleXenonLightsColour(vehicle, modifications[72])
|
||||
end
|
||||
end
|
||||
|
||||
-- Return closest loaded vehicle entity or nil if no vehicle is found
|
||||
function GetClosestVehicle(position, maxRadius)
|
||||
local vehicles = GetAllVehicles()
|
||||
local dist = maxRadius
|
||||
local closestVehicle = nil
|
||||
|
||||
for i=1, #vehicles, 1 do
|
||||
local vehicleCoords = GetEntityCoords(vehicles[i])
|
||||
local tempDist = Vdist(vehicleCoords.x, vehicleCoords.y, vehicleCoords.z, position.x, position.y, position.z)
|
||||
if (tempDist < dist) then
|
||||
dist = tempDist
|
||||
closestVehicle = vehicles[i]
|
||||
end
|
||||
end
|
||||
|
||||
if (closestVehicle ~= nil and DoesEntityExist(closestVehicle)) then
|
||||
return closestVehicle
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
-- Returns all loaded vehicles on client side
|
||||
function GetAllVehicles()
|
||||
local vehicles = {}
|
||||
|
||||
for vehicle in EnumerateVehicles() do
|
||||
table.insert(vehicles, vehicle)
|
||||
end
|
||||
|
||||
return vehicles
|
||||
end
|
||||
|
||||
function IsVehicleBlacklisted(vehicle)
|
||||
-- check class
|
||||
local class = GetVehicleClass(vehicle)
|
||||
for i = 1, #Config.classesBlacklist, 1 do
|
||||
if (class == Config.classesBlacklist[i]) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
-- check model
|
||||
local modelHash = GetEntityModel(vehicle)
|
||||
for i = 1, #Config.vehiclesBlacklist, 1 do
|
||||
if (modelHash == Config.vehiclesBlacklist[i]) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function GetVehiclePosition(plate)
|
||||
if (GetResourceState("kimi_callbacks") ~= "started") then
|
||||
Log("^1[ERROR] \"kimi_callbacks\" is either not installed properly or hasn't been started!")
|
||||
Log("^1[ERROR] The export \"GetVehiclePosition\" can only be used when having this resource installed.")
|
||||
return nil
|
||||
end
|
||||
|
||||
if (plate == nil) then
|
||||
Log("^1[ERROR] \"plate\" was nil while trying to call export \"GetVehiclePosition\"!")
|
||||
return nil
|
||||
end
|
||||
|
||||
if (type(plate) ~= "string") then
|
||||
Log("^1[ERROR] \"plate\" (\"" .. plate .. "\") needs to be of type string when calling export \"GetVehiclePosition\"!")
|
||||
return nil
|
||||
end
|
||||
|
||||
local position = exports["kimi_callbacks"]:Trigger("AP:getVehiclePosition", plate:upper())
|
||||
|
||||
return position
|
||||
end
|
||||
|
||||
function GetVehiclePositions(...)
|
||||
if (GetResourceState("kimi_callbacks") ~= "started") then
|
||||
Log("^1[ERROR] \"kimi_callbacks\" is either not installed properly or hasn't been started!")
|
||||
Log("^1[ERROR] The export \"GetVehiclePositions\" can only be used when having this resource installed.")
|
||||
return nil
|
||||
end
|
||||
|
||||
local plates = { ... }
|
||||
|
||||
for i, plate in ipairs(plates) do
|
||||
if (plate == nil) then
|
||||
Log("^1[ERROR] \"plate\" (Index: \"" .. i .. "\") was nil while trying to call export \"GetVehiclePositions\"!")
|
||||
return nil
|
||||
end
|
||||
|
||||
if (type(plate) ~= "string") then
|
||||
Log("^1[ERROR] \"plate\" (\"" .. plate .. "\") (Index: " .. i .. ") needs to be of type string when calling export \"GetVehiclePositions\"!")
|
||||
return nil
|
||||
end
|
||||
|
||||
plates[i] = plates[i]:upper()
|
||||
end
|
||||
|
||||
local data = exports["kimi_callbacks"]:Trigger("AP:getVehiclePositions", plates)
|
||||
|
||||
return data
|
||||
end
|
||||
|
||||
-- getting all vehicles
|
||||
function EnumerateVehicles()
|
||||
return EnumerateEntities(FindFirstVehicle, FindNextVehicle, EndFindVehicle)
|
||||
end
|
||||
function EnumerateEntities(initFunc, moveFunc, disposeFunc)
|
||||
return coroutine.wrap(function()
|
||||
local iter, id = initFunc()
|
||||
if not id or id == 0 then
|
||||
disposeFunc(iter)
|
||||
return
|
||||
end
|
||||
|
||||
local enum = {handle = iter, destructor = disposeFunc}
|
||||
setmetatable(enum, entityEnumerator)
|
||||
|
||||
local next = true
|
||||
repeat
|
||||
coroutine.yield(id)
|
||||
next, id = moveFunc(iter)
|
||||
until not next
|
||||
|
||||
enum.destructor, enum.handle = nil, nil
|
||||
disposeFunc(iter)
|
||||
end)
|
||||
end
|
||||
local entityEnumerator = {
|
||||
__gc = function(enum)
|
||||
if enum.destructor and enum.handle then
|
||||
enum.destructor(enum.handle)
|
||||
end
|
||||
enum.destructor = nil
|
||||
enum.handle = nil
|
||||
end
|
||||
}
|
||||
-- logs text to the console
|
||||
function Log(text)
|
||||
if (Config.isDebug) then
|
||||
Log(text)
|
||||
end
|
||||
end
|
||||
|
||||
-- Return all vehicle modifications in an array
|
||||
function GetVehicleModifications(vehicle)
|
||||
local color1, color2 = GetVehicleColours(vehicle)
|
||||
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
|
||||
|
||||
local extras = {}
|
||||
for i = 0, 20, 1 do
|
||||
if (DoesExtraExist(vehicle, i)) then
|
||||
if (IsVehicleExtraTurnedOn(vehicle, i)) then
|
||||
table.insert(extras, { i, 0 })
|
||||
else
|
||||
table.insert(extras, { i, 1 })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local tiresBurst = {}
|
||||
for i = 0, 5, 1 do
|
||||
if (IsVehicleTyreBurst(vehicle, i, true)) then
|
||||
table.insert(tiresBurst, { i, true })
|
||||
elseif (IsVehicleTyreBurst(vehicle, i, false)) then
|
||||
table.insert(tiresBurst, { i, false })
|
||||
end
|
||||
end
|
||||
|
||||
local doorsMissing = {}
|
||||
for i = 0, 7, 1 do
|
||||
if (IsVehicleDoorDamaged(vehicle, i)) then
|
||||
table.insert(doorsMissing, i)
|
||||
end
|
||||
end
|
||||
|
||||
local windowsBroken = {}
|
||||
--for i = 0, 13, 1 do
|
||||
-- if (not IsVehicleWindowIntact(vehicle, i)) then
|
||||
-- table.insert(windowsBroken, i)
|
||||
-- end
|
||||
--end
|
||||
|
||||
-- custom colors
|
||||
local hasCustomPrimaryColor = GetIsVehiclePrimaryColourCustom(vehicle)
|
||||
local customPrimaryColor = nil
|
||||
if (hasCustomPrimaryColor) then
|
||||
local r, g, b = GetVehicleCustomPrimaryColour(vehicle)
|
||||
customPrimaryColor = { r, g, b }
|
||||
end
|
||||
|
||||
local hasCustomSecondaryColor = GetIsVehicleSecondaryColourCustom(vehicle)
|
||||
local customSecondaryColor = nil
|
||||
if (hasCustomSecondaryColor) then
|
||||
local r, g, b = GetVehicleCustomSecondaryColour(vehicle)
|
||||
customSecondaryColor = { r, g, b }
|
||||
end
|
||||
|
||||
return {
|
||||
-- 1 model
|
||||
GetEntityModel(vehicle),
|
||||
|
||||
-- 2 lockStatus
|
||||
GetVehicleDoorLockStatus(vehicle),
|
||||
|
||||
-- 3 health
|
||||
math.floor(GetEntityHealth(vehicle) * 10.0) / 10.0,
|
||||
-- 4 bodyHealth
|
||||
math.floor(GetVehicleBodyHealth(vehicle) * 10.0) / 10.0,
|
||||
-- 5 engineHealth
|
||||
math.floor(GetVehicleEngineHealth(vehicle) * 10.0) / 10.0,
|
||||
-- 6 petrolTankHealth
|
||||
math.floor(GetVehiclePetrolTankHealth(vehicle) * 10.0) / 10.0,
|
||||
|
||||
-- 7 dirtLevel
|
||||
math.floor(GetVehicleDirtLevel(vehicle) * 10.0) / 10.0,
|
||||
-- 8 fuelLevel
|
||||
math.floor(exports[Config.exports]:GetFuel(vehicle) * 10.0) / 10.0,
|
||||
|
||||
---------------------------------------------------------------------- Implementierung Miho
|
||||
--math.floor(DecorGetFloat(vehicle, Config.FuelDecor)*10) / 10.0,
|
||||
---------------------------------------------------------------------- Implementierung Miho ENDE
|
||||
|
||||
-- 9 plateIndex
|
||||
GetVehicleNumberPlateTextIndex(vehicle),
|
||||
|
||||
-- 10 primaryColor
|
||||
color1,
|
||||
-- 11 secondaryColor
|
||||
color2,
|
||||
-- 12 pearlescentColor
|
||||
pearlescentColor,
|
||||
-- 13 wheelColor
|
||||
wheelColor,
|
||||
|
||||
-- 14 wheelType
|
||||
GetVehicleWheelType(vehicle),
|
||||
-- 15 customWheelsFront
|
||||
GetVehicleModVariation(vehicle, 23);
|
||||
-- 16 customWheelsBack
|
||||
GetVehicleModVariation(vehicle, 24);
|
||||
-- 17 windowTint
|
||||
GetVehicleWindowTint(vehicle),
|
||||
-- 18 enabledNeon
|
||||
{
|
||||
IsVehicleNeonLightEnabled(vehicle, 0),
|
||||
IsVehicleNeonLightEnabled(vehicle, 1),
|
||||
IsVehicleNeonLightEnabled(vehicle, 2),
|
||||
IsVehicleNeonLightEnabled(vehicle, 3),
|
||||
},
|
||||
-- 19 neonColor
|
||||
table.pack(GetVehicleNeonLightsColour(vehicle)),
|
||||
-- 20 tireSmokeColor
|
||||
table.pack(GetVehicleTyreSmokeColor(vehicle)),
|
||||
|
||||
-- 21 extras
|
||||
extras,
|
||||
|
||||
-- 22-32 mods
|
||||
GetVehicleMod(vehicle, 0),
|
||||
GetVehicleMod(vehicle, 1),
|
||||
GetVehicleMod(vehicle, 2),
|
||||
GetVehicleMod(vehicle, 3),
|
||||
GetVehicleMod(vehicle, 4),
|
||||
GetVehicleMod(vehicle, 5),
|
||||
GetVehicleMod(vehicle, 6),
|
||||
GetVehicleMod(vehicle, 7),
|
||||
GetVehicleMod(vehicle, 8),
|
||||
GetVehicleMod(vehicle, 9),
|
||||
GetVehicleMod(vehicle, 10),
|
||||
|
||||
-- 33-38 mods
|
||||
GetVehicleMod(vehicle, 11),
|
||||
GetVehicleMod(vehicle, 12),
|
||||
GetVehicleMod(vehicle, 13),
|
||||
GetVehicleMod(vehicle, 14),
|
||||
GetVehicleMod(vehicle, 15),
|
||||
GetVehicleMod(vehicle, 16),
|
||||
|
||||
-- 39-41 mods
|
||||
IsToggleModOn(vehicle, 18),
|
||||
IsToggleModOn(vehicle, 20),
|
||||
IsToggleModOn(vehicle, 22),
|
||||
|
||||
-- 42-43 mods
|
||||
GetVehicleMod(vehicle, 23),
|
||||
GetVehicleMod(vehicle, 24),
|
||||
|
||||
-- 44-66 mods
|
||||
GetVehicleMod(vehicle, 25),
|
||||
GetVehicleMod(vehicle, 26),
|
||||
GetVehicleMod(vehicle, 27),
|
||||
GetVehicleMod(vehicle, 28),
|
||||
GetVehicleMod(vehicle, 29),
|
||||
GetVehicleMod(vehicle, 30),
|
||||
GetVehicleMod(vehicle, 31),
|
||||
GetVehicleMod(vehicle, 32),
|
||||
GetVehicleMod(vehicle, 33),
|
||||
GetVehicleMod(vehicle, 34),
|
||||
GetVehicleMod(vehicle, 35),
|
||||
GetVehicleMod(vehicle, 36),
|
||||
GetVehicleMod(vehicle, 37),
|
||||
GetVehicleMod(vehicle, 38),
|
||||
GetVehicleMod(vehicle, 39),
|
||||
GetVehicleMod(vehicle, 40),
|
||||
GetVehicleMod(vehicle, 41),
|
||||
GetVehicleMod(vehicle, 42),
|
||||
GetVehicleMod(vehicle, 43),
|
||||
GetVehicleMod(vehicle, 44),
|
||||
GetVehicleMod(vehicle, 45),
|
||||
GetVehicleMod(vehicle, 46),
|
||||
GetVehicleMod(vehicle, 48),
|
||||
|
||||
-- 67 livery
|
||||
GetVehicleLivery(vehicle),
|
||||
|
||||
-- 68 missingDoors
|
||||
doorsMissing,
|
||||
|
||||
-- 69 bulletproofTires
|
||||
not GetVehicleTyresCanBurst(vehicle),
|
||||
-- 70 tiresBurst
|
||||
tiresBurst,
|
||||
|
||||
-- 71 brokenWindows
|
||||
windowsBroken,
|
||||
|
||||
-- 72 xenon lights
|
||||
GetVehicleXenonLightsColour(vehicle),
|
||||
|
||||
-- 73 custom primary color
|
||||
customPrimaryColor,
|
||||
-- 74 custom secondary color
|
||||
customSecondaryColor,
|
||||
|
||||
-- 75 interior color
|
||||
GetVehicleInteriorColor(vehicle)
|
||||
}
|
||||
end
|
||||
|
||||
-- Apply all modifications to a vehicle entity
|
||||
function SetVehicleModifications(vehicle, plate, modifications)
|
||||
SetVehicleModKit(vehicle, 0)
|
||||
|
||||
-- plate
|
||||
SetVehicleNumberPlateText(vehicle, plate)
|
||||
SetVehicleNumberPlateTextIndex(vehicle, modifications[9])
|
||||
|
||||
-- lockStatus
|
||||
SetVehicleDoorsLocked(vehicle, modifications[2])
|
||||
|
||||
-- colours
|
||||
SetVehicleColours(vehicle, modifications[10], modifications[11])
|
||||
if (modifications[73]) then
|
||||
SetVehicleCustomPrimaryColour(vehicle, modifications[73][1], modifications[73][2], modifications[73][3])
|
||||
end
|
||||
if (modifications[74]) then
|
||||
SetVehicleCustomSecondaryColour(vehicle, modifications[74][1], modifications[74][2], modifications[74][3])
|
||||
end
|
||||
if (modifications[75]) then
|
||||
SetVehicleInteriorColor(vehicle, modifications[75])
|
||||
end
|
||||
|
||||
SetVehicleExtraColours(vehicle, modifications[12], modifications[13])
|
||||
|
||||
SetVehicleTyreSmokeColor(vehicle, modifications[20][1], modifications[20][2], modifications[20][3])
|
||||
|
||||
-- wheels
|
||||
SetVehicleWheelType(vehicle, modifications[14])
|
||||
|
||||
-- windows
|
||||
SetVehicleWindowTint(vehicle, modifications[17])
|
||||
|
||||
-- neonlight
|
||||
SetVehicleNeonLightEnabled(vehicle, 0, modifications[18][1])
|
||||
SetVehicleNeonLightEnabled(vehicle, 1, modifications[18][2])
|
||||
SetVehicleNeonLightEnabled(vehicle, 2, modifications[18][3])
|
||||
SetVehicleNeonLightEnabled(vehicle, 3, modifications[18][4])
|
||||
|
||||
SetVehicleNeonLightsColour(vehicle, modifications[19][1], modifications[19][2], modifications[19][3])
|
||||
|
||||
-- mods
|
||||
SetVehicleMod(vehicle, 0, modifications[22], modifications[15])
|
||||
SetVehicleMod(vehicle, 1, modifications[23], modifications[15])
|
||||
SetVehicleMod(vehicle, 2, modifications[24], modifications[15])
|
||||
SetVehicleMod(vehicle, 3, modifications[25], modifications[15])
|
||||
SetVehicleMod(vehicle, 4, modifications[26], modifications[15])
|
||||
SetVehicleMod(vehicle, 5, modifications[27], modifications[15])
|
||||
SetVehicleMod(vehicle, 6, modifications[28], modifications[15])
|
||||
SetVehicleMod(vehicle, 7, modifications[29], modifications[15])
|
||||
SetVehicleMod(vehicle, 8, modifications[30], modifications[15])
|
||||
SetVehicleMod(vehicle, 9, modifications[31], modifications[15])
|
||||
SetVehicleMod(vehicle, 10, modifications[32], modifications[15])
|
||||
|
||||
SetVehicleMod(vehicle, 11, modifications[33], modifications[15])
|
||||
SetVehicleMod(vehicle, 12, modifications[34], modifications[15])
|
||||
SetVehicleMod(vehicle, 13, modifications[35], modifications[15])
|
||||
|
||||
SetVehicleMod(vehicle, 14, modifications[36], modifications[15])
|
||||
|
||||
SetVehicleMod(vehicle, 15, modifications[37], modifications[15])
|
||||
SetVehicleMod(vehicle, 16, modifications[38], modifications[15])
|
||||
|
||||
ToggleVehicleMod(vehicle, 18, modifications[39])
|
||||
ToggleVehicleMod(vehicle, 20, modifications[40])
|
||||
ToggleVehicleMod(vehicle, 22, modifications[41])
|
||||
|
||||
SetVehicleMod(vehicle, 23, modifications[42], modifications[15])
|
||||
SetVehicleMod(vehicle, 24, modifications[43], modifications[16])
|
||||
|
||||
SetVehicleMod(vehicle, 25, modifications[44], modifications[15])
|
||||
SetVehicleMod(vehicle, 26, modifications[45], modifications[15])
|
||||
SetVehicleMod(vehicle, 27, modifications[46], modifications[15])
|
||||
SetVehicleMod(vehicle, 28, modifications[47], modifications[15])
|
||||
SetVehicleMod(vehicle, 29, modifications[48], modifications[15])
|
||||
SetVehicleMod(vehicle, 30, modifications[49], modifications[15])
|
||||
SetVehicleMod(vehicle, 31, modifications[50], modifications[15])
|
||||
SetVehicleMod(vehicle, 32, modifications[51], modifications[15])
|
||||
SetVehicleMod(vehicle, 33, modifications[52], modifications[15])
|
||||
SetVehicleMod(vehicle, 34, modifications[53], modifications[15])
|
||||
SetVehicleMod(vehicle, 35, modifications[54], modifications[15])
|
||||
SetVehicleMod(vehicle, 36, modifications[55], modifications[15])
|
||||
SetVehicleMod(vehicle, 37, modifications[56], modifications[15])
|
||||
SetVehicleMod(vehicle, 38, modifications[57], modifications[15])
|
||||
SetVehicleMod(vehicle, 39, modifications[58], modifications[15])
|
||||
SetVehicleMod(vehicle, 40, modifications[59], modifications[15])
|
||||
SetVehicleMod(vehicle, 41, modifications[60], modifications[15])
|
||||
SetVehicleMod(vehicle, 42, modifications[61], modifications[15])
|
||||
SetVehicleMod(vehicle, 43, modifications[62], modifications[15])
|
||||
SetVehicleMod(vehicle, 44, modifications[63], modifications[15])
|
||||
SetVehicleMod(vehicle, 45, modifications[64], modifications[15])
|
||||
SetVehicleMod(vehicle, 46, modifications[65], modifications[15])
|
||||
SetVehicleMod(vehicle, 48, modifications[66], modifications[15])
|
||||
|
||||
SetVehicleLivery(vehicle, modifications[67])
|
||||
|
||||
-- extras
|
||||
for i = 1, #modifications[21], 1 do
|
||||
SetVehicleExtra(vehicle, modifications[21][i][1], modifications[21][i][2])
|
||||
end
|
||||
|
||||
-- stats
|
||||
SetEntityHealth(vehicle, modifications[3])
|
||||
SetVehicleBodyHealth(vehicle, modifications[4])
|
||||
SetVehicleEngineHealth(vehicle, modifications[5])
|
||||
SetVehiclePetrolTankHealth(vehicle, modifications[6])
|
||||
if (Config.renderScorched and (modifications[5] < -3999.0 or modifications[6] < -999.0)) then
|
||||
TriggerServerEvent("mh_Parking:renderScorched", NetworkGetNetworkIdFromEntity(vehicle), true)
|
||||
end
|
||||
|
||||
SetVehicleDirtLevel(vehicle, modifications[7])
|
||||
exports[Config.exports]:SetFuel(vehicle, modifications[8])
|
||||
|
||||
---------------------------------------------------------------------- Implementierung Miho
|
||||
--[[
|
||||
fuel = modifications[8]
|
||||
if type(fuel) == 'number' and fuel >= 0 and fuel <= 100 then
|
||||
SetVehicleFuelLevel(vehicle, fuel + 0.0)
|
||||
DecorSetFloat(vehicle, Config.FuelDecor, GetVehicleFuelLevel(vehicle))
|
||||
end
|
||||
]]
|
||||
---------------------------------------------------------------------- Implementierung Miho ENDE
|
||||
|
||||
|
||||
-- doors
|
||||
for i = 1, #modifications[68], 1 do
|
||||
SetVehicleDoorBroken(vehicle, modifications[68][i], true)
|
||||
end
|
||||
|
||||
-- tires
|
||||
SetVehicleTyresCanBurst(vehicle, not modifications[69])
|
||||
if (not modifications[69]) then
|
||||
for i = 1, #modifications[70], 1 do
|
||||
SetVehicleTyreBurst(vehicle, modifications[70][i][1], modifications[70][i][2], 1000.0)
|
||||
end
|
||||
end
|
||||
|
||||
-- windows
|
||||
for i = 1, #modifications[71], 1 do
|
||||
SmashVehicleWindow(vehicle, modifications[71][i])
|
||||
end
|
||||
|
||||
-- xenon lights
|
||||
if (modifications[72]) then
|
||||
SetVehicleXenonLightsColour(vehicle, modifications[72])
|
||||
end
|
||||
end
|
||||
|
||||
-- Return closest loaded vehicle entity or nil if no vehicle is found
|
||||
function GetClosestVehicle(position, maxRadius)
|
||||
local vehicles = GetAllVehicles()
|
||||
local dist = maxRadius
|
||||
local closestVehicle = nil
|
||||
|
||||
for i=1, #vehicles, 1 do
|
||||
local vehicleCoords = GetEntityCoords(vehicles[i])
|
||||
local tempDist = Vdist(vehicleCoords.x, vehicleCoords.y, vehicleCoords.z, position.x, position.y, position.z)
|
||||
if (tempDist < dist) then
|
||||
dist = tempDist
|
||||
closestVehicle = vehicles[i]
|
||||
end
|
||||
end
|
||||
|
||||
if (closestVehicle ~= nil and DoesEntityExist(closestVehicle)) then
|
||||
return closestVehicle
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
-- Returns all loaded vehicles on client side
|
||||
function GetAllVehicles()
|
||||
local vehicles = {}
|
||||
|
||||
for vehicle in EnumerateVehicles() do
|
||||
table.insert(vehicles, vehicle)
|
||||
end
|
||||
|
||||
return vehicles
|
||||
end
|
||||
|
||||
function IsVehicleBlacklisted(vehicle)
|
||||
-- check class
|
||||
local class = GetVehicleClass(vehicle)
|
||||
for i = 1, #Config.classesBlacklist, 1 do
|
||||
if (class == Config.classesBlacklist[i]) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
-- check model
|
||||
local modelHash = GetEntityModel(vehicle)
|
||||
for i = 1, #Config.vehiclesBlacklist, 1 do
|
||||
if (modelHash == Config.vehiclesBlacklist[i]) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function GetVehiclePosition(plate)
|
||||
if (GetResourceState("kimi_callbacks") ~= "started") then
|
||||
Log("^1[ERROR] \"kimi_callbacks\" is either not installed properly or hasn't been started!")
|
||||
Log("^1[ERROR] The export \"GetVehiclePosition\" can only be used when having this resource installed.")
|
||||
return nil
|
||||
end
|
||||
|
||||
if (plate == nil) then
|
||||
Log("^1[ERROR] \"plate\" was nil while trying to call export \"GetVehiclePosition\"!")
|
||||
return nil
|
||||
end
|
||||
|
||||
if (type(plate) ~= "string") then
|
||||
Log("^1[ERROR] \"plate\" (\"" .. plate .. "\") needs to be of type string when calling export \"GetVehiclePosition\"!")
|
||||
return nil
|
||||
end
|
||||
|
||||
local position = exports["kimi_callbacks"]:Trigger("AP:getVehiclePosition", plate:upper())
|
||||
|
||||
return position
|
||||
end
|
||||
|
||||
function GetVehiclePositions(...)
|
||||
if (GetResourceState("kimi_callbacks") ~= "started") then
|
||||
Log("^1[ERROR] \"kimi_callbacks\" is either not installed properly or hasn't been started!")
|
||||
Log("^1[ERROR] The export \"GetVehiclePositions\" can only be used when having this resource installed.")
|
||||
return nil
|
||||
end
|
||||
|
||||
local plates = { ... }
|
||||
|
||||
for i, plate in ipairs(plates) do
|
||||
if (plate == nil) then
|
||||
Log("^1[ERROR] \"plate\" (Index: \"" .. i .. "\") was nil while trying to call export \"GetVehiclePositions\"!")
|
||||
return nil
|
||||
end
|
||||
|
||||
if (type(plate) ~= "string") then
|
||||
Log("^1[ERROR] \"plate\" (\"" .. plate .. "\") (Index: " .. i .. ") needs to be of type string when calling export \"GetVehiclePositions\"!")
|
||||
return nil
|
||||
end
|
||||
|
||||
plates[i] = plates[i]:upper()
|
||||
end
|
||||
|
||||
local data = exports["kimi_callbacks"]:Trigger("AP:getVehiclePositions", plates)
|
||||
|
||||
return data
|
||||
end
|
||||
|
||||
-- getting all vehicles
|
||||
function EnumerateVehicles()
|
||||
return EnumerateEntities(FindFirstVehicle, FindNextVehicle, EndFindVehicle)
|
||||
end
|
||||
function EnumerateEntities(initFunc, moveFunc, disposeFunc)
|
||||
return coroutine.wrap(function()
|
||||
local iter, id = initFunc()
|
||||
if not id or id == 0 then
|
||||
disposeFunc(iter)
|
||||
return
|
||||
end
|
||||
|
||||
local enum = {handle = iter, destructor = disposeFunc}
|
||||
setmetatable(enum, entityEnumerator)
|
||||
|
||||
local next = true
|
||||
repeat
|
||||
coroutine.yield(id)
|
||||
next, id = moveFunc(iter)
|
||||
until not next
|
||||
|
||||
enum.destructor, enum.handle = nil, nil
|
||||
disposeFunc(iter)
|
||||
end)
|
||||
end
|
||||
local entityEnumerator = {
|
||||
__gc = function(enum)
|
||||
if enum.destructor and enum.handle then
|
||||
enum.destructor(enum.handle)
|
||||
end
|
||||
enum.destructor = nil
|
||||
enum.handle = nil
|
||||
end
|
||||
}
|
|
@ -1,210 +1,210 @@
|
|||
local enabled = true
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
while (true) do
|
||||
local playerPed = PlayerPedId()
|
||||
if (DoesEntityExist(playerPed)) then
|
||||
TriggerServerEvent("mh_Parking:syncPlayerPosition", GetEntityCoords(playerPed))
|
||||
end
|
||||
|
||||
Citizen.Wait(3000)
|
||||
end
|
||||
end)
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
while (true) do
|
||||
Citizen.Wait(5 * 60 * 1000)
|
||||
|
||||
local vehicle = GetVehiclePedIsIn(PlayerPedId())
|
||||
if (DoesEntityExist(vehicle)) then
|
||||
TriggerEvent("mh_Parking:updateVehicle", vehicle)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
Citizen.Wait(3000)
|
||||
|
||||
local isInVehicle = false
|
||||
local currentVehiclePlate = nil
|
||||
local wasDead = false
|
||||
|
||||
while (true) do
|
||||
Citizen.Wait(50)
|
||||
|
||||
local playerPed = PlayerPedId()
|
||||
|
||||
if (not isInVehicle and IsPedInAnyVehicle(playerPed)) then
|
||||
-- entered vehicle
|
||||
|
||||
isInVehicle = true
|
||||
|
||||
if (enabled) then
|
||||
local vehicle = GetVehiclePedIsIn(playerPed, false)
|
||||
if (NetworkGetEntityIsNetworked(vehicle) and not IsVehicleBlacklisted(vehicle)) then
|
||||
local networkId = NetworkGetNetworkIdFromEntity(vehicle)
|
||||
SetNetworkIdCanMigrate(netId, true)
|
||||
local modifications = GetVehicleModifications(vehicle)
|
||||
|
||||
currentVehiclePlate = GetVehicleNumberPlateText(vehicle)
|
||||
|
||||
TriggerServerEvent("mh_Parking:enteredVehicle", networkId, currentVehiclePlate, modifications)
|
||||
|
||||
Log("Vehicle " .. currentVehiclePlate .. " entered")
|
||||
end
|
||||
end
|
||||
elseif (isInVehicle and not IsPedInAnyVehicle(playerPed, false)) then
|
||||
-- left vehicle
|
||||
|
||||
isInVehicle = false
|
||||
|
||||
if (enabled and not wasDead) then
|
||||
local vehicle = GetVehiclePedIsIn(playerPed, true)
|
||||
|
||||
if (vehicle ~= 0) then
|
||||
if (NetworkGetEntityIsNetworked(vehicle) and not IsVehicleBlacklisted(vehicle)) then
|
||||
local networkId = NetworkGetNetworkIdFromEntity(vehicle)
|
||||
SetNetworkIdCanMigrate(netId, true)
|
||||
local modifications = GetVehicleModifications(vehicle)
|
||||
|
||||
TriggerServerEvent("mh_Parking:leftVehicle", networkId, modifications)
|
||||
|
||||
Log("Vehicle " .. GetVehicleNumberPlateText(vehicle) .. " left")
|
||||
|
||||
-- if vehicle is deleted soon after
|
||||
Citizen.CreateThread(function()
|
||||
local veh = vehicle
|
||||
local plate = GetVehicleNumberPlateText(veh)
|
||||
local startTime = GetGameTimer()
|
||||
local playerPed = PlayerPedId()
|
||||
local playerPos
|
||||
|
||||
while (true) do
|
||||
Citizen.Wait(0)
|
||||
|
||||
if (GetGameTimer() - startTime >= 1000) then
|
||||
break
|
||||
end
|
||||
|
||||
if (not DoesEntityExist(veh)) then
|
||||
TriggerServerEvent("mh_Parking:deleteVehicle", plate, false)
|
||||
|
||||
Log("Vehicle " .. currentVehiclePlate .. " left and deleted after exit")
|
||||
|
||||
currentVehiclePlate = nil
|
||||
break
|
||||
end
|
||||
|
||||
playerPed = PlayerPedId()
|
||||
playerPos = GetEntityCoords(playerPed)
|
||||
vehPos = GetEntityCoords(veh)
|
||||
|
||||
if (Vdist(playerPos.x, playerPos.y, playerPos.z, vehPos.x, vehPos.y, vehPos.z) > 50.0) then
|
||||
currentVehiclePlate = nil
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
currentVehiclePlate = nil
|
||||
end)
|
||||
end
|
||||
elseif (currentVehiclePlate) then
|
||||
TriggerServerEvent("mh_Parking:deleteVehicle", currentVehiclePlate, false)
|
||||
|
||||
Log("Vehicle " .. currentVehiclePlate .. " left and deleted")
|
||||
|
||||
currentVehiclePlate = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (not wasDead and IsPlayerDead(PlayerId())) then
|
||||
wasDead = true
|
||||
elseif (wasDead and not IsPlayerDead(PlayerId())) then
|
||||
Citizen.CreateThread(function()
|
||||
Citizen.Wait(1000)
|
||||
|
||||
wasDead = false
|
||||
end)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("mh_Parking:setVehicleMods")
|
||||
AddEventHandler("mh_Parking:setVehicleMods", function(netId, plate, modifications)
|
||||
if (not IsModelInCdimage(modifications[1])) then
|
||||
Log("Setting mods for " .. plate .. " failed. The model does NOT exist.")
|
||||
TriggerServerEvent("mh_Parking:modelDoesNotExist", plate)
|
||||
return
|
||||
end
|
||||
|
||||
local timer = GetGameTimer()
|
||||
while (not NetworkDoesEntityExistWithNetworkId(netId)) do
|
||||
Citizen.Wait(0)
|
||||
|
||||
if (GetGameTimer() - 10000 > timer) then
|
||||
Log("Setting mods for " .. plate .. " failed after 10s")
|
||||
TriggerServerEvent("mh_Parking:setVehicleModsFailed", plate)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local vehicle = NetworkGetEntityFromNetworkId(netId)
|
||||
|
||||
if (DoesEntityExist(vehicle) and NetworkHasControlOfEntity(vehicle)) then
|
||||
Log("Setting modifications for vehicle " .. plate)
|
||||
|
||||
SetVehicleModifications(vehicle, plate, modifications)
|
||||
TriggerServerEvent("mh_Parking:setVehicleModsSuccess", plate)
|
||||
else
|
||||
Log("Setting mods failed for vehicle " .. plate .. ". Vehicle does not exist")
|
||||
TriggerServerEvent("mh_Parking:setVehicleModsFailed", plate)
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler("mh_Parking:updateVehicle", function(vehicle)
|
||||
if (vehicle == nil) then
|
||||
Log("^1[ERROR] \"vehicle\" was nil while trying to update a vehicle!")
|
||||
return
|
||||
end
|
||||
|
||||
if (DoesEntityExist(vehicle) and NetworkGetEntityIsNetworked(vehicle) and not IsVehicleBlacklisted(vehicle)) then
|
||||
Log("Triggering manual update of vehicle")
|
||||
|
||||
local networkId = NetworkGetNetworkIdFromEntity(vehicle)
|
||||
local modifications = GetVehicleModifications(vehicle)
|
||||
|
||||
TriggerServerEvent("mh_Parking:updateVehicle", networkId, modifications)
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("mh_Parking:enable")
|
||||
AddEventHandler("mh_Parking:enable", function(enable)
|
||||
if (enable == nil) then
|
||||
Log("^1[ERROR] \"enable\" was nil while trying to enable/disable script!")
|
||||
return
|
||||
end
|
||||
|
||||
enabled = enable
|
||||
|
||||
if (enabled) then
|
||||
Log("AdvancedParking enabled")
|
||||
else
|
||||
Log("AdvancedParking disabled")
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("mh_Parking:notification")
|
||||
AddEventHandler("mh_Parking:notification", function(msg)
|
||||
SetNotificationTextEntry('STRING')
|
||||
AddTextComponentSubstringPlayerName(msg)
|
||||
DrawNotification(false, true)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("mh_Parking:renderScorched")
|
||||
AddEventHandler("mh_Parking:renderScorched", function(vehicleNetId, scorched)
|
||||
local vehicle = NetworkGetEntityFromNetworkId(vehicleNetId)
|
||||
if (DoesEntityExist(vehicle)) then
|
||||
SetEntityRenderScorched(vehicle, scorched)
|
||||
end
|
||||
end)
|
||||
local enabled = true
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
while (true) do
|
||||
local playerPed = PlayerPedId()
|
||||
if (DoesEntityExist(playerPed)) then
|
||||
TriggerServerEvent("mh_Parking:syncPlayerPosition", GetEntityCoords(playerPed))
|
||||
end
|
||||
|
||||
Citizen.Wait(3000)
|
||||
end
|
||||
end)
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
while (true) do
|
||||
Citizen.Wait(5 * 60 * 1000)
|
||||
|
||||
local vehicle = GetVehiclePedIsIn(PlayerPedId())
|
||||
if (DoesEntityExist(vehicle)) then
|
||||
TriggerEvent("mh_Parking:updateVehicle", vehicle)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
Citizen.Wait(3000)
|
||||
|
||||
local isInVehicle = false
|
||||
local currentVehiclePlate = nil
|
||||
local wasDead = false
|
||||
|
||||
while (true) do
|
||||
Citizen.Wait(50)
|
||||
|
||||
local playerPed = PlayerPedId()
|
||||
|
||||
if (not isInVehicle and IsPedInAnyVehicle(playerPed)) then
|
||||
-- entered vehicle
|
||||
|
||||
isInVehicle = true
|
||||
|
||||
if (enabled) then
|
||||
local vehicle = GetVehiclePedIsIn(playerPed, false)
|
||||
if (NetworkGetEntityIsNetworked(vehicle) and not IsVehicleBlacklisted(vehicle)) then
|
||||
local networkId = NetworkGetNetworkIdFromEntity(vehicle)
|
||||
SetNetworkIdCanMigrate(netId, true)
|
||||
local modifications = GetVehicleModifications(vehicle)
|
||||
|
||||
currentVehiclePlate = GetVehicleNumberPlateText(vehicle)
|
||||
|
||||
TriggerServerEvent("mh_Parking:enteredVehicle", networkId, currentVehiclePlate, modifications)
|
||||
|
||||
Log("Vehicle " .. currentVehiclePlate .. " entered")
|
||||
end
|
||||
end
|
||||
elseif (isInVehicle and not IsPedInAnyVehicle(playerPed, false)) then
|
||||
-- left vehicle
|
||||
|
||||
isInVehicle = false
|
||||
|
||||
if (enabled and not wasDead) then
|
||||
local vehicle = GetVehiclePedIsIn(playerPed, true)
|
||||
|
||||
if (vehicle ~= 0) then
|
||||
if (NetworkGetEntityIsNetworked(vehicle) and not IsVehicleBlacklisted(vehicle)) then
|
||||
local networkId = NetworkGetNetworkIdFromEntity(vehicle)
|
||||
SetNetworkIdCanMigrate(netId, true)
|
||||
local modifications = GetVehicleModifications(vehicle)
|
||||
|
||||
TriggerServerEvent("mh_Parking:leftVehicle", networkId, modifications)
|
||||
|
||||
Log("Vehicle " .. GetVehicleNumberPlateText(vehicle) .. " left")
|
||||
|
||||
-- if vehicle is deleted soon after
|
||||
Citizen.CreateThread(function()
|
||||
local veh = vehicle
|
||||
local plate = GetVehicleNumberPlateText(veh)
|
||||
local startTime = GetGameTimer()
|
||||
local playerPed = PlayerPedId()
|
||||
local playerPos
|
||||
|
||||
while (true) do
|
||||
Citizen.Wait(0)
|
||||
|
||||
if (GetGameTimer() - startTime >= 1000) then
|
||||
break
|
||||
end
|
||||
|
||||
if (not DoesEntityExist(veh)) then
|
||||
TriggerServerEvent("mh_Parking:deleteVehicle", plate, false)
|
||||
|
||||
Log("Vehicle " .. currentVehiclePlate .. " left and deleted after exit")
|
||||
|
||||
currentVehiclePlate = nil
|
||||
break
|
||||
end
|
||||
|
||||
playerPed = PlayerPedId()
|
||||
playerPos = GetEntityCoords(playerPed)
|
||||
vehPos = GetEntityCoords(veh)
|
||||
|
||||
if (Vdist(playerPos.x, playerPos.y, playerPos.z, vehPos.x, vehPos.y, vehPos.z) > 50.0) then
|
||||
currentVehiclePlate = nil
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
currentVehiclePlate = nil
|
||||
end)
|
||||
end
|
||||
elseif (currentVehiclePlate) then
|
||||
TriggerServerEvent("mh_Parking:deleteVehicle", currentVehiclePlate, false)
|
||||
|
||||
Log("Vehicle " .. currentVehiclePlate .. " left and deleted")
|
||||
|
||||
currentVehiclePlate = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (not wasDead and IsPlayerDead(PlayerId())) then
|
||||
wasDead = true
|
||||
elseif (wasDead and not IsPlayerDead(PlayerId())) then
|
||||
Citizen.CreateThread(function()
|
||||
Citizen.Wait(1000)
|
||||
|
||||
wasDead = false
|
||||
end)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("mh_Parking:setVehicleMods")
|
||||
AddEventHandler("mh_Parking:setVehicleMods", function(netId, plate, modifications)
|
||||
if (not IsModelInCdimage(modifications[1])) then
|
||||
Log("Setting mods for " .. plate .. " failed. The model does NOT exist.")
|
||||
TriggerServerEvent("mh_Parking:modelDoesNotExist", plate)
|
||||
return
|
||||
end
|
||||
|
||||
local timer = GetGameTimer()
|
||||
while (not NetworkDoesEntityExistWithNetworkId(netId)) do
|
||||
Citizen.Wait(0)
|
||||
|
||||
if (GetGameTimer() - 10000 > timer) then
|
||||
Log("Setting mods for " .. plate .. " failed after 10s")
|
||||
TriggerServerEvent("mh_Parking:setVehicleModsFailed", plate)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local vehicle = NetworkGetEntityFromNetworkId(netId)
|
||||
|
||||
if (DoesEntityExist(vehicle) and NetworkHasControlOfEntity(vehicle)) then
|
||||
Log("Setting modifications for vehicle " .. plate)
|
||||
|
||||
SetVehicleModifications(vehicle, plate, modifications)
|
||||
TriggerServerEvent("mh_Parking:setVehicleModsSuccess", plate)
|
||||
else
|
||||
Log("Setting mods failed for vehicle " .. plate .. ". Vehicle does not exist")
|
||||
TriggerServerEvent("mh_Parking:setVehicleModsFailed", plate)
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler("mh_Parking:updateVehicle", function(vehicle)
|
||||
if (vehicle == nil) then
|
||||
Log("^1[ERROR] \"vehicle\" was nil while trying to update a vehicle!")
|
||||
return
|
||||
end
|
||||
|
||||
if (DoesEntityExist(vehicle) and NetworkGetEntityIsNetworked(vehicle) and not IsVehicleBlacklisted(vehicle)) then
|
||||
Log("Triggering manual update of vehicle")
|
||||
|
||||
local networkId = NetworkGetNetworkIdFromEntity(vehicle)
|
||||
local modifications = GetVehicleModifications(vehicle)
|
||||
|
||||
TriggerServerEvent("mh_Parking:updateVehicle", networkId, modifications)
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("mh_Parking:enable")
|
||||
AddEventHandler("mh_Parking:enable", function(enable)
|
||||
if (enable == nil) then
|
||||
Log("^1[ERROR] \"enable\" was nil while trying to enable/disable script!")
|
||||
return
|
||||
end
|
||||
|
||||
enabled = enable
|
||||
|
||||
if (enabled) then
|
||||
Log("AdvancedParking enabled")
|
||||
else
|
||||
Log("AdvancedParking disabled")
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("mh_Parking:notification")
|
||||
AddEventHandler("mh_Parking:notification", function(msg)
|
||||
SetNotificationTextEntry('STRING')
|
||||
AddTextComponentSubstringPlayerName(msg)
|
||||
DrawNotification(false, true)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("mh_Parking:renderScorched")
|
||||
AddEventHandler("mh_Parking:renderScorched", function(vehicleNetId, scorched)
|
||||
local vehicle = NetworkGetEntityFromNetworkId(vehicleNetId)
|
||||
if (DoesEntityExist(vehicle)) then
|
||||
SetEntityRenderScorched(vehicle, scorched)
|
||||
end
|
||||
end)
|
|
@ -1,64 +1,64 @@
|
|||
Config = {}
|
||||
|
||||
Config.exports = "lc_fuel" -- LegacyFuel
|
||||
|
||||
-- set this to true if you want to see debug messages on client and server side
|
||||
Config.isDebug = false
|
||||
|
||||
-- this controls the distance at which vehicles will spawn to the closest player
|
||||
-- (in meters)
|
||||
Config.spawnDistance = 200.0
|
||||
|
||||
-- this controls when a vehicle will be removed from the database table when
|
||||
-- calling the cleanup function (in hours; so 24 * 7 = one week)
|
||||
Config.cleanUpThresholdTime = 24 * 7
|
||||
|
||||
-- set this to false if you do not want entities render as scorched when they
|
||||
-- are completely broken
|
||||
Config.renderScorched = true
|
||||
|
||||
-- vehicle classes that you do not want to save go here (remove the -- in front
|
||||
-- of the number if you want it blacklisted)
|
||||
Config.classesBlacklist = {
|
||||
-- 0, -- Compacts
|
||||
-- 1, -- Sedans
|
||||
-- 2, -- SUVs
|
||||
-- 3, -- Coupes
|
||||
-- 4, -- Muscle
|
||||
-- 5, -- Sports Classics
|
||||
-- 6, -- Sports
|
||||
-- 7, -- Super
|
||||
-- 8, -- Motorcycles
|
||||
-- 9, -- Off-road
|
||||
--10, -- Industrial
|
||||
--11, -- Utility
|
||||
--12, -- Vans
|
||||
--13, -- Cycles
|
||||
--14, -- Boats
|
||||
--15, -- Helicopters
|
||||
--16, -- Planes
|
||||
--17, -- Service
|
||||
--18, -- Emergency
|
||||
--19, -- Military
|
||||
--20, -- Commercial
|
||||
21, -- Trains
|
||||
}
|
||||
-- other vehicles that you do not want to save can be inserted here (use `MODELNAME`
|
||||
-- when you put them in there)
|
||||
Config.vehiclesBlacklist = {
|
||||
--`blista`,
|
||||
}
|
||||
|
||||
-- this lets you control if vehicles should be deleted (in minutes; 0 if you do not
|
||||
-- want to use it; this is useful for large servers with a lot of players)
|
||||
Config.deleteTimer = 0
|
||||
-- despawns all vehicles that are more than x meters away from a player
|
||||
Config.deleteDistance = 25.0
|
||||
-- when the notifications should be shown before the despawning
|
||||
-- needs to be in descending order in minutes and lower than Config.deleteTimer
|
||||
Config.deleteNotificationTimes = { 5, 3, 2, 1 }
|
||||
-- notification to show players before deleting vehicles
|
||||
-- (use %s as placeholder for time left in minutes)
|
||||
Config.timeLeftNotification = "Fahrzeuge Despawn in %s Minuten."
|
||||
-- notification to show players when deleting vehicles
|
||||
Config.deleteNotification = "Lösche Fahrzeuge..."
|
||||
Config = {}
|
||||
|
||||
Config.exports = "lc_fuel" -- LegacyFuel
|
||||
|
||||
-- set this to true if you want to see debug messages on client and server side
|
||||
Config.isDebug = false
|
||||
|
||||
-- this controls the distance at which vehicles will spawn to the closest player
|
||||
-- (in meters)
|
||||
Config.spawnDistance = 200.0
|
||||
|
||||
-- this controls when a vehicle will be removed from the database table when
|
||||
-- calling the cleanup function (in hours; so 24 * 7 = one week)
|
||||
Config.cleanUpThresholdTime = 24 * 7
|
||||
|
||||
-- set this to false if you do not want entities render as scorched when they
|
||||
-- are completely broken
|
||||
Config.renderScorched = true
|
||||
|
||||
-- vehicle classes that you do not want to save go here (remove the -- in front
|
||||
-- of the number if you want it blacklisted)
|
||||
Config.classesBlacklist = {
|
||||
-- 0, -- Compacts
|
||||
-- 1, -- Sedans
|
||||
-- 2, -- SUVs
|
||||
-- 3, -- Coupes
|
||||
-- 4, -- Muscle
|
||||
-- 5, -- Sports Classics
|
||||
-- 6, -- Sports
|
||||
-- 7, -- Super
|
||||
-- 8, -- Motorcycles
|
||||
-- 9, -- Off-road
|
||||
--10, -- Industrial
|
||||
--11, -- Utility
|
||||
--12, -- Vans
|
||||
--13, -- Cycles
|
||||
--14, -- Boats
|
||||
--15, -- Helicopters
|
||||
--16, -- Planes
|
||||
--17, -- Service
|
||||
--18, -- Emergency
|
||||
--19, -- Military
|
||||
--20, -- Commercial
|
||||
21, -- Trains
|
||||
}
|
||||
-- other vehicles that you do not want to save can be inserted here (use `MODELNAME`
|
||||
-- when you put them in there)
|
||||
Config.vehiclesBlacklist = {
|
||||
--`blista`,
|
||||
}
|
||||
|
||||
-- this lets you control if vehicles should be deleted (in minutes; 0 if you do not
|
||||
-- want to use it; this is useful for large servers with a lot of players)
|
||||
Config.deleteTimer = 0
|
||||
-- despawns all vehicles that are more than x meters away from a player
|
||||
Config.deleteDistance = 25.0
|
||||
-- when the notifications should be shown before the despawning
|
||||
-- needs to be in descending order in minutes and lower than Config.deleteTimer
|
||||
Config.deleteNotificationTimes = { 5, 3, 2, 1 }
|
||||
-- notification to show players before deleting vehicles
|
||||
-- (use %s as placeholder for time left in minutes)
|
||||
Config.timeLeftNotification = "Fahrzeuge Despawn in %s Minuten."
|
||||
-- notification to show players when deleting vehicles
|
||||
Config.deleteNotification = "Lösche Fahrzeuge..."
|
|
@ -1,24 +1,24 @@
|
|||
fx_version 'cerulean'
|
||||
games { 'gta5' }
|
||||
|
||||
author 'Mîhó'
|
||||
description 'Park all your vehicles anywhere!'
|
||||
version '1.0.0'
|
||||
|
||||
server_scripts {
|
||||
'@oxmysql/lib/MySQL.lua',
|
||||
'config.lua',
|
||||
'sv_utils.lua',
|
||||
'server.lua'
|
||||
}
|
||||
|
||||
client_scripts {
|
||||
'config.lua',
|
||||
'cl_utils.lua',
|
||||
'client.lua'
|
||||
}
|
||||
|
||||
exports {
|
||||
'GetVehiclePosition',
|
||||
'GetVehiclePositions'
|
||||
}
|
||||
fx_version 'cerulean'
|
||||
games { 'gta5' }
|
||||
|
||||
author 'Mîhó'
|
||||
description 'Park all your vehicles anywhere!'
|
||||
version '1.0.0'
|
||||
|
||||
server_scripts {
|
||||
'@oxmysql/lib/MySQL.lua',
|
||||
'config.lua',
|
||||
'sv_utils.lua',
|
||||
'server.lua'
|
||||
}
|
||||
|
||||
client_scripts {
|
||||
'config.lua',
|
||||
'cl_utils.lua',
|
||||
'client.lua'
|
||||
}
|
||||
|
||||
exports {
|
||||
'GetVehiclePosition',
|
||||
'GetVehiclePositions'
|
||||
}
|
|
@ -1,32 +1,32 @@
|
|||
-- --------------------------------------------------------
|
||||
-- Host: 127.0.0.1
|
||||
-- Server version: 10.1.28-MariaDB - mariadb.org binary distribution
|
||||
-- Server OS: Win32
|
||||
-- HeidiSQL Version: 11.0.0.5919
|
||||
-- --------------------------------------------------------
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET NAMES utf8 */;
|
||||
/*!50503 SET NAMES utf8mb4 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
|
||||
-- Dumping structure for table fivem_testserver.vehicle_parking
|
||||
CREATE TABLE IF NOT EXISTS `vehicle_parking` (
|
||||
`plate` varchar(8) NOT NULL,
|
||||
`modifications` text NOT NULL,
|
||||
`posX` float NOT NULL,
|
||||
`posY` float NOT NULL,
|
||||
`posZ` float NOT NULL,
|
||||
`rotX` float NOT NULL,
|
||||
`rotY` float NOT NULL,
|
||||
`rotZ` float NOT NULL,
|
||||
`lastUpdate` int(11) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`plate`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
-- Data exporting was unselected.
|
||||
|
||||
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
-- --------------------------------------------------------
|
||||
-- Host: 127.0.0.1
|
||||
-- Server version: 10.1.28-MariaDB - mariadb.org binary distribution
|
||||
-- Server OS: Win32
|
||||
-- HeidiSQL Version: 11.0.0.5919
|
||||
-- --------------------------------------------------------
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET NAMES utf8 */;
|
||||
/*!50503 SET NAMES utf8mb4 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
|
||||
-- Dumping structure for table fivem_testserver.vehicle_parking
|
||||
CREATE TABLE IF NOT EXISTS `vehicle_parking` (
|
||||
`plate` varchar(8) NOT NULL,
|
||||
`modifications` text NOT NULL,
|
||||
`posX` float NOT NULL,
|
||||
`posY` float NOT NULL,
|
||||
`posZ` float NOT NULL,
|
||||
`rotX` float NOT NULL,
|
||||
`rotY` float NOT NULL,
|
||||
`rotZ` float NOT NULL,
|
||||
`lastUpdate` int(11) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`plate`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
-- Data exporting was unselected.
|
||||
|
||||
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
File diff suppressed because it is too large
Load diff
|
@ -1,151 +1,151 @@
|
|||
activePlayerPositions = {}
|
||||
|
||||
-- returns a loaded vehicled with a given number plate
|
||||
function TryGetLoadedVehicle(plate, loadedVehicles)
|
||||
for i = 1, #loadedVehicles, 1 do
|
||||
if (plate == GetVehicleNumberPlateText(loadedVehicles[i]) and DoesEntityExist(loadedVehicles[i])) then
|
||||
return loadedVehicles[i]
|
||||
end
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
function ContainsPlate(plate, vehiclePlates)
|
||||
for i = 1, #vehiclePlates, 1 do
|
||||
if (plate == vehiclePlates[i]) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
-- Logs text to the server console
|
||||
function Log(text)
|
||||
if (Config.isDebug) then
|
||||
Print(GetCurrentResourceName() .. ": " .. text)
|
||||
end
|
||||
end
|
||||
|
||||
-- return the distance between two positions (Vector3)
|
||||
function Vector3Dist(v1, v2)
|
||||
return math.sqrt( (v2.x - v1.x) * (v2.x - v1.x) + (v2.y - v1.y) * (v2.y - v1.y) + (v2.z - v1.z) * (v2.z - v1.z) )
|
||||
end
|
||||
|
||||
-- return the distance between two positions without sqrt (Vector3)
|
||||
function Vector3DistFast(v1, v2)
|
||||
return (v2.x - v1.x) * (v2.x - v1.x) + (v2.y - v1.y) * (v2.y - v1.y) + (v2.z - v1.z) * (v2.z - v1.z)
|
||||
end
|
||||
|
||||
-- returns the difference in degrees from the axis with the highest difference
|
||||
function GetRotationDifference(r1, r2)
|
||||
local x = math.abs(r1.x - r2.x)
|
||||
local y = math.abs(r1.y - r2.y)
|
||||
local z = math.abs(r1.z - r2.z)
|
||||
|
||||
if (x > y and x > z) then
|
||||
return x
|
||||
elseif (y > z) then
|
||||
return y
|
||||
else
|
||||
return z
|
||||
end
|
||||
end
|
||||
|
||||
-- get the amount of currently active players
|
||||
function GetActivePlayerCount()
|
||||
local playerCount = 0
|
||||
for k, v in pairs(activePlayerPositions) do
|
||||
playerCount = playerCount + 1
|
||||
end
|
||||
return playerCount
|
||||
end
|
||||
|
||||
-- return the ID of the closest player
|
||||
function GetClosestPlayerId(position)
|
||||
local closestDistance = 1000000.0
|
||||
local closestPlayerID = nil
|
||||
local closestPos = nil
|
||||
|
||||
for playerID, pos in pairs(activePlayerPositions) do
|
||||
local distance = Vector3DistFast(position, pos)
|
||||
|
||||
if (distance < closestDistance) then
|
||||
closestDistance = distance
|
||||
closestPlayerID = playerID
|
||||
closestPos = pos
|
||||
end
|
||||
end
|
||||
|
||||
local distance = nil
|
||||
if (closestPlayerID ~= nil) then
|
||||
distance = Vector3Dist(position, closestPos)
|
||||
end
|
||||
|
||||
return closestPlayerID, distance
|
||||
end
|
||||
|
||||
function IsAnyPlayerInsideVehicle(vehicle, playerPeds)
|
||||
for i = 1, #playerPeds, 1 do
|
||||
local veh = GetVehiclePedIsIn(playerPeds[i], false)
|
||||
|
||||
if (DoesEntityExist(veh) and veh == vehicle) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
-- return the ped of the closest player
|
||||
function GetClosestPlayerPed(position, playerPeds)
|
||||
local closestDistance = 1000000.0
|
||||
local closestPlayerPed = nil
|
||||
local closestPos = nil
|
||||
|
||||
for k, playerPed in pairs(playerPeds) do
|
||||
local pos = GetEntityCoords(playerPed)
|
||||
local distance = Vector3DistFast(position, pos)
|
||||
|
||||
if (distance < closestDistance) then
|
||||
closestDistance = distance
|
||||
closestPlayerPed = playerPed
|
||||
closestPos = pos
|
||||
end
|
||||
end
|
||||
|
||||
local distance = 0.0
|
||||
if (closestPlayerPed ~= nil) then
|
||||
distance = Vector3Dist(position, closestPos)
|
||||
end
|
||||
|
||||
return closestPlayerPed, distance
|
||||
end
|
||||
|
||||
-- returns true if a player is active on the server with the specified license
|
||||
function IsPlayerWithLicenseActive(license)
|
||||
for playerId, playerPos in pairs(activePlayerPositions) do
|
||||
if (GetPlayerIdentifiersSorted(playerId)["license"] == license) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
-- Return an array with all identifiers - e.g. ids["license"] = license:xxxxxxxxxxxxxxxx
|
||||
function GetPlayerIdentifiersSorted(playerServerId)
|
||||
local ids = {}
|
||||
|
||||
local identifiers = GetPlayerIdentifiers(playerServerId)
|
||||
|
||||
for k, identifier in pairs (identifiers) do
|
||||
local i, j = string.find(identifier, ":")
|
||||
local idType = string.sub(identifier, 1, i-1)
|
||||
|
||||
ids[idType] = identifier
|
||||
end
|
||||
|
||||
return ids
|
||||
end
|
||||
activePlayerPositions = {}
|
||||
|
||||
-- returns a loaded vehicled with a given number plate
|
||||
function TryGetLoadedVehicle(plate, loadedVehicles)
|
||||
for i = 1, #loadedVehicles, 1 do
|
||||
if (plate == GetVehicleNumberPlateText(loadedVehicles[i]) and DoesEntityExist(loadedVehicles[i])) then
|
||||
return loadedVehicles[i]
|
||||
end
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
function ContainsPlate(plate, vehiclePlates)
|
||||
for i = 1, #vehiclePlates, 1 do
|
||||
if (plate == vehiclePlates[i]) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
-- Logs text to the server console
|
||||
function Log(text)
|
||||
if (Config.isDebug) then
|
||||
Print(GetCurrentResourceName() .. ": " .. text)
|
||||
end
|
||||
end
|
||||
|
||||
-- return the distance between two positions (Vector3)
|
||||
function Vector3Dist(v1, v2)
|
||||
return math.sqrt( (v2.x - v1.x) * (v2.x - v1.x) + (v2.y - v1.y) * (v2.y - v1.y) + (v2.z - v1.z) * (v2.z - v1.z) )
|
||||
end
|
||||
|
||||
-- return the distance between two positions without sqrt (Vector3)
|
||||
function Vector3DistFast(v1, v2)
|
||||
return (v2.x - v1.x) * (v2.x - v1.x) + (v2.y - v1.y) * (v2.y - v1.y) + (v2.z - v1.z) * (v2.z - v1.z)
|
||||
end
|
||||
|
||||
-- returns the difference in degrees from the axis with the highest difference
|
||||
function GetRotationDifference(r1, r2)
|
||||
local x = math.abs(r1.x - r2.x)
|
||||
local y = math.abs(r1.y - r2.y)
|
||||
local z = math.abs(r1.z - r2.z)
|
||||
|
||||
if (x > y and x > z) then
|
||||
return x
|
||||
elseif (y > z) then
|
||||
return y
|
||||
else
|
||||
return z
|
||||
end
|
||||
end
|
||||
|
||||
-- get the amount of currently active players
|
||||
function GetActivePlayerCount()
|
||||
local playerCount = 0
|
||||
for k, v in pairs(activePlayerPositions) do
|
||||
playerCount = playerCount + 1
|
||||
end
|
||||
return playerCount
|
||||
end
|
||||
|
||||
-- return the ID of the closest player
|
||||
function GetClosestPlayerId(position)
|
||||
local closestDistance = 1000000.0
|
||||
local closestPlayerID = nil
|
||||
local closestPos = nil
|
||||
|
||||
for playerID, pos in pairs(activePlayerPositions) do
|
||||
local distance = Vector3DistFast(position, pos)
|
||||
|
||||
if (distance < closestDistance) then
|
||||
closestDistance = distance
|
||||
closestPlayerID = playerID
|
||||
closestPos = pos
|
||||
end
|
||||
end
|
||||
|
||||
local distance = nil
|
||||
if (closestPlayerID ~= nil) then
|
||||
distance = Vector3Dist(position, closestPos)
|
||||
end
|
||||
|
||||
return closestPlayerID, distance
|
||||
end
|
||||
|
||||
function IsAnyPlayerInsideVehicle(vehicle, playerPeds)
|
||||
for i = 1, #playerPeds, 1 do
|
||||
local veh = GetVehiclePedIsIn(playerPeds[i], false)
|
||||
|
||||
if (DoesEntityExist(veh) and veh == vehicle) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
-- return the ped of the closest player
|
||||
function GetClosestPlayerPed(position, playerPeds)
|
||||
local closestDistance = 1000000.0
|
||||
local closestPlayerPed = nil
|
||||
local closestPos = nil
|
||||
|
||||
for k, playerPed in pairs(playerPeds) do
|
||||
local pos = GetEntityCoords(playerPed)
|
||||
local distance = Vector3DistFast(position, pos)
|
||||
|
||||
if (distance < closestDistance) then
|
||||
closestDistance = distance
|
||||
closestPlayerPed = playerPed
|
||||
closestPos = pos
|
||||
end
|
||||
end
|
||||
|
||||
local distance = 0.0
|
||||
if (closestPlayerPed ~= nil) then
|
||||
distance = Vector3Dist(position, closestPos)
|
||||
end
|
||||
|
||||
return closestPlayerPed, distance
|
||||
end
|
||||
|
||||
-- returns true if a player is active on the server with the specified license
|
||||
function IsPlayerWithLicenseActive(license)
|
||||
for playerId, playerPos in pairs(activePlayerPositions) do
|
||||
if (GetPlayerIdentifiersSorted(playerId)["license"] == license) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
-- Return an array with all identifiers - e.g. ids["license"] = license:xxxxxxxxxxxxxxxx
|
||||
function GetPlayerIdentifiersSorted(playerServerId)
|
||||
local ids = {}
|
||||
|
||||
local identifiers = GetPlayerIdentifiers(playerServerId)
|
||||
|
||||
for k, identifier in pairs (identifiers) do
|
||||
local i, j = string.find(identifier, ":")
|
||||
local idType = string.sub(identifier, 1, i-1)
|
||||
|
||||
ids[idType] = identifier
|
||||
end
|
||||
|
||||
return ids
|
||||
end
|
File diff suppressed because it is too large
Load diff
|
@ -1,149 +1,149 @@
|
|||
|
||||
Config = {}
|
||||
|
||||
-- set at least one to false, otherwise both menus will clash
|
||||
-- and don't forget to comment the menu in the fxmanifest.lua if you don't use it!
|
||||
-- Setting both to true does not work!
|
||||
-- setting both to false results in no menu being usable at all
|
||||
-- you can then just include the exports in your own menu if you have one
|
||||
Config.useContextMenu = false
|
||||
Config.useNativeUI = true
|
||||
|
||||
-- set to nil if you don't want to use the command
|
||||
Config.lockCommand = "lock"
|
||||
-- set to nil if you don't want to use the button (303, U)
|
||||
Config.lockKey = 10 -- PageUp
|
||||
|
||||
-- set to nil if you don't want to use the command
|
||||
Config.keyMenuCommand = "keys"
|
||||
-- set to nil if you don't want to use the button (311, K)
|
||||
Config.keyMenuKey = 56 -- F9
|
||||
|
||||
-- maximum distance (in meters) between the player and ContextMenu interaction point
|
||||
Config.maxDistance = 5.0
|
||||
|
||||
-- you can define more keymakers by just adding additional entries
|
||||
Config.Keymakers = {
|
||||
{
|
||||
-- ped model (yes, the ` symbols are correct)
|
||||
model = `s_m_m_autoshop_01`,
|
||||
-- position and heading vector4(x, y, z, heading)
|
||||
pos = vector4(170.33, -1799.13, 28.32, 313.0)
|
||||
},
|
||||
}
|
||||
|
||||
-- define costs for creating a new key and exchanging locks
|
||||
Config.Costs = {
|
||||
GetMoney = "cash", -- cash or bank
|
||||
newKey = 150,
|
||||
exchangeLocks = 650
|
||||
}
|
||||
|
||||
-- define job vehicles like this (this acts as a key for those vehicles)
|
||||
-- models in ``
|
||||
-- either exact plates or just a string that should be in the vehicles plate
|
||||
-- e.g. "LSPD" will let a police officer lock/unlock any vehicle with the plate "LSPD1337" or "13LSPD37"
|
||||
Config.JobVehicles = {
|
||||
-- examples:
|
||||
--["police"] = {
|
||||
--models = {
|
||||
--`police`,
|
||||
--`policeb`,
|
||||
--`pbus`
|
||||
--},
|
||||
--plates = {
|
||||
--""
|
||||
--}
|
||||
--},
|
||||
--["mechanic"] = {
|
||||
-- models = {
|
||||
-- `flatbed`
|
||||
-- },
|
||||
-- plates = {
|
||||
-- "MECH"
|
||||
-- }
|
||||
--},
|
||||
}
|
||||
|
||||
Config.Strings = {
|
||||
keymaker = "Schlüsseldienst",
|
||||
|
||||
helpText = "~w~Drück ~g~E ~w~um mit den Schlüsseldienst zu reden",
|
||||
|
||||
lockNotif = "~r~Fahrzeug Abgeschlossen",
|
||||
unlockNotif = "~g~Fahrzeug Aufgeschlossen",
|
||||
|
||||
createSuccess = "~g~Ersatzschlüssel Nachgemacht %s.",
|
||||
createNoMoney = "~r~Schlüssel kann nicht nachgemacht werden, du hast zu wenig Geld dabei",
|
||||
createFailed = "~r~Ersatzschlüssel machen Fehlgeschlagen %s!",
|
||||
|
||||
giveSuccess = "~g~Schlüssel an %s Weitergegeben.",
|
||||
giveSuccessPly = "~g~Schlüssel von %s erhalten ",
|
||||
giveFailed = "~r~Schlüssel geben von %s Fehlgeschlagen",
|
||||
|
||||
removeSuccess = "~r~Schlüssel für ~g~%s ~r~aus deiner Tasche Entfernt",
|
||||
removeNoMoney = "~r~Schloss kann nicht bezahlt werden, du hast kein Geld dabei",
|
||||
removeFailed = "~r~Entfernen von Schlüssel für ~g~%s ~r~Fehgeschlagen!",
|
||||
|
||||
deleteKeys = "~r~Du hast für dein ~g~%s ~r~Das Schloss ausgetasucht, und somit sind jetzt alle Schlüssel nicht mehr Gültig.",
|
||||
|
||||
|
||||
-- NativeUI
|
||||
NUI = {
|
||||
-- keymaker menu
|
||||
keymakerMenuTitle = "Schlüssel-System",
|
||||
keymakerMenuSub = "~g~Erstelle Schlüssel und Tausche deine Fahrzeug Schlösser aus",
|
||||
|
||||
-- create key
|
||||
createKeyTitle = "~g~Ersatzschlüssel erstellen",
|
||||
createKeyDesc = "Erstelle einen neuen Schlüssel für eines Ihrer Fahrzeuge ",
|
||||
createVehicleKey = "Erstelle einen Schlüssel für Ihr %s mit den Kennzeichen %s. ~g~Preis "..Config.Costs.newKey.."$",
|
||||
|
||||
-- invalidate Key
|
||||
invalKeyTitle = "~r~Fahrzeug Schlöss Tauschen",
|
||||
invalKeyDesc = "Tausche die Schlösser von Ihren Auto aus, alle schlüssel sind damit nicht mehr Gültig!",
|
||||
invalVehicleKey = "Schloss Tauschen von %s mit den Kennzeichen %s. ~g~Preis "..Config.Costs.exchangeLocks.."$",
|
||||
|
||||
-- key Inventory
|
||||
keyInventoryTitle = "Schlüssel",
|
||||
keyInventorySub = "~g~Da sind alle deine Schlüssel",
|
||||
|
||||
-- master keys
|
||||
masterKeysTitle = "Hauptschlüssel",
|
||||
masterKeysDesc = "~g~Zeigt alle deine Hauptschlüssel an",
|
||||
|
||||
-- additional keys
|
||||
keysTitle = "Ersatzschlüssel",
|
||||
keysDesc = "~g~Zeigt alle deine Ersatzschlüssel an",
|
||||
giveKeyTitle = "~g~Ersatzschlüssel Geben",
|
||||
giveKeyDesc = "~g~Ersatzschlüssel Geben",
|
||||
removeKeyTitle = "~r~Schlüssel Entfernen",
|
||||
removeKeyDesc = "~r~Schlüssel Entfernen",
|
||||
transferVehicleTitle = "~g~Fahrzeug übergeben",
|
||||
transferVehicleDesc = "~g~Übertrage ein Fahrzeug an einen Spieler in der Nähe",
|
||||
transferVehicleSuccess = "~g~Fahrzeug erfolgreich übergeben an %s",
|
||||
transferVehicleFailed = "~r~Fahrzeugübergabe fehlgeschlagen",
|
||||
transferVehicleReceived = "~g~Du hast ein Fahrzeug erhalten",
|
||||
noPlayersNearby = "~r~Keine Spieler in der Nähe",
|
||||
|
||||
|
||||
},
|
||||
|
||||
-- ContextMenu
|
||||
CM = {
|
||||
-- keymaker menu
|
||||
createKeyTitle = "Ersatzschlüssel",
|
||||
invalKeyTitle = "Schlossaustauschen",
|
||||
|
||||
-- key inventory
|
||||
masterKeysTitle = "~g~Hauptschlüssel",
|
||||
keysTitle = "~b~Ersatzschlüssel",
|
||||
|
||||
-- other player
|
||||
giveKey = "~r~Gebe ein Schlüssel, an der Person",
|
||||
|
||||
transferVehicleTitle = "Fahrzeug übergeben",
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Config = {}
|
||||
|
||||
-- set at least one to false, otherwise both menus will clash
|
||||
-- and don't forget to comment the menu in the fxmanifest.lua if you don't use it!
|
||||
-- Setting both to true does not work!
|
||||
-- setting both to false results in no menu being usable at all
|
||||
-- you can then just include the exports in your own menu if you have one
|
||||
Config.useContextMenu = false
|
||||
Config.useNativeUI = true
|
||||
|
||||
-- set to nil if you don't want to use the command
|
||||
Config.lockCommand = "lock"
|
||||
-- set to nil if you don't want to use the button (303, U)
|
||||
Config.lockKey = 10 -- PageUp
|
||||
|
||||
-- set to nil if you don't want to use the command
|
||||
Config.keyMenuCommand = "keys"
|
||||
-- set to nil if you don't want to use the button (311, K)
|
||||
Config.keyMenuKey = 56 -- F9
|
||||
|
||||
-- maximum distance (in meters) between the player and ContextMenu interaction point
|
||||
Config.maxDistance = 5.0
|
||||
|
||||
-- you can define more keymakers by just adding additional entries
|
||||
Config.Keymakers = {
|
||||
{
|
||||
-- ped model (yes, the ` symbols are correct)
|
||||
model = `s_m_m_autoshop_01`,
|
||||
-- position and heading vector4(x, y, z, heading)
|
||||
pos = vector4(170.33, -1799.13, 28.32, 313.0)
|
||||
},
|
||||
}
|
||||
|
||||
-- define costs for creating a new key and exchanging locks
|
||||
Config.Costs = {
|
||||
GetMoney = "cash", -- cash or bank
|
||||
newKey = 150,
|
||||
exchangeLocks = 650
|
||||
}
|
||||
|
||||
-- define job vehicles like this (this acts as a key for those vehicles)
|
||||
-- models in ``
|
||||
-- either exact plates or just a string that should be in the vehicles plate
|
||||
-- e.g. "LSPD" will let a police officer lock/unlock any vehicle with the plate "LSPD1337" or "13LSPD37"
|
||||
Config.JobVehicles = {
|
||||
-- examples:
|
||||
--["police"] = {
|
||||
--models = {
|
||||
--`police`,
|
||||
--`policeb`,
|
||||
--`pbus`
|
||||
--},
|
||||
--plates = {
|
||||
--""
|
||||
--}
|
||||
--},
|
||||
--["mechanic"] = {
|
||||
-- models = {
|
||||
-- `flatbed`
|
||||
-- },
|
||||
-- plates = {
|
||||
-- "MECH"
|
||||
-- }
|
||||
--},
|
||||
}
|
||||
|
||||
Config.Strings = {
|
||||
keymaker = "Schlüsseldienst",
|
||||
|
||||
helpText = "~w~Drück ~g~E ~w~um mit den Schlüsseldienst zu reden",
|
||||
|
||||
lockNotif = "~r~Fahrzeug Abgeschlossen",
|
||||
unlockNotif = "~g~Fahrzeug Aufgeschlossen",
|
||||
|
||||
createSuccess = "~g~Ersatzschlüssel Nachgemacht %s.",
|
||||
createNoMoney = "~r~Schlüssel kann nicht nachgemacht werden, du hast zu wenig Geld dabei",
|
||||
createFailed = "~r~Ersatzschlüssel machen Fehlgeschlagen %s!",
|
||||
|
||||
giveSuccess = "~g~Schlüssel an %s Weitergegeben.",
|
||||
giveSuccessPly = "~g~Schlüssel von %s erhalten ",
|
||||
giveFailed = "~r~Schlüssel geben von %s Fehlgeschlagen",
|
||||
|
||||
removeSuccess = "~r~Schlüssel für ~g~%s ~r~aus deiner Tasche Entfernt",
|
||||
removeNoMoney = "~r~Schloss kann nicht bezahlt werden, du hast kein Geld dabei",
|
||||
removeFailed = "~r~Entfernen von Schlüssel für ~g~%s ~r~Fehgeschlagen!",
|
||||
|
||||
deleteKeys = "~r~Du hast für dein ~g~%s ~r~Das Schloss ausgetasucht, und somit sind jetzt alle Schlüssel nicht mehr Gültig.",
|
||||
|
||||
|
||||
-- NativeUI
|
||||
NUI = {
|
||||
-- keymaker menu
|
||||
keymakerMenuTitle = "Schlüssel-System",
|
||||
keymakerMenuSub = "~g~Erstelle Schlüssel und Tausche deine Fahrzeug Schlösser aus",
|
||||
|
||||
-- create key
|
||||
createKeyTitle = "~g~Ersatzschlüssel erstellen",
|
||||
createKeyDesc = "Erstelle einen neuen Schlüssel für eines Ihrer Fahrzeuge ",
|
||||
createVehicleKey = "Erstelle einen Schlüssel für Ihr %s mit den Kennzeichen %s. ~g~Preis "..Config.Costs.newKey.."$",
|
||||
|
||||
-- invalidate Key
|
||||
invalKeyTitle = "~r~Fahrzeug Schlöss Tauschen",
|
||||
invalKeyDesc = "Tausche die Schlösser von Ihren Auto aus, alle schlüssel sind damit nicht mehr Gültig!",
|
||||
invalVehicleKey = "Schloss Tauschen von %s mit den Kennzeichen %s. ~g~Preis "..Config.Costs.exchangeLocks.."$",
|
||||
|
||||
-- key Inventory
|
||||
keyInventoryTitle = "Schlüssel",
|
||||
keyInventorySub = "~g~Da sind alle deine Schlüssel",
|
||||
|
||||
-- master keys
|
||||
masterKeysTitle = "Hauptschlüssel",
|
||||
masterKeysDesc = "~g~Zeigt alle deine Hauptschlüssel an",
|
||||
|
||||
-- additional keys
|
||||
keysTitle = "Ersatzschlüssel",
|
||||
keysDesc = "~g~Zeigt alle deine Ersatzschlüssel an",
|
||||
giveKeyTitle = "~g~Ersatzschlüssel Geben",
|
||||
giveKeyDesc = "~g~Ersatzschlüssel Geben",
|
||||
removeKeyTitle = "~r~Schlüssel Entfernen",
|
||||
removeKeyDesc = "~r~Schlüssel Entfernen",
|
||||
transferVehicleTitle = "~g~Fahrzeug übergeben",
|
||||
transferVehicleDesc = "~g~Übertrage ein Fahrzeug an einen Spieler in der Nähe",
|
||||
transferVehicleSuccess = "~g~Fahrzeug erfolgreich übergeben an %s",
|
||||
transferVehicleFailed = "~r~Fahrzeugübergabe fehlgeschlagen",
|
||||
transferVehicleReceived = "~g~Du hast ein Fahrzeug erhalten",
|
||||
noPlayersNearby = "~r~Keine Spieler in der Nähe",
|
||||
|
||||
|
||||
},
|
||||
|
||||
-- ContextMenu
|
||||
CM = {
|
||||
-- keymaker menu
|
||||
createKeyTitle = "Ersatzschlüssel",
|
||||
invalKeyTitle = "Schlossaustauschen",
|
||||
|
||||
-- key inventory
|
||||
masterKeysTitle = "~g~Hauptschlüssel",
|
||||
keysTitle = "~b~Ersatzschlüssel",
|
||||
|
||||
-- other player
|
||||
giveKey = "~r~Gebe ein Schlüssel, an der Person",
|
||||
|
||||
transferVehicleTitle = "Fahrzeug übergeben",
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,57 +1,57 @@
|
|||
fx_version 'cerulean'
|
||||
games { 'gta5' }
|
||||
|
||||
author 'Mîhó'
|
||||
description 'Manage vehicle keys!'
|
||||
version '1.1.1'
|
||||
|
||||
dependency 'kimi_callbacks'
|
||||
dependency 'NativeUI'
|
||||
|
||||
server_scripts {
|
||||
--'@mysql-async/lib/MySQL.lua',
|
||||
'@oxmysql/lib/MySQL.lua',
|
||||
|
||||
'config.lua',
|
||||
'server.lua'
|
||||
}
|
||||
|
||||
client_scripts {
|
||||
-- comment these lines if not using the ContextMenu
|
||||
--'@ContextMenu/screenToWorld.lua',
|
||||
--'@ContextMenu/Drawables/Color.lua',
|
||||
--'@ContextMenu/Drawables/Rect.lua',
|
||||
--'@ContextMenu/Drawables/Text.lua',
|
||||
--'@ContextMenu/Drawables/Sprite.lua',
|
||||
--'@ContextMenu/Menu/Item.lua',
|
||||
--'@ContextMenu/Menu/TextItem.lua',
|
||||
--'@ContextMenu/Menu/CheckboxItem.lua',
|
||||
--'@ContextMenu/Menu/SubmenuItem.lua',
|
||||
--'@ContextMenu/Menu/Separator.lua',
|
||||
--'@ContextMenu/Menu/Border.lua',
|
||||
--'@ContextMenu/Menu/Menu.lua',
|
||||
--'@ContextMenu/Menu/MenuPool.lua',
|
||||
|
||||
-- comment this line if not using NativeUILua
|
||||
'@NativeUI/NativeUI.lua',
|
||||
'@ox_lib/init.lua',
|
||||
|
||||
'config.lua',
|
||||
'client.lua'
|
||||
}
|
||||
|
||||
server_exports {
|
||||
'IsVehicleOwner',
|
||||
'IsKeyOwner',
|
||||
'IsVehicleOrKeyOwner',
|
||||
'GetPlayerKeys',
|
||||
'GetPlayerVehicles'
|
||||
}
|
||||
|
||||
exports {
|
||||
'IsVehicleOwner',
|
||||
'IsKeyOwner',
|
||||
'IsVehicleOrKeyOwner',
|
||||
'GetAllKeys',
|
||||
'GetAllVehicles'
|
||||
}
|
||||
fx_version 'cerulean'
|
||||
games { 'gta5' }
|
||||
|
||||
author 'Mîhó'
|
||||
description 'Manage vehicle keys!'
|
||||
version '1.1.1'
|
||||
|
||||
dependency 'kimi_callbacks'
|
||||
dependency 'NativeUI'
|
||||
|
||||
server_scripts {
|
||||
--'@mysql-async/lib/MySQL.lua',
|
||||
'@oxmysql/lib/MySQL.lua',
|
||||
|
||||
'config.lua',
|
||||
'server.lua'
|
||||
}
|
||||
|
||||
client_scripts {
|
||||
-- comment these lines if not using the ContextMenu
|
||||
--'@ContextMenu/screenToWorld.lua',
|
||||
--'@ContextMenu/Drawables/Color.lua',
|
||||
--'@ContextMenu/Drawables/Rect.lua',
|
||||
--'@ContextMenu/Drawables/Text.lua',
|
||||
--'@ContextMenu/Drawables/Sprite.lua',
|
||||
--'@ContextMenu/Menu/Item.lua',
|
||||
--'@ContextMenu/Menu/TextItem.lua',
|
||||
--'@ContextMenu/Menu/CheckboxItem.lua',
|
||||
--'@ContextMenu/Menu/SubmenuItem.lua',
|
||||
--'@ContextMenu/Menu/Separator.lua',
|
||||
--'@ContextMenu/Menu/Border.lua',
|
||||
--'@ContextMenu/Menu/Menu.lua',
|
||||
--'@ContextMenu/Menu/MenuPool.lua',
|
||||
|
||||
-- comment this line if not using NativeUILua
|
||||
'@NativeUI/NativeUI.lua',
|
||||
'@ox_lib/init.lua',
|
||||
|
||||
'config.lua',
|
||||
'client.lua'
|
||||
}
|
||||
|
||||
server_exports {
|
||||
'IsVehicleOwner',
|
||||
'IsKeyOwner',
|
||||
'IsVehicleOrKeyOwner',
|
||||
'GetPlayerKeys',
|
||||
'GetPlayerVehicles'
|
||||
}
|
||||
|
||||
exports {
|
||||
'IsVehicleOwner',
|
||||
'IsKeyOwner',
|
||||
'IsVehicleOrKeyOwner',
|
||||
'GetAllKeys',
|
||||
'GetAllVehicles'
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -1,27 +1,27 @@
|
|||
-- --------------------------------------------------------
|
||||
-- Host: 127.0.0.1
|
||||
-- Server version: 10.1.28-MariaDB - mariadb.org binary distribution
|
||||
-- Server OS: Win32
|
||||
-- HeidiSQL Version: 11.0.0.5919
|
||||
-- --------------------------------------------------------
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET NAMES utf8 */;
|
||||
/*!50503 SET NAMES utf8mb4 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
|
||||
-- Dumping structure for table essentialmode.vehicle_keys
|
||||
CREATE TABLE IF NOT EXISTS `vehicle_keys` (
|
||||
`owner` varchar(60) NOT NULL,
|
||||
`plate` varchar(8) NOT NULL,
|
||||
`count` smallint(6) NOT NULL,
|
||||
KEY `plate` (`plate`),
|
||||
KEY `owner` (`owner`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
-- Data exporting was unselected.
|
||||
|
||||
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
-- --------------------------------------------------------
|
||||
-- Host: 127.0.0.1
|
||||
-- Server version: 10.1.28-MariaDB - mariadb.org binary distribution
|
||||
-- Server OS: Win32
|
||||
-- HeidiSQL Version: 11.0.0.5919
|
||||
-- --------------------------------------------------------
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET NAMES utf8 */;
|
||||
/*!50503 SET NAMES utf8mb4 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
|
||||
-- Dumping structure for table essentialmode.vehicle_keys
|
||||
CREATE TABLE IF NOT EXISTS `vehicle_keys` (
|
||||
`owner` varchar(60) NOT NULL,
|
||||
`plate` varchar(8) NOT NULL,
|
||||
`count` smallint(6) NOT NULL,
|
||||
KEY `plate` (`plate`),
|
||||
KEY `owner` (`owner`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
-- Data exporting was unselected.
|
||||
|
||||
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
BIN
resources/[carscripts]/jg-advancedgarages/.fxap
Normal file
BIN
resources/[carscripts]/jg-advancedgarages/.fxap
Normal file
Binary file not shown.
17
resources/[carscripts]/jg-advancedgarages/README.md
Normal file
17
resources/[carscripts]/jg-advancedgarages/README.md
Normal file
|
@ -0,0 +1,17 @@
|
|||
# JG Scripts Advanced Garages v3
|
||||
|
||||
Hey there! Thanks so much for purchasing, it really means a lot to me. I've spent a lot of time on this script, and I hope you love it. This document has a bunch of the essential information that should help you out:
|
||||
|
||||
## Useful Links
|
||||
|
||||
🔧 Configure Advanced Garages in just minutes: https://configurator.jgscripts.com/advanced-garages
|
||||
|
||||
📚 Documentation: https://docs.jgscripts.com/advanced-garages/introduction
|
||||
|
||||
🔗 Official Website: https://jgscripts.com
|
||||
|
||||
🛒 Store: https://store.jgscripts.com
|
||||
|
||||
## Support
|
||||
|
||||
Join Discord https://discord.jgscripts.com, and we will do whatever it takes to help you out and get you up and running!
|
|
@ -0,0 +1,90 @@
|
|||
-- A modified version of "VehicleDeformation" v1.0.1, by Kiminaze. Full credits go to him, so adibe by the license below.
|
||||
-- Check out his other work: https://kiminazes-script-gems.tebex.io/
|
||||
--
|
||||
-- VehicleDeformation License:
|
||||
--
|
||||
-- Copyright (c) 2021 Philipp Decker /// FiveM: Kiminaze / Discord: Kiminaze#9097
|
||||
-- By acquiring a copy of this code snippet for the "FiveM" modification for "Grand Theft
|
||||
-- Auto V" you are granted permission to use and modify all of its parts.
|
||||
-- You are allowed to (re-)distribute and sell resources that have been created with the
|
||||
-- help of this code snippet. You have to include this license when doing so.
|
||||
-- This code snippet is provided "as is" and the copyright holder of this code snippet can
|
||||
-- not be held accountable for any damages occuring during the usage or modification of
|
||||
-- this code snippet.
|
||||
|
||||
local MAX_DEFORM_ITERATIONS = 50 -- iterations for damage application
|
||||
local DEFORMATION_DAMAGE_THRESHOLD = 0.05 -- the minimum damage value at a deformation point
|
||||
|
||||
function getVehicleDeformation(vehicle)
|
||||
assert(vehicle ~= nil and DoesEntityExist(vehicle), "Parameter \"vehicle\" must be a valid vehicle entity!")
|
||||
|
||||
-- check vehicle size and pre-calc values for offsets
|
||||
local min, max = GetModelDimensions(GetEntityModel(vehicle))
|
||||
local X = (max.x - min.x) * 0.5
|
||||
local Y = (max.y - min.y) * 0.5
|
||||
local Z = (max.z - min.z) * 0.5
|
||||
local halfY = Y * 0.5
|
||||
|
||||
-- offsets for deformation check
|
||||
local positions = {vector3(-X, Y, 0.0), vector3(-X, Y, Z), vector3(0.0, Y, 0.0), vector3(0.0, Y, Z), vector3(X, Y, 0.0), vector3(X, Y, Z), vector3(-X, halfY, 0.0), vector3(-X, halfY, Z), vector3(0.0, halfY, 0.0), vector3(0.0, halfY, Z), vector3(X, halfY, 0.0), vector3(X, halfY, Z),
|
||||
vector3(-X, 0.0, 0.0), vector3(-X, 0.0, Z), vector3(0.0, 0.0, 0.0), vector3(0.0, 0.0, Z), vector3(X, 0.0, 0.0), vector3(X, 0.0, Z), vector3(-X, -halfY, 0.0), vector3(-X, -halfY, Z), vector3(0.0, -halfY, 0.0), vector3(0.0, -halfY, Z), vector3(X, -halfY, 0.0),
|
||||
vector3(X, -halfY, Z), vector3(-X, -Y, 0.0), vector3(-X, -Y, Z), vector3(0.0, -Y, 0.0), vector3(0.0, -Y, Z), vector3(X, -Y, 0.0), vector3(X, -Y, Z)}
|
||||
|
||||
-- get deformation from vehicle
|
||||
local deformationPoints = {}
|
||||
for i, pos in ipairs(positions) do
|
||||
-- translate damage from vector3 to a float
|
||||
local dmg = #(GetVehicleDeformationAtPos(vehicle, pos.x, pos.y, pos.z))
|
||||
if (dmg > DEFORMATION_DAMAGE_THRESHOLD) then
|
||||
table.insert(deformationPoints, {pos, dmg})
|
||||
end
|
||||
end
|
||||
|
||||
return {
|
||||
deformation = deformationPoints,
|
||||
dirt = GetVehicleDirtLevel(vehicle)
|
||||
}
|
||||
end
|
||||
|
||||
function setVehicleDeformation(vehicle, deformation)
|
||||
assert(vehicle ~= nil and DoesEntityExist(vehicle), "Parameter \"vehicle\" must be a valid vehicle entity!")
|
||||
assert(deformation ~= nil and type(deformation) == "table", "Parameter \"deformation\" must be a table!")
|
||||
|
||||
local deformationPoints = deformation.deformation
|
||||
local dirt = deformation.dirt
|
||||
|
||||
CreateThread(function()
|
||||
local handlingMult, damageMult = GetVehicleHandlingFloat(vehicle, "CHandlingData", "fDeformationDamageMult"), 20.0
|
||||
if handlingMult <= 0.55 then damageMult = 1000.0
|
||||
elseif handlingMult <= 0.65 then damageMult = 400.0
|
||||
elseif handlingMult <= 0.75 then damageMult = 200.0 end
|
||||
|
||||
for _, def in ipairs(deformationPoints) do
|
||||
def[1] = vector3(def[1].x, def[1].y, def[1].z)
|
||||
end
|
||||
|
||||
-- iterate over all deformation points and check if more than one application is necessary
|
||||
-- looping is necessary for most vehicles that have a really bad damage model or take a lot of damage (e.g. neon, phantom3)
|
||||
local deform = true
|
||||
local iteration = 0
|
||||
|
||||
while deform and iteration < MAX_DEFORM_ITERATIONS do
|
||||
if not DoesEntityExist(vehicle) then return end
|
||||
|
||||
deform = false
|
||||
|
||||
for _, def in ipairs(deformationPoints) do
|
||||
if #(GetVehicleDeformationAtPos(vehicle, def[1].x, def[1].y, def[1].z)) < def[2] then
|
||||
local offset = def[1] * 2.0
|
||||
SetVehicleDamage(vehicle, offset.x, offset.y, offset.z, def[2] * damageMult, 1000.0, true)
|
||||
deform = true
|
||||
end
|
||||
end
|
||||
|
||||
iteration = iteration + 1
|
||||
Wait(100)
|
||||
end
|
||||
|
||||
SetVehicleDirtLevel(vehicle, dirt)
|
||||
end)
|
||||
end
|
BIN
resources/[carscripts]/jg-advancedgarages/client/cl-garage.lua
Normal file
BIN
resources/[carscripts]/jg-advancedgarages/client/cl-garage.lua
Normal file
Binary file not shown.
BIN
resources/[carscripts]/jg-advancedgarages/client/cl-impound.lua
Normal file
BIN
resources/[carscripts]/jg-advancedgarages/client/cl-impound.lua
Normal file
Binary file not shown.
BIN
resources/[carscripts]/jg-advancedgarages/client/cl-interior.lua
Normal file
BIN
resources/[carscripts]/jg-advancedgarages/client/cl-interior.lua
Normal file
Binary file not shown.
|
@ -0,0 +1,186 @@
|
|||
local GARAGE_ZONE_Z_DIST = 4.0
|
||||
local inVehicle, blips, zones, peds = nil, {}, {}, {}
|
||||
local cachedGarageLocations
|
||||
|
||||
function getAvailableGarageLocations()
|
||||
if not cachedGarageLocations then
|
||||
cachedGarageLocations = lib.callback.await("jg-advancedgarages:server:get-available-garage-locations", false)
|
||||
end
|
||||
|
||||
return cachedGarageLocations or {}
|
||||
end
|
||||
|
||||
---@param coords vector3
|
||||
---@param marker table
|
||||
function drawMarkerOnFrame(coords, marker)
|
||||
---@diagnostic disable-next-line: missing-parameter
|
||||
DrawMarker(marker.id, coords.x, coords.y, coords.z, 0, 0, 0, 0, 0, 0, marker.size.x, marker.size.y, marker.size.z, marker.color.r, marker.color.g, marker.color.b, marker.color.a, marker.bobUpAndDown, marker.faceCamera, 0, marker.rotate, marker.drawOnEnts)
|
||||
end
|
||||
|
||||
---@param name string
|
||||
---@param coords vector3
|
||||
---@param blipId integer
|
||||
---@param blipColour integer
|
||||
---@param blipScale number
|
||||
local function createBlip(name, coords, blipId, blipColour, blipScale)
|
||||
local blip = AddBlipForCoord(coords.x, coords.y, coords.z)
|
||||
SetBlipSprite(blip, blipId)
|
||||
SetBlipColour(blip, blipColour)
|
||||
SetBlipScale(blip, blipScale)
|
||||
SetBlipAsShortRange(blip, true)
|
||||
BeginTextCommandSetBlipName("STRING")
|
||||
AddTextComponentString(name)
|
||||
EndTextCommandSetBlipName(blip)
|
||||
return blip
|
||||
end
|
||||
|
||||
---@param garageId string
|
||||
---@param coords vector3|vector4
|
||||
---@param dist number
|
||||
---@param marker? table | false | nil
|
||||
---@param onEnter? function
|
||||
---@param onExit? function
|
||||
---@param inside? function
|
||||
local function createLocation(garageId, coords, dist, marker, onEnter, onExit, inside)
|
||||
local point = lib.zones.box({
|
||||
coords = coords,
|
||||
size = vector3(dist, dist, GARAGE_ZONE_Z_DIST),
|
||||
rotation = coords.w or 0,
|
||||
garageId = garageId,
|
||||
onEnter = onEnter,
|
||||
onExit = onExit,
|
||||
inside = inside
|
||||
})
|
||||
|
||||
zones[#zones+1] = point
|
||||
|
||||
local markerPoint = lib.points.new({
|
||||
coords = coords,
|
||||
distance = dist * 4,
|
||||
garageId = garageId
|
||||
})
|
||||
|
||||
if not marker then return end
|
||||
|
||||
function markerPoint:nearby()
|
||||
drawMarkerOnFrame(coords, marker)
|
||||
end
|
||||
|
||||
zones[#zones+1] = markerPoint
|
||||
end
|
||||
|
||||
---Runs on tick while ped is in a garage zone
|
||||
---@param garageId string
|
||||
---@param garageType "car"|"sea"|"air"
|
||||
---@param isImpound boolean
|
||||
local function pedIsInGarageZone(garageId, garageType, isImpound)
|
||||
local pedIsInVehicle = cache.vehicle and GetPedInVehicleSeat(cache.vehicle, -1) == cache.ped
|
||||
local prompt = isImpound and Config.OpenImpoundPrompt or (pedIsInVehicle and Config.InsertVehiclePrompt or Config.OpenGaragePrompt)
|
||||
local action = function()
|
||||
if pedIsInVehicle then
|
||||
TriggerEvent("jg-advancedgarages:client:store-vehicle", garageId, garageType, false)
|
||||
else
|
||||
TriggerEvent("jg-advancedgarages:client:open-garage", garageId, garageType, false)
|
||||
end
|
||||
end
|
||||
|
||||
if inVehicle ~= pedIsInVehicle then
|
||||
if Config.UseRadialMenu then
|
||||
Framework.Client.RadialMenuAdd(garageId, prompt, action)
|
||||
else
|
||||
Framework.Client.ShowTextUI(prompt)
|
||||
end
|
||||
|
||||
inVehicle = pedIsInVehicle
|
||||
end
|
||||
|
||||
if Config.UseRadialMenu then return end
|
||||
if IsControlJustPressed(0, isImpound and Config.OpenImpoundKeyBind or (pedIsInVehicle and Config.InsertVehicleKeyBind or Config.OpenGarageKeyBind)) then
|
||||
action()
|
||||
end
|
||||
end
|
||||
|
||||
---@param garages table
|
||||
local function createTargetZones(garages)
|
||||
for _, ped in ipairs(peds) do
|
||||
Framework.Client.RemoveTarget(ped)
|
||||
end
|
||||
|
||||
for garageId, garage in pairs(garages) do
|
||||
for _, zone in ipairs(zones) do zone:remove() end -- Remove existing zones
|
||||
|
||||
entity = Framework.Client.RegisterTarget(false, garage.coords, garageId, garage.type, garage.garageType)
|
||||
|
||||
peds[#peds+1] = entity
|
||||
end
|
||||
end
|
||||
|
||||
---@param garages table
|
||||
local function createZones(garages)
|
||||
for _, zone in ipairs(zones) do zone:remove() end -- Remove existing zones
|
||||
|
||||
for garageId, garage in pairs(garages) do
|
||||
if garage then
|
||||
-- Zone
|
||||
createLocation(
|
||||
garageId,
|
||||
garage.coords,
|
||||
garage.distance,
|
||||
not garage.hideMarkers and garage.markers or false,
|
||||
nil,
|
||||
function()
|
||||
if Config.UseRadialMenu then
|
||||
Framework.Client.RadialMenuRemove(garageId)
|
||||
else
|
||||
Framework.Client.HideTextUI()
|
||||
end
|
||||
inVehicle = nil
|
||||
end,
|
||||
function()
|
||||
pedIsInGarageZone(garageId, garage.type, garage.garageType == "impound")
|
||||
end
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function createGarageZonesAndBlips()
|
||||
for _, blip in ipairs(blips) do RemoveBlip(blip) end -- Remove existing blips
|
||||
|
||||
local garages = getAvailableGarageLocations()
|
||||
|
||||
if Config.UseTarget then
|
||||
createTargetZones(garages)
|
||||
else
|
||||
createZones(garages)
|
||||
end
|
||||
|
||||
for garageId, garage in pairs(garages) do
|
||||
if garage then
|
||||
-- Blip
|
||||
if not garage.hideBlip then
|
||||
local blipName = garage.garageType == "impound" and Locale.impound or garage.garageType == "job" and Locale.jobGarage or garage.garageType == "gang" and Locale.gangGarage or Locale.garage
|
||||
if garage.uniqueBlips then blipName = blipName .. ": " .. garageId end
|
||||
local blip = createBlip(blipName, garage.coords, garage.blip.id, garage.blip.color, garage.blip.scale)
|
||||
blips[#blips + 1] = blip
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
RegisterNetEvent("jg-advancedgarages:client:update-blips-text-uis", function()
|
||||
cachedGarageLocations = lib.callback.await("jg-advancedgarages:server:get-available-garage-locations", false)
|
||||
createGarageZonesAndBlips()
|
||||
end)
|
||||
|
||||
CreateThread(function()
|
||||
Wait(2500)
|
||||
createGarageZonesAndBlips()
|
||||
end)
|
||||
|
||||
-- Delete peds in case the script restarts
|
||||
AddEventHandler("onResourceStop", function(resourceName)
|
||||
if (GetCurrentResourceName() == resourceName) then
|
||||
for _, ped in ipairs(peds) do DeleteEntity(ped) end
|
||||
end
|
||||
end)
|
BIN
resources/[carscripts]/jg-advancedgarages/client/cl-main.lua
Normal file
BIN
resources/[carscripts]/jg-advancedgarages/client/cl-main.lua
Normal file
Binary file not shown.
Binary file not shown.
BIN
resources/[carscripts]/jg-advancedgarages/client/cl-spawn.lua
Normal file
BIN
resources/[carscripts]/jg-advancedgarages/client/cl-spawn.lua
Normal file
Binary file not shown.
BIN
resources/[carscripts]/jg-advancedgarages/client/cl-vehicle.lua
Normal file
BIN
resources/[carscripts]/jg-advancedgarages/client/cl-vehicle.lua
Normal file
Binary file not shown.
|
@ -0,0 +1,67 @@
|
|||
--
|
||||
-- Custom code for common events
|
||||
--
|
||||
|
||||
---@param vehicle integer Vehicle entity
|
||||
---@param vehicleDbData table Vehicle row from the database
|
||||
---@param type "personal" | "job" | "gang"
|
||||
RegisterNetEvent("jg-advancedgarages:client:InsertVehicle:config", function(vehicle, vehicleDbData, type)
|
||||
-- Code placed in here will be run when the player inserts their vehicle (if the vehicle is owned; and passes all the checks)
|
||||
end)
|
||||
|
||||
---@param vehicle integer Vehicle entity
|
||||
RegisterNetEvent("jg-advancedgarages:client:ImpoundVehicle:config", function(vehicle)
|
||||
-- Code placed in here will be run just before the vehicle is set to impounded in the DB, and before the entity is deleted
|
||||
end)
|
||||
|
||||
---@param vehicle integer Vehicle entity
|
||||
---@param vehicleDbData table Vehicle row from the database
|
||||
---@param type "personal" | "job" | "gang"
|
||||
RegisterNetEvent("jg-advancedgarages:client:TakeOutVehicle:config", function(vehicle, vehicleDbData, type)
|
||||
-- Code placed in here will be run after a vehicle has been taken out of a garage
|
||||
end)
|
||||
|
||||
---@param plate string
|
||||
---@param newOwnerPlayerId integer
|
||||
RegisterNetEvent("jg-advancedgarages:client:TransferVehicle:config", function(plate, newOwnerPlayerId)
|
||||
-- Code placed in here will be fired when a vehicle is transferred to another player via a public garage
|
||||
end)
|
||||
|
||||
---@param vehicle integer Vehicle entity
|
||||
---@param plate string
|
||||
---@param garageId string
|
||||
---@param vehicleDbData table Vehicle row from the database
|
||||
---@param props table Vehicle properties
|
||||
---@param fuel integer Fuel level
|
||||
---@param body integer Body health
|
||||
---@param engine integer Engine health
|
||||
---@param damageModel table Damage model
|
||||
RegisterNetEvent('jg-advancedgarages:client:insert-vehicle-verification', function(vehicle, plate, garageId, vehicleDbData, props, fuel, body, engine, damageModel, cb)
|
||||
cb(true)
|
||||
end)
|
||||
|
||||
---@param plate string
|
||||
---@param vehicleDbData table Vehicle row from the database
|
||||
---@param garageId string
|
||||
lib.callback.register("jg-advancedgarages:client:takeout-vehicle-verification", function(plate, vehicleDbData, garageId)
|
||||
return true
|
||||
end)
|
||||
|
||||
-- Check whether a vehicle can be transferred between players, return false to prevent
|
||||
---@param fromPlayerSrc integer
|
||||
---@param toPlayerSrc integer
|
||||
---@param plate string
|
||||
---@return boolean allowTransfer
|
||||
lib.callback.register("jg-advancedgarages:client:transfer-vehicle-verification", function(fromPlayerSrc, toPlayerSrc, plate)
|
||||
return true
|
||||
end)
|
||||
|
||||
-- Check whether a vehicle can be transferred between garages, return false to prevent
|
||||
---@param currentGarageId string
|
||||
---@param fromGarageId string
|
||||
---@param toGarageId string
|
||||
---@param plate string
|
||||
---@return boolean allowTransfer
|
||||
lib.callback.register("jg-advancedgarages:client:transfer-garage-verification", function(currentGarageId, fromGarageId, toGarageId, plate)
|
||||
return true
|
||||
end)
|
|
@ -0,0 +1 @@
|
|||
-- Add your own server code in here for custom functionality
|
669
resources/[carscripts]/jg-advancedgarages/config/config.lua
Normal file
669
resources/[carscripts]/jg-advancedgarages/config/config.lua
Normal file
|
@ -0,0 +1,669 @@
|
|||
-- Generated with https://configurator.jgscripts.com at 8/6/2025, 1:32:52 PM
|
||||
|
||||
Config = {}
|
||||
Config.Locale = 'de'
|
||||
Config.NumberAndDateFormat = 'en-US'
|
||||
Config.Currency = 'USD'
|
||||
Config.Framework = 'QBCore'
|
||||
Config.FuelSystem = 'none'
|
||||
Config.VehicleKeys = 'qb-vehiclekeys'
|
||||
Config.Notifications = 'ox_lib'
|
||||
Config.DrawText = 'jg-textui'
|
||||
Config.OpenGarageKeyBind = 38
|
||||
Config.OpenGaragePrompt = '[E] Open Garage'
|
||||
Config.OpenImpoundKeyBind = 38
|
||||
Config.OpenImpoundPrompt = '[E] Open Impound'
|
||||
Config.InsertVehicleKeyBind = 38
|
||||
Config.InsertVehiclePrompt = '[E] Store Vehicle'
|
||||
Config.ExitInteriorKeyBind = 38
|
||||
Config.ExitInteriorPrompt = '[E] Exit Garage'
|
||||
Config.UseTarget = true
|
||||
Config.TargetPed = 's_m_y_valet_01'
|
||||
Config.Target = 'ox_target'
|
||||
Config.UseRadialMenu = false
|
||||
Config.RadialMenu = 'ox_lib'
|
||||
Config.ShowVehicleImages = false
|
||||
Config.DoNotSpawnInsideVehicle = false
|
||||
Config.SaveVehicleDamage = true
|
||||
Config.AdvancedVehicleDamage = true
|
||||
Config.SaveVehiclePropsOnInsert = true
|
||||
Config.SpawnVehiclesWithServerSetter = false
|
||||
Config.TransferHidePlayerNames = false
|
||||
Config.GarageVehicleTransferCost = 0
|
||||
Config.EnableTransfers = {
|
||||
betweenGarages = false,
|
||||
betweenPlayers = true,
|
||||
}
|
||||
Config.AllowInfiniteVehicleSpawns = false
|
||||
Config.JobGaragesAllowInfiniteVehicleSpawns = false
|
||||
Config.GangGaragesAllowInfiniteVehicleSpawns = false
|
||||
Config.GarageVehicleReturnCost = 0
|
||||
Config.GarageVehicleReturnCostSocietyFund = false
|
||||
Config.GarageShowBlips = true
|
||||
Config.GarageUniqueBlips = false
|
||||
Config.GarageUniqueLocations = true
|
||||
Config.GarageEnableInteriors = true
|
||||
Config.GarageLocations = {
|
||||
['Legion Square'] = {
|
||||
coords = vector3(215.09, -805.17, 30.81),
|
||||
spawn = vector4(212.42, -798.77, 30.88, 336.61),
|
||||
distance = 15,
|
||||
type = 'car',
|
||||
hideBlip = false,
|
||||
blip = {
|
||||
id = 357,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
['Islington South'] = {
|
||||
coords = vector3(273.0, -343.85, 44.91),
|
||||
spawn = vector4(270.75, -340.51, 44.92, 342.03),
|
||||
distance = 15,
|
||||
type = 'car',
|
||||
hideBlip = false,
|
||||
blip = {
|
||||
id = 357,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
['Grove Street'] = {
|
||||
coords = vector3(14.66, -1728.52, 29.3),
|
||||
spawn = vector4(23.93, -1722.9, 29.3, 310.58),
|
||||
distance = 15,
|
||||
type = 'car',
|
||||
hideBlip = false,
|
||||
blip = {
|
||||
id = 357,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
['Mirror Park'] = {
|
||||
coords = vector3(1032.84, -765.1, 58.18),
|
||||
spawn = vector4(1023.2, -764.27, 57.96, 319.66),
|
||||
distance = 15,
|
||||
type = 'car',
|
||||
hideBlip = false,
|
||||
blip = {
|
||||
id = 357,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
Beach = {
|
||||
coords = vector3(-1248.69, -1425.71, 4.32),
|
||||
spawn = vector4(-1244.27, -1422.08, 4.32, 37.12),
|
||||
distance = 15,
|
||||
type = 'car',
|
||||
hideBlip = false,
|
||||
blip = {
|
||||
id = 357,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
['Great Ocean Highway'] = {
|
||||
coords = vector3(-2961.58, 375.93, 15.02),
|
||||
spawn = vector4(-2964.96, 372.07, 14.78, 86.07),
|
||||
distance = 15,
|
||||
type = 'car',
|
||||
hideBlip = false,
|
||||
blip = {
|
||||
id = 357,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
['Sandy South'] = {
|
||||
coords = vector3(217.33, 2605.65, 46.04),
|
||||
spawn = vector4(216.94, 2608.44, 46.33, 14.07),
|
||||
distance = 15,
|
||||
type = 'car',
|
||||
hideBlip = false,
|
||||
blip = {
|
||||
id = 357,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
['Sandy North'] = {
|
||||
coords = vector3(1878.44, 3760.1, 32.94),
|
||||
spawn = vector4(1880.14, 3757.73, 32.93, 215.54),
|
||||
distance = 15,
|
||||
type = 'car',
|
||||
hideBlip = false,
|
||||
blip = {
|
||||
id = 357,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
['North Vinewood Blvd'] = {
|
||||
coords = vector3(365.21, 295.65, 103.46),
|
||||
spawn = vector4(364.84, 289.73, 103.42, 164.23),
|
||||
distance = 15,
|
||||
type = 'car',
|
||||
hideBlip = false,
|
||||
blip = {
|
||||
id = 357,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
Grapeseed = {
|
||||
coords = vector3(1713.06, 4745.32, 41.96),
|
||||
spawn = vector4(1710.64, 4746.94, 41.95, 90.11),
|
||||
distance = 15,
|
||||
type = 'car',
|
||||
hideBlip = false,
|
||||
blip = {
|
||||
id = 357,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
['Paleto Bay'] = {
|
||||
coords = vector3(107.32, 6611.77, 31.98),
|
||||
spawn = vector4(110.84, 6607.82, 31.86, 265.28),
|
||||
distance = 15,
|
||||
type = 'car',
|
||||
hideBlip = false,
|
||||
blip = {
|
||||
id = 357,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
Boats = {
|
||||
coords = vector3(-795.15, -1510.79, 1.6),
|
||||
spawn = vector4(-798.66, -1507.73, -0.47, 102.23),
|
||||
distance = 20,
|
||||
type = 'sea',
|
||||
hideBlip = false,
|
||||
blip = {
|
||||
id = 410,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
Hangar = {
|
||||
coords = vector3(-1243.49, -3391.88, 13.94),
|
||||
spawn = vector4(-1258.4, -3394.56, 13.94, 328.23),
|
||||
distance = 20,
|
||||
type = 'air',
|
||||
hideBlip = false,
|
||||
blip = {
|
||||
id = 423,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
}
|
||||
Config.PrivGarageCreateCommand = 'privategarages'
|
||||
Config.PrivGarageCreateJobRestriction = {
|
||||
'realestate',
|
||||
}
|
||||
Config.PrivGarageEnableInteriors = true
|
||||
Config.PrivGarageHideBlips = false
|
||||
Config.PrivGarageBlip = {
|
||||
id = 357,
|
||||
color = 0,
|
||||
scale = 0.7,
|
||||
}
|
||||
Config.JobGarageShowBlips = true
|
||||
Config.JobGarageUniqueBlips = false
|
||||
Config.JobGarageSetVehicleCommand = 'setjobvehicle'
|
||||
Config.JobGarageRemoveVehicleCommand = 'removejobvehicle'
|
||||
Config.JobGarageUniqueLocations = true
|
||||
Config.JobGarageEnableInteriors = true
|
||||
Config.JobGarageLocations = {
|
||||
Mechanic = {
|
||||
coords = vector3(157.86, -3005.9, 7.03),
|
||||
spawn = vector4(165.26, -3014.94, 5.9, 268.8),
|
||||
distance = 15,
|
||||
job = {
|
||||
'mechanic',
|
||||
},
|
||||
type = 'car',
|
||||
vehiclesType = 'owned',
|
||||
blip = {
|
||||
id = 357,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideBlip = false,
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
Police = {
|
||||
coords = vector3(434.48, -1016.97, 28.83),
|
||||
spawn = {
|
||||
vector4(434.55, -1014.54, 28.49, 91.56),
|
||||
},
|
||||
distance = 15,
|
||||
type = 'car',
|
||||
job = {
|
||||
'police',
|
||||
},
|
||||
hideBlip = false,
|
||||
vehiclesType = 'personal',
|
||||
vehicles = {
|
||||
{
|
||||
model = 'police',
|
||||
plate = 'PD',
|
||||
minJobGrade = 0,
|
||||
},
|
||||
{
|
||||
model = 'police2',
|
||||
plate = false,
|
||||
minJobGrade = 3,
|
||||
},
|
||||
},
|
||||
blip = {
|
||||
id = 357,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
showLiveriesExtrasMenu = true,
|
||||
},
|
||||
}
|
||||
Config.GangGarageShowBlips = true
|
||||
Config.GangGarageUniqueBlips = false
|
||||
Config.GangGarageSetVehicleCommand = 'setgangvehicle'
|
||||
Config.GangGarageRemoveVehicleCommand = 'removegangvehicle'
|
||||
Config.GangGarageUniqueLocations = true
|
||||
Config.GangGarageEnableInteriors = true
|
||||
Config.GangGarageLocations = {}
|
||||
Config.ImpoundCommand = 'iv'
|
||||
Config.ImpoundFeesSocietyFund = false
|
||||
Config.ImpoundShowBlips = true
|
||||
Config.ImpoundUniqueBlips = false
|
||||
Config.ImpoundTimeOptions = {
|
||||
0,
|
||||
1,
|
||||
4,
|
||||
12,
|
||||
24,
|
||||
72,
|
||||
168,
|
||||
}
|
||||
Config.ImpoundLocations = {
|
||||
['Impound A'] = {
|
||||
coords = vector3(410.8, -1626.26, 29.29),
|
||||
spawn = vector4(408.44, -1630.88, 29.29, 136.88),
|
||||
distance = 15,
|
||||
type = 'car',
|
||||
job = {
|
||||
'police',
|
||||
},
|
||||
blip = {
|
||||
id = 68,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideBlip = false,
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
['Impound B'] = {
|
||||
coords = vector3(1649.71, 3789.61, 34.79),
|
||||
spawn = vector4(1643.66, 3798.36, 34.49, 216.16),
|
||||
distance = 15,
|
||||
type = 'car',
|
||||
job = {
|
||||
'police',
|
||||
},
|
||||
blip = {
|
||||
id = 68,
|
||||
color = 0,
|
||||
scale = 0.6,
|
||||
},
|
||||
hideBlip = false,
|
||||
hideMarkers = true,
|
||||
markers = {
|
||||
id = 21,
|
||||
size = {
|
||||
x = 0.3,
|
||||
y = 0.3,
|
||||
z = 0.3,
|
||||
},
|
||||
color = {
|
||||
r = 255,
|
||||
g = 255,
|
||||
b = 255,
|
||||
a = 120,
|
||||
},
|
||||
bobUpAndDown = 0,
|
||||
faceCamera = 0,
|
||||
rotate = 1,
|
||||
drawOnEnts = 0,
|
||||
},
|
||||
},
|
||||
}
|
||||
Config.GarageInteriorEntrance = vector4(227.96, -1003.06, -99.0, 358.0)
|
||||
Config.GarageInteriorVehiclePositions = {
|
||||
vec4(233.000000, -984.000000, -99.410004, 118.000000),
|
||||
vec4(233.000000, -988.500000, -99.410004, 118.000000),
|
||||
vec4(233.000000, -993.000000, -99.410004, 118.000000),
|
||||
vec4(233.000000, -997.500000, -99.410004, 118.000000),
|
||||
vec4(233.000000, -1002.000000, -99.410004, 118.000000),
|
||||
vec4(223.600006, -979.000000, -99.410004, 235.199997),
|
||||
vec4(223.600006, -983.599976, -99.410004, 235.199997),
|
||||
vec4(223.600006, -988.200012, -99.410004, 235.199997),
|
||||
vec4(223.600006, -992.799988, -99.410004, 235.199997),
|
||||
vec4(223.600006, -997.400024, -99.410004, 235.199997),
|
||||
vec4(223.600006, -1002.000000, -99.410004, 235.199997),
|
||||
}
|
||||
Config.ChangeVehiclePlate = 'vplate'
|
||||
Config.DeleteVehicleFromDB = 'dvdb'
|
||||
Config.ReturnVehicleToGarage = 'vreturn'
|
||||
Config.VehicleLabels = {
|
||||
spawnName = 'Pretty Vehicle Label',
|
||||
}
|
||||
Config.PlayerTransferBlacklist = {
|
||||
'spawnName',
|
||||
}
|
||||
Config.ReturnToPreviousRoutingBucket = false
|
||||
Config.__v3Config = true
|
|
@ -0,0 +1,535 @@
|
|||
---@param text string
|
||||
function Framework.Client.ShowTextUI(text)
|
||||
if (Config.DrawText == "auto" and GetResourceState("jg-textui") == "started") or Config.DrawText == "jg-textui" then
|
||||
exports["jg-textui"]:DrawText(text)
|
||||
elseif (Config.DrawText == "auto" and GetResourceState("ox_lib") == "started") or Config.DrawText == "ox_lib" then
|
||||
exports["ox_lib"]:showTextUI(text, {
|
||||
position = "left-center"
|
||||
})
|
||||
elseif (Config.DrawText == "auto" and GetResourceState("okokTextUI") == "started") or Config.DrawText == "okokTextUI" then
|
||||
exports["okokTextUI"]:Open(text, "lightblue", "left")
|
||||
elseif (Config.DrawText == "auto" and GetResourceState("ps-ui") == "started") or Config.DrawText == "ps-ui" then
|
||||
exports["ps-ui"]:DisplayText(text, "primary")
|
||||
elseif Config.Framework == "QBCore" then
|
||||
exports["qb-core"]:DrawText(text)
|
||||
else
|
||||
error("You do not have a TextUI system set up!")
|
||||
end
|
||||
end
|
||||
|
||||
function Framework.Client.HideTextUI()
|
||||
if (Config.DrawText == "auto" and GetResourceState("jg-textui") == "started") or Config.DrawText == "jg-textui" then
|
||||
exports["jg-textui"]:HideText()
|
||||
elseif (Config.DrawText == "auto" and GetResourceState("ox_lib") == "started") or Config.DrawText == "ox_lib" then
|
||||
exports["ox_lib"]:hideTextUI()
|
||||
elseif (Config.DrawText == "auto" and GetResourceState("okokTextUI") == "started") or Config.DrawText == "okokTextUI" then
|
||||
exports["okokTextUI"]:Close()
|
||||
elseif (Config.DrawText == "auto" and GetResourceState("ps-ui") == "started") or Config.DrawText == "ps-ui" then
|
||||
exports["ps-ui"]:HideText()
|
||||
elseif Config.Framework == "QBCore" then
|
||||
exports["qb-core"]:HideText()
|
||||
else
|
||||
error("You do not have a TextUI system set up!")
|
||||
end
|
||||
end
|
||||
|
||||
---@param garageId string
|
||||
---@param text string
|
||||
---@param onSelect function
|
||||
function Framework.Client.RadialMenuAdd(garageId, text, onSelect)
|
||||
if not Config.UseRadialMenu then return end
|
||||
|
||||
if (Config.RadialMenu == "auto" and GetResourceState("ox_lib") == "started") or Config.RadialMenu == "ox_lib" then
|
||||
lib.addRadialItem({
|
||||
id = garageId,
|
||||
icon = "warehouse",
|
||||
label = text,
|
||||
onSelect = onSelect
|
||||
})
|
||||
else
|
||||
error("You do not have a radial menu system set up!")
|
||||
end
|
||||
end
|
||||
|
||||
---@param garageId string
|
||||
function Framework.Client.RadialMenuRemove(garageId)
|
||||
if not Config.UseRadialMenu then return end
|
||||
|
||||
if (Config.RadialMenu == "auto" and GetResourceState("ox_lib") == "started") or Config.RadialMenu == "ox_lib" then
|
||||
lib.removeRadialItem(garageId)
|
||||
else
|
||||
error("You do not have a radial menu system set up!")
|
||||
end
|
||||
end
|
||||
|
||||
---@param entity? integer|false
|
||||
---@param coords vector4|vector3
|
||||
---@param garageId string
|
||||
---@param vehicleType "car"|"air"|"sea"
|
||||
---@param garageType "personal"|"job"|"gang"|"impound"
|
||||
---@return integer
|
||||
function Framework.Client.RegisterTarget(entity, coords, garageId, vehicleType, garageType)
|
||||
if not entity then
|
||||
entity = createPedForTarget(coords)
|
||||
end
|
||||
|
||||
if (Config.Target == "auto" and GetResourceState("ox_target") == "started") or Config.Target == "ox_target" then
|
||||
exports.ox_target:addLocalEntity(entity, {
|
||||
{
|
||||
label = garageType == "impound" and Config.OpenImpoundPrompt or Config.OpenGaragePrompt,
|
||||
icon = "warehouse",
|
||||
onSelect = function()
|
||||
TriggerEvent("jg-advancedgarages:client:open-garage", garageId, vehicleType, false)
|
||||
end
|
||||
},
|
||||
garageType ~= "impound" and {
|
||||
label = Config.InsertVehiclePrompt,
|
||||
icon = "warehouse",
|
||||
onSelect = function()
|
||||
TriggerEvent("jg-advancedgarages:client:store-vehicle", garageId, vehicleType, false)
|
||||
end
|
||||
} or nil
|
||||
})
|
||||
elseif (Config.Target == "auto" and GetResourceState("qb-target") == "started") or Config.Target == "qb-target" then
|
||||
exports["qb-target"]:AddTargetEntity(entity, {
|
||||
options = {
|
||||
{
|
||||
label = garageType == "impound" and Config.OpenImpoundPrompt or Config.OpenGaragePrompt,
|
||||
targeticon = "fas fa-warehouse",
|
||||
action = function()
|
||||
TriggerEvent("jg-advancedgarages:client:open-garage", garageId, vehicleType, false)
|
||||
end
|
||||
},
|
||||
garageType ~= "impound" and {
|
||||
label = Config.InsertVehiclePrompt,
|
||||
targeticon = "fas fa-warehouse",
|
||||
action = function()
|
||||
TriggerEvent("jg-advancedgarages:client:store-vehicle", garageId, vehicleType, false)
|
||||
end
|
||||
} or nil
|
||||
},
|
||||
distance = 10.0
|
||||
})
|
||||
else
|
||||
error("You do not have a target system set up!")
|
||||
end
|
||||
|
||||
return entity
|
||||
end
|
||||
|
||||
---@param entity integer
|
||||
function Framework.Client.RemoveTarget(entity)
|
||||
if not entity then return end
|
||||
|
||||
DeleteEntity(entity)
|
||||
|
||||
if (Config.Target == "auto" and GetResourceState("ox_target") == "started") or Config.Target == "ox_target" then
|
||||
exports.ox_target:removeLocalEntity(entity)
|
||||
elseif (Config.Target == "auto" and GetResourceState("qb-target") == "started") or Config.Target == "qb-target" then
|
||||
exports["qb-target"]:RemoveTargetEntity(entity)
|
||||
else
|
||||
error("You do not have a target system set up!")
|
||||
end
|
||||
end
|
||||
|
||||
---@param msg string
|
||||
---@param type? "success" | "warning" | "error"
|
||||
---@param time? number
|
||||
function Framework.Client.Notify(msg, type, time)
|
||||
type = type or "success"
|
||||
time = time or 5000
|
||||
|
||||
if (Config.Notifications == "auto" and GetResourceState("okokNotify") == "started") or Config.Notifications == "okokNotify" then
|
||||
exports["okokNotify"]:Alert("Garages", msg, time, type)
|
||||
elseif (Config.Notifications == "auto" and GetResourceState("ps-ui") == "started") or Config.Notifications == "ps-ui" then
|
||||
exports["ps-ui"]:Notify(msg, type, time)
|
||||
elseif (Config.Notifications == "auto" and GetResourceState("ox_lib") == "started") or Config.Notifications == "ox_lib" then
|
||||
exports["ox_lib"]:notify({
|
||||
title = "Garages",
|
||||
description = msg,
|
||||
type = type
|
||||
})
|
||||
else
|
||||
if Config.Framework == "QBCore" then
|
||||
return QBCore.Functions.Notify(msg, type, time)
|
||||
elseif Config.Framework == "Qbox" then
|
||||
exports.qbx_core:Notify(msg, type, time)
|
||||
elseif Config.Framework == "ESX" then
|
||||
return ESX.ShowNotification(msg, type)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
RegisterNetEvent("jg-advancedgarages:client:notify", function(...)
|
||||
Framework.Client.Notify(...)
|
||||
end)
|
||||
|
||||
--
|
||||
-- Player Functions
|
||||
--
|
||||
|
||||
---@return table | false playerData
|
||||
function Framework.Client.GetPlayerData()
|
||||
if Config.Framework == "QBCore" then
|
||||
return QBCore.Functions.GetPlayerData()
|
||||
elseif Config.Framework == "Qbox" then
|
||||
return exports.qbx_core:GetPlayerData()
|
||||
elseif Config.Framework == "ESX" then
|
||||
return ESX.GetPlayerData()
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
---@return string | false identifier
|
||||
function Framework.Client.GetPlayerIdentifier()
|
||||
local playerData = Framework.Client.GetPlayerData()
|
||||
if not playerData then return false end
|
||||
|
||||
if Config.Framework == "QBCore" or Config.Framework == "Qbox" then
|
||||
return playerData.citizenid
|
||||
elseif Config.Framework == "ESX" then
|
||||
return playerData.identifier
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
---@param type "cash" | "bank" | "money"
|
||||
function Framework.Client.GetBalance(type)
|
||||
if Config.Framework == "QBCore" then
|
||||
return QBCore.Functions.GetPlayerData().money[type]
|
||||
elseif Config.Framework == "Qbox" then
|
||||
return exports.qbx_core:GetPlayerData().money[type]
|
||||
elseif Config.Framework == "ESX" then
|
||||
if type == "cash" then type = "money" end
|
||||
|
||||
for i, acc in pairs(ESX.GetPlayerData().accounts) do
|
||||
if acc.name == type then
|
||||
return acc.money
|
||||
end
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
---@return {name: string, grade: number} | false job
|
||||
function Framework.Client.GetPlayerJob()
|
||||
local player = Framework.Client.GetPlayerData()
|
||||
if not player or not player.job then return {} end
|
||||
|
||||
if Config.Framework == "QBCore" or Config.Framework == "Qbox" then
|
||||
return {
|
||||
name = player.job.name,
|
||||
label = player.job.label,
|
||||
grade = player.job.grade.level
|
||||
}
|
||||
elseif Config.Framework == "ESX" then
|
||||
return {
|
||||
name = player.job.name,
|
||||
label = player.job.label,
|
||||
grade = player.job.grade
|
||||
}
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
---@return {name: string, grade: number} | false gang
|
||||
function Framework.Client.GetPlayerGang()
|
||||
if (Config.Gangs == "auto" and GetResourceState("rcore_gangs") == "started") or Config.Gangs == "rcore_gangs" then
|
||||
local gang = exports.rcore_gangs:GetPlayerGang()
|
||||
if not gang then return {} end
|
||||
|
||||
return {
|
||||
name = gang.name,
|
||||
label = gang.name,
|
||||
grade = 0 -- rcore_gangs' grade system are only strings
|
||||
}
|
||||
elseif (Config.Gangs == "auto" and GetResourceState("qb-gangs") == "started") or Config.Gangs == "qb-gangs" or Config.Framework == "QBCore" or Config.Framework == "Qbox" then
|
||||
local player = Framework.Client.GetPlayerData()
|
||||
if not player or not player.gang then return {} end
|
||||
|
||||
return {
|
||||
name = player.gang.name,
|
||||
label = player.gang.label,
|
||||
grade = player.gang.grade.level
|
||||
}
|
||||
elseif Config.Framework == "ESX" then
|
||||
-- To implement gangs in ESX, enable Config.GangEnableCustomESXIntegration & then add the necessary exports here.
|
||||
-- It must return the same data structure as QB/X above, with { name, label, grade }
|
||||
-- Heads up, you must also add the exports to sv-functions.lua -> Framework.Server.GetPlayerGang
|
||||
error("ESX does not natively support gangs.");
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
---@return boolean dead
|
||||
function Framework.Client.IsPlayerDead()
|
||||
if Config.Framework == "QBCore" or Config.Framework == "Qbox" then
|
||||
local player = Framework.Client.GetPlayerData()
|
||||
if not player then return false end
|
||||
|
||||
if player.metadata.isdead or player.metadata.inlaststand then
|
||||
return true
|
||||
end
|
||||
elseif Config.Framework == "ESX" then
|
||||
return IsEntityDead(cache.ped)
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
--
|
||||
-- Vehicle Functions
|
||||
--
|
||||
|
||||
---@param vehicle integer
|
||||
---@return number fuelLevel
|
||||
function Framework.Client.VehicleGetFuel(vehicle)
|
||||
if not DoesEntityExist(vehicle) then return 0 end
|
||||
|
||||
if (Config.FuelSystem == "LegacyFuel" or Config.FuelSystem == "ps-fuel" or Config.FuelSystem == "lj-fuel" or Config.FuelSystem == "cdn-fuel" or Config.FuelSystem == "hyon_gas_station" or Config.FuelSystem == "okokGasStation" or Config.FuelSystem == "nd_fuel" or Config.FuelSystem == "myFuel") then
|
||||
return exports[Config.FuelSystem]:GetFuel(vehicle)
|
||||
elseif Config.FuelSystem == "ti_fuel" then
|
||||
local level, type = exports["ti_fuel"]:getFuel(vehicle)
|
||||
TriggerServerEvent("jg-advancedgarages:server:save-ti-fuel-type", Framework.Client.GetPlate(vehicle), type)
|
||||
return level
|
||||
elseif Config.FuelSystem == "ox_fuel" or Config.FuelSystem == "Renewed-Fuel" then
|
||||
return GetVehicleFuelLevel(vehicle)
|
||||
elseif Config.FuelSystem == "rcore_fuel" then
|
||||
return exports.rcore_fuel:GetVehicleFuelPercentage(vehicle)
|
||||
else
|
||||
return 65 -- or set up custom fuel system here...
|
||||
end
|
||||
end
|
||||
|
||||
---@param vehicle integer
|
||||
---@param fuel number
|
||||
function Framework.Client.VehicleSetFuel(vehicle, fuel)
|
||||
if not DoesEntityExist(vehicle) then return false end
|
||||
|
||||
if (Config.FuelSystem == "LegacyFuel" or Config.FuelSystem == "ps-fuel" or Config.FuelSystem == "lj-fuel" or Config.FuelSystem == "cdn-fuel" or Config.FuelSystem == "hyon_gas_station" or Config.FuelSystem == "okokGasStation" or Config.FuelSystem == "nd_fuel" or Config.FuelSystem == "myFuel" or Config.FuelSystem == "Renewed-Fuel") then
|
||||
exports[Config.FuelSystem]:SetFuel(vehicle, fuel)
|
||||
elseif Config.FuelSystem == "ti_fuel" then
|
||||
local fuelType = lib.callback.await("jg-advancedgarages:server:get-ti-fuel-type", false, Framework.Client.GetPlate(vehicle))
|
||||
exports["ti_fuel"]:setFuel(vehicle, fuel, fuelType or nil)
|
||||
elseif Config.FuelSystem == "ox_fuel" then
|
||||
Entity(vehicle).state.fuel = fuel
|
||||
elseif Config.FuelSystem == "rcore_fuel" then
|
||||
exports.rcore_fuel:SetVehicleFuel(vehicle, fuel)
|
||||
else
|
||||
-- Setup custom fuel system here
|
||||
end
|
||||
end
|
||||
|
||||
---@param plate string
|
||||
---@param vehicleEntity integer
|
||||
---@param origin "personal" | "job" | "gang"
|
||||
function Framework.Client.VehicleGiveKeys(plate, vehicleEntity, origin)
|
||||
if not DoesEntityExist(vehicleEntity) then return false end
|
||||
if not plate or plate == "" then
|
||||
print("^1[ERROR] No plate provided to VehicleGiveKeys function^0")
|
||||
return false
|
||||
end
|
||||
|
||||
plate = plate:upper()
|
||||
|
||||
if Config.VehicleKeys == "qb-vehiclekeys" then
|
||||
TriggerEvent("vehiclekeys:client:SetOwner", plate)
|
||||
elseif Config.VehicleKeys == "qbx_vehiclekeys" then
|
||||
TriggerEvent("vehiclekeys:client:SetOwner", plate)
|
||||
-- lib.callback.await("qbx_vehiclekeys:server:giveKeys", false, VehToNet(vehicleEntity))
|
||||
elseif Config.VehicleKeys == "jaksam-vehicles-keys" then
|
||||
TriggerServerEvent("vehicles_keys:selfGiveVehicleKeys", plate)
|
||||
elseif Config.VehicleKeys == "mk_vehiclekeys" then
|
||||
exports["mk_vehiclekeys"]:AddKey(vehicleEntity)
|
||||
elseif Config.VehicleKeys == "qs-vehiclekeys" then
|
||||
local model = GetDisplayNameFromVehicleModel(GetEntityModel(vehicleEntity))
|
||||
exports["qs-vehiclekeys"]:GiveKeys(plate, model)
|
||||
elseif Config.VehicleKeys == "wasabi_carlock" then
|
||||
exports.wasabi_carlock:GiveKey(plate)
|
||||
elseif Config.VehicleKeys == "cd_garage" then
|
||||
TriggerEvent("cd_garage:AddKeys", plate)
|
||||
elseif Config.VehicleKeys == "okokGarage" then
|
||||
TriggerServerEvent("okokGarage:GiveKeys", plate)
|
||||
elseif Config.VehicleKeys == "t1ger_keys" then
|
||||
if origin == "job" then
|
||||
local vehicleName = GetDisplayNameFromVehicleModel(GetEntityModel(vehicleEntity))
|
||||
exports['t1ger_keys']:GiveJobKeys(plate, vehicleName, true)
|
||||
else
|
||||
TriggerServerEvent("t1ger_keys:updateOwnedKeys", plate, true)
|
||||
end
|
||||
elseif Config.VehicleKeys == "MrNewbVehicleKeys" then
|
||||
exports.MrNewbVehicleKeys:GiveKeys(vehicleEntity)
|
||||
elseif Config.VehicleKeys == "Renewed" then
|
||||
exports["Renewed-Vehiclekeys"]:addKey(plate)
|
||||
elseif Config.VehicleKeys == "tgiann-hotwire" then
|
||||
exports["tgiann-hotwire"]:CheckKeyInIgnitionWhenSpawn(vehicleEntity, plate)
|
||||
else
|
||||
-- Setup custom key system here...
|
||||
end
|
||||
end
|
||||
|
||||
---@param plate string
|
||||
---@param vehicleEntity integer
|
||||
---@param origin "personal" | "job" | "gang"
|
||||
function Framework.Client.VehicleRemoveKeys(plate, vehicleEntity, origin)
|
||||
if not DoesEntityExist(vehicleEntity) then return false end
|
||||
if not plate or plate == "" then
|
||||
print("^1[ERROR] No plate provided to VehicleRemoveKeys function^0")
|
||||
return false
|
||||
end
|
||||
|
||||
plate = plate:upper()
|
||||
|
||||
if Config.VehicleKeys == "qs-vehiclekeys" then
|
||||
local model = GetDisplayNameFromVehicleModel(GetEntityModel(vehicleEntity))
|
||||
exports["qs-vehiclekeys"]:RemoveKeys(plate, model)
|
||||
elseif Config.VehicleKeys == "wasabi_carlock" then
|
||||
exports.wasabi_carlock:RemoveKey(plate)
|
||||
elseif Config.VehicleKeys == "t1ger_keys" then
|
||||
TriggerServerEvent("t1ger_keys:updateOwnedKeys", plate, false)
|
||||
elseif Config.VehicleKeys == "MrNewbVehicleKeys" then
|
||||
exports.MrNewbVehicleKeys:RemoveKeys(vehicleEntity)
|
||||
elseif Config.VehicleKeys == "Renewed" then
|
||||
exports["Renewed-Vehiclekeys"]:removeKey(plate)
|
||||
else
|
||||
-- Setup custom key system here...
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
---@param vehicle table
|
||||
---@return string|number|false model
|
||||
function Framework.Client.GetModelColumn(vehicle)
|
||||
if Config.Framework == "QBCore" or Config.Framework == "Qbox" then
|
||||
return vehicle.vehicle or tonumber(vehicle.hash) or false
|
||||
elseif Config.Framework == "ESX" then
|
||||
if not vehicle or not vehicle.vehicle then return false end
|
||||
|
||||
if type(vehicle.vehicle) == "string" then
|
||||
if not json.decode(vehicle.vehicle) then return false end
|
||||
return json.decode(vehicle.vehicle).model
|
||||
else
|
||||
return vehicle.vehicle.model
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
---@param vehicle integer
|
||||
---@return table | false
|
||||
function Framework.Client.GetModsColumn(vehicle)
|
||||
if Config.Framework == "QBCore" or Config.Framework == "Qbox" then
|
||||
if type(vehicle.mods) == "string" then
|
||||
return json.decode(vehicle.mods)
|
||||
else
|
||||
return vehicle.mods
|
||||
end
|
||||
elseif Config.Framework == "ESX" then
|
||||
if type(vehicle.vehicle) == "string" then
|
||||
return json.decode(vehicle.vehicle)
|
||||
else
|
||||
return vehicle.vehicle
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
---@param vehicle integer
|
||||
---@return table|false props
|
||||
function Framework.Client.GetVehicleProperties(vehicle)
|
||||
if GetResourceState("jg-mechanic") == "started" then
|
||||
return exports["jg-mechanic"]:getVehicleProperties(vehicle)
|
||||
else
|
||||
if Config.Framework == "QBCore" then
|
||||
return QBCore.Functions.GetVehicleProperties(vehicle)
|
||||
elseif Config.Framework == "Qbox" then
|
||||
return lib.getVehicleProperties(vehicle) or false
|
||||
elseif Config.Framework == "ESX" then
|
||||
return ESX.Game.GetVehicleProperties(vehicle)
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
---@param vehicle integer
|
||||
---@param props table
|
||||
function Framework.Client.SetVehicleProperties(vehicle, props)
|
||||
if GetResourceState("jg-mechanic") == "started" then
|
||||
return exports["jg-mechanic"]:setVehicleProperties(vehicle, props)
|
||||
else
|
||||
if Config.Framework == "QBCore" then
|
||||
return QBCore.Functions.SetVehicleProperties(vehicle, props)
|
||||
elseif Config.Framework == "Qbox" then
|
||||
return lib.setVehicleProperties(vehicle, props)
|
||||
elseif Config.Framework == "ESX" then
|
||||
return ESX.Game.SetVehicleProperties(vehicle, props)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---@param vehicle integer
|
||||
---@return string|false plate
|
||||
function Framework.Client.GetPlate(vehicle)
|
||||
local plate = GetVehicleNumberPlateText(vehicle)
|
||||
if not plate or plate == nil or plate == "" then return false end
|
||||
|
||||
if GetResourceState("brazzers-fakeplates") == "started" then
|
||||
local originalPlate = lib.callback.await("jg-advancedgarages:server:brazzers-get-plate-from-fakeplate", false, plate)
|
||||
if originalPlate then plate = originalPlate end
|
||||
end
|
||||
|
||||
local trPlate = string.gsub(plate, "^%s*(.-)%s*$", "%1")
|
||||
return trPlate
|
||||
end
|
||||
|
||||
-- Get a nice vehicle label from either QBCore shared or GTA natives
|
||||
---@param model string | number
|
||||
function Framework.Client.GetVehicleLabel(model)
|
||||
local hash = convertModelToHash(model)
|
||||
|
||||
if Config.VehicleLabels[model] then
|
||||
return Config.VehicleLabels[model]
|
||||
end
|
||||
|
||||
if Config.VehicleLabels[tostring(hash)] then
|
||||
return Config.VehicleLabels[tostring(hash)]
|
||||
end
|
||||
|
||||
if type(model) == "string" and Config.Framework == "QBCore" then
|
||||
local vehShared = QBCore.Shared.Vehicles?[model]
|
||||
if vehShared then
|
||||
return vehShared.brand .. " " .. vehShared.name
|
||||
end
|
||||
end
|
||||
|
||||
if Config.Framework == "Qbox" then
|
||||
local vehShared = exports.qbx_core:GetVehiclesByHash()?[hash]
|
||||
if vehShared then
|
||||
return vehShared.brand .. " " .. vehShared.name
|
||||
end
|
||||
end
|
||||
|
||||
local makeName = GetMakeNameFromVehicleModel(hash)
|
||||
local modelName = GetDisplayNameFromVehicleModel(hash)
|
||||
local label = GetLabelText(makeName) .. " " .. GetLabelText(modelName)
|
||||
|
||||
if makeName == "CARNOTFOUND" or modelName == "CARNOTFOUND" then
|
||||
label = tostring(model)
|
||||
else
|
||||
if GetLabelText(modelName) == "NULL" and GetLabelText(makeName) == "NULL" then
|
||||
label = (makeName or "") .. " " .. (modelName or "")
|
||||
elseif GetLabelText(makeName) == "NULL" then
|
||||
label = GetLabelText(modelName)
|
||||
end
|
||||
end
|
||||
|
||||
return label
|
||||
end
|
|
@ -0,0 +1,37 @@
|
|||
if (Config.Framework == "auto" and GetResourceState("es_extended") == "started") or Config.Framework == "ESX" then
|
||||
-- Player data
|
||||
Globals.PlayerData = ESX.GetPlayerData()
|
||||
|
||||
RegisterNetEvent("esx:playerLoaded")
|
||||
AddEventHandler("esx:playerLoaded", function(xPlayer)
|
||||
Globals.PlayerData = xPlayer
|
||||
TriggerEvent("jg-advancedgarages:client:update-blips-text-uis")
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:setJob")
|
||||
AddEventHandler("esx:setJob", function(job)
|
||||
Globals.PlayerData.job = job
|
||||
TriggerEvent("jg-advancedgarages:client:update-blips-text-uis")
|
||||
end)
|
||||
|
||||
-- ESX admincar replacement
|
||||
RegisterNetEvent("jg-advancedgarages:client:set-vehicle-owned", function()
|
||||
local vehicle = cache.vehicle
|
||||
local vehicleProps = Framework.Client.GetVehicleProperties(vehicle)
|
||||
if not vehicleProps then return end
|
||||
|
||||
if not vehicle or vehicle == 0 then
|
||||
return Framework.Client.Notify(Locale.notInsideVehicleError, "error")
|
||||
end
|
||||
|
||||
local plate = vehicleProps.plate
|
||||
|
||||
local vehicleModel = GetEntityArchetypeName(vehicle)
|
||||
local veh = lib.callback.await("jg-advancedgarages:server:get-vehicle", false, vehicleModel, plate)
|
||||
if veh then
|
||||
return Framework.Client.Notify(Locale.vehiclePlateExistsError, "error")
|
||||
end
|
||||
|
||||
TriggerServerEvent("jg-advancedgarages:server:set-vehicle-owned", vehicleProps)
|
||||
end)
|
||||
end
|
|
@ -0,0 +1,23 @@
|
|||
if (Config.Framework == "auto" and GetResourceState("es_extended") == "started") or Config.Framework == "ESX" then
|
||||
-- /admincar db insert
|
||||
RegisterNetEvent("jg-advancedgarages:server:set-vehicle-owned", function(vehicleProps)
|
||||
local src = source
|
||||
|
||||
if not Framework.Server.IsAdmin(src) then
|
||||
return Framework.Server.Notify(src, "INSUFFICIENT_PERMISSIONS", "error")
|
||||
end
|
||||
|
||||
local player = ESX.GetPlayerFromId(src)
|
||||
|
||||
MySQL.insert.await("INSERT INTO owned_vehicles (owner, plate, vehicle) VALUES (?, ?, ?)", {
|
||||
player.identifier, vehicleProps.plate, json.encode(vehicleProps)
|
||||
})
|
||||
|
||||
Framework.Server.Notify(src, string.gsub(Locale.vehicleReceived, "%%{value}", vehicleProps.plate))
|
||||
end)
|
||||
|
||||
-- /admincar command
|
||||
ESX.RegisterCommand("admincar", "admin", function(xPlayer)
|
||||
TriggerClientEvent("jg-advancedgarages:client:set-vehicle-owned", xPlayer.source)
|
||||
end, false)
|
||||
end
|
61
resources/[carscripts]/jg-advancedgarages/framework/main.lua
Normal file
61
resources/[carscripts]/jg-advancedgarages/framework/main.lua
Normal file
|
@ -0,0 +1,61 @@
|
|||
QBCore, ESX = nil, nil
|
||||
Framework = {
|
||||
Client = {},
|
||||
Server = {},
|
||||
Queries = {
|
||||
GetVehicles = "SELECT * FROM %s WHERE %s = ? AND job_vehicle = 0 AND gang_vehicle = 0",
|
||||
GetJobVehicles = "SELECT * FROM %s WHERE %s = ? AND job_vehicle = 1 AND job_vehicle_rank <= ?",
|
||||
GetGangVehicles = "SELECT * FROM %s WHERE %s = ? AND gang_vehicle = 1 AND gang_vehicle_rank <= ?",
|
||||
GetImpoundVehiclesWhitelist = "SELECT * FROM %s WHERE garage_id = ? AND impound = 1",
|
||||
GetImpoundVehiclesPublic = "SELECT * FROM %s WHERE garage_id = ? AND impound = 1 AND impound_retrievable = 1 AND (%s = ? OR %s = ? OR %s = ?)",
|
||||
GetVehicle = "SELECT * FROM %s WHERE %s = ? AND plate = ?",
|
||||
GetVehicleNoIdentifier = "SELECT * FROM %s WHERE plate = ?",
|
||||
GetVehiclePlateOnly = "SELECT plate FROM %s WHERE plate = ?",
|
||||
GetPrivateGarages = "SELECT * FROM player_priv_garages WHERE owners LIKE ?",
|
||||
StoreVehicle = "UPDATE %s SET in_garage = 1, garage_id = ?, fuel = ?, body = ?, engine = ?, damage = ? WHERE %s IN (?) AND plate = ?",
|
||||
SetInGarage = "UPDATE %s SET in_garage = 1 WHERE plate = ?",
|
||||
UpdateProps = "UPDATE %s SET %s = ? WHERE plate = ?",
|
||||
VehicleDriveOut = "UPDATE %s SET in_garage = 0 WHERE %s = ? AND plate = ?",
|
||||
UpdateGarageId = "UPDATE %s SET garage_id = ? WHERE %s = ? AND plate = ?",
|
||||
UpdatePlayerId = "UPDATE %s SET %s = ? WHERE %s = ? AND plate = ?",
|
||||
UpdateVehicleNickname = "UPDATE %s SET nickname = ? WHERE %s = ? AND plate = ?",
|
||||
UpdateVehiclePlate = "UPDATE %s SET plate = ?, %s = ? WHERE plate = ?",
|
||||
ImpoundVehicle = "UPDATE %s SET impound = 1, impound_retrievable = ?, impound_data = ?, garage_id = ?, fuel = ?, body = ?, engine = ?, damage = ? WHERE plate = ?",
|
||||
ImpoundReturnToGarage = "UPDATE %s SET impound = 0, impound_data = '', garage_id = ?, in_garage = ? WHERE plate = ?",
|
||||
SetJobVehicle = "UPDATE %s SET %s = ?, job_vehicle = 1, job_vehicle_rank = ? WHERE plate = ?",
|
||||
SetGangVehicle = "UPDATE %s SET %s = ?, gang_vehicle = 1, gang_vehicle_rank = ? WHERE plate = ?",
|
||||
SetSocietyVehicleAsPlayerOwned = "UPDATE %s SET %s = ?, job_vehicle = 0, gang_vehicle = 0 WHERE plate = ?",
|
||||
DeleteVehicle = "DELETE FROM %s WHERE plate = ?",
|
||||
}
|
||||
}
|
||||
|
||||
if (Config.Framework == "auto" and GetResourceState("qbx_core") == "started") or Config.Framework == "Qbox" then
|
||||
Config.Framework = "Qbox"
|
||||
|
||||
Framework.VehiclesTable = "player_vehicles"
|
||||
Framework.PlayerIdentifier = "citizenid"
|
||||
Framework.VehProps = "mods"
|
||||
Framework.PlayersTable = "players"
|
||||
Framework.PlayersTableId = "citizenid"
|
||||
elseif (Config.Framework == "auto" and GetResourceState("qb-core") == "started") or Config.Framework == "QBCore" then
|
||||
QBCore = exports['qb-core']:GetCoreObject()
|
||||
Config.Framework = "QBCore"
|
||||
|
||||
Framework.VehiclesTable = "player_vehicles"
|
||||
Framework.PlayerIdentifier = "citizenid"
|
||||
Framework.VehProps = "mods"
|
||||
Framework.PlayersTable = "players"
|
||||
Framework.PlayersTableId = "citizenid"
|
||||
|
||||
elseif (Config.Framework == "auto" and GetResourceState("es_extended") == "started") or Config.Framework == "ESX" then
|
||||
ESX = exports["es_extended"]:getSharedObject()
|
||||
Config.Framework = "ESX"
|
||||
|
||||
Framework.VehiclesTable = "owned_vehicles"
|
||||
Framework.PlayerIdentifier = "owner"
|
||||
Framework.VehProps = "vehicle"
|
||||
Framework.PlayersTable = "users"
|
||||
Framework.PlayersTableId = "identifier"
|
||||
else
|
||||
error("You need to set the Config.Framework to either \"QBCore\" or \"ESX\" or \"Qbox\"!")
|
||||
end
|
|
@ -0,0 +1,22 @@
|
|||
if (Config.Framework == "auto" and GetResourceState("qb-core") == "started") or Config.Framework == "QBCore" then
|
||||
-- Player data
|
||||
Globals.PlayerData = QBCore.Functions.GetPlayerData()
|
||||
|
||||
RegisterNetEvent("QBCore:Client:OnPlayerLoaded")
|
||||
AddEventHandler("QBCore:Client:OnPlayerLoaded", function()
|
||||
Globals.PlayerData = QBCore.Functions.GetPlayerData()
|
||||
TriggerEvent("jg-advancedgarages:client:update-blips-text-uis")
|
||||
end)
|
||||
|
||||
RegisterNetEvent("QBCore:Client:OnJobUpdate")
|
||||
AddEventHandler("QBCore:Client:OnJobUpdate", function(job)
|
||||
Globals.PlayerData.job = job
|
||||
TriggerEvent("jg-advancedgarages:client:update-blips-text-uis")
|
||||
end)
|
||||
|
||||
RegisterNetEvent("QBCore:Client:OnGangUpdate")
|
||||
AddEventHandler("QBCore:Client:OnGangUpdate", function(gang)
|
||||
Globals.PlayerData.gang = gang
|
||||
TriggerEvent("jg-advancedgarages:client:update-blips-text-uis")
|
||||
end)
|
||||
end
|
|
@ -0,0 +1,55 @@
|
|||
if (Config.Framework == "auto" and GetResourceState("qb-core") == "started") or Config.Framework == "QBCore" then
|
||||
-- qb-phone fix
|
||||
QBCore.Functions.CreateCallback("jg-advancedgarages:server:GetVehiclesPhone", function(source, cb)
|
||||
local Player = QBCore.Functions.GetPlayer(source)
|
||||
|
||||
local vehicles = MySQL.query.await("SELECT * FROM player_vehicles WHERE citizenid = ? AND job_vehicle = ? AND gang_vehicle = ?", {Player.PlayerData.citizenid, 0, 0})
|
||||
|
||||
for i, vehicle in pairs(vehicles) do
|
||||
local vehShared = QBCore.Shared.Vehicles[vehicle.vehicle]
|
||||
local vehBrand, vehName, vehState
|
||||
local vehGarage = vehicle.garage_id
|
||||
|
||||
if vehShared then
|
||||
vehBrand = vehShared.brand
|
||||
vehName = vehShared.name
|
||||
else
|
||||
vehBrand = ""
|
||||
vehName = vehicle.vehicle
|
||||
end
|
||||
|
||||
if vehicle.impound == 1 then
|
||||
vehGarage = Locale.impound
|
||||
vehState = json.decode(vehicle.impound_data).reason
|
||||
elseif vehicle.in_garage then
|
||||
vehState = Locale.inGarage
|
||||
else
|
||||
vehState = Locale.notInGarage
|
||||
end
|
||||
|
||||
vehicles[i] = {
|
||||
fullname = vehBrand .. " " .. vehName,
|
||||
brand = vehBrand,
|
||||
model = vehName,
|
||||
garage = vehGarage,
|
||||
state = vehState,
|
||||
plate = vehicle.plate,
|
||||
fuel = vehicle.fuel,
|
||||
engine = vehicle.engine,
|
||||
body = vehicle.body
|
||||
}
|
||||
end
|
||||
|
||||
cb(vehicles)
|
||||
end)
|
||||
|
||||
-- qb-vehiclesales fix
|
||||
QBCore.Functions.CreateCallback("qb-garage:server:checkVehicleOwner", function(source, cb, plate)
|
||||
local src = source
|
||||
local pData = QBCore.Functions.GetPlayer(src)
|
||||
|
||||
local result = MySQL.single.await("SELECT * FROM player_vehicles WHERE plate = ? AND citizenid = ?", {plate, pData.PlayerData.citizenid})
|
||||
if result then cb(true, result.balance)
|
||||
else cb(false) end
|
||||
end)
|
||||
end
|
|
@ -0,0 +1,22 @@
|
|||
if (Config.Framework == "auto" and GetResourceState("qbx_core") == "started") or Config.Framework == "Qbox" then
|
||||
-- Player data
|
||||
Globals.PlayerData = exports.qbx_core:GetPlayerData()
|
||||
|
||||
RegisterNetEvent("QBCore:Client:OnPlayerLoaded")
|
||||
AddEventHandler("QBCore:Client:OnPlayerLoaded", function()
|
||||
Globals.PlayerData = exports.qbx_core:GetPlayerData()
|
||||
TriggerEvent("jg-advancedgarages:client:update-blips-text-uis")
|
||||
end)
|
||||
|
||||
RegisterNetEvent("QBCore:Client:OnJobUpdate")
|
||||
AddEventHandler("QBCore:Client:OnJobUpdate", function(job)
|
||||
Globals.PlayerData.job = job
|
||||
TriggerEvent("jg-advancedgarages:client:update-blips-text-uis")
|
||||
end)
|
||||
|
||||
RegisterNetEvent("QBCore:Client:OnGangUpdate")
|
||||
AddEventHandler("QBCore:Client:OnGangUpdate", function(gang)
|
||||
Globals.PlayerData.gang = gang
|
||||
TriggerEvent("jg-advancedgarages:client:update-blips-text-uis")
|
||||
end)
|
||||
end
|
|
@ -0,0 +1,317 @@
|
|||
--
|
||||
-- Core Functions
|
||||
--
|
||||
|
||||
---@param src integer
|
||||
---@param msg string
|
||||
---@param type "success" | "warning" | "error"
|
||||
function Framework.Server.Notify(src, msg, type)
|
||||
TriggerClientEvent("jg-advancedgarages:client:notify", src, msg, type, 5000)
|
||||
end
|
||||
|
||||
---@param src integer
|
||||
---@returns boolean
|
||||
function Framework.Server.IsAdmin(src)
|
||||
return IsPlayerAceAllowed(tostring(src), "command") or false
|
||||
end
|
||||
|
||||
function Framework.Server.PayIntoSocietyFund(jobName, money)
|
||||
local usingNewQBBanking = GetResourceState("qb-banking") == "started" and tonumber(string.sub(GetResourceMetadata("qb-banking", "version", 0), 1, 3)) >= 2
|
||||
|
||||
if (Config.Banking == "auto" and GetResourceState("Renewed-Banking") == "started") or Config.Banking == "Renewed-Banking" then
|
||||
exports['Renewed-Banking']:addAccountMoney(jobName, money)
|
||||
elseif (Config.Banking == "auto" and GetResourceState("okokBanking") == "started") or Config.Banking == "okokBanking" then
|
||||
exports['okokBanking']:AddMoney(jobName, money)
|
||||
elseif (Config.Banking == "auto" and GetResourceState("fd_banking") == "started") or Config.banking == "fd_banking" then
|
||||
exports.fd_banking:AddMoney(jobName, money)
|
||||
elseif (Config.Banking == "auto" and (Config.Framework == "QBCore" or Config.Framework == "Qbox")) then
|
||||
if usingNewQBBanking then
|
||||
exports["qb-banking"]:AddMoney(jobName, money)
|
||||
else
|
||||
exports["qb-management"]:AddMoney(jobName, money)
|
||||
end
|
||||
elseif Config.Banking == "qb-banking" then
|
||||
exports["qb-banking"]:AddMoney(jobName, money)
|
||||
elseif Config.Banking == "qb-management" then
|
||||
exports["qb-management"]:AddMoney(jobName, money)
|
||||
elseif (Config.Banking == "auto" and Config.Framework == "ESX") or Config.Banking == "esx_addonaccount" then
|
||||
TriggerEvent("esx_society:getSociety", jobName, function(society)
|
||||
TriggerEvent("esx_addonaccount:getSharedAccount", society.account, function(account)
|
||||
account.addMoney(money)
|
||||
end)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
--
|
||||
-- Player Functions
|
||||
--
|
||||
|
||||
---@param src integer
|
||||
function Framework.Server.GetPlayer(src)
|
||||
if Config.Framework == "QBCore" then
|
||||
return QBCore.Functions.GetPlayer(src)
|
||||
elseif Config.Framework == "Qbox" then
|
||||
return exports.qbx_core:GetPlayer(src)
|
||||
elseif Config.Framework == "ESX" then
|
||||
return ESX.GetPlayerFromId(src)
|
||||
end
|
||||
end
|
||||
|
||||
---@param src integer
|
||||
function Framework.Server.GetPlayerInfo(src)
|
||||
local player = Framework.Server.GetPlayer(src)
|
||||
if not player then return false end
|
||||
|
||||
if Config.Framework == "QBCore" or Config.Framework == "Qbox" then
|
||||
return {
|
||||
name = player.PlayerData.charinfo.firstname .. " " .. player.PlayerData.charinfo.lastname
|
||||
}
|
||||
elseif Config.Framework == "ESX" then
|
||||
return {
|
||||
name = player.getName()
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
---@param src integer
|
||||
---@return {name:string,label:string,grade:number} | false
|
||||
function Framework.Server.GetPlayerJob(src)
|
||||
local player = Framework.Server.GetPlayer(src)
|
||||
if not player then return false end
|
||||
|
||||
if Config.Framework == "QBCore" or Config.Framework == "Qbox" then
|
||||
if not player.PlayerData then return false end
|
||||
|
||||
return {
|
||||
name = player.PlayerData.job.name,
|
||||
label = player.PlayerData.job.label,
|
||||
grade = player.PlayerData.job.grade?.level or 0,
|
||||
}
|
||||
elseif Config.Framework == "ESX" then
|
||||
return {
|
||||
name = player.job.name,
|
||||
label = player.job.label,
|
||||
grade = player.job.grade
|
||||
}
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
---@param src integer
|
||||
---@return {name:string,label:string,grade:number} | false
|
||||
function Framework.Server.GetPlayerGang(src)
|
||||
if (Config.Gangs == "auto" and GetResourceState("rcore_gangs") == "started") or Config.Gangs == "rcore_gangs" then
|
||||
local gang = exports.rcore_gangs:GetPlayerGang(src)
|
||||
if not gang then return {} end
|
||||
|
||||
return {
|
||||
name = gang.name,
|
||||
label = gang.name,
|
||||
grade = 0 -- rcore_gangs' grade system are only strings
|
||||
}
|
||||
elseif (Config.Gangs == "auto" and GetResourceState("qb-gangs") == "started") or Config.Gangs == "qb-gangs" or Config.Framework == "QBCore" or Config.Framework == "Qbox" then
|
||||
|
||||
local player = Framework.Server.GetPlayer(src)
|
||||
if not player then return false end
|
||||
|
||||
return {
|
||||
name = player.PlayerData.gang.name,
|
||||
label = player.PlayerData.gang.label,
|
||||
grade = player.PlayerData.gang.grade.level
|
||||
}
|
||||
elseif Config.Framework == "ESX" then
|
||||
-- To implement gangs in ESX, enable Config.GangEnableCustomESXIntegration & then add the necessary exports here.
|
||||
-- It must return the same data structure as QB/X above, with { name, label, grade }
|
||||
-- Heads up, you must also add the exports to cl-functions.lua -> Framework.Client.GetPlayerGang
|
||||
error("ESX does not natively support gangs.");
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
---@param src integer
|
||||
function Framework.Server.GetPlayerIdentifier(src)
|
||||
local player = Framework.Server.GetPlayer(src)
|
||||
if not player then return false end
|
||||
|
||||
if Config.Framework == "QBCore" or Config.Framework == "Qbox" then
|
||||
return player.PlayerData.citizenid
|
||||
elseif Config.Framework == "ESX" then
|
||||
return player.getIdentifier()
|
||||
end
|
||||
end
|
||||
|
||||
---@param identifier string
|
||||
function Framework.Server.GetSrcFromIdentifier(identifier)
|
||||
if Config.Framework == "QBCore" then
|
||||
local player = QBCore.Functions.GetPlayerByCitizenId(identifier)
|
||||
if not player then return false end
|
||||
return player.PlayerData.source
|
||||
elseif Config.Framework == "Qbox" then
|
||||
local player = exports.qbx_core:GetPlayerByCitizenId(identifier)
|
||||
if not player then return false end
|
||||
return player.PlayerData.source
|
||||
elseif Config.Framework == "ESX" then
|
||||
local xPlayer = ESX.GetPlayerFromIdentifier(identifier)
|
||||
if not xPlayer then return false end
|
||||
return xPlayer.source
|
||||
end
|
||||
end
|
||||
|
||||
---@param src integer
|
||||
---@param type "cash" | "bank" | "money"
|
||||
function Framework.Server.GetPlayerBalance(src, type)
|
||||
local player = Framework.Server.GetPlayer(src)
|
||||
if not player then return 0 end
|
||||
|
||||
if Config.Framework == "QBCore" or Config.Framework == "Qbox" then
|
||||
return player.PlayerData.money[type]
|
||||
elseif Config.Framework == "ESX" then
|
||||
if type == "cash" then type = "money" end
|
||||
|
||||
for i, acc in pairs(player.getAccounts()) do
|
||||
if acc.name == type then
|
||||
return acc.money
|
||||
end
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
---@param src integer
|
||||
---@param amount number
|
||||
---@param account "cash" | "bank" | "money"
|
||||
---@return boolean success
|
||||
function Framework.Server.PlayerRemoveMoney(src, amount, account)
|
||||
local player = Framework.Server.GetPlayer(src)
|
||||
account = account or "bank"
|
||||
|
||||
if Framework.Server.GetPlayerBalance(src, account) < amount then
|
||||
Framework.Server.Notify(src, Locale.notEnoughMoneyError, "error")
|
||||
return false
|
||||
end
|
||||
|
||||
if Config.Framework == "QBCore" or Config.Framework == "Qbox" then
|
||||
player.Functions.RemoveMoney(account, round(amount, 0))
|
||||
elseif Config.Framework == "ESX" then
|
||||
if account == "cash" then account = "money" end
|
||||
player.removeAccountMoney(account, round(amount, 0))
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
---@return {id:number,identifier:string,name:string}[] players
|
||||
function Framework.Server.GetPlayers()
|
||||
local players = {}
|
||||
|
||||
for _, playerId in ipairs(GetPlayers()) do
|
||||
players[#players+1] = {
|
||||
id = tonumber(playerId),
|
||||
identifier = Framework.Server.GetPlayerIdentifier(tonumber(playerId, 10)),
|
||||
name = Framework.Server.GetPlayerInfo(tonumber(playerId, 10))?.name
|
||||
}
|
||||
end
|
||||
|
||||
return players
|
||||
end
|
||||
|
||||
---@return table | false jobs
|
||||
function Framework.Server.GetJobs()
|
||||
if Config.Framework == "QBCore" then
|
||||
return QBCore.Shared.Jobs
|
||||
elseif Config.Framework == "Qbox" then
|
||||
return exports.qbx_core:GetJobs()
|
||||
elseif Config.Framework == "ESX" then
|
||||
return ESX.GetJobs()
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
---@return table | false gangs
|
||||
function Framework.Server.GetGangs()
|
||||
if (Config.Gangs == "auto" and GetResourceState("rcore_gangs") == "started") or Config.Gangs == "rcore_gangs" then
|
||||
local gangs = MySQL.query.await("SELECT name FROM gangs")
|
||||
return gangs or {}
|
||||
elseif (Config.Gangs == "auto" and GetResourceState("qb-gangs") == "started") or Config.Gangs == "qb-gangs" then
|
||||
if Config.Framework == "QBCore" then
|
||||
return QBCore.Shared.Gangs
|
||||
elseif Config.Framework == "Qbox" then
|
||||
return exports.qbx_core:GetGangs()
|
||||
end
|
||||
elseif Config.Framework == "ESX" then
|
||||
error("ESX does not natively support gangs.");
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
---@param vehicle integer
|
||||
---@return string | false plate
|
||||
function Framework.Server.GetPlate(vehicle)
|
||||
local plate = GetVehicleNumberPlateText(vehicle)
|
||||
if not plate or plate == nil or plate == "" then return false end
|
||||
|
||||
if GetResourceState("brazzers-fakeplates") == "started" then
|
||||
local originalPlate = MySQL.scalar.await("SELECT plate FROM player_vehicles WHERE fakeplate = ?", {plate})
|
||||
if originalPlate then plate = originalPlate end
|
||||
end
|
||||
|
||||
local trPlate = string.gsub(plate, "^%s*(.-)%s*$", "%1")
|
||||
return trPlate
|
||||
end
|
||||
|
||||
---@param vehicle boolean|QueryResult|unknown|{ [number]: { [string]: unknown }|{ [string]: unknown }}
|
||||
---@return string | number | false model
|
||||
function Framework.Server.GetModelColumn(vehicle)
|
||||
if Config.Framework == "QBCore" or Config.Framework == "Qbox" then
|
||||
return vehicle.vehicle or tonumber(vehicle.hash) or false
|
||||
elseif Config.Framework == "ESX" then
|
||||
if not vehicle or not vehicle.vehicle then return false end
|
||||
|
||||
if type(vehicle.vehicle) == "string" then
|
||||
if not json.decode(vehicle.vehicle) then return false end
|
||||
return json.decode(vehicle.vehicle).model
|
||||
else
|
||||
return vehicle.vehicle.model
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
--
|
||||
-- ti_fuel
|
||||
--
|
||||
|
||||
RegisterNetEvent("jg-advancedgarages:server:save-ti-fuel-type", function(plate, type)
|
||||
MySQL.query.await("ALTER TABLE " .. Framework.VehiclesTable .. " ADD COLUMN IF NOT EXISTS `ti_fuel_type` VARCHAR(100) DEFAULT '';")
|
||||
MySQL.update.await("UPDATE " .. Framework.VehiclesTable .. " SET ti_fuel_type = ? WHERE plate = ?", {type, plate});
|
||||
end)
|
||||
|
||||
lib.callback.register("jg-advancedgarages:server:get-ti-fuel-type", function(src, plate)
|
||||
MySQL.query.await("ALTER TABLE " .. Framework.VehiclesTable .. " ADD COLUMN IF NOT EXISTS `ti_fuel_type` VARCHAR(100) DEFAULT '';")
|
||||
return MySQL.scalar.await("SELECT ti_fuel_type FROM " .. Framework.VehiclesTable .. " WHERE plate = ?", {plate}) or false
|
||||
end)
|
||||
|
||||
--
|
||||
-- Brazzers-FakePlates
|
||||
--
|
||||
|
||||
if GetResourceState("brazzers-fakeplates") == "started" then
|
||||
lib.callback.register("jg-advancedgarages:server:brazzers-get-plate-from-fakeplate", function(_, fakeplate)
|
||||
local result = MySQL.scalar.await("SELECT plate FROM player_vehicles WHERE fakeplate = ?", {fakeplate})
|
||||
if result then return result end
|
||||
return false
|
||||
end)
|
||||
|
||||
lib.callback.register("jg-advancedgarages:server:brazzers-get-fakeplate-from-plate", function(_, plate)
|
||||
local result = MySQL.scalar.await("SELECT fakeplate FROM player_vehicles WHERE plate = ?", {plate})
|
||||
if result then return result end
|
||||
return false
|
||||
end)
|
||||
end
|
56
resources/[carscripts]/jg-advancedgarages/fxmanifest.lua
Normal file
56
resources/[carscripts]/jg-advancedgarages/fxmanifest.lua
Normal file
|
@ -0,0 +1,56 @@
|
|||
fx_version "cerulean"
|
||||
game "gta5"
|
||||
lua54 "yes"
|
||||
|
||||
description "For support or other queries: discord.gg/jgscripts"
|
||||
version 'v3.2.3'
|
||||
author "JG Scripts"
|
||||
|
||||
dependencies {
|
||||
"oxmysql",
|
||||
"ox_lib",
|
||||
"/server:7290",
|
||||
"/onesync",
|
||||
}
|
||||
|
||||
shared_scripts {
|
||||
"@ox_lib/init.lua",
|
||||
"config/config.lua",
|
||||
"locales/*.lua",
|
||||
"shared/main.lua",
|
||||
"framework/main.lua"
|
||||
}
|
||||
|
||||
client_scripts {
|
||||
"framework/**/cl-*.lua",
|
||||
"config/config-cl.lua",
|
||||
"client/cl-main.lua",
|
||||
"client/*.lua"
|
||||
}
|
||||
|
||||
server_scripts {
|
||||
"@oxmysql/lib/MySQL.lua",
|
||||
"framework/**/sv-*.lua",
|
||||
"config/config-sv.lua",
|
||||
"server/sv-main.lua",
|
||||
"server/*.lua"
|
||||
}
|
||||
|
||||
ui_page "web/dist/index.html"
|
||||
|
||||
files {
|
||||
"web/dist/index.html",
|
||||
"web/dist/**/*",
|
||||
"vehicle_images/*"
|
||||
}
|
||||
|
||||
escrow_ignore {
|
||||
"config/**/*",
|
||||
"framework/**/*",
|
||||
"locales/*.lua",
|
||||
"client/cl-deformation.lua",
|
||||
"client/cl-locations.lua",
|
||||
"server/sv-webhooks.lua"
|
||||
}
|
||||
|
||||
dependency '/assetpacks'
|
|
@ -0,0 +1,28 @@
|
|||
-- player_vehicles
|
||||
ALTER TABLE `owned_vehicles` ADD COLUMN IF NOT EXISTS `fuel` INT(10) DEFAULT '100';
|
||||
ALTER TABLE `owned_vehicles` ADD COLUMN IF NOT EXISTS `engine` INT(10) DEFAULT '1000';
|
||||
ALTER TABLE `owned_vehicles` ADD COLUMN IF NOT EXISTS `body` INT(10) DEFAULT '1000';
|
||||
ALTER TABLE `owned_vehicles` ADD COLUMN IF NOT EXISTS `damage` LONGTEXT DEFAULT '';
|
||||
ALTER TABLE `owned_vehicles` ADD COLUMN IF NOT EXISTS `in_garage` TINYINT(1) DEFAULT '1';
|
||||
ALTER TABLE `owned_vehicles` ADD COLUMN IF NOT EXISTS `garage_id` VARCHAR(255) DEFAULT 'Legion Square';
|
||||
ALTER TABLE `owned_vehicles` ADD COLUMN IF NOT EXISTS `job_vehicle` TINYINT(1) DEFAULT '0';
|
||||
ALTER TABLE `owned_vehicles` ADD COLUMN IF NOT EXISTS `job_vehicle_rank` INT(10) DEFAULT '0';
|
||||
ALTER TABLE `owned_vehicles` ADD COLUMN IF NOT EXISTS `gang_vehicle` TINYINT(1) DEFAULT '0';
|
||||
ALTER TABLE `owned_vehicles` ADD COLUMN IF NOT EXISTS `gang_vehicle_rank` INT(10) DEFAULT '0';
|
||||
ALTER TABLE `owned_vehicles` ADD COLUMN IF NOT EXISTS `impound` INT(10) DEFAULT '0';
|
||||
ALTER TABLE `owned_vehicles` ADD COLUMN IF NOT EXISTS `impound_retrievable` INT(10) DEFAULT '0';
|
||||
ALTER TABLE `owned_vehicles` ADD COLUMN IF NOT EXISTS `impound_data` LONGTEXT DEFAULT '';
|
||||
ALTER TABLE `owned_vehicles` ADD COLUMN IF NOT EXISTS `nickname` VARCHAR(255) DEFAULT '';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `player_priv_garages` (
|
||||
`id` INT(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`owners` longtext,
|
||||
`name` VARCHAR(255),
|
||||
`type` VARCHAR(50),
|
||||
`x` FLOAT,
|
||||
`y` FLOAT,
|
||||
`z` FLOAT,
|
||||
`h` FLOAT,
|
||||
`distance` INT(11) DEFAULT '10',
|
||||
PRIMARY KEY (`id`)
|
||||
);
|
25
resources/[carscripts]/jg-advancedgarages/install/run-qb.sql
Normal file
25
resources/[carscripts]/jg-advancedgarages/install/run-qb.sql
Normal file
|
@ -0,0 +1,25 @@
|
|||
-- player_vehicles
|
||||
ALTER TABLE `player_vehicles` ADD COLUMN IF NOT EXISTS `damage` LONGTEXT DEFAULT '';
|
||||
ALTER TABLE `player_vehicles` ADD COLUMN IF NOT EXISTS `in_garage` TINYINT(1) DEFAULT '1';
|
||||
ALTER TABLE `player_vehicles` ADD COLUMN IF NOT EXISTS `garage_id` VARCHAR(255) DEFAULT 'Legion Square';
|
||||
ALTER TABLE `player_vehicles` ADD COLUMN IF NOT EXISTS `job_vehicle` TINYINT(1) DEFAULT '0';
|
||||
ALTER TABLE `player_vehicles` ADD COLUMN IF NOT EXISTS `job_vehicle_rank` INT(10) DEFAULT '0'; -- NEW
|
||||
ALTER TABLE `player_vehicles` ADD COLUMN IF NOT EXISTS `gang_vehicle` TINYINT(1) DEFAULT '0';
|
||||
ALTER TABLE `player_vehicles` ADD COLUMN IF NOT EXISTS `gang_vehicle_rank` INT(10) DEFAULT '0';
|
||||
ALTER TABLE `player_vehicles` ADD COLUMN IF NOT EXISTS `impound` INT(10) DEFAULT '0';
|
||||
ALTER TABLE `player_vehicles` ADD COLUMN IF NOT EXISTS `impound_retrievable` INT(10) DEFAULT '0';
|
||||
ALTER TABLE `player_vehicles` ADD COLUMN IF NOT EXISTS `impound_data` LONGTEXT DEFAULT '';
|
||||
ALTER TABLE `player_vehicles` ADD COLUMN IF NOT EXISTS `nickname` VARCHAR(255) DEFAULT '';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `player_priv_garages` (
|
||||
`id` INT(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`owners` longtext,
|
||||
`name` VARCHAR(255),
|
||||
`type` VARCHAR(50),
|
||||
`x` FLOAT,
|
||||
`y` FLOAT,
|
||||
`z` FLOAT,
|
||||
`h` FLOAT,
|
||||
`distance` INT(11) DEFAULT '10',
|
||||
PRIMARY KEY (`id`)
|
||||
);
|
142
resources/[carscripts]/jg-advancedgarages/locales/ar.lua
Normal file
142
resources/[carscripts]/jg-advancedgarages/locales/ar.lua
Normal file
|
@ -0,0 +1,142 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['ar'] = {
|
||||
yes = "نعم",
|
||||
no = "لا",
|
||||
garage = "كراج",
|
||||
jobGarage = "كراج الوظيفة",
|
||||
gangGarage = "كراج العصابة",
|
||||
player = "لاعب",
|
||||
impound = "حجز",
|
||||
inGarage = "في الكراج",
|
||||
notInGarage = "ليست في الكراج",
|
||||
car = "سيارة",
|
||||
air = "جوي",
|
||||
sea = "بحري",
|
||||
fuel = "وقود",
|
||||
engine = "محرك",
|
||||
body = "هيكل",
|
||||
day = "يوم",
|
||||
days = "أيام",
|
||||
hour = "ساعة",
|
||||
hours = "ساعات",
|
||||
mins = "دقائق",
|
||||
|
||||
-- User Interface
|
||||
noVehicles = "لا توجد مركبات في هذا الكراج",
|
||||
noVehiclesAvailableToDrive = "لا توجد مركبات متاحة للقيادة",
|
||||
vehicles = "مركبة/مركبات",
|
||||
vehiclePlate = "لوحة المركبة",
|
||||
vehicleNotInGarage = "المركبة تُركت بالخارج",
|
||||
vehicleTakeOut = "قيادة",
|
||||
vehicleReturnAndTakeOut = "إرجاع وقيادة",
|
||||
vehicleReturnToOwnersGarage = "إرجاع إلى كراج المالك",
|
||||
transferToGarageOrPlayer = "نقل إلى كراج أو لاعب",
|
||||
transferToGarage = "نقل إلى كراج",
|
||||
transferToPlayer = "نقل إلى لاعب",
|
||||
vehicleTransfer = "نقل",
|
||||
noAvailableGarages = "لا توجد كراجات متاحة",
|
||||
currentGarage = "الكراج الحالي",
|
||||
noPlayersOnline = "لا يوجد لاعبين متصلين",
|
||||
createPrivateGarage = "إنشاء كراج خاص",
|
||||
pgAlertHeadsUp = "تنبيه!",
|
||||
pgAlertText = "سيتم إنشاء الكراج وستظهر المركبات في الموقع والاتجاه الذي تقف فيه حاليًا.",
|
||||
garageName = "اسم الكراج",
|
||||
impoundInformation = "معلومات الحجز",
|
||||
impoundedBy = "حجز بواسطة",
|
||||
impoundedReason = "السبب",
|
||||
impoundPlayerCanCollect = "يمكنك استلام مركبتك من الحجز.",
|
||||
impoundCollectionContact = "يرجى الاتصال بـ %{value} لاستلام مركبتك.",
|
||||
impoundNoVehicles = "لا توجد مركبات في الحجز",
|
||||
impoundAvailable = "متاح",
|
||||
impoundRetrievableByOwner = "يمكن استردادها بواسطة المالك",
|
||||
impoundNoReason = "لم يتم تقديم سبب",
|
||||
impoundVehicle = "حجز المركبة",
|
||||
impoundReasonField = "السبب (اختياري)",
|
||||
impoundTime = "وقت الحجز",
|
||||
impoundAvailableImmediately = "متاح فورا",
|
||||
impoundCost = "التكلفة",
|
||||
changeVehiclePlate = "تغيير لوحة المركبة",
|
||||
newPlate = "لوحة جديدة",
|
||||
search = "البحث بالاسم أو اللوحة",
|
||||
noPrivateGarages = "لا توجد كراجات خاصة",
|
||||
editPrivateGarage = "تعديل الكراج الخاص",
|
||||
owners = "المالك/المالكون",
|
||||
location = "الموقع",
|
||||
next = "التالي",
|
||||
previous = "السابق",
|
||||
page = "صفحة",
|
||||
of = "من",
|
||||
show = "عرض",
|
||||
save = "حفظ",
|
||||
edit = "تعديل",
|
||||
delete = "حذف",
|
||||
garageDeleteConfirm = "هل أنت متأكد أنك تريد حذف هذا الكراج؟",
|
||||
privGarageSearch = "البحث بالاسم",
|
||||
garageUpdatedSuccess = "تم تحديث الكراج بنجاح!",
|
||||
getCurrentCoords = "احصل على الإحداثيات الحالية",
|
||||
identifier = "المعرف",
|
||||
name = "الاسم",
|
||||
noPlayers = "لا يوجد لاعبين مضافين",
|
||||
addPlayer = "إضافة لاعب",
|
||||
loadingVehicle = "جارٍ تحميل المركبة...",
|
||||
vehicleSetup = "إعداد المركبة",
|
||||
extras = "إضافات",
|
||||
extra = "إضافة",
|
||||
liveries = "الطلاءات",
|
||||
livery = "طلاء",
|
||||
noLiveries = "لا توجد طلاءات متاحة",
|
||||
noExtras = "لا توجد إضافات متاحة",
|
||||
none = "لا شيء",
|
||||
vehicleNeedsService = "تحتاج إلى صيانة",
|
||||
type = "النوع",
|
||||
goInside = "ادخل إلى الداخل",
|
||||
|
||||
-- Notifications
|
||||
insertVehicleTypeError = "يمكنك تخزين أنواع المركبات %{value} فقط في هذا الكراج",
|
||||
insertVehiclePublicError = "لا يمكنك تخزين مركبات الوظيفة أو العصابة في الكراجات العامة",
|
||||
vehicleParkedSuccess = "تم ركن المركبة في الكراج",
|
||||
vehicleNotOwnedError = "أنت لا تملك هذه المركبة",
|
||||
vehicleNotOwnedByPlayerError = "المركبة ليست مملوكة للاعب",
|
||||
notEnoughMoneyError = "ليس لديك ما يكفي من المال في البنك",
|
||||
vehicleNotYoursError = "المركبة لا تخصك",
|
||||
notJobOrGangVehicle = "هذه ليست مركبة %{value}",
|
||||
invalidGangError = "لم تقدم عصابة صالحة",
|
||||
invalidJobError = "لم تقدم وظيفة صالحة",
|
||||
notInsideVehicleError = "أنت لست جالسًا في مركبة",
|
||||
vehicleAddedToGangGarageSuccess = "تمت إضافة المركبة إلى كراج العصابة %{value}!",
|
||||
vehicleAddedToJobGarageSuccess = "تمت إضافة المركبة إلى كراج الوظيفة %{value}!",
|
||||
moveCloserToVehicleError = "تحتاج إلى الاقتراب من المركبة",
|
||||
noVehiclesNearbyError = "لا توجد مركبات قريبة",
|
||||
commandPermissionsError = "غير مسموح لك باستخدام هذا الأمر",
|
||||
actionNotAllowedError = "غير مسموح لك بفعل هذا",
|
||||
garageNameExistsError = "اسم الكراج موجود بالفعل",
|
||||
vehiclePlateExistsError = "لوحة المركبة مستخدمة بالفعل",
|
||||
playerNotOnlineError = "اللاعب غير متصل",
|
||||
vehicleTransferSuccess = "تم نقل المركبة إلى %{value}",
|
||||
vehicleTransferSuccessGeneral = "تم نقل المركبة بنجاح",
|
||||
vehicleReceived = "تلقيت مركبة باللوحة %{value}",
|
||||
vehicleImpoundSuccess = "تم حجز المركبة بنجاح",
|
||||
vehicleImpoundRemoveSuccess = "تم إزالة المركبة من الحجز",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "تم إرجاع المركبة إلى كراج المالك",
|
||||
garageCreatedSuccess = "تم إنشاء الكراج بنجاح!",
|
||||
vehiclePlateUpdateSuccess = "تم تعيين لوحة المركبة إلى %{value}",
|
||||
vehicleDeletedSuccess = "تم حذف المركبة من قاعدة البيانات %{value}",
|
||||
playerIsDead = "لا يمكنك فعل هذا وأنت ميت",
|
||||
vehicleStoreError = "لا يمكنك تخزين هذه المركبة هنا",
|
||||
|
||||
-- Commands
|
||||
cmdSetGangVehicle = "إضافة المركبة الحالية إلى كراج العصابة",
|
||||
cmdRemoveGangVehicle = "إعادة مركبة العصابة إلى ملكية اللاعب",
|
||||
cmdSetJobVehicle = "إضافة المركبة الحالية إلى كراج الوظيفة",
|
||||
cmdRemoveJobVehicle = "إعادة مركبة الوظيفة إلى ملكية اللاعب",
|
||||
cmdArgGangName = "اسم العصابة",
|
||||
cmdArgJobName = "اسم الوظيفة",
|
||||
cmgArgMinGangRank = "الرتبة الدنيا للعصابة",
|
||||
cmgArgMinJobRank = "الرتبة الدنيا للوظيفة",
|
||||
cmdArgPlayerId = "معرف اللاعب للمالك الجديد",
|
||||
cmdImpoundVehicle = "حجز مركبة",
|
||||
cmdChangePlate = "تغيير لوحة المركبة (للمسؤولين فقط)",
|
||||
cmdDeleteVeh = "حذف المركبة من قاعدة البيانات (للمسؤولين فقط)",
|
||||
cmdCreatePrivGarage = "إنشاء كراج خاص للاعب",
|
||||
}
|
142
resources/[carscripts]/jg-advancedgarages/locales/cn.lua
Normal file
142
resources/[carscripts]/jg-advancedgarages/locales/cn.lua
Normal file
|
@ -0,0 +1,142 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['cn'] = {
|
||||
yes = "是",
|
||||
no = "否",
|
||||
garage = "车库",
|
||||
jobGarage = "工作车库",
|
||||
gangGarage = "帮派车库",
|
||||
player = "玩家",
|
||||
impound = "扣押",
|
||||
inGarage = "在车库中",
|
||||
notInGarage = "不在车库中",
|
||||
car = "汽车",
|
||||
air = "空中",
|
||||
sea = "海洋",
|
||||
fuel = "燃油",
|
||||
engine = "引擎",
|
||||
body = "车身",
|
||||
day = "天",
|
||||
days = "天",
|
||||
hour = "小时",
|
||||
hours = "小时",
|
||||
mins = "分钟",
|
||||
|
||||
-- 用户界面
|
||||
noVehicles = "此车库没有车辆",
|
||||
noVehiclesAvailableToDrive = "没有可供驾驶的车辆",
|
||||
vehicles = "辆车",
|
||||
vehiclePlate = "车牌",
|
||||
vehicleNotInGarage = "车辆已被取出",
|
||||
vehicleTakeOut = "驾驶",
|
||||
vehicleReturnAndTakeOut = "归还并驾驶",
|
||||
vehicleReturnToOwnersGarage = "返回车主的车库",
|
||||
transferToGarageOrPlayer = "转移到车库或玩家",
|
||||
transferToGarage = "转移到车库",
|
||||
transferToPlayer = "转移到玩家",
|
||||
vehicleTransfer = "车辆转移",
|
||||
noAvailableGarages = "没有可用车库",
|
||||
currentGarage = "当前车库",
|
||||
noPlayersOnline = "当前没有在线玩家",
|
||||
createPrivateGarage = "创建私人车库",
|
||||
pgAlertHeadsUp = "提示!",
|
||||
pgAlertText = "车库将会创建,车辆将会在您当前位置和方向生成。",
|
||||
garageName = "车库名称",
|
||||
impoundInformation = "扣押信息",
|
||||
impoundedBy = "扣押者",
|
||||
impoundedReason = "原因",
|
||||
impoundPlayerCanCollect = "您可以从扣押处取回您的车辆。",
|
||||
impoundCollectionContact = "请联系 %{value} 以便取回您的车辆。",
|
||||
impoundNoVehicles = "扣押处没有车辆",
|
||||
impoundAvailable = "可用",
|
||||
impoundRetrievableByOwner = "车主可取回",
|
||||
impoundNoReason = "未提供原因",
|
||||
impoundVehicle = "扣押车辆",
|
||||
impoundReasonField = "原因(可选)",
|
||||
impoundTime = "扣押时间",
|
||||
impoundAvailableImmediately = "可立即取回",
|
||||
impoundCost = "费用",
|
||||
changeVehiclePlate = "更改车牌",
|
||||
newPlate = "新车牌",
|
||||
search = "按名称或车牌搜索",
|
||||
noPrivateGarages = "没有私人车库",
|
||||
editPrivateGarage = "编辑私人车库",
|
||||
owners = "车主",
|
||||
location = "位置",
|
||||
next = "下一页",
|
||||
previous = "上一页",
|
||||
page = "页",
|
||||
of = "共",
|
||||
show = "显示",
|
||||
save = "保存",
|
||||
edit = "编辑",
|
||||
delete = "删除",
|
||||
garageDeleteConfirm = "您确定要删除此车库吗?",
|
||||
privGarageSearch = "按名称搜索",
|
||||
garageUpdatedSuccess = "车库更新成功!",
|
||||
getCurrentCoords = "获取当前坐标",
|
||||
identifier = "标识符",
|
||||
name = "名称",
|
||||
noPlayers = "没有添加玩家",
|
||||
addPlayer = "添加玩家",
|
||||
loadingVehicle = "正在加载车辆...",
|
||||
vehicleSetup = "车辆设置",
|
||||
extras = "额外配件",
|
||||
extra = "额外配件",
|
||||
liveries = "涂装",
|
||||
livery = "涂装",
|
||||
noLiveries = "没有可用涂装",
|
||||
noExtras = "没有可用配件",
|
||||
none = "无",
|
||||
vehicleNeedsService = "需要维修",
|
||||
type = "类型",
|
||||
goInside = "室内车库",
|
||||
|
||||
-- 通知
|
||||
insertVehicleTypeError = "此车库只能存储 %{value} 类型的车辆",
|
||||
insertVehiclePublicError = "您不能将工作或帮派车辆存入公共车库",
|
||||
vehicleParkedSuccess = "车辆已停入车库",
|
||||
vehicleNotOwnedError = "您不拥有这辆车",
|
||||
vehicleNotOwnedByPlayerError = "此车辆不属于玩家",
|
||||
notEnoughMoneyError = "您的银行余额不足",
|
||||
vehicleNotYoursError = "这辆车不属于您",
|
||||
notJobOrGangVehicle = "这不是 %{value} 车辆",
|
||||
invalidGangError = "您没有提供有效的帮派",
|
||||
invalidJobError = "您没有提供有效的工作",
|
||||
notInsideVehicleError = "您没有坐在车辆内",
|
||||
vehicleAddedToGangGarageSuccess = "车辆已添加到 %{value} 帮派车库!",
|
||||
vehicleAddedToJobGarageSuccess = "车辆已添加到 %{value} 工作车库!",
|
||||
moveCloserToVehicleError = "您需要靠近车辆",
|
||||
noVehiclesNearbyError = "附近没有车辆",
|
||||
commandPermissionsError = "您没有权限使用此命令",
|
||||
actionNotAllowedError = "您没有权限执行此操作",
|
||||
garageNameExistsError = "车库名称已存在",
|
||||
vehiclePlateExistsError = "车牌已被使用",
|
||||
playerNotOnlineError = "玩家不在线",
|
||||
vehicleTransferSuccess = "车辆已转移给 %{value}",
|
||||
vehicleTransferSuccessGeneral = "车辆转移成功",
|
||||
vehicleReceived = "您已收到车牌为 %{value} 的车辆",
|
||||
vehicleImpoundSuccess = "车辆成功扣押",
|
||||
vehicleImpoundRemoveSuccess = "车辆已从扣押处移除",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "车辆已归还至车主的车库",
|
||||
garageCreatedSuccess = "车库创建成功!",
|
||||
vehiclePlateUpdateSuccess = "车牌已更新为 %{value}",
|
||||
vehicleDeletedSuccess = "车辆已从数据库删除 %{value}",
|
||||
playerIsDead = "您死了无法执行此操作",
|
||||
vehicleStoreError = "您无法将此车辆存储在此处",
|
||||
|
||||
-- 命令
|
||||
cmdSetGangVehicle = "将当前车辆添加到帮派车库",
|
||||
cmdRemoveGangVehicle = "将帮派车辆归还为玩家车辆",
|
||||
cmdSetJobVehicle = "将当前车辆添加到工作车库",
|
||||
cmdRemoveJobVehicle = "将工作车辆归还为玩家车辆",
|
||||
cmdArgGangName = "帮派名称",
|
||||
cmdArgJobName = "工作名称",
|
||||
cmgArgMinGangRank = "最低帮派等级",
|
||||
cmgArgMinJobRank = "最低工作等级",
|
||||
cmdArgPlayerId = "新车主的玩家ID",
|
||||
cmdImpoundVehicle = "扣押一辆车辆",
|
||||
cmdChangePlate = "更改车辆车牌(仅限管理员)",
|
||||
cmdDeleteVeh = "删除车辆(仅限管理员)",
|
||||
cmdCreatePrivGarage = "为玩家创建私人车库",
|
||||
}
|
143
resources/[carscripts]/jg-advancedgarages/locales/cs.lua
Normal file
143
resources/[carscripts]/jg-advancedgarages/locales/cs.lua
Normal file
|
@ -0,0 +1,143 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['cs'] = {
|
||||
yes = "Ano",
|
||||
ne = "Ne",
|
||||
garage = "Garáž",
|
||||
jobGarage = "Frakční Garáž",
|
||||
gangGarage = "Gang Garáž",
|
||||
player = "Hráč",
|
||||
impound = "Odtahovka",
|
||||
inGarage = "V garáži",
|
||||
notInGarage = "Mimo garáž",
|
||||
car = "Car",
|
||||
air = "Air",
|
||||
sea = "Sea",
|
||||
fuel = "Palivo",
|
||||
engine = "Motor",
|
||||
body = "Karoserie",
|
||||
day = "den",
|
||||
days = "dní",
|
||||
hour = "hodiny",
|
||||
hours = "hodin",
|
||||
|
||||
-- User Interface
|
||||
noVehicles = "V této garáži nejsou žádná vozidla",
|
||||
vehicles = "vozidlo(a)",
|
||||
vehiclePlate = "SPZ vozidla",
|
||||
vehicleNotInGarage = "Vozidlo není v garáži",
|
||||
vehicleTakeOut = "Vytáhnout vozidlo",
|
||||
vehicleReturnAndTakeOut = "Vyzvednout z odtahovky",
|
||||
vehicleReturnToOwnersGarage = "Návrat do garáže majitele",
|
||||
transferToGarageOrPlayer = "Převést do garáže nebo hráči",
|
||||
transferToGarage = "Převést do garáže",
|
||||
transferToPlayer = "Převést na hráče",
|
||||
vehicleTransfer = "Převod",
|
||||
noAvailableGarages = "Žádné dostupné garáže",
|
||||
currentGarage = "Aktuální garáž",
|
||||
noPlayersOnline = "Žádní hráči online",
|
||||
createPrivateGarage = "Vytvořit soukromou garáž",
|
||||
pgAlertHeadsUp = "Heads up!",
|
||||
pgAlertText = "Vytvoří se garáž a vozidla se budou spawnovat přesně v místě a směru, kde právě stojíte.",
|
||||
garageName = "Název garáže",
|
||||
impoundInformation = "Informace o zabavení",
|
||||
impoundedBy = "Zabaveno do",
|
||||
impoundedReason = "Důvod",
|
||||
impoundPlayerCanCollect = "Můžete si vyzvednout své vozidlo na odtahovce.",
|
||||
impoundCollectionContact = "Kontaktujte prosím %{value}, abyste si mohli vyzvednout své vozidlo.",
|
||||
impoundNoVehicles = "V blízkosti nejsou žádná vozidla",
|
||||
impoundAvailable = "K dispozici",
|
||||
impoundRetrievableByOwner = "Vyzvednutelné vlastníkem",
|
||||
impoundNoReason = "Není uveden důvod",
|
||||
impoundVehicle = "Zabavené vozidlo",
|
||||
impoundReasonField = "Důvod (nepovinný)",
|
||||
impoundTime = "Doba zabavení",
|
||||
impoundAvailableImmediately = "K dispozici ihned",
|
||||
impoundCost = "Cena",
|
||||
changeVehiclePlate = "Vyměnit registrační značku vozidla",
|
||||
newPlate = "Nová registrační značka",
|
||||
search = "Hledejte podle jména nebo štítku",
|
||||
noPrivateGarages = "Žádné soukromé garáže",
|
||||
editPrivateGarage = "Upravit soukromou garáž",
|
||||
owners = "Majitel(é)",
|
||||
location = "Umístění",
|
||||
next = "Další",
|
||||
previous = "Předchozí",
|
||||
page = "Stránka",
|
||||
of = "z",
|
||||
show = "Zobrazit",
|
||||
save = "Uložit",
|
||||
edit = "Upravit",
|
||||
delete = "Odstranit",
|
||||
garageDeleteConfirm = "Opravdu chcete tuto garáž odstranit?",
|
||||
privGarageSearch = "Vyhledávání podle jména",
|
||||
garageUpdatedSuccess = "Garáž úspěšně aktualizována!",
|
||||
getCurrentCoords = "Získání aktuálních souřadnic",
|
||||
identifier = "Identifikátor",
|
||||
name = "Název",
|
||||
noPlayers = "Nebyli přidáni žádní hráči",
|
||||
addPlayer = "Přidat hráče",
|
||||
loadingVehicle = "Nakládací vozidlo...",
|
||||
vehicleSetup = "Nastavení vozidla",
|
||||
extras = "Doplňky",
|
||||
extra = "Extra",
|
||||
liveries = "Liveries",
|
||||
livery = "Livery",
|
||||
noLiveries = "Nejsou k dispozici žádné livreje",
|
||||
noExtras = "Žádné doplňky nejsou k dispozici",
|
||||
none = "Žádné",
|
||||
vehicleNeedsService = "Needs Service",
|
||||
type = "Type",
|
||||
|
||||
-- Notifications
|
||||
insertVehicleTypeError = "V této garáži lze uložit pouze %{value} typů vozidel",
|
||||
insertVehiclePublicError = "Do veřejných garáží nelze ukládat frakční vozidla",
|
||||
vehicleParkedSuccess = "Vozidlo bylo zaparkováno do garáže",
|
||||
vehicleNotOwnedError = "Toto vozidlo nevlastníte",
|
||||
vehicleNotOwnedByPlayerError = "Vozidlo není ve vlastnictví tohoto hráče",
|
||||
notEnoughMoneyError = "Nemáte v bance dostatek peněz",
|
||||
vehicleNotYoursError = "Toto vozidlo vám nepatří",
|
||||
notJobOrGangVehicle = "Toto není vozidlo %{value}",
|
||||
invalidGangError = "Nezadali jste platný gang",
|
||||
invalidJobError = "Nezadali jste platnou frakci",
|
||||
notInsideVehicleError = "Nesedíte ve vozidle",
|
||||
vehicleAddedToGangGarageSuccess = "Vozidlo bylo přidáno do garáže gangu %{value}!",
|
||||
vehicleAddedToJobGarageSuccess = "Vozidlo bylo přidáno do garáže frakce %{value}!",
|
||||
moveCloserToVehicleError = "Musíte se přiblížit k vozidlu",
|
||||
noVehiclesNearbyError = "V blízkosti nejsou žádná vozidla",
|
||||
commandPermissionsError = "Nemáte oprávnění na použítí tohoto příkazu",
|
||||
actionNotAllowedError = "Nejste opravněn(a) provádět tuto akci",
|
||||
garageNameExistsError = "Název garáže již existuje",
|
||||
vehiclePlateExistsError = "SPZ vozidla je již použita",
|
||||
playerNotOnlineError = "Hráč není online",
|
||||
vehicleTransferSuccess = "Vozidlo převedeno na %{value}",
|
||||
vehicleTransferSuccessGeneral = "Vozidlo bylo úspěšně převedeno",
|
||||
vehicleReceived = "Získal jsi vozidlo se %{value}",
|
||||
vehicleImpoundSuccess = "Vozidlo bylo úspěšně zabaveno",
|
||||
vehicleImpoundRemoveSuccess = "Vozidlo bylo odstraněno z odtahovky",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "Vozidlo bylo vráceno do garáže majitele",
|
||||
garageCreatedSuccess = "Garáž byla úspěšně vytvořena!",
|
||||
vehiclePlateUpdateSuccess = "SPZ vozidla nastavena na %{value}",
|
||||
vehicleDeletedSuccess = "Vozidlo bylo odstraněno z databáze %{value}",
|
||||
playerIsDead = "Nemůžeš to udělat, dokud jsi mrtvý",
|
||||
|
||||
-- Commands
|
||||
cmdSetGangVehicle = "Přidat aktuální vozidlo do gang garáže",
|
||||
cmdRemoveGangVehicle = "Nastavit vozidlo gangu zpět do vlastnictví hráče",
|
||||
cmdSetJobVehicle = "Přidat aktuální vozidlo do garáže pro frakci",
|
||||
cmdRemoveJobVehicle = "Nastavit frakční vozidlo zpět do vlastnictví hráče",
|
||||
cmdArgGangName = "Název gangu",
|
||||
cmdArgJobName = "Název jobu",
|
||||
cmgArgMinGangRank = "Minimální hodnost gangu",
|
||||
cmgArgMinJobRank = "Minimální pracovní zařazení",
|
||||
cmdArgPlayerId = "ID hráče nového vlastníka",
|
||||
cmdImpoundVehicle = "Zabavit vozidlo",
|
||||
cmdChangePlate = "Změnit registrační značku vozidla (pouze pro administrátory)",
|
||||
cmdDeleteVeh = "Odstranit vozidlo z databáze (pouze pro administrátory)",
|
||||
cmdCreatePrivGarage = "Vytvořit soukromou garáž pro hráče",
|
||||
|
||||
-- v3
|
||||
vehicleStoreError = "You cannot store this vehicle here",
|
||||
mins = "mins",
|
||||
noVehiclesAvailableToDrive = "There are no vehicles available to drive",
|
||||
}
|
143
resources/[carscripts]/jg-advancedgarages/locales/da.lua
Normal file
143
resources/[carscripts]/jg-advancedgarages/locales/da.lua
Normal file
|
@ -0,0 +1,143 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['da'] = {
|
||||
yes = "Ja",
|
||||
no = "Nej",
|
||||
garage = "Garage",
|
||||
jobGarage = "Job Garage",
|
||||
gangGarage = "Bande Garage",
|
||||
player = "Spiller",
|
||||
impound = "Impound",
|
||||
inGarage = "I garage",
|
||||
notInGarage = "Ikke i garage",
|
||||
car = "Bil",
|
||||
air = "Fly",
|
||||
sea = "Båd",
|
||||
fuel = "Brændstof",
|
||||
engine = "Motor",
|
||||
body = "Karosseri",
|
||||
day = "dag",
|
||||
days = "dage",
|
||||
hour = "time",
|
||||
hours = "timer",
|
||||
|
||||
-- User Interface
|
||||
noVehicles = "Der er ingen køretøjer i denne garage",
|
||||
vehicles = "køretøj(er)",
|
||||
vehiclePlate = "Nummerplade",
|
||||
vehicleNotInGarage = "Køretøj er ikke i denne garage",
|
||||
vehicleTakeOut = "Tag ud",
|
||||
vehicleReturnAndTakeOut = "Parker og tag ud",
|
||||
vehicleReturnToOwnersGarage = "Send tilbage til ejers garage",
|
||||
transferToGarageOrPlayer = "Overfør til en garage eller en spiller",
|
||||
transferToGarage = "Overfør til garage",
|
||||
transferToPlayer = "Overfør til spiller",
|
||||
vehicleTransfer = "Overfør",
|
||||
noAvailableGarages = "Ingen tilgængelige garager",
|
||||
currentGarage = "Nuværende garage",
|
||||
noPlayersOnline = "Ingen spillere online",
|
||||
createPrivateGarage = "Opret privat garage",
|
||||
pgAlertHeadsUp = "Pas på!",
|
||||
pgAlertText = "The garage will be created and vehicles will spawn in the exact location and direction are you are currently standing.",
|
||||
garageName = "Garage Navn",
|
||||
impoundInformation = "Impound Information",
|
||||
impoundedBy = "Impoundet af",
|
||||
impoundedReason = "Grund",
|
||||
impoundPlayerCanCollect = "Du kan hente dit køretøj hos impound.",
|
||||
impoundCollectionContact = "Kontakt venligst %{value} for at hente dit køretøj.",
|
||||
impoundNoVehicles = "Der er ingen køretøjer i dette impound",
|
||||
impoundAvailable = "Tilgængelig",
|
||||
impoundRetrievableByOwner = "Kan afhentes af ejer",
|
||||
impoundNoReason = "Ingen grund angivet",
|
||||
impoundVehicle = "Impound Køretøj",
|
||||
impoundReasonField = "Grund (valgfri)",
|
||||
impoundTime = "Impound Tid",
|
||||
impoundAvailableImmediately = "Tilgængelig øjeblikkeligt",
|
||||
impoundCost = "Pris",
|
||||
changeVehiclePlate = "Skift nummerplade",
|
||||
newPlate = "Ny nummerplade",
|
||||
search = "Søg efter navn eller nummerplade",
|
||||
noPrivateGarages = "Ingen private garager",
|
||||
editPrivateGarage = "Rediger privat garage",
|
||||
owners = "Ejer(e)",
|
||||
location = "Placering",
|
||||
next = "Næste",
|
||||
previous = "Tidligere",
|
||||
page = "Side",
|
||||
of = "af",
|
||||
show = "Vis",
|
||||
save = "Gem",
|
||||
edit = "Rediger",
|
||||
delete = "Slet",
|
||||
garageDeleteConfirm = "Er du sikker på, at du vil slette denne garage?",
|
||||
privGarageSearch = "Søg efter navn",
|
||||
garageUpdatedSuccess = "Garagen er blevet opdateret!",
|
||||
getCurrentCoords = "Hent aktuelle koordinater",
|
||||
identifier = "Identifikator",
|
||||
name = "Navn",
|
||||
noPlayers = "Der er ikke tilføjet nogen spillere",
|
||||
addPlayer = "Tilføj spiller",
|
||||
loadingVehicle = "Indlæser køretøj...",
|
||||
vehicleSetup = "Opsætning af køretøj",
|
||||
extras = "Ekstraudstyr",
|
||||
extra = "Ekstra",
|
||||
liveries = "Liveries",
|
||||
livery = "Livery",
|
||||
noLiveries = "Ingen liveries tilgængelige",
|
||||
noExtras = "Ingen ekstraudstyr til rådighed",
|
||||
none = "Ingen",
|
||||
vehicleNeedsService = "Needs Service",
|
||||
type = "Type",
|
||||
|
||||
-- Notifications
|
||||
insertVehicleTypeError = "Du kan kun opbevare %{value} i denne garage",
|
||||
insertVehiclePublicError = "You can't store job or gang vehicles in public garages",
|
||||
vehicleParkedSuccess = "Vehicle parked in garage",
|
||||
vehicleNotOwnedError = "You don't own this vehicle",
|
||||
vehicleNotOwnedByPlayerError = "Vehicle is not owned by a player",
|
||||
notEnoughMoneyError = "Du har ikke nok penge i din bank",
|
||||
vehicleNotYoursError = "Køretøj tilhører ikke dig",
|
||||
notJobOrGangVehicle = "Dette er ikke en %{value}",
|
||||
invalidGangError = "Du har ikke angivet en gyldig bande",
|
||||
invalidJobError = "Du har ikke givet et gyldigt job",
|
||||
notInsideVehicleError = "Du sidder ikke i et køretøj",
|
||||
vehicleAddedToGangGarageSuccess = "Køretøj tilføjet til %{value} bande garagen!",
|
||||
vehicleAddedToJobGarageSuccess = "Køretøj tilføjet til %{value} job garagen!",
|
||||
moveCloserToVehicleError = "Du skal være tættere på køretøjet",
|
||||
noVehiclesNearbyError = "Der er ingen køretøjer i nærheden",
|
||||
commandPermissionsError = "Du må ikke bruge denne kommando",
|
||||
actionNotAllowedError = "Du må ikke gøre dette",
|
||||
garageNameExistsError = "Garagenavn eksisterer allerede",
|
||||
vehiclePlateExistsError = "Nummerplade er allerede i brug",
|
||||
playerNotOnlineError = "Spiller er ikke online",
|
||||
vehicleTransferSuccess = "Køretøj overført til %{value}",
|
||||
vehicleTransferSuccessGeneral = "Køretøj blev overført",
|
||||
vehicleReceived = "Du modtog et køretøj med nummerpladen %{value}",
|
||||
vehicleImpoundSuccess = "Køretøj blev impounded",
|
||||
vehicleImpoundRemoveSuccess = "Køretøj blev fjernet fra impound",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "Køretøjet blev returneret til ejerens garage",
|
||||
garageCreatedSuccess = "Garage oprettet!",
|
||||
vehiclePlateUpdateSuccess = "Nummerplade ændret til %{value}",
|
||||
vehicleDeletedSuccess = "Køretøj blev slettet fra databasen %{value}",
|
||||
playerIsDead = "Du kan ikke gøre dette, mens du er død",
|
||||
|
||||
-- Commands
|
||||
cmdSetGangVehicle = "Tilføj dette køretøj til bandegaragen",
|
||||
cmdRemoveGangVehicle = "Fjern bandekøretøjet og returner det til ejeren",
|
||||
cmdSetJobVehicle = "Tilføj dette køretøj til jobgaragen",
|
||||
cmdRemoveJobVehicle = "Fjern jobkøretøjet og returner det til ejeren",
|
||||
cmdArgGangName = "Bande navn",
|
||||
cmdArgJobName = "Job navn",
|
||||
cmgArgMinGangRank = "Minimum bande rang",
|
||||
cmgArgMinJobRank = "Minimum jobrangering",
|
||||
cmdArgPlayerId = "Spiller-ID på ejeren",
|
||||
cmdImpoundVehicle = "Impound et køretøj",
|
||||
cmdChangePlate = "Skift nummerplade (Kun admin)",
|
||||
cmdDeleteVeh = "Fjern køretøj fra databasen (Kun admin)",
|
||||
cmdCreatePrivGarage = "Opret en privat garage til en spiller",
|
||||
|
||||
-- v3
|
||||
vehicleStoreError = "You cannot store this vehicle here",
|
||||
mins = "mins",
|
||||
noVehiclesAvailableToDrive = "There are no vehicles available to drive",
|
||||
}
|
143
resources/[carscripts]/jg-advancedgarages/locales/de.lua
Normal file
143
resources/[carscripts]/jg-advancedgarages/locales/de.lua
Normal file
|
@ -0,0 +1,143 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['de'] = {
|
||||
yes = "Ja",
|
||||
no = "Nein",
|
||||
garage = "Garage",
|
||||
jobGarage = "Jobgarage",
|
||||
gangGarage = "Ganggarage",
|
||||
player = "Spieler",
|
||||
impound = "Impound",
|
||||
inGarage = "In der Garage",
|
||||
notInGarage = "Nicht in der Garage",
|
||||
car = "Auto",
|
||||
air = "Flugzeug",
|
||||
sea = "Boot",
|
||||
fuel = "Tank",
|
||||
engine = "Motor",
|
||||
body = "Schaden",
|
||||
day = "Tag",
|
||||
days = "Tage",
|
||||
hour = "Stunde",
|
||||
hours = "Stunden",
|
||||
|
||||
-- User Interface
|
||||
noVehicles = "Keine Fahrzeuge in der Garage",
|
||||
vehicles = "Fahrzeug(e)",
|
||||
vehiclePlate = "Kennzeichen",
|
||||
vehicleNotInGarage = "Nicht in der Garage",
|
||||
vehicleTakeOut = "Ausparken",
|
||||
vehicleReturnAndTakeOut = "Einparken und Ausparken",
|
||||
vehicleReturnToOwnersGarage = "Zurück in die Privatgarage",
|
||||
transferToGarageOrPlayer = "Transfer in eine andere Garage oder an einen Spieler",
|
||||
transferToGarage = "Transfer in eine andere Garage",
|
||||
transferToPlayer = "Transfer zu einem Spieler",
|
||||
vehicleTransfer = "Transfer",
|
||||
noAvailableGarages = "Keine Verfügbaren Garagen",
|
||||
currentGarage = "Aktuelle Garage",
|
||||
noPlayersOnline = "Kein Spieler online",
|
||||
createPrivateGarage = "Private Garage erstellen",
|
||||
pgAlertHeadsUp = "Kopf hoch!",
|
||||
pgAlertText = "Garage wird erstellt und Fahrzeuge spawnen an der Stelle und in die Richtung die du schaust",
|
||||
garageName = "Garagenname",
|
||||
impoundInformation = "Impound Information",
|
||||
impoundedBy = "Beschlagnahmt von",
|
||||
impoundedReason = "Grund",
|
||||
impoundPlayerCanCollect = "Fahrzeug kann am Impound ausgelöst werden",
|
||||
impoundCollectionContact = "Kontaktiere %{value} um dein Fahrzeug auszulösen",
|
||||
impoundNoVehicles = "Keine Fahrzeuge im Impound",
|
||||
impoundAvailable = "Verfügbar",
|
||||
impoundRetrievableByOwner = "Kann vom Eigentümer ausgelöst werden",
|
||||
impoundNoReason = "Kein Grund angegeben",
|
||||
impoundVehicle = "Fahrzeug beschlagnahmen",
|
||||
impoundReasonField = "Grund (optional)",
|
||||
impoundTime = "Impound Zeit",
|
||||
impoundAvailableImmediately = "Sofort verfügbar",
|
||||
impoundCost = "Kosten",
|
||||
changeVehiclePlate = "Kennzeichen ändern",
|
||||
newPlate = "Neues Kennzeichen",
|
||||
search = "Suche nach Name oder Kennzeichen",
|
||||
noPrivateGarages = "Keine privaten Garagen",
|
||||
editPrivateGarage = "Private Garage bearbeiten",
|
||||
owners = "Eigentümer(n)",
|
||||
location = "Standort",
|
||||
next = "Weiter",
|
||||
previous = "Vorherige",
|
||||
page = "Seite",
|
||||
of = "von",
|
||||
show = "Anzeigen",
|
||||
save = "Speichern Sie",
|
||||
edit = "Bearbeiten",
|
||||
delete = "Löschen",
|
||||
garageDeleteConfirm = "Sind Sie sicher, dass Sie diese Garage löschen wollen?",
|
||||
privGarageSearch = "Suche nach Name",
|
||||
garageUpdatedSuccess = "Garage erfolgreich aktualisiert!",
|
||||
getCurrentCoords = "Aktuelle Koordinaten abrufen",
|
||||
identifier = "Kennung",
|
||||
name = "Name",
|
||||
noPlayers = "Es sind keine Spieler hinzugefügt worden",
|
||||
addPlayer = "Spieler hinzufügen",
|
||||
loadingVehicle = "Fahrzeug laden...",
|
||||
vehicleSetup = "Fahrzeug-Setup",
|
||||
extras = "Extras",
|
||||
extra = "Extra",
|
||||
liveries = "Livreen",
|
||||
livery = "Leihwagen",
|
||||
noLiveries = "Keine Lackierungen verfügbar",
|
||||
noExtras = "Keine Extras verfügbar",
|
||||
none = "Keine",
|
||||
vehicleNeedsService = "Needs Service",
|
||||
type = "Type",
|
||||
|
||||
-- Notifications
|
||||
insertVehicleTypeError = "Du kannst hier nur %{value} einparken",
|
||||
insertVehiclePublicError = "Du kannst keine Jobfahrzeuge in Öffentliche Garagen einparken",
|
||||
vehicleParkedSuccess = "Erfolgreich eingeparkt",
|
||||
vehicleNotOwnedError = "Du hast keinen Schlüssel",
|
||||
vehicleNotOwnedByPlayerError = "Kein registriertes Fahrzeug",
|
||||
notEnoughMoneyError = "Nicht genug Geld auf dem Konto",
|
||||
vehicleNotYoursError = "Fahrzeug gehört nicht dir",
|
||||
notJobOrGangVehicle = "Kein %{value} Fahrzeug",
|
||||
invalidGangError = "Keine gültige Gang",
|
||||
invalidJobError = "Kein gültiger Job",
|
||||
notInsideVehicleError = "Du sitzt nicht in einem Fahrzeug",
|
||||
vehicleAddedToGangGarageSuccess = "Fahrzeug zur %{value} Ganggarage hinzugefügt",
|
||||
vehicleAddedToJobGarageSuccess = "Fahrzeug zur %{value} Jobgarage hinzugefügt",
|
||||
moveCloserToVehicleError = "Du musst näher ans Fahrzeug",
|
||||
noVehiclesNearbyError = "Kein Fahrzeug in der nähe",
|
||||
commandPermissionsError = "Keine Berechtigung für diesen Command",
|
||||
actionNotAllowedError = "Keine Berechtigung",
|
||||
garageNameExistsError = "Garagenname exestiert bereites",
|
||||
vehiclePlateExistsError = "Kennzeichen exestiert bereites",
|
||||
playerNotOnlineError = "Spieler ist offline",
|
||||
vehicleTransferSuccess = "Fahrzeug an %{value} übertragen",
|
||||
vehicleTransferSuccessGeneral = "Fahrzeug erfolgreich übertragen",
|
||||
vehicleReceived = "Fahrzeug mit dem Kennzeichen %{value} erhalten",
|
||||
vehicleImpoundSuccess = "Fahrzeug erfolgreich beschlagnahmt",
|
||||
vehicleImpoundRemoveSuccess = "Fahrzeug wurde aus dem Impound ausgelöst",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "Fahrzeug zurück in der Eigentümergarage",
|
||||
garageCreatedSuccess = "Garage erfolgreich erstellt",
|
||||
vehiclePlateUpdateSuccess = "Kennzeichen wurde zu %{value} geändert",
|
||||
vehicleDeletedSuccess = "Fahrzeug aus der Datenbank %{value} gelöscht",
|
||||
playerIsDead = "Sie können dies nicht tun, während Sie tot sind",
|
||||
|
||||
-- Commands
|
||||
cmdSetGangVehicle = "Aktuelles Fahrzeug einer Ganggarage hinzufügen",
|
||||
cmdRemoveGangVehicle = "Setze das Gang-Fahrzeug wieder in den Besitz des Spielers",
|
||||
cmdSetJobVehicle = "Aktuelles Fahrzeug einer Jobgarage hinzufügen",
|
||||
cmdRemoveJobVehicle = "Setze das Job-Fahrzeug wieder in den Besitz des Spielers",
|
||||
cmdArgGangName = "Gangname",
|
||||
cmdArgJobName = "Jobname",
|
||||
cmgArgMinGangRank = "Minimaler Gangrang",
|
||||
cmgArgMinJobRank = "Mindestjobrang",
|
||||
cmdArgPlayerId = "Spieler ID vom Eigentümer",
|
||||
cmdImpoundVehicle = "Fahrzeug beschlagnahmen",
|
||||
cmdChangePlate = "Kennzeichen ändern (Admin only)",
|
||||
cmdDeleteVeh = "Fahrzeug aus der Datenbank löschen (Admin only)",
|
||||
cmdCreatePrivGarage = "Private Garage erstellen",
|
||||
|
||||
-- v3
|
||||
vehicleStoreError = "You cannot store this vehicle here",
|
||||
mins = "mins",
|
||||
noVehiclesAvailableToDrive = "There are no vehicles available to drive",
|
||||
}
|
142
resources/[carscripts]/jg-advancedgarages/locales/en.lua
Normal file
142
resources/[carscripts]/jg-advancedgarages/locales/en.lua
Normal file
|
@ -0,0 +1,142 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['en'] = {
|
||||
yes = "Yes",
|
||||
no = "No",
|
||||
garage = "Garage",
|
||||
jobGarage = "Job Garage",
|
||||
gangGarage = "Gang Garage",
|
||||
player = "Player",
|
||||
impound = "Impound",
|
||||
inGarage = "In garage",
|
||||
notInGarage = "Not in garage",
|
||||
car = "Car",
|
||||
air = "Air",
|
||||
sea = "Sea",
|
||||
fuel = "Fuel",
|
||||
engine = "Engine",
|
||||
body = "Body",
|
||||
day = "day",
|
||||
days = "days",
|
||||
hour = "hour",
|
||||
hours = "hours",
|
||||
mins = "mins",
|
||||
|
||||
-- User Interface
|
||||
noVehicles = "There are no vehicles in this garage",
|
||||
noVehiclesAvailableToDrive = "There are no vehicles available to drive",
|
||||
vehicles = "vehicle(s)",
|
||||
vehiclePlate = "Vehicle Plate",
|
||||
vehicleNotInGarage = "Vehicle has been left out",
|
||||
vehicleTakeOut = "Drive",
|
||||
vehicleReturnAndTakeOut = "Return & Drive",
|
||||
vehicleReturnToOwnersGarage = "Return to Owner's Garage",
|
||||
transferToGarageOrPlayer = "Transfer to a Garage or Player",
|
||||
transferToGarage = "Transfer to a Garage",
|
||||
transferToPlayer = "Transfer to a Player",
|
||||
vehicleTransfer = "Transfer",
|
||||
noAvailableGarages = "No available garages",
|
||||
currentGarage = "Current garage",
|
||||
noPlayersOnline = "No players online",
|
||||
createPrivateGarage = "Create Private Garage",
|
||||
pgAlertHeadsUp = "Heads up!",
|
||||
pgAlertText = "The garage will be created and vehicles will spawn in the exact location and direction are you are currently standing.",
|
||||
garageName = "Garage Name",
|
||||
impoundInformation = "Impound Information",
|
||||
impoundedBy = "Impounded by",
|
||||
impoundedReason = "Reason",
|
||||
impoundPlayerCanCollect = "You can collect your vehicle from the impound.",
|
||||
impoundCollectionContact = "Please contact %{value} in order to collect your vehicle.",
|
||||
impoundNoVehicles = "There are no vehicles in the impound",
|
||||
impoundAvailable = "Available",
|
||||
impoundRetrievableByOwner = "Retrievable by owner",
|
||||
impoundNoReason = "No reason provided",
|
||||
impoundVehicle = "Impound Vehicle",
|
||||
impoundReasonField = "Reason (optional)",
|
||||
impoundTime = "Impound Time",
|
||||
impoundAvailableImmediately = "Available immediately",
|
||||
impoundCost = "Cost",
|
||||
changeVehiclePlate = "Change Vehicle Plate",
|
||||
newPlate = "New Plate",
|
||||
search = "Search by name or plate",
|
||||
noPrivateGarages = "No private garages",
|
||||
editPrivateGarage = "Edit Private Garage",
|
||||
owners = "Owner(s)",
|
||||
location = "Location",
|
||||
next = "Next",
|
||||
previous = "Previous",
|
||||
page = "Page",
|
||||
of = "of",
|
||||
show = "Show",
|
||||
save = "Save",
|
||||
edit = "Edit",
|
||||
delete = "Delete",
|
||||
garageDeleteConfirm = "Are you sure you want to delete this garage?",
|
||||
privGarageSearch = "Search by name",
|
||||
garageUpdatedSuccess = "Garage successfully updated!",
|
||||
getCurrentCoords = "Get current coordinates",
|
||||
identifier = "Identifier",
|
||||
name = "Name",
|
||||
noPlayers = "There are no players added",
|
||||
addPlayer = "Add player",
|
||||
loadingVehicle = "Loading vehicle...",
|
||||
vehicleSetup = "Vehicle Setup",
|
||||
extras = "Extras",
|
||||
extra = "Extra",
|
||||
liveries = "Liveries",
|
||||
livery = "Livery",
|
||||
noLiveries = "No liveries available",
|
||||
noExtras = "No extras available",
|
||||
none = "None",
|
||||
vehicleNeedsService = "Needs Service",
|
||||
type = "Type",
|
||||
goInside = "Go inside",
|
||||
|
||||
-- Notifications
|
||||
insertVehicleTypeError = "You can only store %{value} vehicle types in this garage",
|
||||
insertVehiclePublicError = "You can't store job or gang vehicles in public garages",
|
||||
vehicleParkedSuccess = "Vehicle parked in garage",
|
||||
vehicleNotOwnedError = "You don't own this vehicle",
|
||||
vehicleNotOwnedByPlayerError = "Vehicle is not owned by a player",
|
||||
notEnoughMoneyError = "You don't have enough money in your bank",
|
||||
vehicleNotYoursError = "Vehicle does not belong to you",
|
||||
notJobOrGangVehicle = "This is not a %{value} vehicle",
|
||||
invalidGangError = "You have not provided a valid gang",
|
||||
invalidJobError = "You have not provided a valid job",
|
||||
notInsideVehicleError = "You are not sat in a vehicle",
|
||||
vehicleAddedToGangGarageSuccess = "Vehicle added to the %{value} gang garage!",
|
||||
vehicleAddedToJobGarageSuccess = "Vehicle added to the %{value} job garage!",
|
||||
moveCloserToVehicleError = "You need to move closer to the vehicle",
|
||||
noVehiclesNearbyError = "There are no vehicles nearby",
|
||||
commandPermissionsError = "You are not allowed to use this command",
|
||||
actionNotAllowedError = "You are not allowed to do this",
|
||||
garageNameExistsError = "Garage name already exists",
|
||||
vehiclePlateExistsError = "Vehicle plate is already in use",
|
||||
playerNotOnlineError = "Player is not online",
|
||||
vehicleTransferSuccess = "Vehicle transferred to %{value}",
|
||||
vehicleTransferSuccessGeneral = "Vehicle successfully transferred",
|
||||
vehicleReceived = "You recieved a vehicle with the plate %{value}",
|
||||
vehicleImpoundSuccess = "Vehicle successfully impounded",
|
||||
vehicleImpoundRemoveSuccess = "Vehicle removed from impound",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "Vehicle returned to owner's garage",
|
||||
garageCreatedSuccess = "Garage successfully created!",
|
||||
vehiclePlateUpdateSuccess = "Vehicle plate set to %{value}",
|
||||
vehicleDeletedSuccess = "Vehicle deleted from database %{value}",
|
||||
playerIsDead = "You cannot do this while you are dead",
|
||||
vehicleStoreError = "You cannot store this vehicle here",
|
||||
|
||||
-- Commands
|
||||
cmdSetGangVehicle = "Add current vehicle to a gang garage",
|
||||
cmdRemoveGangVehicle = "Set gang vehicle back to player owned",
|
||||
cmdSetJobVehicle = "Add current vehicle to a job garage",
|
||||
cmdRemoveJobVehicle = "Set job vehicle back to player owned",
|
||||
cmdArgGangName = "Gang name",
|
||||
cmdArgJobName = "Job name",
|
||||
cmgArgMinGangRank = "Minimum gang rank",
|
||||
cmgArgMinJobRank = "Minimum job rank",
|
||||
cmdArgPlayerId = "Player ID of new owner",
|
||||
cmdImpoundVehicle = "Impound a vehicle",
|
||||
cmdChangePlate = "Change vehicle plate (Admin only)",
|
||||
cmdDeleteVeh = "Delete vehicle from database (Admin only)",
|
||||
cmdCreatePrivGarage = "Create a private garage for a player",
|
||||
}
|
141
resources/[carscripts]/jg-advancedgarages/locales/es.lua
Normal file
141
resources/[carscripts]/jg-advancedgarages/locales/es.lua
Normal file
|
@ -0,0 +1,141 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['es'] = {
|
||||
yes = "Si",
|
||||
no = "No",
|
||||
garage = "Garaje",
|
||||
jobGarage = "Garaje Laboral",
|
||||
gangGarage = "Garaje de Banda/Pandilla",
|
||||
player = "Jugador",
|
||||
impound = "Deposito",
|
||||
inGarage = "En Garaje",
|
||||
notInGarage = "No en Garaje",
|
||||
car = "Coche",
|
||||
air = "Aereo",
|
||||
sea = "Maritimo",
|
||||
fuel = "Combustible",
|
||||
engine = "Motor",
|
||||
body = "Carroceria",
|
||||
day = "dia",
|
||||
days = "dias",
|
||||
hour = "hora",
|
||||
hours = "horas",
|
||||
|
||||
-- User Interface
|
||||
noVehicles = "No hay vehículos en este garaje.",
|
||||
vehicles = "Vehículo(s)",
|
||||
vehiclePlate = "Matrícula del Vehículo",
|
||||
vehicleNotInGarage = "Vehículo no en garaje",
|
||||
vehicleTakeOut = "Conducir",
|
||||
vehicleReturnAndTakeOut = "Devuelve y Conduce",
|
||||
vehicleReturnToOwnersGarage = "Devolver al garaje del propietario",
|
||||
transferToGarageOrPlayer = "Transferir a Garaje o Jugador",
|
||||
transferToGarage = "Transferir a un Garaje",
|
||||
transferToPlayer = "Transferir a un Jugador",
|
||||
vehicleTransfer = "Transferir",
|
||||
noAvailableGarages = "No hay garajes disponibles",
|
||||
currentGarage = "Garaje Actual",
|
||||
noPlayersOnline = "No hay jugadores en línea",
|
||||
createPrivateGarage = "Crear Garaje Privado",
|
||||
pgAlertHeadsUp = "Advertencia!",
|
||||
pgAlertText = "Se creará el garaje y los vehículos aparecerán en la ubicación y dirección exactas en las que se encuentra actualmente.",
|
||||
garageName = "Nombre del Garaje",
|
||||
impoundInformation = "Información de Incautacion",
|
||||
impoundedBy = "Incautado por ",
|
||||
impoundedReason = "Razón",
|
||||
impoundPlayerCanCollect = "Puedes recoger tu vehículo en el depósito.",
|
||||
impoundCollectionContact = "Haga el favor de contactar con %{value} para poder reclamar su vehiculo.",
|
||||
impoundNoVehicles = "No hay vehículos en el depósito.",
|
||||
impoundAvailable = "Disponible",
|
||||
impoundRetrievableByOwner = "Recuperable por el propietario",
|
||||
impoundNoReason = "No se proporcionó ninguna razón",
|
||||
impoundVehicle = "Incautar Vehiculo",
|
||||
impoundReasonField = "Razon (opcional)",
|
||||
impoundTime = "Tiempo de Incautacion",
|
||||
impoundAvailableImmediately = "Disponible inmediatamente",
|
||||
impoundCost = "Coste",
|
||||
changeVehiclePlate = "Cambio de Matricula",
|
||||
newPlate = "Matricula Nueva",
|
||||
search = "Buscar por nombre o placa",
|
||||
noPrivateGarages = "Sin garajes privados",
|
||||
editPrivateGarage = "Editar Garaje Privado",
|
||||
owners = "Propietario(s)",
|
||||
location = "Ubicación",
|
||||
next = "Siguiente",
|
||||
previous = "Anterior",
|
||||
page = "Página",
|
||||
of = "de",
|
||||
show = "Mostrar",
|
||||
save = "Guardar",
|
||||
edit = "Editar",
|
||||
delete = "Borrar",
|
||||
garageDeleteConfirm = "¿Estás seguro de que quieres borrar este garaje?",
|
||||
privGarageSearch = "Buscar por nombre",
|
||||
garageUpdatedSuccess = "¡Garaje actualizado con éxito!",
|
||||
getCurrentCoords = "Obtener coordenadas actuales",
|
||||
identifier = "Identificador",
|
||||
name = "Nombre",
|
||||
noPlayers = "No hay jugadores añadidos",
|
||||
addPlayer = "Añadir jugador",
|
||||
loadingVehicle = "Cargando vehículo...",
|
||||
vehicleSetup = "Configuración del vehículo",
|
||||
extras = "Extras",
|
||||
extra = "Extra",
|
||||
liveries = "Diseños",
|
||||
livery = "Vinilo",
|
||||
noLiveries = "No hay vinilos disponibles",
|
||||
noExtras = "No hay extras disponibles",
|
||||
none = "Ninguno",
|
||||
vehicleNeedsService = "Needs Service",
|
||||
type = "Type",
|
||||
|
||||
-- Notifications
|
||||
insertVehicleTypeError = "Solo puedes almacenar vehículos de tipo %{value} en este garaje",
|
||||
insertVehiclePublicError = "No puede almacenar vehículos de trabajo o de banda en garajes públicos",
|
||||
vehicleParkedSuccess = "Vehículo estacionado en garaje",
|
||||
vehicleNotOwnedError = "No eres dueño de este vehículo",
|
||||
vehicleNotOwnedByPlayerError = "El vehículo no es propiedad de un jugador.",
|
||||
notEnoughMoneyError = "No tienes suficiente dinero en tu banco",
|
||||
vehicleNotYoursError = "El vehículo no te pertenece",
|
||||
notJobOrGangVehicle = "Este no es un vehículo de %{value}",
|
||||
invalidGangError = "No ha proporcionado una banda válida",
|
||||
invalidJobError = "No ha proporcionado un trabajo válido",
|
||||
notInsideVehicleError = "No estás sentado en un vehículo.",
|
||||
vehicleAddedToGangGarageSuccess = "Vehículo agregado al garaje de banda de %{value}!",
|
||||
vehicleAddedToJobGarageSuccess = "Vehículo agregado al taller de trabajo de %{value}!",
|
||||
moveCloserToVehicleError = "Necesitas acercarte al vehículo.",
|
||||
noVehiclesNearbyError = "No hay vehículos cerca.",
|
||||
commandPermissionsError = "No tienes permiso para usar este comando.",
|
||||
actionNotAllowedError = "No tienes permitido hacer esto.",
|
||||
garageNameExistsError = "El nombre del garaje ya existe",
|
||||
vehiclePlateExistsError = "La placa del vehículo ya está en uso",
|
||||
playerNotOnlineError = "El jugador no está en línea",
|
||||
vehicleTransferSuccess = "Vehículo transferido a %{value}",
|
||||
vehicleTransferSuccessGeneral = "Vehículo transferido con éxito",
|
||||
vehicleReceived = "Recibiste un vehículo con matricula %{value}",
|
||||
vehicleImpoundSuccess = "Vehículo incautado con éxito",
|
||||
vehicleImpoundRemoveSuccess = "Vehículo retirado del depósito",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "Vehículo devuelto al garaje del propietario.",
|
||||
garageCreatedSuccess = "¡Garaje creado con éxito!",
|
||||
vehiclePlateUpdateSuccess = "Matrícula del vehículo establecida a %{value}",
|
||||
vehicleDeletedSuccess = "Vehículo eliminado de la base de datos %{value}",
|
||||
playerIsDead = "No puedes hacer esto mientras estás muerto",
|
||||
|
||||
-- Commands
|
||||
cmdSetGangVehicle = "Agregar el vehículo actual a un garaje de banda",
|
||||
cmdRemoveGangVehicle = "Devolver el vehículo de la banda a propiedad del jugador",
|
||||
cmdSetJobVehicle = "Agregar vehículo actual a un taller de trabajo",
|
||||
cmdRemoveJobVehicle = "Devolver el vehículo de trabajo a propiedad del jugador",
|
||||
cmdArgGangName = "Nombre de Banda",
|
||||
cmdArgJobName = "Nombre de Trabajo",
|
||||
cmdArgPlayerId = "ID de Jugador del nuevo propietario",
|
||||
cmdImpoundVehicle = "Incautar un Vehículo",
|
||||
cmdChangePlate = "Cambiar Matricula del Vehiculo (Solo Administracion)",
|
||||
cmdDeleteVeh = "Eliminar vehículo de la base de datos (Solo Administracion)",
|
||||
cmdCreatePrivGarage = "Crea un garaje privado para un jugador.",
|
||||
|
||||
-- v3
|
||||
vehicleStoreError = "You cannot store this vehicle here",
|
||||
mins = "mins",
|
||||
noVehiclesAvailableToDrive = "There are no vehicles available to drive",
|
||||
}
|
143
resources/[carscripts]/jg-advancedgarages/locales/fi.lua
Normal file
143
resources/[carscripts]/jg-advancedgarages/locales/fi.lua
Normal file
|
@ -0,0 +1,143 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['fi'] = {
|
||||
yes = "Kyllä",
|
||||
no = "Ei",
|
||||
garage = "Autotalli",
|
||||
jobGarage = "Työn Autotalli",
|
||||
gangGarage = "Jengin Autotalli",
|
||||
player = "Pelaaja",
|
||||
impound = "Varikko",
|
||||
inGarage = "Autotallissa",
|
||||
notInGarage = "Ulkona tallista",
|
||||
car = "Maa Ajoneuvo",
|
||||
air = "Ilma Ajoneuvo",
|
||||
sea = "Vesi Ajoneuvo",
|
||||
fuel = "Bensa",
|
||||
engine = "Moottori",
|
||||
body = "Keho",
|
||||
day = "päivä",
|
||||
days = "päivät",
|
||||
hour = "tunti",
|
||||
hours = "tunnit",
|
||||
|
||||
-- User Interface
|
||||
noVehicles = "Ei ajoneuvoja tallissa",
|
||||
vehicles = "Ajoneuvot",
|
||||
vehiclePlate = "Rekisterikilpi",
|
||||
vehicleNotInGarage = "Ajoneuvo ei ole tallissa",
|
||||
vehicleTakeOut = "Aja",
|
||||
vehicleReturnAndTakeOut = "Palauta talliin ja aja",
|
||||
vehicleReturnToOwnersGarage = "Palauta omistajan talliin",
|
||||
transferToGarageOrPlayer = "Siirrä autotalliin tai pelaajalle",
|
||||
transferToGarage = "Siirrä autotalliin",
|
||||
transferToPlayer = "Siirrä pelaajalle",
|
||||
vehicleTransfer = "Siirrä",
|
||||
noAvailableGarages = "Ei vapaita autotalleja",
|
||||
currentGarage = "Tämän hetkinen talli",
|
||||
noPlayersOnline = "Ei pelaajia kaupungissa",
|
||||
createPrivateGarage = "Luo yksityinen autotalli",
|
||||
pgAlertHeadsUp = "Heads up!",
|
||||
pgAlertText = "The garage will be created and vehicles will spawn in the exact location and direction are you are currently standing.",
|
||||
garageName = "Autotallin nimi",
|
||||
impoundInformation = "Varkki tiedot",
|
||||
impoundedBy = "Varikoijja",
|
||||
impoundedReason = "Syy",
|
||||
impoundPlayerCanCollect = "Voit hakea ajoneuvosi varikolta.",
|
||||
impoundCollectionContact = "Ota yhteyttä %{value} saadaksesi ajoneuvon takaisin.",
|
||||
impoundNoVehicles = "Ei ajoneivoja varikolla",
|
||||
impoundAvailable = "Vapaa",
|
||||
impoundRetrievableByOwner = "Omistaja voi hakea",
|
||||
impoundNoReason = "Syytä ei ole annettu",
|
||||
impoundVehicle = "Takavarikoi ajoneuvo",
|
||||
impoundReasonField = "Syy",
|
||||
impoundTime = "Varikoinnin pituus",
|
||||
impoundAvailableImmediately = "Saatavilla heti",
|
||||
impoundCost = "Hinta",
|
||||
changeVehiclePlate = "Vaihda ajoneuvon kilpeä",
|
||||
newPlate = "Uusi kilpi",
|
||||
search = "Hae nimellä tai ajoneuvokilven mukaan",
|
||||
noPrivateGarages = "Ei yksityisiä autotalleja",
|
||||
editPrivateGarage = "Edit Yksityinen autotalli",
|
||||
owners = "Omistaja(t)",
|
||||
location = "Sijainti",
|
||||
next = "Seuraava",
|
||||
previous = "Edellinen",
|
||||
page = "Sivu",
|
||||
of = "of",
|
||||
show = "Näytä",
|
||||
save = "Tallenna",
|
||||
edit = "Muokkaa",
|
||||
delete = "Poista",
|
||||
garageDeleteConfirm = "Haluatko varmasti poistaa tämän autotallin?",
|
||||
privGarageSearch = "Haku nimen mukaan",
|
||||
garageUpdatedSuccess = "Autotalli onnistuneesti päivitetty!",
|
||||
getCurrentCoords = "Hae nykyiset koordinaatit",
|
||||
identifier = "Tunniste",
|
||||
name = "Nimi",
|
||||
noPlayers = "Pelaajia ei ole lisätty",
|
||||
addPlayer = "Lisää pelaaja",
|
||||
loadingVehicle = "Ajoneuvon lastaus...",
|
||||
vehicleSetup = "Ajoneuvon asennus",
|
||||
extras = "Lisävarusteet",
|
||||
extra = "Extra",
|
||||
liveries = "maalaukset",
|
||||
livery = "maksullisuus",
|
||||
noLiveries = "Maalauksia ei ole saatavilla",
|
||||
noExtras = "Ei lisävarusteita saatavilla",
|
||||
none = "Ei ole",
|
||||
vehicleNeedsService = "Needs Service",
|
||||
type = "Type",
|
||||
|
||||
-- Notifications
|
||||
insertVehicleTypeError = "Voit ainoastaan tallettaa %{value} ajoneuvo tyyppejä tähän talliin",
|
||||
insertVehiclePublicError = "Et voi tallettaa työn ajoneuvoja julkisiin talleihin",
|
||||
vehicleParkedSuccess = "Ajoneuvo parkkeerattu talliin",
|
||||
vehicleNotOwnedError = "Et omista tätä autoa",
|
||||
vehicleNotOwnedByPlayerError = "Pelaaja ei omista tätä autoa",
|
||||
notEnoughMoneyError = "Ei tarpeeksi rahaa pankissa",
|
||||
vehicleNotYoursError = "Et omista ajoneuvoa",
|
||||
notJobOrGangVehicle = "Tämä ei ole %{value} ajoneuvo",
|
||||
invalidGangError = "You have not provided a valid gang",
|
||||
invalidJobError = "You have not provided a valid job",
|
||||
notInsideVehicleError = "Et ole ajoneuvossa",
|
||||
vehicleAddedToGangGarageSuccess = "Vehicle added to the %{value} gang garage!",
|
||||
vehicleAddedToJobGarageSuccess = "Vehicle added to the %{value} job garage!",
|
||||
moveCloserToVehicleError = "Mene lähemmäs ajoneuvoa",
|
||||
noVehiclesNearbyError = "Ei autoja lähellä",
|
||||
commandPermissionsError = "Et saa käyttää tätä komentoa",
|
||||
actionNotAllowedError = "Et saa tehdä tätä",
|
||||
garageNameExistsError = "Tallin nimi on jo olemassa",
|
||||
vehiclePlateExistsError = "Ajoneuvon kilpi on jo käytössä",
|
||||
playerNotOnlineError = "Pelaaja ei ole kaupungissa",
|
||||
vehicleTransferSuccess = "Ajoneuvo on siirretty: %{value}",
|
||||
vehicleTransferSuccessGeneral = "Ajoneuvo on onnistuneesti siirretty",
|
||||
vehicleReceived = "Sait ajoneuvon kilvellä %{value}",
|
||||
vehicleImpoundSuccess = "Ajoneuvo on onnistuneesti Takavarikoitu",
|
||||
vehicleImpoundRemoveSuccess = "Ajoneuvo on poistettu takavatikolta",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "Ajoneuvo on palautettu omistajan talliin",
|
||||
garageCreatedSuccess = "Autotalli onnistuneesti luotu!",
|
||||
vehiclePlateUpdateSuccess = "Ajoneuvon kilpi on laitettu %{value}",
|
||||
vehicleDeletedSuccess = "Ajoneuvo on poistettu databasesta %{value}",
|
||||
playerIsDead = "Et voi tehdä tätä, kun olet kuollut",
|
||||
|
||||
-- Commands
|
||||
cmdSetGangVehicle = "Add current vehicle to a gang garage",
|
||||
cmdRemoveGangVehicle = "Set gang vehicle back to player owned",
|
||||
cmdSetJobVehicle = "Add current vehicle to a job garage",
|
||||
cmdRemoveJobVehicle = "Set job vehicle back to player owned",
|
||||
cmdArgGangName = "Gang name",
|
||||
cmdArgJobName = "Job name",
|
||||
cmgArgMinGangRank = "Minimum gang rank",
|
||||
cmgArgMinJobRank = "Minimum job rank",
|
||||
cmdArgPlayerId = "Player ID of new owner",
|
||||
cmdImpoundVehicle = "Impound a vehicle",
|
||||
cmdChangePlate = "Change vehicle plate (Admin only)",
|
||||
cmdDeleteVeh = "Delete vehicle from database (Admin only)",
|
||||
cmdCreatePrivGarage = "Create a private garage for a player",
|
||||
|
||||
-- v3
|
||||
vehicleStoreError = "You cannot store this vehicle here",
|
||||
mins = "mins",
|
||||
noVehiclesAvailableToDrive = "There are no vehicles available to drive",
|
||||
}
|
142
resources/[carscripts]/jg-advancedgarages/locales/fr.lua
Normal file
142
resources/[carscripts]/jg-advancedgarages/locales/fr.lua
Normal file
|
@ -0,0 +1,142 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['fr'] = {
|
||||
yes = "Oui",
|
||||
no = "Non",
|
||||
garage = "Garage",
|
||||
jobGarage = "Garage métier",
|
||||
gangGarage = "Garage Gang",
|
||||
player = "Joueurs",
|
||||
impound = "Fourriere",
|
||||
inGarage = "Dans le garage",
|
||||
notInGarage = "Pas dans le garage",
|
||||
car = "Voiture",
|
||||
air = "Air",
|
||||
sea = "Mer",
|
||||
fuel = "Essence",
|
||||
engine = "Moteur",
|
||||
body = "Carroserie",
|
||||
day = "Jour",
|
||||
days = "Jours",
|
||||
hour = "Heure",
|
||||
hours = "Heures",
|
||||
mins = "mins",
|
||||
|
||||
-- User Interface
|
||||
noVehicles = "Il n'y a aucun véhicule dans ce garage",
|
||||
noVehiclesAvailableToDrive = "Aucun véhicule n'est disponible pour conduire",
|
||||
vehicles = "Voiture(s)",
|
||||
vehiclePlate = "Plaque du véhicule",
|
||||
vehicleNotInGarage = "Le véhicule a été laissé de côté",
|
||||
vehicleTakeOut = "Conduire",
|
||||
vehicleReturnAndTakeOut = "Retour et conduite",
|
||||
vehicleReturnToOwnersGarage = "Retour au garage du propriétaire",
|
||||
transferToGarageOrPlayer = "Transfert vers un garage ou un joueur",
|
||||
transferToGarage = "Transfert vers un garage",
|
||||
transferToPlayer = "Transférer vers un joueur",
|
||||
vehicleTransfer = "Transfert",
|
||||
noAvailableGarages = "Aucun garage disponible",
|
||||
currentGarage = "Garage actuel",
|
||||
noPlayersOnline = "Aucun joueur en ligne",
|
||||
createPrivateGarage = "Créer un garage privé",
|
||||
pgAlertHeadsUp = "Attention !",
|
||||
pgAlertText = "Le garage sera créé et les véhicules apparaîtront à l'emplacement et dans la direction exacts où vous vous trouvez actuellement.",
|
||||
garageName = "Nom du garage",
|
||||
impoundInformation = "Informations de mise en fourrière",
|
||||
impoundedBy = "Mise en fourrière par",
|
||||
impoundedReason = "Raison",
|
||||
impoundPlayerCanCollect = "Vous pouvez récupérer votre véhicule à la fourrière.",
|
||||
impoundCollectionContact = "Veuillez contacter %{value} afin de récupérer votre véhicule.",
|
||||
impoundNoVehicles = "Il n'y a aucun véhicule dans la fourrière",
|
||||
impoundAvailable = "Disponible",
|
||||
impoundRetrievableByOwner = "Récupérable par le propriétaire",
|
||||
impoundNoReason = "Aucune raison fournie",
|
||||
impoundVehicle = "Véhicule mis en fourrière",
|
||||
impoundReasonField = "Raison (facultatif)",
|
||||
impoundTime = "Durée de mise en fourrière",
|
||||
impoundAvailableImmediately = "Disponible immédiatement",
|
||||
impoundCost = "Coût",
|
||||
changeVehiclePlate = "Changer la plaque du véhicule",
|
||||
newPlate = "Nouvelle plaque",
|
||||
search = "Recherche par nom ou plaque",
|
||||
noPrivateGarages = "Pas de garages privés",
|
||||
editPrivateGarage = "Modifier le garage privé",
|
||||
owners = "Propriétaire(s)",
|
||||
location = "Location",
|
||||
next = "Suivant",
|
||||
previous = "Precedent",
|
||||
page = "Page",
|
||||
of = "de",
|
||||
show = "Montrer",
|
||||
save = "Sauvegarde",
|
||||
edit = "Editer",
|
||||
delete = "Supprimer",
|
||||
garageDeleteConfirm = "Etes-vous sûr de vouloir supprimer ce garage ?",
|
||||
privGarageSearch = "Rechercher par nom",
|
||||
garageUpdatedSuccess = "Garage mis à jour avec succès !",
|
||||
getCurrentCoords = "Obtenir les coordonnées actuelles",
|
||||
identifier = "Identifiant",
|
||||
name = "Nom",
|
||||
noPlayers = "Aucun joueur n'a été ajouté",
|
||||
addPlayer = "Ajouter un joueur",
|
||||
chargementVehicle = "Chargement du véhicule...",
|
||||
vehicleSetup = "Configuration du véhicule",
|
||||
extras = "Suppléments",
|
||||
extra = "Supplément",
|
||||
liveries = "Livrées",
|
||||
livery = "Livrée",
|
||||
noLiveries = "Aucune livrée disponible",
|
||||
noExtras = "Aucun extra disponible",
|
||||
none = "Aucun(e)",
|
||||
vehicleNeedsService = "Besoin de services",
|
||||
type = "Genre",
|
||||
goInside = "Aller à l'intérieur",
|
||||
|
||||
-- Notifications
|
||||
insertVehicleTypeError = "Vous ne pouvez stocker que %{value} types de véhicules dans ce garage",
|
||||
insertVehiclePublicError = "Vous ne pouvez pas stocker de véhicules de travail ou de gang dans les garages publics",
|
||||
vehicleParkedSuccess = "Véhicule garé dans le garage",
|
||||
vehicleNotOwnedError = "Vous n'êtes pas propriétaire de ce véhicule",
|
||||
vehicleNotOwnedByPlayerError = "Le véhicule n'appartient à aucun joueur",
|
||||
notEnoughMoneyError = "Vous n'avez pas assez d'argent en banque",
|
||||
vehicleNotYoursError = "Le véhicule ne vous appartient pas",
|
||||
notJobOrGangVehicle = "Ceci n'est pas un véhicule %{value}",
|
||||
invalidGangError = "Vous n'avez pas fourni de gang valide",
|
||||
invalidJobError = "Vous n'avez pas fourni d'emploi valide",
|
||||
notInsideVehicleError = "Vous n'êtes pas assis dans un véhicule",
|
||||
vehicleAddedToGangGarageSuccess = "Véhicule ajouté au garage du gang %{value} !",
|
||||
vehicleAddedToJobGarageSuccess = "Véhicule ajouté au garage de travail %{value} !",
|
||||
moveCloserToVehicleError = "Vous devez vous rapprocher du véhicule",
|
||||
noVehiclesNearbyError = "Il n'y a aucun véhicule à proximité",
|
||||
commandPermissionsError = "Vous n'êtes pas autorisé à utiliser cette commande",
|
||||
actionNotAllowedError = "Vous n'êtes pas autorisé à faire cela",
|
||||
garageNameExistsError = "Le nom du garage existe déjà",
|
||||
VehiclePlateExistsError = "La plaque du véhicule est déjà utilisée",
|
||||
playerNotOnlineError = "Le joueur n'est pas en ligne",
|
||||
vehicleTransferSuccess = "Véhicule transféré à %{value}",
|
||||
vehicleTransferSuccessGeneral = "Véhicule transféré avec succès",
|
||||
vehicleReceived = "Vous avez reçu un véhicule avec la plaque %{value}",
|
||||
vehicleImpoundSuccess = "Véhicule mis en fourrière avec succès",
|
||||
vehicleImpoundRemoveSuccess = "Véhicule retiré de la fourrière",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "Véhicule restitué au garage du propriétaire",
|
||||
garageCreatedSuccess = "Garage créé avec succès !",
|
||||
vehiclePlateUpdateSuccess = "Plaque du véhicule réglée sur %{value}",
|
||||
vehicleDeletedSuccess = "Véhicule supprimé de la base de données %{value}",
|
||||
playerIsDead = "Vous ne pouvez pas faire ça tant que vous êtes mort",
|
||||
vehicleStoreError = "Vous ne pouvez pas stocker ce véhicule ici",
|
||||
|
||||
-- Commands
|
||||
cmdSetGangVehicle = "Ajouter le véhicule actuel à un garage collectif",
|
||||
cmdRemoveGangVehicle = "Remettre le véhicule du gang comme appartenant au joueur",
|
||||
cmdSetJobVehicle = "Ajouter le véhicule actuel à un garage",
|
||||
cmdRemoveJobVehicle = "Remettre le véhicule de travail comme appartenant au joueur",
|
||||
cmdArgGangName = "Nom du gang",
|
||||
cmdArgJobName = "Nom du travail",
|
||||
cmgArgMinGangRank = "Rang minimum du gang",
|
||||
cmgArgMinJobRank = "Classement minimum du poste",
|
||||
cmdArgPlayerId = "ID du joueur du nouveau propriétaire",
|
||||
cmdImpoundVehicle = "Mise en fourrière d'un véhicule",
|
||||
cmdChangePlate = "Changer la plaque du véhicule (Administrateur uniquement)",
|
||||
cmdDeleteVeh = "Supprimer le véhicule de la base de données (Administrateur uniquement)",
|
||||
cmdCreatePrivGarage = "Créer un garage privé pour un joueur",
|
||||
}
|
143
resources/[carscripts]/jg-advancedgarages/locales/hu.lua
Normal file
143
resources/[carscripts]/jg-advancedgarages/locales/hu.lua
Normal file
|
@ -0,0 +1,143 @@
|
|||
Locales = Locales or {} -- Translated by: PSYCHO#0281 (psycho0281)
|
||||
|
||||
Locales['hu'] = { -- Erre a sorra is figyelj oda!!! Ez nem en.lua, hanem hu.lua, ezt fxmanifest, vagy resource lua-ban is említeni kell :)
|
||||
yes = "Igen",
|
||||
no = "Nem",
|
||||
garage = "Garázs",
|
||||
jobGarage = "Munka garázs",
|
||||
gangGarage = "Banda garázs",
|
||||
player = "Játékos",
|
||||
impound = "Lefoglalt",
|
||||
inGarage = "Garázsban",
|
||||
notInGarage = "Nincs a garázsban",
|
||||
car = "Autó",
|
||||
air = "Repülő",
|
||||
sea = "Hajó",
|
||||
fuel = "Üzemanyag",
|
||||
engine = "Motor",
|
||||
body = "Karosszéria",
|
||||
day = "nap",
|
||||
days = "napok",
|
||||
hour = "óra",
|
||||
hours = "órák",
|
||||
|
||||
-- User Interface
|
||||
noVehicles = "Ebben a garázsban nincsenek járművek",
|
||||
vehicles = "jármű(vek)",
|
||||
vehiclePlate = "Rendszám",
|
||||
vehicleNotInGarage = "A jármű nincs garázsban",
|
||||
vehicleTakeOut = "Vezetés",
|
||||
vehicleReturnAndTakeOut = "Vissza és vezetés",
|
||||
vehicleReturnToOwnersGarage = "Visszarakás a tulajdonos garázsába",
|
||||
transferToGarageOrPlayer = "Átszállítás egy garázsba vagy a játékosnak",
|
||||
transferToGarage = "Átszállítás garázsba",
|
||||
transferToPlayer = "Átszállítás játékosnak",
|
||||
vehicleTransfer = "Átadás",
|
||||
noAvailableGarages = "Nincs szabad garázs",
|
||||
currentGarage = "Jelenlegi garázs",
|
||||
noPlayersOnline = "Nincs ilyen elérhető játékos",
|
||||
createPrivateGarage = "Privát garázs készítése",
|
||||
pgAlertHeadsUp = "Fel a fejjel!",
|
||||
pgAlertText = "A garázs létrejön, és a járművek pontosan azon a helyen és irányban fognak megjelenni, ahol éppen áll.",
|
||||
garageName = "Garázs neve",
|
||||
impoundInformation = "Lefoglaltak információ",
|
||||
impoundedBy = "Lefoglalta",
|
||||
impoundedReason = "Indok",
|
||||
impoundPlayerCanCollect = "Gépkocsiját átveheti a lefoglaltakban.",
|
||||
impoundCollectionContact = "Kérjük, vegye fel a kapcsolatot %{value} a jármű átvétele érdekében.",
|
||||
impoundNoVehicles = "Nincs lefoglalt autó",
|
||||
impoundAvailable = "Elérhető",
|
||||
impoundRetrievableByOwner = "Tulajdonos által átvehető",
|
||||
impoundNoReason = "Indoklás nélkül",
|
||||
impoundVehicle = "Lefoglalt jármű",
|
||||
impoundReasonField = "Indok (nem kötelező)",
|
||||
impoundTime = "Lefoglalt idő",
|
||||
impoundAvailableImmediately = "Azonnal elérhető",
|
||||
impoundCost = "Költség",
|
||||
changeVehiclePlate = "Rendszámtábla cserélése",
|
||||
newPlate = "Új rendszám",
|
||||
search = "Keresés név vagy rendszám alapján",
|
||||
noPrivateGarages = "Nincs privát garázsod",
|
||||
editPrivateGarage = "Privát garázs szerkesztése",
|
||||
owners = "Tulajdonos(ok)",
|
||||
location = "Elhelyezkedés",
|
||||
next = "Következő",
|
||||
previous = "Előző",
|
||||
page = "Oldal",
|
||||
of = "nak,-nek",
|
||||
show = "Mutatás",
|
||||
save = "Mentés",
|
||||
edit = "Szerkesztés",
|
||||
delete = "Törlés",
|
||||
garageDeleteConfirm = "Biztosan törli ezt a garázst?",
|
||||
privGarageSearch = "Keresés név alapján",
|
||||
garageUpdatedSuccess = "Garázs sikeresen frissítve!",
|
||||
getCurrentCoords = "Jelenlegi koordináták lekérdezése",
|
||||
identifier = "Azonosító",
|
||||
name = "Név",
|
||||
noPlayers = "Nincsenek hozzáadott játékosok",
|
||||
addPlayer = "Játékos hozzáadása",
|
||||
loadingVehicle = "Jármű betöltése...",
|
||||
vehicleSetup = "Járműbeállítás",
|
||||
extras = "Extrák",
|
||||
extra = "Extra",
|
||||
liveries = "Festések",
|
||||
livery = "Festés",
|
||||
noLiveries = "Nincs elérhető festés",
|
||||
noExtras = "Nincsenek extrák",
|
||||
none = "Semmi",
|
||||
vehicleNeedsService = "Needs Service",
|
||||
type = "Type",
|
||||
|
||||
-- Notifications
|
||||
insertVehicleTypeError = "Ebben a garázsban csak %{value} járműtípusokat tárolhat",
|
||||
insertVehiclePublicError = "Nem tárolhat munkahelyi vagy bandajárműveket nyilvános garázsokban",
|
||||
vehicleParkedSuccess = "Jármű leparkolva",
|
||||
vehicleNotOwnedError = "Nem Ön a tulajdonosa ennek a járműnek",
|
||||
vehicleNotOwnedByPlayerError = "A jármű nem játékos tulajdonában van",
|
||||
notEnoughMoneyError = "Nincs elég pénzed a bankodban",
|
||||
vehicleNotYoursError = "A jármű nem az Öné",
|
||||
notJobOrGangVehicle = "Ez nem %{value} jármű",
|
||||
invalidGangError = "Nem adott meg érvényes bandát",
|
||||
invalidJobError = "Nem adott meg érvényes állást",
|
||||
notInsideVehicleError = "Nem ülsz járműben",
|
||||
vehicleAddedToGangGarageSuccess = "A jármű bekerült a %{value} banda garázsba!",
|
||||
vehicleAddedToJobGarageSuccess = "A jármű bekerült a %{value} munka garázsba!",
|
||||
moveCloserToVehicleError = "Közelebb kell mennie a járműhöz",
|
||||
noVehiclesNearbyError = "A közelben nincsenek járművek",
|
||||
commandPermissionsError = "Nem használhatja ezt a parancsot",
|
||||
actionNotAllowedError = "Ehhez nincs engedélye",
|
||||
garageNameExistsError = "A garázsnév már létezik",
|
||||
vehiclePlateExistsError = "A jármű táblája már használatban van",
|
||||
playerNotOnlineError = "Játékos nincs online",
|
||||
vehicleTransferSuccess = "Jármű átadva neki: %{value}",
|
||||
vehicleTransferSuccessGeneral = "A jármű sikeresen átadva",
|
||||
vehicleReceived = "Te kaptál egy járművet, ezzel a rendszámmal %{value}",
|
||||
vehicleImpoundSuccess = "Sikeresen lefoglalták a járművet",
|
||||
vehicleImpoundRemoveSuccess = "Sikeresen kilett véve a lefoglaltakból",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "A jármű visszakerült a tulajdonos garázsába",
|
||||
garageCreatedSuccess = "Garázs sikeresen létrehozva!",
|
||||
vehiclePlateUpdateSuccess = "Rendszám beállítva erre: %{value}",
|
||||
vehicleDeletedSuccess = "Jármű törölve az adatbázisból %{value}",
|
||||
playerIsDead = "Ezt nem teheted, amíg halott vagy",
|
||||
|
||||
-- Commands
|
||||
cmdSetGangVehicle = "Jelenlegi jármű hozzáadása a banda garázshoz",
|
||||
cmdRemoveGangVehicle = "Banda garázsból visszarakás a játékos tulajdonába",
|
||||
cmdSetJobVehicle = "Jelenlegi jármű hozzáadása a munka garázshoz",
|
||||
cmdRemoveJobVehicle = "Munka garázsból visszarakás a játékos tulajdonába",
|
||||
cmdArgGangName = "Banda neve",
|
||||
cmdArgJobName = "Mubka neve",
|
||||
cmgArgMinGangRank = "Minimum banda rang",
|
||||
cmgArgMinJobRank = "Minimum beosztás",
|
||||
cmdArgPlayerId = "Az új tulajdonos játékosazonosítója",
|
||||
cmdImpoundVehicle = "Jármű lefoglalása",
|
||||
cmdChangePlate = "Rendszámtábla cseréje (csak rendszergazda)",
|
||||
cmdDeleteVeh = "Jármű törlése az adatbázisból (csak rendszergazda)",
|
||||
cmdCreatePrivGarage = "Privát garázs létrehozása egy játékos számára",
|
||||
|
||||
-- v3
|
||||
vehicleStoreError = "You cannot store this vehicle here",
|
||||
mins = "mins",
|
||||
noVehiclesAvailableToDrive = "There are no vehicles available to drive",
|
||||
}
|
143
resources/[carscripts]/jg-advancedgarages/locales/it.lua
Normal file
143
resources/[carscripts]/jg-advancedgarages/locales/it.lua
Normal file
|
@ -0,0 +1,143 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['it'] = {
|
||||
yes = "Si",
|
||||
no = "No",
|
||||
garage = "Garage",
|
||||
jobGarage = "Garage Lavoro",
|
||||
gangGarage = "Garage Gang",
|
||||
player = "Giocatore",
|
||||
impound = "Sequestro",
|
||||
inGarage = "In Garage",
|
||||
notInGarage = "Fuori dal Garage",
|
||||
car = "Macchina",
|
||||
air = "Aereo",
|
||||
sea = "Barche",
|
||||
fuel = "Benzina",
|
||||
engine = "Motore",
|
||||
body = "Carrozzeria",
|
||||
day = "Giorno",
|
||||
days = "Giorni",
|
||||
hour = "Ora",
|
||||
hours = "Ore",
|
||||
|
||||
-- User Interface
|
||||
noVehicles = "Non ci sono veicoli in questo garage",
|
||||
vehicles = "Veicoli",
|
||||
vehiclePlate = "Targa Veicolo",
|
||||
vehicleNotInGarage = "Veicolo non in garage",
|
||||
vehicleTakeOut = "Prendi il Veicolo",
|
||||
vehicleReturnAndTakeOut = "Ritorna e prendi il veicolo",
|
||||
vehicleReturnToOwnersGarage = "Ritorna nel garage del propietario",
|
||||
transferToGarageOrPlayer = "Trasferisci al garage o al giocatore",
|
||||
transferToGarage = "Trasferisci al Garage",
|
||||
transferToPlayer = "Trasferisci al Giocatore",
|
||||
vehicleTransfer = "Trasferisci",
|
||||
noAvailableGarages = "Nessun Garage Disponibile",
|
||||
currentGarage = "Garage Attuale",
|
||||
noPlayersOnline = "Nessun Giocatore Online",
|
||||
createPrivateGarage = "Crea Garage Privato",
|
||||
pgAlertHeadsUp = "Dritta!",
|
||||
pgAlertText = "Il garage verrà creato e i veicoli appariranno nella posizione e nella direzione esatte in cui ti trovi attualmente.",
|
||||
garageName = "Nome Garage",
|
||||
impoundInformation = "Informazioni Sequestro",
|
||||
impoundedBy = "Sequestrato da",
|
||||
impoundedReason = "Motivo",
|
||||
impoundPlayerCanCollect = "Non puoi prelevare il veicolo dal sequestro.",
|
||||
impoundCollectionContact = "Contatta %{value} per prelevare il tuo veicolo.",
|
||||
impoundNoVehicles = "Nessun Veicolo Sequestrato",
|
||||
impoundAvailable = "Disponibile",
|
||||
impoundRetrievableByOwner = "Ritirabile dal Propietario",
|
||||
impoundNoReason = "Nessun Motivo Segnalato",
|
||||
impoundVehicle = "Sequestra Veicolo",
|
||||
impoundReasonField = "Motivo (Opzionale)",
|
||||
impoundTime = "Tempo Sequestro",
|
||||
impoundAvailableImmediately = "Disponibile Ora",
|
||||
impoundCost = "Costo",
|
||||
changeVehiclePlate = "Cambia Targa Veicolo",
|
||||
newPlate = "Nuova Targa",
|
||||
search = "Ricerca per nome o targa",
|
||||
noPrivateGarages = "Nessun garage privato",
|
||||
editPrivateGarage = "Modifica garage privato",
|
||||
owners = "Proprietario/i",
|
||||
location = "Posizione",
|
||||
next = "Successivo",
|
||||
previous = "Precedente",
|
||||
page = "Pagina",
|
||||
of = "di",
|
||||
show = "Mostra",
|
||||
save = "Salva",
|
||||
edit = "Modifica",
|
||||
delete = "Elimina",
|
||||
garageDeleteConfirm = "Sei sicuro di voler cancellare questo garage?",
|
||||
privGarageSearch = "Ricerca per nome",
|
||||
garageUpdatedSuccess = "Garage aggiornato con successo!",
|
||||
getCurrentCoords = "Ottenere le coordinate attuali",
|
||||
identifier = "Identificativo",
|
||||
name = "Nome",
|
||||
noPlayers = "Non sono stati aggiunti giocatori",
|
||||
addPlayer = "Aggiungi giocatore",
|
||||
loadingVehicle = "Caricamento del veicolo...",
|
||||
vehicleSetup = "Configurazione del veicolo",
|
||||
extras = "Extras",
|
||||
extra = "Extra",
|
||||
liveries = "Livree",
|
||||
livery = "Livrea",
|
||||
noLiveries = "Nessuna livrea disponibile",
|
||||
noExtras = "Nessun extra disponibile",
|
||||
none = "Nessuno",
|
||||
vehicleNeedsService = "Serve Manutenzione",
|
||||
type = "Tipo",
|
||||
|
||||
-- Notifications
|
||||
insertVehicleTypeError = "Puoi depositare %{value} tipi di veicoli in questo garage",
|
||||
insertVehiclePublicError = "Non puoi depositare veicoli gang o lavorativi in garage pubblici",
|
||||
vehicleParkedSuccess = "Veicolo Parcheggiato",
|
||||
vehicleNotOwnedError = "Non sei il propietario del veicolo",
|
||||
vehicleNotOwnedByPlayerError = "Il veicolo non è tuo",
|
||||
notEnoughMoneyError = "Non hai abbastanza soldi in banca",
|
||||
vehicleNotYoursError = "Il veicolo non ti appartiene",
|
||||
notJobOrGangVehicle = "Questo non è un %{value} veicolo",
|
||||
invalidGangError = "Gang non valida",
|
||||
invalidJobError = "Lavoro non valido",
|
||||
notInsideVehicleError = "Non sei in un veicolo",
|
||||
vehicleAddedToGangGarageSuccess = "Veicolo aggiunto al %{value} garage gang!",
|
||||
vehicleAddedToJobGarageSuccess = "Veicolo aggiunto al %{value} garage lavorativo!",
|
||||
moveCloserToVehicleError = "Devi avvicinarti al Veicolo",
|
||||
noVehiclesNearbyError = "Nessun veicolo vicino",
|
||||
commandPermissionsError = "Non sei autorizzato ad usare questo comando",
|
||||
actionNotAllowedError = "Non sei autorizzato a fare questo",
|
||||
garageNameExistsError = "Nome garage esistente",
|
||||
vehiclePlateExistsError = "Targa veicolo già esistente",
|
||||
playerNotOnlineError = "Giocatore Offline",
|
||||
vehicleTransferSuccess = "Veicolo trasferito a %{value}",
|
||||
vehicleTransferSuccessGeneral = "Veicolo trasferito correttamente",
|
||||
vehicleReceived = "Hai ricevuto un veicolo con targa %{value}",
|
||||
vehicleImpoundSuccess = "Veicolo sequestrato correttamente",
|
||||
vehicleImpoundRemoveSuccess = "Veicolo rimosso dal sequestro",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "Veicolo restituito al garage del propietario",
|
||||
garageCreatedSuccess = "Garage creato correttamente!",
|
||||
vehiclePlateUpdateSuccess = "Targa cambiata in %{value}",
|
||||
vehicleDeletedSuccess = "Veicolo eliminato dal database %{value}",
|
||||
playerIsDead = "Sei morto! Non puoi farlo",
|
||||
|
||||
-- Commands
|
||||
cmdSetGangVehicle = "Aggiungi veicolo attuale al garage gang",
|
||||
cmdRemoveGangVehicle = "Ritorna veicolo gang al propietario",
|
||||
cmdSetJobVehicle = "Aggiungi veicolo attuale al garage lavorativo",
|
||||
cmdRemoveJobVehicle = "Ritorna veicolo lavorativo al propietario",
|
||||
cmdArgGangName = "Nome gang",
|
||||
cmdArgJobName = "Nome lavoro",
|
||||
cmgArgMinGangRank = "Grado minimo gang",
|
||||
cmgArgMinJobRank = "Grado minimo lavoro",
|
||||
cmdArgPlayerId = "ID giocatore del destinatario",
|
||||
cmdImpoundVehicle = "Sequestra veicolo",
|
||||
cmdChangePlate = "Cambia targa veicolo (Solo Admin)",
|
||||
cmdDeleteVeh = "Cancella veicolo dal database (Solo Admin)",
|
||||
cmdCreatePrivGarage = "Crea un garage privato per il giocatore",
|
||||
|
||||
-- v3
|
||||
vehicleStoreError = "Non puoi depositare il tuo veicolo qui",
|
||||
mins = "minuti",
|
||||
noVehiclesAvailableToDrive = "Non ci sono veicoli disponibili da guidare",
|
||||
}
|
142
resources/[carscripts]/jg-advancedgarages/locales/ja.lua
Normal file
142
resources/[carscripts]/jg-advancedgarages/locales/ja.lua
Normal file
|
@ -0,0 +1,142 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['ja'] = {
|
||||
yes = "はい",
|
||||
no = "いいえ",
|
||||
garage = "ガレージ",
|
||||
jobGarage = "仕事用ガレージ",
|
||||
gangGarage = "ギャング用ガレージ",
|
||||
player = "プレイヤー",
|
||||
impound = "押収",
|
||||
inGarage = "ガレージ内",
|
||||
notInGarage = "ガレージ外",
|
||||
car = "車",
|
||||
air = "空",
|
||||
sea = "海",
|
||||
fuel = "燃料",
|
||||
engine = "エンジン",
|
||||
body = "ボディ",
|
||||
day = "日",
|
||||
days = "日々",
|
||||
hour = "時間",
|
||||
hours = "時間",
|
||||
mins = "分",
|
||||
|
||||
-- ユーザーインターフェース
|
||||
noVehicles = "このガレージには車両がありません",
|
||||
noVehiclesAvailableToDrive = "運転可能な車両はありません",
|
||||
vehicles = "車両",
|
||||
vehiclePlate = "ナンバープレート",
|
||||
vehicleNotInGarage = "車両はガレージに入っていません",
|
||||
vehicleTakeOut = "運転する",
|
||||
vehicleReturnAndTakeOut = "返却 & 運転",
|
||||
vehicleReturnToOwnersGarage = "オーナーのガレージに返却",
|
||||
transferToGarageOrPlayer = "ガレージまたはプレイヤーに転送",
|
||||
transferToGarage = "ガレージに転送",
|
||||
transferToPlayer = "プレイヤーに転送",
|
||||
vehicleTransfer = "転送",
|
||||
noAvailableGarages = "利用可能なガレージはありません",
|
||||
currentGarage = "現在のガレージ",
|
||||
noPlayersOnline = "オンラインのプレイヤーがありません",
|
||||
createPrivateGarage = "プライベートガレージを作成",
|
||||
pgAlertHeadsUp = "注意!",
|
||||
pgAlertText = "ガレージは作成され、車両は現在立っている位置と方向に出現します。",
|
||||
garageName = "ガレージ名",
|
||||
impoundInformation = "押収情報",
|
||||
impoundedBy = "押収者",
|
||||
impoundedReason = "理由",
|
||||
impoundPlayerCanCollect = "車両を押収所から受け取ることができます。",
|
||||
impoundCollectionContact = "%{value} に連絡して車両を受け取ってください。",
|
||||
impoundNoVehicles = "押収所には車両がありません",
|
||||
impoundAvailable = "利用可能",
|
||||
impoundRetrievableByOwner = "オーナーが回収可能",
|
||||
impoundNoReason = "理由なし",
|
||||
impoundVehicle = "車両を押収",
|
||||
impoundReasonField = "理由(任意)",
|
||||
impoundTime = "押収時間",
|
||||
impoundAvailableImmediately = "すぐに利用可能",
|
||||
impoundCost = "費用",
|
||||
changeVehiclePlate = "車両ナンバープレートの変更",
|
||||
newPlate = "新しいナンバープレート",
|
||||
search = "名前またはナンバープレートで検索",
|
||||
noPrivateGarages = "プライベートガレージはありません",
|
||||
editPrivateGarage = "プライベートガレージを編集",
|
||||
owners = "オーナー",
|
||||
location = "場所",
|
||||
next = "次",
|
||||
previous = "前",
|
||||
page = "ページ",
|
||||
of = "の",
|
||||
show = "表示",
|
||||
save = "保存",
|
||||
edit = "編集",
|
||||
delete = "削除",
|
||||
garageDeleteConfirm = "本当にこのガレージを削除してもよろしいですか?",
|
||||
privGarageSearch = "名前で検索",
|
||||
garageUpdatedSuccess = "ガレージが正常に更新されました!",
|
||||
getCurrentCoords = "現在の座標を取得",
|
||||
identifier = "識別子",
|
||||
name = "名前",
|
||||
noPlayers = "プレイヤーが追加されていません",
|
||||
addPlayer = "プレイヤーを追加",
|
||||
loadingVehicle = "車両を読み込み中...",
|
||||
vehicleSetup = "車両設定",
|
||||
extras = "エクストラ",
|
||||
extra = "エクストラ",
|
||||
liveries = "ラッピング",
|
||||
livery = "ラッピング",
|
||||
noLiveries = "利用可能なラッピングはありません",
|
||||
noExtras = "利用可能なエクストラはありません",
|
||||
none = "なし",
|
||||
vehicleNeedsService = "整備が必要",
|
||||
type = "タイプ",
|
||||
goInside = "中に入る",
|
||||
|
||||
-- 通知
|
||||
insertVehicleTypeError = "このガレージには %{value} の車両タイプのみ収納できます",
|
||||
insertVehiclePublicError = "公共ガレージには仕事用またはギャング車両を収納できません",
|
||||
vehicleParkedSuccess = "車両がガレージに駐車されました",
|
||||
vehicleNotOwnedError = "この車両はあなたのものではありません",
|
||||
vehicleNotOwnedByPlayerError = "この車両はプレイヤーが所有していません",
|
||||
notEnoughMoneyError = "銀行に十分なお金がありません",
|
||||
vehicleNotYoursError = "この車両はあなたのものではありません",
|
||||
notJobOrGangVehicle = "これは %{value} 車両ではありません",
|
||||
invalidGangError = "有効なギャング名が提供されていません",
|
||||
invalidJobError = "有効な仕事名が提供されていません",
|
||||
notInsideVehicleError = "車両に乗っていません",
|
||||
vehicleAddedToGangGarageSuccess = "車両が %{value} ギャングガレージに追加されました!",
|
||||
vehicleAddedToJobGarageSuccess = "車両が %{value} 仕事用ガレージに追加されました!",
|
||||
moveCloserToVehicleError = "車両に近づく必要があります",
|
||||
noVehiclesNearbyError = "近くに車両がありません",
|
||||
commandPermissionsError = "このコマンドを使用する権限がありません",
|
||||
actionNotAllowedError = "この行動は許可されていません",
|
||||
garageNameExistsError = "ガレージ名はすでに存在します",
|
||||
vehiclePlateExistsError = "この車両のナンバープレートはすでに使用されています",
|
||||
playerNotOnlineError = "プレイヤーはオンラインではありません",
|
||||
vehicleTransferSuccess = "車両が %{value} に転送されました",
|
||||
vehicleTransferSuccessGeneral = "車両が正常に転送されました",
|
||||
vehicleReceived = "車両 %{value} のナンバープレートを受け取りました",
|
||||
vehicleImpoundSuccess = "車両が正常に押収されました",
|
||||
vehicleImpoundRemoveSuccess = "車両が押収所から削除されました",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "車両がオーナーのガレージに返却されました",
|
||||
garageCreatedSuccess = "ガレージが正常に作成されました!",
|
||||
vehiclePlateUpdateSuccess = "車両ナンバープレートが %{value} に設定されました",
|
||||
vehicleDeletedSuccess = "車両がデータベースから削除されました %{value}",
|
||||
playerIsDead = "死んでいるため、この操作はできません",
|
||||
vehicleStoreError = "この車両はここに保管できません",
|
||||
|
||||
-- コマンド
|
||||
cmdSetGangVehicle = "現在の車両をギャングガレージに追加",
|
||||
cmdRemoveGangVehicle = "ギャング車両をプレイヤー所有に戻す",
|
||||
cmdSetJobVehicle = "現在の車両を仕事用ガレージに追加",
|
||||
cmdRemoveJobVehicle = "仕事車両をプレイヤー所有に戻す",
|
||||
cmdArgGangName = "ギャング名",
|
||||
cmdArgJobName = "仕事名",
|
||||
cmgArgMinGangRank = "最低ギャングランク",
|
||||
cmgArgMinJobRank = "最低仕事ランク",
|
||||
cmdArgPlayerId = "新しいオーナーのプレイヤーID",
|
||||
cmdImpoundVehicle = "車両を押収",
|
||||
cmdChangePlate = "車両ナンバープレートを変更(管理者のみ)",
|
||||
cmdDeleteVeh = "車両をデータベースから削除(管理者のみ)",
|
||||
cmdCreatePrivGarage = "プレイヤー用のプライベートガレージを作成",
|
||||
}
|
142
resources/[carscripts]/jg-advancedgarages/locales/lt.lua
Normal file
142
resources/[carscripts]/jg-advancedgarages/locales/lt.lua
Normal file
|
@ -0,0 +1,142 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['lt'] = {
|
||||
yes = "Taip",
|
||||
no = "Ne",
|
||||
garage = "Garažas",
|
||||
jobGarage = "Darbo garažas",
|
||||
gangGarage = "Gaujos garažas",
|
||||
player = "Asmuo",
|
||||
impound = "Konfiskavimo aikštelė",
|
||||
inGarage = "Šiuo metu garaže",
|
||||
notInGarage = "Garaže nėra",
|
||||
car = "Transporto priemonė",
|
||||
air = "Lėktuvas",
|
||||
sea = "Laivas",
|
||||
fuel = "Degalai",
|
||||
engine = "Variklis",
|
||||
body = "Kėbulas",
|
||||
day = "diena",
|
||||
days = "dienos",
|
||||
hour = "valanda",
|
||||
hours = "valandos",
|
||||
mins = "mins",
|
||||
|
||||
-- User Interface
|
||||
noVehicles = "Šiame garaže nėra transporto priemonių",
|
||||
noVehiclesAvailableToDrive = "Šiuo metu nėra transporto priemonių, kurias galėtumėte vairuoti",
|
||||
vehicles = "tr.priemonė-(s)",
|
||||
vehiclePlate = "Numeriai",
|
||||
vehicleNotInGarage = "Tr.priemonės nėra garaže",
|
||||
vehicleTakeOut = "Vairuoti",
|
||||
vehicleReturnAndTakeOut = "Gražinti & Vairuoti",
|
||||
vehicleReturnToOwnersGarage = "Grąžinti savininkui į garažą",
|
||||
transferToGarageOrPlayer = "Perkelti į garažą arba asmeniui",
|
||||
transferToGarage = "Perkelti į garažą",
|
||||
transferToPlayer = "Perleisti žaidėjui",
|
||||
vehicleTransfer = "Perkelti",
|
||||
noAvailableGarages = "Nėra galimų garažų",
|
||||
currentGarage = "Dabartinis garažas",
|
||||
noPlayersOnline = "Nėra prisijungusių žaidėjų",
|
||||
createPrivateGarage = "Sukurti privatų garažą",
|
||||
pgAlertHeadsUp = "Dėmesio!",
|
||||
pgAlertText = "Garažas bus sukurtas, o transporto priemonė atsiras tiklsiai ten, kur dabar stovite.",
|
||||
garageName = "Garažo pavadinimas",
|
||||
impoundInformation = "Konfiskavimo informacija",
|
||||
impoundedBy = "Konfiskavo",
|
||||
impoundedReason = "Priežastis",
|
||||
impoundPlayerCanCollect = "Savo transporto priemonę galite atsiimti iš konfiskavimo aikštelės.",
|
||||
impoundCollectionContact = "Prašome susisiekti su %{value}, kad galėtumėte atsiimti savo transporto priemonę.",
|
||||
impoundNoVehicles = "Konfiskavimo aikštelėje nėra transporto priemonių",
|
||||
impoundAvailable = "Galima",
|
||||
impoundRetrievableByOwner = "Atsiimti gali savininkas?",
|
||||
impoundNoReason = "Priežastis nenurodyta",
|
||||
impoundVehicle = "Transporto priemonės konfiskavimas",
|
||||
impoundReasonField = "Priežastis (nebūtina)",
|
||||
impoundTime = "Konfiskavimo laikas",
|
||||
impoundAvailableImmediately = "Atsiimti gali iškart",
|
||||
impoundCost = "Atsiėmimo kaina",
|
||||
changeVehiclePlate = "Numerių keitimas",
|
||||
newPlate = "Nauji numeriai",
|
||||
search = "Ieškoti pagal pavadinimą arba numerius",
|
||||
noPrivateGarages = "Privačių garažų nėra",
|
||||
editPrivateGarage = "Redaguoti privatų garažą",
|
||||
owners = "Savininkas(-ai)",
|
||||
location = "Vietovė",
|
||||
next = "Kitas",
|
||||
previous = "Praeitas",
|
||||
page = "Puslapis",
|
||||
of = "iš",
|
||||
show = "Rodyti",
|
||||
save = "Išsaugoti",
|
||||
edit = "Redaguoti",
|
||||
delete = "Ištrinti",
|
||||
garageDeleteConfirm = "Ar tikrai norite ištrinti garažą?",
|
||||
privGarageSearch = "Ieškoti pagal pavadinima",
|
||||
garageUpdatedSuccess = "Garažas sėkmingai atnaujintas!",
|
||||
getCurrentCoords = "Išgauti koordinates",
|
||||
identifier = "Identifikatorius",
|
||||
name = "Vardas",
|
||||
noPlayers = "Žaidėjų nėra pridėta",
|
||||
addPlayer = "Pridėti žaidėją",
|
||||
loadingVehicle = "Užkraunama...",
|
||||
vehicleSetup = "Papildiniai",
|
||||
extras = "Extra",
|
||||
extra = "Extra",
|
||||
liveries = "Lipdukai",
|
||||
livery = "Lipdukas",
|
||||
noLiveries = "Lipdukų nėra",
|
||||
noExtras = "Extra papildinių nėra",
|
||||
none = "Nėra",
|
||||
vehicleNeedsService = "Reikia serviso",
|
||||
type = "Tipas",
|
||||
goInside = "Eiti į vidų",
|
||||
|
||||
-- Notifications
|
||||
insertVehicleTypeError = "Šiame garaže galite laikyti tik %{value} transporto priemonių tipus",
|
||||
insertVehiclePublicError = "Negalite pastatyti darbo arba gaujų transporto priemonių tarp viešojo garažo",
|
||||
vehicleParkedSuccess = "Transporto priemonė pastatyta į garažą",
|
||||
vehicleNotOwnedError = "Ši transporto priemonė nepriklauso jums",
|
||||
vehicleNotOwnedByPlayerError = "Transporto priemonė nepriklauso jokiam asmeniui",
|
||||
notEnoughMoneyError = "Neturite pakankamai pinigų banke",
|
||||
vehicleNotYoursError = "Transporto priemonė jums nepriklauso",
|
||||
notJobOrGangVehicle = "Tai nėra %{value} transporto priemonė",
|
||||
invalidGangError = "Jūs nenurodėte tinkamos gaujos",
|
||||
invalidJobError = "Jūs nenurodėte tinkamo darbo",
|
||||
notInsideVehicleError = "Jūs nesate transporto priemonėje",
|
||||
vehicleAddedToGangGarageSuccess = "Transporto priemonė pridėta į %{value} gaujos garažą!",
|
||||
vehicleAddedToJobGarageSuccess = "Transporto priemonė pridėta į %{value} darbo garažą!",
|
||||
moveCloserToVehicleError = "Turite prieiti arčiau transporto priemonės",
|
||||
noVehiclesNearbyError = "Šalia transporto priemonės nėra",
|
||||
commandPermissionsError = "Neturite leidimo naudoti šios komandos",
|
||||
actionNotAllowedError = "Šio veiksmo atlikti negalite",
|
||||
garageNameExistsError = "Garažo pavadinimas jau yra užimtas",
|
||||
vehiclePlateExistsError = "Transporto priemonės numeriai jau yra užimti",
|
||||
playerNotOnlineError = "Žaidėjas nėra prisijungęs",
|
||||
vehicleTransferSuccess = "Transporto priemonė perkelta į %{value}",
|
||||
vehicleTransferSuccessGeneral = "Transporto priemonė sėkmingai perleista",
|
||||
vehicleReceived = "Jūs gavote transporto priemonę kurios numeriai yra %{value}",
|
||||
vehicleImpoundSuccess = "Transporto priemonė sėkmingai konfiskuota",
|
||||
vehicleImpoundRemoveSuccess = "Transporto priemonė buvo ištraukta iš konfiskavimo aikštelės",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "Transporto priemonė grąžinta savininkui į garažą",
|
||||
garageCreatedSuccess = "Garažas sėkmingai sukurtas!",
|
||||
vehiclePlateUpdateSuccess = "Transporto priemonės numeriai pakeisti į %{value}",
|
||||
vehicleDeletedSuccess = "Transporto priemonė sėkmingai pašalinta iš duomenu bazės %{value}",
|
||||
playerIsDead = "Šio veiksmo negalite atlikti kol esate negyvas",
|
||||
vehicleStoreError = "Šios transporto priemonės laikyti čia negalite",
|
||||
|
||||
-- Commands
|
||||
cmdSetGangVehicle = "Pridėti dabartinę transporto priemonę į gaujos garažą",
|
||||
cmdRemoveGangVehicle = "Grąžinti gaujos transporto priemonę savininkui",
|
||||
cmdSetJobVehicle = "Pridėti dabartine transporto priemonę į darbo garažą",
|
||||
cmdRemoveJobVehicle = "Gražinti darbinę transporto priemonę savininkui",
|
||||
cmdArgGangName = "Gaujos pavadinimas",
|
||||
cmdArgJobName = "Darbo pavadinimas",
|
||||
cmgArgMinGangRank = "Minimalus gaujos rangas",
|
||||
cmgArgMinJobRank = "Minimalus darbo rangas",
|
||||
cmdArgPlayerId = "Naujo savininko ID",
|
||||
cmdImpoundVehicle = "Konfiskuoti transporto priemonę",
|
||||
cmdChangePlate = "Keisit transporto priemonės numerius (Tik administracija)",
|
||||
cmdDeleteVeh = "Ištrinti transporto priemonę iš duomenų bazės (Tik administracija)",
|
||||
cmdCreatePrivGarage = "Sukurti privatų garažą",
|
||||
}
|
143
resources/[carscripts]/jg-advancedgarages/locales/nl.lua
Normal file
143
resources/[carscripts]/jg-advancedgarages/locales/nl.lua
Normal file
|
@ -0,0 +1,143 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['nl'] = {
|
||||
yes = "Ja",
|
||||
no = "Nee",
|
||||
garage = "Garage",
|
||||
jobGarage = "Baan Garage",
|
||||
gangGarage = "Bende Garage",
|
||||
player = "Speler",
|
||||
impound = "Inbeslagname",
|
||||
inGarage = "In garage",
|
||||
notInGarage = "Niet in garage",
|
||||
car = "Auto",
|
||||
air = "Lucht",
|
||||
sea = "Zee",
|
||||
fuel = "Brandstof",
|
||||
engine = "Motor",
|
||||
body = "Carrosserie",
|
||||
day = "dag",
|
||||
days = "dagen",
|
||||
hour = "uur",
|
||||
hours = "uren",
|
||||
|
||||
-- User Interface
|
||||
noVehicles = "Er zijn geen voertuigen beschikbaar in deze garage",
|
||||
vehicles = "voertuigen",
|
||||
vehiclePlate = "Kenteken",
|
||||
vehicleNotInGarage = "Voertuig is niet in aanwezig in de garage",
|
||||
vehicleTakeOut = "Uitnemen",
|
||||
vehicleReturnAndTakeOut = "Retour & Afhaal",
|
||||
vehicleReturnToOwnersGarage = "Terug brengen naar de Garage van de Eigenaar",
|
||||
transferToGarageOrPlayer = "Overdracht naar een Garage of Speler",
|
||||
transferToGarage = "Overdracht naar een Garage",
|
||||
transferToPlayer = "Overdracht naar een Speler",
|
||||
vehicleTransfer = "Overdracht",
|
||||
noAvailableGarages = "Geen beschikbare garages",
|
||||
currentGarage = "Huidige garage",
|
||||
noPlayersOnline = "Geen spelers online",
|
||||
createPrivateGarage = "Privégarage creëren",
|
||||
pgAlertHeadsUp = "Let op!",
|
||||
pgAlertText = "De garage wordt gemaakt en voertuigen spawnen in de exacte locatie en richting waarin u zich momenteel bevindt.",
|
||||
garageName = "Garage Naam",
|
||||
impoundInformation = "Inbeslagname Informatie",
|
||||
impoundedBy = "In beslag genomen door",
|
||||
impoundedReason = "Reden",
|
||||
impoundPlayerCanCollect = "U kunt uw voertuig ophalen bij de inbeslagname.",
|
||||
impoundCollectionContact = "Neem contact op met %{value} om uw voertuig op te halen.",
|
||||
impoundNoVehicles = "Er zijn geen voertuigen in de inbeslagneming",
|
||||
impoundAvailable = "Beschikbaar",
|
||||
impoundRetrievableByOwner = "Ophaalbaar door de eigenaar",
|
||||
impoundNoReason = "Geen reden opgegeven",
|
||||
impoundVehicle = "Voertuig in beslag nemen",
|
||||
impoundReasonField = "Reden (optioneel)",
|
||||
impoundTime = "Inbeslagnemingstijd",
|
||||
impoundAvailableImmediately = "Onmiddellijk beschikbaar",
|
||||
impoundCost = "Kosten",
|
||||
changeVehiclePlate = "Voertuigkenteken wijzigen",
|
||||
newPlate = "Nieuw Kenteken",
|
||||
search = "Zoek op naam of plaat",
|
||||
noPrivateGarages = "Geen privégarages",
|
||||
editPrivateGarage = "Bewerk privégarage",
|
||||
owners = "Eigenaar(s)",
|
||||
location = "Locatie",
|
||||
next = "Volgende",
|
||||
previous = "Vorige",
|
||||
page = "Pagina",
|
||||
of = "van",
|
||||
show = "Toon",
|
||||
save = "Opslaan",
|
||||
edit = "Bewerk",
|
||||
delete = "Verwijder",
|
||||
garageDeleteConfirm = "Weet je zeker dat je deze garage wilt verwijderen?",
|
||||
privGarageSearch = "Zoeken op naam",
|
||||
garageUpdatedSuccess = "Garage succesvol bijgewerkt!",
|
||||
getCurrentCoords = "Huidige coördinaten ophalen",
|
||||
identifier = "Identificatie",
|
||||
name = "Naam",
|
||||
noPlayers = "Er zijn geen spelers toegevoegd",
|
||||
addPlayer = "Speler toevoegen",
|
||||
loadingVehicle = "Voertuig laden...",
|
||||
vehicleSetup = "Voertuig instellen",
|
||||
extras = "Extra's",
|
||||
extra = "Extra",
|
||||
liveries = "Liveries",
|
||||
livery = "Livery",
|
||||
noLiveries = "Geen liveries beschikbaar",
|
||||
noExtras = "Geen extra's beschikbaar",
|
||||
none = "Geen",
|
||||
vehicleNeedsService = "Needs Service",
|
||||
type = "Type",
|
||||
|
||||
-- Notifications
|
||||
insertVehicleTypeError = "U kunt alleen opslaan %{value} voertuigtypes in deze garage",
|
||||
insertVehiclePublicError = "Je kunt geen baan- of bendevoertuigen opslaan in openbare garages",
|
||||
vehicleParkedSuccess = "Voertuig geparkeerd in garage",
|
||||
vehicleNotOwnedError = "U bent niet de eigenaar van dit voertuig",
|
||||
vehicleNotOwnedByPlayerError = "Dit voertuig is geen eigendom van een speler",
|
||||
notEnoughMoneyError = "U heeft niet genoeg geld op uw bank",
|
||||
vehicleNotYoursError = "Dit voertuig is niet van jou",
|
||||
notJobOrGangVehicle = "Dit is geen %{value} voertuig",
|
||||
invalidGangError = "Je heeft geen geldige bende opgegeven",
|
||||
invalidJobError = "Je heeft geen geldige baan opgegeven",
|
||||
notInsideVehicleError = "Je zit niet in een voertuig",
|
||||
vehicleAddedToGangGarageSuccess = "Voertuig toegevoegd aan de %{value} bende garage!",
|
||||
vehicleAddedToJobGarageSuccess = "Voertuig toegevoegd aan de %{value} baan garage!",
|
||||
moveCloserToVehicleError = "Je moet dichter bij het voertuig gaan staan",
|
||||
noVehiclesNearbyError = "Er zijn geen voertuigen in de buurt",
|
||||
commandPermissionsError = "Je hebt de rechten niet om dit commando te gebruiken",
|
||||
actionNotAllowedError = "Dit mag je niet doen",
|
||||
garageNameExistsError = "Garagenaam is al in gebruik",
|
||||
vehiclePlateExistsError = "Voertuigkenteken is al in gebruik",
|
||||
playerNotOnlineError = "Speler is niet online",
|
||||
vehicleTransferSuccess = "Voertuig overgedragen aan %{value}",
|
||||
vehicleTransferSuccessGeneral = "Voertuig succesvol overgedragen",
|
||||
vehicleReceived = "U heeft een voertuig met kenteken %{value} ontvangen",
|
||||
vehicleImpoundSuccess = "Voertuig succesvol in beslag genomen",
|
||||
vehicleImpoundRemoveSuccess = "Voertuig uit beslag genomen",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "Voertuig teruggebracht naar de garage van de eigenaar",
|
||||
garageCreatedSuccess = "Garage succesvol aangemaakt!",
|
||||
vehiclePlateUpdateSuccess = "Voertuigkenteken ingesteld op %{value}",
|
||||
vehicleDeletedSuccess = "Voertuig verwijderd uit de database %{value}",
|
||||
playerIsDead = "Je kunt dit niet doen als je dood bent",
|
||||
|
||||
-- Commands
|
||||
cmdSetGangVehicle = "Huidig voertuig toevoegen aan een bendegarage",
|
||||
cmdRemoveGangVehicle = "Stel bendevoertuig terug in als eigendom van de speler",
|
||||
cmdSetJobVehicle = "Huidig voertuig toevoegen aan een baangarage",
|
||||
cmdRemoveJobVehicle = "Stel baanvoertuig terug in als eigendom van de speler",
|
||||
cmdArgGangName = "Bende naam",
|
||||
cmdArgJobName = "Baan naam",
|
||||
cmgArgMinGangRank = "Minimale benderang",
|
||||
cmgArgMinJobRank = "Minimale functierang",
|
||||
cmdArgPlayerId = "Speler-ID van nieuwe eigenaar",
|
||||
cmdImpoundVehicle = "Een voertuig in beslag nemen",
|
||||
cmdChangePlate = "Wijzig kentekenplaat (Alleen beheerder)",
|
||||
cmdDeleteVeh = "Voertuig verwijderen uit de database (Alleen beheerder)",
|
||||
cmdCreatePrivGarage = "Privégarage creëren voor een Speler",
|
||||
|
||||
-- v3
|
||||
vehicleStoreError = "You cannot store this vehicle here",
|
||||
mins = "mins",
|
||||
noVehiclesAvailableToDrive = "There are no vehicles available to drive",
|
||||
}
|
141
resources/[carscripts]/jg-advancedgarages/locales/pt.lua
Normal file
141
resources/[carscripts]/jg-advancedgarages/locales/pt.lua
Normal file
|
@ -0,0 +1,141 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['pt'] = {
|
||||
yes = "Sim",
|
||||
no = "Não",
|
||||
garage = "Garagem",
|
||||
jobGarage = "Garagem de Trabalho",
|
||||
gangGarage = "Garagem de Organização",
|
||||
player = "Jogador",
|
||||
impound = "Apreendidos",
|
||||
inGarage = "Na Garagem",
|
||||
notInGarage = "Fora da Garagem",
|
||||
car = "Garagem",
|
||||
air = "Garagem",
|
||||
sea = "Garagem",
|
||||
fuel = "Combustível",
|
||||
engine = "Motor",
|
||||
body = "Chassi",
|
||||
day = "Dia",
|
||||
days = "Dias",
|
||||
hour = "Hora",
|
||||
hours = "Horas",
|
||||
|
||||
-- User Interface
|
||||
noVehicles = "Não há veículos nesta garagem",
|
||||
vehicles = "Total de Viaturas",
|
||||
vehiclePlate = "Matrícula do veículo",
|
||||
vehicleNotInGarage = "Veículo não está na garagem",
|
||||
vehicleTakeOut = "Retirar",
|
||||
vehicleReturnAndTakeOut = "Voltar a Retirar",
|
||||
vehicleReturnToOwnersGarage = "Voltar à garagem do proprietário",
|
||||
transferToGarageOrPlayer = "Transferir para uma Garagem ou Jogador",
|
||||
transferToGarage = "Transferir para uma Garagem",
|
||||
transferToPlayer = "Transferir para um Jogador",
|
||||
vehicleTransfer = "Transferir",
|
||||
noAvailableGarages = "Sem garagens disponíveis",
|
||||
currentGarage = "Garagem atual",
|
||||
noPlayersOnline = "Sem jogadores online",
|
||||
createPrivateGarage = "Criar Garagem Privada",
|
||||
pgAlertHeadsUp = "Atenção!",
|
||||
pgAlertText = "A garagem será criada e os veículos aparecerão na localização e direção exatas que você está atualmente.",
|
||||
garageName = "Nome da Garagem",
|
||||
impoundInformation = "Informações da Apreensão",
|
||||
impoundedBy = "Apreendido por",
|
||||
impoundedReason = "Razão",
|
||||
impoundPlayerCanCollect = "Você pode retirar o seu veículo dos Apreendidos.",
|
||||
impoundCollectionContact = "Por favor entre em contato %{value} Para retirar o seu veículo.",
|
||||
impoundNoVehicles = "Não há veículos nos Apreendidos",
|
||||
impoundAvailable = "Disponível",
|
||||
impoundRetrievableByOwner = "Recuperável pelo proprietário",
|
||||
impoundNoReason = "Nenhuma razão fornecida",
|
||||
impoundVehicle = "Apreender o Veículo",
|
||||
impoundReasonField = "Razão",
|
||||
impoundTime = "Tempo de Apreensão",
|
||||
impoundAvailableImmediately = "Disponível imediatamente",
|
||||
impoundCost = "Preço",
|
||||
changeVehiclePlate = "Mudar a Matrícula",
|
||||
newPlate = "Nova Matrícula",
|
||||
search = "Pesquise por nome ou placa",
|
||||
noPrivateGarages = "Sem garagens privadas",
|
||||
editPrivateGarage = "Editar garagem privada",
|
||||
owners = "Proprietário(s)",
|
||||
location = "Localização",
|
||||
next = "Seguinte",
|
||||
previous = "Anterior",
|
||||
page = "Página",
|
||||
of = "de",
|
||||
show = "Mostrar",
|
||||
save = "Guardar",
|
||||
edit = "Editar",
|
||||
delete = "Eliminar",
|
||||
garageDeleteConfirm = "Tem a certeza de que pretende apagar esta garagem?",
|
||||
privGarageSearch = "Procurar por nome",
|
||||
garageUpdatedSuccess = "Garagem actualizada com sucesso!",
|
||||
getCurrentCoords = "Obter as coordenadas actuais",
|
||||
identifier = "Identificador",
|
||||
name = "Nome",
|
||||
noPlayers = "Não há jogadores adicionados",
|
||||
addPlayer = "Adicionar jogador",
|
||||
loadingVehicle = "Carregamento do veículo...",
|
||||
vehicleSetup = "Configuração do veículo",
|
||||
extras = "Suplementos",
|
||||
extra = "Suplemento",
|
||||
liveries = "Fígados",
|
||||
livery = "Fígado",
|
||||
noLiveries = "Não existem pinturas disponíveis",
|
||||
noExtras = "Não há extras disponíveis",
|
||||
none = "Nenhum",
|
||||
vehicleNeedsService = "Needs Service",
|
||||
type = "Type",
|
||||
|
||||
-- Notifications
|
||||
insertVehicleTypeError = "Não pode guardar nesta garagem.",
|
||||
insertVehiclePublicError = "Você não pode armazenar veículos de emprego ou gangues em garagens públicas",
|
||||
vehicleParkedSuccess = "Veículo guardado na garagem",
|
||||
vehicleNotOwnedError = "Você não é dono este veículo",
|
||||
vehicleNotOwnedByPlayerError = "O veículo não é de propriedade de um jogador",
|
||||
notEnoughMoneyError = "Você não tem dinheiro suficiente em seu banco",
|
||||
vehicleNotYoursError = "Veículo não pertence a você",
|
||||
notJobOrGangVehicle = "Isso não é um %{value} veículo",
|
||||
invalidGangError = "Você não forneceu uma gangue válida",
|
||||
invalidJobError = "Você não forneceu um trabalho válido",
|
||||
notInsideVehicleError = "Você não está sentado em um veículo",
|
||||
vehicleAddedToGangGarageSuccess = "Veículo adicionado ao %{value} Garagem de gangues!",
|
||||
vehicleAddedToJobGarageSuccess = "Veículo adicionado ao %{value} Jó Garage!",
|
||||
moveCloserToVehicleError = "Você precisa se aproximar do veículo",
|
||||
noVehiclesNearbyError = "Não há veículos próximos",
|
||||
commandPermissionsError = "Você não tem permissão para usar este comando",
|
||||
actionNotAllowedError = "Você não tem permissão para fazer isso",
|
||||
garageNameExistsError = "O nome da garagem já existe",
|
||||
vehiclePlateExistsError = "A placa do veículo já está em uso",
|
||||
playerNotOnlineError = "Jogador não está online",
|
||||
vehicleTransferSuccess = "Veículo transferido para %{value}",
|
||||
vehicleTransferSuccessGeneral = "Veículo transferido com sucesso",
|
||||
vehicleReceived = "Você recebeu um veículo com a matricula %{value}",
|
||||
vehicleImpoundSuccess = "Veículo foi apreendido",
|
||||
vehicleImpoundRemoveSuccess = "Veículo foi removido dos Apreenndidos!",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "Veículo voltou à garagem do proprietário",
|
||||
garageCreatedSuccess = "Garagem criada com sucesso!",
|
||||
vehiclePlateUpdateSuccess = "Placa do veículo definido para %{value}",
|
||||
vehicleDeletedSuccess = "Veículo excluído do banco de dados %{value}",
|
||||
playerIsDead = "Você não pode fazer isso enquanto estiver morto",
|
||||
|
||||
-- Commands
|
||||
cmdSetGangVehicle = "Adicione o veículo atual a uma garagem de gangue",
|
||||
cmdRemoveGangVehicle = "Defina o veículo de gangue de volta ao jogador de propriedade",
|
||||
cmdSetJobVehicle = "Adicione o veículo atual a uma garagem de Trabalho",
|
||||
cmdRemoveJobVehicle = "Defina o veículo de trabalho de volta para o jogador de propriedade",
|
||||
cmdArgGangName = "Gang Nome",
|
||||
cmdArgJobName = "Trabalho Nome",
|
||||
cmdArgPlayerId = "ID do jogador do novo proprietário",
|
||||
cmdImpoundVehicle = "Apreender um veículo",
|
||||
cmdChangePlate = "Altere a placa do veículo (Admin apenas)",
|
||||
cmdDeleteVeh = "Excluir veículo do banco de dados (Admin apenas)",
|
||||
cmdCreatePrivGarage = "Criar uma garagem privada para um jogador",
|
||||
|
||||
-- v3
|
||||
vehicleStoreError = "You cannot store this vehicle here",
|
||||
mins = "mins",
|
||||
noVehiclesAvailableToDrive = "There are no vehicles available to drive",
|
||||
}
|
142
resources/[carscripts]/jg-advancedgarages/locales/ro.lua
Normal file
142
resources/[carscripts]/jg-advancedgarages/locales/ro.lua
Normal file
|
@ -0,0 +1,142 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['ro'] = {
|
||||
yes = "Da",
|
||||
no = "Nu",
|
||||
garage = "Garaj",
|
||||
jobGarage = "Garaj de serviciu",
|
||||
gangGarage = "Garajul bandei",
|
||||
player = "Jucător",
|
||||
impound = "Depozit",
|
||||
inGarage = "În garaj",
|
||||
notInGarage = "Nu este în garaj",
|
||||
car = "Mașină",
|
||||
air = "Aer",
|
||||
sea = "Mare",
|
||||
fuel = "Combustibil",
|
||||
engine = "Motor",
|
||||
body = "Caroserie",
|
||||
day = "zi",
|
||||
days = "zile",
|
||||
hour = "oră",
|
||||
hours = "ore",
|
||||
mins = "minute",
|
||||
|
||||
-- Interfața utilizatorului
|
||||
noVehicles = "Nu există vehicule în acest garaj",
|
||||
noVehiclesAvailableToDrive = "Nu există vehicule disponibile pentru a conduce",
|
||||
vehicles = "vehicul(e)",
|
||||
vehiclePlate = "Număr de înmatriculare",
|
||||
vehicleNotInGarage = "Vehiculul a fost lăsat afară",
|
||||
vehicleTakeOut = "Condu",
|
||||
vehicleReturnAndTakeOut = "Întoarce & Condu",
|
||||
vehicleReturnToOwnersGarage = "Întoarce la garajul proprietarului",
|
||||
transferToGarageOrPlayer = "Transferă la un garaj sau jucător",
|
||||
transferToGarage = "Transferă la un garaj",
|
||||
transferToPlayer = "Transferă la un jucător",
|
||||
vehicleTransfer = "Transfer",
|
||||
noAvailableGarages = "Nu există garaje disponibile",
|
||||
currentGarage = "Garaj curent",
|
||||
noPlayersOnline = "Nu sunt jucători online",
|
||||
createPrivateGarage = "Creează un garaj privat",
|
||||
pgAlertHeadsUp = "Atenție!",
|
||||
pgAlertText = "Garajul va fi creat și vehiculele vor apărea exact în locația și direcția în care te afli în prezent.",
|
||||
garageName = "Nume Garaj",
|
||||
impoundInformation = "Informații despre depozit",
|
||||
impoundedBy = "Depozitat de",
|
||||
impoundedReason = "Motiv",
|
||||
impoundPlayerCanCollect = "Poți să îți recuperezi vehiculul din depozit.",
|
||||
impoundCollectionContact = "Te rugăm să contactezi %{value} pentru a-ți recupera vehiculul.",
|
||||
impoundNoVehicles = "Nu există vehicule în depozit",
|
||||
impoundAvailable = "Disponibil",
|
||||
impoundRetrievableByOwner = "Poate fi recuperat de proprietar",
|
||||
impoundNoReason = "Niciun motiv furnizat",
|
||||
impoundVehicle = "Depozitează vehiculul",
|
||||
impoundReasonField = "Motiv (opțional)",
|
||||
impoundTime = "Timp de depozitare",
|
||||
impoundAvailableImmediately = "Disponibil imediat",
|
||||
impoundCost = "Cost",
|
||||
changeVehiclePlate = "Schimbă numărul de înmatriculare",
|
||||
newPlate = "Număr nou",
|
||||
search = "Caută după nume sau număr",
|
||||
noPrivateGarages = "Nu există garaje private",
|
||||
editPrivateGarage = "Editează Garaj Privat",
|
||||
owners = "Proprietar(i)",
|
||||
location = "Locație",
|
||||
next = "Următor",
|
||||
previous = "Anterior",
|
||||
page = "Pagină",
|
||||
of = "din",
|
||||
show = "Arată",
|
||||
save = "Salvează",
|
||||
edit = "Editează",
|
||||
delete = "Șterge",
|
||||
garageDeleteConfirm = "Ești sigur că vrei să ștergi acest garaj?",
|
||||
privGarageSearch = "Caută după nume",
|
||||
garageUpdatedSuccess = "Garaj actualizat cu succes!",
|
||||
getCurrentCoords = "Obține coordonatele curente",
|
||||
identifier = "Identificator",
|
||||
name = "Nume",
|
||||
noPlayers = "Nu există jucători adăugați",
|
||||
addPlayer = "Adaugă jucător",
|
||||
loadingVehicle = "Se încarcă vehiculul...",
|
||||
vehicleSetup = "Configurare Vehicul",
|
||||
extras = "Extraopțiuni",
|
||||
extra = "Extraopțiune",
|
||||
liveries = "Livree",
|
||||
livery = "Livrea",
|
||||
noLiveries = "Nu există livree disponibile",
|
||||
noExtras = "Nu există extraopțiuni disponibile",
|
||||
none = "Niciunul",
|
||||
vehicleNeedsService = "Necesită service",
|
||||
type = "Tip",
|
||||
goInside = "Intră înăuntru",
|
||||
|
||||
-- Notificări
|
||||
insertVehicleTypeError = "Poți depozita doar vehicule de tip %{value} în acest garaj",
|
||||
insertVehiclePublicError = "Nu poți depozita vehicule de serviciu sau de bandă în garajele publice",
|
||||
vehicleParkedSuccess = "Vehicul parcat în garaj",
|
||||
vehicleNotOwnedError = "Nu deții acest vehicul",
|
||||
vehicleNotOwnedByPlayerError = "Vehiculul nu este deținut de un jucător",
|
||||
notEnoughMoneyError = "Nu ai destui bani în bancă",
|
||||
vehicleNotYoursError = "Vehiculul nu îți aparține",
|
||||
notJobOrGangVehicle = "Acesta nu este un vehicul %{value}",
|
||||
invalidGangError = "Nu ai furnizat o bandă validă",
|
||||
invalidJobError = "Nu ai furnizat un job valid",
|
||||
notInsideVehicleError = "Nu ești într-un vehicul",
|
||||
vehicleAddedToGangGarageSuccess = "Vehicul adăugat în garajul bandei %{value}!",
|
||||
vehicleAddedToJobGarageSuccess = "Vehicul adăugat în garajul de serviciu %{value}!",
|
||||
moveCloserToVehicleError = "Trebuie să te apropii de vehicul",
|
||||
noVehiclesNearbyError = "Nu există vehicule în apropiere",
|
||||
commandPermissionsError = "Nu ai permisiunea de a folosi această comandă",
|
||||
actionNotAllowedError = "Nu ai permisiunea să faci asta",
|
||||
garageNameExistsError = "Numele garajului există deja",
|
||||
vehiclePlateExistsError = "Numărul de înmatriculare este deja utilizat",
|
||||
playerNotOnlineError = "Jucătorul nu este online",
|
||||
vehicleTransferSuccess = "Vehicul transferat la %{value}",
|
||||
vehicleTransferSuccessGeneral = "Vehicul transferat cu succes",
|
||||
vehicleReceived = "Ai primit un vehicul cu numărul %{value}",
|
||||
vehicleImpoundSuccess = "Vehicul depozitat cu succes",
|
||||
vehicleImpoundRemoveSuccess = "Vehicul eliminat din depozit",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "Vehiculul a fost returnat în garajul proprietarului",
|
||||
garageCreatedSuccess = "Garaj creat cu succes!",
|
||||
vehiclePlateUpdateSuccess = "Numărul de înmatriculare a fost schimbat în %{value}",
|
||||
vehicleDeletedSuccess = "Vehicul șters din baza de date %{value}",
|
||||
playerIsDead = "Nu poți face asta când ești mort",
|
||||
vehicleStoreError = "Nu poți depozita acest vehicul aici",
|
||||
|
||||
-- Comenzi
|
||||
cmdSetGangVehicle = "Adaugă vehiculul curent în garajul bandei",
|
||||
cmdRemoveGangVehicle = "Setează vehiculul bandei înapoi ca deținut de jucător",
|
||||
cmdSetJobVehicle = "Adaugă vehiculul curent în garajul de serviciu",
|
||||
cmdRemoveJobVehicle = "Setează vehiculul de serviciu înapoi ca deținut de jucător",
|
||||
cmdArgGangName = "Numele bandei",
|
||||
cmdArgJobName = "Numele jobului",
|
||||
cmgArgMinGangRank = "Rangul minim în bandă",
|
||||
cmgArgMinJobRank = "Rangul minim la job",
|
||||
cmdArgPlayerId = "ID-ul jucătorului noului proprietar",
|
||||
cmdImpoundVehicle = "Depozitează un vehicul",
|
||||
cmdChangePlate = "Schimbă numărul de înmatriculare (doar Admin)",
|
||||
cmdDeleteVeh = "Șterge vehicul din baza de date (doar Admin)",
|
||||
cmdCreatePrivGarage = "Creează un garaj privat pentru un jucător",
|
||||
}
|
143
resources/[carscripts]/jg-advancedgarages/locales/sv.lua
Normal file
143
resources/[carscripts]/jg-advancedgarages/locales/sv.lua
Normal file
|
@ -0,0 +1,143 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['sv'] = {
|
||||
yes = "Ja",
|
||||
no = "Nej",
|
||||
garage = "garage",
|
||||
jobGarage = "jobb Garage",
|
||||
gangGarage = "gäng Garage",
|
||||
player = "spelare",
|
||||
impound = "bärgare",
|
||||
inGarage = "i garaget",
|
||||
notInGarage = "inte i garaget",
|
||||
car = "bil",
|
||||
air = "luft",
|
||||
sea = "vatten",
|
||||
fuel = "bränsle",
|
||||
engine = "motor",
|
||||
body = "chassie",
|
||||
day = "dag",
|
||||
days = "dagar",
|
||||
hour = "timme",
|
||||
hours = "timmar",
|
||||
|
||||
-- User Interface
|
||||
noVehicles = "Det finns inga fordon i detta garaget",
|
||||
vehicles = "bil(ar)",
|
||||
vehiclePlate = "Registreringsskylt",
|
||||
vehicleNotInGarage = "Fordonet är inte i garaget",
|
||||
vehicleTakeOut = "Ta ut",
|
||||
vehicleReturnAndTakeOut = "Flytta & Kör",
|
||||
vehicleReturnToOwnersGarage = "Lämna tillbaka till ägarens garage",
|
||||
transferToGarageOrPlayer = "Flytta till ett garage eller spelare",
|
||||
transferToGarage = "Flytta till ett garage",
|
||||
transferToPlayer = "Flytta till en spelare",
|
||||
vehicleTransfer = "Flytta",
|
||||
noAvailableGarages = "Inga tillgängliga garage",
|
||||
currentGarage = "Nuvarande garage",
|
||||
noPlayersOnline = "Inga spelare online",
|
||||
createPrivateGarage = "Skapa privat garage",
|
||||
pgAlertHeadsUp = "Akta!",
|
||||
pgAlertText = "Garaget skapas och fordon kommer att spawnas på din position och åt det håll du står.",
|
||||
garageName = "Garage Namn",
|
||||
impoundInformation = "Bärgar Information",
|
||||
impoundedBy = "Bärgad av",
|
||||
impoundedReason = "Orsak",
|
||||
impoundPlayerCanCollect = "Du kan hämta din bil från bärgaren.",
|
||||
impoundCollectionContact = "Kontakta %{value} för att hämta ditt fordon.",
|
||||
impoundNoVehicles = "Det finns inga fordon hos bärgaren.",
|
||||
impoundAvailable = "Tillgänglig",
|
||||
impoundRetrievableByOwner = "Kan hämtas av ägaren",
|
||||
impoundNoReason = "Ingen anledning tillgänglig",
|
||||
impoundVehicle = "Bärgat fordon",
|
||||
impoundReasonField = "Orsak (valfritt)",
|
||||
impoundTime = "Tid hos bärgaren",
|
||||
impoundAvailableImmediately = "Tillgänglig direkt",
|
||||
impoundCost = "Kostnad",
|
||||
changeVehiclePlate = "Ändra registreringsnummer",
|
||||
newPlate = "Nytt registreringsnummer",
|
||||
search = "Sök med namn eller registreringsskylt",
|
||||
noPrivateGarages = "Inga privata garage",
|
||||
editPrivateGarage = "Ändra privat garage",
|
||||
owners = "Ägare(n)",
|
||||
location = "Plats",
|
||||
next = "Nästa",
|
||||
previous = "Tidigare",
|
||||
page = "Sida",
|
||||
of = "av",
|
||||
show = "Visa",
|
||||
save = "Spara",
|
||||
edit = "Redigera",
|
||||
delete = "Radera",
|
||||
garageDeleteConfirm = "Är du säker på att du vill ta bort detta garage?",
|
||||
privGarageSearch = "Sök efter namn",
|
||||
garageUpdatedSuccess = "Garaget har uppdaterats framgångsrikt!",
|
||||
getCurrentCoords = "Hämta aktuella koordinater",
|
||||
identifier = "Identifierare",
|
||||
name = "Namn",
|
||||
noPlayers = "Inga spelare har tillkommit",
|
||||
addPlayer = "Lägg till spelare",
|
||||
loadingVehicle = "Lastning av fordon...",
|
||||
vehicleSetup = "Inställning av fordon",
|
||||
extras = "Extramaterial",
|
||||
extra = "Extra",
|
||||
liveries = "Liveries",
|
||||
livery = "livery",
|
||||
noLiveries = "Inga liveries tillgängliga",
|
||||
noExtras = "Inga extrafunktioner tillgängliga",
|
||||
none = "Ingen",
|
||||
vehicleNeedsService = "Dags för service",
|
||||
type = "Typ",
|
||||
|
||||
-- Notifications
|
||||
insertVehicleTypeError = "Du kan endast förvara %{value} fordonstyp i detta garage",
|
||||
insertVehiclePublicError = "Du kan inte förvara Gäng eller Jobbfordon i allmänna garaget",
|
||||
vehicleParkedSuccess = "Fordonet är parkerat i garaget",
|
||||
vehicleNotOwnedError = "Du äger inte detta fordon",
|
||||
vehicleNotOwnedByPlayerError = "Fordonet ägs inte av en spelare",
|
||||
notEnoughMoneyError = "Du har inte nog med pengar på banken",
|
||||
vehicleNotYoursError = "Fordonet tillhör inte dig",
|
||||
notJobOrGangVehicle = "Detta är inte ett %{value} fordon",
|
||||
invalidGangError = "Du har inte angett ett giltigt gäng",
|
||||
invalidJobError = "Du har inte angett ett giltigt jobb",
|
||||
notInsideVehicleError = "Du sitter inte i fordonet",
|
||||
vehicleAddedToGangGarageSuccess = "Fordonet är inlagt i %{value} Gäng garage!",
|
||||
vehicleAddedToJobGarageSuccess = "Fordonet är inlagt %{value} jobb garage!",
|
||||
moveCloserToVehicleError = "Du måste vara närmare fordonet",
|
||||
noVehiclesNearbyError = "Det finns inga fordon i närheten",
|
||||
commandPermissionsError = "Du får inte använda detta kommando",
|
||||
actionNotAllowedError = "Du får inte göra detta",
|
||||
garageNameExistsError = "Garagenamnet existerar redan",
|
||||
vehiclePlateExistsError = "Registreringsnummer finns redan",
|
||||
playerNotOnlineError = "Spelaren är inte online",
|
||||
vehicleTransferSuccess = "Fordonet fördes över till %{value}",
|
||||
vehicleTransferSuccessGeneral = "Fordonet har överförts",
|
||||
vehicleReceived = "Du fick ett fordon med skylten %{value}",
|
||||
vehicleImpoundSuccess = "Fordonet är bärgad",
|
||||
vehicleImpoundRemoveSuccess = "Fordonet hämtad från bärgaren",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "Fordonet återlämnades till ägarens garage",
|
||||
garageCreatedSuccess = "Garage har skapats!",
|
||||
vehiclePlateUpdateSuccess = "Fordonsskylt är uppdaterad till %{value}",
|
||||
vehicleDeletedSuccess = "Fordonet raderat från databasen %{value}",
|
||||
playerIsDead = "Du kan inte göra detta då du är död",
|
||||
|
||||
-- Commands
|
||||
cmdSetGangVehicle = "Lägg till nuvarande fordon till ett gänggarage",
|
||||
cmdRemoveGangVehicle = "Sätt tillbaka gängfordonet till spelarägt",
|
||||
cmdSetJobVehicle = "Lägg till aktuellt fordon till ett jobbgarage",
|
||||
cmdRemoveJobVehicle = "Sätt tillbaka Jobbfordonet till spelarägt",
|
||||
cmdArgGangName = "Gängnamn",
|
||||
cmdArgJobName = "Jobbnamn",
|
||||
cmgArgMinGangRank = "Minimum gäng rank",
|
||||
cmgArgMinJobRank = "Minimum jobb rank",
|
||||
cmdArgPlayerId = "SpelarID för nya ägare",
|
||||
cmdImpoundVehicle = "Bärga ett fordon",
|
||||
cmdChangePlate = "Ändra fordonsskylt (Admin endast)",
|
||||
cmdDeleteVeh = "Ta bort fordon från databasen (Admin endast)",
|
||||
cmdCreatePrivGarage = "Gör ett privatgarage till en spelare",
|
||||
|
||||
-- v3
|
||||
vehicleStoreError = "Du kan inte ställa in detta fordonet här",
|
||||
mins = "minuter",
|
||||
noVehiclesAvailableToDrive = "Det finns inga fordon i detta garaget",
|
||||
}
|
142
resources/[carscripts]/jg-advancedgarages/locales/vi.lua
Normal file
142
resources/[carscripts]/jg-advancedgarages/locales/vi.lua
Normal file
|
@ -0,0 +1,142 @@
|
|||
Locales = Locales or {}
|
||||
|
||||
Locales['vi'] = {
|
||||
yes = "Có",
|
||||
no = "Không",
|
||||
garage = "Bãi đậu xe",
|
||||
jobGarage = "Bãi đậu xe công việc",
|
||||
gangGarage = "Gang Garage",
|
||||
player = "Người chơi",
|
||||
impound = "Bị giam",
|
||||
inGarage = "Trong gara",
|
||||
notInGarage = "Bên ngoài",
|
||||
car = "Xe",
|
||||
air = "Máy bay",
|
||||
sea = "Thuyền",
|
||||
fuel = "Xăng",
|
||||
engine = "Động cơ",
|
||||
body = "Thân vỏ",
|
||||
day = "ngày",
|
||||
days = "ngày",
|
||||
hour = "giờ",
|
||||
hours = "giờ",
|
||||
|
||||
-- User Interface
|
||||
noVehicles = "Không có xe nào trong gara này",
|
||||
vehicles = "Xe",
|
||||
vehiclePlate = "Biển số xe",
|
||||
vehicleNotInGarage = "Xe không ở trong gara",
|
||||
vehicleTakeOut = "Lấy xe",
|
||||
vehicleReturnAndTakeOut = "Thanh toán và lấy xe",
|
||||
vehicleReturnToOwnersGarage = "Gửi về garage",
|
||||
transferToGarageOrPlayer = "Transfer to a Garage or Player",
|
||||
transferToGarage = "Transfer to a Garage",
|
||||
transferToPlayer = "",
|
||||
vehicleTransfer = "Chuyển nhượng",
|
||||
noAvailableGarages = "Không có gara",
|
||||
currentGarage = "Gara hiện tại",
|
||||
noPlayersOnline = "Không có người chơi online",
|
||||
createPrivateGarage = "Tạo gara cá nhân",
|
||||
pgAlertHeadsUp = "Đứng lên!",
|
||||
pgAlertText = "Gara sẽ được tạo ra và xe được lấy ra sẽ xuất hiện ngay vị trí mà bạn đang đứng.",
|
||||
garageName = "Tên Gara",
|
||||
impoundInformation = "Thông tin giam xe",
|
||||
impoundedBy = "Giam bởi",
|
||||
impoundedReason = "Lý do",
|
||||
impoundPlayerCanCollect = "Bạn có thể lấy xe của mình từ bãi giam xe.",
|
||||
impoundCollectionContact = "Vui lòng liên hệ %{value} hoặc Police để chuộc lại xe của bạn.",
|
||||
impoundNoVehicles = "Bạn không có Xe nào bị giam giữ",
|
||||
impoundAvailable = "Được phép lấy vào lúc ",
|
||||
impoundAvailableGreen = "Có thể lấy",
|
||||
impoundRetrievableByOwner = "Chủ xe có thể tự lấy xe ra",
|
||||
impoundNoReason = "Lý do trống",
|
||||
impoundVehicle = "Tạm giữ xe",
|
||||
impoundReasonField = "Lý do",
|
||||
impoundTime = "Thời gian giam",
|
||||
impoundAvailableImmediately = "Không có",
|
||||
impoundCost = "Giá",
|
||||
changeVehiclePlate = "Đổi biển số xe",
|
||||
newPlate = "Biển số mới",
|
||||
search = "Tìm kiếm theo tên hoặc biển số xe",
|
||||
noPrivateGarages = "Không có nhà để xe riêng",
|
||||
editPrivateGarage = "Chỉnh sửa nhà để xe riêng",
|
||||
owners = "Những chủ sở hữu)",
|
||||
location = "Vị trí",
|
||||
next = "Kế tiếp",
|
||||
previous = "Trước",
|
||||
page = "Trang",
|
||||
of = "của",
|
||||
show = "Trình diễn",
|
||||
save = "Cứu",
|
||||
edit = "Biên tập",
|
||||
delete = "Xóa bỏ",
|
||||
garageDeleteConfirm = "Bạn có chắc chắn muốn xóa gara này không?",
|
||||
privGarageSearch = "Tìm kiếm theo tên",
|
||||
garageUpdatedSuccess = "Nhà để xe được cập nhật thành công!",
|
||||
getCurrentCoords = "Nhận tọa độ hiện tại",
|
||||
identifier = "định danh",
|
||||
name = "Tên",
|
||||
noPlayers = "Không có người chơi nào được thêm vào",
|
||||
addPlayer = "thêm người chơi",
|
||||
loadingVehicle = "Tải xe...",
|
||||
vehicleSetup = "Thiết lập xe",
|
||||
extras = "Tiện ích bổ sung",
|
||||
extra = "Thêm",
|
||||
liveries = "gan",
|
||||
livery = "gan",
|
||||
noLiveries = "không có gan",
|
||||
noExtras = "Không có tính năng bổ sung",
|
||||
none = "Không có",
|
||||
vehicleNeedsService = "Needs Service",
|
||||
type = "Type",
|
||||
|
||||
-- Notifications
|
||||
insertVehicleTypeError = "Bạn chỉ có thể để %{value} vào trong gara này!",
|
||||
insertVehiclePublicError = "Bạn không thể cất xe tổ chức vào trong gara công cộng!",
|
||||
vehicleParkedSuccess = "Cất xe vào gara thành công",
|
||||
vehicleNotOwnedError = "Bạn không phải là chủ sở hữu của chiếc xe này!",
|
||||
vehicleNotOwnedByPlayerError = "Xe này không thuộc sở hữu của người chơi nào!",
|
||||
notEnoughMoneyError = "Bạn không đủ tiền trong ngân hàng!",
|
||||
vehicleNotYoursError = "Xe này không thuộc về bạn!",
|
||||
notJobOrGangVehicle = "Đây không phải là xe của %{value}",
|
||||
invalidGangError = "Tên gang không hợp lệ!",
|
||||
invalidJobError = "Tên job không hợp lệ!",
|
||||
notInsideVehicleError = "Bạn không ngồi trên xe",
|
||||
vehicleAddedToGangGarageSuccess = "Xe này đã được thêm vào %{value}!",
|
||||
vehicleAddedToJobGarageSuccess = "Xe này đã được thêm vào %{value}!",
|
||||
moveCloserToVehicleError = "Bạn cần di chuyển đến gần xe hơn!",
|
||||
noVehiclesNearbyError = "Không có chiếc xe nào gần bạn!",
|
||||
commandPermissionsError = "Bạn không thể sử dụng lệnh này!",
|
||||
actionNotAllowedError = "Bạn không được phép làm điều này!",
|
||||
garageNameExistsError = "Tên gara này đã tồn tại!",
|
||||
vehiclePlateExistsError = "Biển số xe này đã tồn tại",
|
||||
playerNotOnlineError = "Người chơi này không online",
|
||||
vehicleTransferSuccess = "Xe được chuyển đến %{value}",
|
||||
vehicleTransferSuccessGeneral = "Xe của bạn đã được chuyển thành công!",
|
||||
vehicleReceived = "Bạn đã nhận được một chiếc xe với biển số %{value}",
|
||||
vehicleImpoundSuccess = "Tạm giữ xe thành công!",
|
||||
vehicleImpoundRemoveSuccess = "Xe đã được chuộc thành công",
|
||||
vehicleImpoundReturnedToOwnerSuccess = "Xe này đã được chuyển về gara chủ sở hữu",
|
||||
garageCreatedSuccess = "Tạo gara thành công!",
|
||||
vehiclePlateUpdateSuccess = "Biển số xe được đổi thành: %{value}",
|
||||
vehicleDeletedSuccess = "Xe này đã được xoá khỏi database %{value}",
|
||||
playerIsDead = "Bạn không thể làm điều này trong khi bạn đã chết",
|
||||
|
||||
-- Commands
|
||||
cmdSetGangVehicle = "Thêm Xe hiện tại vào một Gang",
|
||||
cmdRemoveGangVehicle = "Đặt xe gang thành xe cá nhân",
|
||||
cmdSetJobVehicle = "Thêm xe hiện tại vào một nghề nào đó",
|
||||
cmdRemoveJobVehicle = "Đặt xe nghề thành xe cá nhân",
|
||||
cmdArgGangName = "Tên Gang",
|
||||
cmdArgJobName = "Tên Job",
|
||||
cmdArgPlayerId = "ID của chủ sỡ hữu mới",
|
||||
cmdImpoundVehicle = "Giam giữ xe",
|
||||
cmdChangePlate = "Đổi biển số xe (Admin only)",
|
||||
cmdDeleteVeh = "Xoá xe khỏi dữ liệu máy chủ (Admin only)",
|
||||
cmdCreatePrivGarage = "Tạo gara cá nhân",
|
||||
|
||||
-- v3
|
||||
vehicleStoreError = "You cannot store this vehicle here",
|
||||
mins = "mins",
|
||||
noVehiclesAvailableToDrive = "There are no vehicles available to drive",
|
||||
}
|
BIN
resources/[carscripts]/jg-advancedgarages/server/sv-garage.lua
Normal file
BIN
resources/[carscripts]/jg-advancedgarages/server/sv-garage.lua
Normal file
Binary file not shown.
BIN
resources/[carscripts]/jg-advancedgarages/server/sv-impound.lua
Normal file
BIN
resources/[carscripts]/jg-advancedgarages/server/sv-impound.lua
Normal file
Binary file not shown.
BIN
resources/[carscripts]/jg-advancedgarages/server/sv-initsql.lua
Normal file
BIN
resources/[carscripts]/jg-advancedgarages/server/sv-initsql.lua
Normal file
Binary file not shown.
BIN
resources/[carscripts]/jg-advancedgarages/server/sv-interior.lua
Normal file
BIN
resources/[carscripts]/jg-advancedgarages/server/sv-interior.lua
Normal file
Binary file not shown.
Binary file not shown.
BIN
resources/[carscripts]/jg-advancedgarages/server/sv-main.lua
Normal file
BIN
resources/[carscripts]/jg-advancedgarages/server/sv-main.lua
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
resources/[carscripts]/jg-advancedgarages/server/sv-spawn.lua
Normal file
BIN
resources/[carscripts]/jg-advancedgarages/server/sv-spawn.lua
Normal file
Binary file not shown.
BIN
resources/[carscripts]/jg-advancedgarages/server/sv-vehicle.lua
Normal file
BIN
resources/[carscripts]/jg-advancedgarages/server/sv-vehicle.lua
Normal file
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,70 @@
|
|||
--
|
||||
-- Discord Webhooks
|
||||
--
|
||||
Webhooks = {}
|
||||
Webhooks.VehicleTakeOutAndInsert = ""
|
||||
Webhooks.VehiclePlayerTransfer = ""
|
||||
Webhooks.VehicleGarageTransfer = ""
|
||||
Webhooks.Impound = ""
|
||||
Webhooks.PrivateGarages = ""
|
||||
|
||||
--[[
|
||||
EXAMPLE WEBHOOK CALL
|
||||
|
||||
sendWebhook(src, Webhooks.VehicleTakeOutAndInsert, "Webhook Title", "success", {
|
||||
{ key = "Data fields", value = "Data value" },
|
||||
{ key = "Data fields 2", value = "Data value 2" }
|
||||
})
|
||||
]]--
|
||||
|
||||
function sendWebhook(playerId, webhookUrl, title, type, data)
|
||||
if not webhookUrl then return end
|
||||
|
||||
local identifier = Framework.Server.GetPlayerIdentifier(playerId)
|
||||
if not identifier then return false end
|
||||
|
||||
local color = 0xff6700
|
||||
if type == "success" then color = 0x2ecc71 end
|
||||
if type == "danger" then color = 0xe74c3c end
|
||||
|
||||
local player = Framework.Server.GetPlayerInfo(playerId)
|
||||
if not player then return false end
|
||||
|
||||
local fields = {
|
||||
{
|
||||
name = "Player",
|
||||
value = string.format("%s (%s)", player.name, identifier),
|
||||
inline = false
|
||||
}
|
||||
}
|
||||
for _, row in pairs(data) do
|
||||
fields[#fields + 1] = {
|
||||
name = row.key,
|
||||
value = tostring(row.value),
|
||||
inline = true
|
||||
}
|
||||
end
|
||||
|
||||
local body = {
|
||||
username = "JG Advanced Garages Webhook",
|
||||
avatar_url = "https://forum.cfx.re/user_avatar/forum.cfx.re/jgscripts/288/3621910_2.png",
|
||||
content = "",
|
||||
embeds = {
|
||||
{
|
||||
type = "rich",
|
||||
title = title,
|
||||
description = "",
|
||||
color = color,
|
||||
fields = fields
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PerformHttpRequest(
|
||||
webhookUrl,
|
||||
function(err, text, header) end,
|
||||
"POST",
|
||||
json.encode(body),
|
||||
{["Content-Type"] = "application/json"}
|
||||
)
|
||||
end
|
BIN
resources/[carscripts]/jg-advancedgarages/shared/main.lua
Normal file
BIN
resources/[carscripts]/jg-advancedgarages/shared/main.lua
Normal file
Binary file not shown.
|
@ -0,0 +1,6 @@
|
|||
This is where you can add custom vehicle thumbnails. But first:
|
||||
|
||||
1. You must have this feature enabled in config.lua `Config.ShowVehicleImages = true`
|
||||
2. All images must be a png and a small file size. Ideally a 16:9 aspect ratio too
|
||||
|
||||
Learn more: https://docs.jgscripts.com/advanced-garages/vehicle-images
|
55
resources/[carscripts]/jg-advancedgarages/web/dist/assets/index-CZ7rsOCg.js
vendored
Normal file
55
resources/[carscripts]/jg-advancedgarages/web/dist/assets/index-CZ7rsOCg.js
vendored
Normal file
File diff suppressed because one or more lines are too long
5
resources/[carscripts]/jg-advancedgarages/web/dist/assets/index-DURuzDZl.css
vendored
Normal file
5
resources/[carscripts]/jg-advancedgarages/web/dist/assets/index-DURuzDZl.css
vendored
Normal file
File diff suppressed because one or more lines are too long
14
resources/[carscripts]/jg-advancedgarages/web/dist/index.html
vendored
Normal file
14
resources/[carscripts]/jg-advancedgarages/web/dist/index.html
vendored
Normal file
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-bs-theme="dark">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/web/dist/vite.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>jg-advancedgarages-web</title>
|
||||
<script type="module" crossorigin src="/web/dist/assets/index-CZ7rsOCg.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/web/dist/assets/index-DURuzDZl.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
</body>
|
||||
</html>
|
1
resources/[carscripts]/jg-advancedgarages/web/dist/vite.svg
vendored
Normal file
1
resources/[carscripts]/jg-advancedgarages/web/dist/vite.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
After Width: | Height: | Size: 1.5 KiB |
Loading…
Add table
Add a link
Reference in a new issue