BUTY SHOP
WebDiscord
  • 💜BUTY DOCUMENTATION
  • âš ī¸INFORMATION
    • LICENSES
    • OUR TERMS
    • SUPPORT
  • 📚GUIDES
    • ⭐Infinite JOBS
      • INSTALLATION
      • HOW TO DO
    • đŸŒŋGardener Job
      • INSTALLATION
    • ❗Infinite Activities
      • INSTALLATION
    • đŸ›Šī¸Flight School
      • INSTALLATION
    • 🚤Boat School
      • INSTALLATION
    • đŸ’ŗLicense System
      • INSTALLATION
      • EXPORT INTEGRATION
      • COMMANDS
    • 🚗Vehicle Shop
      • INSTALLATION
    • â›ī¸Advanced Miner
      • INSTALLATION
    • 🔄Progress Bar
      • INSTALLATION
    • 💊Advanced Sell Drugs
      • INSTALLATION
      • COMMON PROBLEMS
    • 🌊Rent Water Activities
      • INSTALLATION
    • đŸŽī¸Rent Kart Vehicles
      • INSTALLATION
    • 🧑‍đŸĻąAdvanced Identity
      • INSTALLATION
    • 🚚Advanced Trucker
      • INSTALLATION
    • đŸ›Šī¸Advanced Airplane
      • INSTALLATION
    • 🚌Advanced Bus
      • INSTALLATION
    • â™ģī¸Advanced Garbage
      • INSTALLATION
      • COMMON PROBLEMS
  • âš™ī¸COMMON ERRORS
Powered by GitBook
On this page
  • 1. DOWNLOAD
  • 2. DEPENDENCIES AND INSTALLATION
  • 3. CONFIG
  1. GUIDES
  2. Boat School

INSTALLATION

PreviousBoat SchoolNextLicense System

Last updated 1 year ago

1. DOWNLOAD

The first step is to download the product we have just purchased. To do this we will go to our account and search for "Buty-BoatSchool".

2. DEPENDENCIES AND INSTALLATION

This script does not need any dependencies or progress bar.

Just place the script under your CORE and your core scripts:

ensure Buty-BoatSchool

And when you have everything clean without another Boat School script, you will have to install the Buty-BoatSchool SQL.

3. CONFIG

The following will explain all the settings, one of the most important things that I recommend you spend a few minutes to understand in order to offer your users the best possible experien

The SERVER > OPEN is where you have to configure the correct event/export that your license system uses.

If you use the DEFAULT of ESX/QB you don't have to touch anything, the same if you use the you only have to activate it in the CONFIG.

Framework = {
    FrameworkName = 'esx', -- esx or qb
    FileName = 'es_extended', -- es_extended / qb-core
    SQLWrapper = 'oxmysql', --  oxmysql / mysql-async / ghmattimysql
    UseButyLicense = false -- true / false -> https://butycall.tebex.io/package/5743295
}

Prices = {
    PaymentMethod = 'bank', -- bank / cash
    Theoretical = 10000,
    Practical = 15000
}

NPC = {
    Position = vector4(-786.698914, -1385.380249, 0.578735, 45.354328),
    Model = 's_m_m_pilot_01'
}

Blip = {
    Sprite = 427,
    Color = 38,
    Scale = 1.0,
    Label = 'Boat School'
}

TheoreticalExam = {
    MistakeMax = 2,
    ExamTime = 2.5, -- In minutes
    Questions = {
        {
            Question = 'Question #1 Airplane',
            Answers = {
                { Text = 'Answer #1', Right = false },
                { Text = 'Answer #2', Right = true },
                { Text = 'Answer #3', Right = false }
            }
        },
        {
            Question = 'Question #2 Airplane',
            Answers = {
                { Text = 'Answer #1', Right = false },
                { Text = 'Answer #2', Right = false },
                { Text = 'Answer #3', Right = true }
            }
        },
        {
            Question = 'Question #3 Airplane',
            Answers = {
                { Text = 'Answer #1', Right = true },
                { Text = 'Answer #2', Right = false },
                { Text = 'Answer #3', Right = false }
            }
        },
        {
            Question = 'Question #4 Airplane',
            Answers = {
                { Text = 'Answer #1', Right = true },
                { Text = 'Answer #2', Right = false },
                { Text = 'Answer #3', Right = false }
            }
        },
        {
            Question = 'Question #5 Airplane',
            Answers = {
                { Text = 'Answer #1', Right = true },
                { Text = 'Answer #2', Right = false },
                { Text = 'Answer #3', Right = false }
            }
        },
        {
            Question = 'Question #6 Airplane',
            Answers = {
                { Text = 'Answer #1', Right = true },
                { Text = 'Answer #2', Right = false },
                { Text = 'Answer #3', Right = false }
            }
        },
        {
            Question = 'Question #7 Airplane',
            Answers = {
                { Text = 'Answer #1', Right = true },
                { Text = 'Answer #2', Right = false },
                { Text = 'Answer #3', Right = false }
            }
        },
        {
            Question = 'Question #8 Airplane',
            Answers = {
                { Text = 'Answer #1', Right = true },
                { Text = 'Answer #2', Right = false },
                { Text = 'Answer #3', Right = false }
            }
        }
    }
}

