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. Advanced Bus

INSTALLATION

Read very well and follow all the steps below. If you find any error or have any doubt open a ticket.

PreviousAdvanced BusNextAdvanced Garbage

Last updated 2 years 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-Bus".

2. DEPENDENCIES AND INSTALLATION

To install it add the resource to your scripts folder and put the following in your SERVER.CFG:

ensure Buty-Bus	

You will also need to install the SQL in your database before starting the script, in order to save the experience of each player.

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 experience.

To make it easier for you to configure, this script comes with several configuration files, each one for one thing. You can see it explained below:

Here you will only have to configure your framework, your database and some extra settings.

In UseKeys, UseFuel, UseDeleteVehicle you activate it in case you have filled some of the integrations in functions.

Config = {}

Configuration = {
    [1] = {framework = 'esx', ESXtrigger = 'es_extended', QBtrigger = 'qb-core'}, -- framework "esx" or "qbcore"
    [2] = {Mysql = 'oxmysql'}, -- oxmysql, mysql-async or ghmattisql
    [3] = {DamageMoney = true, Amount = 50}, -- The money you are charged if you damage the bus
    [4] = {NeedJob = false, JobName = "busdriver"},
    [5] = {NeedKeys = false, UseFuel = false, UseDeleteVehicle = false},
    [6] = {UseTarget = false, TargetExport = 'bt-target', Coords = vector3(466.76, -575.84, 28.48), Text = 'START JOB', Icon = 'fa fa-bus'}
}

NPCS = {
    [1] = {coordsjob = {{x = 466.76, y = -575.84, z = 28.48, h = 186.44}}, model = 'cs_floyd', anim = 'WORLD_HUMAN_CLIPBOARD'},
    [2] = {driver = 's_m_m_trucker_01'},
    [3] = {passengers=
    {
        [1]  = {ped = 'a_f_y_indian_01'},     [2]  = {ped = 'a_f_y_tourist_01'},  [3]  = {ped = 'a_m_m_bevhills_01'},   [4]  = {ped = 'a_m_m_genfat_02'},
        [5]  = {ped = 'a_m_m_prolhost_01'},   [6]  = {ped = 'a_m_m_skidrow_01'},  [7]  = {ped = 'a_m_o_genstreet_01'},  [8]  = {ped = 's_f_m_fembarber'},
        [9]  = {ped = 's_f_y_clubbar_01'},    [10] = {ped = 's_f_y_shop_low'},    [11] = {ped = 's_f_y_sweatshop_01'},  [12] = {ped = 's_m_o_busker_01'},
    }}
}

Rewards = {
    ['local'] = {
        [1] = {Pay = 50, IncreasePerLVL = 1},
        [2] = {EXP = 10, IncreasePerLVL = 1}
    },
    ['regional'] = {
        [1] = {Pay = 500, IncreasePerLVL = 1},
        [2] = {EXP = 30, IncreasePerLVL = 1, IncreasePerDistance = 1 }
    }

}

Transport = {
    ['local'] = {
        createbus = vector3(439.68, -680.84, 28.76),
        gocoords = vector3(469.76, -587.44, 28.48),
        gocoordsnpc = vector3(477.84, -569.52, 28.48),
        endjob = {x = 445.0, y = -581.8, z = 28.48},
        heading = 268.28,
        vehicle = 'bus'
    },
    ['regional'] = {
        createbus = vector3(439.68, -680.84, 28.76),
        gocoords = vector3(469.76, -587.44, 28.48),
        gocoordsnpc = vector3(477.84, -569.52, 28.48),
        heading = 268.28,
        vehicle = 'bus'
    }, 

}

