搜索
开启左侧

汉化

[复制链接]
赴爱 发表于 2025-5-3 23:04:05 | 显示全部楼层 |阅读模式

Config = {}

Config.UseTarget = false                -- Change it to true if you want to use a target system. All settings about the target system are under target.lua file.
Config.UseBuiltInNotifications = true   -- Set to false if you want to use your framework notification style. Otherwise, the built in modern notifications will be used. Available only with modern UI
Config.RequiredItem = "none"                        -- Set it to anything you want, to require players to have an item in their inventory before they start the job
Config.RequireItemFromWholeTeam = true              -- If it's false, then only the host needs to have the required item, otherwise entire team needs it.
Config.RequiredJob = "none"             -- Set to "none" if you dont want to use jobs. If you are using target, you have to set "job" parameter inside every export in target.lua
Config.RequireJobAlsoForFriends = true          -- If it's false, then only the host needs to have the job, if it's true, then everybody from the group needs to have the Config.RequiredJob
Config.RequireOneFriendMinimum = false  -- Set to true if you want to force players to create teams
Config.letBossSplitReward = true                    -- If it's true, then boss can manage whole party rewards percent in menu. If set to false, then everybody will get same amount. Avalible only in modern UI
Config.multiplyRewardWhileWorkingInGroup = true     -- If it's false, then reward will stay by default. For example $1000 for completing whole job. If you set it to true, then the payout will depend on how many players is there in the group. For example, if for full job there's $1000, then if player works in a 4 member group, the reward will be $4000. (baseReward * partyCount)
Config.UseBetterPerformance = false                 -- When it's true, animations will be not be that smooth, but the resmon for clients will be much better. There's a 100 objects animation at one time, and it can't be better optimized, so if you don't like the resmon around 0.4 while processing logs, set it to true, but animations will be not that smooth.
Config.LimitLobbyToTwoMembers = false               -- Set to true to let peoples work just in group of 2

Config.EnableVehicleTeleporting = true               -- If its true, then the script will teleport the host to the company vehicle. If its false, then the company vehicle will apeear, but the whole squad will need to enter the car manually
Config.JobVehicleModel = "17mov_flatbed"

-- Legacy mode
Config.EnableVehicleLegacyMode = false               -- Enabling old system of vehicles (tractor + trailer) - it can generate some problems with FiveM trailer descync problems
Config.LegacyJobVehicleModel = "17mov_Tractor"       -- Model of the company log vehicle
Config.LegacyJobFlatbedModel = "17mov_logTrailer"    -- Model of the company flatbed trailer
Config.JobTruckModel = "17mov_LumberjackTruck"       -- Model of the company phantom
Config.JobForkliftModel = "forklift"                 -- Model of the company forklift
Config.PickupModel = "17mov_LumberJackcar2"          -- Model of the company pickup

Config.SoundsMultipler = 0.5        -- All sounds will be half of their default value. Range is 0.0-1.0

Config.ForksAttachment = {
    {
        rotation = vector3(0.0, 0.0, 90.0),
        offset = vector3(0.50, -0.4, 0.51),
    },
    {
        rotation = vector3(0.0, 0.0, 90.0),
        offset = vector3(0.50, 0.1, 0.51),
    },
    {
        rotation = vector3(0.0, 0.0, 90.0),
        offset = vector3(0.50, 0.5, 0.51),
    },
    {
        rotation = vector3(0.0, 0.0, 90.0),
        offset = vector3(0.50, -0.4, 1.01),
    },

}