PracticalExam = {
    MissionTime = 10, -- In minutes
    Model = 'speeder',
    VehiclePlate = 'Boat School',
    SpawnCoords = {
        vector4(-767.46, -1379.73, 0.12, 51.7)
    },
    CheckpointMarker = { Type = 6, Size = 25.0, Color = { 47, 92, 115, 255 } },
    Texts = {
        -- First mission
        [1] = 'Exit the Port Zone',
        -- Second mission
        [2] = 'Navigate the Circuit, without leaving the course',
        -- Third mission
        [3] = 'Avoid Obstacles',
        -- Fourth mission
        [4] = 'Navigate the Circuit through the channels of Los Santos',
        -- Fifth mission
        [5] = 'Park the boat without crashing'
    },
    Routes = {
        {
            -- First mission
            {
                { Pos = vector3(-835.23, -1529.29, 0.12) }
            },
            -- Second mission
            {
                { Pos = vector3(-907.18, -1600.54, 0.12) },
                { Pos = vector3(-989.66, -1689.09, 0.03) },
                { Pos = vector3(-1077.44, -1772.11, 0.3) },
                { Pos = vector3(-1195.42, -1876.2, 0.28) },
                { Pos = vector3(-1259.57, -1969.62, 0.22) },
                { Pos = vector3(-1346.27, -1997.89, 0.38) },
                { Pos = vector3(-1433.55, -2047.24, -0.07) },
                { Pos = vector3(-1559.25, -2163.55, 0.34) },
                { Pos = vector3(-1687.87, -2261.56, 0.53) }
            },
            -- Third mission
            {
                { Pos = vector3(-1829.74, -2658.66, 0.92) },
                { Pos = vector3(-1915.89, -2803.36, 1.33) },
                { Pos = vector3(-1969.02, -2779.17, 0.53) },
                { Pos = vector3(-1881.45, -2637.39, 0.92) }
            },
            -- Fourth mission
            {
                { Pos = vector3(-1054.7, -1752.16, 0.4) },
                { Pos = vector3(-884.52, -1582.59, 0.03) },
                { Pos = vector3(-843.25, -1457.1, -0.04) },
                { Pos = vector3(-912.36, -1355.74, -0.08) },
                { Pos = vector3(-988.33, -1356.51, -0.05) },
                { Pos = vector3(-1057.62, -1229.95, -0.51) },
                { Pos = vector3(-1106.41, -1150.69, -0.54) },
                { Pos = vector3(-1113.44, -1120.62, -0.37) },
                { Pos = vector3(-1000.25, -1054.48, -0.45) },
                { Pos = vector3(-947.37, -1024.16, -0.45) },
                { Pos = vector3(-914.38, -1073.83, -0.5) },
                { Pos = vector3(-899.48, -1118.03, -0.58) },
                { Pos = vector3(-948.45, -1147.04, -0.56) },
                { Pos = vector3(-1008.26, -1181.01, -0.41) },
                { Pos = vector3(-1058.91, -1235.53, -0.46) },
                { Pos = vector3(-982.39, -1364.26, -0.03) },
                { Pos = vector3(-926.6, -1358.44, -0.08) },
                { Pos = vector3(-835.98, -1464.27, -0.04) }
            },
            -- Fifth mission
            {
                { Pos = vector3(-859.13, -1486.98, -0.09) }
            }
        }
    }
}

Translation = {
    OpenMenu = '~w~PRESS ~ub~[E]~wu~ ~w~to open the boat school',
    NotEnoughMoney = 'You don\'t have enough money'
}

This SCRIPT does not need many open functions since everything is already self-configured.

It is recommended that many of the modifications to the OPENFUNCTION files be made by a programmer with LUA and FiveM ideas.

-- Triggered when the practical exam vehicle was spawned
-- vehicle = the vehicle handle
function VehicleSpawned(vehicle)
end

-- Triggered before the script deletes the mission vehicle
-- vehicle = the vehicle handle
function VehicleDeleted(vehicle)

end

-- Triggered when the player died while in mission
-- If you are using the default esx_ambulancejob or qb-ambulancejob then leave it blank
function RevivePlayer()

end

function Text(text,coords)
	local dist = Vdist(coords.x,coords.y,coords.z,GetEntityCoords(PlayerPedId(-1)))
    if dist < 1.5 then
        DrawText3Ds(coords.x,coords.y,coords.z + 1.05,text, 0, 0.1, 0.1,255)
    else
        DrawText3Ds(coords.x,coords.y,coords.z + 1.05,text, 0, 0.1, 0.1,100)
    end
end

function DrawText3Ds(x, y, z, text)
	SetTextScale(0.35, 0.35)
    SetTextFont(4)
    SetTextProportional(1)
    SetTextColour(255, 255, 255, 215)
    SetTextEntry("STRING")
    SetTextCentre(true)
    AddTextComponentString(text)
    SetDrawOrigin(x,y,z, 0)
    DrawText(0.0, 0.0)
    ClearDrawOrigin()
end
-- Triggered when player passed the theoretical / practical exam
-- source = player id
-- license = license type (airplane, helicopter)
-- exam = exap type (theoretical, practical)
function AddLicense(source, license, exam)
    if ESX then
        if exam == "practical" then
            TriggerEvent('esx_license:addLicense', source, license, function() end)
        end
    elseif QBCore then
        local qbPlayer = QBCore.Functions.GetPlayer(source)
        if exam == "practical" then
            if qbPlayer.PlayerData.source ~= nil then
                local licenseTable = qbPlayer.PlayerData.metadata['licences']
                licenseTable[license] = true
                qbPlayer.Functions.SetMetaData('licences', licenseTable)
                qbPlayer.Functions.Save()
            end
        end
    end
end

-- Triggered when notification needs to be shown
-- source = player id
-- text = notification text
function Notification(source, text)
    
end
```

If you want to edit the aesthetics or design. You have the HTML open so you can modify the style and everything as you want.

The script is RESPONSIVE for all resolutions as well.

📚
🚤
KEYMASTER
Buty-License