forked from Simnation/Main
ed
This commit is contained in:
parent
a45e43f22a
commit
123ea8a800
79 changed files with 3338 additions and 157 deletions
|
@ -0,0 +1,133 @@
|
|||
-- train_interaction_points.lua
|
||||
|
||||
-- Configuration for interaction points
|
||||
local interactionPoints = {
|
||||
{
|
||||
coords = vector3(126.0, -1037.0, 29.3), -- City center location (change as needed)
|
||||
scenario = "Welcome",
|
||||
text = "Press ~INPUT_CONTEXT~ to take train to City Center",
|
||||
blip = {
|
||||
sprite = 513, -- Train sprite
|
||||
color = 2,
|
||||
name = "Train to City Center"
|
||||
}
|
||||
},
|
||||
{
|
||||
coords = vector3(1851.5, 2585.7, 45.67), -- Near prison (change as needed)
|
||||
scenario = "Jail",
|
||||
text = "Press ~INPUT_CONTEXT~ to take train to Prison",
|
||||
blip = {
|
||||
sprite = 513, -- Train sprite
|
||||
color = 1,
|
||||
name = "Train to Prison"
|
||||
}
|
||||
},
|
||||
{
|
||||
coords = vector3(-459.9, 5368.5, 81.3), -- Paleto area (change as needed)
|
||||
scenario = "Paleto",
|
||||
text = "Press ~INPUT_CONTEXT~ to take train to Paleto Bay",
|
||||
blip = {
|
||||
sprite = 513, -- Train sprite
|
||||
color = 5,
|
||||
name = "Train to Paleto Bay"
|
||||
}
|
||||
}
|
||||
-- Add more interaction points as needed
|
||||
}
|
||||
|
||||
-- Variables
|
||||
local isInMarker = false
|
||||
local currentPoint = nil
|
||||
local interactionRadius = 2.0
|
||||
|
||||
-- Function to draw 3D text
|
||||
function Draw3DText(x, y, z, text)
|
||||
local onScreen, _x, _y = World3dToScreen2d(x, y, z)
|
||||
local px, py, pz = table.unpack(GetGameplayCamCoords())
|
||||
|
||||
SetTextScale(0.35, 0.35)
|
||||
SetTextFont(4)
|
||||
SetTextProportional(1)
|
||||
SetTextColour(255, 255, 255, 215)
|
||||
SetTextEntry("STRING")
|
||||
SetTextCentre(1)
|
||||
AddTextComponentString(text)
|
||||
DrawText(_x, _y)
|
||||
local factor = (string.len(text)) / 370
|
||||
DrawRect(_x, _y + 0.0125, 0.015 + factor, 0.03, 41, 11, 41, 68)
|
||||
end
|
||||
|
||||
-- Main thread for checking player position
|
||||
Citizen.CreateThread(function()
|
||||
-- Create blips for all interaction points
|
||||
for _, point in ipairs(interactionPoints) do
|
||||
if point.blip then
|
||||
local blip = AddBlipForCoord(point.coords)
|
||||
SetBlipSprite(blip, point.blip.sprite)
|
||||
SetBlipDisplay(blip, 4)
|
||||
SetBlipScale(blip, 0.8)
|
||||
SetBlipColour(blip, point.blip.color)
|
||||
SetBlipAsShortRange(blip, true)
|
||||
BeginTextCommandSetBlipName("STRING")
|
||||
AddTextComponentString(point.blip.name)
|
||||
EndTextCommandSetBlipName(blip)
|
||||
end
|
||||
end
|
||||
|
||||
while true do
|
||||
Citizen.Wait(0)
|
||||
|
||||
local playerPed = PlayerPedId()
|
||||
local coords = GetEntityCoords(playerPed)
|
||||
|
||||
isInMarker = false
|
||||
currentPoint = nil
|
||||
|
||||
-- Check if player is near any interaction point
|
||||
for _, point in ipairs(interactionPoints) do
|
||||
local dist = #(coords - point.coords)
|
||||
|
||||
if dist < interactionRadius then
|
||||
isInMarker = true
|
||||
currentPoint = point
|
||||
Draw3DText(point.coords.x, point.coords.y, point.coords.z + 1.0, point.text)
|
||||
|
||||
-- Check for E press
|
||||
if IsControlJustReleased(0, 38) then -- 38 is E
|
||||
-- Start the specific scenario for this point
|
||||
TriggerEvent('train:startscenario', point.scenario)
|
||||
|
||||
-- Add a small cooldown to prevent spam
|
||||
Citizen.Wait(1000)
|
||||
end
|
||||
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- Optimization: If not near any point, wait longer
|
||||
if not isInMarker then
|
||||
Citizen.Wait(500)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- Optional: Add a notification when player enters/exits an interaction zone
|
||||
Citizen.CreateThread(function()
|
||||
local wasInMarker = false
|
||||
|
||||
while true do
|
||||
Citizen.Wait(500)
|
||||
|
||||
if isInMarker and not wasInMarker then
|
||||
-- Player just entered an interaction zone
|
||||
-- You can add a notification here if desired
|
||||
-- TriggerEvent('notification', 'You can take a train from here')
|
||||
|
||||
wasInMarker = true
|
||||
elseif not isInMarker and wasInMarker then
|
||||
-- Player just left an interaction zone
|
||||
wasInMarker = false
|
||||
end
|
||||
end
|
||||
end)
|
Loading…
Add table
Add a link
Reference in a new issue