Jump to content

[AJUDA] Bus Driver


Recommended Posts

Está aqui o link, que eu pedi ajuda, mas parece que ninguém quer ajudar, por isso venho aqui pedir a vossa ! Também quero pedir que alguém me esclareça qual a diferença entre resourceRoot, root,getElementRoot() e essas coisas, pois estou muito confuso, e penso que o problema neste script, é por causa disso.

EDIT : Já tentei passar o script todo para client side.

https://forum.mtasa.com/viewtopic.php?f=91&t=90395

Ficaria muito agradecido com uma resposta esclarecedora :)

Emanuel Camacho

Link to comment

Os únicos problemas que vi foi que você esqueceu de checar se o jogador que saiu do veiculo era igual ao jogador local (linha 32 a 39, client side) e você ter usado tostring nos primeiros parâmetros de createMarker (que devem ser números, não strings).

Se você quiser todo o script no lado do client:

-----------------------------------------------<< 
-- MTA : Multi Theft Auto : Emanuel's Server 
-- Date: 21 July 2015 
-- Resource: [MTA][Jobs]/[MTA]BusDriver/server.lua 
-- Type: Client Side 
-- Author: Emanuel Camacho 
-----------------------------------------------<< 
  
local busses = { [431] = true, [437] = true } 
local marker, blip 
local pontoAtual = false 
  
local markers = { 
    [1] = { -1798.63940, 83.94303, 15.10938 }, 
    [2] = { -1800.16284, 102.19742, 15.10938 }, 
    [3] = { -1800.60095, 126.91389, 15.10938 } 
} 
  
function getNewBusLocation( ID ) 
    marker = createMarker( markers[ID][1], markers[ID][2], ( markers[ID][3] -1 ), "cylinder", 3.5, 255, 255, 0, 170) 
    blip = createBlipAttachedTo( marker, 0, 2, 255, 255, 0, 255 ) 
end 
  
function onEnter ( player ) 
    if player == localPlayer then 
        if busses[ getElementModel( source ) ] then 
            if getPlayerTeam ( player ) then 
                if getTeamName( getPlayerTeam ( player ) ) == "Bus Driver" then 
                    getNewBusLocation ( 1 ) 
                    pontoAtual = 1 
                    --[[ 
                        aqui optei por usar uma variavel 
                        para 'salvar' o checkpoint atual do jogador 
                        se você precisar sincronizar isto em algum lugar 
                        deve usar element data: 
                         
                        setElementData( player, "busData", 1 ) 
                    --]] 
                end 
            end 
        end 
    end 
end 
addEventHandler ( "onClientVehicleEnter", root, onEnter ) 
  
function onLeave(player) 
    if player == localPlayer then 
        if marker and isElement(marker) then destroyElement ( marker ) end 
        if blip and isElement(blip) then destroyElement ( blip ) end 
         
        blip = nil 
        marker = nil 
         
        pontoAtual = false 
    end 
end 
addEventHandler ( "onClientVehicleExit", root, onLeave ) 
  
function onHit( hitPlayer ) 
    if hitPlayer == localPlayer then 
        if pontoAtual ~= false then 
            if marker and isElement ( marker ) and marker == source then 
                if isElement(blip) then destroyElement(blip) end 
                if isElement(marker) then destroyElement(marker) 
                getNewBusLocation ( pontoAtual +1 > #markers and 1 or pontoAtual +1 ) 
                pontoAtual = pontoAtual +1 > #markers and 1 or pontoAtual +1 
                --setElementData ( hitPlayer, "busData", pontoAtual +1 > #markers and 1 or pontoAtual +1 ) 
                --[[ 
                    aqui você tera que usar triggerServerEvent 
                    para dar dinheiro ao jogador 
                    (givePlayerMoney no lado do cliente não é sincronizado) 
                --]] 
            end 
        end 
    end 
end 
addEventHandler ( "onClientMarkerHit", root, onHit ) 

não testei mas deve estar funcionando :P

Sobre as variáveis predefinidas;

root = Uma variável que 'guarda' todos os elementos do servidor (veiculos, players, objetos etc).

resourceRoot = similar a root (↑), porem só 'guarda' os elementos criados no resource 'atual'.

getElementRoot não existe, talvez você quis dizer getRootElement (que é a mesma coisa que root).

(existem outras variaveis desse tipo (chamadas de predefinidas) você pode ver todas aqui).

Link to comment

Ora muito obrigado pela resposta esclarecedora que estava à espera !!!

Só tenho mais uma questão. Será que me poderia explicar a linha 65 e 66 do seu código ? É só para perceber mais profundamente essas condições.

Muito agradecido,

Emanuel

Link to comment
Ora muito obrigado pela resposta esclarecedora que estava à espera !!!

Só tenho mais uma questão. Será que me poderia explicar a linha 65 e 66 do seu código ? É só para perceber mais profundamente essas condições.

Muito agradecido,

Emanuel

Isso seria uma operação ternária, Basicamente:

pontoAtual = pontoAtual +1 > #markers and 1 or pontoAtual +1 

Seria o mesmo que:

if pontoAtual +1 > #markers then 
    pontoAtual = 1 
else 
    pontoAtual = pontoAtual +1 
end 

É uma forma simplificada de fazer comparações básicas, o valor depois do and é oque ficara se a comparação retornar true, caso contrario fica o valor depois de or.

Link to comment

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