panito69 Posted October 25, 2015 Share Posted October 25, 2015 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
Enargy, Posted October 25, 2015 Share Posted October 25, 2015 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
panito69 Posted October 25, 2015 Author Share Posted October 25, 2015 Gracias Enargy!! Voy a probarlo y comento que tal Link to comment
user123 Posted October 28, 2015 Share Posted October 28, 2015 Gracias Enargy!! Voy a probarlo y comento que tal Te ha funcionado? Link to comment
panito69 Posted October 29, 2015 Author Share Posted October 29, 2015 Pues no, pero no creo que sea culpa del script sino de como lo estamos implementando, estamos trabajando en el, cuando lo tenga funcionando lo enseño. Link to comment
panito69 Posted October 30, 2015 Author Share Posted October 30, 2015 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
Enargy, Posted October 30, 2015 Share Posted October 30, 2015 En lugar de usar un loop puedes usar getVehicleType. Es mas eficiente. Link to comment
panito69 Posted November 4, 2015 Author Share Posted November 4, 2015 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
Enargy, Posted November 4, 2015 Share Posted November 4, 2015 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 Link to comment
Recommended Posts