fixing vehicles
This commit is contained in:
@@ -5,39 +5,39 @@ Config.kmh = false
|
||||
-- Set Config.maxSpeed to false if you want to use same speed for all vehicles
|
||||
-- Set the max speed for all vehicles on Config.maxSpeed
|
||||
Config.useCategories = true
|
||||
Config.maxSpeed = 190
|
||||
Config.maxSpeed = 180
|
||||
|
||||
Config.Categories = {
|
||||
-- COMPACTS
|
||||
{category = 0, maxSpeed = 195},
|
||||
{category = 0, maxSpeed = 165},
|
||||
-- SEDANS
|
||||
{category = 1, maxSpeed = 195},
|
||||
{category = 1, maxSpeed = 165},
|
||||
-- SUV'S
|
||||
{category = 2, maxSpeed = 195},
|
||||
{category = 2, maxSpeed = 165},
|
||||
-- COUPES
|
||||
{category = 3, maxSpeed = 195},
|
||||
{category = 3, maxSpeed = 165},
|
||||
-- MUSCLE
|
||||
{category = 4, maxSpeed = 195},
|
||||
{category = 4, maxSpeed = 165},
|
||||
-- SPORT CLASSIC
|
||||
{category = 5, maxSpeed = 130},
|
||||
{category = 5, maxSpeed = 160},
|
||||
-- SPORT
|
||||
{category = 6, maxSpeed = 195},
|
||||
{category = 6, maxSpeed = 165},
|
||||
-- SUPER
|
||||
{category = 7, maxSpeed = 195},
|
||||
{category = 7, maxSpeed = 165},
|
||||
-- MOTORCYCLES
|
||||
{category = 8, maxSpeed = 136},
|
||||
{category = 8, maxSpeed = 130},
|
||||
-- OFFROAD
|
||||
{category = 9, maxSpeed = 186},
|
||||
{category = 9, maxSpeed = 165},
|
||||
-- INDUSTRIAL
|
||||
{category = 10, maxSpeed = 187},
|
||||
{category = 10, maxSpeed = 125},
|
||||
-- UTILITY
|
||||
{category = 11, maxSpeed = 176},
|
||||
{category = 11, maxSpeed = 125},
|
||||
-- VANS
|
||||
{category = 12, maxSpeed = 189},
|
||||
{category = 12, maxSpeed = 165},
|
||||
-- BICYCLES
|
||||
{category = 13, maxSpeed = 110},
|
||||
{category = 13, maxSpeed = 85},
|
||||
-- BOATS
|
||||
{category = 14, maxSpeed = 84},
|
||||
{category = 14, maxSpeed = 125},
|
||||
|
||||
--#region PLANES AND HELIS
|
||||
-- YOU MUST NOT LOCK THIS ONES OR YOU WON'T BE ABLE TO FLY THEM!!!
|
||||
@@ -46,11 +46,11 @@ Config.Categories = {
|
||||
--#endregion
|
||||
|
||||
-- SERVICE
|
||||
{category = 17, maxSpeed = 180},
|
||||
{category = 17, maxSpeed = 165},
|
||||
-- EMERGENCY
|
||||
{category = 18, maxSpeed = 580},
|
||||
{category = 18, maxSpeed = 550},
|
||||
-- MILITARY
|
||||
{category = 19, maxSpeed = 369}
|
||||
{category = 19, maxSpeed = 168}
|
||||
}
|
||||
|
||||
-- DO NOT MODIFY
|
||||
|
||||
Binary file not shown.
Binary file not shown.
+289
-289
@@ -12,73 +12,103 @@ if ConfigHose.Notifications.Enabled and ConfigHose.Notifications.Framework.ESX t
|
||||
end
|
||||
|
||||
if ConfigHose.EnablePositioningCommand then
|
||||
TriggerEvent('chat:addSuggestion', '/'.."findhosepositioning", "Find positioning of the hose/supply line on your fire truck")
|
||||
TriggerEvent('chat:addSuggestion', '/'.."findhosepositioning", "Find rope spawn point with rotation", {
|
||||
{ name="type", help="hose or hand" }
|
||||
})
|
||||
|
||||
RegisterCommand("findhosepositioning", function(source, args)
|
||||
|
||||
RegisterCommand("findhosepositioning", function(source, args)
|
||||
local ropeLabel = (args[1] or "hose"):lower()
|
||||
local ped = PlayerPedId()
|
||||
|
||||
local ropeType = 4
|
||||
if RopeManager.RopeTypes and RopeManager.RopeTypes[ropeLabel] then
|
||||
ropeType = RopeManager.RopeTypes[ropeLabel]
|
||||
end
|
||||
|
||||
local targetVehicle = GetVehiclePedIsIn(ped, false)
|
||||
|
||||
if targetVehicle == nil or targetVehicle == 0 then
|
||||
Notify("No vehicle found!")
|
||||
else
|
||||
local model = `p_ld_soc_ball_01`
|
||||
SetEntityAlpha(targetVehicle, 150, false)
|
||||
RequestModel(model)
|
||||
while not HasModelLoaded(model) do Wait(0) end
|
||||
local ballProp = CreateObject(model, coords, false, false, false)
|
||||
if targetVehicle == 0 then targetVehicle = GetClosestVehicle(GetEntityCoords(ped)) end
|
||||
if targetVehicle == 0 then return Notify("No vehicle found!") end
|
||||
|
||||
while not DoesEntityExist(ballProp) do Wait(0) end
|
||||
RopeLoadTextures()
|
||||
local vehPos = GetEntityCoords(targetVehicle)
|
||||
local previewRope = AddRope(vehPos.x, vehPos.y, vehPos.z, 0.0, 0.0, 0.0, 20.0, ropeType, 20.0, 0.5, 1.0, false, false, false, 5.0, false, 0)
|
||||
|
||||
local offSet = {x = 0.0, y = 0.0, z = 0.0}
|
||||
local rotation = {x = 0.0, y = 0.0, z = 0.0}
|
||||
local depth = 0.2
|
||||
local mode = "MOVE"
|
||||
local editing = true
|
||||
|
||||
SetModelAsNoLongerNeeded(model)
|
||||
local offSet = {0.0, 0.0, 0.0}
|
||||
local rotation = {0.0, 0.0, 0.0}
|
||||
local offSetComplete = false
|
||||
while not offSetComplete do
|
||||
if targetVehicle ~= nil and targetVehicle ~= 0 then
|
||||
DetachEntity(ballProp, true, false)
|
||||
AttachEntityToEntity(ballProp, targetVehicle, -1, offSet[1], offSet[2], offSet[3], rotation[1], rotation[2], rotation[3], true, false, true, false, 1, true)
|
||||
if not IsControlReleased(0, 207) then --page down
|
||||
offSet = {offSet[1], offSet[2], offSet[3] - 0.01}
|
||||
end
|
||||
Notify("~b~POSITIONING MODE~w~\n[TAB] Toggle Move/Rotate\n[Arrows] Adjust\n[INSERT/DELETE] Depth\n[ENTER] Save")
|
||||
|
||||
if not IsControlReleased(0, 208) then --page up
|
||||
offSet = {offSet[1], offSet[2], offSet[3] + 0.01}
|
||||
end
|
||||
SetEntityAlpha(targetVehicle, 150, false)
|
||||
|
||||
if not IsControlReleased(0, 173) then --arrow down
|
||||
offSet = {offSet[1], offSet[2] - 0.01, offSet[3]}
|
||||
end
|
||||
|
||||
if not IsControlReleased(0, 172) then --arrow up
|
||||
offSet = {offSet[1], offSet[2] + 0.01, offSet[3]}
|
||||
end
|
||||
|
||||
if not IsControlReleased(0, 174) then --arrow left
|
||||
offSet = {offSet[1] - 0.01, offSet[2], offSet[3]}
|
||||
end
|
||||
|
||||
if not IsControlReleased(0, 175) then --arrow right
|
||||
offSet = {offSet[1] + 0.01, offSet[2], offSet[3]}
|
||||
end
|
||||
|
||||
if IsControlJustPressed(0, 191) then -- enter - finish
|
||||
offSetComplete = true
|
||||
end
|
||||
end
|
||||
|
||||
Wait(0)
|
||||
while editing do
|
||||
Wait(0)
|
||||
local speed = IsControlPressed(0, 21) and 0.05 or 0.005
|
||||
|
||||
if IsControlJustPressed(0, 192) then
|
||||
mode = (mode == "MOVE") and "ROTATE" or "MOVE"
|
||||
Notify("Mode: ~y~" .. mode)
|
||||
end
|
||||
|
||||
Notify("OffSet Values are now printed in your console")
|
||||
print("OffSet: {"..offSet[1]..", "..offSet[2]..", "..offSet[3].."}")
|
||||
DeleteEntity(ballProp)
|
||||
ResetEntityAlpha(targetVehicle)
|
||||
end
|
||||
|
||||
end, false)
|
||||
end
|
||||
if IsControlPressed(0, 121) then depth = depth + 0.005 end
|
||||
if IsControlPressed(0, 178) then depth = depth - 0.005 end
|
||||
|
||||
local up = IsControlPressed(0, ConfigHose.PositioningControls.up)
|
||||
local down = IsControlPressed(0, ConfigHose.PositioningControls.down)
|
||||
local forward = IsControlPressed(0, ConfigHose.PositioningControls.forwards)
|
||||
local backward = IsControlPressed(0, ConfigHose.PositioningControls.backwards)
|
||||
local left = IsControlPressed(0, ConfigHose.PositioningControls.left)
|
||||
local right = IsControlPressed(0, ConfigHose.PositioningControls.right)
|
||||
|
||||
if mode == "MOVE" then
|
||||
if up then offSet.z = offSet.z + speed end
|
||||
if down then offSet.z = offSet.z - speed end
|
||||
if forward then offSet.y = offSet.y + speed end
|
||||
if backward then offSet.y = offSet.y - speed end
|
||||
if left then offSet.x = offSet.x - speed end
|
||||
if right then offSet.x = offSet.x + speed end
|
||||
else
|
||||
local rSpeed = speed * 50.0
|
||||
if up then rotation.x = rotation.x + rSpeed end
|
||||
if down then rotation.x = rotation.x - rSpeed end
|
||||
if left then rotation.z = rotation.z + rSpeed end
|
||||
if right then rotation.z = rotation.z - rSpeed end
|
||||
end
|
||||
|
||||
local forwardVec = RotationToDirection(rotation)
|
||||
local localPortPos = vector3(offSet.x, offSet.y, offSet.z)
|
||||
local localBendPosA = localPortPos - (forwardVec * depth)
|
||||
local localBendPosB = localPortPos - (forwardVec * (depth * 0.5))
|
||||
|
||||
local worldPointC = GetOffsetFromEntityInWorldCoords(targetVehicle, localPortPos.x, localPortPos.y, localPortPos.z)
|
||||
local worldPointA = GetOffsetFromEntityInWorldCoords(targetVehicle, localBendPosA.x, localBendPosA.y, localBendPosA.z)
|
||||
local worldPointB = GetOffsetFromEntityInWorldCoords(targetVehicle, localBendPosB.x, localBendPosB.y, localBendPosB.z)
|
||||
local handPos = GetWorldPositionOfEntityBone(ped, GetPedBoneIndex(ped, 6286))
|
||||
local vertexCount = GetRopeVertexCount(previewRope)
|
||||
|
||||
PinRopeVertex(previewRope, 0, handPos.x, handPos.y, handPos.z)
|
||||
PinRopeVertex(previewRope, vertexCount - 1, worldPointA.x, worldPointA.y, worldPointA.z)
|
||||
PinRopeVertex(previewRope, vertexCount - 2, worldPointB.x, worldPointB.y, worldPointB.z)
|
||||
PinRopeVertex(previewRope, vertexCount - 3, worldPointC.x, worldPointC.y, worldPointC.z)
|
||||
|
||||
if IsControlJustPressed(0, ConfigHose.PositioningControls.enter) then editing = false end
|
||||
end
|
||||
|
||||
ResetEntityAlpha(targetVehicle)
|
||||
|
||||
print(string.format("^2--- %s RESULT ---^7", ropeLabel:upper()))
|
||||
if ropeLabel == "hose" then
|
||||
print(string.format('{ x = %.3f, y = %.3f, z = %.3f, rx = %.3f, ry = %.3f, rz = %.3f, depth = %.3f, type = "%s", portId = "attack1" },', offSet.x, offSet.y, offSet.z, rotation.x, rotation.y, rotation.z, depth, ropeLabel))
|
||||
else
|
||||
print(string.format('{ x = %.3f, y = %.3f, z = %.3f, rx = %.3f, ry = %.3f, rz = %.3f, depth = %.3f, type = "%s" },', offSet.x, offSet.y, offSet.z, rotation.x, rotation.y, rotation.z, depth, ropeLabel))
|
||||
end
|
||||
|
||||
DeleteRope(previewRope)
|
||||
Notify("Data printed to F8 console.")
|
||||
end, false)
|
||||
end
|
||||
|
||||
function Notify(text)
|
||||
|
||||
@@ -110,7 +140,7 @@ function showBaseNotification(message)
|
||||
DrawNotification(0,1)
|
||||
end
|
||||
|
||||
-- General Functions @GeneralFunctions
|
||||
-- @GeneralFunctions
|
||||
function DisplayHelpText(text)
|
||||
SetTextComponentFormat("STRING")
|
||||
AddTextComponentString(text)
|
||||
@@ -127,272 +157,242 @@ function drawInstructionalText(msg, coords)
|
||||
end
|
||||
|
||||
function IsFireHoseEnabled()
|
||||
return (HoseManager.nozzle and not HoseManager.nozzleDropped)
|
||||
return (HoseManager.hasFireHose and not HoseManager.nozzleDropped)
|
||||
end
|
||||
|
||||
exports("IsFireHoseEnabled", IsFireHoseEnabled)
|
||||
|
||||
function IsFireHoseShooting()
|
||||
return HoseManager.pressed
|
||||
end
|
||||
|
||||
exports("IsFireHoseShooting", IsFireHoseShooting)
|
||||
|
||||
function IsFireHoseShootingWater()
|
||||
return ParticleManager.isWaterDecal
|
||||
end
|
||||
|
||||
exports("IsFireHoseShootingWater", IsFireHoseShootingWater)
|
||||
|
||||
function IsVehicleUsingWater(vehicleNetID)
|
||||
local settings = HoseManager.vehicleSettings[vehicleNetID]
|
||||
if not settings then return true end
|
||||
return settings.decalType
|
||||
end
|
||||
exports("IsVehicleUsingWater", IsVehicleUsingWater)
|
||||
|
||||
function GetCurrentDecalCoords()
|
||||
return ParticleManager.CurrentDecalCoords
|
||||
end
|
||||
|
||||
exports("GetCurrentDecalCoords", GetCurrentDecalCoords)
|
||||
|
||||
function GetCurrentHosePressure()
|
||||
return ParticleManager.particleScale
|
||||
end
|
||||
|
||||
exports("GetCurrentHosePressure", GetCurrentHosePressure)
|
||||
|
||||
local vehicleModels = getVehicleModelsFromCapacities()
|
||||
local interactionId = "menuId"
|
||||
if ConfigHose.InteractType.TruckInteraction.Drawtext or ConfigHose.InteractType.TruckInteraction.ScreenPrompt then
|
||||
if ConfigHose.InteractType.TruckInteraction.Custom then
|
||||
local function _toNetId(ent)
|
||||
if ent and DoesEntityExist(ent) then return ToNetId(ent) end
|
||||
return nil
|
||||
end
|
||||
|
||||
local function _neighborsFor(netId)
|
||||
local list = {}
|
||||
if not netId then return list end
|
||||
local RM = RopeManager or {}
|
||||
local cv = RM.connectedVehicles and RM.connectedVehicles[netId]
|
||||
if type(cv) == 'number' then list[#list+1] = cv
|
||||
elseif type(cv) == 'table' then for nid,_ in pairs(cv) do list[#list+1] = tonumber(nid) or nid end end
|
||||
local ic = RM.incomingConnections and RM.incomingConnections[netId]
|
||||
if type(ic) == 'number' then list[#list+1] = ic
|
||||
elseif type(ic) == 'table' then for nid,_ in pairs(ic) do list[#list+1] = tonumber(nid) or nid end end
|
||||
return list
|
||||
end
|
||||
|
||||
local function _buildCtx(vehicle)
|
||||
local ped = PlayerPedId()
|
||||
local pos = GetEntityCoords(ped)
|
||||
|
||||
local model = GetEntityModel(vehicle)
|
||||
local vs = (ConfigHose.Rope.VehicleSettings[model] or {})
|
||||
local useBone = vs.useBone or false
|
||||
local bones = vs.bones or {}
|
||||
local offsets = vs.offsets or { { x = 0.0, y = 0.0, z = 0.0 } }
|
||||
local pts = getAttachmentPoints(vehicle, useBone, bones, offsets)
|
||||
if type(pts) ~= 'table' or #pts == 0 then pts = { GetEntityCoords(vehicle) } end
|
||||
|
||||
local closest = pts[1]
|
||||
local minDist = #(pos - closest)
|
||||
for i = 2, #pts do
|
||||
local p = pts[i]
|
||||
local d = #(pos - p)
|
||||
if d < minDist then closest, minDist = p, d end
|
||||
end
|
||||
|
||||
local meId = GetPlayerServerId(PlayerId())
|
||||
local vehNet = _toNetId(vehicle)
|
||||
local neigh = _neighborsFor(vehNet)
|
||||
|
||||
return {
|
||||
ped = ped,
|
||||
playerServerId = meId,
|
||||
|
||||
vehicle = vehicle,
|
||||
vehNet = vehNet,
|
||||
vehModel = model,
|
||||
promptCoords = closest,
|
||||
vehicleDistance = minDist,
|
||||
neighbors = neigh,
|
||||
|
||||
nozzle = HoseManager.nozzle,
|
||||
nozzleDropped = HoseManager.nozzleDropped,
|
||||
currentVehicle = HoseManager.currentVehicle,
|
||||
handLineActive = HoseManager.handLine[meId] and true or false,
|
||||
currentVehicleRelay = HoseManager.currentVehicleRelay,
|
||||
supplyEnabled = IsSupplyLineEnabled(),
|
||||
}
|
||||
end
|
||||
|
||||
-- Actions you can call from your custom interactions
|
||||
HoseCustomActions = {
|
||||
GrabHose = function(ctx)
|
||||
HoseManager.currentVehicle = ctx.vehicle
|
||||
InitializeFireHose()
|
||||
AttachRopeToProp()
|
||||
end,
|
||||
StoreHose = function(ctx)
|
||||
if HoseManager.nozzle and HoseManager.currentVehicle == ctx.vehicle and not HoseManager.nozzleDropped then
|
||||
UnequipFireHose()
|
||||
else
|
||||
Notify(ConfigHose.Translations.cannotStoreHoseWhileOnGround)
|
||||
end
|
||||
end,
|
||||
GrabRelay = function(ctx)
|
||||
HoseManager.currentVehicleRelay = ctx.vehicle
|
||||
InitializeHandLine()
|
||||
AttachRopeToHand()
|
||||
end,
|
||||
StoreRelay = function(_ctx)
|
||||
DeinitializeHandLine()
|
||||
end,
|
||||
ConnectRelayHere = function(ctx)
|
||||
DeinitializeHandLine()
|
||||
ConnectRelayToVehicle(ctx.vehicle)
|
||||
end,
|
||||
QuickDisconnectNearest = function(ctx)
|
||||
if not ctx.vehNet or #ctx.neighbors == 0 then return end
|
||||
local best, bestD, myPos = nil, 1e9, GetEntityCoords(PlayerPedId())
|
||||
for _, n in ipairs(ctx.neighbors) do
|
||||
local ent = NetEnt(n)
|
||||
if ent and DoesEntityExist(ent) then
|
||||
local d = #(myPos - GetEntityCoords(ent))
|
||||
if d < bestD then best, bestD = n, d end
|
||||
elseif not best then
|
||||
best = n
|
||||
end
|
||||
end
|
||||
if best then
|
||||
local sId, tId = canonicalPair(ctx.vehNet, best)
|
||||
DisconnectRelayLine(sId, tId, ctx.vehNet)
|
||||
end
|
||||
end,
|
||||
OpenPanel = function(_ctx)
|
||||
OpenControlPanel()
|
||||
end
|
||||
}
|
||||
|
||||
-- ctx = _buildCtx(vehicle) (state for the vehicle/player)
|
||||
-- A = HoseCustomActions (ready actions)
|
||||
-- Draw helpers available: drawInstructionalText() / DisplayHelpText() from this file.
|
||||
-- Example below mirrors the original E/G/Z flow aka ConfigHose.TruckInteraction.InteractType.Drawtext.
|
||||
if not CustomInteractThink then
|
||||
-- CustomInteractThink = function(ctx, A)
|
||||
-- local lines = {}
|
||||
|
||||
-- if ctx.nozzle then
|
||||
-- if ctx.currentVehicle == ctx.vehicle and not ctx.nozzleDropped then
|
||||
-- lines[#lines+1] = ConfigHose.Translations.storeHoseMessage
|
||||
-- if IsControlJustReleased(0, ConfigHose.Keys.Interact) then A.StoreHose(ctx) end
|
||||
-- else
|
||||
-- lines[#lines+1] = ConfigHose.Translations.cannotStoreHoseWhileOnGround
|
||||
-- end
|
||||
|
||||
-- elseif ctx.handLineActive then
|
||||
-- if ctx.supplyEnabled then
|
||||
-- if ctx.currentVehicleRelay == ctx.vehicle then
|
||||
-- if #ctx.neighbors > 0 then lines[#lines+1] = ConfigHose.Translations.disconnectLine end
|
||||
-- lines[#lines+1] = ConfigHose.Translations.storeSupplyLine
|
||||
-- if IsControlJustReleased(0, ConfigHose.Keys.GrabLine) then
|
||||
-- if #ctx.neighbors > 0 then A.QuickDisconnectNearest(ctx) else A.StoreRelay(ctx) end
|
||||
-- end
|
||||
-- else
|
||||
-- if #ctx.neighbors > 0 then
|
||||
-- lines[#lines+1] = ConfigHose.Translations.disconnectLine
|
||||
-- if IsControlJustReleased(0, ConfigHose.Keys.GrabLine) then A.QuickDisconnectNearest(ctx) end
|
||||
-- else
|
||||
-- lines[#lines+1] = ConfigHose.Translations.connectRelayLineMessage
|
||||
-- if IsControlJustReleased(0, ConfigHose.Keys.GrabLine) then A.ConnectRelayHere(ctx) end
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
|
||||
-- else
|
||||
-- if ctx.supplyEnabled then
|
||||
-- if #ctx.neighbors > 0 then
|
||||
-- lines[#lines+1] = ConfigHose.Translations.grabHoseMessage
|
||||
-- lines[#lines+1] = ConfigHose.Translations.disconnectLine
|
||||
-- else
|
||||
-- lines[#lines+1] = ConfigHose.Translations.grabHoseMessage
|
||||
-- lines[#lines+1] = ConfigHose.Translations.SupplyLine
|
||||
-- end
|
||||
-- else
|
||||
-- lines[#lines+1] = ConfigHose.Translations.grabHoseMessage
|
||||
-- end
|
||||
|
||||
-- if IsControlJustReleased(0, ConfigHose.Keys.Interact) then A.GrabHose(ctx) end
|
||||
-- if ctx.supplyEnabled and IsControlJustReleased(0, ConfigHose.Keys.GrabLine) then A.GrabRelay(ctx) end
|
||||
-- end
|
||||
|
||||
-- -- SHS Panel
|
||||
-- if not ctx.nozzle and ctx.supplyEnabled then
|
||||
-- local showPanelHint = (ctx.handLineActive and ctx.currentVehicleRelay == ctx.vehicle) or (not ctx.nozzle and not ctx.handLineActive)
|
||||
-- if showPanelHint then
|
||||
-- lines[#lines+1] = ConfigHose.Translations.interactDisplay
|
||||
-- if IsControlJustReleased(0, ConfigHose.Keys.OpenDisplayPrompt) then A.OpenPanel(ctx) end
|
||||
-- end
|
||||
-- end
|
||||
|
||||
-- if #lines > 0 then drawInstructionalText(table.concat(lines, "\n"), ctx.promptCoords) end
|
||||
-- end
|
||||
|
||||
CustomInteractThink = function(ctx, A)
|
||||
-- Write logic here
|
||||
-- ctx = live state for the closest fire vehicle
|
||||
-- A = actions you can call
|
||||
end
|
||||
end
|
||||
|
||||
CreateThread(function()
|
||||
while true do
|
||||
Wait(1)
|
||||
local pos = GetEntityCoords(PlayerPedId())
|
||||
local vehicle = GetClosestVehicle(pos)
|
||||
local inRange = false
|
||||
|
||||
if vehicle and DoesEntityExist(vehicle) and IsVehicleDriveable(vehicle, false) then
|
||||
local vehicleModel = GetEntityModel(vehicle)
|
||||
local vehicleSettings = ConfigHose.Rope.VehicleSettings[vehicleModel] or {}
|
||||
local useBone = vehicleSettings.useBone or false
|
||||
local bones = vehicleSettings.bones or {}
|
||||
local offsets = vehicleSettings.offsets or {{x = 0.0, y = 0.0, z = 0.0}}
|
||||
|
||||
local attachmentPoints = {}
|
||||
|
||||
if useBone then
|
||||
for _, boneName in ipairs(bones) do
|
||||
local boneIndex = GetEntityBoneIndexByName(vehicle, boneName)
|
||||
if boneIndex ~= -1 then
|
||||
local bonePos = GetWorldPositionOfEntityBone(vehicle, boneIndex)
|
||||
table.insert(attachmentPoints, bonePos)
|
||||
else
|
||||
print("Bone " .. boneName .. " not found in vehicle model.")
|
||||
end
|
||||
end
|
||||
else
|
||||
for _, offset in ipairs(offsets) do
|
||||
local offsetWorldPos = GetOffsetFromEntityInWorldCoords(vehicle, offset.x, offset.y, offset.z)
|
||||
table.insert(attachmentPoints, offsetWorldPos)
|
||||
end
|
||||
end
|
||||
|
||||
local closestPoint = attachmentPoints[1]
|
||||
local minDistance = #(pos - closestPoint)
|
||||
|
||||
for _, point in ipairs(attachmentPoints) do
|
||||
local distance = #(pos - point)
|
||||
if distance < minDistance then
|
||||
closestPoint = point
|
||||
minDistance = distance
|
||||
end
|
||||
end
|
||||
|
||||
local promptCoords = closestPoint
|
||||
local vehicleDistance = #(pos - promptCoords)
|
||||
|
||||
if not IsPedInAnyVehicle(PlayerPedId(), false) and vehicleDistance < 3.0 then
|
||||
inRange = true
|
||||
local text = HoseManager.nozzle and ConfigHose.Translations.storeHoseMessage or ConfigHose.Translations.grabHoseMessage
|
||||
|
||||
if ConfigHose.InteractType.TruckInteraction.Drawtext then
|
||||
drawInstructionalText(text, promptCoords)
|
||||
elseif ConfigHose.InteractType.TruckInteraction.ScreenPrompt then
|
||||
DisplayHelpText(text)
|
||||
end
|
||||
|
||||
if IsControlJustReleased(0, ConfigHose.Keys.Interact) then
|
||||
if not HoseManager.nozzle and isPermissionAllowed() then
|
||||
InitializeFireHose()
|
||||
AttachRopeToProp()
|
||||
else
|
||||
UnequipFireHose()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if not inRange then
|
||||
Wait(2500)
|
||||
end
|
||||
end
|
||||
end)
|
||||
elseif ConfigHose.InteractType.TruckInteraction.ThirdEye.enabled then
|
||||
if ConfigHose.InteractType.TruckInteraction.ThirdEye.oxTarget then
|
||||
local VehicleOptions = {
|
||||
{
|
||||
label = ConfigHose.Translations.thirdEyeMessage,
|
||||
icon = "fa-solid fa-water",
|
||||
onSelect = function()
|
||||
if not HoseManager.nozzle and isPermissionAllowed() then
|
||||
InitializeFireHose()
|
||||
AttachRopeToProp()
|
||||
else
|
||||
UnequipFireHose()
|
||||
end
|
||||
end,
|
||||
}
|
||||
}
|
||||
exports.ox_target:addModel(vehicleModels, VehicleOptions)
|
||||
end
|
||||
|
||||
if ConfigHose.InteractType.TruckInteraction.ThirdEye.qbTarget then
|
||||
exports['qb-target']:AddTargetModel(vehicleModels, {
|
||||
options = {
|
||||
{
|
||||
label = ConfigHose.Translations.thirdEyeMessage,
|
||||
icon = "fa-solid fa-water",
|
||||
action = function()
|
||||
if not HoseManager.nozzle and isPermissionAllowed() then
|
||||
InitializeFireHose()
|
||||
AttachRopeToProp()
|
||||
else
|
||||
UnequipFireHose()
|
||||
end
|
||||
end,
|
||||
},
|
||||
},
|
||||
distance = 3.0
|
||||
})
|
||||
end
|
||||
elseif ConfigHose.InteractType.TruckInteraction.WorldInteraction then
|
||||
CreateThread(function()
|
||||
local interactionActive = false
|
||||
local idleWait = 1000
|
||||
|
||||
while true do
|
||||
Wait(idleWait)
|
||||
|
||||
if IsPedInAnyVehicle(PlayerPedId(), false) then
|
||||
if interactionActive then
|
||||
for _, model in ipairs(vehicleModels) do
|
||||
exports.interact:RemoveModelInteraction(model, interactionId)
|
||||
end
|
||||
interactionActive = false
|
||||
end
|
||||
idleWait = 1500
|
||||
local ped = PlayerPedId()
|
||||
if IsPedInAnyVehicle(ped, false) then
|
||||
Wait(500)
|
||||
else
|
||||
local pos = GetEntityCoords(PlayerPedId())
|
||||
local pos = GetEntityCoords(ped)
|
||||
local vehicle = GetClosestVehicle(pos)
|
||||
|
||||
if vehicle and DoesEntityExist(vehicle) then
|
||||
local vehicleModel = GetEntityModel(vehicle)
|
||||
|
||||
local isAllowedModel = false
|
||||
for _, model in ipairs(vehicleModels) do
|
||||
if model == vehicleModel then
|
||||
isAllowedModel = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if isAllowedModel then
|
||||
local vehicleSettings = ConfigHose.Rope.VehicleSettings[vehicleModel] or {}
|
||||
local useBone = vehicleSettings.useBone or false
|
||||
local bones = vehicleSettings.bones or {}
|
||||
local offsets = vehicleSettings.offsets or {{x = 0.0, y = 0.0, z = 0.0}}
|
||||
|
||||
local attachmentPoints = {}
|
||||
|
||||
if useBone then
|
||||
for _, boneName in ipairs(bones) do
|
||||
local boneIndex = GetEntityBoneIndexByName(vehicle, boneName)
|
||||
if boneIndex ~= -1 then
|
||||
local bonePos = GetWorldPositionOfEntityBone(vehicle, boneIndex)
|
||||
table.insert(attachmentPoints, bonePos)
|
||||
else
|
||||
print("Bone " .. boneName .. " not found in vehicle model.")
|
||||
end
|
||||
end
|
||||
else
|
||||
for _, offset in ipairs(offsets) do
|
||||
local offsetWorldPos = GetOffsetFromEntityInWorldCoords(vehicle, offset.x, offset.y, offset.z)
|
||||
table.insert(attachmentPoints, offsetWorldPos)
|
||||
end
|
||||
end
|
||||
|
||||
local closestPoint = attachmentPoints[1]
|
||||
local minDistance = #(pos - closestPoint)
|
||||
|
||||
for _, point in ipairs(attachmentPoints) do
|
||||
local distance = #(pos - point)
|
||||
if distance < minDistance then
|
||||
closestPoint = point
|
||||
minDistance = distance
|
||||
end
|
||||
end
|
||||
|
||||
local promptCoords = closestPoint
|
||||
local vehicleDistance = #(pos - promptCoords)
|
||||
|
||||
if vehicleDistance < 4.0 then
|
||||
if not interactionActive then
|
||||
exports.interact:AddModelInteraction({
|
||||
model = vehicleModel,
|
||||
offset = promptCoords - GetEntityCoords(vehicle),
|
||||
name = 'Menu',
|
||||
id = interactionId,
|
||||
distance = 8.0,
|
||||
interactDst = 2.5,
|
||||
ignoreLos = true,
|
||||
bone = 'bodyshell',
|
||||
options = {
|
||||
{
|
||||
label = ConfigHose.Translations.grabHoseWorldInteraction,
|
||||
action = function()
|
||||
if not HoseManager.nozzle then
|
||||
InitializeFireHose()
|
||||
AttachRopeToProp()
|
||||
else
|
||||
UnequipFireHose()
|
||||
end
|
||||
end,
|
||||
},
|
||||
}
|
||||
})
|
||||
interactionActive = true
|
||||
end
|
||||
idleWait = 0
|
||||
else
|
||||
if interactionActive then
|
||||
exports.interact:RemoveModelInteraction(vehicleModel, interactionId)
|
||||
interactionActive = false
|
||||
end
|
||||
idleWait = 500
|
||||
end
|
||||
if vehicle and DoesEntityExist(vehicle) and IsVehicleDriveable(vehicle, false) and HasWaterTank(vehicle) then
|
||||
local ctx = _buildCtx(vehicle)
|
||||
if ctx.vehicleDistance < 3.0 then
|
||||
local ok, err = pcall(CustomInteractThink, ctx, HoseCustomActions)
|
||||
if not ok then print("^1[CustomInteract] error:^0", err) end
|
||||
else
|
||||
if interactionActive then
|
||||
exports.interact:RemoveModelInteraction(vehicleModel, interactionId)
|
||||
interactionActive = false
|
||||
end
|
||||
idleWait = 1000
|
||||
Wait(250)
|
||||
end
|
||||
else
|
||||
if interactionActive then
|
||||
for _, model in ipairs(vehicleModels) do
|
||||
exports.interact:RemoveModelInteraction(model, interactionId)
|
||||
end
|
||||
interactionActive = false
|
||||
end
|
||||
idleWait = 1500
|
||||
Wait(750)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
else
|
||||
warn('Invalid interaction configuration')
|
||||
end
|
||||
+472
-479
File diff suppressed because it is too large
Load Diff
@@ -7,10 +7,12 @@ lua54 'yes'
|
||||
|
||||
author 'London Studios'
|
||||
description 'Smart Hose'
|
||||
version 'Alpha'
|
||||
version '2.2'
|
||||
|
||||
shared_script 'config.lua'
|
||||
|
||||
ui_page 'html/index.html'
|
||||
|
||||
client_scripts {
|
||||
'cl_smarthose.lua',
|
||||
'cl_utils.lua'
|
||||
@@ -21,6 +23,10 @@ files {
|
||||
'data/weaponarchetypes.meta',
|
||||
'data/weapons.meta',
|
||||
'data/weaponanimations.meta',
|
||||
'html/index.html',
|
||||
'html/assets/*.js',
|
||||
'html/assets/*.css',
|
||||
'locales/*.json'
|
||||
}
|
||||
|
||||
server_scripts {
|
||||
@@ -34,6 +40,7 @@ escrow_ignore {
|
||||
'sv_utils.lua',
|
||||
'stream/rope.ytd',
|
||||
'cl_utils.lua',
|
||||
'locales/*.json'
|
||||
}
|
||||
|
||||
data_file 'WEAPONINFO_FILE' 'data/weapons.meta'
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,15 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>SHS Control Panel</title>
|
||||
<script type="module" crossorigin src="./assets/index-e63cb1c0.js"></script>
|
||||
<link rel="stylesheet" href="./assets/index-4963c99a.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"app": {
|
||||
"title": "SHS Panel",
|
||||
"closeEsc": "Close (ESC)",
|
||||
"linkedTo": "Linked to {model}"
|
||||
},
|
||||
"ui": {
|
||||
"alertsTitle": "ALERTS:",
|
||||
"intakeSources": "Intake Sources",
|
||||
"dischargeOutlets": "Discharge Outlets",
|
||||
"masterControls": "Master Controls",
|
||||
"systemStatus": "System Status",
|
||||
"unavailable": "UNAVAILABLE",
|
||||
"active": "ACTIVE",
|
||||
"standby": "STANDBY",
|
||||
"outlet": "Outlet",
|
||||
"noDischarges": "No discharges open"
|
||||
},
|
||||
"intake": {
|
||||
"hydrant": "Hydrant",
|
||||
"draft": "Draft",
|
||||
"tank": "Tank",
|
||||
"transfer": "Water Transfer"
|
||||
},
|
||||
"discharge": {
|
||||
"attack1": {
|
||||
"name": "Attack Line 1",
|
||||
"desc": "Front Left"
|
||||
},
|
||||
"attack2": {
|
||||
"name": "Attack Line 2",
|
||||
"desc": "Front Right"
|
||||
},
|
||||
"supply": {
|
||||
"name": "Supply Line",
|
||||
"desc": "Monitor / Transfer"
|
||||
},
|
||||
"ladder": {
|
||||
"name": "Ladder Pipe",
|
||||
"desc": "Deck Guns"
|
||||
},
|
||||
"foam": {
|
||||
"name": "Foam Line",
|
||||
"desc": "Foam Line"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"transferring": "Transferring…",
|
||||
"available": "Available",
|
||||
"notAvailable": "Not Available",
|
||||
"notConnected": "Not Connected"
|
||||
},
|
||||
"controls": {
|
||||
"mainPumpOn": "Main Pump ON",
|
||||
"mainPumpOff": "Main Pump OFF",
|
||||
"masterValveOpen": "Master Valve OPEN",
|
||||
"masterValveClosed": "Master Valve CLOSED",
|
||||
"makeFoam": "MAKE FOAM",
|
||||
"makingFoam": "MAKING FOAM…",
|
||||
"emergencyStop": "EMERGENCY STOP",
|
||||
"resetEStop": "RESET E-STOP",
|
||||
"open": "OPEN",
|
||||
"closed": "CLOSED"
|
||||
},
|
||||
"gauge": {
|
||||
"intake": "Intake",
|
||||
"discharge": "Discharge",
|
||||
"rpm": "Pump RPM",
|
||||
"flow": "Flow Rate",
|
||||
"pressure": "Pressure",
|
||||
"unitPSI": "PSI",
|
||||
"unitRPM": "RPM",
|
||||
"unitGPM": "GPM",
|
||||
"tankCapacity": "Tank Capacity:"
|
||||
},
|
||||
"hud": {
|
||||
"water": "WATER",
|
||||
"foam": "FOAM"
|
||||
},
|
||||
"alerts": {
|
||||
"highPressure": "HIGH PRESSURE",
|
||||
"emergencyStop": "EMERGENCY STOP ACTIVE",
|
||||
"transferring": "TRANSFERRING WATER…"
|
||||
},
|
||||
"messages": {
|
||||
"transferFailed": "Transfer failed."
|
||||
},
|
||||
"transfer": {
|
||||
"start": "TRANSFER",
|
||||
"stop": "STOP",
|
||||
"starting": "STARTING…",
|
||||
"stopping": "STOPPING…"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"app": {
|
||||
"title": "Painel SHS",
|
||||
"closeEsc": "Fechar (ESC)",
|
||||
"linkedTo": "Conectado a {model}"
|
||||
},
|
||||
"ui": {
|
||||
"alertsTitle": "AVISOS:",
|
||||
"intakeSources": "Fontes de Captação",
|
||||
"dischargeOutlets": "Saídas de Descarga",
|
||||
"masterControls": "Controlo Principal",
|
||||
"systemStatus": "Estado do Sistema",
|
||||
"unavailable": "INDISPONÍVEL",
|
||||
"active": "ATIVO",
|
||||
"standby": "ESPERA",
|
||||
"outlet": "Saída",
|
||||
"noDischarges": "Sem descargas ativas"
|
||||
},
|
||||
"intake": {
|
||||
"hydrant": "Hidrante",
|
||||
"draft": "Aspiração",
|
||||
"tank": "Depósito",
|
||||
"transfer": "Transferência"
|
||||
},
|
||||
"discharge": {
|
||||
"attack1": { "name": "Linha de Ataque 1", "desc": "Frente Esquerda" },
|
||||
"attack2": { "name": "Linha de Ataque 2", "desc": "Frente Direita" },
|
||||
"supply": { "name": "Linha de Abastecimento", "desc": "Monitor / Transferência" },
|
||||
"ladder": { "name": "Canhão de Escada", "desc": "Canhões de Convés" },
|
||||
"foam": { "name": "Linha de Espuma", "desc": "Linha de Espuma" }
|
||||
},
|
||||
"status": {
|
||||
"transferring": "A transferir…",
|
||||
"available": "Disponível",
|
||||
"notAvailable": "Indisponível",
|
||||
"notConnected": "Não ligado"
|
||||
},
|
||||
"controls": {
|
||||
"mainPumpOn": "Bomba LIGADA",
|
||||
"mainPumpOff": "Bomba DESLIGADA",
|
||||
"masterValveOpen": "Válvula ABERTA",
|
||||
"masterValveClosed": "Válvula FECHADA",
|
||||
"makeFoam": "FAZER ESPUMA",
|
||||
"makingFoam": "A FAZER ESPUMA…",
|
||||
"emergencyStop": "PARAGEM DE EMERGÊNCIA",
|
||||
"resetEStop": "REPOR PARAGEM",
|
||||
"open": "ABERTA",
|
||||
"closed": "FECHADA"
|
||||
},
|
||||
"gauge": {
|
||||
"intake": "Entrada",
|
||||
"discharge": "Saída",
|
||||
"rpm": "RPM da Bomba",
|
||||
"flow": "Caudal",
|
||||
"pressure": "Pressão",
|
||||
"unitPSI": "PSI",
|
||||
"unitRPM": "RPM",
|
||||
"unitGPM": "GPM",
|
||||
"tankCapacity": "Capacidade do Depósito:"
|
||||
},
|
||||
"hud": {
|
||||
"water": "ÁGUA",
|
||||
"foam": "ESPUMA"
|
||||
},
|
||||
"alerts": {
|
||||
"highPressure": "PRESSÃO ELEVADA",
|
||||
"emergencyStop": "PARAGEM DE EMERGÊNCIA ATIVA",
|
||||
"transferring": "A TRANSFERIR ÁGUA…"
|
||||
},
|
||||
"messages": {
|
||||
"transferFailed": "Falha na transferência."
|
||||
},
|
||||
"transfer": {
|
||||
"start": "TRANSFERIR",
|
||||
"stop": "PARAR",
|
||||
"starting": "A INICIAR…",
|
||||
"stopping": "A PARAR…"
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -11,72 +11,129 @@ if Config.Notifications.Enabled and Config.Notifications.Framework.ESX then
|
||||
ESX = exports["es_extended"]:getSharedObject()
|
||||
end
|
||||
|
||||
if Config.PlaceGeneratorCommand.Inventory.quasarInventory or Config.PlaceGeneratorCommand.Inventory.coreInventory then
|
||||
function inventorySetupGenerator()
|
||||
TriggerEvent("SupplyLine:Client:EquipPortableGenerator")
|
||||
end
|
||||
|
||||
exports("inventorySetupGenerator", inventorySetupGenerator)
|
||||
end
|
||||
|
||||
if Config.EnablePositioningCommand then
|
||||
TriggerEvent('chat:addSuggestion', '/'.."findhosepositioning", "Find positioning of the hose/supply line on your fire truck")
|
||||
TriggerEvent('chat:addSuggestion', '/'.."findhydrantpositioning", "Find rope spawn point and rotation for a hydrant", {
|
||||
{ name="type", help="supplyLine or lppLine" }
|
||||
})
|
||||
|
||||
RegisterCommand("findhosepositioning", function(source, args)
|
||||
|
||||
RegisterCommand("findhydrantpositioning", function(source, args)
|
||||
local ropeLabel = args[1] or "supplyLine"
|
||||
local ped = PlayerPedId()
|
||||
local targetVehicle = GetVehiclePedIsIn(ped, false)
|
||||
|
||||
if targetVehicle == nil or targetVehicle == 0 then
|
||||
Notify("No vehicle found!")
|
||||
else
|
||||
local model = `p_ld_soc_ball_01`
|
||||
SetEntityAlpha(targetVehicle, 150, false)
|
||||
RequestModel(model)
|
||||
while not HasModelLoaded(model) do Wait(0) end
|
||||
local ballProp = CreateObject(model, coords, false, false, false)
|
||||
local pedCoords = GetEntityCoords(ped)
|
||||
local targetHydrant = 0
|
||||
|
||||
while not DoesEntityExist(ballProp) do Wait(0) end
|
||||
local ropeType = 4
|
||||
if HydrantRopes and HydrantRopes.RopeTypes and HydrantRopes.RopeTypes[ropeLabel] then
|
||||
ropeType = HydrantRopes.RopeTypes[ropeLabel]
|
||||
end
|
||||
|
||||
-- Add your server's custom hydrant models to this list if you have them!
|
||||
local hydrantModels = {
|
||||
`prop_fire_hydrant_1`,
|
||||
`prop_fire_hydrant_2`,
|
||||
`prop_fire_hydrant_4`,
|
||||
`bv_water_pump`
|
||||
}
|
||||
|
||||
for _, model in ipairs(hydrantModels) do
|
||||
local obj = GetClosestObjectOfType(pedCoords.x, pedCoords.y, pedCoords.z, 5.0, model, false, false, false)
|
||||
if obj ~= 0 then
|
||||
targetHydrant = obj
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
SetModelAsNoLongerNeeded(model)
|
||||
local offSet = {0.0, 0.0, 0.0}
|
||||
local rotation = {0.0, 0.0, 0.0}
|
||||
local offSetComplete = false
|
||||
while not offSetComplete do
|
||||
if targetVehicle ~= nil and targetVehicle ~= 0 then
|
||||
DetachEntity(ballProp, true, false)
|
||||
AttachEntityToEntity(ballProp, targetVehicle, -1, offSet[1], offSet[2], offSet[3], rotation[1], rotation[2], rotation[3], true, false, true, false, 1, true)
|
||||
if not IsControlReleased(0, 207) then --page down
|
||||
offSet = {offSet[1], offSet[2], offSet[3] - 0.01}
|
||||
end
|
||||
if targetHydrant == 0 then return Notify("No hydrant found nearby! Stand closer.") end
|
||||
|
||||
if not IsControlReleased(0, 208) then --page up
|
||||
offSet = {offSet[1], offSet[2], offSet[3] + 0.01}
|
||||
end
|
||||
RopeLoadTextures()
|
||||
local hydPos = GetEntityCoords(targetHydrant)
|
||||
|
||||
local previewRope = AddRope(hydPos.x, hydPos.y, hydPos.z, 0.0, 0.0, 0.0, 20.0, ropeType, 20.0, 0.5, 1.0, false, false, false, 5.0, false, 0)
|
||||
local offSet = {x = 0.0, y = 0.0, z = 0.0}
|
||||
local rotation = {x = 0.0, y = 0.0, z = 0.0}
|
||||
local depth = 0.2
|
||||
local mode = "MOVE"
|
||||
local editing = true
|
||||
|
||||
if not IsControlReleased(0, 173) then --arrow down
|
||||
offSet = {offSet[1], offSet[2] - 0.01, offSet[3]}
|
||||
end
|
||||
Notify("~b~POSITIONING MODE~w~\n[TAB] Toggle Move/Rotate\n[Arrows] Adjust\n[INSERT/DELETE] Depth\n[ENTER] Save")
|
||||
|
||||
SetEntityAlpha(targetHydrant, 150, false)
|
||||
local function RotationToDirection(rot)
|
||||
local radZ = math.rad(rot.z)
|
||||
local radX = math.rad(rot.x)
|
||||
local num = math.abs(math.cos(radX))
|
||||
return vector3(-math.sin(radZ) * num, math.cos(radZ) * num, math.sin(radX))
|
||||
end
|
||||
|
||||
if not IsControlReleased(0, 172) then --arrow up
|
||||
offSet = {offSet[1], offSet[2] + 0.01, offSet[3]}
|
||||
end
|
||||
|
||||
if not IsControlReleased(0, 174) then --arrow left
|
||||
offSet = {offSet[1] - 0.01, offSet[2], offSet[3]}
|
||||
end
|
||||
|
||||
if not IsControlReleased(0, 175) then --arrow right
|
||||
offSet = {offSet[1] + 0.01, offSet[2], offSet[3]}
|
||||
end
|
||||
|
||||
if IsControlJustPressed(0, 191) then -- enter - finish
|
||||
offSetComplete = true
|
||||
end
|
||||
end
|
||||
|
||||
Wait(0)
|
||||
while editing do
|
||||
Wait(0)
|
||||
local speed = IsControlPressed(0, 21) and 0.05 or 0.005
|
||||
|
||||
if IsControlJustPressed(0, 192) then
|
||||
mode = (mode == "MOVE") and "ROTATE" or "MOVE"
|
||||
Notify("Mode: ~y~" .. mode)
|
||||
end
|
||||
|
||||
Notify("OffSet Values are now printed in your console")
|
||||
print("OffSet: {"..offSet[1]..", "..offSet[2]..", "..offSet[3].."}")
|
||||
DeleteEntity(ballProp)
|
||||
ResetEntityAlpha(targetVehicle)
|
||||
if IsControlPressed(0, 121) then depth = depth + 0.005 end
|
||||
if IsControlPressed(0, 178) then depth = depth - 0.005 end
|
||||
|
||||
local up = IsControlPressed(0, Config.PositioningControls.up)
|
||||
local down = IsControlPressed(0, Config.PositioningControls.down)
|
||||
local forward = IsControlPressed(0, Config.PositioningControls.forwards)
|
||||
local backward = IsControlPressed(0, Config.PositioningControls.backwards)
|
||||
local left = IsControlPressed(0, Config.PositioningControls.left)
|
||||
local right = IsControlPressed(0, Config.PositioningControls.right)
|
||||
|
||||
if mode == "MOVE" then
|
||||
if up then offSet.z = offSet.z + speed end
|
||||
if down then offSet.z = offSet.z - speed end
|
||||
if forward then offSet.y = offSet.y + speed end
|
||||
if backward then offSet.y = offSet.y - speed end
|
||||
if left then offSet.x = offSet.x - speed end
|
||||
if right then offSet.x = offSet.x + speed end
|
||||
else
|
||||
local rSpeed = speed * 50.0
|
||||
if up then rotation.x = rotation.x + rSpeed end
|
||||
if down then rotation.x = rotation.x - rSpeed end
|
||||
if left then rotation.z = rotation.z + rSpeed end
|
||||
if right then rotation.z = rotation.z - rSpeed end
|
||||
end
|
||||
|
||||
local forwardVec = RotationToDirection(rotation)
|
||||
local localPortPos = vector3(offSet.x, offSet.y, offSet.z)
|
||||
local localBendPosA = localPortPos - (forwardVec * depth)
|
||||
local localBendPosB = localPortPos - (forwardVec * (depth * 0.5))
|
||||
|
||||
local worldPointC = GetOffsetFromEntityInWorldCoords(targetHydrant, localPortPos.x, localPortPos.y, localPortPos.z)
|
||||
local worldPointA = GetOffsetFromEntityInWorldCoords(targetHydrant, localBendPosA.x, localBendPosA.y, localBendPosA.z)
|
||||
local worldPointB = GetOffsetFromEntityInWorldCoords(targetHydrant, localBendPosB.x, localBendPosB.y, localBendPosB.z)
|
||||
local handPos = GetWorldPositionOfEntityBone(ped, GetPedBoneIndex(ped, 6286))
|
||||
local vertexCount = GetRopeVertexCount(previewRope)
|
||||
|
||||
PinRopeVertex(previewRope, 0, handPos.x, handPos.y, handPos.z)
|
||||
PinRopeVertex(previewRope, vertexCount - 1, worldPointA.x, worldPointA.y, worldPointA.z)
|
||||
PinRopeVertex(previewRope, vertexCount - 2, worldPointB.x, worldPointB.y, worldPointB.z)
|
||||
PinRopeVertex(previewRope, vertexCount - 3, worldPointC.x, worldPointC.y, worldPointC.z)
|
||||
|
||||
if IsControlJustPressed(0, Config.PositioningControls.enter) then editing = false end
|
||||
end
|
||||
|
||||
end, false)
|
||||
|
||||
ResetEntityAlpha(targetHydrant)
|
||||
|
||||
print(string.format("^2--- %s OFFSET RESULT ---^7", ropeLabel:upper()))
|
||||
print(string.format("{ x = %.3f, y = %.3f, z = %.3f, rx = %.3f, ry = %.3f, rz = %.3f, depth = %.3f },", offSet.x, offSet.y, offSet.z, rotation.x, rotation.y, rotation.z, depth))
|
||||
|
||||
DeleteRope(previewRope)
|
||||
Notify("Data printed to F8 console.")
|
||||
end, false)
|
||||
end
|
||||
|
||||
function Notify(text)
|
||||
@@ -90,7 +147,7 @@ function Notify(text)
|
||||
ESX.ShowNotification(text)
|
||||
end
|
||||
elseif Config.Notifications.Framework.QBCore then
|
||||
TriggerEvent('QBCore:Notify', text, 'info')
|
||||
TriggerEvent('QBCore:Notify', text, 'primary')
|
||||
elseif Config.Notifications.Framework.QBX then
|
||||
exports.qbx_core:Notify(text, 'primary')
|
||||
elseif Config.Notifications.Framework.vRP then
|
||||
@@ -102,6 +159,10 @@ function Notify(text)
|
||||
end
|
||||
end
|
||||
|
||||
RegisterNetEvent('SupplyLine:Client:showNotification', function(message)
|
||||
Notify(message)
|
||||
end)
|
||||
|
||||
function showBaseNotification(message)
|
||||
-- Base game notifications
|
||||
SetNotificationTextEntry("STRING")
|
||||
@@ -139,4 +200,392 @@ function DrawTextOnScreen(text, x, y, scale, r, g, b, a, center)
|
||||
end
|
||||
AddTextComponentString(text)
|
||||
DrawText(x, y)
|
||||
end
|
||||
|
||||
local hydrantInteractionId = 'hydrantInteraction'
|
||||
local hydrantInteractionActive = false
|
||||
if Config.InteractType.HydrantInteraction.Drawtext or Config.InteractType.HydrantInteraction.ScreenPrompt then
|
||||
StartHoseWaterLevelDisplayThread()
|
||||
CreateThread(function()
|
||||
while true do
|
||||
local waitTime = 2500
|
||||
local player = GetPlayerPed(PlayerId())
|
||||
local playerPos = GetEntityCoords(player, false)
|
||||
local fillingVehicle = nil
|
||||
|
||||
if not IsPedInAnyVehicle(player, false) then
|
||||
local closestHydrant = GetClosestHydrant(playerPos)
|
||||
|
||||
if closestHydrant and DoesEntityExist(closestHydrant) then
|
||||
if not NetworkGetEntityIsNetworked(closestHydrant) then
|
||||
NetworkRegisterEntityAsNetworked(closestHydrant)
|
||||
end
|
||||
|
||||
local hydrantId = NetworkGetNetworkIdFromEntity(closestHydrant)
|
||||
if NetworkDoesNetworkIdExist(hydrantId) then
|
||||
local hydrantPos = GetEntityCoords(closestHydrant)
|
||||
local rope = HydrantRopes.currentRopes[hydrantId]
|
||||
fillingVehicle = HydrantManager.fillingVehicles[hydrantId]
|
||||
|
||||
if rope then
|
||||
if fillingVehicle then
|
||||
if Config.InteractType.HydrantInteraction.Drawtext then
|
||||
drawInstructionalText(Config.Translations.stopFilling, vec3(hydrantPos.x, hydrantPos.y, hydrantPos.z + 1.0))
|
||||
elseif Config.InteractType.HydrantInteraction.ScreenPrompt then
|
||||
DisplayHelpText(Config.Translations.stopFilling)
|
||||
end
|
||||
else
|
||||
if Config.InteractType.HydrantInteraction.Drawtext then
|
||||
drawInstructionalText(Config.Translations.startFilling, vec3(hydrantPos.x, hydrantPos.y, hydrantPos.z + 1.0))
|
||||
elseif Config.InteractType.HydrantInteraction.ScreenPrompt then
|
||||
DisplayHelpText(Config.Translations.startFilling)
|
||||
end
|
||||
end
|
||||
else
|
||||
if HoseBridge.isLineEquipped and Config.InteractType.HydrantInteraction.Drawtext then
|
||||
drawInstructionalText(Config.Translations.connectLine, vec3(hydrantPos.x, hydrantPos.y, hydrantPos.z + 1.0))
|
||||
elseif Config.InteractType.HydrantInteraction.ScreenPrompt then
|
||||
DisplayHelpText(Config.Translations.connectLine)
|
||||
end
|
||||
end
|
||||
|
||||
waitTime = 1
|
||||
|
||||
if IsControlJustPressed(1, Config.SupplyLineKeys.ConnectHydrant) and isPermissionAllowed() then
|
||||
HandleHydrantInteraction(hydrantId, hydrantPos)
|
||||
TriggerEvent('SmartHose:Client:Bridge:DeleteHandRopeS')
|
||||
end
|
||||
|
||||
if IsControlJustPressed(1, Config.SupplyLineKeys.StartStopFilling) and rope and isPermissionAllowed() then
|
||||
local fillingVehicle = HydrantManager.fillingVehicles[hydrantId]
|
||||
if fillingVehicle then
|
||||
HandleStartStopFilling(hydrantId, false)
|
||||
else
|
||||
HandleStartStopFilling(hydrantId, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Wait(waitTime)
|
||||
end
|
||||
end)
|
||||
elseif Config.InteractType.HydrantInteraction.ThirdEye.enabled then
|
||||
local hydrantModels = {}
|
||||
for _, offset in ipairs(Config.HydrantOffsets) do
|
||||
table.insert(hydrantModels, offset.model)
|
||||
end
|
||||
|
||||
StartHoseWaterLevelDisplayThread()
|
||||
if Config.InteractType.HydrantInteraction.ThirdEye.oxTarget then
|
||||
local jobGroups = GetAllowedJobGroups()
|
||||
local HydrantOptions = {
|
||||
{
|
||||
name = 'connect_line',
|
||||
label = Config.Translations.thirdEyeConnect,
|
||||
icon = 'fa-solid fa-link',
|
||||
groups = jobGroups,
|
||||
canInteract = function(entity, distance, data)
|
||||
if not HoseBridge.isLineEquipped then return false end
|
||||
if HasObjectBeenBroken(entity) then return false end
|
||||
|
||||
if not NetworkGetEntityIsNetworked(entity) then
|
||||
NetworkRegisterEntityAsNetworked(entity)
|
||||
if not NetworkGetEntityIsNetworked(entity) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local netId = NetworkGetNetworkIdFromEntity(entity)
|
||||
local rope = HydrantRopes.currentRopes[netId]
|
||||
if rope then return false end
|
||||
|
||||
return true
|
||||
end,
|
||||
onSelect = function(data)
|
||||
local hydrantEntity = data.entity
|
||||
HandleHydrantInteractionEntity(hydrantEntity)
|
||||
TriggerEvent('SmartHose:Client:Bridge:DeleteHandRopeS')
|
||||
end,
|
||||
},
|
||||
{
|
||||
name = 'start_filling',
|
||||
label = Config.Translations.thirdEyeStartFill,
|
||||
icon = 'fa-solid fa-play',
|
||||
groups = jobGroups,
|
||||
canInteract = function(entity, distance, data)
|
||||
if HasObjectBeenBroken(entity) then return false end
|
||||
if not NetworkGetEntityIsNetworked(entity) then return false end
|
||||
local hydrantId = NetworkGetNetworkIdFromEntity(entity)
|
||||
local rope = HydrantRopes.currentRopes[hydrantId]
|
||||
local fillingVehicle = HydrantManager.fillingVehicles[hydrantId]
|
||||
return rope and not fillingVehicle
|
||||
end,
|
||||
onSelect = function(data)
|
||||
local hydrantEntity = data.entity
|
||||
HandleStartFillingEntity(hydrantEntity)
|
||||
end,
|
||||
},
|
||||
{
|
||||
name = 'stop_filling',
|
||||
label = Config.Translations.thirdEyeStopFill,
|
||||
icon = 'fa-solid fa-stop',
|
||||
groups = jobGroups,
|
||||
canInteract = function(entity, distance, data)
|
||||
if HasObjectBeenBroken(entity) then return false end
|
||||
if not NetworkGetEntityIsNetworked(entity) then return false end
|
||||
local fillingVehicle = HydrantManager.fillingVehicles[NetworkGetNetworkIdFromEntity(entity)]
|
||||
return fillingVehicle ~= nil
|
||||
end,
|
||||
onSelect = function(data)
|
||||
local hydrantEntity = data.entity
|
||||
HandleStopFillingEntity(hydrantEntity)
|
||||
end,
|
||||
},
|
||||
{
|
||||
name = 'disconnect_line',
|
||||
label = Config.Translations.thirdEyeDisconnect,
|
||||
icon = 'fa-solid fa-unlink',
|
||||
groups = jobGroups,
|
||||
canInteract = function(entity, distance, data)
|
||||
if HasObjectBeenBroken(entity) then return false end
|
||||
if not NetworkGetEntityIsNetworked(entity) then return false end
|
||||
local rope = HydrantRopes.currentRopes[NetworkGetNetworkIdFromEntity(entity)]
|
||||
return rope ~= nil
|
||||
end,
|
||||
onSelect = function(data)
|
||||
local hydrantEntity = data.entity
|
||||
HandleHydrantInteractionEntity(hydrantEntity)
|
||||
end,
|
||||
},
|
||||
}
|
||||
exports.ox_target:addModel(hydrantModels, HydrantOptions)
|
||||
elseif Config.InteractType.HydrantInteraction.ThirdEye.qbTarget then
|
||||
local allowedJobs = GetAllowedJobGroups()
|
||||
exports['qb-target']:AddTargetModel(hydrantModels, {
|
||||
options = {
|
||||
{
|
||||
label = Config.Translations.thirdEyeConnect,
|
||||
icon = 'fa-solid fa-link',
|
||||
job = allowedJobs,
|
||||
canInteract = function(entity)
|
||||
if not HoseBridge.isLineEquipped then return false end
|
||||
if HasObjectBeenBroken(entity) then
|
||||
return false
|
||||
end
|
||||
if not NetworkGetEntityIsNetworked(entity) then
|
||||
NetworkRegisterEntityAsNetworked(entity)
|
||||
Wait(0)
|
||||
end
|
||||
local rope = HydrantRopes.currentRopes[NetworkGetNetworkIdFromEntity(entity)]
|
||||
return not rope
|
||||
end,
|
||||
action = function(entity)
|
||||
if not NetworkGetEntityIsNetworked(entity) then
|
||||
NetworkRegisterEntityAsNetworked(entity)
|
||||
Wait(0)
|
||||
end
|
||||
HandleHydrantInteractionEntity(entity)
|
||||
TriggerEvent('SmartHose:Client:Bridge:DeleteHandRopeS')
|
||||
end,
|
||||
},
|
||||
{
|
||||
label = Config.Translations.thirdEyeStartFill,
|
||||
icon = 'fa-solid fa-play',
|
||||
job = allowedJobs,
|
||||
canInteract = function(entity)
|
||||
if HasObjectBeenBroken(entity) then
|
||||
return false
|
||||
end
|
||||
if not NetworkGetEntityIsNetworked(entity) then
|
||||
NetworkRegisterEntityAsNetworked(entity)
|
||||
Wait(0)
|
||||
end
|
||||
local hydrantId = NetworkGetNetworkIdFromEntity(entity)
|
||||
local rope = HydrantRopes.currentRopes[hydrantId]
|
||||
local fillingVehicle = HydrantManager.fillingVehicles[hydrantId]
|
||||
return rope and not fillingVehicle
|
||||
end,
|
||||
action = function(entity)
|
||||
if not NetworkGetEntityIsNetworked(entity) then
|
||||
NetworkRegisterEntityAsNetworked(entity)
|
||||
Wait(0)
|
||||
end
|
||||
HandleStartFillingEntity(entity)
|
||||
end,
|
||||
},
|
||||
{
|
||||
label = Config.Translations.thirdEyeStopFill,
|
||||
icon = 'fa-solid fa-stop',
|
||||
job = allowedJobs,
|
||||
canInteract = function(entity)
|
||||
if HasObjectBeenBroken(entity) then
|
||||
return false
|
||||
end
|
||||
if not NetworkGetEntityIsNetworked(entity) then
|
||||
NetworkRegisterEntityAsNetworked(entity)
|
||||
Wait(0)
|
||||
end
|
||||
local fillingVehicle = HydrantManager.fillingVehicles[NetworkGetNetworkIdFromEntity(entity)]
|
||||
return fillingVehicle ~= nil
|
||||
end,
|
||||
action = function(entity)
|
||||
if not NetworkGetEntityIsNetworked(entity) then
|
||||
NetworkRegisterEntityAsNetworked(entity)
|
||||
Wait(0)
|
||||
end
|
||||
HandleStopFillingEntity(entity)
|
||||
end,
|
||||
},
|
||||
{
|
||||
label = Config.Translations.thirdEyeDisconnect,
|
||||
icon = 'fa-solid fa-unlink',
|
||||
job = allowedJobs,
|
||||
canInteract = function(entity)
|
||||
if HasObjectBeenBroken(entity) then
|
||||
return false
|
||||
end
|
||||
if not NetworkGetEntityIsNetworked(entity) then
|
||||
NetworkRegisterEntityAsNetworked(entity)
|
||||
Wait(0)
|
||||
end
|
||||
local rope = HydrantRopes.currentRopes[NetworkGetNetworkIdFromEntity(entity)]
|
||||
return rope ~= nil
|
||||
end,
|
||||
action = function(entity)
|
||||
if not NetworkGetEntityIsNetworked(entity) then
|
||||
NetworkRegisterEntityAsNetworked(entity)
|
||||
Wait(0)
|
||||
end
|
||||
HandleHydrantInteractionEntity(entity)
|
||||
end,
|
||||
},
|
||||
},
|
||||
distance = 2.5,
|
||||
})
|
||||
end
|
||||
elseif Config.InteractType.HydrantInteraction.WorldInteraction then
|
||||
CreateThread(function()
|
||||
local idleWait = 1000
|
||||
local playerPed = PlayerPedId()
|
||||
local playerPos = GetEntityCoords(playerPed)
|
||||
|
||||
while true do
|
||||
Wait(idleWait)
|
||||
|
||||
playerPed = PlayerPedId()
|
||||
playerPos = GetEntityCoords(playerPed)
|
||||
|
||||
if IsPedInAnyVehicle(playerPed, false) then
|
||||
if hydrantInteractionActive then
|
||||
for _, hydrantConfig in ipairs(Config.HydrantOffsets) do
|
||||
exports.interact:RemoveModelInteraction(hydrantConfig.model, hydrantInteractionId)
|
||||
end
|
||||
hydrantInteractionActive = false
|
||||
end
|
||||
idleWait = 1500
|
||||
else
|
||||
local hydrant = GetClosestHydrant(playerPos)
|
||||
if hydrant and DoesEntityExist(hydrant) and not HasObjectBeenBroken(hydrant) then
|
||||
local hydrantPos = GetEntityCoords(hydrant)
|
||||
local distanceToHydrant = #(playerPos - hydrantPos)
|
||||
|
||||
if distanceToHydrant < 4.0 then
|
||||
if not hydrantInteractionActive then
|
||||
for _, hydrantConfig in ipairs(Config.HydrantOffsets) do
|
||||
exports.interact:AddModelInteraction({
|
||||
model = hydrantConfig.model,
|
||||
offset = vec3(0.0, 0.0, 0.5),
|
||||
name = 'Hydrant Interaction',
|
||||
id = hydrantInteractionId,
|
||||
distance = 5.0,
|
||||
interactDst = 1.5,
|
||||
ignoreLos = true,
|
||||
options = {
|
||||
{
|
||||
label = Config.Translations.thirdEyeConnect,
|
||||
action = function(entity)
|
||||
HandleHydrantInteractionEntity(entity)
|
||||
end,
|
||||
canInteract = function(entity)
|
||||
if not isPermissionAllowed() or HasObjectBeenBroken(entity) then
|
||||
return false
|
||||
end
|
||||
local hydrantId = NetworkGetNetworkIdFromEntity(entity)
|
||||
local rope = HydrantRopes.currentRopes[hydrantId]
|
||||
return not rope
|
||||
end,
|
||||
},
|
||||
{
|
||||
label = Config.Translations.thirdEyeStartFill,
|
||||
action = function(entity)
|
||||
HandleStartFillingEntity(entity)
|
||||
end,
|
||||
canInteract = function(entity)
|
||||
if not isPermissionAllowed() or HasObjectBeenBroken(entity) then
|
||||
return false
|
||||
end
|
||||
local hydrantId = NetworkGetNetworkIdFromEntity(entity)
|
||||
local rope = HydrantRopes.currentRopes[hydrantId]
|
||||
local fillingVehicle = HydrantManager.fillingVehicles[hydrantId]
|
||||
return rope and not fillingVehicle
|
||||
end,
|
||||
},
|
||||
{
|
||||
label = Config.Translations.thirdEyeStopFill,
|
||||
action = function(entity)
|
||||
HandleStopFillingEntity(entity)
|
||||
end,
|
||||
canInteract = function(entity)
|
||||
if not isPermissionAllowed() or HasObjectBeenBroken(entity) then
|
||||
return false
|
||||
end
|
||||
local hydrantId = NetworkGetNetworkIdFromEntity(entity)
|
||||
local fillingVehicle = HydrantManager.fillingVehicles[hydrantId]
|
||||
return fillingVehicle ~= nil
|
||||
end,
|
||||
},
|
||||
{
|
||||
label = Config.Translations.thirdEyeDisconnect,
|
||||
action = function(entity)
|
||||
HandleHydrantInteractionEntity(entity)
|
||||
end,
|
||||
canInteract = function(entity)
|
||||
if not isPermissionAllowed() or HasObjectBeenBroken(entity) then
|
||||
return false
|
||||
end
|
||||
local hydrantId = NetworkGetNetworkIdFromEntity(entity)
|
||||
local rope = HydrantRopes.currentRopes[hydrantId]
|
||||
return rope ~= nil
|
||||
end,
|
||||
},
|
||||
}
|
||||
})
|
||||
end
|
||||
hydrantInteractionActive = true
|
||||
end
|
||||
idleWait = 0
|
||||
else
|
||||
if hydrantInteractionActive then
|
||||
for _, hydrantConfig in ipairs(Config.HydrantOffsets) do
|
||||
exports.interact:RemoveModelInteraction(hydrantConfig.model, hydrantInteractionId)
|
||||
end
|
||||
hydrantInteractionActive = false
|
||||
end
|
||||
idleWait = 500
|
||||
end
|
||||
else
|
||||
if hydrantInteractionActive then
|
||||
for _, hydrantConfig in ipairs(Config.HydrantOffsets) do
|
||||
exports.interact:RemoveModelInteraction(hydrantConfig.model, hydrantInteractionId)
|
||||
end
|
||||
hydrantInteractionActive = false
|
||||
end
|
||||
idleWait = 1000
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
else
|
||||
warn('Invalid interaction configuration')
|
||||
end
|
||||
+215
-348
@@ -4,492 +4,284 @@ Config = {
|
||||
StartStopFilling = 74, -- H
|
||||
},
|
||||
|
||||
Debug = true,
|
||||
KeepEngineOnAfterPumpOff = true,
|
||||
|
||||
-- if useBone = true, "offsets" field will be ignored; otherwise custom offsets are enabled.
|
||||
VehicleSettings = {
|
||||
[`16ramcsquad`] = {
|
||||
[`britishladder`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
{ x = 1.340, y = -0.205, z = 0.000, rx = -39.000, ry = 0.000, rz = -94.750, depth = 0.335},
|
||||
},
|
||||
},
|
||||
[`20Maxfdramsquad`] = {
|
||||
[`lafdxt6700`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`20ramcsquad`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
},
|
||||
},
|
||||
[`23sierrafire`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`24rampumper`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`heavypump`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
},
|
||||
},
|
||||
[`heavyrescue`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`heavytank`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`heavywild`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
},
|
||||
},
|
||||
[`2025MAXcat`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`f550csquad`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`f550super6`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
},
|
||||
},
|
||||
[`ftanker`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`lacofddztrk`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`lacofdeng`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
},
|
||||
},
|
||||
[`lacofdfoam`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`lacofdpat`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`lacofdrs`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
},
|
||||
},
|
||||
[`lacofdsup`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`lacofdt3`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`lacofdusartrk`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
},
|
||||
},
|
||||
[`lacofdusartrlr`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`lacofdutil`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`lafdcab`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
},
|
||||
},
|
||||
[`lafdtiller`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`lafdengine`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`max12gladLASD`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
},
|
||||
},
|
||||
[` `] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`mmech`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`redf350brush21`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
},
|
||||
},
|
||||
[`Staff-EGRPf350su`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`velocity`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`x3bearcat`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
},
|
||||
},
|
||||
[`23smallboatfd`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[` `] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`brush`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
},
|
||||
},
|
||||
[`brushram`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`bulldog`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`enforcer`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
},
|
||||
},
|
||||
|
||||
[`EnforcerEng`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`enforcerf`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
},
|
||||
},
|
||||
[`enforcerta`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`engine`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`enladder`] = {
|
||||
[`lafdengine`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`fdgator`] = {
|
||||
[`lacofdeng`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`lacofdt3`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`EnforcerEng`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`enforcer`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`enforcerta`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`enforcerf`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`brush`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`brushram`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`firef350`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`firetruk13`] = {
|
||||
[`bulldog`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`foam1`] = {
|
||||
[`ftanker`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`hazf350tec`] = {
|
||||
[`heavypump`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`ladder6a`] = {
|
||||
[`heavytank`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 0.8710, y = 0.1550, z = 0.0140 },
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`rescue6`] = {
|
||||
[`heavywild`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`rescue6a`] = {
|
||||
[`panther`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = -1.07, y = 0.9, z = -0.1 },
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`rescue9e`] = {
|
||||
[`t3engine1`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.03, y = 0.1, z = -0.02 },
|
||||
{ x = -0.93, y = 0.1, z = -0.52 },
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`tender6`] = {
|
||||
[`enladder`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.03, y = 0.1, z = -0.02 },
|
||||
{ x = -0.93, y = 0.1, z = -0.52 },
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`tender9b`] = {
|
||||
[` `] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.03, y = 0.1, z = -0.02 },
|
||||
{ x = -0.93, y = 0.1, z = -0.52 },
|
||||
{ x = 1.045, y = -0.095, z = -0.060, rx = -19.000, ry = 0.000, rz = -88.500, depth = 0.525 },
|
||||
{ x = -0.605, y = -4.155, z = -0.355, rx = -41.750, ry = 0.000, rz = -184.250, depth = 0.525 },
|
||||
},
|
||||
},
|
||||
[`tower6`] = {
|
||||
[`britishladderels`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.03, y = 0.1, z = -0.02 },
|
||||
{ x = -0.93, y = 0.1, z = -0.52 },
|
||||
{ x = 1.340, y = -0.205, z = 0.000, rx = -39.000, ry = 0.000, rz = -94.750, depth = 0.335},
|
||||
},
|
||||
},
|
||||
[`mmladder`] = {
|
||||
[`rearmount`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.03, y = 0.1, z = -0.02 },
|
||||
{ x = -0.93, y = 0.1, z = -0.52 },
|
||||
{x = -1.345, y = 1.095, z = -0.440, rx = -24.750, ry = 0.000, rz = 72.000, depth = 0.670 },
|
||||
},
|
||||
},
|
||||
[`prescue`] = {
|
||||
[`midmount`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.03, y = 0.1, z = -0.02 },
|
||||
{ x = -0.93, y = 0.1, z = -0.52 },
|
||||
{ x = -1.320, y = 1.370, z = -0.595, rx = -24.250, ry = 0.000, rz = 77.500, depth = 0.860 },
|
||||
},
|
||||
},
|
||||
[`ram20pov`] = {
|
||||
[`tillertrailer`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.03, y = 0.1, z = -0.02 },
|
||||
{ x = -0.93, y = 0.1, z = -0.52 },
|
||||
{ x = 1.395, y = 0.445, z = 0.175, rx = -22.750, ry = 0.000, rz = -83.750, depth = 0.895 }
|
||||
},
|
||||
},
|
||||
[`rescue1`] = {
|
||||
[`tillertrailerels`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.03, y = 0.1, z = -0.02 },
|
||||
{ x = -0.93, y = 0.1, z = -0.52 },
|
||||
{ x = 1.395, y = 0.445, z = 0.175, rx = -22.750, ry = 0.000, rz = -83.750, depth = 0.895 }
|
||||
},
|
||||
},
|
||||
[`walkin`] = {
|
||||
[`rearmountels`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.03, y = 0.1, z = -0.02 },
|
||||
{ x = -0.93, y = 0.1, z = -0.52 },
|
||||
{x = -1.345, y = 1.095, z = -0.440, rx = -24.750, ry = 0.000, rz = 72.000, depth = 0.670 },
|
||||
},
|
||||
},
|
||||
[`walkinarrow`] = {
|
||||
[`midmountels`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.03, y = 0.1, z = -0.02 },
|
||||
{ x = -0.93, y = 0.1, z = -0.52 },
|
||||
{ x = -1.320, y = 1.370, z = -0.595, rx = -24.250, ry = 0.000, rz = 77.500, depth = 0.860 },
|
||||
},
|
||||
},
|
||||
[`fireboat`] = {
|
||||
[`ldfoam`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.03, y = 0.1, z = -0.02 },
|
||||
{ x = -0.93, y = 0.1, z = -0.52 },
|
||||
{ x = 1.375, y = 1.160, z = 0.000, rx = -20.500, ry = 0.000, rz = -91.000, depth = 0.550 },
|
||||
},
|
||||
},
|
||||
[`GC21F250`] = {
|
||||
[`ldfoamels`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.03, y = 0.1, z = -0.02 },
|
||||
{ x = -0.93, y = 0.1, z = -0.52 },
|
||||
{ x = 1.375, y = 1.160, z = 0.000, rx = -20.500, ry = 0.000, rz = -91.000, depth = 0.550 },
|
||||
},
|
||||
},
|
||||
[`Staff-Buggy`] = {
|
||||
[`firerobot`] = {
|
||||
useBone = false,
|
||||
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
|
||||
offsets = {
|
||||
{ x = 1.03, y = 0.1, z = -0.02 },
|
||||
{ x = -0.93, y = 0.1, z = -0.52 },
|
||||
{ x = 0.225, y = -1.590, z = 0.510, rx = -11.500, ry = 0.000, rz = 183.500, depth = 0.645, type = "hand"},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
EnablePositioningCommand = false,
|
||||
-- This enables the /findhosepositioning command to help you find the right vehicle offsets for either
|
||||
-- the hose connection or the supply line connection point. See our documentation for more info.
|
||||
EnablePositioningCommand = true,
|
||||
-- This enables the /findhydrantpositioning command to help you find the right hydrant offsets for either
|
||||
-- the supply connection or the lpp line connection point. See our documentation for more info.
|
||||
|
||||
PositioningControls = {
|
||||
down = 207, -- Page Up
|
||||
up = 208, -- Page Down
|
||||
backwards = 173, -- Arrow Down
|
||||
forwards = 172, -- Arrow Up
|
||||
left = 174, -- Arrow Left
|
||||
right = 175, -- Arrow Right
|
||||
enter = 191, -- Enter Key
|
||||
},
|
||||
|
||||
HydrantOffsets = {
|
||||
{ model = `prop_fire_hydrant_4`, offsets = {x = 0.0, y = -0.27, z = 0.58} },
|
||||
{ model = `prop_fire_hydrant_2`, offsets = {x = 0.1, y = 0.0, z = 0.4} },
|
||||
{ model = `prop_fire_hydrant_1`, offsets = {x = 0.05, y = 0.0, z = 0.6} },
|
||||
{ model = `prop_fire_hydrant_4`, offsets = { x = 0.000, y = -0.410, z = 0.525, rx = 28.500, ry = 0.000, rz = 0.000, depth = -0.455 } },
|
||||
{ model = `prop_fire_hydrant_2`, offsets = { x = 0.030, y = -0.585, z = 0.245, rx = -35.250, ry = 0.000, rz = -173.750, depth = 0.465 } },
|
||||
{ model = `prop_fire_hydrant_1`, offsets = { x = 0.540, y = 0.015, z = 0.540, rx = -13.500, ry = 0.000, rz = -86.250, depth = 0.460 } },
|
||||
{ model = `bv_water_pump`, offsets = { x = -0.435, y = -0.490, z = 0.145, rx = -17.250, ry = 0.000, rz = 177.250, depth = 0.215 } }
|
||||
},
|
||||
|
||||
Translations = {
|
||||
stopFilling = "Press Z to disconnect line\nPress H to stop filling",
|
||||
startFilling = "Press Z to disconnect line\nPress H to fill tank with water",
|
||||
placeGenerator = "Press ~INPUT_FRONTEND_RDOWN~ to place the generator or ~INPUT_FRONTEND_RRIGHT~ to cancel.",
|
||||
placePump = "Press ~INPUT_FRONTEND_RDOWN~ to place the pump or ~INPUT_FRONTEND_CANCEL~ to cancel.",
|
||||
thirdEyeConnect = "Connect line to vehicle",
|
||||
thirdEyeDisconnect ="Disconnect line from vehicle",
|
||||
thirdEyeStartFill = "Start filling up vehicle",
|
||||
@@ -499,11 +291,86 @@ Config = {
|
||||
noPermission = "You do not have access to use the supply line.",
|
||||
placeHydrantCommandHelp = "Place or remove a fire hydrant",
|
||||
placeHydrantCommandHelpArgument = "place/remove",
|
||||
placeGeneratorCommandHelp = "Place or remove a LPP",
|
||||
placeGeneratorCommandHelpArgument = "place/remove",
|
||||
placeHydrantCommandSuccess = "Hydrant placed successfully!",
|
||||
placeHydrantCommandCancel = "Placement cancelled!",
|
||||
removeHydrantCommandSuccess = "Hydrant removed!",
|
||||
placeGeneratorCommandSuccess = "Hydrant placed successfully!",
|
||||
placeGeneratorCommandCancel = "Placement cancelled!",
|
||||
removeGeneratorCommandSuccess = "Hydrant removed!",
|
||||
noVehicleNearby = "No vehicle nearby found!",
|
||||
cantHoldWater = "This vehicle cannot hold water",
|
||||
notInShallowWater = "You must be at the shoreline or shallow water to place the pump.",
|
||||
lppEquipped = "You have equipped the portable generator. Place it near a water source.",
|
||||
genAndPumpStored = "Generator and pump stored!",
|
||||
noLppPlaced = "No generator is currently deployed!",
|
||||
noItem = "You do not have the required item to use an LPP.",
|
||||
},
|
||||
|
||||
PlaceGeneratorCommand = {
|
||||
Enabled = true,
|
||||
|
||||
Inventory = {
|
||||
ItemName = "lpp",
|
||||
oxInventory = false,
|
||||
quasarInventory = false,
|
||||
coreInventory = false,
|
||||
ESX = false,
|
||||
vRP = false,
|
||||
qbCore = false,
|
||||
},
|
||||
|
||||
CommandName = "lpp",
|
||||
PlaceArgument = "place",
|
||||
RemoveArgument = "remove",
|
||||
Permissions = {
|
||||
EnablePermissions = false,
|
||||
AcePermissions = {
|
||||
Enabled = false,
|
||||
-- The permission name will be command.hydrant
|
||||
},
|
||||
|
||||
ESX = {
|
||||
Enabled = false,
|
||||
CheckJob = {
|
||||
Enabled = false, -- Enable this to use ESX job check
|
||||
Jobs = {"fireman"} -- A user can have any of the following jobs, allowing you to add multiple
|
||||
}
|
||||
},
|
||||
-- We've added vRP integration. All you need to do is enable it below. Then, configure if you wish to check for groups or permissions, or even both
|
||||
vRP = {
|
||||
Enabled = false,
|
||||
CheckGroup = {
|
||||
Enabled = false, -- Enable this to use vRP group check
|
||||
Groups = {"fireman"}, -- A user can have any of the following groups, meaning you can add different jobs
|
||||
},
|
||||
CheckPermission = {
|
||||
Enabled = false, -- Enable this to use vRP permission check
|
||||
Permissions = {"fireman.usehose"} -- A user can have any of the following permissions, allowing you to add multiple
|
||||
},
|
||||
},
|
||||
-- We've added QBCore integration. All you need to do is enable it below. Then, configure if you wish to check for jobs or permissions, or even both
|
||||
QBCore = {
|
||||
Enabled = false,
|
||||
CheckJob = {
|
||||
Enabled = false, -- Enable this to use QBCore job check
|
||||
Jobs = {"fireman"}, -- A user can have any of the following jobs, meaning you can add different jobs
|
||||
},
|
||||
CheckPermission = {
|
||||
Enabled = false, -- Enable this to use QBCore permission check
|
||||
permissions = {"fireman.usehose"}, -- A user can have any of the following permissions, allowing you to add multiple
|
||||
},
|
||||
},
|
||||
-- We've added QBX integration. All you need to do is enable it below. Then, configure if you wish to check for jobs or permissions, or even both
|
||||
QBX = {
|
||||
Enabled = false,
|
||||
CheckJob = {
|
||||
Enabled = false, -- Enable this to use QBX job check
|
||||
Jobs = {"fireman"}, -- A user can have any of the following jobs, meaning you can add different jobs
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
PlaceHydrantCommand = {
|
||||
|
||||
@@ -7,7 +7,11 @@ lua54 'yes'
|
||||
|
||||
author 'London Studios'
|
||||
description 'Supply-Line'
|
||||
version '1.0.0'
|
||||
version '2.2'
|
||||
|
||||
file {
|
||||
'stream/bv_waterpump.ytyp'
|
||||
}
|
||||
|
||||
shared_script 'config.lua'
|
||||
|
||||
@@ -26,4 +30,6 @@ escrow_ignore {
|
||||
'sv_utils.lua',
|
||||
'cl_utils.lua',
|
||||
}
|
||||
|
||||
data_file 'DLC_ITYP_REQUEST' 'stream/bv_waterpump.ytyp'
|
||||
dependency '/assetpacks'
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,18 +1,66 @@
|
||||
if Config.JobCheck.ESX.Enabled then
|
||||
if Config.JobCheck.ESX.Enabled or Config.PlaceGeneratorCommand.Permissions.ESX.Enabled then
|
||||
ESX = exports["es_extended"]:getSharedObject()
|
||||
end
|
||||
|
||||
if Config.JobCheck.vRP.Enabled then
|
||||
if Config.JobCheck.vRP.Enabled or Config.PlaceGeneratorCommand.Permissions.vRP.Enabled then
|
||||
local Tunnel = module("vrp", "lib/Tunnel")
|
||||
local Proxy = module("vrp", "lib/Proxy")
|
||||
vRP = Proxy.getInterface("vRP")
|
||||
vRPclient = Tunnel.getInterface("vRP","vRP")
|
||||
end
|
||||
|
||||
if Config.JobCheck.QBCore.Enabled then
|
||||
if Config.JobCheck.QBCore.Enabled or Config.PlaceGeneratorCommand.Inventory.qbCore or Config.PlaceGeneratorCommand.Permissions.QBCore.Enabled then
|
||||
QBCore = exports['qb-core']:GetCoreObject()
|
||||
end
|
||||
|
||||
local itemEnabled = Config.PlaceGeneratorCommand.Inventory.qbCore or Config.PlaceGeneratorCommand.Inventory.vRP or Config.PlaceGeneratorCommand.Inventory.ESX or Config.PlaceGeneratorCommand.Inventory.coreInventory or Config.PlaceGeneratorCommand.Inventory.oxInventory
|
||||
|
||||
usedGenerator = {}
|
||||
|
||||
if itemEnabled then
|
||||
RegisterNetEvent("Server:GeneratorWithItem", function(src)
|
||||
if HandleInventoryItems(src, Config.PlaceGeneratorCommand.Inventory.ItemName, false) then
|
||||
usedGenerator[src] = true
|
||||
TriggerClientEvent("SupplyLine:Client:EquipPortableGenerator", src)
|
||||
else
|
||||
TriggerClientEvent("SupplyLine:Client:showNotification", src, Config.Translations.noItem)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
RegisterNetEvent("Server:ReturnGenerator", function()
|
||||
local source = source
|
||||
if usedGenerator[source] ~= nil and usedGenerator[source] ~= false then
|
||||
HandleInventoryItems(source, Config.PlaceGeneratorCommand.Inventory.ItemName, true)
|
||||
usedGenerator[source] = nil
|
||||
end
|
||||
end)
|
||||
|
||||
if Config.PlaceGeneratorCommand.Inventory.qbCore then
|
||||
CreateThread(function()
|
||||
QBCore.Functions.CreateUseableItem(Config.PlaceGeneratorCommand.Inventory.ItemName, function(source, item)
|
||||
TriggerEvent("Server:GeneratorWithItem", source)
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
if Config.PlaceGeneratorCommand.Inventory.ESX then
|
||||
CreateThread(function()
|
||||
ESX.RegisterUsableItem(Config.PlaceGeneratorCommand.Inventory.ItemName, function(playerId)
|
||||
TriggerEvent("Server:GeneratorWithItem", playerId)
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
if Config.PlaceGeneratorCommand.Inventory.oxInventory then
|
||||
exports('OxUseGenerator', function(event, item, inventory)
|
||||
if event == 'usingItem' then
|
||||
usedGenerator[inventory.player.source] = true
|
||||
TriggerClientEvent("SupplyLine:Client:EquipPortableGenerator", inventory.player.source)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function UserHasPermission(source, location)
|
||||
|
||||
if not location.EnablePermissions then
|
||||
@@ -92,3 +140,69 @@ function UserHasPermission(source, location)
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function HandleInventoryItems(source, itemName, give)
|
||||
if Config.PlaceGeneratorCommand.Inventory.vRP then
|
||||
local userID = vRP.getUserId({source})
|
||||
if give then
|
||||
vRP.giveInventoryItem({userId, itemName, 1, false})
|
||||
else
|
||||
if vRP.tryGetInventoryItem({userID, itemName, 1, false}) then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
elseif Config.PlaceGeneratorCommand.Inventory.qbCore then
|
||||
if give then
|
||||
exports['qb-inventory']:AddItem(source, itemName, 1, false, false, GetCurrentResourceName())
|
||||
else
|
||||
local successful = exports['qb-inventory']:RemoveItem(source, itemName, 1, false, GetCurrentResourceName())
|
||||
|
||||
return successful
|
||||
end
|
||||
elseif Config.PlaceGeneratorCommand.Inventory.ESX then
|
||||
local xPlayer = ESX.GetPlayerFromId(source)
|
||||
if give then
|
||||
xPlayer.addInventoryItem(itemName, 1)
|
||||
else
|
||||
local returnedItem = xPlayer.getInventoryItem(itemName)
|
||||
|
||||
if returnedItem.canRemove then
|
||||
xPlayer.removeInventoryItem(itemName, 1)
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
elseif Config.PlaceGeneratorCommand.Inventory.oxInventory then
|
||||
if give then
|
||||
exports.ox_inventory:AddItem(source, itemName, 1)
|
||||
else
|
||||
local successful = exports.ox_inventory:RemoveItem(source, itemName, 1)
|
||||
|
||||
return successful
|
||||
end
|
||||
elseif Config.PlaceGeneratorCommand.Inventory.quasarInventory then
|
||||
if give then
|
||||
exports['qs-inventory']:AddItem(source, itemName, 1)
|
||||
else
|
||||
local quantity = exports['qs-inventory']:GetItemTotalAmount(source, itemName)
|
||||
if quantity > 0 then
|
||||
exports['qs-inventory']:RemoveItem(source, itemName, 1)
|
||||
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
elseif Config.PlaceGeneratorCommand.Inventory.coreInventory then
|
||||
if give then
|
||||
exports.core_Inventory:addItem(source, itemName, 1)
|
||||
else
|
||||
local successful = exports.core_Inventory:removeItem(source, itemName, 1)
|
||||
|
||||
return successful
|
||||
end
|
||||
end
|
||||
end
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,778 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<CVehicleModelInfoVarGlobal>
|
||||
<Lights>
|
||||
</Lights>
|
||||
<Sirens>
|
||||
<Item>
|
||||
<id value="204"/>
|
||||
<name>prescue</name>
|
||||
<timeMultiplier value="1.00000000"/>
|
||||
<lightFalloffMax value="100.00000000"/>
|
||||
<lightFalloffExponent value="100.00000000"/>
|
||||
<lightInnerConeAngle value="2.29061000"/>
|
||||
<lightOuterConeAngle value="70.00000000"/>
|
||||
<lightOffset value="0.00000000"/>
|
||||
<textureName>VehicleLight_sirenlight</textureName>
|
||||
<sequencerBpm value="450"/>
|
||||
<leftHeadLight>
|
||||
<sequencer value="0"/>
|
||||
</leftHeadLight>
|
||||
<rightHeadLight>
|
||||
<sequencer value="0"/>
|
||||
</rightHeadLight>
|
||||
<leftTailLight>
|
||||
<sequencer value="0"/>
|
||||
</leftTailLight>
|
||||
<rightTailLight>
|
||||
<sequencer value="0"/>
|
||||
</rightTailLight>
|
||||
<leftHeadLightMultiples value="1"/>
|
||||
<rightHeadLightMultiples value="1"/>
|
||||
<leftTailLightMultiples value="1"/>
|
||||
<rightTailLightMultiples value="1"/>
|
||||
<useRealLights value="true"/>
|
||||
<sirens>
|
||||
<!-- siren1 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="20.00000000"/>
|
||||
<sequencer value="4294967295"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="false"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="20.00000000"/>
|
||||
<sequencer value="4294967295"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="false"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="0.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFF0000"/>
|
||||
<intensity value="0.00000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="true"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren2 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="20.00000000"/>
|
||||
<sequencer value="4294967295"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="false"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="20.00000000"/>
|
||||
<sequencer value="4294967295"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="false"/>
|
||||
<syncToBpm value="false"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="0.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000000"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFFFFFF"/>
|
||||
<intensity value="0.00000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="true"/>
|
||||
<scale value="false"/>
|
||||
<scaleFactor value="0"/>
|
||||
<flash value="true"/>
|
||||
<light value="false"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren3 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="1431655765"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="1431655765"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFFFF00"/>
|
||||
<intensity value="0.10000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren4 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="2863311530"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="2863311530"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFFFFFF"/>
|
||||
<intensity value="0.50000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren5 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="-1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="1431655765"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="-1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="1431655765"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFFFFFF"/>
|
||||
<intensity value="0.50000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren6 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="-1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="2863311530"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="-1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="2863311530"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFF0000"/>
|
||||
<intensity value="0.50000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren7 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="1431655765"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="1431655765"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFFFFFF"/>
|
||||
<intensity value="0.50000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren8 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="2863311530"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="2863311530"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFF0000"/>
|
||||
<intensity value="0.50000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren9 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="1431655765"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="1431655765"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFF0000"/>
|
||||
<intensity value="0.50000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren10 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="2863311530"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="2863311530"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFFFF00"/>
|
||||
<intensity value="0.50000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren11 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="2863311530"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="2863311530"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFF0000"/>
|
||||
<intensity value="0.50000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren12 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="1431655765"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="1431655765"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFF0000"/>
|
||||
<intensity value="0.50000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren13 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="9739768356"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="9739768356"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFFFFFF"/>
|
||||
<intensity value="0.50000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren14 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="5952080662"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="5952080662"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFF0000"/>
|
||||
<intensity value="0.50000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren15 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="19479536712"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="19479536712"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFFFFFF"/>
|
||||
<intensity value="0.50000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren16 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="37335778699"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="37335778699"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFF0000"/>
|
||||
<intensity value="0.50000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren17 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="-1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="4294967295"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="-1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="4294967295"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFFFFFF"/>
|
||||
<intensity value="2.00000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren18 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="4294967295"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="1.57079633"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="4294967295"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFFFFFF"/>
|
||||
<intensity value="2.00000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren19 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="3.14159265"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="1431655765"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="3.14159265"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="1431655765"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFF0000"/>
|
||||
<intensity value="0.50000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
<!-- siren20 -->
|
||||
<Item>
|
||||
<rotation>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="2863311530"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</rotation>
|
||||
<flashiness>
|
||||
<delta value="0.00000000"/>
|
||||
<start value="0.00000000"/>
|
||||
<speed value="0.00000000"/>
|
||||
<sequencer value="2863311530"/>
|
||||
<multiples value="1"/>
|
||||
<direction value="true"/>
|
||||
<syncToBpm value="true"/>
|
||||
</flashiness>
|
||||
<corona>
|
||||
<intensity value="25.00000000"/>
|
||||
<size value="0.00000000"/>
|
||||
<pull value="0.00000001"/>
|
||||
<faceCamera value="false"/>
|
||||
</corona>
|
||||
<color value="0xFFFF0000"/>
|
||||
<intensity value="0.50000000"/>
|
||||
<lightGroup value="0"/>
|
||||
<rotate value="false"/>
|
||||
<scale value="true"/>
|
||||
<scaleFactor value="10"/>
|
||||
<flash value="true"/>
|
||||
<light value="true"/>
|
||||
<spotLight value="true"/>
|
||||
<castShadows value="false"/>
|
||||
</Item>
|
||||
</sirens>
|
||||
</Item>
|
||||
</Sirens>
|
||||
</CVehicleModelInfoVarGlobal>
|
||||
@@ -1,276 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CVehicleModelInfoVariation>
|
||||
<variationData>
|
||||
<Item>
|
||||
<modelName>prescue</modelName>
|
||||
<colors>
|
||||
<Item>
|
||||
<indices content="char_array">
|
||||
0
|
||||
0
|
||||
11
|
||||
156
|
||||
0
|
||||
0
|
||||
</indices>
|
||||
<liveries>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
</liveries>
|
||||
</Item>
|
||||
<Item>
|
||||
<indices content="char_array">
|
||||
2
|
||||
0
|
||||
134
|
||||
156
|
||||
0
|
||||
0
|
||||
</indices>
|
||||
<liveries>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
</liveries>
|
||||
</Item>
|
||||
<Item>
|
||||
<indices content="char_array">
|
||||
75
|
||||
0
|
||||
157
|
||||
156
|
||||
0
|
||||
0
|
||||
</indices>
|
||||
<liveries>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
</liveries>
|
||||
</Item>
|
||||
<Item>
|
||||
<indices content="char_array">
|
||||
7
|
||||
0
|
||||
134
|
||||
0
|
||||
0
|
||||
0
|
||||
</indices>
|
||||
<liveries>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
</liveries>
|
||||
</Item>
|
||||
<Item>
|
||||
<indices content="char_array">
|
||||
34
|
||||
0
|
||||
45
|
||||
0
|
||||
0
|
||||
0
|
||||
</indices>
|
||||
<liveries>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
</liveries>
|
||||
</Item>
|
||||
<Item>
|
||||
<indices content="char_array">
|
||||
0
|
||||
0
|
||||
2
|
||||
0
|
||||
0
|
||||
0
|
||||
</indices>
|
||||
<liveries>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
<Item value="false"/>
|
||||
</liveries>
|
||||
</Item>
|
||||
</colors>
|
||||
<kits>
|
||||
<Item>0_default_modkit</Item>
|
||||
</kits>
|
||||
<windowsWithExposedEdges/>
|
||||
<plateProbabilities>
|
||||
<Probabilities>
|
||||
<Item>
|
||||
<Name>Police guv plate</Name>
|
||||
<Value value="100"/>
|
||||
</Item>
|
||||
</Probabilities>
|
||||
</plateProbabilities>
|
||||
<lightSettings value="1"/>
|
||||
<sirenSettings value="204"/>
|
||||
</Item>
|
||||
</variationData>
|
||||
</CVehicleModelInfoVariation>
|
||||
@@ -1,140 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CVehicleModelInfo__InitDataList>
|
||||
<residentTxd>vehshare</residentTxd>
|
||||
<residentAnims />
|
||||
<InitDatas>
|
||||
<Item>
|
||||
<modelName>prescue</modelName>
|
||||
<txdName>prescue</txdName>
|
||||
<handlingId>riot2</handlingId>
|
||||
<gameName>prescue</gameName>
|
||||
<vehicleMakeName />
|
||||
<expressionDictName>null</expressionDictName>
|
||||
<expressionName>null</expressionName>
|
||||
<animConvRoofDictName>null</animConvRoofDictName>
|
||||
<animConvRoofName>null</animConvRoofName>
|
||||
<animConvRoofWindowsAffected />
|
||||
<ptfxAssetName>null</ptfxAssetName>
|
||||
<audioNameHash>kc129powerstroke60</audioNameHash>
|
||||
<layout>LAYOUT_FIRETRUCK</layout>
|
||||
<coverBoundOffsets>SHERIFF_COVER_OFFSET_INFO</coverBoundOffsets>
|
||||
<explosionInfo>EXPLOSION_INFO_DEFAULT</explosionInfo>
|
||||
<scenarioLayout />
|
||||
<cameraName>DEFAULT_FOLLOW_VEHICLE_CAMERA</cameraName>
|
||||
<aimCameraName>DEFAULT_THIRD_PERSON_VEHICLE_AIM_CAMERA</aimCameraName>
|
||||
<bonnetCameraName>VEHICLE_BONNET_CAMERA_MID_HIGH</bonnetCameraName>
|
||||
<povCameraName>DEFAULT_POV_CAMERA</povCameraName>
|
||||
<FirstPersonDriveByIKOffset x="0.000000" y="-0.060000" z="-0.060000" />
|
||||
<FirstPersonDriveByUnarmedIKOffset x="0.000000" y="0.-050000" z="-0.020000" />
|
||||
<FirstPersonProjectileDriveByIKOffset x="0.000000" y="-0.075000" z="-0.045000" />
|
||||
<FirstPersonProjectileDriveByPassengerIKOffset x="0.000000" y="-0.075000" z="-0.045000" />
|
||||
<FirstPersonProjectileDriveByRearLeftIKOffset x="0.000000" y="0.020000" z="0.030000" />
|
||||
<FirstPersonProjectileDriveByRearRightIKOffset x="0.000000" y="0.020000" z="0.030000" />
|
||||
<FirstPersonDriveByLeftPassengerIKOffset x="0.000000" y="0.000000" z="0.000000" />
|
||||
<FirstPersonDriveByRightPassengerIKOffset x="0.000000" y="-0.060000" z="-0.060000" />
|
||||
<FirstPersonDriveByRightRearPassengerIKOffset x="0.000000" y="0.000000" z="0.000000" />
|
||||
<FirstPersonDriveByLeftPassengerUnarmedIKOffset x="0.000000" y="0.000000" z="0.000000" />
|
||||
<FirstPersonDriveByRightPassengerUnarmedIKOffset x="0.000000" y="0.000000" z="0.000000" />
|
||||
<FirstPersonMobilePhoneOffset x="0.155000" y="0.270000" z="0.508000" />
|
||||
<FirstPersonPassengerMobilePhoneOffset x="0.136000" y="0.223000" z="0.405000" />
|
||||
<FirstPersonMobilePhoneSeatIKOffset>
|
||||
<Item>
|
||||
<Offset x="0.136000" y="0.156000" z="0.425000" />
|
||||
<SeatIndex value="2" />
|
||||
</Item>
|
||||
<Item>
|
||||
<Offset x="0.136000" y="0.156000" z="0.425000" />
|
||||
<SeatIndex value="3" />
|
||||
</Item>
|
||||
</FirstPersonMobilePhoneSeatIKOffset>
|
||||
<PovCameraOffset x="0.000000" y="-0.145000" z="0.645000" />
|
||||
<PovCameraVerticalAdjustmentForRollCage value="0.000000" />
|
||||
<PovPassengerCameraOffset x="0.000000" y="0.000000" z="0.000000" />
|
||||
<PovRearPassengerCameraOffset x="0.000000" y="0.000000" z="0.000000" />
|
||||
<vfxInfoName>VFXVEHICLEINFO_CAR_GENERIC</vfxInfoName>
|
||||
<shouldUseCinematicViewMode value="true" />
|
||||
<shouldCameraTransitionOnClimbUpDown value="false" />
|
||||
<shouldCameraIgnoreExiting value="false" />
|
||||
<AllowPretendOccupants value="true" />
|
||||
<AllowJoyriding value="false" />
|
||||
<AllowSundayDriving value="false" />
|
||||
<AllowBodyColorMapping value="true" />
|
||||
<wheelScale value="0.237100" />
|
||||
<wheelScaleRear value="0.237100" />
|
||||
<dirtLevelMin value="0.000000" />
|
||||
<dirtLevelMax value="0.850000" />
|
||||
<envEffScaleMin value="0.000000" />
|
||||
<envEffScaleMax value="1.000000" />
|
||||
<envEffScaleMin2 value="0.000000" />
|
||||
<envEffScaleMax2 value="1.000000" />
|
||||
<damageMapScale value="0.600000" />
|
||||
<damageOffsetScale value="1.000000" />
|
||||
<diffuseTint value="0x00FFFFFF" />
|
||||
<steerWheelMult value="1.000000" />
|
||||
<HDTextureDist value="5.000000" />
|
||||
<lodDistances content="float_array">
|
||||
100.000000
|
||||
200.000000
|
||||
300.000000
|
||||
400.000000
|
||||
500.000000
|
||||
500.000000
|
||||
</lodDistances>
|
||||
<minSeatHeight value="0.839" />
|
||||
<identicalModelSpawnDistance value="20" />
|
||||
<maxNumOfSameColor value="10" />
|
||||
<defaultBodyHealth value="1000.000000" />
|
||||
<pretendOccupantsScale value="1.000000" />
|
||||
<visibleSpawnDistScale value="1.000000" />
|
||||
<trackerPathWidth value="2.000000" />
|
||||
<weaponForceMult value="1.000000" />
|
||||
<frequency value="100" />
|
||||
<swankness>SWANKNESS_1</swankness>
|
||||
<maxNum value="2" />
|
||||
<flags>FLAG_HAS_LIVERY FLAG_EXTRAS_REQUIRE FLAG_EXTRAS_STRONG FLAG_LAW_ENFORCEMENT FLAG_EMERGENCY_SERVICE FLAG_NO_RESPRAY FLAG_DONT_SPAWN_IN_CARGEN FLAG_REPORT_CRIME_IF_STANDING_ON FLAG_HAS_INTERIOR_EXTRAS </flags>
|
||||
<type>VEHICLE_TYPE_CAR</type>
|
||||
<plateType>VPT_FRONT_AND_BACK_PLATES</plateType>
|
||||
<dashboardType>VDT_GENTAXI</dashboardType>
|
||||
<vehicleClass>VC_EMERGENCY</vehicleClass>
|
||||
<wheelType>VWT_MUSCLE</wheelType>
|
||||
<trailers />
|
||||
<additionalTrailers />
|
||||
<drivers>
|
||||
<Item>
|
||||
<driverName>S_M_Y_Sheriff_01</driverName>
|
||||
<npcName />
|
||||
</Item>
|
||||
</drivers>
|
||||
<extraIncludes />
|
||||
<doorsWithCollisionWhenClosed />
|
||||
<driveableDoors />
|
||||
<bumpersNeedToCollideWithMap value="false" />
|
||||
<needsRopeTexture value="false" />
|
||||
<requiredExtras />
|
||||
<rewards>
|
||||
<Item>REWARD_WEAPON_PUMPSHOTGUN</Item>
|
||||
<Item>REWARD_AMMO_PUMPSHOTGUN_ENTER_VEHICLE</Item>
|
||||
<Item>REWARD_STAT_WEAPON</Item>
|
||||
</rewards>
|
||||
<cinematicPartCamera>
|
||||
<Item>WHEEL_FRONT_RIGHT_CAMERA</Item>
|
||||
<Item>WHEEL_FRONT_LEFT_CAMERA</Item>
|
||||
<Item>WHEEL_REAR_RIGHT_CAMERA</Item>
|
||||
<Item>WHEEL_REAR_LEFT_CAMERA</Item>
|
||||
</cinematicPartCamera>
|
||||
<NmBraceOverrideSet />
|
||||
<buoyancySphereOffset x="0.000000" y="0.000000" z="0.000000" />
|
||||
<buoyancySphereSizeScale value="1.000000" />
|
||||
<pOverrideRagdollThreshold type="NULL" />
|
||||
<firstPersonDrivebyData>
|
||||
<Item>STD_POLICE_FRONT_LEFT</Item>
|
||||
<Item>STD_POLICE_FRONT_RIGHT</Item>
|
||||
<Item>STD_POLICE_REAR_LEFT</Item>
|
||||
<Item>STD_POLICE_REAR_RIGHT</Item>
|
||||
</firstPersonDrivebyData>
|
||||
</Item>
|
||||
</InitDatas>
|
||||
<txdRelationships>
|
||||
|
||||
</txdRelationships>
|
||||
</CVehicleModelInfo__InitDataList>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -555,10 +555,50 @@ data_file 'CARCOLS_FILE' 'data/lasdchrg14/carcols.meta'
|
||||
data_file 'VEHICLE_VARIATION_FILE' 'data/lasdchrg14/carvariations.meta'
|
||||
data_file 'VEHICLE_LAYOUTS_FILE' 'data/lasdchrg14/dlctext.meta'
|
||||
|
||||
-- 2021chevy2500hd
|
||||
files {
|
||||
'data/2021chevy2500hd/vehicles.meta',
|
||||
'data/2021chevy2500hd/carvariations.meta',
|
||||
'data/2021chevy2500hd/carcols.meta',
|
||||
'data/2021chevy2500hd/handling.meta',
|
||||
'data/2021chevy2500hd/vehiclelayouts.meta',
|
||||
}
|
||||
|
||||
data_file 'HANDLING_FILE' 'data/2021chevy2500hd/handling.meta'
|
||||
data_file 'VEHICLE_METADATA_FILE' 'data/2021chevy2500hd/vehicles.meta'
|
||||
data_file 'CARCOLS_FILE' 'data/2021chevy2500hd/carcols.meta'
|
||||
data_file 'VEHICLE_VARIATION_FILE' 'data/2021chevy2500hd/carvariations.meta'
|
||||
data_file 'VEHICLE_LAYOUTS_FILE' 'data/2021chevy2500hd/dlctext.meta'
|
||||
|
||||
-- breakingbadrv
|
||||
files {
|
||||
'data/breakingbadrv/vehicles.meta',
|
||||
'data/breakingbadrv/carvariations.meta',
|
||||
'data/breakingbadrv/carcols.meta',
|
||||
'data/breakingbadrv/handling.meta',
|
||||
'data/breakingbadrv/vehiclelayouts.meta',
|
||||
}
|
||||
|
||||
data_file 'HANDLING_FILE' 'data/breakingbadrv/handling.meta'
|
||||
data_file 'VEHICLE_METADATA_FILE' 'data/breakingbadrv/vehicles.meta'
|
||||
data_file 'CARCOLS_FILE' 'data/breakingbadrv/carcols.meta'
|
||||
data_file 'VEHICLE_VARIATION_FILE' 'data/breakingbadrv/carvariations.meta'
|
||||
data_file 'VEHICLE_LAYOUTS_FILE' 'data/breakingbadrv/dlctext.meta'
|
||||
|
||||
-- GC21F250
|
||||
files {
|
||||
'data/GC21F250/vehicles.meta',
|
||||
'data/GC21F250/carvariations.meta',
|
||||
'data/GC21F250/carcols.meta',
|
||||
'data/GC21F250/handling.meta',
|
||||
'data/GC21F250/vehiclelayouts.meta',
|
||||
}
|
||||
|
||||
data_file 'HANDLING_FILE' 'data/GC21F250/handling.meta'
|
||||
data_file 'VEHICLE_METADATA_FILE' 'data/GC21F250/vehicles.meta'
|
||||
data_file 'CARCOLS_FILE' 'data/GC21F250/carcols.meta'
|
||||
data_file 'VEHICLE_VARIATION_FILE' 'data/GC21F250/carvariations.meta'
|
||||
data_file 'VEHICLE_LAYOUTS_FILE' 'data/GC21F250/dlctext.meta'
|
||||
|
||||
|
||||
client_script {
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
resource_manifest_version '44febabe-d386-4d18-afbe-5e627f4af937'
|
||||
this_is_a_map 'yes'
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,83 +0,0 @@
|
||||
-- Please read our documentation before configuring
|
||||
-- https://docs.londonstudios.net/
|
||||
|
||||
main = {
|
||||
hoseCommand = {
|
||||
enabled = true, -- This enables/disables the hose command
|
||||
commandName = "hose", -- This is the command name for the hose
|
||||
hoseModel = `weapon_hose`, -- This is the model for the hose. This must be wrapped in `` symbols
|
||||
acePermissions = {
|
||||
enabled = false,
|
||||
-- This enables ace permissions on the hose command
|
||||
},
|
||||
-- We've added ESX integration. All you need to do is enable it below and configure which jobs can use the command
|
||||
ESX = {
|
||||
enabled = false,
|
||||
checkJob = {
|
||||
enabled = true, -- Enable this to use ESX job check
|
||||
jobs = {"fire", "firefighter"} -- A user can have any of the following jobs, allowing you to add multiple
|
||||
}
|
||||
},
|
||||
-- We've added vRP integration. All you need to do is enable it below. Then, configure if you wish to check for groups or permissions, or even both
|
||||
vRP = {
|
||||
enabled = false,
|
||||
checkGroup = {
|
||||
enabled = false, -- Enable this to use vRP group check
|
||||
groups = {"fire", "admin"}, -- A user can have any of the following groups, meaning you can add different jobs
|
||||
},
|
||||
checkPermission = {
|
||||
enabled = false, -- Enable this to use vRP permission check
|
||||
permissions = {"player.kick"} -- A user can have any of the following permissions, allowing you to add multiple
|
||||
},
|
||||
},
|
||||
-- We've added QBCore integration. All you need to do is enable it below. Then, configure if you wish to check for jobs or permissions, or even both
|
||||
QBCore = {
|
||||
enabled = false,
|
||||
checkJob = {
|
||||
enabled = false, -- Enable this to use QBCore job check
|
||||
jobs = {"fire"}, -- A user can have any of the following jobs, meaning you can add different jobs
|
||||
},
|
||||
checkPermission = {
|
||||
enabled = false, -- Enable this to use QBCore permission check
|
||||
permissions = {"god"}, -- A user can have any of the following permissions, allowing you to add multiple
|
||||
},
|
||||
},
|
||||
hoseCooldown = 2, -- This is the cooldown after spraying hose or foam, to prevent any glitches or particle issues
|
||||
},
|
||||
|
||||
foamCommand = {
|
||||
enabled = true, -- This enables or disables the foam command
|
||||
commandName = "foam", -- This enables/disables the foam command
|
||||
enableFoamEffectOnGround = true, -- This enables or disables the foam effect on the ground
|
||||
foamEffectMaxDistance = 10.0, -- This is the maximum distance that the foam effect on the ground can spawn from the hose
|
||||
},
|
||||
}
|
||||
|
||||
translations = {
|
||||
foamCommandHelpText = "Toggle foam mode on your fire hose",
|
||||
hoseCommandHelpText = "Activate or deactivate your fire hose",
|
||||
weaponName = "Hose",
|
||||
hoseDisabled = "Fire hose is now ~r~disabled~w~.",
|
||||
hoseEnabled = "Fire hose is now ~b~enabled~w~.",
|
||||
foamModeDisabled = "Foam mode is now ~r~disabled~w~.",
|
||||
foamModeEnabled = "Foam mode is now ~g~enabled~w~.",
|
||||
}
|
||||
|
||||
developer = {
|
||||
foam = {
|
||||
offSet = {
|
||||
0.0, -0.06, 0.6
|
||||
},
|
||||
rotation = {
|
||||
0.0, 60.0, 0.0
|
||||
},
|
||||
},
|
||||
hose = {
|
||||
offSet = {
|
||||
0.0, -0.1, 0.65
|
||||
},
|
||||
rotation = {
|
||||
-40.0, 0.0, 90.0
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
fx_version 'bodacious'
|
||||
|
||||
games { 'gta5' }
|
||||
|
||||
author 'London Studios'
|
||||
description 'Create and fight realistic fires with a host of features'
|
||||
version '1.0.0'
|
||||
lua54 'yes'
|
||||
|
||||
client_scripts {
|
||||
'config.lua',
|
||||
'cl_hose.lua',
|
||||
}
|
||||
|
||||
server_scripts {
|
||||
-- "@vrp/lib/utils.lua",
|
||||
'config.lua',
|
||||
'sv_exports.lua',
|
||||
'sv_hose.lua',
|
||||
}
|
||||
|
||||
shared_script '@es_extended/imports.lua'
|
||||
|
||||
escrow_ignore {
|
||||
'stream/*',
|
||||
'hose/*',
|
||||
'config.lua',
|
||||
}
|
||||
|
||||
files {
|
||||
'hose/pedpersonality.meta',
|
||||
'hose/weaponanimations.meta',
|
||||
'hose/weaponarchetypes.meta',
|
||||
'hose/weapons.meta',
|
||||
}
|
||||
|
||||
data_file 'WEAPONINFO_FILE' 'hose/weapons.meta'
|
||||
data_file 'WEAPON_METADATA_FILE' 'hose/weaponarchetypes.meta'
|
||||
data_file 'WEAPON_ANIMATIONS_FILE' 'hose/weaponanimations.meta'
|
||||
data_file 'PED_PERSONALITY_FILE' 'hose/pedpersonality.meta'
|
||||
|
||||
-- HoseLS created by London Studios.
|
||||
-- Join our Discord server here: https://discord.gg/htyaZNaG
|
||||
dependency '/assetpacks'
|
||||
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<CExtraTextMetaFile>
|
||||
<hasGlobalTextFile value="true"/>
|
||||
<hasAdditionalText value="true"/>
|
||||
<isTitleUpdate value="false"/>
|
||||
</CExtraTextMetaFile>
|
||||
@@ -1,372 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<CPedModelInfo__PersonalityDataList>
|
||||
<MovementModeUnholsterData>
|
||||
<Item>
|
||||
<Name>UNHOLSTER_UNARMED</Name>
|
||||
<UnholsterClips>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<Clip>unarmed_holster_unarmed</Clip>
|
||||
</Item>
|
||||
</UnholsterClips>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name>UNHOLSTER_2H_MELEE</Name>
|
||||
<UnholsterClips>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<Clip>2h_melee_holster_unarmed</Clip>
|
||||
</Item>
|
||||
</UnholsterClips>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name>UNHOLSTER_1H</Name>
|
||||
<UnholsterClips>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<Clip>1h_holster_unarmed</Clip>
|
||||
</Item>
|
||||
</UnholsterClips>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name>UNHOLSTER_2H</Name>
|
||||
<UnholsterClips>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<Clip>2h_holster_unarmed</Clip>
|
||||
</Item>
|
||||
</UnholsterClips>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name>UNHOLSTER_MINIGUN</Name>
|
||||
<UnholsterClips>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<Clip>mini_holster_2h_unarmed</Clip>
|
||||
</Item>
|
||||
</UnholsterClips>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name>UNHOLSTER_UNARMED_STEALTH</Name>
|
||||
<UnholsterClips>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<Clip>unarmed_holster_unarmed</Clip>
|
||||
</Item>
|
||||
</UnholsterClips>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name>UNHOLSTER_2H_MELEE_STEALTH</Name>
|
||||
<UnholsterClips>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<Clip>unarmed_holster_unarmed</Clip>
|
||||
</Item>
|
||||
</UnholsterClips>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name>UNHOLSTER_1H_STEALTH</Name>
|
||||
<UnholsterClips>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<Clip>1h_holster_unarmed</Clip>
|
||||
</Item>
|
||||
</UnholsterClips>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name>UNHOLSTER_2H_STEALTH</Name>
|
||||
<UnholsterClips>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<Clip>2h_holster_unarmed</Clip>
|
||||
</Item>
|
||||
</UnholsterClips>
|
||||
</Item>
|
||||
</MovementModeUnholsterData>
|
||||
<MovementModes>
|
||||
<Item>
|
||||
<Name>DEFAULT_ACTION</Name>
|
||||
<MovementModes>
|
||||
<Item>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<ClipSets>
|
||||
<Item>
|
||||
<MovementClipSetId>move_action@p_m_zero@unarmed@core</MovementClipSetId>
|
||||
<WeaponClipSetId />
|
||||
<WeaponClipFilterId />
|
||||
<UpperBodyShadowExpressionEnabled value="false" />
|
||||
<UpperBodyFeatheredLeanEnabled value="false" />
|
||||
<UseWeaponAnimsForGrip value="true" />
|
||||
<UseLeftHandIk value="false" />
|
||||
<IdleTransitionBlendOutTime value="0.500000" />
|
||||
<IdleTransitions>
|
||||
<Item>MOVE_ACTION@GENERIC@TRANS@UNARMED</Item>
|
||||
</IdleTransitions>
|
||||
<UnholsterClipSetId>MOVE_ACTION@P_M_ZERO@HOLSTER</UnholsterClipSetId>
|
||||
<UnholsterClipData>UNHOLSTER_UNARMED</UnholsterClipData>
|
||||
</Item>
|
||||
</ClipSets>
|
||||
</Item>
|
||||
</Item>
|
||||
<Item>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<ClipSets>
|
||||
<Item>
|
||||
<MovementClipSetId>move_stealth@p_m_zero@unarmed@core</MovementClipSetId>
|
||||
<WeaponClipSetId>weapons@melee_stealth_1h</WeaponClipSetId>
|
||||
<WeaponClipFilterId>UpperbodyAndIk_filter</WeaponClipFilterId>
|
||||
<UpperBodyShadowExpressionEnabled value="true" />
|
||||
<UpperBodyFeatheredLeanEnabled value="false" />
|
||||
<UseWeaponAnimsForGrip value="false" />
|
||||
<UseLeftHandIk value="false" />
|
||||
<IdleTransitionBlendOutTime value="0.500000" />
|
||||
<IdleTransitions>
|
||||
<Item>move_stealth@generic@trans@unarmed</Item>
|
||||
</IdleTransitions>
|
||||
<UnholsterClipSetId>move_stealth@p_m_zero@holster</UnholsterClipSetId>
|
||||
<UnholsterClipData>UNHOLSTER_UNARMED_STEALTH</UnholsterClipData>
|
||||
</Item>
|
||||
</ClipSets>
|
||||
</Item>
|
||||
</Item>
|
||||
</MovementModes>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name>MP_FEMALE_ACTION</Name>
|
||||
<MovementModes>
|
||||
<Item>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<ClipSets>
|
||||
<Item>
|
||||
<MovementClipSetId>MOVE_ACTION@MP_FEMALE@UNARMED@CORE</MovementClipSetId>
|
||||
<WeaponClipSetId />
|
||||
<WeaponClipFilterId />
|
||||
<UpperBodyShadowExpressionEnabled value="false" />
|
||||
<UpperBodyFeatheredLeanEnabled value="false" />
|
||||
<UseWeaponAnimsForGrip value="true" />
|
||||
<UseLeftHandIk value="false" />
|
||||
<IdleTransitionBlendOutTime value="0.500000" />
|
||||
<IdleTransitions>
|
||||
<Item>MOVE_ACTION@MP_FEMALE@UNARMED@TRANS@</Item>
|
||||
</IdleTransitions>
|
||||
<UnholsterClipSetId>MOVE_ACTION@P_M_ZERO@HOLSTER</UnholsterClipSetId>
|
||||
<UnholsterClipData>UNHOLSTER_UNARMED</UnholsterClipData>
|
||||
</Item>
|
||||
</ClipSets>
|
||||
</Item>
|
||||
</Item>
|
||||
<Item>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<ClipSets>
|
||||
<Item>
|
||||
<MovementClipSetId>move_stealth@p_m_zero@unarmed@core</MovementClipSetId>
|
||||
<WeaponClipSetId>weapons@melee_stealth_1h</WeaponClipSetId>
|
||||
<WeaponClipFilterId>UpperbodyAndIk_filter</WeaponClipFilterId>
|
||||
<UpperBodyShadowExpressionEnabled value="true" />
|
||||
<UpperBodyFeatheredLeanEnabled value="false" />
|
||||
<UseWeaponAnimsForGrip value="false" />
|
||||
<UseLeftHandIk value="false" />
|
||||
<IdleTransitionBlendOutTime value="0.500000" />
|
||||
<IdleTransitions>
|
||||
<Item>MOVE_STEALTH@MP_FEMALE@UNARMED@TRANS</Item>
|
||||
</IdleTransitions>
|
||||
<UnholsterClipSetId>move_stealth@p_m_zero@holster</UnholsterClipSetId>
|
||||
<UnholsterClipData>UNHOLSTER_UNARMED_STEALTH</UnholsterClipData>
|
||||
</Item>
|
||||
</ClipSets>
|
||||
</Item>
|
||||
</Item>
|
||||
</MovementModes>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name>MICHAEL_ACTION</Name>
|
||||
<MovementModes>
|
||||
<Item>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<ClipSets>
|
||||
<Item>
|
||||
<MovementClipSetId>move_action@p_m_zero@unarmed@core</MovementClipSetId>
|
||||
<WeaponClipSetId />
|
||||
<WeaponClipFilterId />
|
||||
<UpperBodyShadowExpressionEnabled value="false" />
|
||||
<UpperBodyFeatheredLeanEnabled value="false" />
|
||||
<UseWeaponAnimsForGrip value="true" />
|
||||
<UseLeftHandIk value="false" />
|
||||
<IdleTransitionBlendOutTime value="0.500000" />
|
||||
<IdleTransitions>
|
||||
<Item>MOVE_ACTION@P_M_ZERO@UNARMED@TRANS@A</Item>
|
||||
</IdleTransitions>
|
||||
<UnholsterClipSetId>MOVE_ACTION@P_M_ZERO@HOLSTER</UnholsterClipSetId>
|
||||
<UnholsterClipData>UNHOLSTER_UNARMED</UnholsterClipData>
|
||||
</Item>
|
||||
</ClipSets>
|
||||
</Item>
|
||||
</Item>
|
||||
<Item>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<ClipSets>
|
||||
<Item>
|
||||
<MovementClipSetId>move_stealth@p_m_zero@unarmed@core</MovementClipSetId>
|
||||
<WeaponClipSetId>weapons@melee_stealth_1h</WeaponClipSetId>
|
||||
<WeaponClipFilterId>UpperbodyAndIk_filter</WeaponClipFilterId>
|
||||
<UpperBodyShadowExpressionEnabled value="true" />
|
||||
<UpperBodyFeatheredLeanEnabled value="false" />
|
||||
<UseWeaponAnimsForGrip value="false" />
|
||||
<UseLeftHandIk value="false" />
|
||||
<IdleTransitionBlendOutTime value="0.500000" />
|
||||
<IdleTransitions>
|
||||
<Item>move_stealth@p_m_zero@unarmed@trans@a</Item>
|
||||
</IdleTransitions>
|
||||
<UnholsterClipSetId>move_stealth@p_m_zero@holster</UnholsterClipSetId>
|
||||
<UnholsterClipData>UNHOLSTER_UNARMED_STEALTH</UnholsterClipData>
|
||||
</Item>
|
||||
</ClipSets>
|
||||
</Item>
|
||||
</Item>
|
||||
</MovementModes>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name>FRANKLIN_ACTION</Name>
|
||||
<MovementModes>
|
||||
<Item>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<ClipSets>
|
||||
<Item>
|
||||
<MovementClipSetId>move_action@p_m_one@unarmed@core</MovementClipSetId>
|
||||
<WeaponClipSetId />
|
||||
<WeaponClipFilterId />
|
||||
<UpperBodyShadowExpressionEnabled value="false" />
|
||||
<UpperBodyFeatheredLeanEnabled value="false" />
|
||||
<UseWeaponAnimsForGrip value="true" />
|
||||
<UseLeftHandIk value="false" />
|
||||
<IdleTransitionBlendOutTime value="0.500000" />
|
||||
<IdleTransitions>
|
||||
<Item>MOVE_ACTION@P_M_ONE@UNARMED@TRANS@A</Item>
|
||||
</IdleTransitions>
|
||||
<UnholsterClipSetId>MOVE_ACTION@P_M_ONE@HOLSTER</UnholsterClipSetId>
|
||||
<UnholsterClipData>UNHOLSTER_UNARMED</UnholsterClipData>
|
||||
</Item>
|
||||
</ClipSets>
|
||||
</Item>
|
||||
</Item>
|
||||
<Item>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<ClipSets>
|
||||
<Item>
|
||||
<MovementClipSetId>move_stealth@p_m_one@unarmed@core</MovementClipSetId>
|
||||
<WeaponClipSetId>weapons@melee_stealth_1h@p_m_one</WeaponClipSetId>
|
||||
<WeaponClipFilterId>UpperbodyAndIk_filter</WeaponClipFilterId>
|
||||
<UpperBodyShadowExpressionEnabled value="true" />
|
||||
<UpperBodyFeatheredLeanEnabled value="false" />
|
||||
<UseWeaponAnimsForGrip value="false" />
|
||||
<UseLeftHandIk value="false" />
|
||||
<IdleTransitionBlendOutTime value="0.500000" />
|
||||
<IdleTransitions>
|
||||
<Item>move_stealth@p_m_one@unarmed@trans@a</Item>
|
||||
</IdleTransitions>
|
||||
<UnholsterClipSetId>MOVE_STEALTH@P_M_ONE@HOLSTER</UnholsterClipSetId>
|
||||
<UnholsterClipData>UNHOLSTER_UNARMED_STEALTH</UnholsterClipData>
|
||||
</Item>
|
||||
</ClipSets>
|
||||
</Item>
|
||||
</Item>
|
||||
</MovementModes>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name>TREVOR_ACTION</Name>
|
||||
<MovementModes>
|
||||
<Item>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<ClipSets>
|
||||
<Item>
|
||||
<MovementClipSetId>move_action@p_m_two@unarmed@core</MovementClipSetId>
|
||||
<WeaponClipSetId />
|
||||
<WeaponClipFilterId />
|
||||
<UpperBodyShadowExpressionEnabled value="false" />
|
||||
<UpperBodyFeatheredLeanEnabled value="false" />
|
||||
<UseWeaponAnimsForGrip value="true" />
|
||||
<UseLeftHandIk value="false" />
|
||||
<IdleTransitionBlendOutTime value="0.500000" />
|
||||
<IdleTransitions>
|
||||
<Item>MOVE_ACTION@P_M_TWO@UNARMED@TRANS@A</Item>
|
||||
</IdleTransitions>
|
||||
<UnholsterClipSetId>MOVE_ACTION@P_M_TWO@HOLSTER</UnholsterClipSetId>
|
||||
<UnholsterClipData>UNHOLSTER_UNARMED</UnholsterClipData>
|
||||
</Item>
|
||||
</ClipSets>
|
||||
</Item>
|
||||
</Item>
|
||||
<Item>
|
||||
<Item>
|
||||
<Weapons>
|
||||
<Item>WEAPON_HOSE</Item>
|
||||
</Weapons>
|
||||
<ClipSets>
|
||||
<Item>
|
||||
<MovementClipSetId>move_stealth@p_m_two@unarmed@core</MovementClipSetId>
|
||||
<WeaponClipSetId>weapons@melee_stealth_1h@p_m_two</WeaponClipSetId>
|
||||
<WeaponClipFilterId>UpperbodyAndIk_filter</WeaponClipFilterId>
|
||||
<UpperBodyShadowExpressionEnabled value="true" />
|
||||
<UpperBodyFeatheredLeanEnabled value="false" />
|
||||
<UseWeaponAnimsForGrip value="false" />
|
||||
<UseLeftHandIk value="false" />
|
||||
<IdleTransitionBlendOutTime value="0.500000" />
|
||||
<IdleTransitions>
|
||||
<Item>move_stealth@p_m_two@unarmed@trans@a</Item>
|
||||
</IdleTransitions>
|
||||
<UnholsterClipSetId>MOVE_STEALTH@P_M_TWO@HOLSTER</UnholsterClipSetId>
|
||||
<UnholsterClipData>UNHOLSTER_UNARMED_STEALTH</UnholsterClipData>
|
||||
</Item>
|
||||
</ClipSets>
|
||||
</Item>
|
||||
</Item>
|
||||
</MovementModes>
|
||||
</Item>
|
||||
</MovementModes>
|
||||
</CPedModelInfo__PersonalityDataList>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<CWeaponModelInfo__InitDataList>
|
||||
<InitDatas>
|
||||
|
||||
<!-- Battle Axe -->
|
||||
<Item>
|
||||
<modelName>w_am_hose</modelName>
|
||||
<txdName>w_am_hose</txdName>
|
||||
<ptfxAssetName>NULL</ptfxAssetName>
|
||||
<lodDist value="500"/>
|
||||
</Item>
|
||||
</InitDatas>
|
||||
</CWeaponModelInfo__InitDataList>
|
||||
@@ -1,236 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<CWeaponInfoBlob>
|
||||
<SlotNavigateOrder>
|
||||
<Item>
|
||||
<WeaponSlots>
|
||||
<Item>
|
||||
<OrderNumber value="104" />
|
||||
<Entry>SLOT_HOSE</Entry>
|
||||
</Item>
|
||||
|
||||
</WeaponSlots>
|
||||
</Item>
|
||||
<Item>
|
||||
<WeaponSlots>
|
||||
|
||||
<Item>
|
||||
<OrderNumber value="125" />
|
||||
<Entry>SLOT_HOSE</Entry>
|
||||
</Item>
|
||||
|
||||
</WeaponSlots>
|
||||
</Item>
|
||||
</SlotNavigateOrder>
|
||||
<SlotBestOrder>
|
||||
<WeaponSlots>
|
||||
|
||||
<Item>
|
||||
<OrderNumber value="172" />
|
||||
<Entry>SLOT_HOSE</Entry>
|
||||
</Item>
|
||||
|
||||
</WeaponSlots>
|
||||
</SlotBestOrder>
|
||||
|
||||
<Infos>
|
||||
<Item>
|
||||
<Infos />
|
||||
</Item>
|
||||
<Item>
|
||||
<Infos>
|
||||
<Item type="CWeaponInfo">
|
||||
<Name>WEAPON_HOSE</Name>
|
||||
<Model>w_am_hose</Model>
|
||||
<Audio />
|
||||
<Slot>SLOT_HOSE</Slot>
|
||||
<DamageType>FIRE_EXTINGUISHER</DamageType>
|
||||
<Explosion>
|
||||
<Default>DONTCARE</Default>
|
||||
<HitCar>DONTCARE</HitCar>
|
||||
<HitTruck>DONTCARE</HitTruck>
|
||||
<HitBike>DONTCARE</HitBike>
|
||||
<HitBoat>DONTCARE</HitBoat>
|
||||
<HitPlane>DONTCARE</HitPlane>
|
||||
</Explosion>
|
||||
<FireType>VOLUMETRIC_PARTICLE</FireType>
|
||||
<WheelSlot>WHEEL_THROWABLE_SPECIAL</WheelSlot>
|
||||
<Group>GROUP_FIREEXTINGUISHER</Group>
|
||||
<AmmoInfo ref="AMMO_FIREEXTINGUISHER" />
|
||||
<AimingInfo ref="FIRE_EXT_STRAFE" />
|
||||
<ClipSize value="2000" />
|
||||
<AccuracySpread value="1.000000" />
|
||||
<AccurateModeAccuracyModifier value="0.500000" />
|
||||
<RunAndGunAccuracyModifier value="2.000000" />
|
||||
<RunAndGunAccuracyMaxModifier value="1.000000" />
|
||||
<RecoilAccuracyMax value="1.000000" />
|
||||
<RecoilErrorTime value="0.000000" />
|
||||
<RecoilRecoveryRate value="1.000000" />
|
||||
<RecoilAccuracyToAllowHeadShotAI value="1000.000000" />
|
||||
<MinHeadShotDistanceAI value="1000.000000" />
|
||||
<MaxHeadShotDistanceAI value="1000.000000" />
|
||||
<HeadShotDamageModifierAI value="1000.000000" />
|
||||
<RecoilAccuracyToAllowHeadShotPlayer value="0.175000" />
|
||||
<MinHeadShotDistancePlayer value="5.000000" />
|
||||
<MaxHeadShotDistancePlayer value="40.000000" />
|
||||
<HeadShotDamageModifierPlayer value="18.000000" />
|
||||
<Damage value="0.000000" />
|
||||
<DamageTime value="0.000000" />
|
||||
<DamageTimeInVehicle value="0.000000" />
|
||||
<DamageTimeInVehicleHeadShot value="0.000000" />
|
||||
<HitLimbsDamageModifier value="0.500000" />
|
||||
<NetworkHitLimbsDamageModifier value="0.800000" />
|
||||
<LightlyArmouredDamageModifier value="0.750000" />
|
||||
<Force value="0.000000" />
|
||||
<ForceHitPed value="0.000000" />
|
||||
<ForceHitVehicle value="0.000000" />
|
||||
<ForceHitFlyingHeli value="0.000000" />
|
||||
<OverrideForces />
|
||||
<ForceMaxStrengthMult value="1.000000" />
|
||||
<ForceFalloffRangeStart value="0.000000" />
|
||||
<ForceFalloffRangeEnd value="50.000000" />
|
||||
<ForceFalloffMin value="1.000000" />
|
||||
<ProjectileForce value="0.000000" />
|
||||
<FragImpulse value="250.000000" />
|
||||
<Penetration value="0.010000" />
|
||||
<VerticalLaunchAdjustment value="0.000000" />
|
||||
<DropForwardVelocity value="0.000000" />
|
||||
<Speed value="2000.000000" />
|
||||
<BulletsInBatch value="1" />
|
||||
<BatchSpread value="0.000000" />
|
||||
<ReloadTimeMP value="-1.000000" />
|
||||
<ReloadTimeSP value="-1.000000" />
|
||||
<VehicleReloadTime value="-1.000000" />
|
||||
<AnimReloadRate value="1.000000" />
|
||||
<BulletsPerAnimLoop value="1" />
|
||||
<TimeBetweenShots value="0.000000" />
|
||||
<TimeLeftBetweenShotsWhereShouldFireIsCached value="-1.000000" />
|
||||
<SpinUpTime value="0.000000" />
|
||||
<SpinTime value="0.000000" />
|
||||
<SpinDownTime value="0.000000" />
|
||||
<AlternateWaitTime value="-1.000000" />
|
||||
<BulletBendingNearRadius value="0.000000" />
|
||||
<BulletBendingFarRadius value="0.750000" />
|
||||
<BulletBendingZoomedRadius value="0.375000" />
|
||||
<FirstPersonBulletBendingNearRadius value="0.000000" />
|
||||
<FirstPersonBulletBendingFarRadius value="0.750000" />
|
||||
<FirstPersonBulletBendingZoomedRadius value="0.375000" />
|
||||
<Fx>
|
||||
<EffectGroup>WEAPON_EFFECT_GROUP_PISTOL_SMALL</EffectGroup>
|
||||
<FlashFx>weap_extinguisher</FlashFx>
|
||||
<FlashFxAlt />
|
||||
<MuzzleSmokeFx />
|
||||
<MuzzleSmokeFxMinLevel value="0.000000" />
|
||||
<MuzzleSmokeFxIncPerShot value="0.000000" />
|
||||
<MuzzleSmokeFxDecPerSec value="0.000000" />
|
||||
<ShellFx />
|
||||
<TracerFx />
|
||||
<PedDamageHash>BulletSmall</PedDamageHash>
|
||||
<TracerFxChanceSP value="0.000000" />
|
||||
<TracerFxChanceMP value="0.000000" />
|
||||
<FlashFxChanceSP value="0.000000" />
|
||||
<FlashFxChanceMP value="0.000000" />
|
||||
<FlashFxAltChance value="0.000000" />
|
||||
<FlashFxScale value="1.000000" />
|
||||
<FlashFxLightEnabled value="false" />
|
||||
<FlashFxLightCastsShadows value="true" />
|
||||
<FlashFxLightOffsetDist value="0.000000" />
|
||||
<FlashFxLightRGBAMin x="0.000000" y="0.000000" z="0.000000" />
|
||||
<FlashFxLightRGBAMax x="0.000000" y="0.000000" z="0.000000" />
|
||||
<FlashFxLightIntensityMinMax x="0.000000" y="0.000000" />
|
||||
<FlashFxLightRangeMinMax x="0.000000" y="0.000000" />
|
||||
<FlashFxLightFalloffMinMax x="0.000000" y="0.000000" />
|
||||
<GroundDisturbFxEnabled value="false" />
|
||||
<GroundDisturbFxDist value="5.000000" />
|
||||
<GroundDisturbFxNameDefault />
|
||||
<GroundDisturbFxNameSand />
|
||||
<GroundDisturbFxNameDirt />
|
||||
<GroundDisturbFxNameWater />
|
||||
<GroundDisturbFxNameFoliage />
|
||||
</Fx>
|
||||
<InitialRumbleDuration value="0" />
|
||||
<InitialRumbleIntensity value="0.000000" />
|
||||
<InitialRumbleIntensityTrigger value="0.300000" />
|
||||
<RumbleDuration value="110" />
|
||||
<RumbleIntensity value="0.020000" />
|
||||
<RumbleIntensityTrigger value="0.100000" />
|
||||
<RumbleDamageIntensity value="1.000000" />
|
||||
<NetworkPlayerDamageModifier value="1.000000" />
|
||||
<NetworkPedDamageModifier value="1.000000" />
|
||||
<NetworkHeadShotPlayerDamageModifier value="1.000000" />
|
||||
<LockOnRange value="45.000000" />
|
||||
<WeaponRange value="50.000000" />
|
||||
<BulletDirectionOffsetInDegrees value="0.000000" />
|
||||
<AiSoundRange value="-1.000000" />
|
||||
<AiPotentialBlastEventRange value="-1.000000" />
|
||||
<DamageFallOffRangeMin value="50.000000" />
|
||||
<DamageFallOffRangeMax value="50.000000" />
|
||||
<DamageFallOffModifier value="0.300000" />
|
||||
<VehicleWeaponHash />
|
||||
<DefaultCameraHash>HIP_AIM_CAMERA</DefaultCameraHash>
|
||||
<CoverCameraHash>HIP_AIM_IN_COVER_CAMERA</CoverCameraHash>
|
||||
<CoverReadyToFireCameraHash />
|
||||
<RunAndGunCameraHash>HIP_RUN_AND_GUN_CAMERA</RunAndGunCameraHash>
|
||||
<CinematicShootingCameraHash />
|
||||
<AlternativeOrScopedCameraHash />
|
||||
<RunAndGunAlternativeOrScopedCameraHash />
|
||||
<CinematicShootingAlternativeOrScopedCameraHash />
|
||||
<CameraFov value="45.000000" />
|
||||
<ZoomFactorForAccurateMode value="1.000000" />
|
||||
<RecoilShakeHash />
|
||||
<RecoilShakeHashFirstPerson />
|
||||
<AccuracyOffsetShakeHash />
|
||||
<MinTimeBetweenRecoilShakes value="150" />
|
||||
<RecoilShakeAmplitude value="1.000000" />
|
||||
<ExplosionShakeAmplitude value="-1.000000" />
|
||||
<ReticuleHudPosition x="0.000000" y="0.000000" />
|
||||
<AimOffsetMin x="0.000000" y="0.000000" z="0.000000" />
|
||||
<AimProbeLengthMin value="0.000000" />
|
||||
<AimOffsetMax x="0.000000" y="0.000000" z="0.000000" />
|
||||
<AimProbeLengthMax value="0.000000" />
|
||||
<TorsoAimOffset x="0.150000" y="0.550000" />
|
||||
<TorsoCrouchedAimOffset x="0.200000" y="0.050000" />
|
||||
<LeftHandIkOffset x="0.025000" y="0.110000" z="0.075000" />
|
||||
<ReticuleMinSizeStanding value="0.650000" />
|
||||
<ReticuleMinSizeCrouched value="0.550000" />
|
||||
<ReticuleScale value="0.300000" />
|
||||
<ReticuleStyleHash>WEAPON_PISTOL</ReticuleStyleHash>
|
||||
<FirstPersonReticuleStyleHash />
|
||||
<PickupHash />
|
||||
<MPPickupHash />
|
||||
<HumanNameHash>WT_HOSE</HumanNameHash>
|
||||
<MovementModeConditionalIdle />
|
||||
<StatName>EXTINGUISHER</StatName>
|
||||
<KnockdownCount value="-1" />
|
||||
<KillshotImpulseScale value="1.000000" />
|
||||
<NmShotTuningSet>Normal</NmShotTuningSet>
|
||||
<AttachPoints />
|
||||
<GunFeedBone />
|
||||
<TargetSequenceGroup />
|
||||
<WeaponFlags>CarriedInHand Automatic CanFreeAim AnimCrouchFire UsableOnFoot UsableClimbing AllowEarlyExitFromFireAnimAfterBulletFired DoesRevivableDamage CanBeFiredLikeGun NonViolent SuppressGunshotEvent</WeaponFlags>
|
||||
<TintSpecValues ref="TINT_DEFAULT" />
|
||||
<FiringPatternAliases ref="NULL" />
|
||||
<ReloadUpperBodyFixupExpressionData ref="default" />
|
||||
<AmmoDiminishingRate value="0" />
|
||||
<AimingBreathingAdditiveWeight value="1.000000" />
|
||||
<FiringBreathingAdditiveWeight value="1.000000" />
|
||||
<StealthAimingBreathingAdditiveWeight value="0.000000" />
|
||||
<StealthFiringBreathingAdditiveWeight value="0.000000" />
|
||||
<AimingLeanAdditiveWeight value="1.000000" />
|
||||
<FiringLeanAdditiveWeight value="1.000000" />
|
||||
<StealthAimingLeanAdditiveWeight value="0.000000" />
|
||||
<StealthFiringLeanAdditiveWeight value="0.000000" />
|
||||
<ExpandPedCapsuleRadius value="0.000000" />
|
||||
<AudioCollisionHash />
|
||||
<HudDamage value="0" />
|
||||
<HudSpeed value="100" />
|
||||
<HudCapacity value="100" />
|
||||
<HudAccuracy value="10" />
|
||||
<HudRange value="35" />
|
||||
</Item>
|
||||
</Infos>
|
||||
</Item>
|
||||
</Infos>
|
||||
|
||||
<Name>Hose</Name>
|
||||
</CWeaponInfoBlob>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user