Routes = {
    ['local'] = {
        [1] = {
            [1] = {x = 309.72, y = -757.16, z = 29.2, h = 161.35, go = false}, 
            [2] = {ped = vector3(301.60, -764.22, 29.31)},
            [3] = {cam = {x = 25.2, y = 6.2, z = 1.0}, camrotation = vector3(0.0, 0.0, 131)}
        },
        [2] = {
            [1] = {x = 124.76, y = -787.6, z = 31.24, h = 70.55, go = false},
            [2] = {ped = vector3(117.03, -778.97, 31.38)},
            [3] = {cam = {x = 5.2, y = 22.2, z = 1.0}, camrotation = vector3(0.0, 0.0, 130.44)}
        },
        [3] = {
            [1] = {x = -169.28, y = -808.56, z = 31.36, h = 158.96, go = false}, 
            [2] = {ped = vector3(-178.73, -815.97, 31.11)},
            [3] = {cam = {x = 25.2, y = 6.2, z = 1.0}, camrotation = vector3(0.0, 0.0, 140.44)}
        },  
        [4] = {
            [1] = {x = -270.72, y = -822.88, z = 31.76, h = 340.28, go = false}, 
            [2] = {ped = vector3(-260.84, -814.43, 31.77)},
            [3] = {cam = {x = 25.2, y = 6.2, z = 1.0}, camrotation = vector3(0.0, 0.0, 140.44)}
        },    
        [5] = {
            [1] = {x = -53.43, y = -783.97, z = 44.11, h = 236.95, go = false}, 
            [2] = {ped = vector3(-49.66, -795.33, 44.20)},
            [3] = {cam = {x = 5.2, y = 15.2, z = 1.0}, camrotation = vector3(0.0, 0.0, 140.44)}
        }, 
        [6] = {
            [1] = {x = 107.69, y = -606.14, z = 44.10, h = 341.03, go = false}, 
            [2] = {ped = vector3(114.6, -599.73, 44.12)},
            [3] = {cam = {x = 23.2, y = 9.2, z = 1.0}, camrotation = vector3(0.0, 0.0, 140.44)}
        },
        [7] = {
            [1] = {x = 259.68, y = -378.35, z = 44.59, h = 249.23, go = false}, 
            [2] = {ped = vector3(262.35, -383.36, 44.79)},
            [3] = {cam = {x = 8.2, y = 19.2, z = 1.0}, camrotation = vector3(0.0, 0.0, 140.44)}
        }
    },

    ['regional'] = {
        [1] = {
            [1] = {x = 1733.96, y = 3725.28, z = 34.0, h = 202.72, go = false},
            [2] = {cam = {x = 1.2, y = 12.2, z = 1.0}, camrotation = vector3(0.0, 0.0, 141)}
        },
        [2] = {
            [1] = {x = -2201.52, y = 4256.32, z = 47.76, h = 322.56, go = false},
            [2] = {cam = {x = 15.2, y = 2.2, z = 1.0}, camrotation = vector3(0.0, 0.0, 130.44)}
        },
        [3] = {
            [1] = {x = -214.68, y = 6194.6, z = 31.48, h = 315.16, go = false},
            [2] = {cam = {x = 14.2, y = 4.2, z = 1.0}, camrotation = vector3(0.0, 0.0, 131)}
        },
        [4] = {
            [1] = {x = 1692.84, y = 4943.76, z = 42.4, h = 124.8, go = false},
            [2] = {cam = {x = 13.2, y = 2.2, z = 1.0}, camrotation = vector3(0.0, 0.0, 140.44)}
        }
    }
 
}

LVL = {reqexp = 1000, reqexp2 = 2000, reqexp3 = 3000, reqexp4 = 4000, reqexp5 = 5000, reqexp6 = 6000, reqexp7 = 7000, reqexp8 = 8000, reqexp9 = 9000, reqexp10 = 10000}

CoordStop = {
    ['stop'] = {
        [1] = {
            [1] = {coords = {x = 457.6, y = -654.48, z = 28.84}}, 
            [2] = {InitialPeds = {
                [1] = {x = 451.28, y = -643.88, z = 28.48,h = 130.4, ped} 
            }},
            [3] = {heading = 34.0}
        },
        [2] = {
            [1] = {coords = {x = 458.28, y = -647.16, z = 29.24}}, 
            [2] = {InitialPeds = {
                [1] = {x = 452.56, y = -629.48, z = 28.52,h = 130.4, ped} 
            }},
            [3] = {heading = 34.0}
        },
        [3] = {
            [1] = {coords = {x = 459.16, y = -639.96, z = 29.48}}, 
            [2] = {InitialPeds = {
                [1] = {x = 453.72, y = -622.32, z = 28.52,h = 130.4, ped} 
            }},
            [3] = {heading = 34.0}
            
        },
        [4] = {
            [1] = {coords = {x = 459.4, y = -632.64, z = 29.48}}, 
            [2] = {InitialPeds = {
                [1] = {x = 452.28, y = -622.08, z = 28.56,h = 130.4, ped} 
            }},
            [3] = {heading = 34.0}     
        },
        [5] = {
            [1] = {coords = {x = 460.52, y = -625.36, z = 29.48}}, 
            [2] = {InitialPeds = {
                [1] = {x = 453.2, y = -615.0, z = 28.56,h = 130.4, ped} 
            }},
            [3] = {heading = 34.0}   
            
        },
        [6] = {
            [1] = {coords = {x = 460.96, y = -618.44, z = 29.48}}, 
            [2] = {InitialPeds = {
                [1] = {x = 454.08, y = -607.96, z = 28.56,h = 130.4, ped} 
            }},
            [3] = {heading = 34.0}         
        },
        [7] = {
            [1] = {coords = {x = 461.72, y = -611.24, z = 29.486}}, 
            [2] = {InitialPeds = {
                [1] = {x = 454.64, y = -600.92, z = 28.56,h = 130.4, ped} 
            }},
            [3] = {heading = 34.0} 
        },
        [8] = {
            [1] = {coords = {x = 462.64, y = -605.28, z = 29.48}}, 
            [2] = {InitialPeds = {
                [1] = {x = 454.64, y = -593.88, z = 28.48,h = 130.4, ped} 
            }},
            [3] = {heading = 34.0} 
        }
    }
}



