mirror of
https://github.com/jimathy/jim_bridge.git
synced 2026-08-17 22:16:03 +01:00
(Beta) Fixes for multiframework support
This commit is contained in:
@@ -1,90 +1,90 @@
|
||||
local Props = {}
|
||||
|
||||
--- Creates a prop (object) in the game world at specified coordinates.
|
||||
---
|
||||
--- This function loads the model, creates the object, sets its heading, and freezes it if specified.
|
||||
---
|
||||
---@param data table A table containing prop data.
|
||||
--- - **prop** `string`: The model name or hash of the prop to create.
|
||||
--- - **coords** `vector4`: The coordinates where the prop will be placed. Should include x, y, z, and w (heading).
|
||||
---@param freeze boolean (optional) Whether to freeze the prop in place. Defaults to `false`.
|
||||
---@param synced boolean (optional) Whether the prop should be synced across clients. Defaults to `false`.
|
||||
---
|
||||
---@return number entityID The handle of the created prop object.
|
||||
---
|
||||
---@usage
|
||||
--- ```lua
|
||||
--- local propData = {
|
||||
--- prop = 'prop_chair_01a',
|
||||
--- coords = vector4(123.4, 567.8, 90.1, 180.0)
|
||||
--- }
|
||||
--- local prop = makeProp(propData, true, false)
|
||||
--- ```
|
||||
function makeProp(data, freeze, synced)
|
||||
loadModel(data.prop)
|
||||
local prop = CreateObject(data.prop, data.coords.x, data.coords.y, data.coords.z-1.03, synced and synced or false, synced and synced or false, false)
|
||||
SetEntityHeading(prop, data.coords.w + 180.0)
|
||||
FreezeEntityPosition(prop, freeze or false)
|
||||
|
||||
debugPrint("^6Bridge^7: ^1Prop ^2Created^7: '^6"..prop.."^7' | ^2Hash^7: ^7'^6"..data.prop.."^7' | ^2Coord^7: "..formatCoord(data.coords))
|
||||
SetModelAsNoLongerNeeded(data.prop)
|
||||
Props[#Props + 1] = prop
|
||||
return prop
|
||||
end
|
||||
|
||||
--- Creates a prop that appears when the player is within a certain distance.
|
||||
---
|
||||
--- This function sets up a proximity area, and when the player enters it, the prop is created.
|
||||
--- When the player exits the area, the prop is destroyed.
|
||||
---
|
||||
---@param data table A table containing prop data.
|
||||
--- - **prop** `string`: The model name or hash of the prop to create.
|
||||
--- - **coords** `vector4`: The coordinates where the prop will be placed. Should include x, y, z, and w (heading).
|
||||
---@param freeze boolean (optional) Whether to freeze the prop in place. Defaults to `false`.
|
||||
---@param synced boolean (optional) Whether the prop should be synced across clients. Defaults to `false`.
|
||||
---
|
||||
---@usage
|
||||
--- ```lua
|
||||
--- local propData = {
|
||||
--- prop = 'prop_chair_01a',
|
||||
--- coords = vector4(123.4, 567.8, 90.1, 180.0)
|
||||
--- }
|
||||
--- makeDistProp(propData, true, false)
|
||||
--- ```
|
||||
function makeDistProp(data, freeze, synced)
|
||||
local prop = nil
|
||||
createCirclePoly({
|
||||
name = keyGen()..keyGen(),
|
||||
coords = vec3(data.coords.x, data.coords.y, data.coords.z - 1.03),
|
||||
radius = 50.0,
|
||||
onEnter = function()
|
||||
prop = makeProp(data, freeze, synced)
|
||||
end,
|
||||
onExit = function()
|
||||
destroyProp(prop)
|
||||
end,
|
||||
debug = debugMode,
|
||||
})
|
||||
end
|
||||
|
||||
--- Destroys a prop, detaching it if attached to the player beforehand.
|
||||
---
|
||||
---@param entity number The handle of the prop entity to destroy.
|
||||
---
|
||||
---@usage
|
||||
--- ```lua
|
||||
--- destroyProp(prop)
|
||||
--- ```
|
||||
function destroyProp(entity)
|
||||
if entity then
|
||||
debugPrint("^6Bridge^7: ^2Destroying Prop^7: '^6"..entity.."^7'")
|
||||
if IsEntityAttachedToEntity(entity, PlayerPedId()) then
|
||||
SetEntityAsMissionEntity(entity)
|
||||
DetachEntity(entity, true, true)
|
||||
end
|
||||
DeleteObject(entity)
|
||||
end
|
||||
end
|
||||
|
||||
--- Cleans up all created props when the resource stops.
|
||||
onResourceStop(function() for i = 1, #Props do destroyProp(Props[i]) end end, true)
|
||||
local Props = {}
|
||||
|
||||
--- Creates a prop (object) in the game world at specified coordinates.
|
||||
---
|
||||
--- This function loads the model, creates the object, sets its heading, and freezes it if specified.
|
||||
---
|
||||
---@param data table A table containing prop data.
|
||||
--- - **prop** `string`: The model name or hash of the prop to create.
|
||||
--- - **coords** `vector4`: The coordinates where the prop will be placed. Should include x, y, z, and w (heading).
|
||||
---@param freeze boolean (optional) Whether to freeze the prop in place. Defaults to `false`.
|
||||
---@param synced boolean (optional) Whether the prop should be synced across clients. Defaults to `false`.
|
||||
---
|
||||
---@return number entityID The handle of the created prop object.
|
||||
---
|
||||
---@usage
|
||||
--- ```lua
|
||||
--- local propData = {
|
||||
--- prop = 'prop_chair_01a',
|
||||
--- coords = vector4(123.4, 567.8, 90.1, 180.0)
|
||||
--- }
|
||||
--- local prop = makeProp(propData, true, false)
|
||||
--- ```
|
||||
function makeProp(data, freeze, synced)
|
||||
loadModel(data.prop)
|
||||
local prop = CreateObject(data.prop, data.coords.x, data.coords.y, data.coords.z-1.03, synced and synced or false, synced and synced or false, false)
|
||||
SetEntityHeading(prop, data.coords.w + 180.0)
|
||||
FreezeEntityPosition(prop, freeze or false)
|
||||
|
||||
debugPrint("^6Bridge^7: ^1Prop ^2Created^7: '^6"..prop.."^7' | ^2Hash^7: ^7'^6"..data.prop.."^7' | ^2Coord^7: "..formatCoord(data.coords))
|
||||
SetModelAsNoLongerNeeded(data.prop)
|
||||
Props[#Props + 1] = prop
|
||||
return prop
|
||||
end
|
||||
|
||||
--- Creates a prop that appears when the player is within a certain distance.
|
||||
---
|
||||
--- This function sets up a proximity area, and when the player enters it, the prop is created.
|
||||
--- When the player exits the area, the prop is destroyed.
|
||||
---
|
||||
---@param data table A table containing prop data.
|
||||
--- - **prop** `string`: The model name or hash of the prop to create.
|
||||
--- - **coords** `vector4`: The coordinates where the prop will be placed. Should include x, y, z, and w (heading).
|
||||
---@param freeze boolean (optional) Whether to freeze the prop in place. Defaults to `false`.
|
||||
---@param synced boolean (optional) Whether the prop should be synced across clients. Defaults to `false`.
|
||||
---
|
||||
---@usage
|
||||
--- ```lua
|
||||
--- local propData = {
|
||||
--- prop = 'prop_chair_01a',
|
||||
--- coords = vector4(123.4, 567.8, 90.1, 180.0)
|
||||
--- }
|
||||
--- makeDistProp(propData, true, false)
|
||||
--- ```
|
||||
function makeDistProp(data, freeze, synced)
|
||||
local prop = nil
|
||||
createCirclePoly({
|
||||
name = keyGen()..keyGen(),
|
||||
coords = vec3(data.coords.x, data.coords.y, data.coords.z - 1.03),
|
||||
radius = 50.0,
|
||||
onEnter = function()
|
||||
prop = makeProp(data, freeze, synced)
|
||||
end,
|
||||
onExit = function()
|
||||
destroyProp(prop)
|
||||
end,
|
||||
debug = debugMode,
|
||||
})
|
||||
end
|
||||
|
||||
--- Destroys a prop, detaching it if attached to the player beforehand.
|
||||
---
|
||||
---@param entity number The handle of the prop entity to destroy.
|
||||
---
|
||||
---@usage
|
||||
--- ```lua
|
||||
--- destroyProp(prop)
|
||||
--- ```
|
||||
function destroyProp(entity)
|
||||
if entity then
|
||||
debugPrint("^6Bridge^7: ^2Destroying Prop^7: '^6"..entity.."^7'")
|
||||
if IsEntityAttachedToEntity(entity, PlayerPedId()) then
|
||||
SetEntityAsMissionEntity(entity)
|
||||
DetachEntity(entity, true, true)
|
||||
end
|
||||
DeleteObject(entity)
|
||||
end
|
||||
end
|
||||
|
||||
--- Cleans up all created props when the resource stops.
|
||||
onResourceStop(function() for i = 1, #Props do destroyProp(Props[i]) end end, true)
|
||||
|
||||
Reference in New Issue
Block a user