├── 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 |
--------------------------------------------------------------------------------