Jump to content

Vehiculos en el agua


panito69

Recommended Posts

Hola a todos, se que el tema se ha hablado un par de veces en el foro, pero lo que he encontrado no me ha valido de mucho...

Os cuento, estoy buscando la manera de hacer respawnear los vehículos que caen al agua, tengo una idea mas o menos del script, pero (aunque no soy nuevo en programación) no se por donde empezar, mi plan es este:

Leer la lista de todos los vehículos en el servidor cada 60 minutos y si el vehículo esta en el agua hacerle un respawn.

Se que visto así parece sencillo pero no tengo ni p**a idea de como hacerlo.

Gracias de antebrazo!!

PD: Info sobre el server

-Version 1.4

-Mod Dayz

Os dejo un ejemplo de la función con la que hacen spawn los coches

for i,veh in ipairs(patriotSpawns) do 
        local x,y,z = veh[1],veh[2],veh[3],veh[4],veh[5],veh[6] 
        veh = createVehicle(470,x,y,z) 
        vehCol = createColSphere(x,y,z,2.5) 
        attachElements ( vehCol, veh, 0, 0, 0 ) 
        setElementData(vehCol,"parent",veh) 
        setElementData(veh,"parent",vehCol) 
        setElementData(vehCol,"vehicle",true) 
        setElementData(vehCol,"MAX_Slots",50) 
        --Engine + Tires + Bateria 
        local tires,engine,bateria,part,rotor = getVehicleAddonInfos (getElementModel(veh)) 
        setElementData(vehCol,"Rueda_inVehicle",math.random(0,tires)) 
        setElementData(vehCol,"Motor_inVehicle",math.random(0,engine)) 
        setElementData(vehCol,"Bateria_inVehicle",math.random(0,bateria)) 
        setElementData(vehCol,"Deposito_inVehicle",math.random(0,part)) 
        setElementData(vehCol,"Rotor_inVehicle",math.random(0,rotor)) 
        --vehicle_indentifikation 
        setElementData(vehCol,"spawn",{470,x,y,z}) 
        --others 
        setElementData(vehCol,"fuel",math.random(0,20)) 
        for i,items in ipairs(lootItems["helicrashsides"]) do 
            local randomNumber = math.random(1,10) 
            if randomNumber == 5 then 
                setElementData(vehCol,items[1],1) 
            end 
        end 
    end 

Link to comment
function getVehiclesInWater() 
    local vehiclesInWater = {} 
    for _, vehicle in ipairs(getElementsByType("vehicle")) do 
        if isElementInWater(vehicle) then 
            table.insert(vehiclesInWater, vehicle ) 
        end 
    end 
    return vehiclesInWater 
end 
  
setTimer( 
function() 
    for i, vehicle in pairs(getVehiclesInWater()) do 
        if isElementInWater(vehicle) then 
            -- Aquí tu codigo de respawn. 
        end 
    end  
end, 600*1000, 0) -- Cada 10 Minutos la funcion se inicia. 

Link to comment

Ya esta arreglado!

Os cuento: No conseguía que los vehículos respawneasen, con mi función de respawn, pero se que funciona ya que los vehículos explotados si respawnean con esa función.

Lo que hice fue que tras un timer explotaran y respawneasen a traves de la otra función, pero no todos los vehiculos explotaban, y no me valía, seguí dándole vueltas toda la tarde hasta que se me ocurrió que en una de las variables del código estaban las coordenadas de respawn, asi que lo que hice es tras un timer, el vehiculo (que no sea un barco) se teletransporta a su respawn y se repara y en el caso de que algo saliese mal, el solo explotara y respawneara con la otra función.

Os dejo el código, para que le echéis un vistazo.

Gracias por la ayuda!

