Emanuel Posted July 22, 2015 Share Posted July 22, 2015 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.multitheftauto.com/viewtopic.php?f=91&t=90395 Ficaria muito agradecido com uma resposta esclarecedora Emanuel Camacho Link to comment
n3wage Posted July 22, 2015 Share Posted July 22, 2015 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 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
Emanuel Posted July 22, 2015 Author Share Posted July 22, 2015 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
n3wage Posted July 22, 2015 Share Posted July 22, 2015 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now