Jump to content

Job Help


Killer...

Recommended Posts

Posted

Hello everyone. I need some help whit this script. Because i want to do when you say /ruta and you're in a vehicle to start the job, showing to you the checkpoints.

Server Part

local vehicles = get( "vehicles" )-- load the civilian vehicles that'll automatically trigger the delivery mission if being entered 
local max_earnings = tonumber( get( "earnings" ) ) or 125 
local delay = tonumber( get( "delay" ) ) or 25 
  
  
  
  
  
-- 
  
local p = { } 
  
local function advanceRoute( player, earnings ) 
    if p[ player ] and p[ player ].route and p[ player ].checkpoint then 
        local cp = p[ player ].checkpoint + 1 
        local c = p[ player ].route[ cp ] 
        local n = p[ player ].route[ cp + 1 ] 
        if c then 
            if p[ player ].route[ p[ player ].checkpoint ] then 
                if p[ player ].route[ p[ player ].checkpoint ].stop and earnings and earnings > 0 then 
                    exports.players:giveMoney( player, earnings ) 
                end 
                 
                if p[ player ].route[ p[ player ].checkpoint ].hint then 
                    triggerClientEvent( player, "gui:hint", player, "Ve a buscar provisiones a la fábrica abandonada.", p[ player ].route[ p[ player ].checkpoint ].hint ) 
                end 
            end 
             
            if not n then 
                -- last checkpoint 
                triggerClientEvent( player, getResourceName( resource ) .. ":set", player, c.x, c.y, c.z, c.stop and true ) 
            else 
                triggerClientEvent( player, getResourceName( resource ) .. ":set", player, c.x, c.y, c.z, c.stop and true, n.x, n.y, n.z, n.stop and true ) 
            end 
        else 
            if earnings then 
                exports.players:giveMoney( player, earnings * 3 ) 
            end 
            triggerClientEvent( player, getResourceName( resource ) .. ":set", player ) 
            p[ player ] = nil 
            return false 
        end 
        p[ player ].checkpoint = cp 
        return true 
    end 
end 
  