function agua() 
    for i,veh in ipairs(getElementsByType("vehicle")) do 
        if isElementInWater(veh) then 
            local col = getElementData(veh,"parent") 
            local id = getElementData(col,"spawn")[1] 
            local x = getElementData(col,"spawn")[2] 
            local y = getElementData(col,"spawn")[3] 
            local z = getElementData(col,"spawn")[4] 
            local xveh,yveh,zveh = getElementPosition(veh) 
            if isNotABoat(id) then 
                setElementPosition(veh,x,y,z+1) 
                setElementRotation(veh,0,0,0) 
                local tires,engine,bateria,part,rotor = getVehicleAddonInfos (getElementModel(veh)) 
                setElementData(col,"Rueda_inVehicle",math.random(0,tires)) 
                setElementData(col,"Motor_inVehicle",math.random(0,engine)) 
                setElementData(col,"Bateria_inVehicle",math.random(0,bateria)) 
                setElementData(col,"Deposito_inVehicle",math.random(0,part)) 
                setElementData(col,"Rotor_inVehicle",math.random(0,rotor)) 
                fixVehicle(veh) 
            end 
        end 
    end 
end 
function isNotABoat(id) 
    local boats={472,473,493,595,484,430,453,452,446,454} 
    for _,boat in ipairs(boats) do 
        if id == boat then 
            return false 
        end 
    end 
    return true 
end 
setTimer(agua,60*1000,0) 
  

Link to comment
En lugar de usar un loop puedes usar getVehicleType. Es mas eficiente.

Listo! (Hace dias que lo está pero con los estudios no me queda tiempo libre)

PD:Muchas gracias enargy, y porcierto.. ¿te importaria que te pusiese en la zona de agradecimientos de los créditos del server?

  
function agua() 
    for i,veh in ipairs(getElementsByType("vehicle")) do 
        if isElementInWater(veh) then 
            local col = getElementData(veh,"parent") 
            local id = getElementData(col,"spawn")[1] 
            local x = getElementData(col,"spawn")[2] 
            local y = getElementData(col,"spawn")[3] 
            local z = getElementData(col,"spawn")[4] 
            local xveh,yveh,zveh = getElementPosition(veh) 
            if not (getVehicleType(id) == "Boat") then 
                setElementPosition(veh,x,y,z+1) 
                setElementRotation(veh,0,0,0) 
                local tires,engine,bateria,part,rotor,ggasolina,cusuario,maxslots,spawns,nombre,max_fuel = getVehicleAddonInfos (getElementModel(veh)) 
                setElementData(col,"Rueda_inVehicle",math.random(0,tires)) 
                setElementData(col,"Motor_inVehicle",math.random(0,engine)) 
                setElementData(col,"Bateria_inVehicle",math.random(0,bateria)) 
                setElementData(col,"Deposito_inVehicle",math.random(0,part)) 
                setElementData(col,"Rotor_inVehicle",math.random(0,rotor)) 
                fixVehicle(veh) 
            end 
        end 
    end 
end 
  

Link to comment
En lugar de usar un loop puedes usar getVehicleType. Es mas eficiente.

Listo! (Hace dias que lo está pero con los estudios no me queda tiempo libre)

PD:Muchas gracias enargy, y porcierto.. ¿te importaria que te pusiese en la zona de agradecimientos de los créditos del server?

  
function agua() 
    for i,veh in ipairs(getElementsByType("vehicle")) do 
        if isElementInWater(veh) then 
            local col = getElementData(veh,"parent") 
            local id = getElementData(col,"spawn")[1] 
            local x = getElementData(col,"spawn")[2] 
            local y = getElementData(col,"spawn")[3] 
            local z = getElementData(col,"spawn")[4] 
            local xveh,yveh,zveh = getElementPosition(veh) 
            if not (getVehicleType(id) == "Boat") then 
                setElementPosition(veh,x,y,z+1) 
                setElementRotation(veh,0,0,0) 
                local tires,engine,bateria,part,rotor,ggasolina,cusuario,maxslots,spawns,nombre,max_fuel = getVehicleAddonInfos (getElementModel(veh)) 
                setElementData(col,"Rueda_inVehicle",math.random(0,tires)) 
                setElementData(col,"Motor_inVehicle",math.random(0,engine)) 
                setElementData(col,"Bateria_inVehicle",math.random(0,bateria)) 
                setElementData(col,"Deposito_inVehicle",math.random(0,part)) 
                setElementData(col,"Rotor_inVehicle",math.random(0,rotor)) 
                fixVehicle(veh) 
            end 
        end 
    end 
end 
  

Si tu quieres pues no hay problemas. Aunque no es necesario :P

Link to comment
  • Recently Browsing   0 members

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