Pedro Colto Posted March 31, 2016 Share Posted March 31, 2016 (edited) então galera tudo bom, criei um sistema de respawn de carros. Ele respawna um carro apos a explosão, em uma posição setada dentro do scipt, mas utimamente anda demostrando algumas falhas que eu cometi.. se poderem me ajudar. o script funciona normal ex: quando o carro explode sem o player estar dentro o carro respawna normalmente ja com o player dentro nao spawna e da esse error e este warning no debugscript: http://imgur.com/SWJ8EUa Se alguem estiver disposto a me ajudar.. function respawnExplodedVehicle() setTimer(respawnVehicle, 5000, 1, source) setTimer (function(playerVehicle) setElementHealth (playerVehicle, getElementHealth (playerVehicle)-700) setElementPosition ( playerVehicle, -708.98931884766,950.66259765625,11.769227981567) outputChatBox ( "|Seu carro foi transferido para o sucatão!|", sourcePlayer ) --outputChatBox ( "|Um blip foi criado em seu mapa, para informar a localização dele!|", sourcePlayer ) setVehicleLocked ( playerVehicle, true ) --createBlip(-708.98931884766,950.66259765625,11.769227981567, 51, 0, 0, 0, 255, myPlayer ) end, 6000, 1,source) end addEventHandler("onVehicleExplode", getRootElement(), respawnExplodedVehicle) APÓS A CONCLUSÃO DA AJUDA EU IREI COMENTÁR O RESULTADO FINAL PARA QUEM PRECISAR!! Edited April 1, 2016 by Guest Link to comment
FelipeMallmann Posted March 31, 2016 Share Posted March 31, 2016 Eu nao tenho certeza se o source da funçao do setTimer vai ser o mesmo source da funçao em que ele está, mas tente ver se funciona function respawnExplodedVehicle() setTimer(respawnVehicle, 5000, 1, source) local driver = getVehicleOccupant(source) setTimer ( function() setElementHealth (source, getElementHealth (source)-700) setElementPosition ( source, -708.98931884766,950.66259765625,11.769227981567) if (driver) then outputChatBox ( "|Seu carro foi transferido para o sucatão!|", driver) end setVehicleLocked ( source, true ) end, 6000, 1 ) end addEventHandler("onVehicleExplode", getRootElement(), respawnExplodedVehicle) Link to comment
Pedro Colto Posted March 31, 2016 Author Share Posted March 31, 2016 Eu nao tenho certeza se o source da funçao do setTimer vai ser o mesmo source da funçao em que ele está, mas tente ver se funciona function respawnExplodedVehicle() setTimer(respawnVehicle, 5000, 1, source) local driver = getVehicleOccupant(source) setTimer ( function() setElementHealth (source, getElementHealth (source)-700) setElementPosition ( source, -708.98931884766,950.66259765625,11.769227981567) if (driver) then outputChatBox ( "|Seu carro foi transferido para o sucatão!|", driver) end setVehicleLocked ( source, true ) end, 6000, 1 ) end addEventHandler("onVehicleExplode", getRootElement(), respawnExplodedVehicle) ainda sim continua.. Link to comment
Pedro Colto Posted March 31, 2016 Author Share Posted March 31, 2016 (edited) Bom amigos meu resultado final foi esse sem erros sem warnnings só não sei onde está uma coisa, ha uma função que quando explode um carro todos carros do sv respawnam juntos, mesmo não estando explodidos!! Se souberem arrumar poste aqui Creio eu que seja o getElementsByType function respawn() outputChatBox("|Sua caranga velha já era!|", sourcePlayer) setTimer(function () outputChatBox("|Seu veiculo foi transferido para o sucatão, para retira-lo pague 350R$!|", sourcePlayer) local vehicles = getElementsByType ( "vehicle" ) for k, vehicle in ipairs ( vehicles ) do respawnVehicle ( vehicle ) setElementHealth (vehicle, getElementHealth (vehicle)-700) setElementPosition ( vehicle, -708.98931884766,950.66259765625,11.769227981567) setVehicleLocked ( vehicle, true ) --setVehicleDamageProof(vehicle, true) end end, 5000, 1) end addEventHandler("onVehicleExplode", getRootElement(), respawn) Edited March 31, 2016 by Guest Link to comment
FelipeMallmann Posted March 31, 2016 Share Posted March 31, 2016 Quando um veiculo explodir, voce esta pegando todos os veiculos e respawnando um a um com o for ... local vehicles = getElementsByType ( "vehicle" ) for k, vehicle in ipairs ( vehicles ) do respawnVehicle ( vehicle ) ... end use source para pegar apenas o carro explodido ao inves de vehicle e apague as linhas 5,6 e 12 Link to comment
Pedro Colto Posted March 31, 2016 Author Share Posted March 31, 2016 Quando um veiculo explodir, voce esta pegando todos os veiculos e respawnando um a um com o for ... local vehicles = getElementsByType ( "vehicle" ) for k, vehicle in ipairs ( vehicles ) do respawnVehicle ( vehicle ) ... end use source para pegar apenas o carro explodido ao inves de vehicle e apague as linhas 5,6 e 12 fis isto agora os veiculos não spawnam function respawn() outputChatBox("|Sua caranga velha já era!|", sourcePlayer) setTimer(function () outputChatBox("|Seu veiculo foi transferido para o sucatão, para retira-lo pague 350R$!|", sourcePlayer) respawnVehicle ( source ) setElementHealth (source , getElementHealth (source )-700) setElementPosition ( source , -708.98931884766,950.66259765625,11.769227981567) setVehicleLocked ( source , true ) --setVehicleDamageProof(vehicle, true) end, 5000, 1) end addEventHandler("onVehicleExplode", getRootElement(), respawn) Link to comment
FelipeMallmann Posted March 31, 2016 Share Posted March 31, 2016 da algum erro no console? Link to comment
Pedro Colto Posted March 31, 2016 Author Share Posted March 31, 2016 da algum erro no console? http://imgur.com/6Zy5wwq "warnning line 9: respawnVehicle "warnning line 10: setElementHealth " "Respawn_s.lua error 10: setElementHealth (source , getElementHealth (source)-700)" Link to comment
FelipeMallmann Posted March 31, 2016 Share Posted March 31, 2016 é erro no source, por algum motivo nao ta pegando o carro faz um teste outputChatBox("CARRO: " ..getVehicleName(source)) Vê se aparece o nome do carro quando ele explode, e ve se aparece o nome do carro depois que o timer é executado. function respawn() outputChatBox("|Sua caranga velha já era!|", sourcePlayer) outputChatBox("CARRO: " ..getVehicleName(source)) setTimer(function () outputChatBox("CARRO: " ..getVehicleName(source)) outputChatBox("|Seu veiculo foi transferido para o sucatão, para retira-lo pague 350R$!|", sourcePlayer) respawnVehicle ( source ) setElementHealth (source , getElementHealth (source )-700) setElementPosition ( source , -708.98931884766,950.66259765625,11.769227981567) setVehicleLocked ( source , true ) --setVehicleDamageProof(vehicle, true) end, 5000, 1) end addEventHandler("onVehicleExplode", getRootElement(), respawn) Link to comment
Pedro Colto Posted March 31, 2016 Author Share Posted March 31, 2016 é erro no source, por algum motivo nao ta pegando o carrofaz um teste outputChatBox("CARRO: " ..getVehicleName(source)) Vê se aparece o nome do carro quando ele explode, e ve se aparece o nome do carro depois que o timer é executado. function respawn() outputChatBox("|Sua caranga velha já era!|", sourcePlayer) outputChatBox("CARRO: " ..getVehicleName(source)) setTimer(function () outputChatBox("CARRO: " ..getVehicleName(source)) outputChatBox("|Seu veiculo foi transferido para o sucatão, para retira-lo pague 350R$!|", sourcePlayer) respawnVehicle ( source ) setElementHealth (source , getElementHealth (source )-700) setElementPosition ( source , -708.98931884766,950.66259765625,11.769227981567) setVehicleLocked ( source , true ) --setVehicleDamageProof(vehicle, true) end, 5000, 1) end addEventHandler("onVehicleExplode", getRootElement(), respawn) quando explode aparece ja depois do timer não aparece. Link to comment
FelipeMallmann Posted April 1, 2016 Share Posted April 1, 2016 Entao o source nao ta mais sendo o veiculo, veja se isso funciona function respawn() outputChatBox("|Sua caranga velha já era!|", sourcePlayer) local carro = source setTimer(function (carro) outputChatBox("CARRO: " ..getVehicleName(carro)) outputChatBox("|Seu veiculo foi transferido para o sucatão, para retira-lo pague 350R$!|", sourcePlayer) respawnVehicle ( carro ) setElementHealth (carro , getElementHealth (carro )-700) setElementPosition ( carro , -708.98931884766,950.66259765625,11.769227981567) setVehicleLocked ( carro , true ) --setVehicleDamageProof(vehicle, true) end, 5000, 1) end addEventHandler("onVehicleExplode", getRootElement(), respawn) Link to comment
n3wage Posted April 1, 2016 Share Posted April 1, 2016 @FelipeMallmann Esse seu ultimo código não vai funcionar porque você redefiniu a variavel carro como sendo parâmetro da função do timer, Assim ela vira nil já que você não passou nenhum parâmetro, Para seu "método" ter funcionado você teria que ter feito da seguinte maneira: local carro = source setTimer( function () -- ... Sem usar parâmetros na função, Mas tem uma maneira melhor, Você pode passar os parâmetros que quiser no setTimer que eles serão passados para a função: setTimer ( function( carro ) -- ... end , 5000, 1, source ); Assim você passará a variável source (que é o veiculo que explodiu) para a função do timer. -- btw outra coisa que vocês estão fazendo errado é usar sourcePlayer (Variável não definida) nos outputChatBoxes, Usando essa "variável" (nil) Vocês estarão mandando a mensagem para todos os jogadores. Link to comment
#RooTs Posted April 1, 2016 Share Posted April 1, 2016 @Pedro, você quer que o veiculo quando explode com ou sem player dentro retorne para o lugar aonde saiu ? eu entendi isto, se for isso mesmo tente esse code aqui. local model = 400 local vehicle = createVehicle ( model, -708.98931884766,950.66259765625,11.769227981567 ) -- criar veiculo em uma Pos no mapa function respawnExplodedVehicle() setTimer(respawnVehicle, 5000, 1, source) end addEventHandler("onVehicleExplode", getRootElement(), respawnExplodedVehicle) ou você pode tentar este outro exemplo function respawnVehicle( vehicle ) spawnVehicle ( vehicle, getElementData( vehicle, "posX" ), getElementData( vehicle, "posY" ), getElementData( vehicle, "posZ" ), getElementData( vehicle, "rotX" ), getElementData( vehicle, "rotY" ), getElementData( vehicle, "rotZ" ) ) end function onVehicleSpawn () local x,y,z = -708.98931884766,950.66259765625,11.769227981567 setElementData (source,"posX",x) setElementData (source,"posY",y) setElementData (source,"posZ",z) end addEventHandler ("onVehicleExplode",getRootElement(),onVehicleSpawn) function onVehicleExplode () setTimer( respawnVehicle, 5000, 1, source ) end addEventHandler("onVehicleExplode", getRootElement(), onVehicleExplode) Link to comment
Pedro Colto Posted April 1, 2016 Author Share Posted April 1, 2016 (edited) Bom quero agradecer a todos.. e se alguém estiver querendo ou esta procurando algo relacionado está aqui o script final.. Muito obrigado a vocês que colaboraram com o topico ^^ function respawn() outputChatBox("|Sua caranga velha já era!|", sourcePlayer) local carro = source setTimer ( function( carro ) outputChatBox("|Seu veiculo foi transferido para o sucatão, para retira-lo pague 350R$!|", sourcePlayer) respawnVehicle ( carro ) setElementHealth (carro ,500) setElementPosition ( carro , -708.98931884766,950.66259765625,11.769227981567) setVehicleLocked ( carro , true ) --setVehicleDamageProof(vehicle, true) end , 5000, 1, source ); end addEventHandler("onVehicleExplode", getRootElement(), respawn) Edited April 2, 2016 by Guest Link to comment
#RooTs Posted April 1, 2016 Share Posted April 1, 2016 Creio que a outra parte do seu "sistema" contenha, setElementHealth (carro , getElementHealth (carro ) 1000) --definido setVehicleLocked ( carro , false ) --definido takePlayerMoney ( thePlayer, 350 ) --definido porque se não for isso, vai fazer mais sentido usar o meu exemplo do que a sua função final. mais de qualquer forma a sua ideia é boa... Link to comment
Pedro Colto Posted April 1, 2016 Author Share Posted April 1, 2016 Creio que a outra parte do seu "sistema" contenha, setElementHealth (carro , getElementHealth (carro ) 1000) --definido setVehicleLocked ( carro , false ) --definido takePlayerMoney ( thePlayer, 350 ) --definido porque se não for isso, vai fazer mais sentido usar o meu exemplo do que a sua função final. mais de qualquer forma a sua ideia é boa... Não é bem isso e sim que para quando o carro respawnar nessa posição o player terá que liberar ele, cOMO ASSIM LIBERAR? eLE TERÁ QUE IR NO SUCATÃO E RETIRAR O VEICULO PAGANDO 350 REAIS NO CASO Link to comment
#RooTs Posted April 1, 2016 Share Posted April 1, 2016 Não é bem isso e sim que para quando o carro respawnar nessa posição o player terá que liberar ele, cOMO ASSIM LIBERAR? eLE TERÁ QUE IR NO SUCATÃO E RETIRAR O VEICULO PAGANDO 350 REAIS NO CASO foi o que eu disse! Link to comment
Pedro Colto Posted April 1, 2016 Author Share Posted April 1, 2016 é se vcs poderem me ajudar nessa aqui tbm: function offmotor() outputChatBox("|Desligando Motor|", player) local carro1 = source setTimer ( function( carro1 ) setVehicleEngineState ( carro1, false ) outputChatBox("|Motor desligado|", player) end , 500, 1,source); end addEvent( "offmotor", true ) addEventHandler( "offmotor", root, offmotor ) o evento é um botao que quando clica o carro desliga, mas após isso todos os carros que tem no servidor desliga tbm '- Link to comment
#RooTs Posted April 2, 2016 Share Posted April 2, 2016 use https://wiki.multitheftauto.com/wiki/GetVehicleOccupant Link to comment
Pedro Colto Posted April 2, 2016 Author Share Posted April 2, 2016 usehttps://wiki.multitheftauto.com/wiki/GetVehicleOccupant agora não esta funcionando aparece warnning no debugscript do getVehicleOccupant function offmotor( loss ) local driver = getVehicleOccupant ( source ) -- get the player sitting in seat 0 if ( driver ) then -- if the driver exists, display a message setVehicleEngineState ( source, false ) outputChatBox("|Motor desligado|", player) end end addEvent( "offmotor", true ) addEventHandler( "offmotor", root, offmotor ) Link to comment
Pedro Colto Posted April 2, 2016 Author Share Posted April 2, 2016 o que é loss??. omg..... é um negocio que coloquei para testar mais mesmo sem o loss ainda não funfa Link to comment
Pedro Colto Posted April 2, 2016 Author Share Posted April 2, 2016 Consegui. No evento client onde vai chamar a função server o evento tem que estar assim, Exemplo: triggerServerEvent ( "NomeDoEvento", getLocalPlayer()) e no server o evento tem que estar assim: addEvent( "NomeDoEvento", true ) addEventHandler( "NomeDoEvento", getRootElement(), NomeDaFuncao ) e utilizamos no arquivo server-side o seguinte; function NomeDaFuncao() local vehicle = getPedOccupiedVehicle(source) if getPedOccupiedVehicleSeat(source) == 0 then ... 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