Jump to content

PlayerChat


sNacks

Recommended Posts

Hola , estoy creando la función de que el say tome el nombre de cuenta de un jugador , para evitar que se vea el nick puesto por consola..  (nose si me explique bien, el nombre que se lee en el chat sea el nombre de la cuenta)
tal como a su vez le agregue la función de que cada 40metros de distancia ya no puedan leerlo los demas... los players que se encuentren dentro de ese rango puedan leer el mensaje tranquilamente.

 

addEventHandler ( "onPlayerChat", root, 
    function ( msg, msgType ) 
        local accountName = getAccountName ( getPlayerAccount ( source ) ) 
        local r, g, b = getPlayerNametagColor ( source ) 
        local radius = createColSphere(x, y, z, 40) -- aquí asigne los 40 metros
        local nearPlayers = getElementsWithinColShape(radius, "player")
    destroyElement(radius)
        if ( msgType == 0 ) then 
            outputChatBox( accountName ..": #FFFFFF".. msg, root, r, g, b, true ) 
        elseif ( msgType == 1 ) then 
            outputChatBox( "* ".. accountName .." ".. msg, root, 255, 0, 255, true ) 
        elseif ( msgType == 2 and getPlayerTeam ( source ) ) then 
            for index, player in ipairs ( getPlayersInTeam ( getPlayerTeam ( source ) ) ) do 
                outputChatBox( "(TEAM) ".. accountName ..": #FFFFFF".. msg, player, r, g, b, true ) 
            end 
        end 
        cancelEvent ( ) 
    end 
) 

 que es lo que estoy haciendo mal ? 

Link to comment

No es necesario que crees un colshape para obtener a los jugadores dentro del él. Puedes usar getDistanceBetweenPoints3D para calcular la distancia y poner una condicional con ello.

En el evento onPlayerChat, si miras su primer ejemplo puedes observar como está estructurado así, con lo mismo que buscas..., a excepción de que quieres poner la cuenta de la persona de quien manda el mensaje.

Te recomendaría poner una condicional o "or" respecto a getAccountName, debido a que te puede retorna false si el jugador tiene una cuenta invitado. Lo mismo con getPlayerTeam, podría darte error si el jugador no está en un equipo y por lo tanto el "pairs" no podrá hacer bucle con la tabla que no existe.

Edited by #Dv^
Link to comment
if msgType == 0 then
   -- Se obtiene la posicion del jugador
   local X, Y, Z = getElementPosition(source)
        
   for i, Jugador in ipairs(getElementsByType("player")) do
      -- Se chequea si el jugador está a una distancia de 15
      if getDistanceBetweenPoints3D(X, Y, Z, getElementPosition(Jugador)) <= 15 then
         -- Se muestra el mensaje
         outputChatBox("#FF0000[#FF7D00Say#FF0000] #FFFFFF"..getAccountName(getPlayerAccount(source)) or getPlayerName(source)..":#FFFFFF"..msg, Jugador, 211, 211, 211, true)
       end
   end
end

Espero que esto te sirva de guia.

Edited by _.:illus!on:._
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...