restructured lib portion to match modules also edited community bridges onplayerunload fire to accept the passed src as it was otherwise nil
116 lines
3.7 KiB
Lua
116 lines
3.7 KiB
Lua
Placeable = Placeable or {}
|
|
Utility = Utility or Require("lib/utility/client/utility.lua")
|
|
|
|
local activePlacementProp = nil
|
|
lib.locale()
|
|
|
|
-- Object placer --
|
|
local placementText = {
|
|
locale('place_object_place'),
|
|
locale('place_object_cancel'),
|
|
locale('place_object_scroll_up'),
|
|
locale('place_object_scroll_down')
|
|
}
|
|
|
|
local function finishPlacing()
|
|
Bridge.Notify.HideHelpText()
|
|
if activePlacementProp == nil then return end
|
|
DeleteObject(activePlacementProp)
|
|
activePlacementProp = nil
|
|
end
|
|
|
|
--[[
|
|
|
|
RegisterCommand('testplacement', function()
|
|
Placeable.PlaceObject("prop_cs_cardbox_01", 10, true, nil, 0.0)
|
|
end, false)
|
|
|
|
--]]
|
|
|
|
Placeable.PlaceObject = function(object, distance, snapToGround, allowedMats, offset)
|
|
distance = tonumber(distance or 10.0 )
|
|
if activePlacementProp then return end
|
|
|
|
if not object then Prints.Error('no_prop_defined') end
|
|
|
|
local propObject = type(object) == 'string' and joaat(object) or object
|
|
local heading = 0.0
|
|
local checkDist = distance or 10.0
|
|
|
|
Utility.LoadModel(propObject)
|
|
|
|
activePlacementProp = CreateObject(propObject, 1.0, 1.0, 1.0, false, true, true)
|
|
SetModelAsNoLongerNeeded(propObject)
|
|
SetEntityAlpha(activePlacementProp, 150, false)
|
|
SetEntityCollision(activePlacementProp, false, false)
|
|
SetEntityInvincible(activePlacementProp, true)
|
|
FreezeEntityPosition(activePlacementProp, true)
|
|
|
|
Bridge.Notify.ShowHelpText(type(placementText) == 'table' and table.concat(placementText))
|
|
|
|
local outLine = false
|
|
|
|
while activePlacementProp do
|
|
--local hit, _, coords, _, materialHash = lib.raycast.fromCamera(1, 4)
|
|
--local hit, _, coords, _, materialHash = lib.raycast.fromCamera(1, 4, nil)
|
|
local hit, _, coords, _, materialHash = lib.raycast.fromCamera(1, 4)
|
|
if hit then
|
|
if offset then
|
|
coords += offset
|
|
end
|
|
|
|
SetEntityCoords(activePlacementProp, coords.x, coords.y, coords.z, false, false, false, false)
|
|
local distCheck = #(GetEntityCoords(cache.ped) - coords)
|
|
SetEntityHeading(activePlacementProp, heading)
|
|
|
|
if snapToGround then
|
|
PlaceObjectOnGroundProperly(activePlacementProp)
|
|
end
|
|
|
|
if outLine then
|
|
outLine = false
|
|
SetEntityDrawOutline(activePlacementProp, false)
|
|
end
|
|
|
|
if (allowedMats and not allowedMats[materialHash]) or distCheck >= checkDist then
|
|
if not outLine then
|
|
outLine = true
|
|
SetEntityDrawOutline(activePlacementProp, true)
|
|
end
|
|
end
|
|
|
|
if IsControlJustReleased(0, 38) then
|
|
if not outLine and (not allowedMats or allowedMats[materialHash]) and distCheck < checkDist then
|
|
finishPlacing()
|
|
return coords, heading
|
|
end
|
|
end
|
|
|
|
if IsControlJustReleased(0, 73) then
|
|
finishPlacing()
|
|
|
|
return nil, nil
|
|
end
|
|
|
|
if IsControlJustReleased(0, 14) then
|
|
heading = heading + 5
|
|
if heading > 360 then heading = 0.0 end
|
|
end
|
|
|
|
if IsControlJustReleased(0, 15) then
|
|
heading = heading - 5
|
|
if heading < 0 then
|
|
heading = 360.0
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
Placeable.StopPlacing = function()
|
|
if not activePlacementProp then return end
|
|
finishPlacing()
|
|
end
|
|
|
|
return Placeable
|
|
-- This is derrived and slightly altered from its creator and licensed under GPL-3.0 license Author:Zoo, the original is located here https://github.com/Renewed-Scripts/Renewed-Lib/tree/main |