Dark_Xx Posted June 22, 2020 Share Posted June 22, 2020 ¿Bueno quiero saber como puede crear un Sistema de chat? y Que se solo se leea a X distancia del jugador que envio el mensaje Link to comment
MrKAREEM Posted June 22, 2020 Share Posted June 22, 2020 LocalChat Vea este recurso y vea cómo funciona Link to comment
FabianRs Posted June 22, 2020 Share Posted June 22, 2020 (edited) Puedes empezar asi... --SERVER SIDE addCommandHandler("lchat", function(player,cmd,...) local msg = table.concat( {...}, " " ) if msg then local x,y,z = getElementPosition(player) local sp = createColSphere( x, y, z, 20 ) setTimer( destroyElement, 100, 1, sp ) local name = getPlayerName(player) for k,v in ipairs(getElementsWithinColShape(sp,"player")) do outputChatBox( "* "..name..": "..msg, v, 200, 250, 200, true ) end end end ) addEventHandler("onPlayerJoin", root, function() bindKey(source, "U", "down", "chatbox", "lchat") end ) Edited June 22, 2020 by FabianRs Link to comment
MrKAREEM Posted June 23, 2020 Share Posted June 23, 2020 (edited) 2 hours ago, FabianRs said: Puedes empezar asi... --SERVER SIDE addCommandHandler("lchat", function(player,cmd,...) local msg = table.concat( {...}, " " ) if msg then local x,y,z = getElementPosition(player) local sp = createColSphere( x, y, z, 20 ) setTimer( destroyElement, 100, 1, sp ) local name = getPlayerName(player) for k,v in ipairs(getElementsWithinColShape(sp,"player")) do outputChatBox( "* "..name..": "..msg, v, 200, 250, 200, true ) end end end ) addEventHandler("onPlayerJoin", root, function() bindKey(source, "U", "down", "chatbox", "lchat") end ) ¿Por qué creas coll? puedes recorrer todos los jugadores y usar GetDistanceBetweenPoints3D + al crear un objeto o una coll en el servidor de esa manera, debe usar la tabla porque si otro jugador envía un mensaje, la coll será destruida por él o causará algunos errores Edited June 23, 2020 by MrKAREEM Link to comment
Enargy, Posted June 23, 2020 Share Posted June 23, 2020 2 hours ago, MrKAREEM said: ¿Por qué creas coll? puedes recorrer todos los jugadores y usar GetDistanceBetweenPoints3D + al crear un objeto o una coll en el servidor de esa manera, debe usar la tabla porque si otro jugador envía un mensaje, la coll será destruida por él o causará algunos errores Eso es en el caso de que si la variable 'sp' fuese global ahí si habria conflicto con los timers. En este caso como la variable está dentro de un bloque se asigna solo a esa parte de la memoria. Por otro lado concuerdo contigo en usar getDistanceBetweenPoints3D Link to comment
FabianRs Posted June 23, 2020 Share Posted June 23, 2020 19 hours ago, MrKAREEM said: ¿Por qué creas coll? puedes recorrer todos los jugadores y usar GetDistanceBetweenPoints3D + al crear un objeto o una coll en el servidor de esa manera, debe usar la tabla porque si otro jugador envía un mensaje, la coll será destruida por él o causará algunos errores Creo que así es más fácil y más "económico" que andar tomando a todos los jugadores del sv cada vez que alguien habla por el chat customizado. Link to comment
MrKAREEM Posted June 23, 2020 Share Posted June 23, 2020 12 minutes ago, FabianRs said: Creo que así es más fácil y más "económico" que andar tomando a todos los jugadores del sv cada vez que alguien habla por el chat customizado. addCommandHandler("lchat", function(player,cmd,...) local msg = table.concat( {...}, " " ) if msg then local x,y,z = getElementPosition(player) local name = getPlayerName(player) for k,v in ipairs(getElementsByType("player")) do local pos = Vector3(getElementPosition(v)) if getDistanceBetweenPoints3D ( x, y, z, pos.x, pos.y, pos.z ) < 20 then outputChatBox( "* "..name..": "..msg, v, 200, 250, 200, true ) end end end end ) addEventHandler("onPlayerJoin", root, function() bindKey(source, "U", "down", "chatbox", "lchat") end ) es mas facil es más fácil a menos que cree formas de colls Link to comment
FabianRs Posted June 23, 2020 Share Posted June 23, 2020 1 minute ago, MrKAREEM said: addCommandHandler("lchat", function(player,cmd,...) local msg = table.concat( {...}, " " ) if msg then local x,y,z = getElementPosition(player) local name = getPlayerName(player) for k,v in ipairs(getElementsByType("player")) do local pos = Vector3(getElementPosition(v)) if getDistanceBetweenPoints3D ( x, y, z, pos.x, pos.y, pos.z ) < 20 then outputChatBox( "* "..name..": "..msg, v, 200, 250, 200, true ) end end end end ) addEventHandler("onPlayerJoin", root, function() bindKey(source, "U", "down", "chatbox", "lchat") end ) es mas facil es más fácil a menos que cree formas de colls Hmmm ok tienes razón, es más fácil y el código más corto Link to comment
MrKAREEM Posted June 23, 2020 Share Posted June 23, 2020 2 minutes ago, FabianRs said: Hmmm ok tienes razón, es más fácil y el código más corto buen trabajo hermano, has hecho un buen trabajo, pasa un buen rato Link to comment
aka Blue Posted June 23, 2020 Share Posted June 23, 2020 40 minutes ago, MrKAREEM said: buen trabajo hermano, has hecho un buen trabajo, pasa un buen rato Buen farmeo, colega. Link to comment
MTA Team 0xCiBeR Posted July 12, 2020 MTA Team Share Posted July 12, 2020 On 22/06/2020 at 21:38, MrKAREEM said: ¿Por qué creas coll? puedes recorrer todos los jugadores y usar GetDistanceBetweenPoints3D + al crear un objeto o una coll en el servidor de esa manera, debe usar la tabla porque si otro jugador envía un mensaje, la coll será destruida por él o causará algunos errores Tambien esta el tema rendimiento. Imaginate un servidor con 1000 jugadores, donde estas haciendo calculos matematicos x1000. Es mucho mas facil recorrer una tabla que es la que te brinda getElementsWithinColShape a tener que calcular distancias por cada jugador. 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