Config.Translations = {

    ['language'] = "EN", --You can choose which language the notifications will be in. (EN, ES, FR)

    ['EN'] = {
        [1] = "Press ~b~E~w~ - To open",
        [2] = "Press [~b~E~w~] - To stop and wait for passengers",
        [3] = "Your bus is on its way, wait for it here.",
        [4] = "Go to the station stop to pick up the first passengers.",
        [5] = "Go to the next stop marked on your gps.",
        [6] = " passengers have left without paying, and you have lost ",
        [7] = "You have been charged " ..Configuration[3].Amount.. "$ for damage to the vehicle.",
        [8] = "$ extra for the distance.",
        [9] = "You already have a job to do.",
        [10] = "Go to the marked location to finish the job and save the bus",
        [11] = "Press [~b~E~w~] - To stop and wait for passengers.",
        [12] = "You need to have a bus driver's job for this.",
        [13] = "Press [~b~E~w~] - To finish the job.",
        [14] = "There is already a vehicle in the area, wait for it to leave so you can take out another one.",
    },

    ['ES'] = {
        [1] = "Pulse ~b~E~w~ - Para abrir",
        [2] = "Pulse [~b~E~w~] - Para parar y esperar a los pasajeros",
        [3] = "Su autobús está en camino, espérelo aquí",
        [4] = "Vaya a la parada de la estación para recoger a los primeros pasajeros",
        [5] = "Vaya a la siguiente parada marcada en su gps",
        [6] = "Los pasajeros se han ido sin pagar, y usted ha perdido",
        [7] = "Le han cobrado " ..Configuration[3].Amount.. "$ por daños en el vehículo",
        [8] = "$ extra por la distancia",
        [9] = "Ya tiene un trabajo que hacer",
        [10] = "Ve al lugar marcado para terminar el trabajo y guardar el autobús",
        [11] = "Pulsa [~b~E~w~] - Para parar y esperar a los pasajeros",
        [12] = "Necesitas tener un trabajo de conductor de autobús para esto",
        [13] = "Pulsa [~b~E~w~] - Para terminar el trabajo.",
        [14] = "Ya hay un vehículo en la zona, espera a que se vaya para poder sacar otro.",
    },

    ['FR'] = {        
        [1] = "Pressez ~b~E~w~ - Pour ouvrir",
        [2] = "Appuyez sur [~b~E~w~] - Pour arrêter et attendre les passagers",
        [3] = "Votre bus est en route, attendez-le ici.",
        [4] = "Va à l'arrêt de la gare pour prendre les premiers passagers.",
        [5] = "Va au prochain arrêt marqué sur ton GPS.",
        [6] = "Des passagers sont partis sans payer, et vous avez perdu",
        [7] = "Vous avez été facturé " ..Configuration[3].Amount.. "$ pour les dommages au véhicule.",
        [8] = "$ supplémentaires pour la distance.",
        [9] = "Vous avez déjà un travail à faire.",
        [10] = "Allez à l'endroit indiqué pour terminer le travail et sauver le bus",
        [11] = "Appuyez sur [~b~E~w~] - pour vous arrêter et attendre les passagers.",
        [12] = "Vous devez avoir un travail de chauffeur de bus pour cela.",
        [13] = "Appuyez sur [~b~E~w~] - pour terminer le travail.",
        [14] = "Il y a déjà un véhicule dans la zone, attendez qu'il parte avant d'en prendre un autre.",
    },
}

Here are the important functions open. You will be able to set your Key System, Fuel System, Blips...

For example if you don't use LegacyFuel and you use BitFuel, then replace exports["LegacyFuel"]:SetFuel(fuelvehicle, 100) with your BitFuel export.

-- Client notifications
function SendClientNotification(type, text, time)
    -- time = 10000
    -- if type == 'success' then
    --     exports["Venice-Notification"]:Notify(text, time, "check", options)
    -- elseif type == 'error' then
    --     exports["Venice-Notification"]:Notify(text, time, "error", options)
    -- elseif type == 'info' then
    --     exports["Venice-Notification"]:Notify(text, time, "info", options)
    -- end
    if Configuration[1].framework == 'esx' then

     ESX.ShowNotification(text)

    elseif Configuration[1].framework == 'qbcore' then

     QBCore.Functions.Notify(text)

    end
