Jump to content

¿Como hacer un chat?


Dark_Xx

Recommended Posts

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 by FabianRs
Link to comment
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 by MrKAREEM
Link to comment
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
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
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
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
  • 3 weeks later...
  • MTA Team
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

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