local function newRoute( player ) 
    p[ player ].vehicleOnResourceStart = nil 
    local route = math.random( #routes ) 
    p[ player ].route = routes[ route ] 
    p[ player ].checkpoint = 0 
     
    advanceRoute( player ) 
end 
  
  
  
  
addEventHandler( "onVehicleEnter", root, 
    function ruta( player, seat ) 
        if seat == 0 and isPedInVehicle ( player ) then 
            if not p[ player ] then 
                p[ player ] = { } 
            end 
             
            if not p[ player ].route then 
                newRoute( player ) 
            else 
                triggerClientEvent( player, getResourceName( resource ) .. ":show", player ) 
            end 
        end 
    end 
) 
addCommandHandler ("ruta", ruta) 
-- 
  
addEventHandler( "onResourceStart", resourceRoot, 
    function( ) 
        if not routes or routes == 0 then 
            cancelEvent( ) 
            return 
        end 
         
        -- 
         
        setElementData( resourceRoot, "delay", delay ) 
         
        -- 
         
        for key, value in ipairs( getElementsByType( "player" ) ) do 
            local vehicle = getPedOccupiedVehicle( value ) 
            if vehicle and getPedOccupiedVehicleSeat( value ) == 0 then 
                p[ value ] = { vehicleOnResourceStart = vehicle } 
            end 
        end 
         
        setTimer( 
            function( ) 
                for key, value in pairs( p ) do 
                    p[ key ].vehicleOnResourceStart = nil 
                end 
            end, 10000, 1 
        ) 
    end 
) 
  
addEvent( getResourceName( resource ) .. ":ready", true ) 
addEventHandler( getResourceName( resource ) .. ":ready", root, 
    function( ) 
        if source == client then 
            if p[ source ] and getPedOccupiedVehicle( source ) == p[ source ].vehicleOnResourceStart and getPedOccupiedVehicleSeat( source ) == 0 then 
                newRoute( source ) 
            end 
        end 
    end 
) 
  
-- 
  
addEvent( getResourceName( resource ) .. ":complete", true ) 
addEventHandler( getResourceName( resource ) .. ":complete", root, 
    function( ) 
        if source == client then 
            local vehicle = getPedOccupiedVehicle( source ) 
            if p[ source ] and p[ source ].route and getPedOccupiedVehicleSeat( source ) == 0 then 
                -- distance check 
                if not p[ source ].route[ p[ source ].checkpoint ].stop or getDistanceBetweenPoints2D( p[ source ].route[ p[ source ].checkpoint ].x, p[ source ].route[ p[ source ].checkpoint ].y, getElementPosition( vehicle ) ) < 5 then 
                    local health = math.min( 1000, getElementHealth( vehicle ) ) 
                    if health > 350 then 
                         
                        -- get a checkpoint 
                        advanceRoute( source, earnings ) 
                         
                    end 
                end 
            end 
        end 
    end 
) 
  
addEventHandler( "onCharacterLogout", root, 
    function( ) 
        if p[ source ] and p[ source ].route then 
            triggerClientEvent( source, getResourceName( resource ) .. ":set", source ) 
        end 
        p[ source ] = nil 
    end 
) 
  
addEventHandler( "onPlayerQuit", root, 
    function( ) 
        p[ source ] = nil 
    end 
) 
  
-- 
  
  
-- 
  
function introduce( player ) 
    triggerClientEvent( player, getResourceName( resource ) .. ":introduce", player ) 
end 
  

Client Part

local localPlayer = getLocalPlayer( ) 
local position = nil 
local marker = nil 
local blip = nil 
local blip2 = nil 
local wait = false 
local screenX, screenY = guiGetScreenSize( ) 
  
function drawWaitingText( ) 
    -- check if we still need to wait 
    local text = "Espera..." 
    local vehicle = getPedOccupiedVehicle( localPlayer ) 
    if vehicle then 
        if wait and wait ~= 0 then 
            local diff = wait - getTickCount( ) 
            if diff >= 0 then 
                text = ( "Espera %.1f segundos para subir los paquetes al vehiculo!" ):format( diff / 1000 ) 
            else 
                triggerServerEvent( getResourceName( resource ) .. ":complete", localPlayer ) 
                wait = 0 
            end 
         
        -- draw the text 
        dxDrawText( text, 4, 4, screenX, screenY, tocolor( 0, 0, 0, 255 ), 1, "pricedown", "center", "center" ) 
        dxDrawText( text, 0, 0, screenX, screenY, tocolor( 255, 255, 255, 255 ), 1, "pricedown", "center", "center" ) 
    end 
end 
  
-- 
  
local function hide( ) 
    if isElement( blip ) then 
        destroyElement( blip ) 
    end 
    blip = nil 
     
    if isElement( blip2 ) then 
        destroyElement( blip2 ) 
    end 
    blip2 = nil 
     
    if isElement( marker ) then 
        destroyElement( marker ) 
    end 
    marker = nil 
     
    if wait then 
        wait = false 
        removeEventHandler( "onClientRender", root, drawWaitingText ) 
    end 
end 
  
local function show( ) 
    hide( ) 
     
    if position then 
        -- in lack of a more detailed close-location (aka we use the entrance), use large markers 
        marker = createMarker( position.x, position.y, position.z, "checkpoint", 3, position.stop and 0 or 255, 255, 0, 63 ) 
        if marker then 
            blip = createBlipAttachedTo( marker, 0, 2, position.stop and 0 or 255, 255, 0, 255 ) 
        end 
         
        if position.nx and position.ny and position.nz then 
            blip2 = createBlip( position.nx, position.ny, position.nz, 0, 1, position.nstop and 0 or 255, 255, 0, 255 ) 
        end 
    end 
end 
  
addEvent( getResourceName( resource ) .. ":show", true ) 
addEventHandler( getResourceName( resource ) .. ":show", localPlayer, show ) 
  
addEvent( getResourceName( resource ) .. ":set", true ) 
addEventHandler( getResourceName( resource ) .. ":set", localPlayer, 
    function( x, y, z, stop, nx, ny, nz, nstop ) 
        if x and y and z then 
            position = { x = x, y = y, z = z, stop = stop, nx = nx, ny = ny, nz = nz, nstop = nstop } 
            show( ) 
        else 
            position = nil 
            hide( ) 
        end 
    end 
) 
  
addEventHandler( "onClientPlayerVehicleExit", localPlayer, hide ) 
  
addEventHandler( "onClientResourceStart", resourceRoot, 
    function( ) 
        triggerServerEvent( getResourceName( resource ) .. ":ready", localPlayer ) 
    end 
) 
  
addEventHandler( "onClientMarkerHit", resourceRoot, 
    function( element, matching ) 
        if matching and element == localPlayer then 
            if position.stop then 
                if not wait then 
                    wait = getTickCount( ) + getElementData( resourceRoot, "delay" ) * 1000 
                    addEventHandler( "onClientRender", root, drawWaitingText ) 
                end 
            else 
                triggerServerEvent( getResourceName( resource ) .. ":complete", localPlayer ) 
            end 
        end 
    end 
) 
  
addEventHandler( "onClientMarkerLeave", resourceRoot, 
    function( element, matching ) 
        if matching and element == localPlayer then 
            wait = false 
            removeEventHandler( "onClientRender", root, drawWaitingText ) 
            exports.gui:hint( "Cargador", "Para recibir paga, ve a por paquetes en la vieja fábrica. Se recomienda no ir solo!", 3 ) 
        end 
    end 
) 

Please help me, i do this because i'm doing an Zombie Roleplay, trying to combine MTA Paradise whit a ZombieGamemode. And for now it's going good. If you want to participate in this Spanish project, contact me.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...