end

-- Server side notifications
function SendServerNotification(source, type, text, time)
    -- time = 10000
    -- if type == 'success' then
    --     TriggerClientEvent('codem-notification', source, text, time, 'check', options)
    -- elseif type == 'error' then
    --     TriggerClientEvent('codem-notification', source, text, time, 'error', options)
    -- elseif type == 'info' then
    --     TriggerClientEvent('codem-notification', source, text, time, 'info', options)
    -- end

    if Configuration[1].framework == 'esx' then

        TriggerClientEvent('esx:showNotification', source, text)

    elseif Configuration[1].framework == 'qbcore' then

        TriggerClientEvent('QBCore:Notify', source, text)

    end
end

if Configuration[5].NeedKeys == true then
    function keys()
        TriggerEvent('cd_garage:AddKeys', exports['cd_garage']:GetPlate(vehicle))
    end
end

if Configuration[5].UseFuel == true then
    function fuel()
        exports["LegacyFuel"]:SetFuel(vehicle, 100)
    end
end

if Configuration[5].UseDeleteVehicle == true then
    function delete(vehicle)
        exports["AdvancedParking"]:DeleteVehicle(vehicle)
    end
    function delete2(vehicle2)
        exports["AdvancedParking"]:DeleteVehicle(vehicle2)
    end
end

function hintToDisplay(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


function CreateHomeBlip()
    for k in pairs(NPCS[1].coordsjob) do
        blipHome = AddBlipForCoord(NPCS[1].coordsjob[k].x, NPCS[1].coordsjob[k].y, NPCS[1].coordsjob[k].z)
        SetBlipSprite(blipHome, 513)
        SetBlipColour(blipHome, 3)
        SetBlipScale(blipHome, 1.0)
        SetBlipAsShortRange(blipHome, true)
        BeginTextCommandSetBlipName("STRING")
        AddTextComponentString('~b~[BUS]~h~ Job')
        EndTextCommandSetBlipName(blipHome)
    end
end

function CreateWorkBlip(number, tipo)
	if not WorkBlip then
        if tipo == "local" then
            WorkBlip = AddBlipForCoord(Routes['local'][number][1].x, Routes['local'][number][1].y, Routes['local'][number][1].z)
        elseif tipo == "regional" then
            WorkBlip = AddBlipForCoord(Routes['regional'][number][1].x, Routes['regional'][number][1].y, Routes['regional'][number][1].z)
        end			
        SetBlipSprite (WorkBlip, 280)
        SetBlipDisplay(WorkBlip, 4)
        SetBlipScale  (WorkBlip, 1.0)
        SetBlipColour (WorkBlip, 0)
        SetBlipAsShortRange(WorkBlip, true)
        
        BeginTextCommandSetBlipName("STRING")
        AddTextComponentString('~b~[BUS]~h~ Stop')
        EndTextCommandSetBlipName(WorkBlip)
        SetBlipRoute(WorkBlip, true)
        SetBlipRouteColour(WorkBlip,29)
	end
end

function CreateEndBlip()
    blipend = AddBlipForCoord(Transport['local'].endjob.x,Transport['local'].endjob.y,Transport['local'].endjob.z)
			
    SetBlipSprite (blipend, 162)
    SetBlipDisplay(blipend, 4)
    SetBlipScale  (blipend, 1.0)
    SetBlipColour (blipend, 0)
    SetBlipAsShortRange(blipend, true)
    
    BeginTextCommandSetBlipName("STRING")
    AddTextComponentString('~b~[BUS]~h~ End')
    EndTextCommandSetBlipName(blipend)
    SetBlipRoute(blipend, true)
    SetBlipRouteColour(blipend,29)
end

function CreateStopBlip()
    blipdescargar = AddBlipForCoord(Point2.x, Point2.y, Point2.z)
    SetBlipSprite(blipdescargar, 162)
    SetBlipColour(blipdescargar, 0)
    SetBlipScale(blipdescargar, 1.0)
    SetBlipAsShortRange(blipdescargar, true)
    BeginTextCommandSetBlipName("STRING")
    AddTextComponentString('~b~[BUS]~h~ First Stop')
    EndTextCommandSetBlipName(blipdescargar)
    SetBlipRoute(blipdescargar, true)
    SetBlipRouteColour(blipdescargar, 29)
end

You will have to know the EXPORT of your system (e.g. from your fuel script) and add it, replacing the existing one.

📚
🚌
👍
KEYMASTER