├── fxmanifest.lua ├── client ├── cl_customize.lua └── cl_main.lua ├── README.md ├── server ├── sv_customize.lua └── sv_main.lua ├── locale └── en.lua ├── EULA.md └── shared ├── config.lua └── commonDeliveries.lua /fxmanifest.lua: -------------------------------------------------------------------------------- 1 | fx_version 'cerulean' 2 | game 'gta5' 3 | author 'GFG' 4 | description 'GFG Deliveries' 5 | version '1.0.0' 6 | lua54 'yes' 7 | 8 | client_scripts { 9 | 'client/cl_**.lua', 10 | 'locale/**.lua', 11 | } 12 | 13 | server_scripts { 14 | 'server/sv_**.lua', 15 | 'locale/**.lua', 16 | } 17 | 18 | shared_scripts { 19 | '@es_extended/imports.lua', 20 | '@ox_lib/init.lua', 21 | 'shared/**.lua', 22 | } 23 | 24 | escrow_ignore { 25 | 'client/*.lua', 26 | 'server/*.lua', 27 | 'shared/*.lua', 28 | 'locale/*.lua', 29 | 'README.md', 30 | 'EULA.md', 31 | } -------------------------------------------------------------------------------- /client/cl_customize.lua: -------------------------------------------------------------------------------- 1 | RegisterNetEvent('gfg_deliveries:client:notify') 2 | AddEventHandler("gfg_deliveries:client:notify", function(title, description, notifType) 3 | lib.notify({ 4 | title = title, 5 | description = description, 6 | type = notifType 7 | }) 8 | end) 9 | 10 | 11 | -- Here you can customize the 3d text box if it is used. 12 | function DrawText3Ds(x,y,z, text) 13 | local onScreen,_x,_y=World3dToScreen2d(x,y,z) 14 | local px,py,pz=table.unpack(GetGameplayCamCoords()) 15 | SetTextScale(0.35, 0.35) 16 | SetTextFont(4) 17 | SetTextProportional(1) 18 | SetTextColour(255, 255, 245, 215) 19 | SetTextEntry('STRING') 20 | SetTextCentre(1) 21 | AddTextComponentString(text) 22 | DrawText(_x,_y) 23 | local factor = (string.len(text)) / 370 24 | DrawRect(_x,_y+0.0125, 0.015+ factor, 0.03, 255, 255, 245, 68) 25 | end -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gfg_deliveries 2 | 3 | ## About 4 | GFG Deliveries allows a player to interact with any number of delivery services and get a route to deliver packages, they are provided a vehicle and must visit each stop they are assigned and deliver the packages for that stop. At any time during their route they can head back to the delivery manager and end their route, receiving a payment based on how many stops they completed, how many boxes they delivered, and how far they travelled. 5 | 6 | ## Features 7 | * Unlimited amount of delivery types (GoPostal, Post-Op, 24/7, and Liquor deliveries are included). 8 | * Highly Configurable. 9 | * Optimized (Running at 0.00ms). 10 | 11 | ## Discord 12 | [Discord](https://discord.com/invite/76Z5Fup4Ms) 13 | 14 | ## Docs 15 | [Docs](https://gfg-development.gitbook.io/gfg-development/free-resources/gfg_deliveries) 16 | 17 | ## Preview 18 | [Video](https://youtu.be/DGo-yz4mnUQ) 19 | -------------------------------------------------------------------------------- /server/sv_customize.lua: -------------------------------------------------------------------------------- 1 | -- Item Payout Function 2 | function itemPayout(source, item, amount) 3 | --[[ 4 | source = The player server ID to receive the item 5 | item = The item name (e.x. 'money') 6 | amount = the calculated amount they should receive 7 | ]] 8 | 9 | -- Place your custom inventory exports here 10 | 11 | end 12 | 13 | -- Bank Payout Function 14 | function bankPayout(source, amount) 15 | --[[ 16 | source = The player server ID to receive the payout 17 | amount = the calculated amount they should receive 18 | ]] 19 | 20 | local xPlayer = ESX.GetPlayerFromId(source) 21 | xPlayer.addAccountMoney('bank', amount) 22 | end 23 | 24 | 25 | -- Key Functions, Only needed if you use a key system. 26 | function giveKeys(source, plate) 27 | if Config.inventory == "ox_inventory" then 28 | exports.ox_inventory:AddItem(source, 'carkeys', 1, {plate = plate, name = "Job Vehicle"}) 29 | end 30 | end 31 | 32 | function removeKeys(source, plate) 33 | if Config.inventory == "ox_inventory" then 34 | local playerItems = exports.ox_inventory:GetInventoryItems(source) 35 | for k, v in pairs(playerItems) do 36 | if v.name == 'carkeys' and tostring(v.metadata.plate):match( "^%s*(.-)%s*$" ) == plate:match( "^%s*(.-)%s*$" ) then 37 | local xPlayer = ESX.GetPlayerFromId(source) 38 | exports.ox_inventory:RemoveItem(source, 'carkeys', 1, false, v.slot) 39 | break 40 | end 41 | end 42 | end 43 | end 44 | -------------------------------------------------------------------------------- /locale/en.lua: -------------------------------------------------------------------------------- 1 | Locale.en = { 2 | -- Pre-Start Locale 3 | interactionPrompt = "Start %s Delivery", -- First %s is the type of delivery. 4 | menuTitle = "%s Deliveries", -- The key of the delivery type table in the config 5 | stops = "Stops", 6 | stopsDescription = "Max amount of stops you could rececive on your route", 7 | boxes = "Boxes per stop", 8 | boxesDescription = "Max amount of boxes you could have per stop", 9 | vehicle = "Vehicle provided", 10 | vehicleDescription = "The vehicle that is provided to you for your route", 11 | takeJob = "Start Delivery", 12 | takeJobDescription = "Start Delivery with %s", -- First %s is the type of delivery. 13 | endJob = "End Delivery", 14 | endJobDescription = "End Delivery with %s", -- First %s is the type of delivery. 15 | noSpawn = "No empty space found", 16 | noSpawnDescription = "Wait until there is an open space for the truck", 17 | 18 | -- Start job Locale 19 | jobStarted = "You have started a route, head to your vehicle and begin delivering. You have %s stops to complete.", -- First %s is the amount of stops assigned. 20 | dropoffBlip = "Dropoff #%s", -- First %s is the stop #. 21 | dropoffAssigned = "Head to the stop marked on your GPS.", 22 | 23 | -- At Stop Locale 24 | atDropoff = "You have arrived at the stop", 25 | atDropoffDescription = "You have %s packages to deliver", -- First %s is the amount of boxes for this stop. 26 | grabBox = "Grab package", 27 | hasBox = "You already have a package in your hand", 28 | hasBoxDescription = "Deliver it to get another", 29 | deliverBox = "Deliver Package", 30 | boxDelivered = "Package Delivered", 31 | boxDeliveredDescription = "Head to the truck and grab another, you have %s left.", 32 | nextDropoff = "Stop Completed", 33 | nextDropoffDescription = "Head to the next stop marked on your GPS, you have %s left", 34 | allBoxesDelivered = "No More Boxes", 35 | allBoxesDeliveredDescription = "Head to the next stop marked on your GPS or back to the manager.", 36 | noBox = "No package", 37 | noBoxDescription = "You need to grab a package from the truck", 38 | 39 | -- End Job Locale 40 | stopsDone = "All Stops Completed", 41 | stopsDoneDescription = "Head back to the manager marked on your GPS to collect your payment", 42 | stopCount = "Stop's Completed", 43 | boxCount = "Packages Delivered", 44 | distanceCount = "Distance Traveled" 45 | } -------------------------------------------------------------------------------- /server/sv_main.lua: -------------------------------------------------------------------------------- 1 | local ox_inventory = exports.ox_inventory 2 | Locale = {} 3 | deliveryPeds = {} 4 | pedsCreated = false 5 | print("^4GFG Deliveries. Version: "..GetResourceMetadata(GetCurrentResourceName(), 'version', 0).."^0") 6 | 7 | AddEventHandler('onResourceStart', function(resourceName) 8 | if (GetCurrentResourceName() ~= resourceName) then 9 | return 10 | end 11 | 12 | for _, ped in pairs(GetAllPeds()) do 13 | local pedCoords = GetEntityCoords(ped) 14 | for k, deliveryLocation in pairs(Config.DeliveryTypes) do 15 | local deliveryCoords = vec3(deliveryLocation.ped.coords.x, deliveryLocation.ped.coords.y, deliveryLocation.ped.coords.z) 16 | local dist = #(pedCoords - deliveryCoords) 17 | if dist < 2 then 18 | DeleteEntity(ped) 19 | end 20 | end 21 | end 22 | 23 | -- Creates the necessary peds on resource start 24 | TriggerEvent("gfg_deliveries:server:initPeds") 25 | end) 26 | 27 | RegisterServerEvent("gfg_deliveries:server:initPeds") 28 | AddEventHandler("gfg_deliveries:server:initPeds", function() 29 | print("^4Initializing Delivery Peds^0") 30 | 31 | -- Goes through every delivery type in config 32 | for k, deliveryType in pairs(Config.DeliveryTypes) do 33 | 34 | -- Sets the model to default if omitted 35 | deliveryType.ped.model = deliveryType.ped.model or Config.Defaults.ped.model 36 | 37 | -- Sets the ped scenario to default if omitted 38 | deliveryType.ped.scenario = deliveryType.ped.scenario or Config.Defaults.ped.scenario 39 | 40 | -- Creates the ped 41 | pedEntity = CreatePed(0, deliveryType.ped.model, deliveryType.ped.coords, true, false) 42 | 43 | -- Applies ped attributes 44 | FreezeEntityPosition(pedEntity, true) 45 | SetPedConfigFlag(pedEntity, 43, true) -- CPED_CONFIG_FLAG_DisablePlayerLockon 46 | SetPedConfigFlag(pedEntity, 128, false) -- CPED_CONFIG_FLAG_CanBeAgitated 47 | 48 | -- Sets the ped data for the internal tablea 49 | ped = {} 50 | ped.deliveryType = k 51 | ped.entity = pedEntity 52 | ped.netId = NetworkGetNetworkIdFromEntity(pedEntity) 53 | ped.scenario = deliveryType.ped.scenario 54 | 55 | deliveryPeds[ped.deliveryType] = ped 56 | end 57 | 58 | pedsCreated = true 59 | print("^2Delivery Peds Initialized^0") 60 | 61 | end) 62 | 63 | lib.callback.register('gfg_deliveries:getPeds', function(source) 64 | debug_print("Player: "..source.." is requesting peds.", 1) 65 | while not pedsCreated do 66 | Wait(500) 67 | print("^1Waiting for peds to be created^0") 68 | end 69 | 70 | debug_print("Peds are created, sending them to player: "..source, 1) 71 | return deliveryPeds 72 | end) 73 | 74 | RegisterServerEvent("gfg_deliveries:server:giveKeys") 75 | AddEventHandler("gfg_deliveries:server:giveKeys", function(vehiclePlate) 76 | if Config.useKeys then 77 | local source = source 78 | local plate = vehiclePlate 79 | giveKeys(source, plate) 80 | end 81 | end) 82 | 83 | RegisterServerEvent("gfg_deliveries:server:removeKeys") 84 | AddEventHandler("gfg_deliveries:server:removeKeys", function(vehiclePlate) 85 | if Config.useKeys then 86 | local source = source 87 | local plate = vehiclePlate 88 | removeKeys(source, plate) 89 | end 90 | end) 91 | 92 | RegisterServerEvent("gfg_deliveries:server:payout") 93 | AddEventHandler("gfg_deliveries:server:payout", function(distance, dropoffCount, boxesDropped, pedType) 94 | local source = source 95 | 96 | -- Sets default vlaues for the reward if omitted 97 | pedType.reward = pedType.reward or Config.Defaults.reward 98 | pedType.reward.type = pedType.reward.type or Config.Defaults.reward.type 99 | pedType.reward.itemName = pedType.reward.itemName or Config.Defaults.reward.itemName 100 | pedType.reward.distanceMultiplier = pedType.reward.distanceMultiplier or Config.Defaults.reward.distanceMultiplier 101 | pedType.reward.boxWorth = pedType.reward.boxWorth or Config.Defaults.reward.boxWorth 102 | pedType.reward.amount = pedType.reward.amount or Config.Defaults.reward.amount 103 | 104 | -- Calculates reward amounts 105 | local dropoffPayout = dropoffCount * pedType.reward.amount 106 | local boxPayout = boxesDropped * pedType.reward.boxWorth 107 | local distancePayout = distance * pedType.reward.distanceMultiplier 108 | local totalPayout = dropoffPayout + boxPayout + distancePayout 109 | 110 | debug_print("Total Payout: "..totalPayout.." From (Dropoff Payout: "..dropoffPayout.." | Box Payout: "..boxPayout.." | Distance Payout: "..distancePayout..")", 1) 111 | 112 | if pedType.reward.type == 'item' then 113 | if Config.inventory == "ox_inventory" then 114 | exports.ox_inventory:AddItem(source, pedType.reward.itemName, totalPayout) 115 | 116 | elseif Config.inventory == "qb-inventory" then 117 | local Player = QBCore.Functions.GetPlayer(source) 118 | Player.Functions.AddItem(pedType.reward.itemName, totalPayout) 119 | 120 | elseif Config.inventory == "custom" then 121 | itemPayout(source, pedType.reward.itemName, totalPayout) 122 | end 123 | elseif pedType.reward.type == 'bank' then 124 | bankPayout(source, totalPayout) 125 | else 126 | print("^1No Valid Reward Type Found in reward.type^0") 127 | end 128 | 129 | 130 | end) 131 | 132 | 133 | -- Library Functions [DO NOT TOUCH] 134 | 135 | function Lang(what) 136 | local Dict = Locale[Config.language] 137 | if not Dict[what] then return Locale["en"][what] end -- If we cant find a translation, use the english one. 138 | return Dict[what] 139 | end 140 | 141 | function debug_print(data, level) 142 | if level == 1 and Config.debug then 143 | print(data) 144 | elseif level == 2 and Config.enhancedDebug then 145 | print(data) 146 | elseif Config.debug then 147 | print("No level is defined for the following information:") 148 | print(data) 149 | end 150 | end -------------------------------------------------------------------------------- /EULA.md: -------------------------------------------------------------------------------- 1 | End-User License Agreement 2 | 3 | This End-User License Agreement (referred to as the "EULA") is a legally binding agreement between you, the Licensee, an individual customer or entity, and the GFG Development LLC, the company, and the author of SOFTWARE, the Software, which may include associated media, printed materials, and online or electronic documentation. This Agreement is a legally binding contract that includes terms that limit your legal rights and Licensors' liability to you, and shall govern all access to and use of this Software. You hereby agree, without limitation or alteration, to all the terms and conditions contained herein. 4 | 5 | By installing, copying, or otherwise using the Licensed Product (Software), the Licensee agrees to be bound by the terms and conditions outlined in this EULA. However, if the Licensee does not agree to the terms and conditions outlined in this EULA, the said Licensee may not download, install, or use Software. 6 | 7 | Definitions 8 | 9 |  "EULA" shall refer to this End-User-License-Agreement, including any amendment to this Agreement. 10 | 11 | "Licensee" shall refer to the individual or entity that downloads and uses the Software. 12 | 13 | "Licensor" shall refer to the company or author, GFG Development LLC. 14 | 15 |  "Software/Licensed product" shall mean SOFTWARE, the Licensed Product provided pursuant to this EULA. 16 | 17 | Grant of License 18 | 19 | Subject to the terms of this EULA, the GFG Development LLC hereby grants to the Licensee, a royalty-free, revocable, limited, non-exclusive license during the term of this EULA to possess and to use a copy of the Software. The Software is being distributed by GFG Development LLC. Licensee is not allowed to make a charge for distributing this Software, either for profit or merely to recover media and distribution costs. 20 | 21 | Intellectual Property 22 | 23 | You hereby unconditionally agree that all right, title and interest in the copyrights and other intellectual property rights in the Licensed Product reside with the Licensors. The trademarks, logos, designs, and service marks appearing on the Licensed Product are registered and unregistered marks of Licensor.  Accordingly, nothing in this EULA or the Licensed Product grants you any right to use any form of intellectual property contained in the Licensed Product. 24 | 25 | Therefore, all rights, titles, interests, and copyrights in and/or to the Software, including but not limited to all images, graphics, animations, audio, video, music, text, data, code, algorithm, and information, are owned by the Licensor. Accordingly, the Software is protected by all applicable copyright laws and international treaties, and the Licensee is expected to use the Software concerning all intellectual property contained therein, except as otherwise provided for in this EULA. 26 | 27 | Description of Rights and Limitations 28 | 29 | Installation and Use: Licensee may install and use the Software on a shared computer or concurrently on different computers, and make multiple back-up copies of the Software, solely for Licensee's use within Licensee's business or personal use. 30 | 31 | Reproduction and Distribution:  Licensee may not duplicate or re-distribute copies of the Software, without the Licensors express written permission.  32 | 33 | Licensee Limitation: The Licensee may not: 34 | 35 | Use the Licensed Product for any purpose other than personal and non-commercial purposes; 36 | Use the Licensed Product for any illegal or unlawful purpose; 37 | Gather factual content or any other portion of the Licensed product by any automated means, including but not limited to database scraping or screen scraping; or 38 | Reverse engineer, decompile, or disassemble Software, except and only to the extent that such activity is expressly permitted by applicable law notwithstanding the limitation. 39 | Update and Maintenance 40 | 41 | GFG Development LLC shall provide updates and maintenance on a regular basis or as-needed basis. 42 | 43 | Support 44 | 45 | GFG Development LLC has no obligation to Software support, or to continue providing or updating any of the Software. 46 | 47 | General Provisions 48 | 49 | Termination 50 | 51 | In the event of termination, all licenses provided under this EULA shall immediately terminate, and you agree to discontinue accessing or attempting to access this Licensed product. 52 | 53 | Accordingly, this EULA may be: 54 | 55 | Automatically terminated if the Licensee fails to comply with any of the terms and conditions under this EULA; 56 | Terminated by GFG Development LLC; or 57 | Terminated by the Licensee. 58 | 59 | Either GFG Development LLC or the Licensee may terminate this EULA immediately upon written notice to the other party, including but not limited to electronic mail. 60 | 61 | Non-Transferability 62 | 63 | The Licensee has the option to permanently transfer all rights under this Agreement, provided the recipient agrees to the terms of this EULA. Accordingly, this EULA is not assignable or transferable by the Licensee without the prior written consent of GFG Development LLC; and any attempt to do so shall be void. 64 | 65 | Notice 66 | 67 | Any notice, report, approval or consent required under this EULA shall be in writing and deemed to have been duly given if delivered by recorded delivery to the respective addresses of the parties. 68 | 69 | Integration 70 | 71 | Both parties hereby agree that this EULA is the entire and exclusive statement and legal acknowledgement of the mutual understanding of the parties and supersedes and cancels any previous written and oral agreement and/or communication relating to the subject matter of this EULA. 72 | 73 | Severability 74 | 75 | No delay or failure to exercise, on the part of either party, any privilege, power or rights under this EULA shall operate as a waiver of any of the terms and provisions of this EULA. Accordingly, no single or partial exercise of any right under this Agreement shall preclude further exercise of any other right under this EULA. Suppose any of the outlined provisions of this EULA is deemed to be unenforceable or invalid in whole or in part by a court of competent jurisdiction. In that case, such provision shall be limited to the minimum extent necessary for this EULA to remain in full force and effect and enforceable. The remaining provisions of this Agreement shall not be rendered unenforceable or invalid. They shall continue to be enforceable and valid in isolation of the unenforceable and invalid provisions of this EULA. 76 | 77 | Warranty and Disclaimer 78 | 79 | GFG Development LLC, and author of this Software, expressly disclaim any warranty for the SOFTWARE. The Licensed Product and all applicable documentation is provided as-is, without warranty of any kind, whether express or implied, including, without limitation, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. Accordingly, the Licensee accepts any risk arising out of the use or performance of the Software. 80 | 81 | Limited Liability 82 | 83 | The Licensee agrees that the GFG Development LLC shall not be liable to Licensee, or any other related person or entity claiming any loss of profits, income, savings, or any other consequential, incidental, special, punitive, direct or indirect damage, whether arising in contract, tort, warranty, or otherwise. Even if GFG Development LLC has been advised of the possibility of such damages. These limitations shall necessarily apply regardless of the primary purpose of any limited remedy. Under no circumstances shall GFG Development LLC aggregate liability to the Licensee, or any other person or entity claiming through the Licensee, exceed the actual monetary amount paid by the Licensee to GFG Development LLC for the Software. 84 | 85 | Indemnification 86 | 87 | You hereby agree to indemnify and hold GFG Development LLC harmless from and against all liabilities, damages, losses or expenses, including but not limited to reasonable attorney or other professional fees in any claim, demand, action or proceeding initiated by any third-party against GFG Development LLC, arising from any of your acts, including without limitation, violating this EULA or any other agreement or any applicable law. 88 | 89 | Entire Agreement 90 | 91 | This Agreement rightly constitutes the entire understanding between the GFG Development LLC and the Licensee and all parties involved. It supersedes all prior agreements of the parties, whether written or oral, express or implied, statement, condition, or a representation or warranty. 92 | 93 | Governing Law and Jurisdiction 94 | 95 | This EULA shall be deemed to be construed under the jurisdiction of the courts located in USA, without regard to conflicts of laws as regards the provisions thereof. Any legal action relating to this EULA shall be brought exclusively in the courts of USA, and all parties consent to the jurisdiction thereof. Furthermore, the prevailing party in any action to enforce this EULA shall be entitled to recover costs and expenses including, without limitation, legal fees. Accordingly, this EULA is made within the exclusive jurisdiction of the USA, and its jurisdiction shall supersede any other jurisdiction of either party's election. -------------------------------------------------------------------------------- /shared/config.lua: -------------------------------------------------------------------------------- 1 | Config = { 2 | language = "en", -- Language sets which Locale to use, you can find available locales in [gfg_deliveries/locale/], we will add more as they become available but feel free to add your own. 3 | debug = false, -- Determines whether to send debug print statements to the client and server when using the script (Debug should only used in a development environment) 4 | enhancedDebug = false, -- Determines whether to send enhanced debug print statements to the client and server when using the script (Enhanced Debug should only used in a development environment) 5 | interactionMethod = "3dtext", -- Determines the method in which players interact. Currently supported options are: "target", "textui", "3dtext". 6 | interactionDistance = 2, -- Determines the distance from the interaction point that the interaction is activated. 7 | truckInteractionDistance = 0.5, -- Determines the distance from the truck bone that the interaction is available. 8 | drawMarker = { -- Determines 3d marker variables. 9 | enable = true, -- Determines whether to draw a 3d marker at the dropoff point. 10 | type = 3, -- Determines the type of marker to draw. 11 | scale = vec3(1.0, 1.0, 0.5), -- Determines the scale of the marker. 12 | color = {r = 255, g = 255, b = 255, alpha = 100}, -- Determines the color and transparency of the marker. 13 | bob = true, -- Determines wether the marker bobs up and down. 14 | faceCamera = true -- Determines if the marker always faces the camera. 15 | }, 16 | inventory = "ox_inventory", -- Determines wich inventory resource to use. Currently supported options are: "ox_inventory", "qb_inventory" or "custom". 17 | useKeys = true, -- Determines wether or not to trigger the give and remove keys function in sv_customize.lua. 18 | } 19 | 20 | Config.Defaults = { -- Configuration for the default values used if specific variable for a delivery type are omitted. 21 | ped = { -- Determines default ped variables. 22 | model = 's_m_m_postal_01', -- Determines the default ped model. 23 | scenario = 'WORLD_HUMAN_CLIPBOARD', -- Determines the default ped scenario. 24 | }, 25 | blip = { -- Determines default blip variables. 26 | sprite = 67, -- Determines the default blip sprite. 27 | scale = 0.7, -- Determines the default blip scale. 28 | color = 60, -- Determines the default blip color. 29 | }, 30 | reward = { -- Determines default reward variables. 31 | type = "item", -- Determines the default reward type, supported options are "bank" and "item". 32 | itemName = "money", -- Determines the default item reward name, only used if 'reward.type' is 'item'. 33 | distanceMultiplier = 0.2, -- Determines the default distance multiplier. 34 | boxWorth = 25, -- Determines the default value for each package delivered. 35 | amount = 100 -- Determines the default value for each stop completed. 36 | }, 37 | stops = { -- Determines default stop variables. 38 | blip = { -- Determines default stop blip variables. 39 | sprite = 538, -- Determines the default stop blip sprite. 40 | scale = 0.7, -- Determines the default stop blip scale. 41 | color = 60 -- Determines the default stop blip color. 42 | } 43 | }, 44 | vehicle = { -- Determines the default vehicle variables. 45 | bone = 'door_dside_r', -- Determines the default vehicle interaction bone. 46 | } 47 | } 48 | 49 | Config.DeliveryTypes = { 50 | ['Go Postal'] = { -- This is the name of the 'delivery type' (!!! WARNING !!! This needs to be unique). 51 | ped = { -- Determines ped variables. 52 | coords = vec4(78.6920, 111.8125, 81.1682, 243.2043),-- Determines the coords of the ped (Needs to be a vector4). 53 | model = 's_m_m_postal_01', -- Determines the ped model. (Optional) 54 | scenario = 'WORLD_HUMAN_CLIPBOARD', -- Determines the ped scenario. (Optional) 55 | }, 56 | blip = { -- Determines blip variables. 57 | label = "Go Postal Deliveries", -- Determines the label of the blip. 58 | sprite = 67, -- Determines the blip sprite. (Optional) 59 | scale = 0.7, -- Determines the blip scale. (Optional) 60 | color = 60, -- Determines the blip color. (Optional) 61 | }, 62 | vehicle = { -- Determines the vehicle variables. 63 | model = -233098306, -- boxville2 -- Determines the model of vehicle to be provided (Needs to be the signed hash). 64 | coords = { -- Determines the locations where vehicles will be spawned. 65 | vec4(61.3824, 125.1748, 79.2214, 157.9575), -- Needs to be a vector4. 66 | vec4(66.1251, 123.9437, 79.1611, 157.8927), 67 | vec4(69.6611, 122.9135, 79.1693, 154.1517), 68 | vec4(73.4137, 120.9988, 79.1908, 157.8834), 69 | }, 70 | image = 'https://gtacars.net/images/5fba0818d071f7ff7a1f03d41d2564a0', -- Determines the image to be displayed in the menu. 71 | bone = 'door_dside_r', -- Determines the vehicle interaction bone. (Optional) 72 | }, 73 | boxes = { -- Determines the amount of boxes per stop. 74 | minAmount = 1, -- Minimum amount. 75 | maxAmount = 2 -- Maximum amount. 76 | }, 77 | reward = { -- Determines reward variables. (Optional) 78 | type = "item", -- Determines the reward type, supported options are "bank" and "item". (Optional) 79 | itemName = "money", -- Determines the item reward name, only used if 'reward.type' is 'item'. (Optional) 80 | distanceMultiplier = 0.2, -- Determines the distance multiplier. (Optional) 81 | boxWorth = 25, -- Determines the value for each package delivered. (Optional) 82 | amount = 100 -- Determines the value for each stop completed. (Optional) 83 | }, 84 | stops = { -- Determines stop variables. 85 | minAmount = 5, -- Determines the minimum amount of stops. 86 | maxAmount = 10, -- Determines the maximum amount of stops. 87 | blip = { -- Determines stop blip variables. (Optional) 88 | sprite = 538, -- Determines the stop blip sprite. (Optional) 89 | scale = 0.7, -- Determines the stop blip scale. (Optional) 90 | color = 18, -- Determines the stop blip color. (Optional) 91 | }, 92 | locations = CommonDeliverys.locations, -- Determines the stops that can be chosen for this delivery type. 93 | targets = CommonDeliverys.targets -- Determines the dropoff targets for this delivery type. 94 | -- Locations and targets need to be in the same order (1st entry in targets, is the dropoff target for the 1st entry in locations). 95 | } 96 | }, 97 | ['Post-Op'] = { 98 | ped = { 99 | coords = vec4(-422.9762, -2788.4329, 6.0004, 315.3905), 100 | model = 's_m_m_ups_01' 101 | }, 102 | blip = { 103 | label = "Post Op Deliveries", 104 | }, 105 | vehicle = { 106 | model = 444171386, -- boxville4 107 | coords = { 108 | vec4(-413.3502, -2793.8215, 6.0004, 318.7370), 109 | vec4(-408.0440, -2799.0383, 6.0004, 314.3772), 110 | }, 111 | image = 'https://gtacars.net/images/2ea6f9f4da281baa76e8492eb8685a50' 112 | }, 113 | boxes = { 114 | minAmount = 1, 115 | maxAmount = 2 116 | }, 117 | reward = { 118 | distanceMultiplier = 0.2, 119 | boxWorth = 35, 120 | amount = 125 121 | }, 122 | stops = { 123 | minAmount = 5, 124 | maxAmount = 10, 125 | blip = { 126 | color = 31, 127 | }, 128 | locations = CommonDeliverys.locations, 129 | targets = CommonDeliverys.targets 130 | } 131 | }, 132 | ['24/7'] = { 133 | ped = { 134 | coords = vec4(801.4267, -2498.2400, 21.1458, 72.7055), 135 | model = 's_m_m_gentransport', 136 | }, 137 | blip = { 138 | label = "24/7 Deliveries", 139 | sprite = 477, 140 | color = 2, 141 | }, 142 | vehicle = { 143 | model = 904750859, -- mule 144 | coords = { 145 | vec4(782.4951, -2472.5037, 20.3712, 176.8277), 146 | vec4(786.5690, -2471.0957, 20.5752, 175.0144), 147 | vec4(793.4912, -2471.2219, 21.0176, 179.9093), 148 | }, 149 | image = 'https://gtacars.net/images/f1889a6ca3c797dcb79d87d8a31643b4' 150 | }, 151 | boxes = { 152 | minAmount = 2, 153 | maxAmount = 6 154 | }, 155 | reward = { 156 | distanceMultiplier = 0.2, 157 | boxWorth = 50, 158 | amount = 150 159 | }, 160 | stops = { 161 | minAmount = 1, 162 | maxAmount = 3, 163 | blip = { 164 | color = 2, 165 | }, 166 | locations = { 167 | vec3(29.109, -1348.248, 29.496), -- Strawberry 247 168 | vec3(376.299, 322.467, 103.437), -- Downtown Vineood 247 169 | vec3(-3236.8264, 1004.4056, 12.4528), -- Chumash 247 170 | vec3(-3036.4502, 595.1279, 7.8125), -- Banham 247 171 | vec3(2563.3022, 385.6450, 108.4709), -- Palomino Fwy 247 172 | vec3(543.8124, 2675.2800, 42.1542), -- Route 68 247 #1 173 | vec3(2683.9314, 3281.4089, 55.2405), -- Senora Fwy 247 174 | vec3(1966.5757, 3738.2549, 32.2027), -- Sandy Shores 247 175 | vec3(1729.5510, 6408.2178, 34.3459), -- Procopio Truck stop 247 176 | vec3(1159.387, -325.542, 69.205), -- Mirror Park 247 177 | vec3(-52.216, -1755.597, 29.421), -- Davis 247 178 | }, 179 | targets = { 180 | vec3(25.356, -1339.491, 29.497), -- Strawberry 247 181 | vec3(375.514, 334.839, 103.566), -- Downtown Vineood 247 182 | vec3(-3250.0178, 1001.1556, 12.8307), -- Chumash 247 183 | vec3(-3046.6392, 582.4778, 7.9089), -- Banham 247 184 | vec3(2549.4946, 381.7044, 108.6229), -- Palomino Fwy 247 185 | vec3(549.7189, 2663.4678, 42.1565), -- Route 68 247 #1 186 | vec3(2671.2991, 3283.6487, 55.2411), -- Senora Fwy 247 187 | vec3(1956.6353, 3746.9175, 32.3437), -- Sandy Shores 247 188 | vec3(1731.7041, 6422.0830, 35.0372), -- Procopio Truck stop 247 189 | vec3(1163.135, -313.367, 69.205), -- Mirror Park 247 190 | vec3(-40.682, -1750.848, 29.421), -- Davis 247 191 | } 192 | } 193 | }, 194 | ['Liqour'] = { 195 | ped = { 196 | coords = vec4(847.3294, -1945.6515, 27.9802, 119.3576), 197 | model = 's_m_m_gentransport', 198 | }, 199 | blip = { 200 | label = "Liqour Deliveries", 201 | sprite = 477, 202 | color = 6, 203 | }, 204 | vehicle = { 205 | model = 904750859, -- mule 206 | coords = { 207 | vec4(845.82, -1953.16, 28.95, 85.03), 208 | vec4(837.2485, -1935.9860, 28.9675, 175.3186), 209 | }, 210 | image = 'https://gtacars.net/images/f1889a6ca3c797dcb79d87d8a31643b4' 211 | }, 212 | boxes = { 213 | minAmount = 2, 214 | maxAmount = 6 215 | }, 216 | reward = { 217 | distanceMultiplier = 0.2, 218 | boxWorth = 50, 219 | amount = 150 220 | }, 221 | stops = { 222 | minAmount = 1, 223 | maxAmount = 3, 224 | blip = { 225 | color = 6, 226 | }, 227 | locations = { 228 | vec3(-1226.046, -903.225, 12.338), -- Vespucci liqour 229 | vec3(-1490.124, -382.535, 40.175), -- MorningWood Liqour 230 | vec3(1144.8458, -980.3021, 46.2167), -- Murietta Heights Liqour 231 | vec3(-2977.1069, 391.2003, 15.0254), -- Great Ocean Hwy Liqour 232 | vec3(1166.7745, 2698.6431, 37.9721), -- Route 68 Liqour 233 | vec3(1395.1881, 3596.7114, 34.9819), -- Sandy Shores Liqour 234 | }, 235 | targets = { 236 | vec3(-1222.817, -912.563, 12.326), -- Vespucci liqour 237 | vec3(-1481.55, -377.794, 40.163), -- MorningWood Liqour 238 | vec3(1130.7246, -979.8616, 46.4158), -- Murietta Heights Liqour 239 | vec3(-2963.5098, 387.9053, 15.0433), -- Great Ocean Hwy Liqour 240 | vec3(1168.8506, 2713.7915, 38.1577), -- Route 68 Liqour 241 | vec3(1390.3180, 3608.1401, 34.9809), -- Sandy Shores Liqour 242 | } 243 | } 244 | }, 245 | } -------------------------------------------------------------------------------- /client/cl_main.lua: -------------------------------------------------------------------------------- 1 | local ox_inventory = exports.ox_inventory 2 | local deliveryPeds = {} 3 | Locale = {} 4 | local menuOpen = false 5 | local dropoffCount = 0 6 | local distance = 0 7 | local hasBox = false 8 | local hasTargetMenu = false 9 | 10 | AddEventHandler('onClientResourceStart', function (resourceName) 11 | if(GetCurrentResourceName() ~= resourceName) then 12 | return 13 | else 14 | if Config.target == "qb_target" then 15 | local QBCore = exports['qb-core']:GetCoreObject() 16 | end 17 | Wait(0) 18 | createBlips() 19 | deliveryPeds = lib.callback.await('gfg_deliveries:getPeds', false) 20 | createPedInteractions() 21 | end 22 | end) 23 | 24 | function createPedInteractions() 25 | for k, ped in pairs(deliveryPeds) do 26 | local pedType = Config.DeliveryTypes[ped.deliveryType] 27 | ped.hasMenu = false 28 | 29 | local point = lib.points.new({ 30 | coords = pedType.ped.coords, 31 | distance = Config.interactionDistance, 32 | deliveryType = k 33 | }) 34 | 35 | function point:onEnter() 36 | entity = NetworkGetEntityFromNetworkId(ped.netId) 37 | entCoords = GetEntityCoords(entity) 38 | 39 | if Config.interactionMethod == "target" then 40 | if not ped.hasMenu then 41 | ped.hasMenu = true 42 | local pedOptions = {{ 43 | name = ped.deliveryType..'_ped', 44 | icon = 'fa-solid fa-truck-ramp-box', 45 | label = string.format(Lang('menuTitle'), ped.deliveryType), 46 | onSelect = function() 47 | TriggerEvent('gfg_deliveries:client:openMenu', ped) 48 | end 49 | }} 50 | exports.ox_target:addEntity(ped.netId, pedOptions) 51 | end 52 | end 53 | if Config.interactionMethod == "textui" then 54 | lib.showTextUI('[E] - '..string.format(Lang('interactionPrompt'), ped.deliveryType)) 55 | end 56 | SetPedCombatAttributes(NetworkGetEntityFromNetworkId(ped.netId), 292, true) 57 | SetEntityInvincible(NetworkGetEntityFromNetworkId(ped.netId), true) 58 | FreezeEntityPosition(NetworkGetEntityFromNetworkId(ped.netId), true) 59 | SetBlockingOfNonTemporaryEvents(NetworkGetEntityFromNetworkId(ped.netId), true) 60 | if not IsPedUsingScenario(NetworkGetEntityFromNetworkId(ped.netId), ped.scenario) then 61 | TaskStartScenarioInPlace(NetworkGetEntityFromNetworkId(ped.netId), ped.scenario, 0, true) 62 | end 63 | end 64 | 65 | function point:onExit() 66 | if Config.interactionMethod == "textui" then 67 | lib.hideTextUI() 68 | end 69 | end 70 | 71 | if Config.interactionMethod == "textui" or Config.interactionMethod == "3dtext" then 72 | function point:nearby() 73 | if Config.interactionMethod == "3dtext" and not menuOpen then 74 | DrawText3Ds(entCoords.x, entCoords.y, entCoords.z, '[E] - '..string.format(Lang('interactionPrompt'), ped.deliveryType)) 75 | if IsControlJustReleased(0, 38) then 76 | TriggerEvent('gfg_deliveries:client:openMenu', ped) 77 | end 78 | end 79 | if Config.interactionMethod == "textui" and not menuOpen then 80 | if IsControlJustReleased(0, 38) then 81 | TriggerEvent('gfg_deliveries:client:openMenu', ped) 82 | lib.hideTextUI() 83 | end 84 | else 85 | lib.hideTextUI() 86 | end 87 | end 88 | end 89 | end 90 | end 91 | 92 | function toggleMenu() 93 | if menuOpen then 94 | menuOpen = false 95 | else 96 | menuOpen = true 97 | end 98 | end 99 | 100 | RegisterNetEvent('gfg_deliveries:client:openMenu') 101 | AddEventHandler("gfg_deliveries:client:openMenu", function(ped) 102 | menuOpen = true 103 | pedType = Config.DeliveryTypes[ped.deliveryType] 104 | 105 | debug_print("Ped Type"..json.encode(pedType, {indent = true}), 2) 106 | 107 | -- sets the take job button disabled if on a job 108 | if onJob then 109 | takeJobButtonDisabled = true 110 | endJobButtonDisabled = false 111 | else 112 | takeJobButtonDisabled = false 113 | endJobButtonDisabled = true 114 | end 115 | 116 | -- Registers the menu 117 | lib.registerContext({ 118 | id = 'deliveryMenu_'..ped.deliveryType, 119 | title = string.format(Lang('menuTitle'), ped.deliveryType), 120 | onExit = toggleMenu(), 121 | options = { 122 | { 123 | title = 'Stops', 124 | description = pedType.stops.maxAmount, 125 | icon = 'map-location-dot', 126 | metadata = { 127 | {label = Lang('stopsDescription'), value = pedType.stops.maxAmount} 128 | } 129 | }, 130 | { 131 | title = 'Boxes per Stop', 132 | description = pedType.boxes.maxAmount, 133 | icon = 'box', 134 | metadata = { 135 | {label = Lang('boxesDescription'), value = pedType.boxes.maxAmount} 136 | } 137 | }, 138 | { 139 | title = 'Vehicle', 140 | description = GetDisplayNameFromVehicleModel(pedType.vehicle.model), 141 | icon = 'truck', 142 | image = pedType.vehicle.image, 143 | metadata = { 144 | {label = Lang('vehicleDescription'), value = GetDisplayNameFromVehicleModel(pedType.vehicle.model)} 145 | } 146 | }, 147 | { 148 | title = Lang('takeJob'), 149 | description = string.format(Lang('takeJobDescription'), ped.deliveryType), 150 | icon = 'truck-fast', 151 | disabled = takeJobButtonDisabled, 152 | onSelect = function() 153 | startJob(pedType, ped.deliveryType) 154 | end, 155 | }, 156 | { 157 | title = Lang('endJob'), 158 | description = string.format(Lang('endJobDescription'), ped.deliveryType), 159 | icon = 'circle-stop', 160 | disabled = endJobButtonDisabled, 161 | metadata = { 162 | {label = Lang('stopCount'), value = dropoffCount}, 163 | {label = Lang('boxCount'), value = boxesDropped}, 164 | {label = Lang('distanceCount'), value = distance}, 165 | }, 166 | onSelect = function() 167 | endJob() 168 | end, 169 | }, 170 | } 171 | }) 172 | 173 | -- Opens the menu 174 | lib.showContext('deliveryMenu_'..ped.deliveryType) 175 | end) 176 | 177 | -- Start Job Function 178 | function startJob(pedType, deliveryType) 179 | -- Sets the client onJob to true 180 | onJob = true 181 | local spawnFound = false 182 | 183 | -- Creates the route vehicle 184 | for _, coords in pairs(pedType.vehicle.coords) do 185 | local checkCoords = vec3(coords.x, coords.y, coords.z) 186 | local nearbyVehicles = lib.getNearbyVehicles(checkCoords, 1, true) 187 | if #nearbyVehicles == 0 then 188 | spawnCoords = coords 189 | spawnFound = true 190 | break 191 | end 192 | end 193 | 194 | if not spawnFound then 195 | TriggerEvent('gfg_deliveries:client:notify', Lang('noSpawn'), Lang('noSpawnDescription'), 'success') 196 | onJob = false 197 | return 198 | end 199 | 200 | if lib.requestModel(pedType.vehicle.model, 1000) then 201 | truck = CreateVehicle(pedType.vehicle.model, spawnCoords, spawnCoords.w, true, false) 202 | end 203 | 204 | dropoffsAssigned = math.random(pedType.stops.minAmount, pedType.stops.maxAmount) 205 | debug_print("Dropoff Count: "..dropoffsAssigned, 1) 206 | 207 | -- Gives keys 208 | TriggerServerEvent('gfg_deliveries:server:giveKeys', GetVehicleNumberPlateText(truck)) 209 | 210 | distance = 0 211 | dropoffCount = 0 212 | boxesDropped = 0 213 | 214 | -- Informs the client they ahve started a route 215 | TriggerEvent('gfg_deliveries:client:notify', string.format(Lang('menuTitle'), deliveryType), string.format(Lang('jobStarted'), dropoffsAssigned), 'success') 216 | 217 | -- Creates dropoff 218 | getDropoff() 219 | end 220 | 221 | function endJob() 222 | onJob = false 223 | TriggerServerEvent("gfg_deliveries:server:removeKeys", GetVehicleNumberPlateText(truck)) 224 | DeleteVehicle(truck) 225 | TriggerServerEvent("gfg_deliveries:server:payout", distance, dropoffCount, boxesDropped, pedType) 226 | distance = 0 227 | dropoffCount = 0 228 | boxesDropped = 0 229 | if Config.interactionMethod == 'target' then 230 | exports.ox_target:removeZone(targetZoneMenu) 231 | end 232 | dropoffBox:remove() 233 | targetZone:remove() 234 | markerZone:remove() 235 | truckPoint:remove() 236 | RemoveBlip(dropoffBlip) 237 | end 238 | 239 | 240 | -- Get Dropoff Function 241 | function getDropoff() 242 | randomDropoff = math.random(1, #pedType.stops.locations) 243 | debug_print("new Dropoff assigned", 1) 244 | 245 | dropoffDistance = GetDistanceBetweenCoords(GetEntityCoords(PlayerPedId()), pedType.stops.locations[randomDropoff]) 246 | 247 | pedType.stops.blip = pedType.stops.blip or Config.Defaults.stops.blip 248 | local sprite = pedType.stops.blip.sprite or Config.Defaults.stops.blip.sprite 249 | local scale = pedType.stops.blip.scale or Config.Defaults.stops.blip.scale 250 | local color = pedType.stops.blip.color or Config.Defaults.stops.blip.color 251 | 252 | dropoffBlip = AddBlipForCoord(pedType.stops.locations[randomDropoff]) 253 | SetBlipSprite(dropoffBlip, sprite) 254 | SetBlipColour(dropoffBlip, color) 255 | SetBlipScale(dropoffBlip, scale) 256 | SetBlipHiddenOnLegend(dropoffBlip, false) 257 | SetBlipRoute(dropoffBlip, true) 258 | SetBlipDisplay(dropoffBlip, 8) 259 | BeginTextCommandSetBlipName("STRING") 260 | AddTextComponentSubstringPlayerName(string.format(Lang('dropoffBlip'), dropoffCount)) 261 | EndTextCommandSetBlipName(blip) 262 | 263 | -- Sets number of boxes for this stop 264 | boxCount = math.random(pedType.boxes.minAmount, pedType.boxes.maxAmount) 265 | 266 | TriggerEvent('gfg_deliveries:client:notify', Lang('dropoffAssigned'), '', 'inform') 267 | 268 | 269 | dropoffBox = lib.zones.sphere({ 270 | coords = pedType.stops.locations[randomDropoff], 271 | radius = 10, 272 | debug = Config.enhancedDebug, 273 | onEnter = onDropoffEnter, 274 | }) 275 | 276 | -- Creates zone for the target 277 | targetZone = lib.zones.sphere({ 278 | coords = pedType.stops.targets[randomDropoff], 279 | radius = Config.interactionDistance, 280 | debug = Config.enhancedDebug, 281 | onEnter = targetOnEnter, 282 | }) 283 | 284 | if Config.drawMarker.enable then 285 | markerZone = lib.zones.sphere({ 286 | coords = pedType.stops.targets[randomDropoff], 287 | radius = 30, 288 | debug = Config.enhancedDebug, 289 | }) 290 | end 291 | 292 | truckInteractionBone = pedType.vehicle.bone or Config.Defaults.vehicle.bone 293 | truckBoneIndex = GetEntityBoneIndexByName(truck, truckInteractionBone) 294 | truckBonePosition = GetEntityBonePosition_2(truck, truckBoneIndex) 295 | truckPoint = lib.points.new({ 296 | coords = truckBonePosition, 297 | distance = Config.interactionDistance, 298 | }) 299 | 300 | enteredDropoff = false 301 | 302 | function dropoffBox:onEnter() 303 | if not enteredDropoff then 304 | TriggerEvent('gfg_deliveries:client:notify', Lang('atDropoff'), string.format(Lang('atDropoffDescription'), boxCount), 'inform') 305 | truckInteractionBone = pedType.vehicle.bone or Config.Defaults.vehicle.bone 306 | truckBoneIndex = GetEntityBoneIndexByName(truck, truckInteractionBone) 307 | truckBonePosition = GetEntityBonePosition_2(truck, truckBoneIndex) 308 | RemoveBlip(dropoffBlip) 309 | enteredDropoff = true 310 | end 311 | end 312 | 313 | function dropoffBox:inside() 314 | if boxCount > 0 then 315 | truckPoint:remove() 316 | truckBonePosition = GetEntityBonePosition_2(truck, truckBoneIndex) 317 | truckPoint = lib.points.new({ 318 | coords = truckBonePosition, 319 | distance = Config.interactionDistance, 320 | }) 321 | 322 | function truckPoint:onEnter() 323 | if Config.interactionMethod == "target" then 324 | if not hasTruckMenu then 325 | local truckOptions = {{ 326 | name = truck..'_target', 327 | icon = 'fa-solid fa-truck-ramp-box', 328 | label = Lang('grabBox'), 329 | bones = {truckInteractionBone}, 330 | onSelect = function() 331 | grabBox() 332 | end 333 | }} 334 | exports.ox_target:addLocalEntity(truck, truckOptions) 335 | hasTruckMenu = true 336 | end 337 | end 338 | if Config.interactionMethod == "textui" then 339 | if not hasBox then 340 | lib.showTextUI('[E] - '..Lang('grabBox')) 341 | end 342 | end 343 | end 344 | 345 | function truckPoint:onExit() 346 | if Config.interactionMethod == "textui" then 347 | lib.hideTextUI() 348 | end 349 | end 350 | 351 | if Config.interactionMethod == "textui" or Config.interactionMethod == "3dtext" then 352 | function truckPoint:nearby() 353 | if Config.interactionMethod == "3dtext" and not hasBox and boxCount > 0 then 354 | DrawText3Ds(truckBonePosition.x, truckBonePosition.y, truckBonePosition.z, '[E] - '..Lang('grabBox')) 355 | if IsControlJustReleased(0, 38) then 356 | grabBox() 357 | end 358 | end 359 | if Config.interactionMethod == "textui" and not hasBox and boxCount > 0 then 360 | if IsControlJustReleased(0, 38) then 361 | grabBox() 362 | lib.hideTextUI() 363 | end 364 | end 365 | end 366 | end 367 | end 368 | end 369 | 370 | function targetZone:onEnter() 371 | print("Entered Targert Zone") 372 | if Config.interactionMethod == "target" then 373 | if not hasTargetMenu then 374 | targetZoneMenu = exports.ox_target:addSphereZone({ 375 | coords = pedType.stops.targets[randomDropoff], 376 | radius = 4, 377 | debug = Config.enhancedDebug, 378 | options = { 379 | { 380 | name = 'sphere', 381 | icon = 'box', 382 | label = Lang('deliverBox'), 383 | onSelect = function() 384 | deliverBox() 385 | end 386 | } 387 | } 388 | }) 389 | hasTargetMenu = true 390 | end 391 | end 392 | if Config.interactionMethod == "textui" then 393 | if not hasBox then 394 | lib.showTextUI('[E] - '..Lang('deliverBox')) 395 | end 396 | end 397 | end 398 | 399 | function targetZone:onExit() 400 | if Config.interactionMethod == "textui" then 401 | lib.hideTextUI() 402 | end 403 | end 404 | 405 | if Config.interactionMethod == "textui" or Config.interactionMethod == "3dtext" then 406 | function targetZone:inside() 407 | if Config.interactionMethod == "3dtext" and hasBox then 408 | DrawText3Ds(pedType.stops.targets[randomDropoff].x, pedType.stops.targets[randomDropoff].y, pedType.stops.targets[randomDropoff].z, '[E] - '..Lang('deliverBox')) 409 | if IsControlJustReleased(0, 38) then 410 | deliverBox() 411 | end 412 | end 413 | if Config.interactionMethod == "textui" and hasBox then 414 | if IsControlJustReleased(0, 38) then 415 | deliverBox() 416 | lib.hideTextUI() 417 | end 418 | end 419 | end 420 | end 421 | 422 | function markerZone:inside() 423 | DrawMarker(Config.drawMarker.type, pedType.stops.targets[randomDropoff], 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 424 | Config.drawMarker.scale.x, Config.drawMarker.scale.y, Config.drawMarker.scale.z, 425 | Config.drawMarker.color.r, Config.drawMarker.color.g, Config.drawMarker.color.b, Config.drawMarker.color.alpha, 426 | Config.drawMarker.bob, Config.drawMarker.faceCamera) 427 | end 428 | end 429 | 430 | function grabBox() 431 | if boxCount < 1 then 432 | TriggerEvent('gfg_deliveries:client:notify', Lang('allBoxesDelivered'), Lang('allBoxesDeliveredDescription'), 'inform') 433 | return 434 | end 435 | if hasBox then 436 | TriggerEvent('gfg_deliveries:client:notify', Lang('hasBox'), Lang('hasBoxDescription'), 'inform') 437 | else 438 | lib.requestAnimDict('anim@heists@box_carry@', 1000) 439 | 440 | TaskPlayAnim(PlayerPedId(), 'anim@heists@box_carry@', 'idle', 2.0, 2.5, -1, 49, 0, 0, 0, 0) 441 | 442 | lib.requestModel('prop_cs_cardbox_01', 1000) 443 | 444 | boxProp = CreateObject(GetHashKey('prop_cs_cardbox_01'), x, y, z, true, true, true) 445 | AttachEntityToEntity(boxProp, PlayerPedId(), GetPedBoneIndex(PlayerPedId(), 0x60F2), -0.1, 0.4, 0, 0, 90.0, 0, true, true, false, true, 5, true) 446 | hasBox = true 447 | end 448 | end 449 | 450 | function deliverBox() 451 | if hasBox then 452 | DeleteEntity(boxProp) 453 | ClearPedTasks(PlayerPedId()) 454 | hasBox = false 455 | boxCount = boxCount - 1 456 | boxesDropped = boxesDropped + 1 457 | 458 | if boxCount < 1 then 459 | -- Stop is completed 460 | dropoffsAssigned = dropoffsAssigned - 1 461 | dropoffCount = dropoffCount + 1 462 | distance = distance + dropoffDistance 463 | 464 | debug_print("Stop #"..dropoffCount.." Completed, "..dropoffsAssigned.." more to go.", 1) 465 | 466 | if Config.interactionMethod == 'target' then 467 | exports.ox_target:removeZone(targetZoneMenu) 468 | end 469 | dropoffBox:remove() 470 | targetZone:remove() 471 | markerZone:remove() 472 | truckPoint:remove() 473 | 474 | if dropoffsAssigned == 0 then 475 | -- end job 476 | debug_print("All Stops completed", 1) 477 | TriggerEvent('gfg_deliveries:client:notify', Lang('stopsDone'), Lang('stopsDoneDescription'), 'inform') 478 | SetNewWaypoint(pedType.ped.coords.x, pedType.ped.coords.y) 479 | else 480 | -- Get New Dropoff 481 | hasTargetMenu = false 482 | getDropoff() 483 | TriggerEvent('gfg_deliveries:client:notify', Lang('nextDropoff'), string.format(Lang('nextDropoffDescription'), dropoffsAssigned), 'inform') 484 | end 485 | else 486 | TriggerEvent('gfg_deliveries:client:notify', Lang('boxDelivered'), string.format(Lang('boxDeliveredDescription'), boxCount), 'inform') 487 | end 488 | else 489 | TriggerEvent('gfg_deliveries:client:notify', Lang('noBox'), string.format(Lang('noBoxDescription'), boxCount), 'inform') 490 | end 491 | end 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | -- Library Function [DO NOT TOUCH] 552 | function createBlips() 553 | 554 | -- Creates a blip for every delivery type 555 | for k, v in pairs(Config.DeliveryTypes) do 556 | 557 | -- Sets default values if they are omitted. 558 | v.blip.sprite = v.blip.sprite or Config.Defaults.blip.sprite 559 | v.blip.scale = v.blip.scale or Config.Defaults.blip.scale 560 | v.blip.color = v.blip.color or Config.Defaults.blip.color 561 | 562 | -- Creates the blip 563 | local blip = AddBlipForCoord(v.ped.coords) 564 | SetBlipSprite(blip, v.blip.sprite) 565 | SetBlipScale(blip, v.blip.scale) 566 | SetBlipAsShortRange(blip, true) 567 | SetBlipColour(blip, v.blip.color) 568 | BeginTextCommandSetBlipName("STRING") 569 | AddTextComponentSubstringPlayerName(v.blip.label) 570 | EndTextCommandSetBlipName(blip) 571 | end 572 | end 573 | 574 | function Lang(what) 575 | local Dict = Locale[Config.language] 576 | if not Dict[what] then return Locale["en"][what] end -- If we cant find a translation, use the english one. 577 | return Dict[what] 578 | end 579 | 580 | function debug_print(data, level) 581 | if level == 1 and Config.debug then 582 | print(data) 583 | elseif level == 2 and Config.enhancedDebug then 584 | print(data) 585 | elseif Config.debug then 586 | print("No level is defined for the following information:") 587 | print(data) 588 | end 589 | end -------------------------------------------------------------------------------- /shared/commonDeliveries.lua: -------------------------------------------------------------------------------- 1 | CommonDeliverys = { 2 | locations = { 3 | -- easy vinewoord 56 area 1 56 4 | vec3(-11.7389554977417, -303.995056152344, 45.5747222900391), 5 | vec3(146.843276977539, -300.878265380859, 45.3772392272949), 6 | vec3(90.9032745361328, -287.846313476563, 46.2548522949219), 7 | vec3(-25.0742530822754, -232.339614868164, 45.9333648681641), 8 | vec3(-120.107566833496, -364.745635986328, 36.387809753418), 9 | vec3(-25.1990394592285, -195.758193969727, 52.1177139282227), 10 | vec3(-5.50260925292969, -146.08544921875, 56.2241859436035), 11 | vec3(27.7411308288574, -210.56852722168, 52.6132545471191), 12 | vec3(157.997344970703, -260.784973144531, 51.1468048095703), 13 | vec3(114.574058532715, -245.457168579102, 51.1555404663086), 14 | vec3(315.732696533203, -205.817001342773, 53.8409042358398), 15 | vec3(335.27978515625, -213.279769897461, 53.8431167602539), 16 | vec3(546.979309082031, -207.427703857422, 53.7732124328613), 17 | vec3(303.611633300781, -174.296340942383, 57.4277954101563), 18 | vec3(388.248901367188, -82.1120986938477, 67.4467544555664), 19 | vec3(353.871612548828, -126.939880371094, 65.9824523925781), 20 | vec3(267.145294189453, -150.983749389648, 63.5137596130371), 21 | vec3(245.70703125, -145.144439697266, 63.2356109619141), 22 | vec3(212.403762817383, -24.7241287231445, 69.4420166015625), 23 | vec3(176.177703857422, -67.8491516113281, 68.2495803833008), 24 | vec3(165.744750976563, -113.256736755371, 62.0614356994629), 25 | vec3(196.085632324219, -157.104339599609, 56.4725303649902), 26 | vec3(171.977188110352, -34.9312553405762, 67.7583847045898), 27 | vec3(114.977584838867, -99.8651580810547, 60.4771919250488), 28 | vec3(86.7692108154297, -100.260398864746, 59.1181831359863), 29 | vec3(26.0904140472412, -73.1540985107422, 61.3461799621582), 30 | vec3(-11.983060836792, -78.6496200561523, 56.8573036193848), 31 | vec3(11.9316091537476, -3.83730173110962, 69.9814147949219), 32 | vec3(0.237976536154747, 27.7774333953857, 70.7471694946289), 33 | vec3(-45.3299217224121, -20.6062450408936, 68.2370071411133), 34 | vec3(-98.6652984619141, -63.4526863098145, 56.1215362548828), 35 | vec3(-108.958450317383, 36.9439506530762, 71.1790466308594), 36 | vec3(-185.084457397461, 97.5139465332031, 69.8506698608398), 37 | vec3(-166.521682739258, 114.104721069336, 70.0628509521484), 38 | vec3(-191.907958984375, 134.994033813477, 69.5727081298828), 39 | vec3(-264.137969970703, 198.03092956543, 85.0904312133789), 40 | vec3(-177.637008666992, 213.771255493164, 88.5552062988281), 41 | vec3(-182.930419921875, 316.721832275391, 97.5557632446289), 42 | vec3(-127.102439880371, 177.254760742188, 85.503044128418), 43 | vec3(-74.2093200683594, 145.735504150391, 81.1078872680664), 44 | vec3(88.2836380004883, 184.7744140625, 104.354156494141), 45 | vec3(78.4332656860352, 168.985961914063, 104.335487365723), 46 | vec3(154.720397949219, 170.130432128906, 104.809013366699), 47 | vec3(326.063537597656, 96.4807891845703, 99.490119934082), 48 | vec3(382.353393554688, 63.7339401245117, 97.7345428466797), 49 | vec3(338.004821777344, 41.2871208190918, 90.1132507324219), 50 | vec3(274.633117675781, 4.60633182525635, 78.9510192871094), 51 | vec3(281.837341308594, -45.6216087341309, 70.6862335205078), 52 | vec3(381.503295898438, 115.495231628418, 102.33438873291), 53 | vec3(649.293395996094, -10.4862375259399, 82.5059432983398), 54 | vec3(683.592163085938, 72.1659393310547, 83.2104721069336), 55 | vec3(549.217712402344, 154.938140869141, 98.9910430908203), 56 | vec3(520.515747070313, 168.794052124023, 99.1263580322266), 57 | vec3(437.372039794922, 222.17073059082, 102.921821594238), 58 | vec3(368.649993896484, 339.2578125, 103.005744934082), 59 | vec3(220.53923034668, 272.936248779297, 105.255218505859), 60 | --midtown 20 area 2 49 61 | vec3(385.352111816406, -904.107788085938, 29.0522365570068), 62 | vec3(365.969848632813, -824.960754394531, 28.8995971679688), 63 | vec3(332.714202880859, -949.290710449219, 29.140661239624), 64 | vec3(299.720153808594, -902.88330078125, 28.8994235992432), 65 | vec3(323.334716796875, -683.579345703125, 28.9122982025146), 66 | vec3(87.2545700073242, -819.47998046875, 30.7565860748291), 67 | vec3(37.7948722839355, -1002.40435791016, 29.0543842315674), 68 | vec3(101.742057800293, -1120.96765136719, 28.9251003265381), 69 | vec3(307.379272460938, -1085.22058105469, 28.9452438354492), 70 | vec3(-47.2743873596191, -762.72216796875, 32.4531669616699), 71 | vec3(-274.226348876953, -564.568237304688, 29.7809448242188), 72 | vec3(-307.191253662109, -712.606811523438, 28.064624786377), 73 | vec3(-267.318206787109, -831.868835449219, 31.3706645965576), 74 | vec3(-292.107818603516, -988.930786132813, 23.7439479827881), 75 | vec3(-47.6948432922363, -785.235900878906, 43.8152542114258), 76 | vec3(66.4006576538086, -734.228820800781, 43.8344421386719), 77 | vec3(105.720031738281, -624.741760253906, 43.8211212158203), 78 | vec3(495.365661621094, -778.442321777344, 24.4849834442139), 79 | vec3(851.067077636719, -950.545227050781, 25.8883152008057), 80 | vec3(849.662719726563, -1053.74816894531, 27.6498584747314), 81 | -- east village 29 82 | vec3(902.838317871094, -142.258270263672, 76.3618240356445), 83 | vec3(970.883605957031, -117.029663085938, 74.1100769042969), 84 | vec3(945.690185546875, -255.781066894531, 67.2504653930664), 85 | vec3(868.21728515625, -208.389022827148, 70.3895111083984), 86 | vec3(768.811462402344, -156.665115356445, 74.2722396850586), 87 | vec3(1203.64440917969, -454.903961181641, 66.4116821289063), 88 | vec3(1151.87744140625, -461.1796875, 66.5673065185547), 89 | vec3(1194.6396484375, -629.046875, 62.6697311401367), 90 | vec3(1214.32604980469, -705.528747558594, 59.7364654541016), 91 | vec3(1223.96301269531, -729.414794921875, 60.0188598632813), 92 | vec3(1280.37512207031, -672.556762695313, 65.9052810668945), 93 | vec3(1261.6884765625, -620.793701171875, 68.8272933959961), 94 | vec3(1307.43054199219, -537.859313964844, 70.9507827758789), 95 | vec3(1351.63500976563, -595.812377929688, 74.0946197509766), 96 | vec3(1273.45751953125, -458.269714355469, 69.0017929077148), 97 | vec3(1061.04089355469, -390.966857910156, 67.0905303955078), 98 | vec3(993.396606445313, -436.334686279297, 63.6045150756836), 99 | vec3(960.27783203125, -498.431579589844, 60.9737091064453), 100 | vec3(946.991333007813, -510.247619628906, 59.9701652526855), 101 | vec3(882.477783203125, -511.141693115234, 57.0853042602539), 102 | vec3(878.437438964844, -556.980346679688, 57.0162239074707), 103 | vec3(854.214904785156, -565.665466308594, 57.4186058044434), 104 | vec3(917.097778320313, -621.714904785156, 57.5890579223633), 105 | vec3(983.444641113281, -708.400329589844, 57.3073081970215), 106 | vec3(1090.53833007813, -791.255737304688, 58.0193672180176), 107 | vec3(1009.076171875, -590.626403808594, 58.690788269043), 108 | vec3(1053.470703125, -489.113891601563, 63.5801620483398), 109 | vec3(1071.23400878906, -447.562896728516, 65.3984756469727), 110 | vec3(972.033752441406, -554.108215332031, 58.8319549560547), 111 | --northside of south ls 18 area 3 43 112 | vec3(-206.080169677734, -1318.03527832031, 30.5125579833984), 113 | vec3(-151.778945922852, -1349.14709472656, 29.463903427124), 114 | vec3(-214.70263671875, -1359.99255371094, 30.8813018798828), 115 | vec3(-106.83226776123, -1457.93762207031, 33.0243949890137), 116 | vec3(-53.0842018127441, -1505.03540039063, 30.9284286499023), 117 | vec3(-191.262603759766, -1608.03076171875, 33.6884918212891), 118 | vec3(-107.097640991211, -1598.89270019531, 31.2714824676514), 119 | vec3(-13.6944303512573, -1453.07653808594, 29.963399887085), 120 | vec3(11.373348236084, -1455.75622558594, 29.9189186096191), 121 | vec3(148.119903564453, -1517.82336425781, 28.5764427185059), 122 | vec3(224.491546630859, -1520.30322265625, 28.5792541503906), 123 | vec3(403.846832275391, -1502.89172363281, 28.7238178253174), 124 | vec3(467.354461669922, -1579.06457519531, 28.5578155517578), 125 | vec3(393.531311035156, -1436.67004394531, 28.8963184356689), 126 | vec3(333.338714599609, -1261.2724609375, 31.1195201873779), 127 | vec3(497.880340576172, -1335.07336425781, 28.7632160186768), 128 | vec3(498.269134521484, -1400.85144042969, 28.8060188293457), 129 | vec3(479.41357421875, -1517.90832519531, 28.7261981964111), 130 | -- south south 25 131 | vec3(-63.1068229675293, -1789.77734375, 27.3188400268555), 132 | vec3(18.1376876831055, -1879.91833496094, 22.6591415405273), 133 | vec3(93.9403533935547, -1960.46398925781, 20.3599662780762), 134 | vec3(115.805252075195, -1931.6064453125, 20.3829689025879), 135 | vec3(157.643142700195, -1895.97875976563, 22.6697120666504), 136 | vec3(199.111679077148, -1897.39379882813, 23.8366222381592), 137 | vec3(176.815093994141, -1837.81481933594, 27.7052974700928), 138 | vec3(243.076507568359, -1854.3154296875, 26.2651119232178), 139 | vec3(227.982315063477, -1714.19995117188, 28.7936859130859), 140 | vec3(335.734924316406, -1755.53869628906, 28.7484760284424), 141 | vec3(298.528900146484, -1802.91943359375, 27.0873889923096), 142 | vec3(128.719940185547, -1715.08996582031, 28.7247829437256), 143 | vec3(431.897003173828, -1852.5224609375, 27.159065246582), 144 | vec3(249.754867553711, -1955.12683105469, 22.7369632720947), 145 | vec3(158.364028930664, -1969.00952148438, 18.1727161407471), 146 | vec3(320.95068359375, -1983.98608398438, 22.5428123474121), 147 | vec3(361.352874755859, -2062.46362304688, 21.1120758056641), 148 | vec3(449.619964599609, -1961.78186035156, 22.5744915008545), 149 | vec3(495.053131103516, -1969.17468261719, 24.5272254943848), 150 | vec3(478.685485839844, -1888.86437988281, 25.7081508636475), 151 | vec3(527.154907226563, -1830.65100097656, 27.7945537567139), 152 | vec3(499.024108886719, -1720.14123535156, 28.9230213165283), 153 | vec3(480.19287109375, -1776.34997558594, 28.17746925354), 154 | vec3(516.267639160156, -1987.08154296875, 24.4292316436768), 155 | vec3(83.5366134643555, -2560.27319335938, 5.61167287826538), 156 | -- vinewood 53 area 4 53 157 | vec3(-345.338989257813, 112.053901672363, 66.2454071044922), 158 | vec3(-397.341064453125, 136.209030151367, 65.0139541625977), 159 | vec3(-357.603210449219, 29.5045299530029, 47.3471260070801), 160 | vec3(-509.991149902344, 117.059188842773, 62.9262809753418), 161 | vec3(-426.307189941406, -24.4472904205322, 45.793270111084), 162 | vec3(-646.845886230469, 32.2951354980469, 38.9617385864258), 163 | vec3(-695.284729003906, 40.4299240112305, 42.7703437805176), 164 | vec3(-642.420593261719, 105.648887634277, 56.4914627075195), 165 | vec3(-477.898010253906, 224.572387695313, 82.6851654052734), 166 | vec3(-421.778564453125, 293.303253173828, 82.7933502197266), 167 | vec3(-349.973480224609, 217.803176879883, 86.0165405273438), 168 | vec3(-311.754608154297, 227.975570678711, 87.411506652832), 169 | vec3(-559.525512695313, 300.540161132813, 82.6860198974609), 170 | vec3(-773.259338378906, 297.901824951172, 85.1530609130859), 171 | vec3(-739.878601074219, 241.291397094727, 75.8833618164063), 172 | vec3(-639.6669921875, 168.995559692383, 60.6939163208008), 173 | vec3(-825.281616210938, 177.80989074707, 70.6563720703125), 174 | vec3(-839.051818847656, 113.525749206543, 54.7545013427734), 175 | vec3(-1046.44592285156, 219.620895385742, 63.1960334777832), 176 | vec3(-987.833129882813, 144.561172485352, 60.0635757446289), 177 | vec3(-956.985534667969, 115.316078186035, 56.3222732543945), 178 | vec3(-920.415832519531, 107.748840332031, 54.7536239624023), 179 | vec3(-953.544494628906, 187.443695068359, 66.0121154785156), 180 | vec3(-925.919921875, 12.5866889953613, 47.1334228515625), 181 | vec3(-833.679748535156, -35.751953125, 38.1416053771973), 182 | vec3(-891.493591308594, -2.13482284545898, 42.8728981018066), 183 | vec3(-707.653625488281, -185.055709838867, 36.286506652832), 184 | vec3(-736.120910644531, -135.057693481445, 36.6698455810547), 185 | vec3(-693.238952636719, -267.792358398438, 35.6989402770996), 186 | vec3(-725.841552734375, -424.554534912109, 34.6384391784668), 187 | vec3(-483.000213623047, -452.832427978516, 33.6180801391602), 188 | vec3(-930.965209960938, -461.445678710938, 36.5572166442871), 189 | vec3(-1022.22869873047, -492.600341796875, 36.393669128418), 190 | vec3(-1083.98754882813, -375.209869384766, 36.2828674316406), 191 | vec3(-1041.00256347656, -387.940582275391, 37.1276512145996), 192 | vec3(-489.890258789063, -57.8195838928223, 39.4080772399902), 193 | vec3(-459.117950439453, -137.876342773438, 37.7294998168945), 194 | vec3(-1158.54418945313, -226.049575805664, 37.3476867675781), 195 | vec3(-1096.38989257813, -317.182922363281, 37.0811614990234), 196 | vec3(-1167.88439941406, -335.995910644531, 37.0393447875977), 197 | vec3(-1159.66394042969, -399.218536376953, 35.2171363830566), 198 | vec3(-1285.06042480469, -428.360656738281, 34.1927833557129), 199 | vec3(-1345.60363769531, -293.904479980469, 39.556827545166), 200 | vec3(-1355.54406738281, -216.085372924805, 43.1127738952637), 201 | vec3(-1460.88781738281, -30.0602798461914, 54.0585327148438), 202 | vec3(-1549.58898925781, -82.2022399902344, 53.5496940612793), 203 | vec3(-1558.42346191406, -36.5513725280762, 56.2246398925781), 204 | vec3(-1465.9638671875, 40.2094383239746, 53.3123359680176), 205 | vec3(-1567.9599609375, 31.9729785919189, 58.474910736084), 206 | vec3(-1544.01892089844, 125.423881530762, 56.1950454711914), 207 | vec3(-1243.25708007813, 385.332092285156, 74.8804092407227), 208 | vec3(-1396.58581542969, -294.828826904297, 42.9301376342773), 209 | vec3(-1275.1884765625, -558.754516601563, 29.4832954406738), 210 | --beach 54 area 5 54 211 | vec3(-1198.26147460938, -732.103393554688, 20.338794708252), 212 | vec3(-1221.9326171875, -705.452880859375, 21.9235076904297), 213 | vec3(-754.695373535156, -912.980224609375, 18.7608795166016), 214 | vec3(-822.445251464844, -990.14111328125, 13.0752420425415), 215 | vec3(-770.191345214844, -1302.67626953125, 4.40547657012939), 216 | vec3(-855.579284667969, -1270.13977050781, 4.41537761688232), 217 | vec3(-683.339782714844, -885.247619628906, 23.9142284393311), 218 | vec3(-948.41650390625, -1082.64819335938, 1.5385490655899), 219 | vec3(-1072.21813964844, -1158.8486328125, 1.52664005756378), 220 | vec3(-988.570922851563, -985.8173828125, 1.36811316013336), 221 | vec3(-1120.69995117188, -1063.10327148438, 1.39628577232361), 222 | vec3(-1093.37817382813, -919.305236816406, 2.29149770736694), 223 | vec3(-1276.34350585938, -1152.94787597656, 5.5441370010376), 224 | vec3(-1253.9658203125, -1197.61608886719, 6.34510087966919), 225 | vec3(-1339.50646972656, -1210.49499511719, 3.96823167800903), 226 | vec3(-1279.34484863281, -1251.06213378906, 3.29812169075012), 227 | vec3(-1153.234375, -1520.67614746094, 3.64794492721558), 228 | vec3(-1185.71105957031, -1562.92419433594, 3.65394926071167), 229 | vec3(-1132.697265625, -1582.4326171875, 3.55767679214478), 230 | vec3(-1083.09106445313, -1535.39392089844, 3.84467601776123), 231 | vec3(-1067.95288085938, -1538.41821289063, 4.11108350753784), 232 | vec3(-1021.89056396484, -1519.9560546875, 4.89227819442749), 233 | vec3(-1054.50463867188, -1571.13122558594, 4.0337233543396), 234 | vec3(-1105.31286621094, -1681.4150390625, 3.62900733947754), 235 | vec3(-941.772766113281, -1524.78881835938, 4.33578824996948), 236 | vec3(-990.477905273438, -1437.67309570313, 4.34794092178345), 237 | vec3(-1210.47351074219, -1148.54956054688, 6.94658946990967), 238 | vec3(-1379.82702636719, -973.952514648438, 8.07372856140137), 239 | vec3(-1468.36853027344, -925.037353515625, 9.58611583709717), 240 | vec3(-1297.83459472656, -787.924682617188, 17.0836410522461), 241 | vec3(-1268.61389160156, -818.876708984375, 16.6243114471436), 242 | vec3(-1407.99182128906, -735.800415039063, 23.0887184143066), 243 | vec3(-1377.88793945313, -652.622497558594, 28.2150058746338), 244 | vec3(-1642.96533203125, -993.046203613281, 12.5428237915039), 245 | vec3(-1691.28979492188, -1068.29382324219, 12.5562171936035), 246 | vec3(-1818.53234863281, -1210.51550292969, 12.5427179336548), 247 | vec3(-1540.11462402344, -582.15087890625, 33.2285423278809), 248 | vec3(-1526.26147460938, -281.718872070313, 48.6887893676758), 249 | vec3(-1570.37072753906, -288.545227050781, 47.6945915222168), 250 | vec3(-1567.60192871094, -236.082565307617, 48.8926277160645), 251 | vec3(-1610.322265625, -382.220367431641, 42.5706596374512), 252 | vec3(-1608.48828125, -413.600250244141, 40.8177070617676), 253 | vec3(-1668.81750488281, -452.784637451172, 38.6393394470215), 254 | vec3(-1714.82043457031, -502.125366210938, 37.5113868713379), 255 | vec3(-1711.01318359375, -416.278228759766, 44.0267486572266), 256 | vec3(-1656.42749023438, -357.58056640625, 48.8499755859375), 257 | vec3(-1775.29406738281, -364.032867431641, 44.7817306518555), 258 | vec3(-1863.40234375, -352.799896240234, 48.6571655273438), 259 | vec3(-2183.59985351563, -408.342437744141, 12.469780921936), 260 | vec3(-1929.66540527344, -530.206298828125, 11.2496871948242), 261 | vec3(-1897.53198242188, -556.751281738281, 11.154369354248), 262 | vec3(-1862.7236328125, -585.575744628906, 10.9879150390625), 263 | vec3(-1802.40234375, -637.487426757813, 10.4068717956543), 264 | vec3(-1758.70397949219, -682.206176757813, 9.49457454681396), 265 | --Vinewood hills 30 area 6 30 266 | vec3(-1082.61889648438, 456.733764648438, 76.3031158447266), 267 | vec3(-1039.49841308594, 496.919799804688, 82.054817199707), 268 | vec3(-858.334350585938, 515.422668457031, 89.1987915039063), 269 | vec3(-918.225280761719, 579.730895996094, 99.0909881591797), 270 | vec3(-1022.71704101563, 593.901428222656, 102.37043762207), 271 | vec3(-1383.03857421875, 450.747894287109, 104.104797363281), 272 | vec3(-1449.8525390625, 531.747314453125, 118.468521118164), 273 | vec3(-1539.69030761719, 427.578247070313, 108.835731506348), 274 | vec3(-1353.65515136719, 567.254638671875, 129.946884155273), 275 | vec3(-1284.90588378906, 644.803039550781, 138.594711303711), 276 | vec3(-1117.29162597656, 774.75341796875, 161.646728515625), 277 | vec3(-1048.46252441406, 767.957885742188, 166.836151123047), 278 | vec3(-910.521057128906, 697.753173828125, 150.719833374023), 279 | vec3(-695.307739257813, 666.498901367188, 153.162490844727), 280 | vec3(-696.717468261719, 706.821899414063, 156.824630737305), 281 | vec3(-580.781188964844, 739.828308105469, 183.007995605469), 282 | vec3(-746.078308105469, 816.215942382813, 212.794815063477), 283 | vec3(-968.549499511719, 764.239562988281, 174.750885009766), 284 | vec3(-472.506805419922, 652.219665527344, 143.608108520508), 285 | vec3(-347.918975830078, 636.378967285156, 171.423629760742), 286 | vec3(-225.667541503906, 594.723815917969, 189.643768310547), 287 | vec3(-483.942352294922, 553.29541015625, 119.060554504395), 288 | vec3(-411.493103027344, 555.736389160156, 123.182189941406), 289 | vec3(-362.981781005859, 509.676635742188, 118.377410888672), 290 | vec3(-231.069961547852, 497.976867675781, 127.233642578125), 291 | vec3(-3.63188219070435, 472.345947265625, 145.123123168945), 292 | vec3(115.164993286133, 490.907501220703, 146.428985595703), 293 | vec3(226.296096801758, 679.674255371094, 188.863845825195), 294 | vec3(118.493515014648, 569.005310058594, 182.409606933594), 295 | vec3(9.64954662322998, 545.573791503906, 175.11296081543), 296 | -- docks & ind 44 area 7 44 297 | vec3(-63.1068229675293, -1789.77734375, 27.3188400268555), 298 | vec3(18.1376876831055, -1879.91833496094, 22.6591415405273), 299 | vec3(93.9403533935547, -1960.46398925781, 20.3599662780762), 300 | vec3(115.805252075195, -1931.6064453125, 20.3829689025879), 301 | vec3(157.643142700195, -1895.97875976563, 22.6697120666504), 302 | vec3(199.111679077148, -1897.39379882813, 23.8366222381592), 303 | vec3(176.815093994141, -1837.81481933594, 27.7052974700928), 304 | vec3(243.076507568359, -1854.3154296875, 26.2651119232178), 305 | vec3(227.982315063477, -1714.19995117188, 28.7936859130859), 306 | vec3(335.734924316406, -1755.53869628906, 28.7484760284424), 307 | vec3(298.528900146484, -1802.91943359375, 27.0873889923096), 308 | vec3(128.719940185547, -1715.08996582031, 28.7247829437256), 309 | vec3(431.897003173828, -1852.5224609375, 27.159065246582), 310 | vec3(249.754867553711, -1955.12683105469, 22.7369632720947), 311 | vec3(158.364028930664, -1969.00952148438, 18.1727161407471), 312 | vec3(320.95068359375, -1983.98608398438, 22.5428123474121), 313 | vec3(361.352874755859, -2062.46362304688, 21.1120758056641), 314 | vec3(449.619964599609, -1961.78186035156, 22.5744915008545), 315 | vec3(495.053131103516, -1969.17468261719, 24.5272254943848), 316 | vec3(478.685485839844, -1888.86437988281, 25.7081508636475), 317 | vec3(527.154907226563, -1830.65100097656, 27.7945537567139), 318 | vec3(499.024108886719, -1720.14123535156, 28.9230213165283), 319 | vec3(480.19287109375, -1776.34997558594, 28.17746925354), 320 | vec3(516.267639160156, -1987.08154296875, 24.4292316436768), 321 | vec3(83.5366134643555, -2560.27319335938, 5.61167287826538), 322 | vec3(-41.2876281738281, -2508.9697265625, 5.62094259262085), 323 | vec3(-256.736572265625, -2653.59643554688, 5.61118936538696), 324 | vec3(-406.068664550781, -2799.0322265625, 5.60997343063354), 325 | vec3(-68.2952651977539, -2651.14672851563, 5.60910415649414), 326 | vec3(144.771682739258, -3331.01391601563, 5.63123273849487), 327 | vec3(1235.23852539063, -3205.35205078125, 5.2932333946228), 328 | vec3(782.038696289063, -2982.02368164063, 5.4059853553772), 329 | vec3(959.550048828125, -2372.13989257813, 30.1417827606201), 330 | vec3(1050.63415527344, -2366.83447265625, 30.1897411346436), 331 | vec3(1088.68811035156, -2289.53930664063, 29.7793636322021), 332 | vec3(1041.94897460938, -2178.07690429688, 31.0512428283691), 333 | vec3(934.963134765625, -1964.57470703125, 30.0044727325439), 334 | vec3(924.246398925781, -2020.62280273438, 29.9459743499756), 335 | vec3(967.231506347656, -1816.20007324219, 30.6835784912109), 336 | vec3(946.368469238281, -1697.91320800781, 29.6896724700928), 337 | vec3(943.090209960938, -1455.56103515625, 30.8775959014893), 338 | vec3(1158.44934082031, -1316.01293945313, 34.3467903137207), 339 | vec3(1122.14929199219, -1516.86755371094, 34.2972297668457), 340 | vec3(1144.16955566406, -1406.31457519531, 34.1875534057617), 341 | --Middle 12 area 8 23 342 | vec3(1368.54125976563, 1148.37585449219, 113.178489685059), 343 | vec3(1526.16479492188, 2232.64599609375, 74.9987335205078), 344 | vec3(1256.78369140625, 2732.25512695313, 37.903621673584), 345 | vec3(1167.29711914063, 2694.9296875, 37.2437400817871), 346 | vec3(970.141967773438, 2713.61279296875, 38.9030723571777), 347 | vec3(992.998291015625, 2670.564453125, 39.4808349609375), 348 | vec3(639.194458007813, 2775.55639648438, 41.4039115905762), 349 | vec3(469.878387451172, 2615.11669921875, 42.5683555603027), 350 | vec3(210.685165405273, 2441.17944335938, 58.1409759521484), 351 | vec3(2328.56982421875, 2536.35229492188, 46.0820045471191), 352 | vec3(2340.09350585938, 2563.72924804688, 46.0874938964844), 353 | vec3(2355.49072265625, 2604.63671875, 46.0298919677734), 354 | -- west highway 11 355 | vec3(-2168.57250976563, 4280.140625, 48.3848724365234), 356 | vec3(-3173.88549804688, 1287.88549804688, 13.048150062561), 357 | vec3(-3186.60620117188, 1205.49169921875, 9.00630378723145), 358 | vec3(-3223.00537109375, 1089.49377441406, 10.0752859115601), 359 | vec3(-3229.71606445313, 935.228332519531, 13.1745624542236), 360 | vec3(-3071.552734375, 660.567443847656, 10.4349632263184), 361 | vec3(-3030.2353515625, 557.701049804688, 6.92861461639404), 362 | vec3(-3087.87377929688, 341.875518798828, 6.81103372573853), 363 | vec3(-3100.47436523438, 251.342041015625, 11.3144130706787), 364 | vec3(-3085.12280273438, 226.084823608398, 13.4391069412231), 365 | vec3(-2954.541015625, 56.8714408874512, 11.026927947998), 366 | -- sandy shores 21 area 9 21 367 | vec3(911.395751953125, 3639.84936523438, 31.8263988494873), 368 | vec3(1386.66101074219, 3673.80810546875, 32.9897689819336), 369 | vec3(1449.73059082031, 3647.22094726563, 33.9458160400391), 370 | vec3(1552.91223144531, 3728.9931640625, 33.8886222839355), 371 | vec3(1736.66455078125, 3716.05908203125, 33.513500213623), 372 | vec3(1651.04333496094, 3715.67700195313, 33.4959411621094), 373 | vec3(1766.31213378906, 3737.62939453125, 33.3441429138184), 374 | vec3(1738.87829589844, 3777.90454101563, 33.4907302856445), 375 | vec3(1731.28869628906, 3906.158203125, 34.2488441467285), 376 | vec3(1805.48291015625, 3933.0302734375, 33.1589088439941), 377 | vec3(1871.23974609375, 3918.650390625, 32.413932800293), 378 | vec3(1735.21948242188, 3841.04418945313, 34.1998405456543), 379 | vec3(1842.48449707031, 3769.06030273438, 32.7706260681152), 380 | vec3(1984.5908203125, 3823.43334960938, 31.7744560241699), 381 | vec3(1906.23522949219, 3860.53344726563, 31.736156463623), 382 | vec3(2428.35791015625, 4017.60717773438, 36.18896484375), 383 | vec3(1674.25109863281, 4953.2294921875, 41.7437362670898), 384 | vec3(1660.30810546875, 4875.9296875, 41.437671661377), 385 | vec3(1668.93762207031, 4769.88134765625, 41.2895812988281), 386 | vec3(1689.79577636719, 4681.22314453125, 42.4225883483887), 387 | vec3(1710.91198730469, 4635.6796875, 42.7580299377441), 388 | --paleto 19 area 10 19 389 | vec3(1693.26672363281, 6428.77099609375, 32.02294921875), 390 | vec3(419.673522949219, 6520.1103515625, 27.1485118865967), 391 | vec3(144.997207641602, 6642.369140625, 30.9701557159424), 392 | vec3(25.9349040985107, 6655.5185546875, 30.8951015472412), 393 | vec3(-11.4208126068115, 6641.86572265625, 30.4945182800293), 394 | vec3(-6.34835910797119, 6620.44287109375, 30.7430229187012), 395 | vec3(-126.502395629883, 6548.17236328125, 28.8517150878906), 396 | vec3(-142.154541015625, 6439.4951171875, 30.7863731384277), 397 | vec3(-26.3420734405518, 6456.259765625, 30.8693256378174), 398 | vec3(46.8197975158691, 6300.17236328125, 30.6521873474121), 399 | vec3(-274.786987304688, 6248.19873046875, 30.8288879394531), 400 | vec3(-356.575744628906, 6328.09326171875, 29.2854118347168), 401 | vec3(-296.947021484375, 6340.74755859375, 31.2577152252197), 402 | vec3(-263.952667236328, 6370.515625, 30.7237071990967), 403 | vec3(-361.863677978516, 6275.29541015625, 30.0340919494629), 404 | vec3(-394.516265869141, 6309.8251953125, 28.5605697631836), 405 | vec3(-437.205017089844, 6202.87890625, 29.0140762329102), 406 | vec3(-347.462097167969, 6215.3486328125, 30.908576965332), 407 | vec3(-358.095367431641, 6066.47216796875, 30.9185104370117), 408 | }, 409 | 410 | targets = { 411 | -- easy vinewoord 56 area 1 56 412 | vec3(-11.7389554977417, -303.995056152344, 45.5747222900391), 413 | vec3(146.843276977539, -300.878265380859, 45.3772392272949), 414 | vec3(90.9032745361328, -287.846313476563, 46.2548522949219), 415 | vec3(-25.0742530822754, -232.339614868164, 45.9333648681641), 416 | vec3(-120.107566833496, -364.745635986328, 36.387809753418), 417 | vec3(-25.1990394592285, -195.758193969727, 52.1177139282227), 418 | vec3(-5.50260925292969, -146.08544921875, 56.2241859436035), 419 | vec3(27.7411308288574, -210.56852722168, 52.6132545471191), 420 | vec3(157.997344970703, -260.784973144531, 51.1468048095703), 421 | vec3(114.574058532715, -245.457168579102, 51.1555404663086), 422 | vec3(315.732696533203, -205.817001342773, 53.8409042358398), 423 | vec3(335.27978515625, -213.279769897461, 53.8431167602539), 424 | vec3(546.979309082031, -207.427703857422, 53.7732124328613), 425 | vec3(303.611633300781, -174.296340942383, 57.4277954101563), 426 | vec3(388.248901367188, -82.1120986938477, 67.4467544555664), 427 | vec3(353.871612548828, -126.939880371094, 65.9824523925781), 428 | vec3(267.145294189453, -150.983749389648, 63.5137596130371), 429 | vec3(245.70703125, -145.144439697266, 63.2356109619141), 430 | vec3(212.403762817383, -24.7241287231445, 69.4420166015625), 431 | vec3(176.177703857422, -67.8491516113281, 68.2495803833008), 432 | vec3(165.744750976563, -113.256736755371, 62.0614356994629), 433 | vec3(196.085632324219, -157.104339599609, 56.4725303649902), 434 | vec3(171.977188110352, -34.9312553405762, 67.7583847045898), 435 | vec3(114.977584838867, -99.8651580810547, 60.4771919250488), 436 | vec3(86.7692108154297, -100.260398864746, 59.1181831359863), 437 | vec3(26.0904140472412, -73.1540985107422, 61.3461799621582), 438 | vec3(-11.983060836792, -78.6496200561523, 56.8573036193848), 439 | vec3(11.9316091537476, -3.83730173110962, 69.9814147949219), 440 | vec3(0.237976536154747, 27.7774333953857, 70.7471694946289), 441 | vec3(-45.3299217224121, -20.6062450408936, 68.2370071411133), 442 | vec3(-98.6652984619141, -63.4526863098145, 56.1215362548828), 443 | vec3(-108.958450317383, 36.9439506530762, 71.1790466308594), 444 | vec3(-185.084457397461, 97.5139465332031, 69.8506698608398), 445 | vec3(-166.521682739258, 114.104721069336, 70.0628509521484), 446 | vec3(-191.907958984375, 134.994033813477, 69.5727081298828), 447 | vec3(-264.137969970703, 198.03092956543, 85.0904312133789), 448 | vec3(-177.637008666992, 213.771255493164, 88.5552062988281), 449 | vec3(-182.930419921875, 316.721832275391, 97.5557632446289), 450 | vec3(-127.102439880371, 177.254760742188, 85.503044128418), 451 | vec3(-74.2093200683594, 145.735504150391, 81.1078872680664), 452 | vec3(88.2836380004883, 184.7744140625, 104.354156494141), 453 | vec3(78.4332656860352, 168.985961914063, 104.335487365723), 454 | vec3(154.720397949219, 170.130432128906, 104.809013366699), 455 | vec3(326.063537597656, 96.4807891845703, 99.490119934082), 456 | vec3(382.353393554688, 63.7339401245117, 97.7345428466797), 457 | vec3(338.004821777344, 41.2871208190918, 90.1132507324219), 458 | vec3(274.633117675781, 4.60633182525635, 78.9510192871094), 459 | vec3(281.837341308594, -45.6216087341309, 70.6862335205078), 460 | vec3(381.503295898438, 115.495231628418, 102.33438873291), 461 | vec3(649.293395996094, -10.4862375259399, 82.5059432983398), 462 | vec3(683.592163085938, 72.1659393310547, 83.2104721069336), 463 | vec3(549.217712402344, 154.938140869141, 98.9910430908203), 464 | vec3(520.515747070313, 168.794052124023, 99.1263580322266), 465 | vec3(437.372039794922, 222.17073059082, 102.921821594238), 466 | vec3(368.649993896484, 339.2578125, 103.005744934082), 467 | vec3(220.53923034668, 272.936248779297, 105.255218505859), 468 | --midtown 20 area 2 49 469 | vec3(385.352111816406, -904.107788085938, 29.0522365570068), 470 | vec3(365.969848632813, -824.960754394531, 28.8995971679688), 471 | vec3(332.714202880859, -949.290710449219, 29.140661239624), 472 | vec3(299.720153808594, -902.88330078125, 28.8994235992432), 473 | vec3(323.334716796875, -683.579345703125, 28.9122982025146), 474 | vec3(87.2545700073242, -819.47998046875, 30.7565860748291), 475 | vec3(37.7948722839355, -1002.40435791016, 29.0543842315674), 476 | vec3(101.742057800293, -1120.96765136719, 28.9251003265381), 477 | vec3(307.379272460938, -1085.22058105469, 28.9452438354492), 478 | vec3(-47.2743873596191, -762.72216796875, 32.4531669616699), 479 | vec3(-274.226348876953, -564.568237304688, 29.7809448242188), 480 | vec3(-307.191253662109, -712.606811523438, 28.064624786377), 481 | vec3(-267.318206787109, -831.868835449219, 31.3706645965576), 482 | vec3(-292.107818603516, -988.930786132813, 23.7439479827881), 483 | vec3(-47.6948432922363, -785.235900878906, 43.8152542114258), 484 | vec3(66.4006576538086, -734.228820800781, 43.8344421386719), 485 | vec3(105.720031738281, -624.741760253906, 43.8211212158203), 486 | vec3(495.365661621094, -778.442321777344, 24.4849834442139), 487 | vec3(851.067077636719, -950.545227050781, 25.8883152008057), 488 | vec3(849.662719726563, -1053.74816894531, 27.6498584747314), 489 | -- east village 29 490 | vec3(902.838317871094, -142.258270263672, 76.3618240356445), 491 | vec3(970.883605957031, -117.029663085938, 74.1100769042969), 492 | vec3(945.690185546875, -255.781066894531, 67.2504653930664), 493 | vec3(868.21728515625, -208.389022827148, 70.3895111083984), 494 | vec3(768.811462402344, -156.665115356445, 74.2722396850586), 495 | vec3(1203.64440917969, -454.903961181641, 66.4116821289063), 496 | vec3(1151.87744140625, -461.1796875, 66.5673065185547), 497 | vec3(1194.6396484375, -629.046875, 62.6697311401367), 498 | vec3(1214.32604980469, -705.528747558594, 59.7364654541016), 499 | vec3(1223.96301269531, -729.414794921875, 60.0188598632813), 500 | vec3(1280.37512207031, -672.556762695313, 65.9052810668945), 501 | vec3(1261.6884765625, -620.793701171875, 68.8272933959961), 502 | vec3(1307.43054199219, -537.859313964844, 70.9507827758789), 503 | vec3(1351.63500976563, -595.812377929688, 74.0946197509766), 504 | vec3(1273.45751953125, -458.269714355469, 69.0017929077148), 505 | vec3(1061.04089355469, -390.966857910156, 67.0905303955078), 506 | vec3(993.396606445313, -436.334686279297, 63.6045150756836), 507 | vec3(960.27783203125, -498.431579589844, 60.9737091064453), 508 | vec3(946.991333007813, -510.247619628906, 59.9701652526855), 509 | vec3(882.477783203125, -511.141693115234, 57.0853042602539), 510 | vec3(878.437438964844, -556.980346679688, 57.0162239074707), 511 | vec3(854.214904785156, -565.665466308594, 57.4186058044434), 512 | vec3(917.097778320313, -621.714904785156, 57.5890579223633), 513 | vec3(983.444641113281, -708.400329589844, 57.3073081970215), 514 | vec3(1090.53833007813, -791.255737304688, 58.0193672180176), 515 | vec3(1009.076171875, -590.626403808594, 58.690788269043), 516 | vec3(1053.470703125, -489.113891601563, 63.5801620483398), 517 | vec3(1071.23400878906, -447.562896728516, 65.3984756469727), 518 | vec3(972.033752441406, -554.108215332031, 58.8319549560547), 519 | --northside of south ls 18 area 3 43 520 | vec3(-206.080169677734, -1318.03527832031, 30.5125579833984), 521 | vec3(-151.778945922852, -1349.14709472656, 29.463903427124), 522 | vec3(-214.70263671875, -1359.99255371094, 30.8813018798828), 523 | vec3(-106.83226776123, -1457.93762207031, 33.0243949890137), 524 | vec3(-53.0842018127441, -1505.03540039063, 30.9284286499023), 525 | vec3(-191.262603759766, -1608.03076171875, 33.6884918212891), 526 | vec3(-107.097640991211, -1598.89270019531, 31.2714824676514), 527 | vec3(-13.6944303512573, -1453.07653808594, 29.963399887085), 528 | vec3(11.373348236084, -1455.75622558594, 29.9189186096191), 529 | vec3(148.119903564453, -1517.82336425781, 28.5764427185059), 530 | vec3(224.491546630859, -1520.30322265625, 28.5792541503906), 531 | vec3(403.846832275391, -1502.89172363281, 28.7238178253174), 532 | vec3(467.354461669922, -1579.06457519531, 28.5578155517578), 533 | vec3(393.531311035156, -1436.67004394531, 28.8963184356689), 534 | vec3(333.338714599609, -1261.2724609375, 31.1195201873779), 535 | vec3(497.880340576172, -1335.07336425781, 28.7632160186768), 536 | vec3(498.269134521484, -1400.85144042969, 28.8060188293457), 537 | vec3(479.41357421875, -1517.90832519531, 28.7261981964111), 538 | -- south south 25 539 | vec3(-63.1068229675293, -1789.77734375, 27.3188400268555), 540 | vec3(18.1376876831055, -1879.91833496094, 22.6591415405273), 541 | vec3(93.9403533935547, -1960.46398925781, 20.3599662780762), 542 | vec3(115.805252075195, -1931.6064453125, 20.3829689025879), 543 | vec3(157.643142700195, -1895.97875976563, 22.6697120666504), 544 | vec3(199.111679077148, -1897.39379882813, 23.8366222381592), 545 | vec3(176.815093994141, -1837.81481933594, 27.7052974700928), 546 | vec3(243.076507568359, -1854.3154296875, 26.2651119232178), 547 | vec3(227.982315063477, -1714.19995117188, 28.7936859130859), 548 | vec3(335.734924316406, -1755.53869628906, 28.7484760284424), 549 | vec3(298.528900146484, -1802.91943359375, 27.0873889923096), 550 | vec3(128.719940185547, -1715.08996582031, 28.7247829437256), 551 | vec3(431.897003173828, -1852.5224609375, 27.159065246582), 552 | vec3(249.754867553711, -1955.12683105469, 22.7369632720947), 553 | vec3(158.364028930664, -1969.00952148438, 18.1727161407471), 554 | vec3(320.95068359375, -1983.98608398438, 22.5428123474121), 555 | vec3(361.352874755859, -2062.46362304688, 21.1120758056641), 556 | vec3(449.619964599609, -1961.78186035156, 22.5744915008545), 557 | vec3(495.053131103516, -1969.17468261719, 24.5272254943848), 558 | vec3(478.685485839844, -1888.86437988281, 25.7081508636475), 559 | vec3(527.154907226563, -1830.65100097656, 27.7945537567139), 560 | vec3(499.024108886719, -1720.14123535156, 28.9230213165283), 561 | vec3(480.19287109375, -1776.34997558594, 28.17746925354), 562 | vec3(516.267639160156, -1987.08154296875, 24.4292316436768), 563 | vec3(83.5366134643555, -2560.27319335938, 5.61167287826538), 564 | -- vinewood 53 area 4 53 565 | vec3(-345.338989257813, 112.053901672363, 66.2454071044922), 566 | vec3(-397.341064453125, 136.209030151367, 65.0139541625977), 567 | vec3(-357.603210449219, 29.5045299530029, 47.3471260070801), 568 | vec3(-509.991149902344, 117.059188842773, 62.9262809753418), 569 | vec3(-426.307189941406, -24.4472904205322, 45.793270111084), 570 | vec3(-646.845886230469, 32.2951354980469, 38.9617385864258), 571 | vec3(-695.284729003906, 40.4299240112305, 42.7703437805176), 572 | vec3(-642.420593261719, 105.648887634277, 56.4914627075195), 573 | vec3(-477.898010253906, 224.572387695313, 82.6851654052734), 574 | vec3(-421.778564453125, 293.303253173828, 82.7933502197266), 575 | vec3(-349.973480224609, 217.803176879883, 86.0165405273438), 576 | vec3(-311.754608154297, 227.975570678711, 87.411506652832), 577 | vec3(-559.525512695313, 300.540161132813, 82.6860198974609), 578 | vec3(-773.259338378906, 297.901824951172, 85.1530609130859), 579 | vec3(-739.878601074219, 241.291397094727, 75.8833618164063), 580 | vec3(-639.6669921875, 168.995559692383, 60.6939163208008), 581 | vec3(-825.281616210938, 177.80989074707, 70.6563720703125), 582 | vec3(-839.051818847656, 113.525749206543, 54.7545013427734), 583 | vec3(-1046.44592285156, 219.620895385742, 63.1960334777832), 584 | vec3(-987.833129882813, 144.561172485352, 60.0635757446289), 585 | vec3(-956.985534667969, 115.316078186035, 56.3222732543945), 586 | vec3(-920.415832519531, 107.748840332031, 54.7536239624023), 587 | vec3(-953.544494628906, 187.443695068359, 66.0121154785156), 588 | vec3(-925.919921875, 12.5866889953613, 47.1334228515625), 589 | vec3(-833.679748535156, -35.751953125, 38.1416053771973), 590 | vec3(-891.493591308594, -2.13482284545898, 42.8728981018066), 591 | vec3(-707.653625488281, -185.055709838867, 36.286506652832), 592 | vec3(-736.120910644531, -135.057693481445, 36.6698455810547), 593 | vec3(-693.238952636719, -267.792358398438, 35.6989402770996), 594 | vec3(-725.841552734375, -424.554534912109, 34.6384391784668), 595 | vec3(-483.000213623047, -452.832427978516, 33.6180801391602), 596 | vec3(-930.965209960938, -461.445678710938, 36.5572166442871), 597 | vec3(-1022.22869873047, -492.600341796875, 36.393669128418), 598 | vec3(-1083.98754882813, -375.209869384766, 36.2828674316406), 599 | vec3(-1041.00256347656, -387.940582275391, 37.1276512145996), 600 | vec3(-489.890258789063, -57.8195838928223, 39.4080772399902), 601 | vec3(-459.117950439453, -137.876342773438, 37.7294998168945), 602 | vec3(-1158.54418945313, -226.049575805664, 37.3476867675781), 603 | vec3(-1096.38989257813, -317.182922363281, 37.0811614990234), 604 | vec3(-1167.88439941406, -335.995910644531, 37.0393447875977), 605 | vec3(-1159.66394042969, -399.218536376953, 35.2171363830566), 606 | vec3(-1285.06042480469, -428.360656738281, 34.1927833557129), 607 | vec3(-1345.60363769531, -293.904479980469, 39.556827545166), 608 | vec3(-1355.54406738281, -216.085372924805, 43.1127738952637), 609 | vec3(-1460.88781738281, -30.0602798461914, 54.0585327148438), 610 | vec3(-1549.58898925781, -82.2022399902344, 53.5496940612793), 611 | vec3(-1558.42346191406, -36.5513725280762, 56.2246398925781), 612 | vec3(-1465.9638671875, 40.2094383239746, 53.3123359680176), 613 | vec3(-1567.9599609375, 31.9729785919189, 58.474910736084), 614 | vec3(-1544.01892089844, 125.423881530762, 56.1950454711914), 615 | vec3(-1243.25708007813, 385.332092285156, 74.8804092407227), 616 | vec3(-1396.58581542969, -294.828826904297, 42.9301376342773), 617 | vec3(-1275.1884765625, -558.754516601563, 29.4832954406738), 618 | --beach 54 area 5 54 619 | vec3(-1198.26147460938, -732.103393554688, 20.338794708252), 620 | vec3(-1221.9326171875, -705.452880859375, 21.9235076904297), 621 | vec3(-754.695373535156, -912.980224609375, 18.7608795166016), 622 | vec3(-822.445251464844, -990.14111328125, 13.0752420425415), 623 | vec3(-770.191345214844, -1302.67626953125, 4.40547657012939), 624 | vec3(-855.579284667969, -1270.13977050781, 4.41537761688232), 625 | vec3(-683.339782714844, -885.247619628906, 23.9142284393311), 626 | vec3(-948.41650390625, -1082.64819335938, 1.5385490655899), 627 | vec3(-1072.21813964844, -1158.8486328125, 1.52664005756378), 628 | vec3(-988.570922851563, -985.8173828125, 1.36811316013336), 629 | vec3(-1120.69995117188, -1063.10327148438, 1.39628577232361), 630 | vec3(-1093.37817382813, -919.305236816406, 2.29149770736694), 631 | vec3(-1276.34350585938, -1152.94787597656, 5.5441370010376), 632 | vec3(-1253.9658203125, -1197.61608886719, 6.34510087966919), 633 | vec3(-1339.50646972656, -1210.49499511719, 3.96823167800903), 634 | vec3(-1279.34484863281, -1251.06213378906, 3.29812169075012), 635 | vec3(-1153.234375, -1520.67614746094, 3.64794492721558), 636 | vec3(-1185.71105957031, -1562.92419433594, 3.65394926071167), 637 | vec3(-1132.697265625, -1582.4326171875, 3.55767679214478), 638 | vec3(-1083.09106445313, -1535.39392089844, 3.84467601776123), 639 | vec3(-1067.95288085938, -1538.41821289063, 4.11108350753784), 640 | vec3(-1021.89056396484, -1519.9560546875, 4.89227819442749), 641 | vec3(-1054.50463867188, -1571.13122558594, 4.0337233543396), 642 | vec3(-1105.31286621094, -1681.4150390625, 3.62900733947754), 643 | vec3(-941.772766113281, -1524.78881835938, 4.33578824996948), 644 | vec3(-990.477905273438, -1437.67309570313, 4.34794092178345), 645 | vec3(-1210.47351074219, -1148.54956054688, 6.94658946990967), 646 | vec3(-1379.82702636719, -973.952514648438, 8.07372856140137), 647 | vec3(-1468.36853027344, -925.037353515625, 9.58611583709717), 648 | vec3(-1297.83459472656, -787.924682617188, 17.0836410522461), 649 | vec3(-1268.61389160156, -818.876708984375, 16.6243114471436), 650 | vec3(-1407.99182128906, -735.800415039063, 23.0887184143066), 651 | vec3(-1377.88793945313, -652.622497558594, 28.2150058746338), 652 | vec3(-1642.96533203125, -993.046203613281, 12.5428237915039), 653 | vec3(-1691.28979492188, -1068.29382324219, 12.5562171936035), 654 | vec3(-1818.53234863281, -1210.51550292969, 12.5427179336548), 655 | vec3(-1540.11462402344, -582.15087890625, 33.2285423278809), 656 | vec3(-1526.26147460938, -281.718872070313, 48.6887893676758), 657 | vec3(-1570.37072753906, -288.545227050781, 47.6945915222168), 658 | vec3(-1567.60192871094, -236.082565307617, 48.8926277160645), 659 | vec3(-1610.322265625, -382.220367431641, 42.5706596374512), 660 | vec3(-1608.48828125, -413.600250244141, 40.8177070617676), 661 | vec3(-1668.81750488281, -452.784637451172, 38.6393394470215), 662 | vec3(-1714.82043457031, -502.125366210938, 37.5113868713379), 663 | vec3(-1711.01318359375, -416.278228759766, 44.0267486572266), 664 | vec3(-1656.42749023438, -357.58056640625, 48.8499755859375), 665 | vec3(-1775.29406738281, -364.032867431641, 44.7817306518555), 666 | vec3(-1863.40234375, -352.799896240234, 48.6571655273438), 667 | vec3(-2183.59985351563, -408.342437744141, 12.469780921936), 668 | vec3(-1929.66540527344, -530.206298828125, 11.2496871948242), 669 | vec3(-1897.53198242188, -556.751281738281, 11.154369354248), 670 | vec3(-1862.7236328125, -585.575744628906, 10.9879150390625), 671 | vec3(-1802.40234375, -637.487426757813, 10.4068717956543), 672 | vec3(-1758.70397949219, -682.206176757813, 9.49457454681396), 673 | --Vinewood hills 30 area 6 30 674 | vec3(-1082.61889648438, 456.733764648438, 76.3031158447266), 675 | vec3(-1039.49841308594, 496.919799804688, 82.054817199707), 676 | vec3(-858.334350585938, 515.422668457031, 89.1987915039063), 677 | vec3(-918.225280761719, 579.730895996094, 99.0909881591797), 678 | vec3(-1022.71704101563, 593.901428222656, 102.37043762207), 679 | vec3(-1383.03857421875, 450.747894287109, 104.104797363281), 680 | vec3(-1449.8525390625, 531.747314453125, 118.468521118164), 681 | vec3(-1539.69030761719, 427.578247070313, 108.835731506348), 682 | vec3(-1353.65515136719, 567.254638671875, 129.946884155273), 683 | vec3(-1284.90588378906, 644.803039550781, 138.594711303711), 684 | vec3(-1117.29162597656, 774.75341796875, 161.646728515625), 685 | vec3(-1048.46252441406, 767.957885742188, 166.836151123047), 686 | vec3(-910.521057128906, 697.753173828125, 150.719833374023), 687 | vec3(-695.307739257813, 666.498901367188, 153.162490844727), 688 | vec3(-696.717468261719, 706.821899414063, 156.824630737305), 689 | vec3(-580.781188964844, 739.828308105469, 183.007995605469), 690 | vec3(-746.078308105469, 816.215942382813, 212.794815063477), 691 | vec3(-968.549499511719, 764.239562988281, 174.750885009766), 692 | vec3(-472.506805419922, 652.219665527344, 143.608108520508), 693 | vec3(-347.918975830078, 636.378967285156, 171.423629760742), 694 | vec3(-225.667541503906, 594.723815917969, 189.643768310547), 695 | vec3(-483.942352294922, 553.29541015625, 119.060554504395), 696 | vec3(-411.493103027344, 555.736389160156, 123.182189941406), 697 | vec3(-362.981781005859, 509.676635742188, 118.377410888672), 698 | vec3(-231.069961547852, 497.976867675781, 127.233642578125), 699 | vec3(-3.63188219070435, 472.345947265625, 145.123123168945), 700 | vec3(115.164993286133, 490.907501220703, 146.428985595703), 701 | vec3(226.296096801758, 679.674255371094, 188.863845825195), 702 | vec3(118.493515014648, 569.005310058594, 182.409606933594), 703 | vec3(9.64954662322998, 545.573791503906, 175.11296081543), 704 | -- docks & ind 44 area 7 44 705 | vec3(-63.1068229675293, -1789.77734375, 27.3188400268555), 706 | vec3(18.1376876831055, -1879.91833496094, 22.6591415405273), 707 | vec3(93.9403533935547, -1960.46398925781, 20.3599662780762), 708 | vec3(115.805252075195, -1931.6064453125, 20.3829689025879), 709 | vec3(157.643142700195, -1895.97875976563, 22.6697120666504), 710 | vec3(199.111679077148, -1897.39379882813, 23.8366222381592), 711 | vec3(176.815093994141, -1837.81481933594, 27.7052974700928), 712 | vec3(243.076507568359, -1854.3154296875, 26.2651119232178), 713 | vec3(227.982315063477, -1714.19995117188, 28.7936859130859), 714 | vec3(335.734924316406, -1755.53869628906, 28.7484760284424), 715 | vec3(298.528900146484, -1802.91943359375, 27.0873889923096), 716 | vec3(128.719940185547, -1715.08996582031, 28.7247829437256), 717 | vec3(431.897003173828, -1852.5224609375, 27.159065246582), 718 | vec3(249.754867553711, -1955.12683105469, 22.7369632720947), 719 | vec3(158.364028930664, -1969.00952148438, 18.1727161407471), 720 | vec3(320.95068359375, -1983.98608398438, 22.5428123474121), 721 | vec3(361.352874755859, -2062.46362304688, 21.1120758056641), 722 | vec3(449.619964599609, -1961.78186035156, 22.5744915008545), 723 | vec3(495.053131103516, -1969.17468261719, 24.5272254943848), 724 | vec3(478.685485839844, -1888.86437988281, 25.7081508636475), 725 | vec3(527.154907226563, -1830.65100097656, 27.7945537567139), 726 | vec3(499.024108886719, -1720.14123535156, 28.9230213165283), 727 | vec3(480.19287109375, -1776.34997558594, 28.17746925354), 728 | vec3(516.267639160156, -1987.08154296875, 24.4292316436768), 729 | vec3(83.5366134643555, -2560.27319335938, 5.61167287826538), 730 | vec3(-41.2876281738281, -2508.9697265625, 5.62094259262085), 731 | vec3(-256.736572265625, -2653.59643554688, 5.61118936538696), 732 | vec3(-406.068664550781, -2799.0322265625, 5.60997343063354), 733 | vec3(-68.2952651977539, -2651.14672851563, 5.60910415649414), 734 | vec3(144.771682739258, -3331.01391601563, 5.63123273849487), 735 | vec3(1235.23852539063, -3205.35205078125, 5.2932333946228), 736 | vec3(782.038696289063, -2982.02368164063, 5.4059853553772), 737 | vec3(959.550048828125, -2372.13989257813, 30.1417827606201), 738 | vec3(1050.63415527344, -2366.83447265625, 30.1897411346436), 739 | vec3(1088.68811035156, -2289.53930664063, 29.7793636322021), 740 | vec3(1041.94897460938, -2178.07690429688, 31.0512428283691), 741 | vec3(934.963134765625, -1964.57470703125, 30.0044727325439), 742 | vec3(924.246398925781, -2020.62280273438, 29.9459743499756), 743 | vec3(967.231506347656, -1816.20007324219, 30.6835784912109), 744 | vec3(946.368469238281, -1697.91320800781, 29.6896724700928), 745 | vec3(943.090209960938, -1455.56103515625, 30.8775959014893), 746 | vec3(1158.44934082031, -1316.01293945313, 34.3467903137207), 747 | vec3(1122.14929199219, -1516.86755371094, 34.2972297668457), 748 | vec3(1144.16955566406, -1406.31457519531, 34.1875534057617), 749 | --Middle 12 area 8 23 750 | vec3(1368.54125976563, 1148.37585449219, 113.178489685059), 751 | vec3(1526.16479492188, 2232.64599609375, 74.9987335205078), 752 | vec3(1256.78369140625, 2732.25512695313, 37.903621673584), 753 | vec3(1167.29711914063, 2694.9296875, 37.2437400817871), 754 | vec3(970.141967773438, 2713.61279296875, 38.9030723571777), 755 | vec3(992.998291015625, 2670.564453125, 39.4808349609375), 756 | vec3(639.194458007813, 2775.55639648438, 41.4039115905762), 757 | vec3(469.878387451172, 2615.11669921875, 42.5683555603027), 758 | vec3(210.685165405273, 2441.17944335938, 58.1409759521484), 759 | vec3(2328.56982421875, 2536.35229492188, 46.0820045471191), 760 | vec3(2340.09350585938, 2563.72924804688, 46.0874938964844), 761 | vec3(2355.49072265625, 2604.63671875, 46.0298919677734), 762 | -- west highway 11 763 | vec3(-2168.57250976563, 4280.140625, 48.3848724365234), 764 | vec3(-3173.88549804688, 1287.88549804688, 13.048150062561), 765 | vec3(-3186.60620117188, 1205.49169921875, 9.00630378723145), 766 | vec3(-3223.00537109375, 1089.49377441406, 10.0752859115601), 767 | vec3(-3229.71606445313, 935.228332519531, 13.1745624542236), 768 | vec3(-3071.552734375, 660.567443847656, 10.4349632263184), 769 | vec3(-3030.2353515625, 557.701049804688, 6.92861461639404), 770 | vec3(-3087.87377929688, 341.875518798828, 6.81103372573853), 771 | vec3(-3100.47436523438, 251.342041015625, 11.3144130706787), 772 | vec3(-3085.12280273438, 226.084823608398, 13.4391069412231), 773 | vec3(-2954.541015625, 56.8714408874512, 11.026927947998), 774 | -- sandy shores 21 area 9 21 775 | vec3(911.395751953125, 3639.84936523438, 31.8263988494873), 776 | vec3(1386.66101074219, 3673.80810546875, 32.9897689819336), 777 | vec3(1449.73059082031, 3647.22094726563, 33.9458160400391), 778 | vec3(1552.91223144531, 3728.9931640625, 33.8886222839355), 779 | vec3(1736.66455078125, 3716.05908203125, 33.513500213623), 780 | vec3(1651.04333496094, 3715.67700195313, 33.4959411621094), 781 | vec3(1766.31213378906, 3737.62939453125, 33.3441429138184), 782 | vec3(1738.87829589844, 3777.90454101563, 33.4907302856445), 783 | vec3(1731.28869628906, 3906.158203125, 34.2488441467285), 784 | vec3(1805.48291015625, 3933.0302734375, 33.1589088439941), 785 | vec3(1871.23974609375, 3918.650390625, 32.413932800293), 786 | vec3(1735.21948242188, 3841.04418945313, 34.1998405456543), 787 | vec3(1842.48449707031, 3769.06030273438, 32.7706260681152), 788 | vec3(1984.5908203125, 3823.43334960938, 31.7744560241699), 789 | vec3(1906.23522949219, 3860.53344726563, 31.736156463623), 790 | vec3(2428.35791015625, 4017.60717773438, 36.18896484375), 791 | vec3(1674.25109863281, 4953.2294921875, 41.7437362670898), 792 | vec3(1660.30810546875, 4875.9296875, 41.437671661377), 793 | vec3(1668.93762207031, 4769.88134765625, 41.2895812988281), 794 | vec3(1689.79577636719, 4681.22314453125, 42.4225883483887), 795 | vec3(1710.91198730469, 4635.6796875, 42.7580299377441), 796 | --paleto 19 area 10 19 797 | vec3(1693.26672363281, 6428.77099609375, 32.02294921875), 798 | vec3(419.673522949219, 6520.1103515625, 27.1485118865967), 799 | vec3(144.997207641602, 6642.369140625, 30.9701557159424), 800 | vec3(25.9349040985107, 6655.5185546875, 30.8951015472412), 801 | vec3(-11.4208126068115, 6641.86572265625, 30.4945182800293), 802 | vec3(-6.34835910797119, 6620.44287109375, 30.7430229187012), 803 | vec3(-126.502395629883, 6548.17236328125, 28.8517150878906), 804 | vec3(-142.154541015625, 6439.4951171875, 30.7863731384277), 805 | vec3(-26.3420734405518, 6456.259765625, 30.8693256378174), 806 | vec3(46.8197975158691, 6300.17236328125, 30.6521873474121), 807 | vec3(-274.786987304688, 6248.19873046875, 30.8288879394531), 808 | vec3(-356.575744628906, 6328.09326171875, 29.2854118347168), 809 | vec3(-296.947021484375, 6340.74755859375, 31.2577152252197), 810 | vec3(-263.952667236328, 6370.515625, 30.7237071990967), 811 | vec3(-361.863677978516, 6275.29541015625, 30.0340919494629), 812 | vec3(-394.516265869141, 6309.8251953125, 28.5605697631836), 813 | vec3(-437.205017089844, 6202.87890625, 29.0140762329102), 814 | vec3(-347.462097167969, 6215.3486328125, 30.908576965332), 815 | vec3(-358.095367431641, 6066.47216796875, 30.9185104370117), 816 | } 817 | } --------------------------------------------------------------------------------