Config.TreeRespawnTime = 60 * 20 * 1000             -- After this time, tree will respawn after cutting
Config.PenaltyAmount = 500                          -- Penalty that is levied when a player finishes work without a company vehicle
Config.DontPayRewardWithoutVehicle = false          -- Set to true if you want to not pay reward to players who want to end without company vehicle (accepting the penalty)
Config.DeleteVehicleWithPenalty = false             -- Delete Vehicle even if its not company vehicle
Config.JobCooldown = 0 * 60 -- 10 * 60              -- 0 minutes cooldown between making jobs (in brackets there's example for 10 minutes)
Config.GiveKeysToAllLobby = true                    -- Set to false if you want to give keys only to group creator while starting job

-- ^ Options: top-left, top-center, top-right, bottom-left, bottom-center, bottom-right

Config.RequireWorkClothes = false                   -- Set it to true, to change players clothes everytime they're starting the job.
Config.RestrictBlipToRequiredJob = false            -- Set to true, to hide job blip for players, who dont have RequiredJob. If requried job is "none", then this option will not have any effect.
Config.Blips = { -- Here you can configure Company blip.
    [1] = {
        Sprite = 516,
        Color = 25,
        Scale = 0.8,
        Pos = vector3(-552.9, 5348.58, 74.74),
        Label = 'Lumberjack Job'
    },
}

Config.BlipsStyles = {
    ["treeBlip"] = {
        color = 25,
        label = "[LUMBERJACK] Tree to cut down",
        sprite = 153,
        scale = 0.6
    },
    ["withdrawTruck"] = {
        color = 25,
        label = "~g~[LUMBERJACK]~s~ Rent a truck",
        sprite = 477,
        scale = 0.7
    },
    ["sellLogs"] = {
        color = 1,
        label = "~g~[LUMBERJACK]~s~ Sell raw logs",
        sprite = 272,
        scale = 1.0
    },
    ["processToPlanks"] = {
        color = 25,
        label = "~g~[LUMBERJACK]~s~ Process logs to planks",
        sprite = 365,
        scale = 0.8
    },
    ["processToChips"] = {
        color = 25,
        label = "~g~[LUMBERJACK]~s~ Process logs to wooden chips",
        sprite = 365,
        scale = 0.8
    },
    ["rentForklift"] = {
        color = 25,
        label = "~g~[LUMBERJACK]~s~ Rent a forklift to load planks",
        sprite = 88,
        scale = 0.6,
    },
    ["sellPlanks"] = {
        color = 2,
        label = "~g~[LUMBERJACK]~s~ Sell processed planks",
        sprite = 272,
        scale = 1.0,
    },
    ["sellChips"] = {
        color = 5,
        label = "~g~[LUMBERJACK]~s~ Sell Wooden Chips",
        sprite = 272,
        scale = 1.0,
    }
}

Config.MarkerSettings = {   -- used only when Config.UseTarget = false. Colors of the marker. Active = when player stands inside the marker.
    Active = {
        r = 235,
        g = 123,
        b = 54,
        a = 240,
    },
    UnActive = {
        r = 171,
        g = 91,
        b = 41,
        a = 240,
    }
}

Config.Stations = {
    ["processToPlanks"] = {
        {
            coords = vector4(-488.77, 5341.81, 84.01, 249.7),
            rotation = vec3(0, 0, -20.0),
            targetHeading = 250,
        },
        {
            coords = vector4(-487.04, 5346.5, 84.01, 249.7),
            rotation = vec3(0, 0, -20.0),
            targetHeading = 250,
        },
    },
    ["processToChips"] = {
        {
            coords = vector4(-478.6, 5320.78, 84.09, 338.44),
            rotation = vec3(0, 0, -110.0),
            targetHeading = 340.99,
        },
        {
            coords = vector4(-482.13, 5322.18, 84.09, 338.44),
            rotation = vec3(0, 0, -110.0),
            targetHeading = 340.99,
        },
    },
    ["sellChips"] = {
        {
            coords = vector4(1162.71, 2119.91, 57.08, 181.97),
            rotation = vec3(0, 0.0, 90.0),
            targetHeading = 181.97,
            pricePerPercent = math.random(3, 10),
            itemRewards = {
                -- {
                --     item_name = "water_bottle",
                --     chance = 50,
                --     amountPerPercent = 1,
                -- }
            },
        },
        {
            coords = vector4(2408.8, 4985.74, 47.67, 130.56),
            rotation = vec3(0, 0, -135.0),
            targetHeading = 137.34,
            pricePerPercent = math.random(3, 10),
            itemRewards = {
                -- {
                --     item_name = "water_bottle",
                --     chance = 50,
                --     amountPerPercent = 1,
                -- }
            },
        },
    },
    ["sellLogs"] = {
        {
            coords = vector4(1246.87, -3155.74, 7.0, 270.07),
            rotation = vec3(0, -3.0, 0.0),
            targetHeading = 270,
            pricePerLog = math.random(4, 12),
            itemRewards = {
                -- {
                --     item_name = "water_bottle",
                --     chance = 50,
                --     amountPerLog = 1,
                -- }
            },
        },
        {
            coords = vector4(165.57, -3151.59, 7.0, 272.06),
            rotation = vec3(0, 0, 0.0),
            targetHeading = 272.06,
            pricePerLog = math.random(4, 12),
            itemRewards = {
                -- {
                --     item_name = "water_bottle",
                --     chance = 50,
                --     amountPerLog = 1,
                -- }
            },
        },
    },
    ["sellPlanks"] = {
        {
            coords = vector4(119.48, -445.33, 42.33, 339.04),
            rotation = vec3(0, 0, 70.0),
            targetHeading = 339.04,
            pricePerPallete = math.random(60, 120),
            itemRewards = {
                -- {
                --     item_name = "water_bottle",
                --     chance = 50,
                --     amountPerPallete = 1,
                -- }
            },
        },
        {
            coords = vector4(-1095.58, -1638.03, 5.5, 35.11),
            rotation = vec3(0, 0, 125.0),
            targetHeading = 35.11,
            pricePerPallete = math.random(60, 120),
            itemRewards = {
                -- {
                --     item_name = "water_bottle",
                --     chance = 50,
                --     amountPerPallete = 1,
                -- }
            },
        },
        {
            coords = vector4(-477.95, -958.22, 24.99, 93.47),
            rotation = vec3(0, 0, 0.0),
            targetHeading = 93.47,
            pricePerPallete = math.random(60, 120),
            itemRewards = {
                -- {
                --     item_name = "water_bottle",
                --     chance = 50,
                --     amountPerPallete = 1,
                -- }
            },
        },
    },
}

Config.PlanksAttachments = {
    vector3(0.0, 4.0, 0.15),
    vector3(0.0, 0.1, 0.15),
    vector3(0.0, -3.9, 0.15),

    vector3(0.0, 4.0, 1.15),
    vector3(0.0, 0.1, 1.15),
    vector3(0.0, -3.9, 1.15),

    vector3(0.0, 4.0, 2.15),
    vector3(0.0, 0.1, 2.15),
    vector3(0.0, -3.9, 2.15),
}

Config.HintPlankAttachment = {
    offset = vec3(0.0, -6.9, 0.3),
    rotation = vec3(0.0, -3.5, 90.0)
}

Config.Locations = {       -- Here u can change all of the base job locations.
    DutyToggle = {
        Coords = {
            vector3(-552.8, 5348.55, 74.74),
        },
        CurrentAction = 'open_dutyToggle',
        CurrentActionMsg = 'Press ~INPUT_CONTEXT~ to ~y~start/finish~s~ work.',
        type = 'duty',
        scale = {x = 1.0, y = 1.0, z = 1.0},
    },
    FinishJob = {
        Coords = {
            vector3(-558.8, 5366.1, 70.3),
        },
        CurrentAction = 'finish_job',
        CurrentActionMsg = 'Press ~INPUT_CONTEXT~ to ~y~end ~s~working.',
        scale = {x = 3.0, y = 3.0, z = 3.0},
    },
    ReturnLogCar = {
        Coords = {
            vector3(-569.05, 5336.43, 70.27),
        },
        CurrentAction = 'return_logcar',
        CurrentActionMsg = 'Press ~INPUT_CONTEXT~ to ~y~return ~s~Log Car.',
        scale = {x = 3.0, y = 3.0, z = 3.0},
    },
    WithdrawTruck = {
        Coords = {
            vector3(-566.0, 5326.07, 73.59),
        },
        CurrentAction = 'withdraw_truck',
        CurrentActionMsg = 'Press ~INPUT_CONTEXT~ to ~y~rent a ~s~truck.',
        scale = {x = 1.0, y = 1.0, z = 1.0},
    },
    rentForklift = {
        Coords = {
            vector3(-560.8, 5282.81, 73.05),
        },
        CurrentAction = 'rent_forklift',
        CurrentActionMsg = 'Press ~INPUT_CONTEXT~ to ~y~rent~s~ a forklift.',
        scale = {x = 1.0, y = 1.0, z = 1.0},
    },
}

Config.SpawnPoint = vector4(-558.8, 5366.1, 70.3, 345.66)                -- Company Tractor spawn point
Config.SpawnPoint2 = vector4(-572.32, 5374.91, 70.32, 253.07)            -- Company Tractor2 spawn point
Config.SpawnPointFlatbed = vector4(-562.06, 5356.17, 70.40, 341.15)      -- Company flatbed point
Config.SpawnPointTruck = vector4(-569.05, 5336.43, 70.27, 340.67)        -- Company truck spawn point
Config.SpawnPointForklift = vector4(-569.15, 5271.18, 70.26, 164.37)     -- Company forklift spawn point
Config.SpawnPointPickup = vector4(-572.47, 5369.57, 70.18, 253.64)       -- Company pickup spawn point

Config.EnableCloakroom = true                                            -- if false, then you can't see the Cloakroom button under Work Menu
Config.Clothes = {
    male = {
        ["mask"] = {clotheId = 0, variation = 0},
        ["arms"] = {clotheId = 6, variation = 0},
        ["pants"] = {clotheId = 9, variation = 0},
        ["bag"] = {clotheId = 0, variation = 0},
        ["shoes"] = {clotheId = 25, variation = 0},
        ["t-shirt"] = {clotheId = 59, variation = 1},
        ["torso"] = {clotheId = 117, variation = 2},
        ["decals"] = {clotheId = 0, variation = 0},
        ["kevlar"] = {clotheId = 0, variation = 0},
    },
    female = {
        ["mask"] = {clotheId = 0, variation = 0},
        ["arms"] = {clotheId = 6, variation = 0},
        ["pants"] = {clotheId = 30, variation = 0},
        ["bag"] = {clotheId = 0, variation = 0},
        ["shoes"] = {clotheId = 24, variation = 0},
        ["t-shirt"] = {clotheId = 15, variation = 0},
        ["torso"] = {clotheId = 109, variation = 2},
        ["decals"] = {clotheId = 0, variation = 0},
        ["kevlar"] = {clotheId = 0, variation = 0},
    },
}

Config.Panels = {
    ["rentTruck"] = {
        title = "Truck Rent",
        subTitle = "WHAT'S THIS?",
        content = "This is the location where you can exchange your log loader for a truck. The truck will let u transport trailer faster and more comfortable . To spawn the truck, please press the Rent button below",
        confirmBtn = "Rent Truck",
        closeBtn = "Close",
        photo = "assets/rentTruckPhoto.webp"
    },
    ["rentForklift"] = {
        title = "Forklift Rental",
        subTitle = "NEED TO LOAD YOUR PALLETS?",
        content = "Welcome to the forklift rental area. Here, you can rent a forklift to assist in loading your processed pallets of planks onto your trailer. The forklift is a vital tool for managing your wooden products, designed to make your work easier and more efficient. Please note, the forklift will automatically disappear once your loading task is completed. Rent a forklift now and streamline your log processing operation!",
        confirmBtn = "Rent Forklift",
        closeBtn = "Close",
        photo = "assets/rentForkliftPhoto.webp"
    },
    ["processToPlanks"] = {
        title = "Wood Process",
        subTitle = "PROCESS LOGS TO PLANKS?",
        content = "Welcome to the heart of log processing, where you can refine your gathered logs into planks. To craft a single pallet of planks, you'll require %s logs, so at this moment you'll receive %s planks pallete. However, your trailer can only accommodate up to %s pallets at a time. While planks fetch a higher price, keep in mind that the conversion process is time-consuming. Choose wisely and capitalize on your efforts!",
        confirmBtn = "Process Logs",
        closeBtn = "Close",
        photo = "assets/wood_process.webp"
    },
    ["processToChips"] = {
        title = "Wood Process",
        subTitle = "PROCESS LOGS TO WOODEN CHIPS?",
        content = "Welcome to the heart of wood chipping, where you can process your gathered logs into wooden chips. Each log will fill up %s percent of your chip container. Keep in mind, your trailer can accommodate up to %s containers at a time. Once your container is full, the system will automatically stop the processing. While wooden chips might be more time-consuming to produce, their demand is high. Choose wisely and make the most out of your efforts!",
        confirmBtn = "Process Logs",
        closeBtn = "Close",
        photo = "assets/wood_process.webp"
    },
    ["sellChips"] = {
        title = "Sandy Shores",
        subTitle = "WELCOME TO SANDY SHORES!",
        content = "We can purchase your wooden chips at<span style='color: #80FF00'> $%s </span> for percent. If you decide to sell, hit the sell button. Perhaps someone else might offer a different price. Choose wisely!",
        confirmBtn = "Sell Chips",
        closeBtn = "Close",
        photo = "assets/sandyChips.webp"
    },
    ["sellLogs"] = {
        title = "LS DOCKS",
        subTitle = "WELCOME TO LS DOCKS LOG DEPOT!",
        content = "We can purchase your logs at<span style='color: #80FF00'> $%s </span>each. If you decide to sell, hit the sell button. Perhaps someone else might offer a different price. Choose wisely!",
        confirmBtn = "Sell Logs",
        closeBtn = "Close",
        photo = "assets/lsdocks.webp"
    },
    ["sellPlanks"] = {
        title = "StoneSober Builders",
        subTitle = "STEP INTO THE HEART OF CONSTRUCTION!",
        content = "Greetings, lumberjack! StoneSober, as a leading entity in the construction industry, is ready to acquire your well-crafted planks. Our going rate is <span style='color: #80FF00'>$%s </span>per pallet. Should you wish to strike a deal, simply press the Sell Planks button. However, remember there might be others willing to offer a different rate. The choice is yours, choose with discretion!",
        confirmBtn = "Sell Planks",
        closeBtn = "Close",
        photo = "assets/stonesober.webp"
    }
}

-- Here you can changea all translations used in client.lua, and server.lua. Dont forget to translate it also under the HTML and JS file.
Config.Lang = {
    -- Client
    ["no_permission"] = "Only the party owner can do that!",
    ["keybind"] = 'Lumberjack Job Marker Interaction',
    ["too_far"] = "Your party has started work, but you are too far from headquarters",
    ["kicked"] = "You kicked %s out of the party",
    ["alreadyWorking"] = "First, complete the previous order",
    ["quit"] = "You have left the Team",
    ["nobodyNearby"] = "There is no one around",
    ["cantInvite"] = "To be able to invite more people, you must first finish the job",
    ["inviteSent"] = "Invite Sent!",
    ["spawnpointOccupied"] = "The car or trailer spawn site is occupied",

    ["startingTutorialLegacy"] = "Welcome to the role of a Lumberjack. This job offers you the freedom to work independently and at your own pace. Initially, you'll need to cut down trees and load the timber onto your trailer using the loader. Remember, to detach the trailer from your log loader, simply hold down the H key. You have the option to process wood into planks, wooden chips or sell raw logs. After you've finished gathering or processing wood, you can swap your log loader for a truck to sell your goods at various locations across the map. Please note, the price for your product may vary depending on the location",
    ["AfterTreeFallTutorialLegacy"] = "Congratulations, you've just cut down your first tree. Now load it onto your trailer using your log loader vehicle. Use CTRL and SHIFT or NUMPAD keys to control the arm.",
    ["afterLogsProcessLegacy"] = "Congratulations! All of your logs has been processed. If you didn't do it already, please rent a forklift, and load all your palletes onto the trailer. Then you can sell your palletes at a few points. All are marked on the map.",

    ["startingTutorial"] = "Welcome to the role of a Lumberjack. This job offers you the freedom to work independently and at your own pace. Initially, you'll need to cut down trees and load the timber onto your trailer using the hydraulic Crane. You can control it with a remote control hooked up to the trailer. You have the option to process wood into planks, wooden chips or sell raw logs. After you've finished gathering or processing wood, you can sell your goods at various locations across the map. Please note, the price for your product may vary depending on the location",
    ["AfterTreeFallTutorial"] = "Congratulations, you've just cut down your first tree. Now load it onto your trailer using your hydraulic crane",
    ["afterLogsProcess"] = "Congratulations! All of your logs has been processed. You can load palletes onto your trailer using your hydraulic crane. Then you can sell your palletes at a few points. All are marked on the map.",

    ["afterLoadingFullTrailer"] = "Congratulations! You've filled your trailer up to the maximum. Now you can sell raw logs, or process logs into planks or wooden chips, and maybe earn more. Remember that prices are changing depending on the demand",
    ["afterSkipFullLoad"] = "One of your three containers has been filled to capacity, or all logs has been processed. Please transfer the filled container to your trailer when it's ready and processing will continue if you have any more logs",
    ["afterChipsProcess"] = "Congratulations! You've successfully converted all your logs into chips. It's time to load the filled container onto your trailer and sell your goods at a location on the map.",

    ["alreadyTakenControl"] = "Someone else already using crane",
    ["getController"] = "Press ~INPUT_CONTEXT~ to get controller",
    ["putDownController"] = "Press ~INPUT_CONTEXT~ to put down controller",
    ["controlCrane"] = "Press ~INPUT_CONTEXT~ to control crane",
    ["controlingCrane"] = "Press ~INPUT_FRONTEND_PAUSE_ALTERNATE~ to exit\nPress ~INPUT_MOVE_UP_ONLY~ ~INPUT_MOVE_DOWN_ONLY~ to move up/down\nPress ~INPUT_MOVE_LEFT_ONLY~ ~INPUT_MOVE_RIGHT_ONLY~ to rotate\nPress ~INPUT_COVER~ ~INPUT_TALK~ to fold/unfold arm\nPress ~INPUT_FRONTEND_LEFT~ ~INPUT_FRONTEND_RIGHT~ to rotate hook\nPress ~INPUT_ATTACK~ to attach/detach",
    ["failedToAttach"] = "Your trailer is full or this prop cannot be attached",

    ["notADriver"] = "You need to be a driver of the vehicle to end the job",
    ["partyIsFull"] = "Failed to send an invite, your group is full",
    ["wrongReward1"] = "The payout percentage should be between 0 and 100",
    ["wrongReward2"] = "The total percentage of all payouts exceeded 100%",
    ["cut_smaller"] = "~r~[E] | ~w~Cut",
    ["grab"] = "~r~[E] | ~w~Grab",
    ["treeCutting"] = "Press ~INPUT_CONTEXT~ to start cutting down the tree",
    ["useLogLoader"] = "Load it onto your trailer using log loader",
    ["attachLogToLoader"] = "Press ~INPUT_CONTEXT~ to grab log",
    ["putLogOnLoader"] = "Press ~INPUT_CONTEXT~ to load log",
    ["CantWithTrailer"] = "You can't return your log car with your trailer attached. Hold H to detach",
    ["notDriverOrValidModel"] = "You're not a driver or you're not inside of your log loader",
    ["OpenSellingMenu"] = "Press ~INPUT_CONTEXT~ to open selling menu",
    ["OpenProcessingMenu"] = "Press ~INPUT_CONTEXT~ to open processing menu",
    ["logsSellInProgress"] = "Wait for all logs to be unloaded from the trailer and return to base for payment",
    ["planksSellInProgress"] = "Wait for all planks palletes to be unloaded from the trailer and return to base for payment",
    ["chipsSellInProgress"] = "Wait for all skips to be unloaded from the trailer and return to base for payment",
    ["attachPlanksToForklift"] = "Press ~INPUT_CONTEXT~ to attach planks pallete to forks",
    ["attachSkipToTrailer"] = "Press ~INPUT_CONTEXT~ to load skip to trailer",
    ["loadItOnFlatbed"] = "Now please go load this pallete on your trailer. Be aware that you can't load it while logs are still on it",
    ["loadPallete"] = "Press ~INPUT_CONTEXT~ to load pallete on your trailer",
    ["notEnoughLogs"] = "You don't have enough logs on your trailer to start processing",
    ["dontHaveLogs"] = "You don't have any logs to sell on your trailer",
    ["dontHavePlanks"] = "You don't have any planks to sell on your trailer",
    ["sold"] = "You've succesfully sold your products. Head to the base and end the job to get paid",
    ["fullTrailer"] = "Your trailer can't fit any more material",
    ["noSkipUnder"] = "There aren't any skips under the chip outlet. You can't start processing now",
    ["currentSkipIsFull"] = "The current skip is full. Please change your skip or load it onto your trailer",
    ["useJobTractor"] = "Use your job tractor",
    ["useJobForklift"] = "Rent and use your job forklift",
    ["AttachSkip"] = "Press ~INPUT_CONTEXT~ to attach your skip",
    ["WaitUntilFullLoad"] = "The skip is still being filled. Please wait for a while",
    ["newSkipSet"] = "We've automatically positioned your skip under the chip outlet. You can now resume chip processing.",
    ["dontHaveChips"] = "You don't have any chips to sell",
    ["wentWrong"] = "Something went wrong. Try Again",
    ["tooManyLogs"] = "You've already cut down too many logs. First, load them.",
    ["cantLeaveLobby"] = "You can't leave the lobby while you're working. First, end the job.",
    ["exploitFix"] = "You can't cut down tree while somebody is nearby",

    -- Server
    ["isAlreadyHost"] = "This player leads his team.",
    ["isBusy"] = "This player already belongs to another team.",
    ["hasActiveInvite"] = "This Player already has an active invitation from someone.",
    ["HaveActiveInvite"] = "You already have an active invitation to join the team.",
    ["InviteDeclined"] = "Your invitation has been declined.",
    ["InviteAccepted"] = "Your invitation has been accepted!",
    ["error"] = "There was a Problem joining a team. Please try again later.",
    ["kickedOut"] = "You've been kicked out of the team!",
    ["reward"] = "You have received a payout of $",
    ["RequireOneFriend"] = "This job requires at least one team member",
    ["penalty"] = "You paid a fine in the amount of ",
    ["clientsPenalty"] = "The team's host accepted the punishment. You have not received the payment",
    ["dontHaveReqItem"] = "You or someone from your team does not have the required item to start work",
    ["notEverybodyHasRequiredJob"] = "Not all of your friends have the required job",
    ["someoneIsOnCooldown"] = "%s can't start the job now (cooldown: %s)",
    ["hours"] = "h",
    ["minutes"] = "m",
    ["seconds"] = "s",
    ["newBoss"] = "The previous lobby boss has left the server. You are now the team leader",
    ["logCarHidden"] = "Your log loader has been returned. Now you can rent your truck.",
    ["LogCarNotHidden"] = "You did not hide your log loader. You need to hide it first",
    ["alreadyRentedOneTruck"] = "You've already rented your company truck. We can't give you another one",
    ["alreadyRentedOneForklift"] = "You've already rented your company forklift. We can't give you another one",
    ["PlanksNotProcessed"] = "You didn't processed any planks yet. We can't give you a forklift",
}

Config.Props = {
    tree = {
        hash = `prop_tree_cedar_02`,
        zOffset = -3.5,
    },
    logs = {
        hash = `prop_log_01`,
        height = 4.5,
    }
}

-- If you're using a Forests of SA, on our discord in snippets channels you can download a version which will not be conflicting with our map.

Config.TreeSpawningCoords = {
    vector3(-645.61, 5411.87, 47.29),
    vector3(-624.56, 5411.82, 49.45),
    vector3(-634.15, 5387.13, 53.53),
    vector3(-665.86, 5365.69, 58.91),
    vector3(-664.95, 5343.81, 62.6),
    vector3(-728.37, 5279.53, 78.79),
    vector3(-755.76, 5283.57, 83.55),
    vector3(-690.96, 5224.04, 94.91),
    vector3(-672.6, 5210.38, 95.82),
    vector3(-635.4, 5152.26, 111.67),
    vector3(-616.73, 5119.49, 120.38),
    vector3(-574.23, 5101.81, 122.5),
    vector3(-545.2, 5111.71, 112.19),
    vector3(-495.51, 5136.5, 103.01),
    vector3(-490.38, 5477.88, 82.8),
    vector3(-519.72, 5486.62, 70.91),
    vector3(-531.71, 5462.31, 70.49),
    vector3(-540.1, 5441.34, 68.05),
    vector3(-519.32, 5438.12, 72.49),
    vector3(-509.31, 5492.07, 74.33),
    vector3(-471.69, 5487.43, 84.03),
    vector3(-519.16, 5585.13, 65.9),
    vector3(-531.55, 5571.48, 62.81),
    vector3(-529.61, 5552.31, 64.9),
    vector3(-540.84, 5531.77, 61.61),
    vector3(-554.39, 5562.05, 56.39),
    vector3(-589.23, 5431.29, 57.21),
    vector3(-567.84, 5426.72, 61.0),
    vector3(-728.19, 5350.34, 63.3),
    vector3(-730.67, 5364.64, 60.48),
    vector3(-722.48, 5390.02, 55.06),
    vector3(-727.42, 5401.34, 50.97),
    vector3(-735.48, 5382.91, 55.01),
    vector3(-747.37, 5359.01, 59.81),
    vector3(-748.72, 5285.98, 80.81),
    vector3(-498.74, 5451.62, 79.77),
    vector3(-510.49, 5467.59, 76.77),
    vector3(-529.41, 5504.77, 66.24),
    vector3(-512.72, 5533.79, 70.85),
    vector3(-584.55, 5512.0, 52.62),
    vector3(-582.23, 5503.76, 54.13),
    vector3(-579.39, 5481.86, 58.13),
    vector3(-608.1, 5468.1, 56.72),
    vector3(-625.57, 5481.37, 52.83),
    vector3(-660.37, 5474.98, 51.37),
    vector3(-689.38, 5464.27, 47.12),
    vector3(-712.04, 5413.47, 49.73),
    vector3(-711.86, 5374.91, 60.19),
    vector3(-722.23, 5344.14, 65.91),
    vector3(-722.23, 5302.66, 72.62),
    vector3(-757.18, 5247.65, 95.3),
    vector3(-694.52, 5194.67, 103.17),
    vector3(-677.13, 5173.72, 108.07),
    vector3(-638.68, 5180.63, 99.24),
    vector3(-590.7, 5181.34, 95.81),
    vector3(-562.96, 5161.92, 101.71),
    vector3(-586.59, 5138.02, 111.49),
    vector3(-681.87, 5131.28, 124.55),
    vector3(-684.47, 5360.15, 65.19),
    vector3(-688.87, 4977.74, 179.36),
    vector3(-667.43, 5011.87, 164.96),
    vector3(-666.18, 5056.28, 147.76),
    vector3(-605.13, 5043.49, 140.34),
    vector3(-657.11, 5136.94, 124.69),
    vector3(-613.6, 5243.29, 72.38),
    vector3(-517.75, 5185.98, 89.79),
    vector3(-802.51, 5287.74, 86.55),
    vector3(-817.04, 5269.61, 87.95),
    vector3(-788.8, 5227.42, 104.26),
    vector3(-771.96, 5205.25, 111.4),
    vector3(-740.68, 5200.75, 104.22),
    vector3(-744.22, 5120.48, 135.0),
    vector3(-706.64, 5105.96, 132.03),
    vector3(-722.7, 5066.09, 143.12),
    vector3(-654.21, 5035.41, 154.55),
    vector3(-577.6, 5077.24, 130.64),
    vector3(-452.45, 5099.4, 130.34),
    vector3(-480.19, 5108.66, 118.7),
    vector3(-476.73, 5123.16, 113.17),
    vector3(-442.23, 5182.72, 110.59),
    vector3(-421.5, 5225.06, 124.34),
    vector3(-409.42, 5268.9, 127.09),
    vector3(-398.38, 5286.62, 125.51),
    vector3(-449.79, 5385.96, 80.44),
    vector3(-476.24, 5424.59, 68.6),
    vector3(-657.12, 5303.43, 66.9),
    vector3(-545.45, 5079.27, 123.59),
    vector3(-661.94, 5113.78, 129.96),
    vector3(-668.48, 5122.11, 127.41),
    vector3(-676.88, 5123.98, 127.41),
    vector3(-684.74, 5135.61, 122.77),
    vector3(-678.92, 5173.07, 108.17),
    vector3(-683.94, 5186.62, 105.05),
    vector3(-666.42, 5189.94, 102.1),
    vector3(-654.8, 5194.65, 96.19),
    vector3(-640.27, 5196.54, 92.35),
    vector3(-625.11, 5196.69, 89.46),
    vector3(-617.0, 5232.85, 73.87),
    vector3(-625.6, 5244.29, 73.76),
    vector3(-642.6, 5255.01, 74.94),
    vector3(-651.35, 5255.88, 75.64),
    vector3(-659.65, 5261.74, 76.39),
    vector3(-661.34, 5275.45, 74.48),
    vector3(-670.49, 5287.44, 72.19),
    vector3(-680.75, 5282.51, 72.4),
    vector3(-554.78, 5226.8, 74.85),
    vector3(-543.34, 5237.91, 74.79),
    vector3(-534.23, 5237.0, 78.31),
    vector3(-507.72, 5222.4, 87.04),
    vector3(-356.02, 5366.27, 132.39),
    vector3(-366.05, 5366.66, 125.56),
    vector3(-378.78, 5368.71, 118.62),
    vector3(-385.71, 5363.21, 115.97),
    vector3(-463.55, 5566.79, 72.87),
    vector3(-465.37, 5580.11, 71.19),
    vector3(-489.26, 5557.56, 72.94),
    vector3(-496.86, 5525.12, 75.06),
    vector3(-517.58, 5521.56, 69.58),
    vector3(-535.48, 5515.5, 64.09),
    vector3(-560.11, 5496.26, 59.52),
    vector3(-571.11, 5486.93, 58.88),
    vector3(-585.56, 5484.2, 56.46),
    vector3(-593.1, 5472.41, 57.3),
    vector3(-609.0, 5472.4, 55.09),
    vector3(-648.85, 5479.99, 51.72),
    vector3(-646.64, 5492.6, 51.28),
    vector3(-661.73, 5453.63, 50.43),
    vector3(-679.16, 5432.8, 47.39),
    vector3(-691.1, 5395.92, 53.59),
    vector3(-685.85, 5380.1, 58.06),
    vector3(-687.99, 5359.93, 65.76),
    vector3(-685.81, 5348.95, 67.62),
    vector3(-683.72, 5331.08, 68.33),
    vector3(-674.66, 5327.79, 66.42),
}

Config.Sounds = {
    TreeFallingMaxDistance = 75,            -- Tree fall will be heard up to 75 meters
    ChainsawNoiseMaxDistance = 250,         -- Chainsaw Will be heard up to 250 meters
    logRollProcessing = 60,                 -- Log to planks processing will be heard up to 250 meters
}

Config.TrailerSkipsAttachments = {
    vec3(0.0, 3.68, 0.3),
    vec3(0.0, -0.61, 0.3),
    vec3(0.0, -4.89, 0.3),
}

Config.HintSkip = {
    offset = vec3(0.0, -8.6, 1.0),
    rotation = vec3(0.0, -25.0, 90.0)
}

Config.TrailerLogsAttachments = {
    vector3(-1.03, 3.910, 0.65),
    vector3(-0.47, 3.910, 0.65),
    vector3(0.09, 3.910, 0.65),
    vector3(0.65, 3.910, 0.65),
    vector3(1.12, 3.910, 0.65),

    vector3(-1.03, -0.21, 0.65),
    vector3(-0.47, -0.21, 0.65),
    vector3(0.09, -0.21, 0.65),
    vector3(0.65, -0.21, 0.65),
    vector3(1.12, -0.21, 0.65),

    vector3(-1.03, -4.32, 0.65),
    vector3(-0.47, -4.32, 0.65),
    vector3(0.09, -4.32, 0.65),
    vector3(0.65, -4.32, 0.65),
    vector3(1.12, -4.32, 0.65),

    vector3(-1.03, 3.910, 1.18),
    vector3(-0.47, 3.910, 1.18),
    vector3(0.09, 3.910, 1.18),
    vector3(0.65, 3.910, 1.18),
    vector3(1.12, 3.910, 1.18),

    vector3(-1.03, -0.21, 1.18),
    vector3(-0.47, -0.21, 1.18),
    vector3(0.09, -0.21, 1.18),
    vector3(0.65, -0.21, 1.18),
    vector3(1.12, -0.21, 1.18),

    vector3(-1.03, -4.32, 1.18),
    vector3(-0.47, -4.32, 1.18),
    vector3(0.09, -4.32, 1.18),
    vector3(0.65, -4.32, 1.18),
    vector3(1.12, -4.32, 1.18),

    vector3(-1.03, 3.910, 1.66),
    vector3(-0.47, 3.910, 1.66),
    vector3(0.09, 3.910, 1.66),
    vector3(0.65, 3.910, 1.66),
    vector3(1.12, 3.910, 1.66),

    vector3(-1.03, -0.21, 1.66),
    vector3(-0.47, -0.21, 1.66),
    vector3(0.09, -0.21, 1.66),
    vector3(0.65, -0.21, 1.66),
    vector3(1.12, -0.21, 1.66),

    vector3(-1.03, -4.32, 1.66),
    vector3(-0.47, -4.32, 1.66),
    vector3(0.09, -4.32, 1.66),
    vector3(0.65, -4.32, 1.66),
    vector3(1.12, -4.32, 1.66),

    vector3(-1.03, 3.910, 2.19),
    vector3(-0.47, 3.910, 2.19),
    vector3(0.09, 3.910, 2.19),
    vector3(0.65, 3.910, 2.19),
    vector3(1.12, 3.910, 2.19),

    vector3(-1.03, -0.21, 2.19),
    vector3(-0.47, -0.21, 2.19),
    vector3(0.09, -0.21, 2.19),
    vector3(0.65, -0.21, 2.19),
    vector3(1.12, -0.21, 2.19),

    vector3(-1.03, -4.32, 2.19),
    vector3(-0.47, -4.32, 2.19),
    vector3(0.09, -4.32, 2.19),
    vector3(0.65, -4.32, 2.19),
    vector3(1.12, -4.32, 2.19),
}

Config.SkipsSpawnPoints = {
    {
        coords = vec3(-523.7699, 5298.66357, 73.4215),
        rotation = vec3(0.0, 0.0, 70.0),
    },
    {
        coords = vec3(-523.5898, 5285.729, 73.5347),
        rotation = vec3(0.0, 0.0, -20.0),
    },
    {
        coords = vec3(-525.6033, 5280.098, 73.5606461),
        rotation = vec3(0.0, 0.0, -20.0),
    },
}


回复 论坛版权

使用道具 举报

ChatGPT 发表于 2025-5-3 23:08:16 | 显示全部楼层
Config = {}

Config.UseTarget = false                -- 如果你想使用目标系统,请将其设置为 true。关于目标系统的所有设置都在 target.lua 文件中。
Config.UseBuiltInNotifications = true   -- 如果你想使用框架的通知样式,请设置为 false。否则,将使用内置的现代通知。仅在现代界面下可用。
Config.RequiredItem = "none"           -- 设置为任何你想要的东西,以要求玩家在开始工作之前必须有某个物品在他们的库存中。
Config.RequireItemFromWholeTeam = true  -- 如果设置为 false,则只有主机需要有所需物品,否则整个团队都需要。
Config.RequiredJob = "none"             -- 如果不想使用工作类型,请设置为 "none"。如果你在使用目标,你必须在 target.lua 中每个导出设置 "job" 参数。
Config.RequireJobAlsoForFriends = true   -- 如果设置为 false,则只有主机需要有这个工作,如果设置为 true,则团队中的每个人都需要有配置的 RequiredJob。
Config.RequireOneFriendMinimum = false   -- 如果你希望强制玩家组队,请设置为 true。
Config.letBossSplitReward = true         -- 如果设置为 true,则老板可以在菜单中管理整个团队奖励的百分比。如果设置为 false,则每个人将获得相同的金额。仅在现代 UI 可用。
Config.multiplyRewardWhileWorkingInGroup = true   -- 如果设置为 false,奖励将保持默认。例如,完成整个工作的奖励为 $1000。如果设置为 true,则支付将取决于团队中的玩家数量。例如,如果完整工作的奖励为 $1000,而玩家在4人小组中工作,则奖励将为 $4000。 (baseReward * partyCount)
Config.UseBetterPerformance = false      -- 当设置为 true 时,动画将不会那么流畅,但客户端的资源监控性能会更好。目前一次最多有100个物体动画,无法更好地优化,因此如果你不喜欢在处理日志时资源监控在 0.4 左右,设置为 true,但动画将不会那么流畅。
Config.LimitLobbyToTwoMembers = false    -- 设置为 true 只允许人们以2人的小组进行工作。

Config.EnableVehicleTeleporting = true   -- 如果为 true,则脚本会将主机传送到公司车辆。如果为 false,则公司车辆将出现,但整个团队需要手动进入车内。
Config.JobVehicleModel = "17mov_flatbed"

-- 旧版模式
Config.EnableVehicleLegacyMode = false   -- 启用旧版车辆系统(拖拉机 + 拖车)- 可能会产生一些五人游戏拖车不同步的问题。
Config.LegacyJobVehicleModel = "17mov_Tractor"       -- 公司物流车辆模型
Config.LegacyJobFlatbedModel = "17mov_logTrailer"    -- 公司平板拖车模型
Config.JobTruckModel = "17mov_LumberjackTruck"       -- 公司卡车模型
Config.JobForkliftModel = "forklift"                 -- 公司叉车模型
Config.PickupModel = "17mov_LumberJackcar2"          -- 公司皮卡车型

Config.SoundsMultipler = 0.5                          -- 所有声音的音量将为其默认值的一半。范围是0.0-1.0

Config.ForksAttachment = {
    {
        rotation = vector3(0.0, 0.0, 90.0),
        offset = vector3(0.50, -0.4, 0.51),
    },
    {
        rotation = vector3(0.0, 0.0, 90.0),
        offset = vector3(0.50, 0.1, 0.51),
    },
    {
        rotation = vector3(0.0, 0.0, 90.0),
        offset = vector3(0.50, 0.5, 0.51),
    },
    {
        rotation = vector3(0.0, 0.0, 90.0),
        offset = vector3(0.50, -0.4, 1.01),
    },
}

Config.TreeRespawnTime = 60 * 20 * 1000               -- 在砍伐后,此时间后树木将重新生成
Config.PenaltyAmount = 500                            -- 玩家在没有公司车辆完成工作后所遭受的罚款
Config.DontPayRewardWithoutVehicle = false            -- 如果设置为 true,不向希望结束工作而未使用公司车辆的玩家支付奖励(接受罚款)
Config.DeleteVehicleWithPenalty = false               -- 即使不是公司车辆,也要删除车辆
Config.JobCooldown = 0 * 60 -- 10 * 60              -- 工作之间的冷却时间(括号中为10分钟示例)
Config.GiveKeysToAllLobby = true                      -- 如果设置为 false,只给组创建者钥匙,在开始工作时。

-- ^ 选项:左上,顶部中间,右上,左下,底部中间,右下

Config.RequireWorkClothes = false                     -- 设置为 true,每次开始工作时更换玩家的衣服。
Config.RestrictBlipToRequiredJob = false              -- 设置为 true,对没有 RequiredJob 的玩家隐藏工作标记。如果所需工作为 "none",则此选项将无效。
Config.Blips = { -- 这里可以配置公司标记。
    [1] = {
        Sprite = 516,
        Color = 25,
        Scale = 0.8,
        Pos = vector3(-552.9, 5348.58, 74.74),
        Label = '伐木工作'
    },
}

Config.BlipsStyles = {
    ["treeBlip"] = {
        color = 25,
        label = "待砍伐的树",
        sprite = 153,
        scale = 0.6
    },
    ["withdrawTruck"] = {
        color = 25,
        label = "~g~~s~ 租用卡车",
        sprite = 477,
        scale = 0.7
    },
    ["sellLogs"] = {
        color = 1,
        label = "~g~~s~ 卖出原木",
        sprite = 272,
        scale = 1.0
    },
    ["processToPlanks"] = {
        color = 25,
        label = "~g~~s~ 将原木加工成木板",
        sprite = 365,
        scale = 0.8
    },
    ["processToChips"] = {
        color = 25,
        label = "~g~~s~ 将原木加工成木屑",
        sprite = 365,
        scale = 0.8
    },
    ["rentForklift"] = {
        color = 25,
        label = "~g~~s~ 租用叉车装载木板",
        sprite = 88,
        scale = 0.6,
    },
    ["sellPlanks"] = {
        color = 2,
        label = "~g~~s~ 卖出加工木板",
        sprite = 272,
        scale = 1.0,
    },
    ["sellChips"] = {
        color = 5,
        label = "~g~~s~ 卖出木屑",
        sprite = 272,
        scale = 1.0,
    }
}

Config.MarkerSettings = {   -- 仅在 Config.UseTarget = false 时使用。标记的颜色。激活 = 玩家站在标记内时。
    Active = {
        r = 235,
        g = 123,
        b = 54,
        a = 240,
    },
    UnActive = {
        r = 171,
        g = 91,
        b = 41,
        a = 240,
    }
}

Config.Stations = {
    ["processToPlanks"] = {
        {
            coords = vector4(-488.77, 5341.81, 84.01, 249.7),
            rotation = vec3(0, 0, -20.0),
            targetHeading = 250,
        },
        {
            coords = vector4(-487.04, 5346.5, 84.01, 249.7),
            rotation = vec3(0, 0, -20.0),
            targetHeading = 250,
        },
    },
    ["processToChips"] = {
        {
            coords = vector4(-478.6, 5320.78, 84.09, 338.44),
            rotation = vec3(0, 0, -110.0),
            targetHeading = 340.99,
        },
        {
            coords = vector4(-482.13, 5322.18, 84.09, 338.44),
            rotation = vec3(0, 0, -110.0),
            targetHeading = 340.99,
        },
    },
    ["sellChips"] = {
        {
            coords = vector4(1162.71, 2119.91, 57.08, 181.97),
            rotation = vec3(0, 0.0, 90.0),
            targetHeading = 181.97,
            pricePerPercent = math.random(3, 10),
            itemRewards = {
                -- {
                --     item_name = "water_bottle",
                --     chance = 50,
                --     amountPerPercent = 1,
                -- }
            },
        },
        {
            coords = vector4(2408.8, 4985.74, 47.67, 130.56),
            rotation = vec3(0, 0, -135.0),
            targetHeading = 137.34,
            pricePerPercent = math.random(3, 10),
            itemRewards = {
                -- {
                --     item_name = "water_bottle",
                --     chance = 50,
                --     amountPerPercent = 1,
                -- }
            },
        },
    },
    ["sellLogs"] = {
        {
            coords = vector4(1246.87, -3155.74, 7.0, 270.07),
            rotation = vec3(0, -3.0, 0.0),
            targetHeading = 270,
            pricePerLog = math.random(4, 12),
            itemRewards = {
                -- {
                --     item_name = "water_bottle",
                --     chance = 50,
                --     amountPerLog = 1,
                -- }
            },
        },
        {
            coords = vector4(165.57, -3151.59, 7.0, 272.06),
            rotation = vec3(0, 0, 0.0),
            targetHeading = 272.06,
            pricePerLog = math.random(4, 12),
            itemRewards = {
                -- {
                --     item_name = "water_bottle",
                --     chance = 50,
                --     amountPerLog = 1,
                -- }
            },
        },
    },
    ["sellPlanks"] = {
        {
            coords = vector4(119.48, -445.33, 42.33, 339.04),
            rotation = vec3(0, 0, 70.0),
            targetHeading = 339.04,
            pricePerPallete = math.random(60, 120),
            itemRewards = {
                -- {
                --     item_name = "water_bottle",
                --     chance = 50,
                --     amountPerPallete = 1,
                -- }
            },
        },
        {
            coords = vector4(-1095.58, -1638.03, 5.5, 35.11),
            rotation = vec3(0, 0, 125.0),
            targetHeading = 35.11,
            pricePerPallete = math.random(60, 120),
            itemRewards = {
                -- {
                --     item_name = "water_bottle",
                --     chance = 50,
                --     amountPerPallete = 1,
                -- }
            },
        },
        {
            coords = vector4(-477.95, -958.22, 24.99, 93.47),
            rotation = vec3(0, 0, 0.0),
            targetHeading = 93.47,
            pricePerPallete = math.random(60, 120),
            itemRewards = {
                -- {
                --     item_name = "water_bottle",
                --     chance = 50,
                --     amountPerPallete = 1,
                -- }
            },
        },
    },
}

Config.PlanksAttachments = {
    vector3(0.0, 4.0, 0.15),
    vector3(0.0, 0.1, 0.15),
    vector3(0.0, -3.9, 0.15),

    vector3(0.0, 4.0, 1.15),
    vector3(0.0, 0.1, 1.15),
    vector3(0.0, -3.9, 1.15),

    vector3(0.0, 4.0, 2.15),
    vector3(0.0, 0.1, 2.15),
    vector3(0.0, -3.9, 2.15),
}

Config.HintPlankAttachment = {
    offset = vec3(0.0, -6.9, 0.3),
    rotation = vec3(0.0, -3.5, 90.0)
}

Config.Locations = {       -- 这里可以更改所有基础工作地点。
    DutyToggle = {
        Coords = {
            vector3(-552.8, 5348.55, 74.74),
        },
        CurrentAction = 'open_dutyToggle',
        CurrentActionMsg = '按 ~INPUT_CONTEXT~ 开始/结束工作。',
        type = 'duty',
        scale = {x = 1.0, y = 1.0, z = 1.0},
    },
    FinishJob = {
        Coords = {
            vector3(-558.8, 5366.1, 70.3),
        },
        CurrentAction = 'finish_job',
        CurrentActionMsg = '按 ~INPUT_CONTEXT~ 完成工作。',
        scale = {x = 3.0, y = 3.0, z = 3.0},
    },
    ReturnLogCar = {
        Coords = {
            vector3(-569.05, 5336.43, 70.27),
        },
        CurrentAction = 'return_logcar',
        CurrentActionMsg = '按 ~INPUT_CONTEXT~ 归还木材车。',
        scale = {x = 3.0, y = 3.0, z = 3.0},
    },
    WithdrawTruck = {
        Coords = {
            vector3(-566.0, 5326.07, 73.59),
        },
        CurrentAction = 'withdraw_truck',
        CurrentActionMsg = '按 ~INPUT_CONTEXT~ 租用一辆卡车。',
        scale = {x = 1.0, y = 1.0, z = 1.0},
    },
    rentForklift = {
        Coords = {
            vector3(-560.8, 5282.81, 73.05),
        },
        CurrentAction = 'rent_forklift',
        CurrentActionMsg = '按 ~INPUT_CONTEXT~ 租用一辆叉车。',
        scale = {x = 1.0, y = 1.0, z = 1.0},
    },
}

Config.SpawnPoint = vector4(-558.8, 5366.1, 70.3, 345.66)                -- 公司拖拉机生成点
Config.SpawnPoint2 = vector4(-572.32, 5374.91, 70.32, 253.07)            -- 公司拖拉机2生成点
Config.SpawnPointFlatbed = vector4(-562.06, 5356.17, 70.40, 341.15)      -- 公司平板生成点
Config.SpawnPointTruck = vector4(-569.05, 5336.43, 70.27, 340.67)        -- 公司卡车生成点
Config.SpawnPointForklift = vector4(-569.15, 5271.18, 70.26, 164.37)     -- 公司叉车生成点
Config.SpawnPointPickup = vector4(-572.47, 5369.57, 70.18, 253.64)       -- 公司皮卡生成点

Config.EnableCloakroom = true                                            -- 如果为 false,则在工作菜单下看不到更衣室按钮
Config.Clothes = {
    male = {
        ["mask"] = {clotheId = 0, variation = 0},
        ["arms"] = {clotheId = 6, variation = 0},
        ["pants"] = {clotheId = 9, variation = 0},
        ["bag"] = {clotheId = 0, variation = 0},
        ["shoes"] = {clotheId = 25, variation = 0},
        ["t-shirt"] = {clotheId = 59, variation = 1},
        ["torso"] = {clotheId = 117, variation = 2},
        ["decals"] = {clotheId = 0, variation = 0},
        ["kevlar"] = {clotheId = 0, variation = 0},
    },
    female = {
        ["mask"] = {clotheId = 0, variation = 0},
        ["arms"] = {clotheId = 6, variation = 0},
        ["pants"] = {clotheId = 30, variation = 0},
        ["bag"] = {clotheId = 0, variation = 0},
        ["shoes"] = {clotheId = 24, variation = 0},
        ["t-shirt"] = {clotheId = 15, variation = 0},
        ["torso"] = {clotheId = 109, variation = 2},
        ["decals"] = {clotheId = 0, variation = 0},
        ["kevlar"] = {clotheId = 0, variation = 0},
    },
}

Config.Panels = {
    ["rentTruck"] = {
        title = "租用卡车",
        subTitle = "这是什么?",
        content = "这是你可以将木材运输车换成卡车的地方。卡车将使你运输拖车更加快速和舒适。要生成卡车,请按下面的租用按钮。",
        confirmBtn = "租用卡车",
        closeBtn = "关闭",
        photo = "assets/rentTruckPhoto.webp"
    },
    ["rentForklift"] = {
        title = "租用叉车",
        subTitle = "需要装载你的托盘吗?",
        content = "欢迎来到叉车租赁区域。在这里,你可以租一辆叉车来帮助装载你的加工木板到拖车上。叉车是管理你的木制产品的重要工具,旨在让你的工作更加轻松高效。请注意,叉车将在你完成装载任务后自动消失。现在租用叉车,简化你的木材加工操作!",
        confirmBtn = "租用叉车",
        closeBtn = "关闭",
        photo = "assets/rentForkliftPhoto.webp"
    },
    ["processToPlanks"] = {
        title = "木头加工",
        subTitle = "将原木加工成木板?",
        content = "欢迎来到原木加工的核心,在这里你可以将收集的原木精炼成木板。制作一个木板托盘,你需要 %s 根原木,此时你将获得 %s 个木板托盘。然而,你的拖车一次只能容纳最多 %s 个托盘。虽然木板的价格更高,但请记住,转换过程非常耗时。明智选择,充分利用你的努力!",
        confirmBtn = "加工原木",
        closeBtn = "关闭",
        photo = "assets/wood_process.webp"
    },
    ["processToChips"] = {
        title = "木头加工",
        subTitle = "将原木加工成木屑?",
        content = "欢迎来到木屑加工的核心,在这里你可以将收集的原木加工成木屑。每根原木将填满你木屑容器的 %s 百分比。请记住,你的拖车一次最多可以容纳 %s 个容器。当容器装满后,系统将自动停止处理。虽然木屑可能需要更多时间来生产,但它们的需求很高。明智选择,充分利用你的努力!",
        confirmBtn = "加工原木",
        closeBtn = "关闭",
        photo = "assets/wood_process.webp"
    },
    ["sellChips"] = {
        title = "沙滩岸",
        subTitle = "欢迎来到沙滩岸!",
        content = "我们可以以 $%s 每百分比购买你的木屑。如果你决定出售,请点击出售按钮。也许有人会提供不同的价格。聪明选择!",
        confirmBtn = "出售木屑",
        closeBtn = "关闭",
        photo = "assets/sandyChips.webp"
    },
    ["sellLogs"] = {
        title = "洛杉矶码头",
        subTitle = "欢迎来到洛杉矶码头的原木仓库!",
        content = "我们可以以 $%s 每根购买你的原木。如果你决定出售,请点击出售按钮。也许有人会提供不同的价格。聪明选择!",
        confirmBtn = "出售原木",
        closeBtn = "关闭",
        photo = "assets/lsdocks.webp"
    },
    ["sellPlanks"] = {
        title = "StoneSober 建筑公司",
        subTitle = "走进建筑的核心!",
        content = "欢迎,伐木工!StoneSober作为建筑行业的领先实体,准备收购你精心制作的木板。我们的报价是每个托盘 $%s。如果你想达成交易,只需按下出售木板按钮。但是,请记住,可能还有其他人愿意提供不同的价格。选择由你决定,谨慎选择!",
        confirmBtn = "出售木板",
        closeBtn = "关闭",
        photo = "assets/stonesober.webp"
    }
}

-- 这里可以更改 client.lua 和 server.lua 中所有使用的翻译。别忘了在 HTML 和 JS 文件中也进行翻译。
Config.Lang = {
    -- 客户端
    ["no_permission"] = "只有团队负责人可以这样做!",
    ["keybind"] = '伐木工作标记交互',
    ["too_far"] = "您的团队已开始工作,但您距离总部太远。",
    ["kicked"] = "你将 %s 踢出了团队。",
    ["alreadyWorking"] = "首先完成上一个订单。",
    ["quit"] = "您已离开团队。",
    ["nobodyNearby"] = "周围没有人。",
    ["cantInvite"] = "为了能够邀请更多人,您必须先完成工作。",
    ["inviteSent"] = "邀请已发送!",
    ["spawnpointOccupied"] = "汽车或拖车生成点已被占用。",
    
    ["startingTutorialLegacy"] = "欢迎来到伐木工的角色。这份工作为您提供了独立工作和按自己节奏工作的自由。最初,您需要砍伐树木并使用装载机将木材装载到拖车上。记住,要拆卸拖车,只需按住 H 键。您可以选择将木材加工成木板、木屑或出售原木。完成收集或加工木材后,您可以将装载机换成卡车,在地图上的各个地点出售您的商品。请注意,您的产品价格可能因地点而异。",
    ["AfterTreeFallTutorialLegacy"] = "恭喜,您刚刚砍下了第一棵树。现在使用您的原木车将其装载到拖车上。使用 CTRL 和 SHIFT 或数字小键盘键控制机械臂。",
    ["afterLogsProcessLegacy"] = "恭喜!您所有的原木都已加工。如果您尚未这样做,请先租用叉车,并将所有托盘装载到拖车上。然后您可以在几个标记在地图上的点出售它们。",
    
    ["startingTutorial"] = "欢迎来到伐木工的角色。这份工作为您提供了独立工作和按自己节奏工作的自由。最初,您需要砍伐树木并使用液压起重机将木材装载到拖车上。您可以通过与拖车连接的遥控器来控制它。您可以选择将木材加工成木板、木屑或出售原木。完成收集或加工木材后,您可以在地图上的各个地点出售您的商品。请注意,您的产品价格可能因地点而异。",
    ["AfterTreeFallTutorial"] = "恭喜,您刚刚砍下了第一棵树。现在使用液压起重机将其装载到拖车上。",
    ["afterLogsProcess"] = "恭喜!您所有的原木都已加工。您可以使用液压起重机将托盘装载到拖车上。然后您可以在几个标记在地图上的点出售它们。",
    
    ["afterLoadingFullTrailer"] = "恭喜!您的拖车已装满。现在您可以出售原木,或将原木加工成木板或木屑,也许能赚更多。请记住,价格会根据需求变化。",
    ["afterSkipFullLoad"] = "您三个容器中的一个已装满,或者所有原木都已加工。请在准备好时将装满的容器转移到拖车上,若还有其他原木,处理将继续进行。",
    ["afterChipsProcess"] = "恭喜!您已成功将所有原木转换为木屑。现在是时候将装满的容器装到拖车上,并在地图上的某个地点出售您的商品。",
    
    ["alreadyTakenControl"] = "其他人正在使用起重机。",
    ["getController"] = "按 ~INPUT_CONTEXT~ 获取控制器。",
    ["putDownController"] = "按 ~INPUT_CONTEXT~ 放下控制器。",
    ["controlCrane"] = "按 ~INPUT_CONTEXT~ 控制起重机。",
    ["controlingCrane"] = "按 ~INPUT_FRONTEND_PAUSE_ALTERNATE~ 退出\n按 ~INPUT_MOVE_UP_ONLY~ ~INPUT_MOVE_DOWN_ONLY~ 上下移动\n按 ~INPUT_MOVE_LEFT_ONLY~ ~INPUT_MOVE_RIGHT_ONLY~ 旋转\n按 ~INPUT_COVER~ ~INPUT_TALK~ 折叠/展开机械臂\n按 ~INPUT_FRONTEND_LEFT~ ~INPUT_FRONTEND_RIGHT~ 旋转吊钩\n按 ~INPUT_ATTACK~ 附加/解除",
    ["failedToAttach"] = "您的拖车已满或此道具无法连接。",
    
    ["notADriver"] = "您需要成为车辆的驾驶员才能结束工作。",
    ["partyIsFull"] = "发送邀请失败,您的团队已满。",
    ["wrongReward1"] = "支付百分比应在0到100之间。",
    ["wrongReward2"] = "所有支付的总百分比超过100%。",
    ["cut_smaller"] = "~r~ | ~w~砍伐",
    ["grab"] = "~r~ | ~w~抓取",
    ["treeCutting"] = "按 ~INPUT_CONTEXT~ 开始砍伐树木。",
    ["useLogLoader"] = "使用原木车将其装载到拖车上。",
    ["attachLogToLoader"] = "按 ~INPUT_CONTEXT~ 抓取原木。",
    ["putLogOnLoader"] = "按 ~INPUT_CONTEXT~ 装载原木。",
    ["CantWithTrailer"] = "您无法在拖车连接的情况下归还原木车。请按 H 解除连接。",
    ["notDriverOrValidModel"] = "您不是驾驶员,或者不在原木车内。",
    ["OpenSellingMenu"] = "按 ~INPUT_CONTEXT~ 打开出售菜单。",
    ["OpenProcessingMenu"] = "按 ~INPUT_CONTEXT~ 打开加工菜单。",
    ["logsSellInProgress"] = "等待所有原木从拖车中卸下并返回基地以获得付款。",
    ["planksSellInProgress"] = "等待所有木板托盘从拖车中卸下并返回基地以获得付款。",
    ["chipsSellInProgress"] = "等待所有木屑从拖车中卸下并返回基地以获得付款。",
    ["attachPlanksToForklift"] = "按 ~INPUT_CONTEXT~ 将木板托盘附加到叉车。",
    ["attachSkipToTrailer"] = "按 ~INPUT_CONTEXT~ 将木屑装入拖车。",
    ["loadItOnFlatbed"] = "请将此托盘装载到您的拖车上。请注意,当原木仍在上面时,您无法装载它。",
    ["loadPallete"] = "按 ~INPUT_CONTEXT~ 将托盘装载到您的拖车上。",
    ["notEnoughLogs"] = "您拖车上的原木不足,无法开始加工。",
    ["dontHaveLogs"] = "您拖车上没有原木可出售。",
    ["dontHavePlanks"] = "您拖车上没有木板可出售。",
    ["sold"] = "您已成功出售商品。返回基地结束工作以获得报酬。",
    ["fullTrailer"] = "您的拖车无法再装更多材料。",
    ["noSkipUnder"] = "木屑出口下方没有任何木屑。您现在无法开始加工。",
    ["currentSkipIsFull"] = "当前的木屑已经满了。请更换木屑或者将其装载到拖车上。",
    ["useJobTractor"] = "使用您的工作拖拉机。",
    ["useJobForklift"] = "租用并使用您的工作叉车。",
    ["AttachSkip"] = "按 ~INPUT_CONTEXT~ 连接您的木屑。",
    ["WaitUntilFullLoad"] = "木屑仍在填充中。请稍等。",
    ["newSkipSet"] = "我们已将您的木屑自动放置在木屑出口下。您现在可以继续木屑加工。",
    ["dontHaveChips"] = "您没有木屑可出售。",
    ["wentWrong"] = "出现错误。请重试。",
    ["tooManyLogs"] = "您已砍伐太多原木。首先将它们装载。",
    ["cantLeaveLobby"] = "您在工作中无法离开大厅。请首先结束工作。",
    ["exploitFix"] = "在附近有人时您无法砍伐树木。",
    
    -- 服务器
    ["isAlreadyHost"] = "该玩家是他的团队的领导者。",
    ["isBusy"] = "该玩家已经属于另一个团队。",
    ["hasActiveInvite"] = "该玩家已经收到其他人的活动邀请。",
    ["HaveActiveInvite"] = "您已经有一个活动的邀请加入团队。",
    ["InviteDeclined"] = "您的邀请已被拒绝。",
    ["InviteAccepted"] = "您的邀请已被接受!",
    ["error"] = "加入团队时出现问题。请稍后再试。",
    ["kickedOut"] = "您已被踢出团队!",
    ["reward"] = "您获得了 $",
    ["RequireOneFriend"] = "这项工作至少需要一名团队成员。",
    ["penalty"] = "您支付了金额为 ",
    ["clientsPenalty"] = "团队的主机接受了惩罚。您未收到付款。",
    ["dontHaveReqItem"] = "您或您的团队中的某人没有开始工作的必要物品。",
    ["notEverybodyHasRequiredJob"] = "并不是您的所有朋友都有所需工作。",
    ["someoneIsOnCooldown"] = "%s 现在不能开始工作(冷却时间:%s)。",
    ["hours"] = "小时",
    ["minutes"] = "分钟",
    ["seconds"] = "秒",
    ["newBoss"] = "之前的大厅老板已离开服务器。您现在是团队负责人。",
    ["logCarHidden"] = "您的原木车已归还。您现在可以租用卡车。",
    ["LogCarNotHidden"] = "您没有隐藏原木车。您需要先隐藏它。",
    ["alreadyRentedOneTruck"] = "您已经租用了公司卡车。我们无法再给您租用一辆。",
    ["alreadyRentedOneForklift"] = "您已经租用了公司叉车。我们无法再给您租用一辆。",
    ["PlanksNotProcessed"] = "您还没有加工任何木板。我们无法给您提供叉车。",
}

Config.Props = {
    tree = {
        hash = `prop_tree_cedar_02`,
        zOffset = -3.5,
    },
    logs = {
        hash = `prop_log_01`,
        height = 4.5,
    }
}

-- 如果您使用的是 SA 森林,在我们Discord的代码片段频道中,您可以下载一个与我们地图不冲突的版本。

Config.TreeSpawningCoords = {
    vector3(-645.61, 5411.87, 47.29),
    vector3(-624.56, 5411.82, 49.45),
    vector3(-634.15, 5387.13, 53.53),
    vector3(-665.86, 5365.69, 58.91),
    vector3(-664.95, 5343.81, 62.6),
    vector3(-728.37, 5279.53, 78.79),
    vector3(-755.76, 5283.57, 83.55),
    vector3(-690.96, 5224.04, 94.91),
    vector3(-672.6, 5210.38, 95.82),
    vector3(-635.4, 5152.26, 111.67),
    vector3(-616.73, 5119.49, 120.38),
    vector3(-574.23, 5101.81, 122.5),
    vector3(-545.2, 5111.71, 112.19),
    vector3(-495.51, 5136.5, 103.01),
    vector3(-490.38, 5477.88, 82.8),
    vector3(-519.72, 5486.62, 70.91),
    vector3(-531.71, 5462.31, 70.49),
    vector3(-540.1, 5441.34, 68.05),
    vector3(-519.32, 5438.12, 72.49),
    vector3(-509.31, 5492.07, 74.33),
    vector3(-471.69, 5487.43, 84.03),
    vector3(-519.16, 5585.13, 65.9),
    vector3(-531.55, 5571.48, 62.81),
    vector3(-529.61, 5552.31, 64.9),
    vector3(-540.84, 5531.77, 61.61),
    vector3(-554.39, 5562.05, 56.39),
    vector3(-589.23, 5431.29, 57.21),
    vector3(-567.84, 5426.72, 61.0),
    vector3(-728.19, 5350.34, 63.3),
    vector3(-730.67, 5364.64, 60.48),
    vector3(-722.48, 5390.02, 55.06),
    vector3(-727.42, 5401.34, 50.97),
    vector3(-735.48, 5382.91, 55.01),
    vector3(-747.37, 5359.01, 59.81),
    vector3(-748.72, 5285.98, 80.81),
    vector3(-498.74, 5451.62, 79.77),
    vector3(-510.49, 5467.59, 76.77),
    vector3(-529.41, 5504.77, 66.24),
    vector3(-512.72, 5533.79, 70.85),
    vector3(-584.55, 5512.0, 52.62),
    vector3(-582.23, 5503.76, 54.13),
    vector3(-579.39, 5481.86, 58.13),
    vector3(-608.1, 5468.1, 56.72),
    vector3(-625.57, 5481.37, 52.83),
    vector3(-660.37, 5474.98, 51.37),
    vector3(-689.38, 5464.27, 47.12),
    vector3(-712.04, 5413.47, 49.73),
    vector3(-711.86, 5374.91, 60.19),
    vector3(-722.23, 5344.14, 65.91),
    vector3(-722.23, 5302.66, 72.62),
    vector3(-757.18, 5247.65, 95.3),
    vector3(-694.52, 5194.67, 103.17),
    vector3(-677.13, 5173.72, 108.07),
    vector3(-638.68, 5180.63, 99.24),
    vector3(-590.7, 5181.34, 95.81),
    vector3(-562.96, 5161.92, 101.71),
    vector3(-586.59, 5138.02, 111.49),
    vector3(-681.87, 5131.28, 124.55),
    vector3(-684.47, 5360.15, 65.19),
    vector3(-688.87, 4977.74, 179.36),
    vector3(-667.43, 5011.87, 164.96),
    vector3(-666.18, 5056.28, 147.76),
    vector3(-605.13, 5043.49, 140.34),
    vector3(-657.11, 5136.94, 124.69),
    vector3(-613.6, 5243.29, 72.38),
    vector3(-517.75, 5185.98, 89.79),
    vector3(-802.51, 5287.74, 86.55),
    vector3(-817.04, 5269.61, 87.95),
    vector3(-788.8, 5227.42, 104.26),
    vector3(-771.96, 5205.25, 111.4),
    vector3(-740.68, 5200.75, 104.22),
    vector3(-744.22, 5120.48, 135.0),
    vector3(-706.64, 5105.96, 132.03),
    vector3(-722.7, 5066.09, 143.12),
    vector3(-654.21, 5035.41, 154.55),
    vector3(-577.6, 5077.24, 130.64),
    vector3(-452.45, 5099.4, 130.34),
    vector3(-480.19, 5108.66, 118.7),
    vector3(-476.73, 5123.16, 113.17),
    vector3(-442.23, 5182.72, 110.59),
    vector3(-421.5, 5225.06, 124.34),
    vector3(-409.42, 5268.9, 127.09),
    vector3(-398.38, 5286.62, 125.51),
    vector3(-449.79, 5385.96, 80.44),
    vector3(-476.24, 5424.59, 68.6),
    vector3(-657.12, 5303.43, 66.9),
    vector3(-545.45, 5079.27, 123.59),
    vector3(-661.94, 5113.78, 129.96),
    vector3(-668.48, 5122.11, 127.41),
    vector3(-676.88, 5123.98, 127.41),
    vector3(-684.74, 5135.61, 122.77),
    vector3(-678.92, 5173.07, 108.17),
    vector3(-683.94, 5186.62, 105.05),
    vector3(-666.42, 5189.94, 102.1),
    vector3(-654.8, 5194.65, 96.19),
    vector3(-640.27, 5196.54, 92.35),
    vector3(-625.11, 5196.69, 89.46),
    vector3(-617.0, 5232.85, 73.87),
    vector3(-625.6, 5244.29, 73.76),
    vector3(-642.6, 5255.01, 74.94),
    vector3(-651.35, 5255.88, 75.64),
    vector3(-659.65, 5261.74, 76.39),
    vector3(-661.34, 5275.45, 74.48),
    vector3(-670.49, 5287.44, 72.19),
    vector3(-680.75, 5282.51, 72.4),
    vector3(-554.78, 5226.8, 74.85),
    vector3(-543.34, 5237.91, 74.79),
    vector3(-534.23, 5237.0, 78.31),
    vector3(-507.72, 5222.4, 87.04),
    vector3(-356.02, 5366.27, 132.39),
    vector3(-366.05, 5366.66, 125.56),
    vector3(-378.78, 5368.71, 118.62),
    vector3(-385.71, 5363.21, 115.97),
    vector3(-463.55, 5566.79, 72.87),
    vector3(-465.37, 5580.11, 71.19),
    vector3(-489.26, 5557.56, 72.94),
    vector3(-496.86, 5525.12, 75.06),
    vector3(-517.58, 5521.56, 69.58),
    vector3(-535.48, 5515.5, 64.09),
    vector3(-560.11, 5496.26, 59.52),
    vector3(-571.11, 5486.93, 58.88),
    vector3(-585.56, 5484.2, 56.46),
    vector3(-593.1, 5472.41, 57.3),
    vector3(-609.0, 5472.4, 55.09),
    vector3(-648.85, 5479.99, 51.72),
    vector3(-646.64, 5492.6, 51.28),
    vector3(-661.73, 5453.63, 50.43),
    vector3(-679.16, 5432.8, 47.39),
    vector3(-691.1, 5395.92, 53.59),
    vector3(-685.85, 5380.1, 58.06),
    vector3(-687.99, 5359.93, 65.76),
    vector3(-685.81, 5348.95, 67.62),
    vector3(-683.72, 5331.08, 68.33),
    vector3(-674.66, 5327.79, 66.42),
}

Config.Sounds = {
    TreeFallingMaxDistance = 75,            -- 树木倒下的声音可听到的最大距离为75米
    ChainsawNoiseMaxDistance = 250,         -- 电锯的声音可听到的最大距离为250米
    logRollProcessing = 60,                 -- 原木加工成木板的声音可听到的最大距离为250米
}

Config.TrailerSkipsAttachments = {
    vec3(0.0, 3.68, 0.3),
    vec3(0.0, -0.61, 0.3),
    vec3(0.0, -4.89, 0.3),
}

Config.HintSkip = {
    offset = vec3(0.0, -8.6, 1.0),
    rotation = vec3(0.0, -25.0, 90.0)
}

Config.TrailerLogsAttachments = {
    vector3(-1.03, 3.910, 0.65),
    vector3(-0.47, 3.910, 0.65),
    vector3(0.09, 3.910, 0.65),
    vector3(0.65, 3.910, 0.65),
    vector3(1.12, 3.910, 0.65),

    vector3(-1.03, -0.21, 0.65),
    vector3(-0.47, -0.21, 0.65),
    vector3(0.09, -0.21, 0.65),
    vector3(0.65, -0.21, 0.65),
    vector3(1.12, -0.21, 0.65),

    vector3(-1.03, -4.32, 0.65),
    vector3(-0.47, -4.32, 0.65),
    vector3(0.09, -4.32, 0.65),
    vector3(0.65, -4.32, 0.65),
    vector3(1.12, -4.32, 0.65),

    vector3(-1.03, 3.910, 1.18),
    vector3(-0.47, 3.910, 1.18),
    vector3(0.09, 3.910, 1.18),
    vector3(0.65, 3.910, 1.18),
    vector3(1.12, 3.910, 1.18),

    vector3(-1.03, -0.21, 1.18),
    vector3(-0.47, -0.21, 1.18),
    vector3(0.09, -0.21, 1.18),
    vector3(0.65, -0.21, 1.18),
    vector3(1.12, -0.21, 1.18),

    vector3(-1.03, -4.32, 1.18),
    vector3(-0.47, -4.32, 1.18),
    vector3(0.09, -4.32, 1.18),
    vector3(0.65, -4.32, 1.18),
    vector3(1.12, -4.32, 1.18),

    vector3(-1.03, 3.910, 1.66),
    vector3(-0.47, 3.910, 1.66),
    vector3(0.09, 3.910, 1.66),
    vector3(0.65, 3.910, 1.66),
    vector3(1.12, 3.910, 1.66),

    vector3(-1.03, -0.21, 1.66),
    vector3(-0.47, -0.21, 1.66),
    vector3(0.09, -0.21, 1.66),
    vector3(0.65, -0.21, 1.66),
    vector3(1.12, -0.21, 1.66),

    vector3(-1.03, -4.32, 1.66),
    vector3(-0.47, -4.32, 1.66),
    vector3(0.09, -4.32, 1.66),
    vector3(0.65, -4.32, 1.66),
    vector3(1.12, -4.32, 1.66),

    vector3(-1.03, 3.910, 2.19),
    vector3(-0.47, 3.910, 2.19),
    vector3(0.09, 3.910, 2.19),
    vector3(0.65, 3.910, 2.19),
    vector3(1.12, 3.910, 2.19),

    vector3(-1.03, -0.21, 2.19),
    vector3(-0.47, -0.21, 2.19),
    vector3(0.09, -0.21, 2.19),
    vector3(0.65, -0.21, 2.19),
    vector3(1.12, -0.21, 2.19),

    vector3(-1.03, -4.32, 2.19),
    vector3(-0.47, -4.32, 2.19),
    vector3(0.09, -4.32, 2.19),
    vector3(0.65, -4.32, 2.19),
    vector3(1.12, -4.32, 2.19),
}

Config.SkipsSpawnPoints = {
    {
        coords = vec3(-523.7699, 5298.66357, 73.4215),
        rotation = vec3(0.0, 0.0, 70.0),
    },
    {
        coords = vec3(-523.5898, 5285.729, 73.5347),
        rotation = vec3(0.0, 0.0, -20.0),
    },
    {
        coords = vec3(-525.6033, 5280.098, 73.5606461),
        rotation = vec3(0.0, 0.0, -20.0),
    },
}
回复

使用道具 举报

文明发言,和谐互动
文明发言,和谐互动
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|FiveM技术教程分享 ( 冀ICP备2021005225号-1 ) |网站地图

GMT+8, 2025-5-11 04:48 , Processed in 0.285084 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2013 ELITE论坛【技术无价-分享快乐】

快速回复 返回顶部 返回列表