Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local GotTrain = false
- local models = {
- "freight", "freightcar", "freightgrain", "freightcont1", "freightcont2",
- "freighttrailer", "tankercar",
- "metrotrain", "s_m_m_lsmetro_01" ,
- "6f01", "6f02", "6f03", "6f04", "6f05",
- "df4b1", "df4b2",
- -- "tgv01", "tgv02", "tgv03", "tgv04", "tgv05", "tgv06", "tgv07", "tgv08", "tgv09",
- "go_tankercar"
- }
- local TRAIN_SPAWNS = {
- -- {name = "PTPS Tanker Train", perms = {""}, location = {x = 2617.8984375, y = 1707.5870361328, z = 27.597440719604}, spawner = {train = 3, x = 2611.0749511719, y = 1766.9490966797, z = 26.37712097168} },
- {name = "LS Cargo Train 1", perms = {""}, location = {x = 677.14953613281, y = -895.89562988281, z = 23.462062835693}, spawner = {train = 1, x = 666.98468017578, y = -894.25457763672, z = 22.377431869507} },
- {name = "LS Cargo Train 2", perms = {""}, location = {x = 677.22564697266, y = -886.04205322266, z = 23.462043762207}, spawner = {train = 10, x = 672.77630615234, y = -886.46014404297, z = 22.561025619507} },
- {name = "GS Grain Train", perms = {""}, location = {x = 2873.7795410156, y = 4868.2573242188, z = 62.395622253418}, spawner = {train = 4, x = 2867.0922851563, y = 4893.3720703125, z = 63.378673553467} },
- {name = "MJ Cargo Train", perms = {""}, location = {x = -341.57598876953, y = 3744.947265625, z = 69.970855712891}, spawner = {train = 17, x = -337.26611328125, y = 3756.5151367188, z = 70.42813873291} },
- {name = "TM Passenger Long Boi (Level 10)", perms = {""}, location = {x = 2534.5405273438, y = -183.10217285156, z = 87.172782897949}, spawner = {train = 42, x = 2534.7648925781, y = -184.93153381348, z = 93.409767150879} },
- {name = "LS Passenger Long Boi (Level 10)", perms = {""}, location = {x = 665.88830566406, y = -703.22497558594, z = 37.343109130859}, spawner = {train = 46, x = 926.28533935547, y = -494.29217529297, z = 30.667287826538} },
- {name = "LS Passenger Train Long (Level 10)", perms = {""}, location = {x = 793.67242431641, y = -1908.7456054688, z = 21.784048080444}, spawner = {train = 43, x = 803.51043701172, y = -1908.5551757813, z = 20.564588546753} },
- {name = "LS Passenger Train (Level 10)", perms = {""}, location = {x = 211.31231689453, y = -2424.5163574219, z = 8.5115089416504}, spawner = {train = 45, x = 311.2541809082, y = -2612.9780273438, z = 8.6949901580811} },
- {name = "PB Passenger Train (Level 10)", perms = {""}, location = {x = -323.34335327148, y = 5962.9868164063, z = 41.883724212646}, spawner = {train = 45, x = -361.04824829102, y = 5911.4516601563, z = 45.679042816162} },
- -- {name = "PB TGV (Level 20)", perms = {""}, location = {x = -315.04263305664, y = 5972.6552734375, z = 40.778701782227}, spawner = {train = 27, x = -361.04824829102, y = 5911.4516601563, z = 45.679042816162} },
- {name = "GS Passenger Train (Level 10)", perms = {""}, location = {x = 2999.7514648438, y = 4097.2358398438, z = 57.107582092285}, spawner = {train = 43, x = 3006.3293457031, y = 4097.3481445313, z = 57.612167358398} },
- -- {name = "TEST 25", perms = {""}, location = {x = 2996.7514648438, y = 4087.2358398438, z = 57.107582092285}, spawner = {train = 25, x = 3006.3293457031, y = 4097.3481445313, z = 57.612167358398} },
- -- {name = "TEST 26", perms = {""}, location = {x = 2993.7514648438, y = 4087.2358398438, z = 57.107582092285}, spawner = {train = 26, x = 3006.3293457031, y = 4097.3481445313, z = 57.612167358398} },
- {name = "Globe Oil Tanker Train", perms = {""}, location = {x = 2617.8984375, y = 1707.5870361328, z = 27.597440719604}, spawner = {train = 26, x = 2611.0749511719, y = 1766.9490966797, z = 26.37712097168} },
- -- {name = "TGV 27", perms = {""}, location = {x = 1287.8082275391, y = 6417.193359375, z = 26.299634933472}, spawner = {train = 27, x = 1271.0749511719, y = 6429.5927734375, z = 31.852146148682} },
- -- {name = "TGV 28 (Level 20)", perms = {""}, location = {x = 1295.1345214844, y = 6415.7954101563, z = 26.497575759888}, spawner = {train = 28, x = 1271.0749511719, y = 6429.5927734375, z = 31.852146148682} },
- -- {name = "TGV 29", perms = {""}, location = {x = 1290.7263183594, y = 6410.3115234375, z = 26.601089477539}, spawner = {train = 29, x = 1271.0749511719, y = 6429.5927734375, z = 31.852146148682} },
- {name = "LS Metro Tram", perms = {""}, location = {x = 563.8271484375, y = -1984.6627197266, z = 17.775186538696}, spawner = {train = 24, x = 562.055969, y = -1978.789307, z = 16.775246} },
- {name = "LS Metro Tram", perms = {""}, location = {x = -1105.1005859375, y = -2744.1628417969, z = -7.4101328849792}, spawner = {train = 24, x = -1099.512207, y = -2746.507568, z = -9.923965} },
- {name = "LS Metro Passenger Train (Level 10)", perms = {""}, location = {x = -401.71618652344, y = -681.5390625, z = 11.616627693176}, spawner = {train = 45, x = -412.29736328125, y = -669.05096435547, z = 10.895616531372} },
- }
- local function LoadModel(model)
- tempmodel = GetHashKey(model)
- RequestModel(tempmodel)
- local _timeout = 0
- local _boundary = 2000
- while not HasModelLoaded(tempmodel) do
- Citizen.Wait(0)
- _timeout = _timeout + 1
- if _timeout >= _boundary then
- print("Timed out loading model " .. model)
- break
- end
- end
- end
- Citizen.CreateThread(function()
- function LoadTrainModels()
- DeleteAllTrains()
- for k, v in pairs(models) do
- LoadModel(v)
- end
- Citizen.Trace("Done Loading Train Models")
- end
- LoadTrainModels()
- -- ------------------------------------------ --
- Citizen.Trace("Loading Train Keys")
- local localPed = GetPlayerPed(PlayerId())
- local TrainVars = {}
- local TrainList = {}
- TrainVars.inTrain = false
- TrainVars.isPassenger = false
- TrainVars.TrainVeh = 0
- TrainVars.Speed = 0
- TrainVars.EnterExitDelay = 0
- TrainVars.EnterExitDelayMax = 3000
- TrainVars.TrainSpeeds = {}
- TrainVars.TrainSpeeds.FTrain = {}
- TrainVars.TrainSpeeds.FTrain.MaxSpeed = 40
- TrainVars.TrainSpeeds.FTrain.Accel = 0.03
- TrainVars.TrainSpeeds.JTrain = {}
- TrainVars.TrainSpeeds.JTrain.MaxSpeed = 60
- TrainVars.TrainSpeeds.JTrain.Accel = 0.06
- TrainVars.TrainSpeeds.DF4BTrain = {}
- TrainVars.TrainSpeeds.DF4BTrain.MaxSpeed = 40
- TrainVars.TrainSpeeds.DF4BTrain.Accel = 0.04
- TrainVars.TrainSpeeds.Trolley = {}
- TrainVars.TrainSpeeds.Trolley.MaxSpeed = 25
- TrainVars.TrainSpeeds.Trolley.Accel = 0.1
- function findNearestTrain()
- for _, train in ipairs(TrainList) do
- if(not IsEntityDead(train)) then
- local pedPosition = GetEntityCoords(LocalPed())
- local trainPosition = GetEntityCoords(train)
- local thedist = GetDistanceBetweenCoords(pedPosition.x, pedPosition.y, pedPosition.z, trainPosition.x, trainPosition.y, trainPosition.z, false)
- Citizen.Trace("Checking ".. GetEntityModel(train) .." at: " .. tostring(trainPosition))
- Citizen.Trace("Checking Player at: " .. tostring(pedPosition))
- Citizen.Trace("Dist: " .. thedist)
- if (thedist <= 40) then
- return train
- end
- end
- end
- return 0
- end
- function getTrainSpeeds()
- local mod = GetEntityModel(TrainVars.TrainVeh)
- local ret = {}
- ret.MaxSpeed = 10
- ret.Accel = 1
- -- print("trainmod: " .. mod)
- -- print("tgv01 hash: " .. GetHashKey("tgv01"))
- -- Is there a better way to do this? (GetEntityModel(TrainVars.TrainVeh))
- if (mod == 1030400667) then
- ret.MaxSpeed = TrainVars.TrainSpeeds.FTrain.MaxSpeed -- Heavy, but fast.
- ret.Accel = TrainVars.TrainSpeeds.FTrain.Accel
- elseif (mod == 868868440) then
- ret.MaxSpeed = TrainVars.TrainSpeeds.Trolley.MaxSpeed -- Light weight, carrys people around not to fast
- ret.Accel = TrainVars.TrainSpeeds.Trolley.Accel
- elseif (mod == 1377039676) then
- ret.MaxSpeed = TrainVars.TrainSpeeds.JTrain.MaxSpeed -- Light weight, carrys people around not to fast
- ret.Accel = TrainVars.TrainSpeeds.JTrain.Accel
- elseif (mod == GetHashKey("df4b1")) then -- df4b1
- ret.MaxSpeed = TrainVars.TrainSpeeds.DF4BTrain.MaxSpeed -- Light weight, carrys people around not to fast
- ret.Accel = TrainVars.TrainSpeeds.DF4BTrain.Accel
- elseif (mod == GetHashKey("df4b2")) then -- df4b2
- ret.MaxSpeed = TrainVars.TrainSpeeds.DF4BTrain.MaxSpeed -- Light weight, carrys people around not to fast
- ret.Accel = TrainVars.TrainSpeeds.DF4BTrain.Accel
- elseif (mod == 2158407904) then -- go_tankercar
- ret.MaxSpeed = 80
- ret.Accel = 2.0
- elseif (mod == GetHashKey("tgv01")) then -- tgv01
- ret.MaxSpeed = 70 -- Light weight, carrys people around not to fast
- ret.Accel = 0.12
- else
- ret.MaxSpeed = 10
- ret.Accel = 1.0
- end
- return ret
- end
- RegisterNetEvent("conductor:setSpeed")
- function SetSpeed(speed)
- TrainVars.Speed = 0
- end
- AddEventHandler("conductor:setSpeed", SetSpeed)
- RegisterNetEvent("conductor:setLimit")
- function SetLimit(speed)
- TrainVars.TrainSpeeds.FTrain.MaxSpeed = 0
- end
- AddEventHandler("conductor:setLimit", SetSpeed)
- RegisterNetEvent("UpdateTrainList")
- function UpdateTrainList(Trains, Del)
- if (Del == true) then
- for _, k in ipairs(TrainList) do
- DeleteMissionTrain(k)
- end
- TrainVars.inTrain = false
- TrainVars.TrainVeh = 0
- TrainVars.Speed = 0
- TrainVars.EnterExitDelay = 0
- Citizen.Trace("Got Delete Message, have not removed array yet.")
- return
- end
- Citizen.Trace("Added new Trains from server.")
- TrainList = Trains
- end
- AddEventHandler("UpdateTrainList", UpdateTrainList)
- function createNewTrain(type, x, y, z)
- local train = CreateMissionTrain(type, x, y, z, true)
- SetTrainSpeed(train, 0)
- SetTrainCruiseSpeed(train, 0)
- Citizen.Trace("Created Train, sending to server.")
- TriggerServerEvent("AddToTrainList", train)
- return train
- end
- function DeleteTrains()
- TriggerServerEvent("DeleteTrains")
- end
- function CoolDown()
- SetTimeout(300000, function() GotTrain = false end)
- end
- function LocalPed()
- return GetPlayerPed(-1)
- end
- function DrawText3D(text, x, y, z, s)
- exports['omni_common']:DrawText3D(text, x, y, z, s)
- end
- while true do
- Wait(1)
- if (TrainVars.EnterExitDelay == 0) then
- TrainVars.EnterExitDelay = GetGameTimer()
- end
- if (TrainVars.inTrain and not TrainVars.isPassenger) then
- SetTrainSpeed(TrainVars.TrainVeh, TrainVars.Speed)
- end
- -- Speed Up/Forwards (W)
- if (IsControlPressed(0, 71) and TrainVars.inTrain and TrainVars.Speed < getTrainSpeeds().MaxSpeed and not TrainVars.isPassenger) then
- TrainVars.Speed = TrainVars.Speed + getTrainSpeeds().Accel
- SetTrainSpeed(TrainVars.TrainVeh, TrainVars.Speed)
- end
- -- Slow down/Reverse (S)
- if (IsControlPressed(0, 72) and TrainVars.inTrain and TrainVars.Speed > - (getTrainSpeeds().MaxSpeed / 4) and not TrainVars.isPassenger) then
- TrainVars.Speed = TrainVars.Speed - (getTrainSpeeds().Accel * 1.5)
- SetTrainSpeed(TrainVars.TrainVeh, TrainVars.Speed)
- end
- -- HORN
- if (IsControlJustPressed(0, 86) and TrainVars.inTrain and not TrainVars.isPassenger) then
- end
- if (IsControlJustReleased(0, 86) and TrainVars.inTrain and not TrainVars.isPassenger) then
- end
- -- Slow break (Spacebar)
- local speed = GetEntitySpeed(GetVehiclePedIsIn(GetPlayerPed(-1), true)) * 2.236936
- if speed <= 25.0 and (
- IsVehicleModel(GetVehiclePedIsIn(GetPlayerPed(-1), true), GetHashKey('freight')) or
- IsVehicleModel(GetVehiclePedIsIn(GetPlayerPed(-1), true), GetHashKey('6f01')) or
- IsVehicleModel(GetVehiclePedIsIn(GetPlayerPed(-1), true), GetHashKey('tgv01')) or
- IsVehicleModel(GetVehiclePedIsIn(GetPlayerPed(-1), true), GetHashKey('df4b1')) or
- IsVehicleModel(GetVehiclePedIsIn(GetPlayerPed(-1), true), GetHashKey('df4b2'))
- ) then
- if (IsControlJustPressed(0, 76) and TrainVars.inTrain and TrainVars.Speed ~= 0 and not TrainVars.isPassenger) then
- --Citizen.Trace("break:" .. GetEntityCoords(TrainVars.TrainVeh))
- TrainVars.Speed = 0
- SetTrainSpeed(TrainVars.TrainVeh, TrainVars.Speed)
- end
- end
- local speed = GetEntitySpeed(GetVehiclePedIsIn(GetPlayerPed(-1), true)) * 2.236936
- if speed <= 5.0 and (
- IsVehicleModel(GetVehiclePedIsIn(GetPlayerPed(-1), true), GetHashKey('metrotrain')) or
- IsVehicleModel(GetVehiclePedIsIn(GetPlayerPed(-1), true), GetHashKey('6f01')) or
- IsVehicleModel(GetVehiclePedIsIn(GetPlayerPed(-1), true), GetHashKey('tgv01'))
- ) then
- if (IsControlPressed(0, 76) and TrainVars.inTrain and TrainVars.Speed ~= 0 and not TrainVars.isPassenger) then
- --Citizen.Trace("break:" .. GetEntityCoords(TrainVars.TrainVeh))
- TrainVars.Speed = 0
- SetTrainSpeed(TrainVars.TrainVeh, TrainVars.Speed)
- end
- end
- --[[
- if (IsControlPressed(0,22) and TrainVars.inTrain and TrainVars.Speed ~= 0)then
- --Citizen.Trace("break:" .. GetEntityCoords(TrainVars.TrainVeh))
- TrainVars.Speed = 30
- SetTrainSpeed(TrainVars.TrainVeh, TrainVars.Speed)
- end]]
- --AntiBreak for blah
- -- Enter/Exit (F)X
- if(IsControlPressed(0, 75) and(GetGameTimer() - TrainVars.EnterExitDelay) > TrainVars.EnterExitDelayMax) then
- TrainVars.EnterExitDelay = 0
- if(TrainVars.inTrain) then
- Citizen.Trace("exit")
- if (TrainVars.TrainVeh ~= 0) then
- local pedPosition = GetEntityCoords(LocalPed())
- SetEntityCoords(LocalPed(), pedPosition.x, pedPosition.y - 0.5, pedPosition.z + 2.3, false, false, false, false)
- end
- TrainVars.inTrain = false
- TrainVars.isPassenger = false
- TrainVars.TrainVeh = 0
- else
- Citizen.Trace("enter")
- local _train = findNearestTrain()
- if (TrainVars.TrainVeh == 0) then
- if not IsVehicleSeatFree(_train, -1) then
- if not IsVehicleSeatFree(_train, 0) then
- -- Train is full
- print("Train full")
- else
- print("Seat 2 free")
- SetPedIntoVehicle(LocalPed(), _train, 0)
- TrainVars.inTrain = true
- TrainVars.isPassenger = true
- TrainVars.TrainVeh = _train
- end
- else
- print("Seat 1 free")
- SetPedIntoVehicle(LocalPed(), _train, -1)
- TrainVars.inTrain = true
- TrainVars.isPassenger = false
- TrainVars.TrainVeh = _train
- end
- end
- end
- end
- local playerPed = LocalPed()
- local playerPos = GetEntityCoords(playerPed)
- for train_no, train_spawner in next, TRAIN_SPAWNS do
- if not train_spawner.cooldown then train_spawner.cooldown = 0 end
- if train_spawner.cooldown > 0 then train_spawner.cooldown = train_spawner.cooldown - 1 end
- local dist = Vdist(playerPos.x, playerPos.y, playerPos.z, train_spawner.location.x, train_spawner.location.y, train_spawner.location.z)
- if not IsPedInAnyVehicle(playerPed, false) then
- if dist < 150.0 then
- DrawMarker(0, train_spawner.location.x, train_spawner.location.y, train_spawner.location.z, 0, 0, 0, 0, 0, 0, 1.0, 1.0, 1.0, 139, 69, 19, 255, true, false)
- end
- if dist < 3.0 then
- if train_spawner.cooldown <= 0 then
- DrawText3D("Press ~y~E ~w~to spawn a~n~~y~" .. train_spawner.name, train_spawner.location.x, train_spawner.location.y, train_spawner.location.z + 1.0)
- if IsControlJustPressed(0, 38) then
- train_spawner.cooldown = 2000
- TrainVars.EnterExitDelay = 0
- local _newTrain = createNewTrain(train_spawner.spawner.train, train_spawner.spawner.x, train_spawner.spawner.y, train_spawner.spawner.z)
- Wait(60)
- --TrainVars.Speed = 0
- GotTrain = true
- TrainVars.TrainVeh = _newTrain
- TrainVars.inTrain = true
- TaskWarpPedIntoVehicle(GetPlayerPed(-1), _newTrain, - 1)
- CoolDown()
- end
- else
- DrawText3D("~r~Please wait before spawning this again~n~~y~" .. train_spawner.name, train_spawner.location.x, train_spawner.location.y, train_spawner.location.z + 1.0)
- end
- end
- end
- end
- end
- function drawTxt(text, font, centre, x, y, scale, r, g, b, a)
- SetTextFont(font)
- SetTextProportional(0)
- SetTextScale(scale, scale)
- SetTextColour(r, g, b, a)
- SetTextDropShadow(0, 0, 0, 0, 255)
- SetTextEdge(1, 0, 0, 0, 255)
- SetTextDropShadow()
- SetTextOutline()
- SetTextCentre(centre)
- SetTextEntry("STRING")
- AddTextComponentString(text)
- DrawText(x, y)
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement