forked from Simnation/Main
ed
This commit is contained in:
parent
d7ad6fb4bd
commit
db8bf32d69
5 changed files with 378 additions and 0 deletions
Binary file not shown.
12
resources/[tools]/snipe-sitting/README.md
Normal file
12
resources/[tools]/snipe-sitting/README.md
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- ox_lib
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
- Discord: https://discord.gg/AeCVP2F8h7
|
||||||
|
- Website : https://snipe.tebex.io
|
||||||
|
|
||||||
|
## Showcase
|
||||||
|
|
||||||
|
https://streamable.com/rvgh2n
|
248
resources/[tools]/snipe-sitting/client/cl_main.lua
Normal file
248
resources/[tools]/snipe-sitting/client/cl_main.lua
Normal file
|
@ -0,0 +1,248 @@
|
||||||
|
-----------------For support, scripts, and more----------------
|
||||||
|
--------------- https://discord.gg/AeCVP2F8h7 -------------
|
||||||
|
---------------------------------------------------------------
|
||||||
|
|
||||||
|
local ped = nil
|
||||||
|
local sitting = false
|
||||||
|
local oldCamView = nil
|
||||||
|
|
||||||
|
local txt = {
|
||||||
|
'-- Sit -- \n',
|
||||||
|
'[E] Sit \n',
|
||||||
|
'[X / Right Click] Cancel \n',
|
||||||
|
'[G] Next Animation \n',
|
||||||
|
'[H] Previous Animation \n',
|
||||||
|
'[Up/Down Arrows] Height \n',
|
||||||
|
'[SCROLL] Rotate \n',
|
||||||
|
}
|
||||||
|
|
||||||
|
local currentAnimIndex = 1
|
||||||
|
|
||||||
|
local function CycleAnimations(direction)
|
||||||
|
if direction == "next" then
|
||||||
|
currentAnimIndex = currentAnimIndex + 1
|
||||||
|
if currentAnimIndex > #Config.Anims then
|
||||||
|
currentAnimIndex = 1
|
||||||
|
end
|
||||||
|
elseif direction == "previous" then
|
||||||
|
currentAnimIndex = currentAnimIndex - 1
|
||||||
|
if currentAnimIndex < 1 then
|
||||||
|
currentAnimIndex = #Config.Anims
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function StartSittingThread()
|
||||||
|
sitting = true
|
||||||
|
lib.showTextUI("Press [Q] to cancel")
|
||||||
|
CreateThread(function ()
|
||||||
|
while sitting do
|
||||||
|
Wait(1)
|
||||||
|
if IsControlJustPressed(0, 44) then
|
||||||
|
sitting = false
|
||||||
|
lib.hideTextUI()
|
||||||
|
ClearPedTasksImmediately(PlayerPedId())
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function MakePedSitDown(coords, heading, animData)
|
||||||
|
stopPlacing()
|
||||||
|
TaskGoToCoordAnyMeans(PlayerPedId(), coords.x, coords.y, coords.z, 1.0, 0, 0, 786603, 0xbf800000)
|
||||||
|
local PlayerCoords = GetEntityCoords(PlayerPedId())
|
||||||
|
lib.showTextUI("Press [Right Click] to cancel")
|
||||||
|
while #(PlayerCoords - coords) > 1.5 do
|
||||||
|
Wait(1)
|
||||||
|
PlayerCoords = GetEntityCoords(PlayerPedId())
|
||||||
|
if IsControlJustPressed(0, 177) then
|
||||||
|
lib.hideTextUI()
|
||||||
|
ClearPedTasksImmediately(PlayerPedId())
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
lib.hideTextUI()
|
||||||
|
SetEntityCoords(PlayerPedId(), coords.x, coords.y, coords.z, 0.0, 0.0, 0.0, false)
|
||||||
|
TaskPlayAnimAdvanced(PlayerPedId(), animData.dict, animData.anim, coords.x, coords.y, coords.z, 0, 0, heading, 3.0, 3.0, -1, 2, 1.0, false, false)
|
||||||
|
StartSittingThread()
|
||||||
|
end
|
||||||
|
|
||||||
|
local function PlacingThread(animData)
|
||||||
|
if ped == nil then
|
||||||
|
local playerPed = PlayerPedId()
|
||||||
|
ped = ClonePed(playerPed, false, false, false)
|
||||||
|
FreezeEntityPosition(ped, true)
|
||||||
|
SetEntityAlpha(ped, 0)
|
||||||
|
|
||||||
|
local animToUse = Config.Anims[currentAnimIndex]
|
||||||
|
|
||||||
|
if not animToUse then
|
||||||
|
lib.notify({ type = "error", description = "No animation found." })
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
lib.requestAnimDict(animData.dict)
|
||||||
|
TaskPlayAnim(ped, animData.dict, animData.anim, 8.0, 8.0, -1, 1, 0, false, false, false)
|
||||||
|
SetEntityCollision(ped, false, false)
|
||||||
|
SetEntityAlpha(ped, 100)
|
||||||
|
if Config.SetToFirstPerson then
|
||||||
|
oldCamView = GetFollowPedCamViewMode()
|
||||||
|
SetFollowPedCamViewMode(3)
|
||||||
|
SetCamViewModeForContext(0, 4)
|
||||||
|
end
|
||||||
|
SetBlockingOfNonTemporaryEvents(ped, true)
|
||||||
|
heading = GetEntityHeading(playerPed) + 90.0
|
||||||
|
lib.showTextUI(table.concat(txt))
|
||||||
|
CreateThread(function ()
|
||||||
|
local currentCoordsZ = 0
|
||||||
|
while ped ~= nil do
|
||||||
|
Wait(1)
|
||||||
|
DisableControlAction(0, 22, true)
|
||||||
|
startPlacing()
|
||||||
|
if currentCoords then
|
||||||
|
SetEntityCoords(ped, currentCoords.x, currentCoords.y, currentCoords.z + currentCoordsZ)
|
||||||
|
SetEntityHeading(ped, heading)
|
||||||
|
end
|
||||||
|
if IsDisabledControlJustPressed(0, 14) then
|
||||||
|
heading = heading + 5
|
||||||
|
if heading > 360 then heading = 0.0 end
|
||||||
|
end
|
||||||
|
if IsDisabledControlPressed(0, 27) then
|
||||||
|
currentCoordsZ = currentCoordsZ + 0.01
|
||||||
|
end
|
||||||
|
if IsDisabledControlPressed(0, 173) then
|
||||||
|
currentCoordsZ = currentCoordsZ - 0.01
|
||||||
|
end
|
||||||
|
if IsDisabledControlJustPressed(0, 15) then
|
||||||
|
heading = heading - 5
|
||||||
|
if heading < 0 then heading = 360.0 end
|
||||||
|
end
|
||||||
|
if IsControlJustPressed(0, 38) then
|
||||||
|
if #(GetEntityCoords(PlayerPedId()) - currentCoords) < 5.0 then
|
||||||
|
MakePedSitDown(GetEntityCoords(ped), GetEntityHeading(ped), animToUse)
|
||||||
|
else
|
||||||
|
lib.notify({type = "error", description = "You are too far"})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsControlJustPressed(0, 47) then -- G
|
||||||
|
CycleAnimations("next")
|
||||||
|
animToUse = Config.Anims[currentAnimIndex]
|
||||||
|
|
||||||
|
if not animToUse then
|
||||||
|
lib.notify({ type = "error", description = "No animation found." })
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
lib.requestAnimDict(animToUse.dict)
|
||||||
|
TaskPlayAnim(ped, animToUse.dict, animToUse.anim, 8.0, 8.0, -1, 1, 0, false, false, false)
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsControlJustPressed(0, 74) then -- H
|
||||||
|
CycleAnimations("previous")
|
||||||
|
animToUse = Config.Anims[currentAnimIndex]
|
||||||
|
|
||||||
|
if not animToUse then
|
||||||
|
lib.notify({ type = "error", description = "No animation found." })
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
lib.requestAnimDict(animToUse.dict)
|
||||||
|
TaskPlayAnim(ped, animToUse.dict, animToUse.anim, 8.0, 8.0, -1, 1, 0, false, false, false)
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsControlJustPressed(0, 177) then
|
||||||
|
stopPlacing()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
else
|
||||||
|
DeleteObject(ped)
|
||||||
|
ped = nil
|
||||||
|
stopPlacing()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function GetForwardVector(rotation)
|
||||||
|
local rot = (math.pi / 180.0) * rotation
|
||||||
|
return vector3(-math.sin(rot.z) * math.abs(math.cos(rot.x)), math.cos(rot.z) * math.abs(math.cos(rot.x)),
|
||||||
|
math.sin(rot.x))
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function RotationToDirection(rotation)
|
||||||
|
local adjustedRotation =
|
||||||
|
{
|
||||||
|
x = (math.pi / 180) * rotation.x,
|
||||||
|
y = (math.pi / 180) * rotation.y,
|
||||||
|
z = (math.pi / 180) * rotation.z
|
||||||
|
}
|
||||||
|
local direction =
|
||||||
|
{
|
||||||
|
x = -math.sin(adjustedRotation.z) * math.abs(math.cos(adjustedRotation.x)),
|
||||||
|
y = math.cos(adjustedRotation.z) * math.abs(math.cos(adjustedRotation.x)),
|
||||||
|
z = math.sin(adjustedRotation.x)
|
||||||
|
}
|
||||||
|
return direction
|
||||||
|
end
|
||||||
|
|
||||||
|
function Camera(ped)
|
||||||
|
local cameraRotation = GetGameplayCamRot()
|
||||||
|
local cameraCoord = GetGameplayCamCoord()
|
||||||
|
local direction = RotationToDirection(cameraRotation)
|
||||||
|
local destination =
|
||||||
|
{
|
||||||
|
x = cameraCoord.x + direction.x * 10.0,
|
||||||
|
y = cameraCoord.y + direction.y * 10.0,
|
||||||
|
z = cameraCoord.z + direction.z * 10.0
|
||||||
|
}
|
||||||
|
|
||||||
|
local sphereCast = StartShapeTestSweptSphere(
|
||||||
|
cameraCoord.x,
|
||||||
|
cameraCoord.y,
|
||||||
|
cameraCoord.z,
|
||||||
|
destination.x,
|
||||||
|
destination.y,
|
||||||
|
destination.z,
|
||||||
|
0.2,
|
||||||
|
339,
|
||||||
|
ped,
|
||||||
|
4
|
||||||
|
);
|
||||||
|
return GetShapeTestResultIncludingMaterial(sphereCast);
|
||||||
|
end
|
||||||
|
|
||||||
|
function startPlacing()
|
||||||
|
local _, hit, endCoords, _, _, _ = Camera(ped)
|
||||||
|
if hit then
|
||||||
|
currentCoords = endCoords
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function stopPlacing()
|
||||||
|
if ped then
|
||||||
|
DeleteEntity(ped)
|
||||||
|
end
|
||||||
|
ped = nil
|
||||||
|
heading = 0.0
|
||||||
|
currentCoords = nil
|
||||||
|
lib.hideTextUI()
|
||||||
|
if Config.SetToFirstPerson then
|
||||||
|
SetFollowPedCamViewMode(oldCamView)
|
||||||
|
oldCamView = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
RegisterCommand("sit", function(source, args)
|
||||||
|
local animToUse = Config.Anims[currentAnimIndex]
|
||||||
|
|
||||||
|
if not animToUse then
|
||||||
|
lib.notify({ type = "error", description = "No animation found." })
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
PlacingThread(animToUse)
|
||||||
|
end)
|
||||||
|
|
22
resources/[tools]/snipe-sitting/fxmanifest.lua
Normal file
22
resources/[tools]/snipe-sitting/fxmanifest.lua
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
|
||||||
|
-----------------For support, scripts, and more----------------
|
||||||
|
--------------- https://discord.gg/AeCVP2F8h7 -------------
|
||||||
|
---------------------------------------------------------------
|
||||||
|
|
||||||
|
fx_version 'cerulean'
|
||||||
|
game 'gta5'
|
||||||
|
|
||||||
|
description 'Sitting Script'
|
||||||
|
version '1.0.0'
|
||||||
|
author 'Snipe'
|
||||||
|
|
||||||
|
lua54 'yes'
|
||||||
|
|
||||||
|
shared_scripts{
|
||||||
|
'@ox_lib/init.lua',
|
||||||
|
'shared/**/*.lua'
|
||||||
|
}
|
||||||
|
|
||||||
|
client_scripts{
|
||||||
|
'client/**/*.lua',
|
||||||
|
}
|
96
resources/[tools]/snipe-sitting/shared/config.lua
Normal file
96
resources/[tools]/snipe-sitting/shared/config.lua
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
|
||||||
|
-----------------For support, scripts, and more----------------
|
||||||
|
--------------- https://discord.gg/AeCVP2F8h7 -------------
|
||||||
|
---------------------------------------------------------------
|
||||||
|
|
||||||
|
Config = {}
|
||||||
|
Config.SetToFirstPerson = true
|
||||||
|
|
||||||
|
-- you can add more sitting animations here.
|
||||||
|
Config.Anims = {
|
||||||
|
{
|
||||||
|
dict = "timetable@maid@couch@",
|
||||||
|
anim = "base",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "anim@heists@fleeca_bank@ig_7_jetski_owner",
|
||||||
|
anim = "owner_idle",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "rcm_barry3",
|
||||||
|
anim = "barry_3_sit_loop",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "amb@world_human_picnic@male@idle_a",
|
||||||
|
anim = "idle_a",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "amb@world_human_picnic@female@idle_a",
|
||||||
|
anim = "idle_a",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "anim@heists@fleeca_bank@ig_7_jetski_owner",
|
||||||
|
anim = "owner_idle",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "timetable@jimmy@mics3_ig_15@",
|
||||||
|
anim = "idle_a_jimmy",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "anim@amb@nightclub@lazlow@lo_alone@",
|
||||||
|
anim = "lowalone_base_laz",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "timetable@jimmy@mics3_ig_15@",
|
||||||
|
anim = "mics3_15_base_jimmy",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "amb@world_human_stupor@male@idle_a",
|
||||||
|
anim = "idle_a",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "timetable@ron@ig_5_p3",
|
||||||
|
anim = "ig_5_p3_base",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "timetable@reunited@ig_10",
|
||||||
|
anim = "base_amanda",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "timetable@ron@ig_3_couch",
|
||||||
|
anim = "base",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "timetable@jimmy@mics3_ig_15@",
|
||||||
|
anim = "mics3_15_base_tracy",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "timetable@maid@couch@",
|
||||||
|
anim = "base",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "timetable@ron@ig_5_p3",
|
||||||
|
anim = "ig_5_p3_base",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "timetable@reunited@ig_10",
|
||||||
|
anim = "base_amanda",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "timetable@ron@ig_3_couch",
|
||||||
|
anim = "base",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "timetable@jimmy@mics3_ig_15@",
|
||||||
|
anim = "mics3_15_base_tracy",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "timetable@ron@ron_ig_2_alt1",
|
||||||
|
anim = "ig_2_alt1_base",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dict = "anim@gangops@morgue@table@",
|
||||||
|
anim = "body_search",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue