added new scripts and eup
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
local isAttached = false
|
||||
local isSittingOnObject = false
|
||||
local pushableObject = nil
|
||||
|
||||
-- Detaches the object from the player, stops the animation, and resets the variables
|
||||
local function ReleasePushableObject()
|
||||
DetachEntity(pushableObject, false, true)
|
||||
SetEntityCollision(pushableObject, true, true)
|
||||
ClearPedTasksImmediately(PlayerPedId())
|
||||
|
||||
-- Reset variables
|
||||
isAttached = false
|
||||
isSittingOnObject = false
|
||||
pushableObject = nil
|
||||
end
|
||||
|
||||
-- Runs a thread while player is attached to the pushable object, disables some keys and listens for E keypress to release the object
|
||||
-- Also checks that player is still in the animation, if not then puts them back into the animation
|
||||
local function PushableObjectAttachedThread(animDict, anim)
|
||||
CreateThread(function()
|
||||
while isAttached do
|
||||
-- Disables attacking controls
|
||||
DisableControlAction(0, 24, true) -- disable attack
|
||||
DisableControlAction(0, 25, true) -- disable aim
|
||||
DisableControlAction(0, 47, true) -- disable weapon
|
||||
DisableControlAction(0, 58, true) -- disable weapon
|
||||
DisableControlAction(0, 263, true) -- disable melee
|
||||
DisableControlAction(0, 264, true) -- disable melee
|
||||
DisableControlAction(0, 257, true) -- disable melee
|
||||
DisableControlAction(0, 140, true) -- disable melee
|
||||
DisableControlAction(0, 141, true) -- disable melee
|
||||
DisableControlAction(0, 142, true) -- disable melee
|
||||
DisableControlAction(0, 143, true) -- disable melee
|
||||
|
||||
-- Check to see if animation is still playing, if not then put the player back in the animation
|
||||
local playerPed = PlayerPedId()
|
||||
if not IsEntityPlayingAnim(playerPed, animDict, anim, 3) and not IsPedRagdoll(playerPed) then
|
||||
local animFlag = isSittingOnObject and 5 or 51
|
||||
ClearPedTasks(playerPed)
|
||||
LoadAnimDict(animDict)
|
||||
TaskPlayAnim(playerPed, animDict, anim, 3.0, 3.0, -1, animFlag, 0, 0, 0, 0)
|
||||
end
|
||||
|
||||
-- Pressed E
|
||||
if IsControlJustPressed(0, 38) then
|
||||
ReleasePushableObject()
|
||||
end
|
||||
|
||||
Wait(5) -- Needs to be a small number so that player doesnt need to spam press E to get it to take
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- Attaches the object to the player and plays a pushing animation
|
||||
local function PushObject(data)
|
||||
local PlayerPed = PlayerPedId()
|
||||
|
||||
pushableObject = data.entity
|
||||
|
||||
if pushableObject then
|
||||
local netId = NetworkGetNetworkIdFromEntity(pushableObject)
|
||||
RequestNetworkControlOfObject(netId, pushableObject)
|
||||
|
||||
LoadAnimDict(data.animationPushOptions.animationDict)
|
||||
TaskPlayAnim(PlayerPed, data.animationPushOptions.animationDict, data.animationPushOptions.animationName, 8.0, 8.0, -1, 51, 0, 0, 0, 0)
|
||||
|
||||
local offset = data.animationPushOptions.offset
|
||||
local rotation = data.animationPushOptions.rotation
|
||||
|
||||
SetTimeout(150, function()
|
||||
isAttached = true
|
||||
SetEntityCollision(pushableObject, false, false)
|
||||
AttachEntityToEntity(
|
||||
pushableObject,
|
||||
PlayerPed,
|
||||
GetPedBoneIndex(PlayerPed, 28422),
|
||||
offset.x,
|
||||
offset.y,
|
||||
offset.z,
|
||||
rotation.x,
|
||||
rotation.y,
|
||||
rotation.z,
|
||||
false, -- p9
|
||||
false, -- usesoftpinner
|
||||
true, -- collision
|
||||
false, -- isPed
|
||||
2, -- rotationorder
|
||||
true -- fixrot
|
||||
)
|
||||
|
||||
PushableObjectAttachedThread(data.animationPushOptions.animationDict, data.animationPushOptions.animationName)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
-- Attaches player to object and plays the sitting animation
|
||||
local function SitOnObject(data)
|
||||
local PlayerPed = PlayerPedId()
|
||||
|
||||
pushableObject = data.entity
|
||||
|
||||
if pushableObject ~= nil then
|
||||
LoadAnimDict(data.animationSitOptions.animationDict)
|
||||
TaskPlayAnim(PlayerPed, data.animationSitOptions.animationDict, data.animationSitOptions.animationName, 8.0, 8.0, -1, 5, 0, 0, 0, 0)
|
||||
|
||||
local offset = data.animationSitOptions.offset
|
||||
local rotation = data.animationSitOptions.rotation
|
||||
|
||||
SetTimeout(150, function()
|
||||
isAttached = true
|
||||
isSittingOnObject = true
|
||||
AttachEntityToEntity(
|
||||
PlayerPed,
|
||||
pushableObject,
|
||||
GetPedBoneIndex(PlayerPed, 11816),
|
||||
offset.x,
|
||||
offset.y,
|
||||
offset.z,
|
||||
rotation.x,
|
||||
rotation.y,
|
||||
rotation.z,
|
||||
false, -- p9
|
||||
false, -- usesoftpinner
|
||||
false, -- collision -- if this is true, then the peds body will collide with things as you push it around
|
||||
true, -- isPed
|
||||
2, -- rotationorder
|
||||
true -- fixrot
|
||||
)
|
||||
|
||||
PushableObjectAttachedThread(data.animationSitOptions.animationDict, data.animationSitOptions.animationName)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
AddEventHandler("onResourceStop", function(resource)
|
||||
if resource == GetCurrentResourceName() then
|
||||
if pushableObject then
|
||||
ReleasePushableObject()
|
||||
DeleteObject(pushableObject)
|
||||
ClearPedTasksImmediately(PlayerPedId())
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("wp-placeables:client:pushObject", function(data)
|
||||
PushObject(data)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("wp-placeables:client:sitOnObject", function(data)
|
||||
SitOnObject(data)
|
||||
end)
|
||||
|
||||
local function IsPlayerSittingOnPlaceableProp()
|
||||
return isSittingOnObject
|
||||
end
|
||||
exports("IsPlayerSittingOnPlaceableProp", IsPlayerSittingOnPlaceableProp)
|
||||
Reference in New Issue
Block a user