Lalalu Posted November 19, 2022 Share Posted November 19, 2022 (edited) Hola que tal, quisiera que me orientaran en algo. Hay un código de un usuario aquí en el foro que permite caminar en el agua utilizando la creación de un objeto y render bajo el jugador, el problema es que esto solo lo ve el jugador que lo ejecuta, no pueden verlo los demás. He intentado con un trigger desde el server side pero no he podido lograr que funcione, quisiera que me orientaran al respecto para lograr que los demás players te vean caminando sobre el agua... por acá adjunto el código original y post del usuario: https://forum.multitheftauto.com/topic/58614-water-walk/ -- water walk local obj = {} function WaterWalk() if obj[localPlayer] then local x,y,_ = getElementPosition(localPlayer) setElementPosition(obj[localPlayer],x,y,-.5) end end addEventHandler ("onClientRender",root,WaterWalk) function WaterOn() local px,py,_ = getElementPosition(localPlayer) obj[localPlayer] = createObject(1221,px,py,0) setElementAlpha(obj[localPlayer],0) end addCommandHandler("water",WaterOn) Edited November 19, 2022 by Lalalu Link to comment
D4rk Posted November 19, 2022 Share Posted November 19, 2022 Como tal puede crear el comando en el lado del cliente, despues lo pasas al server guardas el objecto en una tabla, despues lo vuelves a triggear al cliente. 1 Link to comment
Lalalu Posted November 19, 2022 Author Share Posted November 19, 2022 (edited) 1 hour ago, D4rk said: Como tal puede crear el comando en el lado del cliente, despues lo pasas al server guardas el objecto en una tabla, despues lo vuelves a triggear al cliente. O sea pero mantengo la creación del objeto en el client side? anteriormente lo único que habia hecho fue colocar un triggerClient para crear el render Edited November 19, 2022 by Lalalu Link to comment
#Dv^ Posted November 21, 2022 Share Posted November 21, 2022 (edited) Puedes mover la función 'waterOn' a server-side, al momento de usar el comando triggearlo a todos los jugadores conectados para luego desde client-side obtener a ese jugador guardado en una variable quizás para luego renderizar los objetos debajo de él. Otra es no triggearlo, sino al momento de usar el comando adherirle al jugador alguna key con elementData para sincronizarlo tanto client-side como server-side, y desde client-side hacer un loop de jugadores dentro del evento render con la condición de la 'key' elementData que te mencioné y así crear los objetos debajo de él para que todos logren verlo. No sé que tan óptimo podría ser eso, pero es una idea así rápida. Espero se entienda Edited November 21, 2022 by #Dv^ 1 Link to comment
alex17" Posted November 21, 2022 Share Posted November 21, 2022 ----- Server ---- local objects = {} --- comando para crear o destruir el objeto y almacenar en la tabla addCommandHandler("water", function(player) if not objects[player] then objects[player] = createObject(1221, 0, 0, 0) else destroyElement(objects[player]) objects[player] = nil end --- mandamos al client todos los objetos triggerClientEvent("water_walk", root, objects) end ) ---- si un jugador entra al server necesitamos mandarle la tabla de objetos addEventHandler("onPlayerResourceStart", root, function(loadedResource) if loadedResource == resource then triggerClientEvent(source, "water_walk", source, objects) end end ) ----- Client ---- local objects = {} addEvent("water_walk", true) addEventHandler("water_walk", root, function(o) objects = o ---- removemos el render por si la tabla esta vacia removeEventHandler("onClientRender", root, managewaterwalk) if objects and --- Si la tabla no esta vacía y hay al menos un objeto iniciamos el render for _, object, in pairs(objects) do if object then addEventHandler("onClientRender", root, managewaterwalk) return end end end end ) function managewaterwalk() for player, object in pairs(objects) do local x, y, z = getElementPosition(player) setElementPosition(object, x, y, z - .5) end end PD: no lo he probado así que me avisas si te sirve 1 Link to comment
Lalalu Posted November 21, 2022 Author Share Posted November 21, 2022 (edited) 1 hour ago, alex17" said: PD: no lo he probado así que me avisas si te sirve Hola, muchas gracias a todos por la ayuda. He intentando de las formas que me han explicado #Dv y Dark, a lo que he podido entender pero no me ha funcionado, no lo ven los demás o causa muchos bajones de fps. Alex si me sirvió tu forma, pero el player se desliza al estar sobre el agua y si por ejemplo lo tengo activado yo y alguien sale del servidor se me desactiva. Lo del deslizamiento siempre me pasa cuando trato de crear el objeto en server-side porque no podía colocarlo con el getWaterLevel, de esta forma si funciona perfecto pero añadiéndolo al render en el client-side local level = getWaterLevel(x,y,z) or 0 object = createObject(1221, x, y, level) Edited November 21, 2022 by Lalalu Link to comment
alex17" Posted November 21, 2022 Share Posted November 21, 2022 14 minutes ago, Lalalu said: Hola, muchas gracias a todos por la ayuda. He intentando de las formas que me han explicado #Dv y Dark, a lo que he podido entender pero no me ha funcionado, no lo ven los demás o causa muchos bajones de fps. Alex si me sirvió tu forma, pero el player se desliza al estar sobre el agua y si por ejemplo lo tengo activado yo y alguien sale del servidor se me desactiva. Lo del deslizamiento siempre me pasa cuando trato de crear el objeto en server-side porque no podía colocarlo con el getWaterLevel, de esta forma si funciona perfecto pero añadiéndolo al render en el client-side local level = getWaterLevel(x,y,z) or 0 object = createObject(1221, x, y, level) si deja de funcionar al salir del servidor, es por que da un error, hay que añadir otra funciòn mas en el server addEventHandler("onPlayerQuit", root, function() if objects[source] then destroyObject(objects[source]) objects[source] = nil triggerClientEvent("water_walk", root, objects) end end ) 1 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