Jump to content

RESOLVIDO SCRIPT FINAL POSTADO^^


Recommended Posts

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 by Guest
Link to comment

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

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 by Guest
Link to comment

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

é 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
é 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) 
  

quando explode aparece ja depois do timer não aparece.

Link to comment

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

@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

@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

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 by Guest
Link to comment

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

Link to comment
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... :roll:

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

é 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

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

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

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