├── Syn_Sit ├── client │ ├── seat_maker.txt │ ├── utils.lua │ ├── sitanywhere.lua │ ├── lean.lua │ └── client.lua ├── html │ ├── index.html │ └── init.js ├── README.md ├── fxmanifest.lua ├── customize_seats.lua └── polyseats.lua └── LICENSE /Syn_Sit/client/seat_maker.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Syn_Sit/html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Syn_Sit/html/init.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function(){ 2 | window.addEventListener('message', function(event) { 3 | var node = document.createElement('textarea'); 4 | var selection = document.getSelection(); 5 | 6 | node.textContent = event.data.coords; 7 | document.body.appendChild(node); 8 | 9 | selection.removeAllRanges(); 10 | node.select(); 11 | document.execCommand('copy'); 12 | 13 | selection.removeAllRanges(); 14 | document.body.removeChild(node); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /Syn_Sit/README.md: -------------------------------------------------------------------------------- 1 | ---$$$$$$\ $$\ $$\ $$\ $$\ $$$$$$\ $$$$$$\ $$$$$$$\ $$$$$$\ $$$$$$$\ $$$$$$$$\ $$$$$$\ 2 | --$$ __$$\\$$\ $$ |$$$\ $$ |$$ __$$\ $$ __$$\ $$ __$$\ \_$$ _|$$ __$$\\__$$ __|$$ __$$\ 3 | --$$ / \__|\$$\ $$ / $$$$\ $$ |$$ / \__|$$ / \__|$$ | $$ | $$ | $$ | $$ | $$ | $$ / \__| 4 | --\$$$$$$\ \$$$$ / $$ $$\$$ |\$$$$$$\ $$ | $$$$$$$ | $$ | $$$$$$$ | $$ | \$$$$$$\ 5 | ---\____$$\ \$$ / $$ \$$$$ | \____$$\ $$ | $$ __$$< $$ | $$ ____/ $$ | \____$$\ 6 | --$$\ $$ | $$ | $$ |\$$$ |$$\ $$ |$$ | $$\ $$ | $$ | $$ | $$ | $$ | $$\ $$ | 7 | --\$$$$$$ | $$ | $$ | \$$ |\$$$$$$ |\$$$$$$ |$$ | $$ |$$$$$$\ $$ | $$ | \$$$$$$ | 8 | ---\______/ \__| \__| \__| \______/ \______/ \__| \__|\______|\__| \__| \______/ 9 | 10 | https://syncity.tebex.io/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 entarukun 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Syn_Sit/client/utils.lua: -------------------------------------------------------------------------------- 1 | 2 | function roundDec(num, numDecimalPlaces) 3 | local mult = 10^(numDecimalPlaces or 0) 4 | return math.floor(num * mult + 0.5) / mult 5 | end 6 | 7 | function ShowHelpNotification(text) 8 | SetTextComponentFormat("STRING") 9 | AddTextComponentString(text) 10 | DisplayHelpTextFromStringLabel(0, 0, 1, 50) 11 | end 12 | 13 | function ShowNotification(msg) 14 | SetNotificationTextEntry('STRING') 15 | AddTextComponentString(msg) 16 | DrawNotification(0,1) 17 | end 18 | 19 | function DrawText3Ds(x, y, z, text) 20 | local onScreen, _x, _y = World3dToScreen2d(x, y, z) 21 | 22 | if onScreen then 23 | SetTextScale(0.35, 0.35) 24 | SetTextFont(4) 25 | SetTextProportional(1) 26 | SetTextColour(255, 255, 255, 215) 27 | SetTextEntry("STRING") 28 | SetTextCentre(1) 29 | AddTextComponentString(text) 30 | DrawText(_x, _y) 31 | local factor = (string.len(text)) / 350 32 | DrawRect(_x, _y + 0.0125, 0.015 + factor, 0.03, 41, 11, 41, 68) 33 | end 34 | end 35 | 36 | function IsPedHeeled(ped) 37 | if GetPedConfigFlag(ped, 322 ,true ) then -- heels increase the z height of player so we have to account for that 38 | return true 39 | end 40 | return false 41 | end 42 | 43 | function Animation(dict, anim, ped) -- this is wher animations are played^ 44 | RequestAnimDict(dict) 45 | while not HasAnimDictLoaded(dict) do 46 | Citizen.Wait(0) 47 | end 48 | TaskPlayAnim(ped, dict, anim, 8.0, 1.0, -1, 1, 0, 0, 0, 0) 49 | end -------------------------------------------------------------------------------- /Syn_Sit/fxmanifest.lua: -------------------------------------------------------------------------------- 1 | ---$$$$$$\ $$\ $$\ $$\ $$\ $$$$$$\ $$$$$$\ $$$$$$$\ $$$$$$\ $$$$$$$\ $$$$$$$$\ $$$$$$\ 2 | --$$ __$$\\$$\ $$ |$$$\ $$ |$$ __$$\ $$ __$$\ $$ __$$\ \_$$ _|$$ __$$\\__$$ __|$$ __$$\ 3 | --$$ / \__|\$$\ $$ / $$$$\ $$ |$$ / \__|$$ / \__|$$ | $$ | $$ | $$ | $$ | $$ | $$ / \__| 4 | --\$$$$$$\ \$$$$ / $$ $$\$$ |\$$$$$$\ $$ | $$$$$$$ | $$ | $$$$$$$ | $$ | \$$$$$$\ 5 | ---\____$$\ \$$ / $$ \$$$$ | \____$$\ $$ | $$ __$$< $$ | $$ ____/ $$ | \____$$\ 6 | --$$\ $$ | $$ | $$ |\$$$ |$$\ $$ |$$ | $$\ $$ | $$ | $$ | $$ | $$ | $$\ $$ | 7 | --\$$$$$$ | $$ | $$ | \$$ |\$$$$$$ |\$$$$$$ |$$ | $$ |$$$$$$\ $$ | $$ | \$$$$$$ | 8 | ---\______/ \__| \__| \__| \______/ \______/ \__| \__|\______|\__| \__| \______/ 9 | fx_version 'cerulean' 10 | lua54 'yes' 11 | game 'gta5' 12 | 13 | dependency 'ox_lib' 14 | 15 | 16 | ui_page 'html/index.html' 17 | shared_scripts { 18 | '@ox_lib/init.lua', 19 | } 20 | client_scripts{ 21 | 'client/client.lua', 22 | 'client/utils.lua', 23 | 24 | 'client/lean.lua', 25 | 'client/sitanywhere.lua', 26 | 27 | 28 | 'config.lua', 29 | 'customize_seats.lua', 30 | 'polyseats.lua', 31 | 32 | 'client/debug.lua', 33 | } 34 | files { 35 | 'html/index.html', 36 | 'html/jquery.js', 37 | 'html/init.js', 38 | } 39 | escrow_ignore { 40 | 'html/index.html', 41 | 'html/jquery.js', 42 | 'html/init.js', 43 | 'client/client.lua', 44 | 'client/utils.lua', 45 | 'client/lean.lua', 46 | 'client/sitanywhere.lua', 47 | 'client/debug.lua', 48 | 'config.lua', 49 | 'customize_seats.lua', 50 | 'polyseats.lua', 51 | } 52 | 53 | -------------------------------------------------------------------------------- /Syn_Sit/customize_seats.lua: -------------------------------------------------------------------------------- 1 | Config.custom_seats = { -- thes are custom props from your mlos if it is a non native gta prop add it here 2 | {objName=-2105381678, Animations = { --black tavern chair 3 | { anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',right_left_X= 0.24, forward_backwards_Y= 0.3, up_down_z= 0.5, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 4 | {anim = 'PROP_HUMAN_SEAT_BENCH',right_left_X= 0.24, forward_backwards_Y= 0.3, up_down_z= 0.5, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 5 | {anim = 'PROP_HUMAN_SEAT_DECKCHAIR',right_left_X= 0.24, forward_backwards_Y= 0.3, up_down_z= 0.5, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 6 | {anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',right_left_X= 0.24, forward_backwards_Y= 0.3, up_down_z= 0.5, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 7 | {anim = 'PROP_HUMAN_SEAT_ARMCHAIR',right_left_X= 0.24, forward_backwards_Y=0.3, up_down_z= 0.5, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 8 | {anim = 'PROP_HUMAN_SEAT_CHAIR',right_left_X= 0.24, forward_backwards_Y= 0.3, up_down_z= 0.5, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 9 | {anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',right_left_X= 0.24, forward_backwards_Y= 0.3, up_down_z= 0.5, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 10 | }, 11 | }, 12 | [136] = {objName=1840174940, Animations = { -- Vanilla unicorn Stool 13 | { anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',right_left_X= 0.0, forward_backwards_Y= 0.3, up_down_z= 0.8, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 14 | {anim = 'PROP_HUMAN_SEAT_BENCH',right_left_X= 0.0, forward_backwards_Y= 0.15, up_down_z= 0.75, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 15 | {anim = 'PROP_HUMAN_SEAT_DECKCHAIR',right_left_X= 0.0, forward_backwards_Y= 0.15, up_down_z= 0.7, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 16 | {anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',right_left_X= 0.0, forward_backwards_Y= 0.15, up_down_z= 0.7, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 17 | {anim = 'PROP_HUMAN_SEAT_ARMCHAIR',right_left_X= 0.0, forward_backwards_Y=0.15, up_down_z= 0.723, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 18 | {anim = 'PROP_HUMAN_SEAT_CHAIR',right_left_X= 0.0, forward_backwards_Y= 0.15, up_down_z= 0.76, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 19 | {anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',right_left_X= 0.0, forward_backwards_Y= 0.15, up_down_z= 0.8, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 20 | }, 21 | }, 22 | 23 | 24 | {objName=1397737733, Animations = { -- burger shot Bench L shape 25 | [1] = { 26 | { anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',right_left_X= 0.25, forward_backwards_Y= -0.95, up_down_z= 0.0, Heading= 0.0, IsSittingAnim = true, skipExitScene = true}, 27 | {anim = 'PROP_HUMAN_SEAT_BENCH',right_left_X= 0.25, forward_backwards_Y= -0.95, up_down_z= 0.0, Heading= 0.0, IsSittingAnim = true, skipExitScene = true}, 28 | {anim = 'PROP_HUMAN_SEAT_DECKCHAIR',right_left_X= 0.25, forward_backwards_Y= -0.95, up_down_z= 0.0, Heading= 0.0, IsSittingAnim = true, skipExitScene = true}, 29 | {anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',right_left_X= 0.25, forward_backwards_Y= -0.95, up_down_z= 0.0, Heading= 0.0, IsSittingAnim = true, skipExitScene = true}, 30 | {anim = 'PROP_HUMAN_SEAT_ARMCHAIR',right_left_X= 0.25, forward_backwards_Y= -0.95, up_down_z= 0.0, Heading= 0.0, IsSittingAnim = true, skipExitScene = true}, 31 | {anim = 'PROP_HUMAN_SEAT_CHAIR',right_left_X=0.25, forward_backwards_Y= -0.95, up_down_z= 0.0, Heading= 0.0, IsSittingAnim = true, skipExitScene = true}, 32 | {anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',right_left_X= 0.25, forward_backwards_Y= -0.95, up_down_z= 0.0, Heading= 0.0, IsSittingAnim = true, skipExitScene = true}, 33 | }, 34 | [2] = { 35 | { anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',right_left_X= -0.75, forward_backwards_Y= 0.2, up_down_z= 0.0, Heading= 90.0, IsSittingAnim = true, skipExitScene = true}, 36 | {anim = 'PROP_HUMAN_SEAT_BENCH',right_left_X= -0.75, forward_backwards_Y= 0.2, up_down_z= 0.0, Heading= 90.0, IsSittingAnim = true, skipExitScene = true}, 37 | {anim = 'PROP_HUMAN_SEAT_DECKCHAIR',right_left_X= -0.75, forward_backwards_Y= -0.2, up_down_z= 0.0, Heading= 90.0, IsSittingAnim = true, skipExitScene = true}, 38 | {anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',right_left_X= -0.75, forward_backwards_Y= 0.2, up_down_z= 0.0, Heading= 90.0, IsSittingAnim = true, skipExitScene = true}, 39 | {anim = 'PROP_HUMAN_SEAT_ARMCHAIR',right_left_X= -0.75, forward_backwards_Y= 0.2, up_down_z= 0.0, Heading= 90.0, IsSittingAnim = true, skipExitScene = true}, 40 | {anim = 'PROP_HUMAN_SEAT_CHAIR',right_left_X= -0.75, forward_backwards_Y= 0.2, up_down_z= 0.0, Heading= 90.0, IsSittingAnim = true, skipExitScene = true}, 41 | {anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',right_left_X= -0.75, forward_backwards_Y= 0.2, up_down_z= 0.0, Heading= 90.0, IsSittingAnim = true, skipExitScene = true}, 42 | }, 43 | 44 | }, 45 | 46 | multiSeat = { 47 | "Right", 48 | "Left", 49 | } 50 | }, 51 | {objName=360080151, Animations = { -- burger shot Bench U shape 52 | [1] = { 53 | { anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',right_left_X= -0.4, forward_backwards_Y= -1.3, up_down_z= 0.0, Heading= 0.0, IsSittingAnim = true, skipExitScene = true}, 54 | {anim = 'PROP_HUMAN_SEAT_BENCH',right_left_X= -0.4, forward_backwards_Y= -1.3, up_down_z= 0.0, Heading= 0.0, IsSittingAnim = true, skipExitScene = true}, 55 | {anim = 'PROP_HUMAN_SEAT_DECKCHAIR',right_left_X= -0.4, forward_backwards_Y= -1.3, up_down_z= 0.0, Heading= 0.0, IsSittingAnim = true, skipExitScene = true}, 56 | {anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',right_left_X= -0.4, forward_backwards_Y= -1.3, up_down_z= 0.0, Heading= 0.0, IsSittingAnim = true, skipExitScene = true}, 57 | {anim = 'PROP_HUMAN_SEAT_ARMCHAIR',right_left_X= -0.4, forward_backwards_Y= -1.3, up_down_z= 0.0, Heading= 0.0, IsSittingAnim = true, skipExitScene = true}, 58 | {anim = 'PROP_HUMAN_SEAT_CHAIR',right_left_X=-0.4, forward_backwards_Y= -1.3, up_down_z= 0.0, Heading= 0.0, IsSittingAnim = true, skipExitScene = true}, 59 | {anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',right_left_X= -0.4, forward_backwards_Y= -1.3, up_down_z= 0.0, Heading= 0.0, IsSittingAnim = true, skipExitScene = true}, 60 | }, 61 | [2] = { 62 | { anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',right_left_X= -0.4, forward_backwards_Y= 1.3, up_down_z= 0.0, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 63 | {anim = 'PROP_HUMAN_SEAT_BENCH',right_left_X= -0.4, forward_backwards_Y= 1.3, up_down_z= 0.0, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 64 | {anim = 'PROP_HUMAN_SEAT_DECKCHAIR',right_left_X= -0.4, forward_backwards_Y= 1.3, up_down_z= 0.0, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 65 | {anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',right_left_X= -0.4, forward_backwards_Y= 1.3, up_down_z= 0.0, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 66 | {anim = 'PROP_HUMAN_SEAT_ARMCHAIR',right_left_X= -0.4, forward_backwards_Y= 1.3, up_down_z= 0.0, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 67 | {anim = 'PROP_HUMAN_SEAT_CHAIR',right_left_X= -0.4, forward_backwards_Y= 1.3, up_down_z= 0.0, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 68 | {anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',right_left_X= -0.4, forward_backwards_Y= 1.3, up_down_z= 0.0, Heading= 180.0, IsSittingAnim = true, skipExitScene = true}, 69 | }, 70 | [3] = { 71 | { anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',right_left_X= 0.8, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 270.0, IsSittingAnim = true, skipExitScene = true}, 72 | {anim = 'PROP_HUMAN_SEAT_BENCH',right_left_X= 0.8, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 270.0, IsSittingAnim = true, skipExitScene = true}, 73 | {anim = 'PROP_HUMAN_SEAT_DECKCHAIR',right_left_X= 0.8, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 270.0, IsSittingAnim = true, skipExitScene = true}, 74 | {anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',right_left_X= 0.8, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 270.0, IsSittingAnim = true, skipExitScene = true}, 75 | {anim = 'PROP_HUMAN_SEAT_ARMCHAIR',right_left_X= 0.8, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 270.0, IsSittingAnim = true, skipExitScene = true}, 76 | {anim = 'PROP_HUMAN_SEAT_CHAIR',right_left_X= 0.8, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 270.0, IsSittingAnim = true, skipExitScene = true}, 77 | {anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',right_left_X= 0.8, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 270.0, IsSittingAnim = true, skipExitScene = true}, 78 | }, 79 | }, 80 | 81 | multiSeat = { 82 | "Right", 83 | "Center", 84 | "Left", 85 | } 86 | }, 87 | 88 | 89 | } -------------------------------------------------------------------------------- /Syn_Sit/client/sitanywhere.lua: -------------------------------------------------------------------------------- 1 | 2 | function getCoordsScene_2(Ignore) 3 | local Cam = GetGameplayCamCoord() 4 | local _, Hit, Coords, _, Entity = GetShapeTestResult(StartExpensiveSynchronousShapeTestLosProbe(Cam, getCoordsFromCam(10, Cam), -1, Ignore, 4)) 5 | return Coords 6 | end 7 | 8 | 9 | RegisterCommand("SitAnyWhere", function() -- Listen for this command. 10 | local pId = PlayerPedId() 11 | local pIdCoords = GetEntityCoords(pId) 12 | local distance = nil 13 | local size = nil 14 | local markerheading = 0.0 15 | local learning = true 16 | local SavedCoords = false 17 | 18 | --CurrentClone = ClonePedEx(pId, 0.0, false, true, 1) 19 | 20 | local playerDummy = ClonePed(pId, false, false, true) 21 | SetEntityAlpha(playerDummy, 58, false) 22 | 23 | SetBlockingOfNonTemporaryEvents(CurrentClone, true) 24 | --SetEntityVisible(CurrentClone, false, false) 25 | SetEntityInvincible(playerDummy, true) 26 | SetEntityCollision(playerDummy, false, false) 27 | 28 | local AnimationsQuick = Config.SitAnyWhereAnims 29 | local Cur_Anim = 1 30 | RequestAnimDict(AnimationsQuick[Cur_Anim].dict) 31 | while not HasAnimDictLoaded(AnimationsQuick[Cur_Anim].dict) do 32 | Citizen.Wait(0) 33 | end 34 | 35 | TaskPlayAnim(playerDummy, AnimationsQuick[Cur_Anim].dict, AnimationsQuick[Cur_Anim].anim, 8.0, 1.0, -1, 1, 0, 0, 0, 0) 36 | 37 | AnyWhereSeat_String = "~INPUT_ATTACK~ Sit ~INPUT_AIM~ Reset\n ~INPUT_TALK~ Next" 38 | while learning do 39 | Citizen.Wait(5) 40 | local pEscena = getCoordsScene_2(playerDummy) 41 | SetEntityCollision(playerDummy, false, false) 42 | ShowHelpNotification(AnyWhereSeat_String) 43 | if pEscena ~= nil then 44 | DisableControlAction(0, 15, true) -- scroll up 45 | DisableControlAction(0, 16, true) -- scroll down 46 | 47 | DisableControlAction(0, 24, true) -- left click 48 | DisableControlAction(0, 25, true) -- left click 49 | DisableControlAction(0, 38, true) -- E 50 | DisableControlAction(0, 44, true) -- Q 51 | distance = #(pEscena - pIdCoords) 52 | size = 0.1 53 | 54 | if IsDisabledControlPressed(0, 15) then 55 | markerheading = markerheading + 3.0 56 | elseif IsDisabledControlPressed(0, 16) then 57 | markerheading = markerheading - 3.0 58 | end 59 | 60 | DrawMarker(28, pEscena.x, pEscena.y, pEscena.z, 0, 0, 0, 0, 0, 0, size, size, size, Config.DebugMarkerColor, false, false) 61 | 62 | 63 | if IsPedHeeled(playerDummy) then -- heels increase the z of player so we have to account for that 64 | pEscena = vec3(pEscena.x, pEscena.y, pEscena.z -0.12) 65 | end 66 | 67 | if AnimationsQuick[Cur_Anim].zOff == -0.5 then 68 | SetEntityCoords(playerDummy, pEscena.x, pEscena.y, pEscena.z) 69 | elseif AnimationsQuick[Cur_Anim].anim then 70 | SetEntityCoords(playerDummy, pEscena.x, pEscena.y, pEscena.z + AnimationsQuick[Cur_Anim].zOff) 71 | else 72 | SetEntityCoords(playerDummy, pEscena.x, pEscena.y, pEscena.z --[[ + AnimationsQuick[Cur_Anim].zOff ]]) 73 | end 74 | SetEntityHeading(playerDummy,markerheading) 75 | if IsDisabledControlJustReleased(0, 38) then -- Press E 76 | Cur_Anim = Cur_Anim + 1 77 | if Cur_Anim > #AnimationsQuick then 78 | Cur_Anim = 1 79 | end 80 | Wait(50) 81 | elseif IsDisabledControlJustReleased(0, 44) then -- Q 82 | Cur_Anim = Cur_Anim - 1 83 | if Cur_Anim < 1 then 84 | Cur_Anim = #AnimationsQuick 85 | end 86 | Wait(50) 87 | elseif IsDisabledControlJustReleased(0, 25) then -- right click 88 | ClearPedTasksImmediately(playerDummy) 89 | Wait(100) 90 | elseif IsEntityDead(pId) or IsPedFalling(pId) or IsControlPressed(0, 21) or IsControlPressed(0, 49) or IsControlPressed(0, 55) or IsControlPressed(0, 202) then 91 | DeleteEntity(playerDummy) 92 | learning = false 93 | break 94 | end 95 | 96 | 97 | if AnimationsQuick[Cur_Anim].anim then 98 | if not IsEntityPlayingAnim(playerDummy, AnimationsQuick[Cur_Anim].dict, AnimationsQuick[Cur_Anim].anim,3) then 99 | 100 | loadAnimDict(AnimationsQuick[Cur_Anim].dict) 101 | TaskPlayAnim(playerDummy, AnimationsQuick[Cur_Anim].dict, AnimationsQuick[Cur_Anim].anim, 8.0, 1.0, -1, 1, 0, 0, 0, 0) 102 | end 103 | SavedCoords = pEscena 104 | elseif not IsPedUsingScenario(playerDummy, AnimationsQuick[Cur_Anim].dict) then 105 | ClearPedTasksImmediately(playerDummy) 106 | Wait(10) 107 | ClearAreaOfObjects(pEscena.x, pEscena.y, pEscena.z, 0.7,0) 108 | ClearAreaOfObjects(pEscena.x, pEscena.y, pEscena.z - 0.2, 0.3,0) 109 | Wait(1) 110 | SavedCoords = pEscena 111 | TaskStartScenarioAtPosition(playerDummy, AnimationsQuick[Cur_Anim].dict, pEscena.x, pEscena.y, pEscena.z +0.05, markerheading, -1, false, true) 112 | end 113 | 114 | if IsDisabledControlJustReleased(0, 24) then -- Left CLick 115 | Wait(50) 116 | local coords , heading = GetEntityCoords(playerDummy), GetEntityHeading(playerDummy) 117 | if SavedCoords then 118 | coords = SavedCoords 119 | end 120 | DeleteEntity(playerDummy) 121 | TaskGoToCoordAnyMeans(pId, coords.x, coords.y, coords.z + 0.2, 1.0, 0, 0, 786603, 0xbf800000) 122 | SkipSeat = false 123 | while true do 124 | Wait(1) 125 | local PlayerCoords = GetEntityCoords(pId) 126 | local SeatDistance = #(PlayerCoords - coords) 127 | if SeatDistance < 1.6 then 128 | if PlayerCoords.z < coords.z and coords.z - PlayerCoords.z > 0.4 then 129 | ClearPedTasks(pId) 130 | Wait(1) 131 | TaskClimb(pId, true) 132 | Wait(800) 133 | end 134 | break 135 | elseif SeatDistance > 5 then 136 | ClearPedTasks(pId) 137 | SkipSeat = true 138 | break 139 | end 140 | 141 | if IsControlPressed(0, 24) or IsControlPressed(0, 38) or IsControlPressed(0, 32) or IsControlPressed(0, 33) or IsControlPressed(0, 34) or IsControlPressed(0, 35) then 142 | ClearPedTasks(pId) 143 | SkipSeat = true 144 | break 145 | end 146 | end 147 | if not SkipSeat then 148 | ClearPedTasks(pId) 149 | PlayerLastPos = GetEntityCoords(pId) 150 | if AnimationsQuick[Cur_Anim].anim and not IsEntityPlayingAnim(pId, AnimationsQuick[Cur_Anim].dict, AnimationsQuick[Cur_Anim].anim,3) then 151 | loadAnimDict(AnimationsQuick[Cur_Anim].dict) 152 | SetEntityCoords(pId, coords.x, coords.y, coords.z + AnimationsQuick[Cur_Anim].zOff ) 153 | SetEntityHeading(pId,heading) 154 | FreezeEntityPosition(pId,true) 155 | TaskPlayAnim(pId, AnimationsQuick[Cur_Anim].dict, AnimationsQuick[Cur_Anim].anim, 8.0, 1.0, -1, 1, 0, 0, 0, 1) 156 | 157 | 158 | elseif not IsPedUsingScenario(pId, AnimationsQuick[Cur_Anim].dict) then 159 | if SavedCoords then 160 | coords = SavedCoords 161 | end 162 | SetEntityCoords(pId, coords.x, coords.y, coords.z + AnimationsQuick[Cur_Anim].zOff ) 163 | SetEntityHeading(pId,heading) 164 | 165 | Wait(100) 166 | inScenario = true 167 | AnimationsQuick[Cur_Anim].entryAnimation = AnimationsQuick[Cur_Anim].entryAnimation or false 168 | TaskStartScenarioAtPosition(pId, AnimationsQuick[Cur_Anim].dict, coords.x, coords.y, coords.z + AnimationsQuick[Cur_Anim].zOff, heading, -1, AnimationsQuick[Cur_Anim].entryAnimation, true) 169 | Wait(1) 170 | FreezeEntityPosition(pId,true) 171 | end 172 | -------------------------------------------------------------------------------------------- 173 | 174 | 175 | 176 | local options = {} 177 | for i = 1, #AnimationsQuick do 178 | local CurrentAnim_Key = AnimationsQuick[i].anim 179 | local CurrentDict_Key = AnimationsQuick[i].dict 180 | 181 | if not CurrentAnim_Key and CurrentDict_Key and Config.AnimDescriptions[CurrentDict_Key] then 182 | AnimationsQuick[i].description = Config.AnimDescriptions[CurrentDict_Key].description 183 | AnimationsQuick[i].title = Config.AnimDescriptions[CurrentDict_Key].title 184 | elseif CurrentDict_Key and Config.AnimDescriptions[CurrentDict_Key] and CurrentAnim_Key and Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key] then 185 | AnimationsQuick[i].description = Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key].description 186 | AnimationsQuick[i].title = Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key].title 187 | end 188 | 189 | local NewInfo = { 190 | title = AnimationsQuick[i].title, 191 | description = AnimationsQuick[i].description, 192 | args = { 193 | current = AnimationsQuick, 194 | ActiveAnimIndex = i, 195 | coords = coords, 196 | heading = heading, 197 | }, 198 | onSelect = function(data) 199 | TriggerEvent('ChairBedSystem:Client:AnyWhereSeat', AnimationsQuick[data.ActiveAnimIndex], data.coords, data.heading ) 200 | InUse = data.current 201 | InUse.details = {} 202 | InUse.details.skipExitScene = AnimationsQuick[data.ActiveAnimIndex].anim 203 | InUse.details.noExitCollision = AnimationsQuick[data.ActiveAnimIndex].noExitCollision 204 | InUse.details.animation = {} 205 | InUse.details.animation.Dict = AnimationsQuick[data.ActiveAnimIndex].dict 206 | InUse.details.animation.Anim = AnimationsQuick[data.ActiveAnimIndex].anim 207 | SeatActivation() 208 | end 209 | } 210 | options[#options+1] = NewInfo 211 | end 212 | local menuTitle = "SeatOptions" 213 | local menuId = "Seat AnyWhere " 214 | lib.registerContext({ 215 | id = menuId, 216 | title = menuTitle, 217 | options = options 218 | }) 219 | currentmenu = menuId 220 | 221 | InUse = AnimationsQuick[Cur_Anim] 222 | InUse.details = {} 223 | InUse.details.skipExitScene = AnimationsQuick[Cur_Anim].anim 224 | InUse.details.noExitCollision = AnimationsQuick[Cur_Anim].noExitCollision 225 | InUse.details.animation = {} 226 | InUse.details.animation.Dict = AnimationsQuick[Cur_Anim].dict 227 | InUse.details.animation.Anim = AnimationsQuick[Cur_Anim].anim 228 | SeatActivation() 229 | -------------------------------------------------------------------------------------------- 230 | learning = false 231 | end 232 | break 233 | end 234 | end 235 | end 236 | 237 | end) 238 | 239 | 240 | RegisterNetEvent('ChairBedSystem:Client:AnyWhereSeat') 241 | AddEventHandler('ChairBedSystem:Client:AnyWhereSeat', function(v, coords,heading) 242 | v.zOff = v.zOff or 0 243 | local ped = PlayerPedId() 244 | 245 | FreezeEntityPosition(ped, true) 246 | 247 | SetEntityCoords(ped, coords.x, coords.y, coords.z + v.zOff) 248 | SetEntityHeading(ped, heading) 249 | if v.anim then 250 | Animation(v.dict, v.anim, ped) 251 | else 252 | inScenario = true 253 | v.entryAnimation = v.entryAnimation or false 254 | TaskStartScenarioAtPosition(ped, v.dict, coords.x, coords.y, coords.z + v.zOff, heading, 0, v.entryAnimation, true) 255 | end 256 | end) 257 | -------------------------------------------------------------------------------- /Syn_Sit/client/lean.lua: -------------------------------------------------------------------------------- 1 | 2 | 3 | local leaningAnimationsets = { 4 | --######################################################################################### 5 | { 6 | gender = "female", 7 | activity = "wall_hand_up", 8 | animations = { 9 | dict = "amb@world_human_leaning@female@wall@back@hand_up@", 10 | enter = {suffix = "enter", anims = {"enter_back", "enter_left", "enter_right"}}, 11 | idle = {suffix = "idle_a", anims = {"idle_a", "idle_b", "idle_c"}}, 12 | exit = {suffix = "exit", anims = {"exit_front", "exit_left", "exit_right"}}, 13 | } 14 | }, 15 | { 16 | gender = "female", 17 | activity = "hand_up", 18 | animations = { 19 | dict = "amb@world_human_leaning@female@wall@back@hand_up@", 20 | enter = {suffix = "enter", anims = {"enter_back", "enter_left", "enter_right"}}, 21 | idle = {suffix = "idle_b", anims = {"idle_d", "idle_e"}}, 22 | exit = {suffix = "exit", anims = {"exit_front", "exit_left", "exit_right"}}, 23 | } 24 | }, 25 | --######################################################################################### 26 | { 27 | gender = 'both',--"female", 28 | activity = "holding_elbow", 29 | switched = true, 30 | animations = { 31 | dict = "amb@world_human_leaning@female@wall@back@holding_elbow@", 32 | enter = {suffix = "enter", anims = {"enter_front", "enter_left", "enter_right"}}, 33 | idle = {suffix = "idle_a", anims = {"idle_a", "idle_b", "idle_c"}}, 34 | exit = {suffix = "exit", anims = {"exit_front", "exit_left", "exit_right"}}, 35 | } 36 | }, 37 | { 38 | gender = 'both',--"female", 39 | activity = "holding_elbow", 40 | switched = true, 41 | animations = { 42 | dict = "amb@world_human_leaning@female@wall@back@holding_elbow@", 43 | enter = {suffix = "enter", anims = {"enter_front", "enter_left", "enter_right"}}, 44 | idle = {suffix = "idle_b", anims = {"idle_d", "idle_e"}}, 45 | exit = {suffix = "exit", anims = {"exit_front", "exit_left", "exit_right"}}, 46 | } 47 | }, 48 | --######################################################################################### 49 | --######################################################################################### 50 | --######################################################################################### 51 | --######################################################################################### 52 | --######################################################################################### 53 | --######################################################################################### 54 | --######################################################################################### 55 | { 56 | gender = 'both',--"male", 57 | activity = "foot_up", 58 | animations = { 59 | dict = "amb@world_human_leaning@male@wall@back@foot_up@", 60 | enter = {suffix = "enter", anims = {"enter_back", "enter_left", "enter_right"}}, 61 | idle = {suffix = "idle_a", anims = {"idle_a", "idle_b", "idle_c"}}, 62 | exit = {suffix = "exit", anims = {"exit_front", "exit_left", "exit_right"}}, 63 | } 64 | }, 65 | { 66 | gender = 'both',--"male", 67 | activity = "foot_up", 68 | animations = { 69 | dict = "amb@world_human_leaning@male@wall@back@foot_up@", 70 | enter = {suffix = "enter", anims = {"enter_back", "enter_left", "enter_right"}}, 71 | idle = {suffix = "idle_b", anims = {"idle_d", "idle_e"}}, 72 | exit = {suffix = "exit", anims = {"exit_front", "exit_left", "exit_right"}}, 73 | } 74 | }, 75 | --######################################################################################### 76 | { 77 | gender = 'both',--"male", 78 | activity = "hands_together", -- switched 79 | animations = { 80 | dict = "amb@world_human_leaning@male@wall@back@hands_together@", 81 | enter = {suffix = "enter", anims = {"enter_back", "enter_left", "enter_right"}}, 82 | idle = {suffix = "idle_a", anims = {"idle_a", "idle_b", "idle_c"}}, 83 | exit = {suffix = "exit", anims = {"exit_front", "exit_left", "exit_right"}}, 84 | } 85 | }, 86 | { 87 | gender = 'both',--"male", 88 | activity = "hands_together", -- switched 89 | animations = { 90 | dict = "amb@world_human_leaning@male@wall@back@hands_together@", 91 | enter = {suffix = "enter", anims = {"enter_back", "enter_left", "enter_right"}}, 92 | idle = {suffix = "idle_b", anims = {"idle_d", "idle_e"}}, 93 | exit = {suffix = "exit", anims = {"exit_front", "exit_left", "exit_right"}}, 94 | } 95 | }, 96 | --######################################################################################### 97 | { 98 | gender = "male", 99 | activity = "legs_crossed", -- switched 100 | switched = true, 101 | animations = { 102 | dict = "amb@world_human_leaning@male@wall@back@legs_crossed@", 103 | enter = {suffix = "enter", anims = {"enter_back", "enter_front", "enter_left", "enter_right"}}, 104 | idle = {suffix = "idle_a", anims = {"idle_a", "idle_b", "idle_c"}}, 105 | exit = {suffix = "exit", anims = {"exit_back", "exit_front", "exit_left", "exit_right"}}, 106 | } 107 | }, 108 | { 109 | gender = "male", 110 | activity = "legs_crossed", -- switched 111 | switched = true, 112 | animations = { 113 | dict = "amb@world_human_leaning@male@wall@back@legs_crossed@", 114 | enter = {suffix = "enter", anims = {"enter_back", "enter_front", "enter_left", "enter_right"}}, 115 | idle = {suffix = "idle_b", anims = {"idle_d", "idle_e"}}, 116 | exit = {suffix = "exit", anims = {"exit_back", "exit_front", "exit_left", "exit_right"}}, 117 | } 118 | }, 119 | -- Additional sets can be added following the same structure. 120 | } 121 | 122 | 123 | function loadAnimDict(dict) 124 | RequestAnimDict(dict) 125 | while not HasAnimDictLoaded(dict) do 126 | Citizen.Wait(0) 127 | end 128 | end 129 | 130 | local PlayerGender = false 131 | local isCurrentlyLeaning = false 132 | RegisterKeyMapping('_SynSit_Lean', 'Lean Anywhere', 'keyboard', 'l') -- L 133 | RegisterCommand('_SynSit_Lean', function() 134 | if not isCurrentlyLeaning then -- E key, or change to your preferred key 135 | local playerPed = PlayerPedId() 136 | if not InUse and IsPedOnFoot(playerPed) and not IsPedDeadOrDying(playerPed) and not IsPedFalling(playerPed) and not IsPedRunning(playerPed) and not IsPedSprinting(playerPed) and not IsPedSwimming(playerPed) and not IsPedInMeleeCombat(playerPed) then 137 | isCurrentlyLeaning = true 138 | local playerPos = GetEntityCoords(playerPed) 139 | local playerHeading = GetEntityHeading(playerPed) 140 | if not PlayerGender then 141 | local modelHash = GetEntityModel(playerPed) -- Get the model hash of the player's ped 142 | PlayerGender = modelHash == GetHashKey("mp_m_freemode_01") and 'male' or modelHash == GetHashKey("mp_f_freemode_01") and 'female' 143 | end 144 | local detected, wallNormal, coords = DetectWall(playerPos) 145 | if detected and coords then 146 | if not SkipSeat then 147 | refetch = false 148 | recheck = false 149 | repeat 150 | randomAnim = math.random(1,#leaningAnimationsets) 151 | animSet = leaningAnimationsets[randomAnim].animations -- Example: select the first set of animations. 152 | Wait(10) 153 | refetch = PlayerGender == 'male' and leaningAnimationsets[randomAnim].gender == 'female' -- ensure no danty anims for my macho man 154 | -- Determine the proper entry animation based on wallNormal. 155 | entryAnim, recheck = GetEntryAnimation(animSet, wallNormal, leaningAnimationsets[randomAnim]) 156 | 157 | until not recheck and not refetch 158 | 159 | 160 | local currentDict = animSet.dict .. animSet.enter.suffix 161 | loadAnimDict(currentDict) 162 | TaskPlayAnim(playerPed, currentDict, entryAnim, 8.0, -8.0, GetAnimDuration(currentDict, entryAnim), 0, 0, false, false, false)-- Play the determined entry animation 163 | Citizen.Wait(GetAnimDuration(currentDict, entryAnim) * 1000) -- Wait for the animation to finish 164 | 165 | 166 | local currentDict = animSet.dict .. animSet.idle.suffix 167 | loadAnimDict(currentDict) 168 | local randomAnim_idle = math.random(1,#animSet.idle.anims) --print(currentDict,animSet.idle.anims[randomAnim_idle]) 169 | TaskPlayAnim(playerPed, currentDict, animSet.idle.anims[randomAnim_idle], 8.0, -8.0, -1, 1, 0, false, false, false) -- Transition to the idle animation 170 | Citizen.Wait(100) 171 | local exitSide = "front" 172 | while IsEntityPlayingAnim(playerPed, currentDict, animSet.idle.anims[randomAnim_idle], 3) do -- Stay in the idle animation until a key is pressed 173 | Citizen.Wait(5) 174 | if IsControlJustPressed(0, 38) then -- e key, or another preferred key 175 | exitSide = "front" 176 | break 177 | elseif IsControlJustPressed(0, 32) then -- 178 | exitSide = "front" 179 | break 180 | elseif IsControlJustPressed(0, 33) then -- 181 | exitSide = "back" 182 | break 183 | elseif IsControlJustPressed(0, 34) then -- 184 | exitSide = "left" 185 | break 186 | elseif IsControlJustPressed(0, 35) then -- 187 | exitSide = "right" 188 | break 189 | end 190 | end 191 | 192 | -- Play the exit animation 193 | local currentDict = animSet.dict .. animSet.exit.suffix 194 | loadAnimDict(currentDict) 195 | exitAnim = GetExitAnimation(animSet, exitSide) 196 | TaskPlayAnim(playerPed, currentDict, exitAnim, 8.0, -8.0, GetAnimDuration(currentDict, exitAnim), 0, 0, false, false, false)-- Transition to the idle animation 197 | Citizen.Wait(GetAnimDuration(currentDict, exitAnim) * 1000) -- Wait for the animation to finish 198 | ClearPedTasks(playerPed) 199 | RemoveAnimDict(animSet.dict) 200 | end 201 | end 202 | isCurrentlyLeaning = false 203 | end 204 | end 205 | end) 206 | 207 | function DetectWall(pos) 208 | local directions = { 209 | { x = 0.0, y = 0.7, z = -0.2, name = 'front' }, 210 | { x = 0.0, y = -0.7, z = -0.2, name = 'back' }, 211 | { x = -0.7, y = 0.0, z = -0.2, name = 'left' }, 212 | { x = 0.7, y = 0.0, z = -0.2, name = 'right' }, 213 | 214 | { x = 0.0, y = 0.7, z = 0.0, name = 'front' }, 215 | { x = 0.0, y = -0.7, z = 0.0, name = 'back' }, 216 | { x = -0.7, y = 0.0, z = 0.0, name = 'left' }, 217 | { x = 0.7, y = 0.0, z = 0.0, name = 'right' } 218 | } 219 | 220 | local distances = {} 221 | local closest = {name = "bob", range = 100 } 222 | for _, direction in ipairs(directions) do 223 | local checkPos = GetOffsetFromEntityInWorldCoords(PlayerPedId(),direction.x,direction.y,direction.z) -- we want the line to have a very slight downward slop so it ends below the buttcheek 224 | local rayHandle = StartShapeTestRay(pos.x, pos.y, (pos.z), checkPos.x, checkPos.y, checkPos.z, -1 --[[ 1 ]], PlayerPedId(), 0) 225 | local _, hit, endCoords, surfaceNormal, _ = GetShapeTestResult(rayHandle) 226 | --DrawLine(pos.x, pos.y, (pos.z), checkPos.x, checkPos.y, checkPos.z, 255,0,0,255) -- this draws red lines to show you where the raycasts are being sent to 227 | --print(_, hit, endCoords, surfaceNormal, _) 228 | if hit == 1 then 229 | distances[direction.name] = {dist = #(pos - endCoords), coords = endCoords} 230 | --print(direction.name) 231 | end 232 | end 233 | for k,v in pairs(distances) do 234 | --print(k,v) 235 | if v.dist < closest.range then 236 | closest.range= v.dist 237 | closest.name = k 238 | closest.coords = v.coords 239 | end 240 | end 241 | if closest.range < 100 then 242 | return true, closest.name , closest.coords 243 | else 244 | return false, nil 245 | end 246 | end 247 | 248 | 249 | 250 | 251 | function GetEntryAnimation(animSet, wallNormal, animData) 252 | 253 | if animData.switched then -- some entry anims are garbled front is back back is front 254 | --print("Switched") 255 | if wallNormal == 'front' then 256 | wallNormal = 'back' 257 | elseif wallNormal == 'back' then 258 | wallNormal = 'front' 259 | end 260 | end 261 | for i = 1, #animSet.enter.anims do 262 | if string.find(animSet.enter.anims[i],wallNormal) then 263 | --print("matched" , wallNormal) 264 | return animSet.enter.anims[i] , false 265 | end 266 | end 267 | return false , true 268 | end 269 | 270 | 271 | function GetExitAnimation(animSet, wallNormal) 272 | 273 | for i = 1, #animSet.exit.anims do 274 | if string.find(animSet.exit.anims[i],wallNormal) then 275 | --print("matched" , wallNormal) 276 | return animSet.exit.anims[i] 277 | end 278 | end 279 | return animSet.exit.anims[1] 280 | end -------------------------------------------------------------------------------- /Syn_Sit/polyseats.lua: -------------------------------------------------------------------------------- 1 | Config.PolySeats = { 2 | { -- Vinewood Sign 3 | debug = false,options = {}, 4 | Seats = { 5 | [1] = vector3(712.32873535156, 1197.2170410156, 347.53161621094), 6 | [2] = vector3(710.8955078125, 1197.6031494141, 347.53164672852), 7 | [3] = vector3(710.25103759766, 1197.7979736328, 347.53164672852)}, 8 | thickness = 1.0,points = { 9 | [1] = vector3(712.57171630859, 1196.8277587891, 347.52853393555), 10 | [2] = vector3(709.70379638672, 1197.6196289063, 347.52853393555), 11 | [3] = vector3(709.890625, 1198.3450927734, 347.52853393555), 12 | [4] = vector3(712.8095703125, 1197.5927734375, 347.52853393555) 13 | }, 14 | multiSeat = { 15 | "Right", 16 | "Center", 17 | "Left", 18 | }, 19 | ZoneID = nil, 20 | distance = 3.0, 21 | objName= false, 22 | Animations = { 23 | [1] = { 24 | {right_left_X = 0.0,up_down_z = -0.04,anim = 'WORLD_HUMAN_SEAT_LEDGE',Heading = 170.38,forward_backwards_Y = -0.12, IsSittingAnim = false, skipExitScene = false}, 25 | {anim = 'WORLD_HUMAN_SEAT_LEDGE_EATING',right_left_X= 0.0, forward_backwards_Y= -0.12, up_down_z= -0.04, Heading = 170.38, IsSittingAnim = false, skipExitScene = false}, 26 | }, 27 | [2] = { 28 | {right_left_X = 0.0,up_down_z = -0.04,anim = 'WORLD_HUMAN_SEAT_LEDGE',Heading = 170.38,forward_backwards_Y = -0.12, IsSittingAnim = false, skipExitScene = false}, 29 | {anim = 'WORLD_HUMAN_SEAT_LEDGE_EATING',right_left_X= 0.0, forward_backwards_Y= -0.12, up_down_z= -0.04, Heading = 170.38, IsSittingAnim = false, skipExitScene = false}, 30 | }, 31 | [3] = { 32 | {right_left_X = 0.0,up_down_z = -0.04,anim = 'WORLD_HUMAN_SEAT_LEDGE',Heading = 170.38,forward_backwards_Y = -0.12, IsSittingAnim = false, skipExitScene = false}, 33 | {anim = 'WORLD_HUMAN_SEAT_LEDGE_EATING',right_left_X= 0.0, forward_backwards_Y= -0.12, up_down_z= -0.04, Heading = 170.38, IsSittingAnim = false, skipExitScene = false}, 34 | }, 35 | }, 36 | }, 37 | 38 | 39 | { 40 | Seats = { 41 | [1] = vector3(301.39309692383, -590.28961181641, 42.742588043213), 42 | [2] = vector3(300.92199707031, -591.46185302734, 42.742588043213), 43 | }, 44 | thickness = 0.4,options = {}, 45 | points = { 46 | [1] = vector3(301.97033691406, -590.03063964844, 42.742588043213), 47 | [2] = vector3(301.33386230469, -589.7822265625, 42.742588043213), 48 | [3] = vector3(300.56094360352, -591.88018798828, 42.742588043213), 49 | [4] = vector3(301.1962890625, -592.11267089844, 42.742588043213), 50 | }, 51 | multiSeat = { 52 | "Right", 53 | "Left", 54 | }, 55 | ZoneID = nil, 56 | debug = false, 57 | distance = 3.0, 58 | objName= false, 59 | Animations = { 60 | [1] = { 61 | 62 | {right_left_X = 0.08,up_down_z = 0.0,Heading = 70.0,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',title = 'Sit Normal',forward_backwards_Y = -0.06}, 63 | {anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 73.54, IsSittingAnim = true, skipExitScene = false}, 64 | {anim = 'PROP_HUMAN_SEAT_BENCH',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 73.54, IsSittingAnim = true, skipExitScene = false}, 65 | {anim = 'PROP_HUMAN_SEAT_DECKCHAIR',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 73.54, IsSittingAnim = true, skipExitScene = false}, 66 | {anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 73.54, IsSittingAnim = true, skipExitScene = false}, 67 | {anim = 'PROP_HUMAN_SEAT_ARMCHAIR',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 73.54, IsSittingAnim = true, skipExitScene = false}, 68 | {anim = 'PROP_HUMAN_SEAT_CHAIR',right_left_X=0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 71.0, IsSittingAnim = true, skipExitScene = false}, 69 | {anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 71.0, IsSittingAnim = true, skipExitScene = false}, 70 | }, 71 | [2] = { 72 | { anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 71.0, IsSittingAnim = true, skipExitScene = false}, 73 | {anim = 'PROP_HUMAN_SEAT_BENCH',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 71.0, IsSittingAnim = true, skipExitScene = false}, 74 | {anim = 'PROP_HUMAN_SEAT_DECKCHAIR',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 71.0, IsSittingAnim = true, skipExitScene = false}, 75 | {anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 71.0, IsSittingAnim = true, skipExitScene = false}, 76 | {anim = 'PROP_HUMAN_SEAT_ARMCHAIR',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 71.0, IsSittingAnim = true, skipExitScene = false}, 77 | {anim = 'PROP_HUMAN_SEAT_CHAIR',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 71.0, IsSittingAnim = true, skipExitScene = false}, 78 | {anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 71.0, IsSittingAnim = true, skipExitScene = false}, 79 | }, 80 | }, 81 | }, 82 | { 83 | points = { 84 | [1] = vector3(303.71337890625, -595.54620361328, 42.741142272949), 85 | [2] = vector3(303.99722290039, -594.88415527344, 42.741142272949), 86 | [3] = vector3(302.14096069336, -594.21154785156, 42.741142272949), 87 | [4] = vector3(301.92837524414, -594.89495849609, 42.741142272949), 88 | }, 89 | Seats = { 90 | [1] = vector3(303.46673583984, -594.94586181641, 42.741142272949), 91 | [2] = vector3(302.51376342773, -594.59442138672, 42.741142272949), 92 | }, 93 | multiSeat = { 94 | "Right", 95 | "Left", 96 | }, 97 | thickness = 0.4, 98 | options = {}, 99 | ZoneID = nil, 100 | debug = false, 101 | distance = 3.0, 102 | objName= false, 103 | Animations = { 104 | [1] = { 105 | { anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 337.0, IsSittingAnim = true, skipExitScene = false}, 106 | {anim = 'PROP_HUMAN_SEAT_BENCH',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 337.0, IsSittingAnim = true, skipExitScene = false}, 107 | {anim = 'PROP_HUMAN_SEAT_DECKCHAIR',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 337.0, IsSittingAnim = true, skipExitScene = false}, 108 | {anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 337.0, IsSittingAnim = true, skipExitScene = false}, 109 | {anim = 'PROP_HUMAN_SEAT_ARMCHAIR',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 337.0, IsSittingAnim = true, skipExitScene = false}, 110 | {anim = 'PROP_HUMAN_SEAT_CHAIR',right_left_X=0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 337.0, IsSittingAnim = true, skipExitScene = false}, 111 | {anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 337.0, IsSittingAnim = true, skipExitScene = false}, 112 | }, 113 | [2] = { 114 | { anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 337.0, IsSittingAnim = true, skipExitScene = false}, 115 | {anim = 'PROP_HUMAN_SEAT_BENCH',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 337.0, IsSittingAnim = true, skipExitScene = false}, 116 | {anim = 'PROP_HUMAN_SEAT_DECKCHAIR',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 337.0, IsSittingAnim = true, skipExitScene = false}, 117 | {anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 337.0, IsSittingAnim = true, skipExitScene = false}, 118 | {anim = 'PROP_HUMAN_SEAT_ARMCHAIR',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 337.0, IsSittingAnim = true, skipExitScene = false}, 119 | {anim = 'PROP_HUMAN_SEAT_CHAIR',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 337.0, IsSittingAnim = true, skipExitScene = false}, 120 | {anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',right_left_X= 0.0, forward_backwards_Y= 0.0, up_down_z= 0.0, Heading= 337.0, IsSittingAnim = true, skipExitScene = false}, 121 | }, 122 | }, 123 | }, 124 | { 125 | debug = false, 126 | multiSeat = { 127 | [1] = 'Seat 1', 128 | [2] = 'Seat 2', 129 | [3] = 'Seat 3', 130 | [4] = 'Seat 4', 131 | [5] = 'Seat 5', 132 | [6] = 'Seat 6'}, 133 | points = { 134 | [1] = vector3(117.27416992188, -1285.2950439453, 27.709495544434), 135 | [2] = vector3(117.7847442627, -1286.0751953125, 27.709495544434), 136 | [3] = vector3(117.89721679688, -1287.0910644531, 27.709495544434), 137 | [4] = vector3(117.52843475342, -1287.9949951172, 27.709495544434), 138 | [5] = vector3(116.78377532959, -1288.6329345703, 27.709495544434), 139 | [6] = vector3(115.82151031494, -1288.8482666016, 27.709495544434), 140 | [7] = vector3(114.88858032227, -1288.6027832031, 27.709495544434), 141 | [8] = vector3(115.11229705811, -1288.2104492188, 27.709495544434), 142 | [9] = vector3(115.82629394531, -1288.4145507813, 27.709495544434), 143 | [10] = vector3(116.5788269043, -1288.2364501953, 27.709495544434), 144 | [11] = vector3(117.17493438721, -1287.7376708984, 27.709495544434), 145 | [12] = vector3(117.49030303955, -1287.013671875, 27.709495544434), 146 | [13] = vector3(117.38103485107, -1286.24609375, 27.709495544434), 147 | [14] = vector3(116.97180175781, -1285.6248779297, 27.709495544434)}, 148 | thickness = 0.5,objName = false,options = {}, 149 | Seats = { 150 | [1] = vector3(117.41941833496, -1285.7042236328, 27.709495544434), 151 | [2] = vector3(117.75078582764, -1286.5720214844, 27.709495544434), 152 | [3] = vector3(117.63273620605, -1287.4932861328, 27.709495544434), 153 | [4] = vector3(117.10436248779, -1288.2294921875, 27.709495544434), 154 | [5] = vector3(116.28472137451, -1288.6520996094, 27.709495544434), 155 | [6] = vector3(115.37554931641, -1288.6126708984, 27.709495544434) 156 | }, 157 | Animations = { 158 | [1] = { 159 | [1] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_BENCH',Heading = 126.0}, 160 | [2] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 126.0}, 161 | [3] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',Heading = 126.0}, 162 | [4] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK',Heading = 126.0}, 163 | [5] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER',Heading = 126.0}, 164 | [6] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD',Heading = 126.0}, 165 | [7] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 126.0}, 166 | [8] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK',Heading = 126.0}, 167 | [9] = {right_left_X = 0.0,forward_backwards_Y = 0.1,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_ARMCHAIR',Heading = 126.0}, 168 | [10] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',Heading = 126.0}, 169 | [11] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR',Heading = 126.0}, 170 | [12] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',Heading = 126.0 } 171 | }, 172 | [2] = { 173 | [1] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_BENCH',Heading = 99.0}, 174 | [2] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 99.0}, 175 | [3] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',Heading = 99.0}, 176 | [4] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK',Heading = 99.0}, 177 | [5] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER',Heading = 99.0}, 178 | [6] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD',Heading = 99.0}, 179 | [7] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 99.0}, 180 | [8] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK',Heading = 99.0}, 181 | [9] = {right_left_X = 0.0,forward_backwards_Y = 0.1,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_ARMCHAIR',Heading = 99.0}, 182 | [10] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',Heading = 99.0}, 183 | [11] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR',Heading = 99.0}, 184 | [12] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',Heading = 99.0 } 185 | }, 186 | [3] = { 187 | [1] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_BENCH',Heading = 69.0}, 188 | [2] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 69.0}, 189 | [3] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',Heading = 69.0}, 190 | [4] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK',Heading = 69.0}, 191 | [5] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER',Heading = 69.0}, 192 | [6] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD',Heading = 69.0}, 193 | [7] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 69.0}, 194 | [8] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK',Heading = 69.0}, 195 | [9] = {right_left_X = 0.0,forward_backwards_Y = 0.1,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_ARMCHAIR',Heading = 69.0}, 196 | [10] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',Heading = 69.0}, 197 | [11] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR',Heading = 69.0}, 198 | [12] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',Heading = 69.0 } 199 | }, 200 | [4] = {[1] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_BENCH',Heading = 42.0}, 201 | [2] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 42.0}, 202 | [3] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',Heading = 42.0}, 203 | [4] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK',Heading = 42.0}, 204 | [5] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER',Heading = 42.0}, 205 | [6] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD',Heading = 42.0}, 206 | [7] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 42.0}, 207 | [8] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK',Heading = 42.0}, 208 | [9] = {right_left_X = 0.0,forward_backwards_Y = 0.1,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_ARMCHAIR',Heading = 42.0}, 209 | [10] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',Heading = 42.0}, 210 | [11] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR',Heading = 42.0}, 211 | [12] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',Heading = 42.0 } 212 | }, 213 | [5] = { 214 | [1] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_BENCH',Heading = 15.0}, 215 | [2] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 15.0}, 216 | [3] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',Heading = 15.0}, 217 | [4] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK',Heading = 15.0}, 218 | [5] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER',Heading = 15.0}, 219 | [6] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD',Heading = 15.0}, 220 | [7] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 15.0}, 221 | [8] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK',Heading = 15.0}, 222 | [9] = {right_left_X = 0.0,forward_backwards_Y = 0.1,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_ARMCHAIR',Heading = 15.0}, 223 | [10] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',Heading = 15.0}, 224 | [11] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR',Heading = 15.0}, 225 | [12] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',Heading = 15.0 } 226 | }, 227 | [6] = { 228 | [1] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_BENCH',Heading = -15.0}, 229 | [2] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = -15.0}, 230 | [3] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',Heading = -15.0}, 231 | [4] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK',Heading = -15.0}, 232 | [5] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER',Heading = -15.0}, 233 | [6] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD',Heading = -15.0}, 234 | [7] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = -15.0}, 235 | [8] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK',Heading = -15.0}, 236 | [9] = {right_left_X = 0.0,forward_backwards_Y = 0.1,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_ARMCHAIR',Heading = -15.0}, 237 | [10] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',Heading = -15.0}, 238 | [11] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR',Heading = -15.0}, 239 | [12] = {right_left_X = 0.0,forward_backwards_Y = 0.0,up_down_z = 0.03,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',Heading = -15.0 } 240 | } 241 | }, 242 | distance = 3.0 243 | }, 244 | { 245 | Animations = { 246 | [1] = { 247 | [1] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_BENCH',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 248 | [2] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 249 | [3] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 250 | [4] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 251 | [5] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 252 | [6] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 253 | [7] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 254 | [8] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 255 | [9] = {forward_backwards_Y = 0.1,anim = 'PROP_HUMAN_SEAT_ARMCHAIR',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 256 | [10] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 257 | [11] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 258 | [12] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03 } 259 | }, 260 | [2] = { 261 | [1] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_BENCH',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 262 | [2] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 263 | [3] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 264 | [4] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 265 | [5] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 266 | [6] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 267 | [7] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 268 | [8] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 269 | [9] = {forward_backwards_Y = 0.1,anim = 'PROP_HUMAN_SEAT_ARMCHAIR',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 270 | [10] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 271 | [11] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 272 | [12] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03 }, 273 | [13] = {forward_backwards_Y = 0.0,dict = "amb@world_human_bum_slumped@male@laying_on_left_side@idle_a",anim = "idle_b",Heading = 40.0,right_left_X = 0.0,up_down_z = 0.03 } 274 | }, 275 | [3] = { 276 | [1] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_BENCH',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 277 | [2] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 278 | [3] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 279 | [4] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 280 | [5] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 281 | [6] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 282 | [7] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 283 | [8] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 284 | [9] = {forward_backwards_Y = 0.1,anim = 'PROP_HUMAN_SEAT_ARMCHAIR',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 285 | [10] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 286 | [11] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03}, 287 | [12] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',Heading = 90.0,right_left_X = 0.0,up_down_z = 0.03 } 288 | }}, 289 | Seats = { 290 | [1] = vector3(479.06875610352, -1013.5661621094, 25.714420318604), 291 | [2] = vector3(479.04125976563, -1014.0377807617, 25.714420318604), 292 | [3] = vector3(479.05981445313, -1014.6130981445, 25.714420318604)}, 293 | multiSeat = { 294 | [1] = 'Seat 1', 295 | [2] = 'Seat 2', 296 | [3] = 'Seat 3'}, 297 | objName = false,points = { 298 | [1] = vector3(479.40832519531, -1013.1815795898, 25.714420318604), 299 | [2] = vector3(479.38970947266, -1014.9602050781, 25.714420318604), 300 | [3] = vector3(478.76089477539, -1015.0057983398, 25.714420318604), 301 | [4] = vector3(478.75662231445, -1013.1823120117, 25.714420318604)}, 302 | debug = false,distance = 3.0,thickness = 0.5,options = { } 303 | }, 304 | { 305 | Seats = { 306 | [1] = vector3(482.08450317383, -1013.4990234375, 25.714420318604), 307 | [2] = vector3(482.1028137207, -1014.0586547852, 25.714420318604), 308 | [3] = vector3(482.09121704102, -1014.6576538086, 25.714420318604)}, 309 | Animations = { 310 | [1] = { 311 | [1] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_BENCH'}, 312 | [2] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR'}, 313 | [3] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH'}, 314 | [4] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK'}, 315 | [5] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER'}, 316 | [6] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD'}, 317 | [7] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR'}, 318 | [8] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK'}, 319 | [9] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.1,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_ARMCHAIR'}, 320 | [10] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER'}, 321 | [11] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR'}, 322 | [12] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT' } 323 | }, 324 | [2] = { 325 | [1] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_BENCH'}, 326 | [2] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR'}, 327 | [3] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH'}, 328 | [4] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK'}, 329 | [5] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER'}, 330 | [6] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD'}, 331 | [7] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR'}, 332 | [8] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK'}, 333 | [9] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.1,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_ARMCHAIR'}, 334 | [10] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER'}, 335 | [11] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR'}, 336 | [12] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT' }, 337 | [13] = {forward_backwards_Y = 0.0,dict = "amb@world_human_bum_slumped@male@laying_on_left_side@idle_a",anim = "idle_b",Heading = 40.0,right_left_X = 0.0,up_down_z = 0.03 } 338 | 339 | }, 340 | [3] = { 341 | [1] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_BENCH'}, 342 | [2] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR'}, 343 | [3] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH'}, 344 | [4] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK'}, 345 | [5] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER'}, 346 | [6] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD'}, 347 | [7] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR'}, 348 | [8] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK'}, 349 | [9] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.1,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_ARMCHAIR'}, 350 | [10] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER'}, 351 | [11] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR'}, 352 | [12] = {right_left_X = 0.0,up_down_z = 0.03,forward_backwards_Y = 0.0,Heading = 90.0,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT' } 353 | }}, 354 | objName = false,points = { 355 | [1] = vector3(482.34799194336, -1013.1947021484, 25.714420318604), 356 | [2] = vector3(482.3606262207, -1014.97265625, 25.714420318604), 357 | [3] = vector3(481.79019165039, -1014.9653320313, 25.714420318604), 358 | [4] = vector3(481.77590942383, -1013.1640014648, 25.714420318604)}, 359 | distance = 3.0,options = {}, 360 | debug = false,multiSeat = { 361 | [1] = 'Seat 1', 362 | [2] = 'Seat 2', 363 | [3] = 'Seat 3'}, 364 | thickness = 0.5 365 | }, 366 | { 367 | thickness = 0.5,multiSeat = { 368 | [1] = 'Seat 1', 369 | [2] = 'Seat 2', 370 | [3] = 'Seat 3'}, 371 | Animations = { 372 | [1] = { 373 | [1] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_BENCH',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 374 | [2] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 375 | [3] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 376 | [4] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 377 | [5] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 378 | [6] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 379 | [7] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 380 | [8] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 381 | [9] = {forward_backwards_Y = 0.1,anim = 'PROP_HUMAN_SEAT_ARMCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 382 | [10] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 383 | [11] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 384 | [12] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0 }, 385 | 386 | }, 387 | [2] = { 388 | [1] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_BENCH',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 389 | [2] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 390 | [3] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 391 | [4] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 392 | [5] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 393 | [6] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 394 | [7] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 395 | [8] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 396 | [9] = {forward_backwards_Y = 0.1,anim = 'PROP_HUMAN_SEAT_ARMCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 397 | [10] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 398 | [11] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 399 | [12] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0 }, 400 | [13] = {forward_backwards_Y = 0.0,dict = "amb@world_human_bum_slumped@male@laying_on_left_side@idle_a",anim = "idle_b",Heading = 40.0,right_left_X = 0.0,up_down_z = 0.03 } 401 | }, 402 | [3] = { 403 | [1] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_BENCH',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 404 | [2] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 405 | [3] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 406 | [4] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 407 | [5] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 408 | [6] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 409 | [7] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 410 | [8] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 411 | [9] = {forward_backwards_Y = 0.1,anim = 'PROP_HUMAN_SEAT_ARMCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 412 | [10] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 413 | [11] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0}, 414 | [12] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',up_down_z = 0.03,right_left_X = 0.0,Heading = 84.0 } 415 | }}, 416 | distance = 3.0,points = { 417 | [1] = vector3(485.37326049805, -1013.19140625, 25.714420318604), 418 | [2] = vector3(485.36553955078, -1014.9572143555, 25.714420318604), 419 | [3] = vector3(484.73245239258, -1014.9544677734, 25.714420318604), 420 | [4] = vector3(484.77496337891, -1013.1900024414, 25.714420318604)}, 421 | objName = false,Seats = { 422 | [1] = vector3(485.07385253906, -1013.515625, 25.714420318604), 423 | [2] = vector3(485.10375976563, -1014.0911254883, 25.714420318604), 424 | [3] = vector3(485.06677246094, -1014.677734375, 25.714420318604)}, 425 | options = {}, 426 | debug = false 427 | }, 428 | { 429 | thickness = 0.5,multiSeat = { 430 | [1] = 'Seat 1', 431 | [2] = 'Seat 2', 432 | [3] = 'Seat 3'}, 433 | Animations = { 434 | [1] = { 435 | [1] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_BENCH',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 436 | [2] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 437 | [3] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 438 | [4] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 439 | [5] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 440 | [6] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 441 | [7] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 442 | [8] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 443 | [9] = {forward_backwards_Y = 0.1,anim = 'PROP_HUMAN_SEAT_ARMCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 444 | [10] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 445 | [11] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 446 | [12] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0 } 447 | }, 448 | [2] = { 449 | [1] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_BENCH',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 450 | [2] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 451 | [3] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 452 | [4] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 453 | [5] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 454 | [6] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 455 | [7] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 456 | [8] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 457 | [9] = {forward_backwards_Y = 0.1,anim = 'PROP_HUMAN_SEAT_ARMCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 458 | [10] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 459 | [11] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 460 | [12] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0 }, 461 | [13] = {forward_backwards_Y = 0.0,dict = "amb@world_human_bum_slumped@male@laying_on_left_side@idle_a",anim = "idle_b",Heading = 40.0,right_left_X = 0.0,up_down_z = 0.03 } 462 | }, 463 | [3] = { 464 | [1] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_BENCH',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 465 | [2] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 466 | [3] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_STRIP_WATCH',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 467 | [4] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 468 | [5] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_DRINK_BEER',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 469 | [6] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_FOOD',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 470 | [7] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 471 | [8] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_DECKCHAIR_DRINK',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 472 | [9] = {forward_backwards_Y = 0.1,anim = 'PROP_HUMAN_SEAT_ARMCHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 473 | [10] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_MP_PLAYER',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 474 | [11] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0}, 475 | [12] = {forward_backwards_Y = 0.0,anim = 'PROP_HUMAN_SEAT_CHAIR_UPRIGHT',up_down_z = 0.03,right_left_X = 0.0,Heading = 90.0 } 476 | }}, 477 | distance = 3.0,points = { 478 | [1] = vector3(488.39898681641, -1013.198425293, 25.714420318604), 479 | [2] = vector3(488.39419555664, -1015.018737793, 25.714420318604), 480 | [3] = vector3(487.80294799805, -1015.0021972656, 25.714420318604), 481 | [4] = vector3(487.74688720703, -1013.2079467773, 25.714420318604)}, 482 | objName = false,Seats = { 483 | [1] = vector3(488.12362670898, -1013.451171875, 25.714420318604), 484 | [2] = vector3(488.11608886719, -1014.0661621094, 25.714420318604), 485 | [3] = vector3(488.12646484375, -1014.6857299805, 25.714420318604)}, 486 | options = {}, 487 | debug = false 488 | }, 489 | 490 | 491 | { 492 | distance = 3.0,thickness = 0.4,Seats = { 493 | [1] = vector3(116.00419616699, -1303.2521972656, 27.718423843384), 494 | [2] = vector3(116.26703643799, -1304.2945556641, 27.718423843384), 495 | [3] = vector3(115.51490020752, -1305.0275878906, 27.718423843384)}, 496 | debug = false,Animations = { 497 | [1] = { 498 | [1] = {anim = 'ld_girl_a_song_a_p2_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = 115.0,up_down_z = 0.03,right_left_X = 0.0}, 499 | [2] = {anim = 'ld_girl_a_song_a_p2_no_touch_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = 115.0,up_down_z = 0.03,right_left_X = 0.0}, 500 | 501 | }, 502 | 503 | [2] = { 504 | [1] = {anim = 'ld_girl_a_song_a_p2_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = 69.0,up_down_z = 0.03,right_left_X = 0.0}, 505 | [2] = {anim = 'ld_girl_a_song_a_p2_no_touch_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = 69.0,up_down_z = 0.03,right_left_X = 0.0}, 506 | 507 | }, 508 | 509 | [3] = { 510 | [1] = {anim = 'ld_girl_a_song_a_p2_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = 36.0,up_down_z = 0.03,right_left_X = 0.0}, 511 | [2] = {anim = 'ld_girl_a_song_a_p2_no_touch_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = 36.0,up_down_z = 0.03,right_left_X = 0.0}, 512 | 513 | }}, 514 | options = {}, 515 | points = { 516 | [1] = vector3(115.90442657471, -1302.8203125, 28.718423843384), 517 | [2] = vector3(116.39591217041, -1303.6473388672, 28.718423843384), 518 | [3] = vector3(116.49176025391, -1304.3280029297, 28.718423843384), 519 | [4] = vector3(116.0274887085, -1304.8728027344, 28.718423843384), 520 | [5] = vector3(115.21933746338, -1305.3878173828, 28.718423843384), 521 | [6] = vector3(115.0094833374, -1305.0283203125, 28.718423843384), 522 | [7] = vector3(115.85461425781, -1304.5288085938, 28.718423843384), 523 | [8] = vector3(116.06385803223, -1304.2210693359, 28.718423843384), 524 | [9] = vector3(116.03128814697, -1303.8497314453, 28.718423843384), 525 | [10] = vector3(115.55877685547, -1303.0157470703, 28.718423843384)}, 526 | objName = false,multiSeat = { 527 | [1] = 'Seat 1', 528 | [2] = 'Seat 2', 529 | [3] = 'Seat 3' } 530 | }, 531 | 532 | 533 | { 534 | multiSeat = { 535 | [1] = 'Seat 1', 536 | [2] = 'Seat 2', 537 | [3] = 'Seat 3', 538 | [4] = 'Seat 4', 539 | [5] = 'Seat 5'}, 540 | objName = false,options = {}, 541 | distance = 3.0,Seats = { 542 | [1] = vector3(110.54208374023, -1303.1174316406, 27.718423843384), 543 | [2] = vector3(110.30099487305, -1302.0941162109, 27.718423843384), 544 | [3] = vector3(110.98262786865, -1301.3988037109, 27.718423843384), 545 | [4] = vector3(111.87380218506, -1300.9162597656, 27.718423843384), 546 | [5] = vector3(112.74237060547, -1300.3825683594, 27.718423843384)}, 547 | debug = false,thickness = 0.4,points = { 548 | [1] = vector3(110.62606048584, -1303.5769042969, 28.718423843384), 549 | [2] = vector3(110.12077331543, -1302.6779785156, 28.718423843384), 550 | [3] = vector3(110.06690216064, -1302.0305175781, 28.718423843384), 551 | [4] = vector3(110.49078369141, -1301.4782714844, 28.718423843384), 552 | [5] = vector3(113.06092071533, -1300.0, 28.718423843384), 553 | [6] = vector3(113.24236297607, -1300.3798828125, 28.718423843384), 554 | [7] = vector3(110.74659729004, -1301.8682861328, 28.718423843384), 555 | [8] = vector3(110.44230651855, -1302.1905517578, 28.718423843384), 556 | [9] = vector3(110.51481628418, -1302.5498046875, 28.718423843384), 557 | [10] = vector3(110.96960449219, -1303.3684082031, 28.718423843384)}, 558 | Animations = { 559 | [1] = { 560 | [1] = {anim = 'ld_girl_a_song_a_p2_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = -60.0,up_down_z = 0.03,right_left_X = 0.0}, 561 | [2] = {anim = 'ld_girl_a_song_a_p2_no_touch_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = -60.0,up_down_z = 0.03,right_left_X = 0.0}, 562 | }, 563 | 564 | [2] = { 565 | [1] = {anim = 'ld_girl_a_song_a_p2_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = -105.0,up_down_z = 0.03,right_left_X = 0.0}, 566 | [2] = {anim = 'ld_girl_a_song_a_p2_no_touch_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = -105.0,up_down_z = 0.03,right_left_X = 0.0}, 567 | }, 568 | 569 | [3] = { 570 | [1] = {anim = 'ld_girl_a_song_a_p2_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = -150.0,up_down_z = 0.03,right_left_X = 0.0}, 571 | [2] = {anim = 'ld_girl_a_song_a_p2_no_touch_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = -150.0,up_down_z = 0.03,right_left_X = 0.0}, 572 | }, 573 | 574 | [4] = { 575 | [1] = {anim = 'ld_girl_a_song_a_p2_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = -153.0,up_down_z = 0.03,right_left_X = 0.0}, 576 | [2] = {anim = 'ld_girl_a_song_a_p2_no_touch_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = -153.0,up_down_z = 0.03,right_left_X = 0.0}, 577 | }, 578 | 579 | [5] = { 580 | [1] = {anim = 'ld_girl_a_song_a_p2_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = -153.0,up_down_z = 0.03,right_left_X = 0.0}, 581 | [2] = {anim = 'ld_girl_a_song_a_p2_no_touch_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = -153.0,up_down_z = 0.03,right_left_X = 0.0}, 582 | } 583 | } 584 | }, 585 | 586 | 587 | { 588 | debug = false,options = {}, 589 | distance = 3.0,points = { 590 | [1] = vector3(114.21382904053, -1305.9835205078, 28.718423843384), 591 | [2] = vector3(113.36971282959, -1306.4696044922, 28.718423843384), 592 | [3] = vector3(112.67283630371, -1306.5609130859, 28.718423843384), 593 | [4] = vector3(112.11418151855, -1306.1372070313, 28.718423843384), 594 | [5] = vector3(111.62317657471, -1305.3079833984, 28.718423843384), 595 | [6] = vector3(112.01596069336, -1305.0570068359, 28.718423843384), 596 | [7] = vector3(112.47190093994, -1305.8961181641, 28.718423843384), 597 | [8] = vector3(112.77243804932, -1306.1457519531, 28.718423843384), 598 | [9] = vector3(113.13082885742, -1306.11328125, 28.718423843384), 599 | [10] = vector3(113.97688293457, -1305.6417236328, 28.718423843384)}, 600 | thickness = 0.4,Seats = { 601 | [1] = vector3(113.72577667236, -1306.0285644531, 27.718423843384), 602 | [2] = vector3(112.72461700439, -1306.3709716797, 27.718423843384), 603 | [3] = vector3(112.0121307373, -1305.6151123047, 27.718423843384)}, 604 | Animations = { 605 | [1] = { 606 | [1] = {anim = 'ld_girl_a_song_a_p2_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = 30.0,up_down_z = 0.03,right_left_X = 0.0}, 607 | [2] = {anim = 'ld_girl_a_song_a_p2_no_touch_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = 30.0,up_down_z = 0.03,right_left_X = 0.0}, 608 | 609 | }, 610 | 611 | [2] = { 612 | [1] = {anim = 'ld_girl_a_song_a_p2_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = -15.0,up_down_z = 0.03,right_left_X = 0.0}, 613 | [2] = {anim = 'ld_girl_a_song_a_p2_no_touch_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = -15.0,up_down_z = 0.03,right_left_X = 0.0}, 614 | 615 | }, 616 | 617 | [3] = { 618 | [1] = {anim = 'ld_girl_a_song_a_p2_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = -60.0,up_down_z = 0.03,right_left_X = 0.0}, 619 | [2] = {anim = 'ld_girl_a_song_a_p2_no_touch_m', dict = "mini@strip_club@lap_dance@ld_girl_a_song_a_p2",forward_backwards_Y = 0.0,Heading = -60.0,up_down_z = 0.03,right_left_X = 0.0}, 620 | 621 | }}, 622 | multiSeat = { 623 | [1] = 'Seat 1', 624 | [2] = 'Seat 2', 625 | [3] = 'Seat 3'}, 626 | objName = false}, 627 | } -------------------------------------------------------------------------------- /Syn_Sit/client/client.lua: -------------------------------------------------------------------------------- 1 | ---$$$$$$\ $$\ $$\ $$\ $$\ $$$$$$\ $$$$$$\ $$$$$$$\ $$$$$$\ $$$$$$$\ $$$$$$$$\ $$$$$$\ 2 | --$$ __$$\\$$\ $$ |$$$\ $$ |$$ __$$\ $$ __$$\ $$ __$$\ \_$$ _|$$ __$$\\__$$ __|$$ __$$\ 3 | --$$ / \__|\$$\ $$ / $$$$\ $$ |$$ / \__|$$ / \__|$$ | $$ | $$ | $$ | $$ | $$ | $$ / \__| 4 | --\$$$$$$\ \$$$$ / $$ $$\$$ |\$$$$$$\ $$ | $$$$$$$ | $$ | $$$$$$$ | $$ | \$$$$$$\ 5 | ---\____$$\ \$$ / $$ \$$$$ | \____$$\ $$ | $$ __$$< $$ | $$ ____/ $$ | \____$$\ 6 | --$$\ $$ | $$ | $$ |\$$$ |$$\ $$ |$$ | $$\ $$ | $$ | $$ | $$ | $$ | $$\ $$ | 7 | --\$$$$$$ | $$ | $$ | \$$ |\$$$$$$ |\$$$$$$ |$$ | $$ |$$$$$$\ $$ | $$ | \$$$$$$ | 8 | ---\______/ \__| \__| \__| \______/ \______/ \__| \__|\______|\__| \__| \______/ 9 | local PlayerPed = false 10 | local PlayerPos = false 11 | local PlayerLastPos = 0 12 | local current = nil 13 | InUse = false 14 | currentmenu = nil 15 | inScenario = false 16 | debug = false 17 | local MultiKey = false 18 | 19 | --///////////////////////////////__CAMERA__\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 20 | local cam = nil 21 | local radius = 1.5 22 | local angleY = 0.0 23 | local angleZ = 0.0 24 | local CameraZOffset = 0.5 25 | --///////////////////////////////__CAMERA__\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 26 | Citizen.CreateThread(function() 27 | Wait(500) 28 | 29 | for i = 1, #Config.PolySeats do 30 | local NewIndex = #Config.objects + 1 31 | Config.objects[NewIndex] = Config.PolySeats[i] 32 | if Config.objects[NewIndex] then 33 | Config.objects[NewIndex].IsPolySeat = true 34 | end 35 | Wait(5) 36 | end 37 | 38 | for i = 1, #Config.custom_seats do 39 | local NewIndex = #Config.objects + 1 40 | Config.objects[NewIndex] = Config.custom_seats[i] 41 | if Config.objects[NewIndex] then 42 | Config.objects[NewIndex].IsCustomSeat = true 43 | end 44 | Wait(5) 45 | end 46 | 47 | for i = 1, #Config.objects do 48 | Wait(50) 49 | options = {} 50 | OxParams = {} 51 | TargetOptions = {} 52 | if Config.objects[i] then 53 | if Config.TargetSytem == 'OX' then 54 | if Config.objects[i].objName then 55 | if Config.objects[i].multiSeat then 56 | for z = 1, #Config.objects[i].Animations do 57 | Wait(10) 58 | OXtargetOption = { 59 | name = Config.OxContextName .. z, 60 | icon = 'fas fa-chair', 61 | label = Config.OxTargetLabel .. Config.objects[i].multiSeat[z], 62 | distance = 2.0, 63 | canInteract = function(entity, distance, coords, name) 64 | return DoesEntityExist(entity) 65 | end, 66 | TableRun = Config.objects[i].Animations , 67 | IndexKey = i, 68 | MultiKey = z, 69 | onSelect = function(dataTarg) 70 | for o = 1, #dataTarg.TableRun[dataTarg.MultiKey] do 71 | Wait(10) 72 | local CurrentAnim_Key = Config.objects[dataTarg.IndexKey].Animations[dataTarg.MultiKey][o].anim 73 | local CurrentDict_Key = Config.objects[dataTarg.IndexKey].Animations[dataTarg.MultiKey][o].dict 74 | if CurrentDict_Key and Config.AnimDescriptions[CurrentDict_Key] and Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key] then 75 | dataTarg.TableRun[dataTarg.MultiKey][o].description = Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key].description 76 | dataTarg.TableRun[dataTarg.MultiKey][o].title = Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key].title 77 | elseif Config.AnimDescriptions[CurrentAnim_Key] then 78 | dataTarg.TableRun[dataTarg.MultiKey][o].description = Config.AnimDescriptions[CurrentAnim_Key].description 79 | dataTarg.TableRun[dataTarg.MultiKey][o].title = Config.AnimDescriptions[CurrentAnim_Key].title 80 | end 81 | local NewInfo = { 82 | title = dataTarg.TableRun[dataTarg.MultiKey][o].title, 83 | description = dataTarg.TableRun[dataTarg.MultiKey][o].description, 84 | args = { 85 | current = Config.objects[dataTarg.IndexKey], 86 | ActiveAnimIndex = o, 87 | entity = dataTarg.entity, 88 | coords = dataTarg.coords, 89 | }, 90 | onSelect = function(data) 91 | data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex].object = data.entity 92 | data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex].DynamicHeading = data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex].DynamicHeading or false 93 | TriggerEvent('ChairBedSystem:Client:Animation', data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex], data.coords, dataTarg.IndexKey , data.ActiveAnimIndex ,dataTarg.MultiKey) 94 | InUse = data.current 95 | InUse.details = data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex] 96 | SeatActivation() 97 | end 98 | } 99 | options[#options+1] = NewInfo 100 | if Config.Debug then 101 | print("Table Added " ) print(NewInfo) 102 | print("_________________________________") 103 | end 104 | end 105 | 106 | local menuTitle = Config.OxContextMenuTitle .. Config.objects[dataTarg.IndexKey].multiSeat[dataTarg.MultiKey] 107 | local menuId = "Seat id " .. dataTarg.IndexKey 108 | lib.registerContext({ 109 | id = menuId, 110 | title = menuTitle, 111 | options = options 112 | }) 113 | lib.showContext(menuId, dataTarg) 114 | options = {} 115 | currentmenu = menuId 116 | end 117 | } 118 | TargetOptions[#TargetOptions+1] = OXtargetOption 119 | OXtargetOption = {} 120 | end 121 | else 122 | OXtargetOption = { 123 | name = 'Seat Sytle', 124 | icon = 'fas fa-chair', 125 | label = Config.OxTargetLabel, 126 | distance = 2.0, 127 | canInteract = function(entity, distance, coords, name) 128 | return DoesEntityExist(entity) 129 | end, 130 | TableRun = Config.objects[i].Animations , 131 | IndexKey = i, 132 | onSelect = function(dataTarg) 133 | for o = 1, #dataTarg.TableRun do 134 | 135 | local CurrentAnim_Key = Config.objects[dataTarg.IndexKey].Animations[o].anim 136 | local CurrentDict_Key = Config.objects[dataTarg.IndexKey].Animations[o].dict 137 | 138 | if CurrentDict_Key and Config.AnimDescriptions[CurrentDict_Key] and Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key] then 139 | dataTarg.TableRun[o].description = Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key].description 140 | dataTarg.TableRun[o].title = Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key].title 141 | elseif Config.AnimDescriptions[CurrentAnim_Key] then 142 | dataTarg.TableRun[o].description = Config.AnimDescriptions[CurrentAnim_Key].description 143 | dataTarg.TableRun[o].title = Config.AnimDescriptions[CurrentAnim_Key].title 144 | end 145 | Wait(10) 146 | 147 | local checkcoords = GetOffsetFromEntityInWorldCoords(dataTarg.entity,dataTarg.TableRun[o].right_left_X,dataTarg.TableRun[o].forward_backwards_Y,dataTarg.TableRun[o].up_down_z) 148 | -- local poscheck = IsPositionOccupied(checkcoords,0.3,false, false,true, 1,1,true,1) 149 | local NewInfo = { 150 | title = dataTarg.TableRun[o].title, 151 | description = dataTarg.TableRun[o].description, 152 | args = { 153 | current = Config.objects[dataTarg.IndexKey], 154 | ActiveAnimIndex = o, 155 | entity = dataTarg.entity, 156 | coords = dataTarg.coords, 157 | }, 158 | onSelect = function(data) 159 | if Config.Debug then 160 | for k,v in pairs(data) do 161 | print(k,v) 162 | end 163 | if not data.current.Animations[data.ActiveAnimIndex] then 164 | data.ActiveAnimIndex = 1 165 | end 166 | for k,v in pairs(data.current.Animations[data.ActiveAnimIndex] ) do 167 | print(k,v) 168 | end 169 | end 170 | 171 | 172 | data.current.Animations[data.ActiveAnimIndex].object = data.entity 173 | 174 | data.current.Animations[data.ActiveAnimIndex].DynamicHeading = data.current.Animations[data.ActiveAnimIndex].DynamicHeading or false 175 | TriggerEvent('ChairBedSystem:Client:Animation', data.current.Animations[data.ActiveAnimIndex], data.coords , data.IndexKey , data.ActiveAnimIndex ) 176 | InUse = data.current 177 | InUse.details = data.current.Animations[data.ActiveAnimIndex] 178 | SeatActivation() 179 | end 180 | } 181 | options[#options+1] = NewInfo 182 | if Config.Debug then 183 | print("Table Added " ) print(NewInfo) 184 | print("_________________________________") 185 | end 186 | end 187 | local menuTitle = Config.OxContextMenuTitle 188 | local menuId = "Seat id " .. dataTarg.IndexKey 189 | lib.registerContext({ 190 | id = menuId, 191 | title = menuTitle, 192 | options = options 193 | }) 194 | lib.showContext(menuId, dataTarg) 195 | options = {} 196 | currentmenu = menuId 197 | end 198 | } 199 | TargetOptions[#TargetOptions+1] = OXtargetOption 200 | end 201 | else 202 | if Config.objects[i].multiSeat then 203 | OxParams ={ 204 | --coords = Config.objects[i].SeatCoords, 205 | --size = vector3(1.0,2.0,1.0), 206 | --rotation = -20.0, 207 | --drawSprite = true, 208 | points = Config.objects[i].points, 209 | thickness = Config.objects[i].thickness, 210 | debug = Config.objects[i].debug, 211 | options = {}, 212 | name = 'Seat Sytle', 213 | icon = 'fas fa-chair', 214 | label = Config.OxTargetLabel, 215 | distance = 2.0, 216 | } 217 | for z = 1, #Config.objects[i].Animations do 218 | Wait(10) 219 | OXtargetOption = { 220 | name = Config.OxContextName .. z, 221 | icon = 'fas fa-chair', 222 | label = Config.OxContextLabel .. Config.objects[i].multiSeat[z], 223 | distance = 2.0, 224 | canInteract = function(entity, distance, coords, name) 225 | return distance < Config.objects[i].distance 226 | end, 227 | TableRun = Config.objects[i].Animations , 228 | IndexKey = i, 229 | MultiKey = z, 230 | onSelect = function(dataTarg) 231 | for o = 1, #dataTarg.TableRun[dataTarg.MultiKey] do 232 | 233 | local CurrentAnim_Key = Config.objects[dataTarg.IndexKey].Animations[dataTarg.MultiKey][o].anim 234 | local CurrentDict_Key = Config.objects[dataTarg.IndexKey].Animations[dataTarg.MultiKey][o].dict 235 | if CurrentDict_Key and Config.AnimDescriptions[CurrentDict_Key] and Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key] then 236 | dataTarg.TableRun[dataTarg.MultiKey][o].description = Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key].description 237 | dataTarg.TableRun[dataTarg.MultiKey][o].title = Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key].title 238 | elseif Config.AnimDescriptions[CurrentAnim_Key] then 239 | dataTarg.TableRun[dataTarg.MultiKey][o].description = Config.AnimDescriptions[CurrentAnim_Key].description 240 | dataTarg.TableRun[dataTarg.MultiKey][o].title = Config.AnimDescriptions[CurrentAnim_Key].title 241 | end 242 | 243 | Wait(10) 244 | local NewInfo = { 245 | title = dataTarg.TableRun[dataTarg.MultiKey][o].title, 246 | description = dataTarg.TableRun[dataTarg.MultiKey][o].description, 247 | args = { 248 | current = Config.objects[dataTarg.IndexKey], 249 | ActiveAnimIndex = o, 250 | coords = Config.objects[i].Seats[z], 251 | }, 252 | onSelect = function(data) 253 | data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex].DynamicHeading = data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex].DynamicHeading or false 254 | TriggerEvent('ChairBedSystem:Client:AnimationCooordsBased', data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex], data.coords, dataTarg.IndexKey , data.ActiveAnimIndex ,dataTarg.MultiKey) 255 | InUse = data.current 256 | InUse.details = data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex] 257 | SeatActivation() 258 | end 259 | } 260 | options[#options+1] = NewInfo 261 | if Config.Debug then 262 | print("Table Added " ) print(NewInfo) 263 | print("_________________________________") 264 | end 265 | end 266 | local menuTitle = Config.OxContextMenuTitle .. Config.objects[dataTarg.IndexKey].multiSeat[dataTarg.MultiKey] 267 | local menuId = "Seat id " .. dataTarg.IndexKey 268 | lib.registerContext({ 269 | id = menuId, 270 | title = menuTitle, 271 | options = options 272 | }) 273 | lib.showContext(menuId, dataTarg) 274 | options = {} 275 | currentmenu = menuId 276 | end 277 | } 278 | TargetOptions[#TargetOptions+1] = OXtargetOption 279 | OXtargetOption = {} 280 | end 281 | end 282 | end 283 | if #TargetOptions > 0 then 284 | if Config.objects[i].objName then 285 | exports.ox_target:addModel(Config.objects[i].objName, TargetOptions) 286 | elseif Config.objects[i].points then 287 | OxParams.options= TargetOptions 288 | --exports.ox_target:addBoxZone(OxParams) 289 | ZoneID = exports.ox_target:addPolyZone(OxParams) 290 | Config.objects[i].ZoneID = ZoneID 291 | end 292 | end 293 | elseif Config.TargetSytem == 'QB' then 294 | if Config.objects[i].objName then 295 | if Config.objects[i].multiSeat then 296 | for z = 1, #Config.objects[i].Animations do 297 | Wait(10) 298 | OXtargetOption = { 299 | name = Config.OxContextName .. z, 300 | icon = 'fas fa-chair', 301 | label = Config.OxTargetLabel .. Config.objects[i].multiSeat[z], 302 | distance = 2.0, 303 | canInteract = function(entity, distance, coords, name) 304 | return DoesEntityExist(entity) 305 | end, 306 | TableRun = Config.objects[i].Animations , 307 | IndexKey = i, 308 | MultiKey = z, 309 | action = function(entity) 310 | dataTarg = {entity = entity, coords = GetEntityCoords(entity),IndexKey = i, TableRun = Config.objects[i].Animations, MultiKey = z} 311 | for o = 1, #dataTarg.TableRun[dataTarg.MultiKey] do 312 | Wait(10) 313 | local CurrentAnim_Key = Config.objects[dataTarg.IndexKey].Animations[dataTarg.MultiKey][o].anim 314 | local CurrentDict_Key = Config.objects[dataTarg.IndexKey].Animations[dataTarg.MultiKey][o].dict 315 | if CurrentDict_Key and Config.AnimDescriptions[CurrentDict_Key] and Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key] then 316 | dataTarg.TableRun[dataTarg.MultiKey][o].description = Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key].description 317 | dataTarg.TableRun[dataTarg.MultiKey][o].title = Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key].title 318 | elseif Config.AnimDescriptions[CurrentAnim_Key] then 319 | dataTarg.TableRun[dataTarg.MultiKey][o].description = Config.AnimDescriptions[CurrentAnim_Key].description 320 | dataTarg.TableRun[dataTarg.MultiKey][o].title = Config.AnimDescriptions[CurrentAnim_Key].title 321 | end 322 | local NewInfo = { 323 | title = dataTarg.TableRun[dataTarg.MultiKey][o].title, 324 | description = dataTarg.TableRun[dataTarg.MultiKey][o].description, 325 | args = { 326 | current = Config.objects[dataTarg.IndexKey], 327 | ActiveAnimIndex = o, 328 | entity = dataTarg.entity, 329 | coords = dataTarg.coords, 330 | }, 331 | onSelect = function(data) 332 | data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex].object = data.entity 333 | data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex].DynamicHeading = data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex].DynamicHeading or false 334 | TriggerEvent('ChairBedSystem:Client:Animation', data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex], data.coords, dataTarg.IndexKey , data.ActiveAnimIndex ,dataTarg.MultiKey) 335 | InUse = data.current 336 | InUse.details = data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex] 337 | SeatActivation() 338 | end 339 | } 340 | options[#options+1] = NewInfo 341 | if Config.Debug then 342 | print("Table Added " ) print(NewInfo) 343 | print("_________________________________") 344 | end 345 | end 346 | 347 | local menuTitle = Config.OxContextMenuTitle .. Config.objects[dataTarg.IndexKey].multiSeat[dataTarg.MultiKey] 348 | local menuId = "Seat id " .. dataTarg.IndexKey 349 | lib.registerContext({ 350 | id = menuId, 351 | title = menuTitle, 352 | options = options 353 | }) 354 | lib.showContext(menuId, dataTarg) 355 | options = {} 356 | currentmenu = menuId 357 | end 358 | } 359 | TargetOptions[#TargetOptions+1] = OXtargetOption 360 | OXtargetOption = {} 361 | end 362 | else 363 | OXtargetOption = { 364 | name = 'Seat Sytle', 365 | icon = 'fas fa-chair', 366 | label = Config.OxTargetLabel, 367 | distance = 2.0, 368 | canInteract = function(entity, distance, coords, name) 369 | return DoesEntityExist(entity) 370 | end, 371 | TableRun = Config.objects[i].Animations , 372 | IndexKey = i, 373 | action = function(entity) 374 | dataTarg = {entity = entity, coords = GetEntityCoords(entity),IndexKey = i, TableRun = Config.objects[i].Animations} 375 | for o = 1, #dataTarg.TableRun do 376 | 377 | local CurrentAnim_Key = Config.objects[dataTarg.IndexKey].Animations[o].anim 378 | local CurrentDict_Key = Config.objects[dataTarg.IndexKey].Animations[o].dict 379 | 380 | if CurrentDict_Key and Config.AnimDescriptions[CurrentDict_Key] and Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key] then 381 | dataTarg.TableRun[o].description = Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key].description 382 | dataTarg.TableRun[o].title = Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key].title 383 | elseif Config.AnimDescriptions[CurrentAnim_Key] then 384 | dataTarg.TableRun[o].description = Config.AnimDescriptions[CurrentAnim_Key].description 385 | dataTarg.TableRun[o].title = Config.AnimDescriptions[CurrentAnim_Key].title 386 | end 387 | Wait(10) 388 | 389 | local checkcoords = GetOffsetFromEntityInWorldCoords(dataTarg.entity,dataTarg.TableRun[o].right_left_X,dataTarg.TableRun[o].forward_backwards_Y,dataTarg.TableRun[o].up_down_z) 390 | -- local poscheck = IsPositionOccupied(checkcoords,0.3,false, false,true, 1,1,true,1) 391 | local NewInfo = { 392 | title = dataTarg.TableRun[o].title, 393 | description = dataTarg.TableRun[o].description, 394 | args = { 395 | current = Config.objects[dataTarg.IndexKey], 396 | ActiveAnimIndex = o, 397 | entity = dataTarg.entity, 398 | coords = dataTarg.coords, 399 | }, 400 | onSelect = function(data) 401 | if Config.Debug then 402 | for k,v in pairs(data) do 403 | print(k,v) 404 | end 405 | if not data.current.Animations[data.ActiveAnimIndex] then 406 | data.ActiveAnimIndex = 1 407 | end 408 | for k,v in pairs(data.current.Animations[data.ActiveAnimIndex] ) do 409 | print(k,v) 410 | end 411 | end 412 | 413 | 414 | data.current.Animations[data.ActiveAnimIndex].object = data.entity 415 | 416 | data.current.Animations[data.ActiveAnimIndex].DynamicHeading = data.current.Animations[data.ActiveAnimIndex].DynamicHeading or false 417 | TriggerEvent('ChairBedSystem:Client:Animation', data.current.Animations[data.ActiveAnimIndex], data.coords , data.IndexKey , data.ActiveAnimIndex ) 418 | InUse = data.current 419 | InUse.details = data.current.Animations[data.ActiveAnimIndex] 420 | SeatActivation() 421 | end 422 | } 423 | options[#options+1] = NewInfo 424 | if Config.Debug then 425 | print("Table Added " ) print(NewInfo) 426 | print("_________________________________") 427 | end 428 | end 429 | local menuTitle = Config.OxContextMenuTitle 430 | local menuId = "Seat id " .. dataTarg.IndexKey 431 | lib.registerContext({ 432 | id = menuId, 433 | title = menuTitle, 434 | options = options 435 | }) 436 | lib.showContext(menuId, dataTarg) 437 | options = {} 438 | currentmenu = menuId 439 | end 440 | } 441 | TargetOptions[#TargetOptions+1] = OXtargetOption 442 | end 443 | else 444 | if Config.objects[i].multiSeat then 445 | OxParams ={ 446 | --coords = Config.objects[i].SeatCoords, 447 | --size = vector3(1.0,2.0,1.0), 448 | --rotation = -20.0, 449 | --drawSprite = true, 450 | points = Config.objects[i].points, 451 | thickness = Config.objects[i].thickness, 452 | 453 | minZ = Config.objects[i].points[1].z, -- This is the bottom of the polyzone, this can be different from the Z value in the coords, this has to be a float value 454 | maxZ = Config.objects[i].points[1].z + Config.objects[i].thickness, -- This is the top of the polyzone, this can be different from the Z value in the coords, this has to be a float value 455 | 456 | 457 | debugPoly = Config.objects[i].debug, 458 | 459 | name = 'Seat Sytle', 460 | icon = 'fas fa-chair', 461 | label = Config.OxTargetLabel, 462 | distance = 2.0, 463 | } 464 | for z = 1, #Config.objects[i].Animations do 465 | Wait(10) 466 | OXtargetOption = { 467 | name = Config.OxContextName .. z, 468 | icon = 'fas fa-chair', 469 | label = Config.OxContextLabel .. Config.objects[i].multiSeat[z], 470 | distance = 2.0, 471 | canInteract = function(entity, distance, coords, name) 472 | return distance < Config.objects[i].distance 473 | end, 474 | TableRun = Config.objects[i].Animations , 475 | IndexKey = i, 476 | MultiKey = z, 477 | action = function(entity) 478 | dataTarg = {IndexKey = i, MultiKey = z, TableRun = Config.objects[i].Animations} 479 | for o = 1, #dataTarg.TableRun[dataTarg.MultiKey] do 480 | 481 | local CurrentAnim_Key = Config.objects[dataTarg.IndexKey].Animations[dataTarg.MultiKey][o].anim 482 | local CurrentDict_Key = Config.objects[dataTarg.IndexKey].Animations[dataTarg.MultiKey][o].dict 483 | if CurrentDict_Key and Config.AnimDescriptions[CurrentDict_Key] and Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key] then 484 | dataTarg.TableRun[dataTarg.MultiKey][o].description = Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key].description 485 | dataTarg.TableRun[dataTarg.MultiKey][o].title = Config.AnimDescriptions[CurrentDict_Key][CurrentAnim_Key].title 486 | elseif Config.AnimDescriptions[CurrentAnim_Key] then 487 | dataTarg.TableRun[dataTarg.MultiKey][o].description = Config.AnimDescriptions[CurrentAnim_Key].description 488 | dataTarg.TableRun[dataTarg.MultiKey][o].title = Config.AnimDescriptions[CurrentAnim_Key].title 489 | end 490 | 491 | Wait(10) 492 | local NewInfo = { 493 | title = dataTarg.TableRun[dataTarg.MultiKey][o].title, 494 | description = dataTarg.TableRun[dataTarg.MultiKey][o].description, 495 | args = { 496 | current = Config.objects[dataTarg.IndexKey], 497 | ActiveAnimIndex = o, 498 | coords = Config.objects[i].Seats[z], 499 | }, 500 | onSelect = function(data) 501 | print(data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex], data.coords, dataTarg.IndexKey , data.ActiveAnimIndex ,dataTarg.MultiKey) 502 | 503 | data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex].DynamicHeading = data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex].DynamicHeading or false 504 | TriggerEvent('ChairBedSystem:Client:AnimationCooordsBased', data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex], data.coords, dataTarg.IndexKey , data.ActiveAnimIndex ,dataTarg.MultiKey) 505 | InUse = data.current 506 | InUse.details = data.current.Animations[dataTarg.MultiKey][data.ActiveAnimIndex] 507 | SeatActivation() 508 | end 509 | } 510 | options[#options+1] = NewInfo 511 | if Config.Debug then 512 | print("Table Added " ) print(NewInfo) 513 | print("_________________________________") 514 | end 515 | end 516 | local menuTitle = Config.OxContextMenuTitle .. Config.objects[dataTarg.IndexKey].multiSeat[dataTarg.MultiKey] 517 | local menuId = "Seat id " .. dataTarg.IndexKey 518 | lib.registerContext({ 519 | id = menuId, 520 | title = menuTitle, 521 | options = options 522 | }) 523 | lib.showContext(menuId, dataTarg) 524 | options = {} 525 | currentmenu = menuId 526 | end 527 | } 528 | TargetOptions[#TargetOptions+1] = OXtargetOption 529 | OXtargetOption = {} 530 | end 531 | end 532 | end 533 | if #TargetOptions > 0 then 534 | if Config.objects[i].objName then 535 | Details = {options = TargetOptions, distance = TargetOptions[1].distance} 536 | exports['qb-target']:AddTargetModel(Config.objects[i].objName, Details) 537 | elseif Config.objects[i].points then 538 | OxParams.options= TargetOptions 539 | --exports.ox_target:addBoxZone(OxParams) 540 | Details = {options = TargetOptions, distance = TargetOptions[1].distance} 541 | ZoneID = exports['qb-target']:AddPolyZone(OxParams.name, OxParams.points, OxParams , Details) 542 | Config.objects[i].ZoneID = ZoneID 543 | end 544 | end 545 | end 546 | end 547 | end 548 | end) 549 | 550 | 551 | function SeatActivation() 552 | Citizen.CreateThread(function() 553 | local WhileSittingHelpText = true 554 | while InUse do 555 | PlayerPed = PlayerPedId() 556 | PlayerPos = GetEntityCoords(PlayerPed) 557 | if InUse then 558 | if Config.AddHelpText then 559 | if WhileSittingHelpText then 560 | WhileSittingHelpText = false 561 | Config.WhileSittinginfoFunction() 562 | end 563 | if IsControlJustPressed(0,202) then 564 | if Config.WhileSittinginfoFunction_IsOpenCheck() then 565 | Config.WhileSittinginfoFunctionCancel() 566 | else 567 | Config.WhileSittinginfoFunction() 568 | end 569 | end 570 | end 571 | if IsControlJustPressed(0, Config.SmoothCancelSit ) then --Press W 572 | if inScenario and not InUse.details.skipExitScene then 573 | if InUse.details.noExitCollision then 574 | local pos = PlayerPos 575 | local rayHandle = StartShapeTestRay(pos.x, pos.y, pos.z + 0.1, pos.x, pos.y, pos.z - 0.1, 16, PlayerPed, 0) 576 | local _, hit, endCoords, surfaceNormal, entityHit = GetShapeTestResult(rayHandle) 577 | if entityHit and DoesEntityExist(entityHit) then 578 | ClearPedTasksImmediately(PlayerPed) 579 | FreezeEntityPosition(PlayerPed, false) 580 | 581 | local x, y, z = table.unpack(PlayerLastPos) 582 | local dist = #(PlayerPos - vector3(x, y, z)) 583 | if dist <= 10 then 584 | SetEntityCoords(PlayerPed, PlayerLastPos) 585 | end 586 | print("here 2") 587 | else 588 | FreezeEntityPosition(PlayerPed, false) 589 | ClearPedTasks(PlayerPed) 590 | end 591 | InUse = false 592 | Wait(500) 593 | else 594 | FreezeEntityPosition(PlayerPed, false) 595 | InUse = false 596 | ClearPedTasks(PlayerPed) 597 | end 598 | else 599 | if not InUse.exitPosition then 600 | if InUse.details.animation then 601 | FreezeEntityPosition(PlayerPed, false) 602 | StopAnimTask(PlayerPed, InUse.details.animation.Dict, InUse.details.animation.Anim, 0.7) 603 | SetPedToRagdoll(PlayerPed, 1, 1, 2, 0, 0, 0) 604 | Wait(100) 605 | FreezeEntityPosition(PlayerPed, true) 606 | Wait(1000) 607 | FreezeEntityPosition(PlayerPed, false) 608 | Wait(500) 609 | ClearPedTasks(PlayerPed) 610 | else 611 | ClearPedTasksImmediately(PlayerPed) 612 | FreezeEntityPosition(PlayerPed, false) 613 | 614 | local x, y, z = table.unpack(PlayerLastPos) 615 | local dist = #(PlayerPos - vector3(x, y, z)) 616 | if dist <= 10 then 617 | SetEntityCoords(PlayerPed, PlayerLastPos) 618 | end 619 | end 620 | 621 | InUse = false 622 | Wait(500) 623 | else 624 | ClearPedTasksImmediately(PlayerPed) 625 | FreezeEntityPosition(PlayerPed, false) 626 | SetEntityCoords(PlayerPed, InUse.exitPosition) 627 | 628 | InUse = false 629 | Wait(500) 630 | end 631 | end 632 | current = false 633 | EndChairCam() 634 | elseif IsControlJustPressed(0, Config.QuickCancelSit) then 635 | if not InUse.exitPosition then 636 | 637 | ClearPedTasksImmediately(PlayerPed) 638 | FreezeEntityPosition(PlayerPed, false) 639 | 640 | local x, y, z = table.unpack(PlayerLastPos) 641 | local dist = #(PlayerPos - vector3(x, y, z)) 642 | if dist <= 10 then 643 | SetEntityCoords(PlayerPed, PlayerLastPos) 644 | end 645 | InUse = false 646 | Wait(500) 647 | else 648 | ClearPedTasksImmediately(PlayerPed) 649 | FreezeEntityPosition(PlayerPed, false) 650 | SetEntityCoords(PlayerPed, InUse.exitPosition) 651 | InUse = false 652 | Wait(500) 653 | end 654 | current = false 655 | EndChairCam() 656 | end 657 | 658 | if IsControlJustPressed(0,Config.OpenmenuWhileSitting ) then -- press Space 659 | lib.showContext(currentmenu) 660 | Wait(1000) 661 | end 662 | if Config.AllowHeadingChange then 663 | if IsControlJustPressed(0, 34) then -- Press A 664 | SetEntityHeading(PlayerPed, GetEntityHeading(PlayerPed)-1) 665 | Wait(100) 666 | end 667 | if IsControlJustPressed(0, 35) then -- Press D 668 | SetEntityHeading(PlayerPed, GetEntityHeading(PlayerPed)+1) 669 | Wait(100) 670 | end 671 | end 672 | if Config.AllowChairCamera then 673 | if IsControlJustPressed(0, Config.StartChairCamera ) then -- press F 674 | if not cam then 675 | StartChairCam() 676 | radius = 1.5 677 | else 678 | EndChairCam() 679 | end 680 | end 681 | 682 | 683 | if cam then 684 | if IsControlJustPressed(0, 175) then -- zoom in 685 | if radius < 5.0 then 686 | radius = radius +0.1 687 | end 688 | end 689 | if IsControlJustPressed(0, 174) then -- zoom out 690 | if radius > 0.5 then 691 | radius = radius -0.1 692 | end 693 | end 694 | 695 | if IsControlJustPressed(0, 172) then -- Height 696 | if CameraZOffset < 2.0 then 697 | CameraZOffset = CameraZOffset +0.1 698 | end 699 | end 700 | if IsControlJustPressed(0, 173) then -- Height 701 | if CameraZOffset > -1.0 then 702 | CameraZOffset = CameraZOffset -0.1 703 | end 704 | end 705 | ProcessCamControls() 706 | end 707 | end 708 | end 709 | 710 | if not InUse then 711 | if Config.AddHelpText then 712 | Config.WhileSittinginfoFunctionCancel() 713 | end 714 | inScenario = false 715 | currentmenu = false 716 | Citizen.Wait(2000) 717 | end 718 | Citizen.Wait(3) 719 | end 720 | currentmenu = false 721 | end) 722 | end 723 | 724 | ----------------------------------------------------------------------- 725 | 726 | -------------------------------------------------- 727 | ------------------- CAMERA FUNCTIONS -------------------- 728 | -------------------------------------------------- 729 | 730 | -- initialize camera 731 | function StartChairCam() 732 | ClearFocus() 733 | 734 | local playerPed = PlayerPedId() 735 | 736 | cam = CreateCamWithParams("DEFAULT_SCRIPTED_CAMERA", GetEntityCoords(playerPed), 0, 0, 0, GetGameplayCamFov()) 737 | 738 | SetCamActive(cam, true) 739 | RenderScriptCams(true, true, 1000, true, false) 740 | end 741 | 742 | -- destroy camera 743 | function EndChairCam() 744 | ClearFocus() 745 | 746 | --[[ RenderScriptCams(false, false, 0, true, false) 747 | DestroyCam(cam, false) ]] 748 | RenderScriptCams(false, true, 1000, true, false) 749 | DestroyCam(cam, false) 750 | 751 | cam = nil 752 | end 753 | 754 | -- process camera controls 755 | function ProcessCamControls() 756 | local playerPed = PlayerPedId() 757 | local playerCoords = GetEntityCoords(playerPed) 758 | 759 | -- disable 1st person as the 1st person camera can cause some glitches 760 | DisableFirstPersonCamThisFrame() 761 | 762 | -- calculate new position 763 | local newPos = ProcessNewPosition() 764 | 765 | -- focus cam area 766 | SetFocusArea(newPos.x, newPos.y, newPos.z, 0.0, 0.0, 0.0) 767 | 768 | -- set coords of cam 769 | SetCamCoord(cam, newPos.x, newPos.y, newPos.z + CameraZOffset) 770 | 771 | -- set rotation 772 | PointCamAtCoord(cam, playerCoords.x, playerCoords.y, playerCoords.z + (CameraZOffset/2)) 773 | end 774 | 775 | function ProcessNewPosition() 776 | local mouseX = 0.0 777 | local mouseY = 0.0 778 | 779 | -- keyboard 780 | if (IsInputDisabled(0)) then 781 | -- rotation 782 | mouseX = GetDisabledControlNormal(1, 1) * 8.0 783 | mouseY = GetDisabledControlNormal(1, 2) * 8.0 784 | 785 | -- controller 786 | else 787 | -- rotation 788 | mouseX = GetDisabledControlNormal(1, 1) * 1.5 789 | mouseY = GetDisabledControlNormal(1, 2) * 1.5 790 | end 791 | 792 | angleZ = angleZ - mouseX -- around Z axis (left / right) 793 | angleY = angleY + mouseY -- up / down 794 | -- limit up / down angle to 90° 795 | if (angleY > 89.0) then angleY = 89.0 elseif (angleY < -89.0) then angleY = -89.0 end 796 | 797 | local pCoords = GetEntityCoords(PlayerPedId()) 798 | 799 | local behindCam = { 800 | x = pCoords.x + ((Cos(angleZ) * Cos(angleY)) + (Cos(angleY) * Cos(angleZ))) / 2 * (radius + 0.5), 801 | y = pCoords.y + ((Sin(angleZ) * Cos(angleY)) + (Cos(angleY) * Sin(angleZ))) / 2 * (radius + 0.5), 802 | z = pCoords.z + ((Sin(angleY))) * (radius + 0.5) 803 | } 804 | local rayHandle = StartShapeTestRay(pCoords.x, pCoords.y, pCoords.z + 0.5, behindCam.x, behindCam.y, behindCam.z, -1, PlayerPedId(), 0) 805 | local a, hitBool, hitCoords, surfaceNormal, entityHit = GetShapeTestResult(rayHandle) 806 | 807 | local maxRadius = radius 808 | local hitdist = Vdist(pCoords.x, pCoords.y, pCoords.z + 0.5, hitCoords) 809 | if (hitBool and hitdist < radius + 0.5) and hitdist > 0.5 then 810 | maxRadius = hitdist - 0.08 811 | 812 | end 813 | 814 | local offset = { 815 | x = ((Cos(angleZ) * Cos(angleY)) + (Cos(angleY) * Cos(angleZ))) / 2 * maxRadius, 816 | y = ((Sin(angleZ) * Cos(angleY)) + (Cos(angleY) * Sin(angleZ))) / 2 * maxRadius, 817 | z = ((Sin(angleY))) * maxRadius 818 | } 819 | Zreducer = 0.4 820 | local pos = { 821 | x = pCoords.x + offset.x, 822 | y = pCoords.y + offset.y, 823 | z = pCoords.z + offset.z 824 | } 825 | 826 | -- Debug x,y,z axis 827 | --DrawMarker(1, pCoords.x, pCoords.y, pCoords.z, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.03, 0.03, 5.0, 0, 0, 255, 255, false, false, 2, false, 0, false) 828 | --DrawMarker(1, pCoords.x, pCoords.y, pCoords.z, 0.0, 0.0, 0.0, 0.0, 90.0, 0.0, 0.03, 0.03, 5.0, 255, 0, 0, 255, false, false, 2, false, 0, false) 829 | --DrawMarker(1, pCoords.x, pCoords.y, pCoords.z, 0.0, 0.0, 0.0, -90.0, 0.0, 0.0, 0.03, 0.03, 5.0, 0, 255, 0, 255, false, false, 2, false, 0, false) 830 | 831 | return pos 832 | end 833 | ------------------------------------------------------------------------------------------- 834 | 835 | local TableHolder = nil 836 | local FixingIndexKey = nil 837 | local FixingAnimKey = nil 838 | local FixingMultiKey = nil 839 | 840 | RegisterNetEvent('ChairBedSystem:Client:AnimationCooordsBased') 841 | AddEventHandler('ChairBedSystem:Client:AnimationCooordsBased', function(v, coords, toot,sweet,butts) 842 | TableHolder = v 843 | TableHolder.coords = coords 844 | FixingIndexKey = toot 845 | FixingAnimKey = sweet 846 | FixingMultiKey = butts 847 | 848 | local objectcoords = vector3(coords.x + v.right_left_X, coords.y + v.forward_backwards_Y, coords.z + v.up_down_z) 849 | local ped = PlayerPedId() 850 | PlayerLastPos = GetEntityCoords(ped) 851 | FreezeEntityPosition(ped, true) 852 | 853 | if IsPedHeeled(ped) then 854 | objectcoords = vec3(objectcoords.x, objectcoords.y, objectcoords.z -0.12) 855 | end 856 | SetEntityCoords(ped, objectcoords.x, objectcoords.y, objectcoords.z) 857 | SetEntityHeading(ped, v.Heading) 858 | if v.dict then 859 | Animation(v.dict, v.anim, ped) 860 | elseif v.anim then 861 | inScenario = true 862 | v.IsSittingAnim = v.IsSittingAnim or false 863 | TaskStartScenarioAtPosition(ped, v.anim, objectcoords, v.Heading, 0, v.IsSittingAnim, true) 864 | end 865 | end) 866 | 867 | RegisterNetEvent('ChairBedSystem:Client:Animation') 868 | AddEventHandler('ChairBedSystem:Client:Animation', function(v, coords , toot,sweet,butts) 869 | TableHolder = v 870 | FixingIndexKey = toot 871 | FixingAnimKey = sweet 872 | FixingMultiKey = butts 873 | local object = v.object 874 | if object then 875 | local ped = PlayerPedId() 876 | 877 | 878 | local objectheadingOffset = 0.0 879 | local offsett = GetOffsetFromEntityInWorldCoords(object,v.right_left_X,v.forward_backwards_Y,v.up_down_z) 880 | if v.DynamicHeading then 881 | objectheadingOffset = GetEntityHeading(object) 882 | else 883 | objectheadingOffset = GetEntityHeading(object) - v.Heading 884 | end 885 | local objectcoords = coords 886 | if offsett then 887 | objectcoords = offsett 888 | end 889 | 890 | PlayerLastPos = GetEntityCoords(ped) 891 | if v.WalkIntoScene then 892 | if not IsEntityAtCoord(ped, offsett, 0.6, 0.6, 0.1, false, true, 0) then 893 | TaskGoStraightToCoord(ped, offsett, 1.0, 500, objectheadingOffset, 2.5) 894 | Breakcheck = 0 895 | while not IsEntityAtCoord(ped, offsett, 0.8, 0.8,1.5, false, true, 0) do 896 | Wait(1) 897 | Breakcheck = Breakcheck +1 898 | if Breakcheck > 250 then 899 | break 900 | end 901 | end 902 | ClearPedTasks(ped) 903 | end 904 | end 905 | FreezeEntityPosition(object, true) 906 | FreezeEntityPosition(ped, true) 907 | if IsPedHeeled(ped) then 908 | objectcoords = vec3(objectcoords.x, objectcoords.y, objectcoords.z -0.12) 909 | end 910 | SetEntityCoords(ped, objectcoords.x, objectcoords.y, objectcoords.z) 911 | SetEntityHeading(ped, objectheadingOffset) 912 | if v.dict then 913 | Animation(v.dict, v.anim, ped) 914 | elseif v.anim then 915 | inScenario = true 916 | v.IsSittingAnim = v.IsSittingAnim or false 917 | TaskStartScenarioAtPosition(ped, v.anim, objectcoords, objectheadingOffset, 0, v.IsSittingAnim, true) 918 | end 919 | else 920 | InUse = false 921 | end 922 | end) 923 | 924 | 925 | 926 | --------------------------------------------------------------------------------