Jump to content

URGENTE


#Dv^

Recommended Posts

Hola a todos, tengo una duda

Como podría hacer para que de todos los jugadores conectados, salga quien es el que tiene más dinero del servidor? Es decir salga en el chat "(x) es la persona mas rica del servidor" o algo asi.

Se los agradecería a cualquiera, Gracias!

Edited by Guest
Link to comment

Haz un bucle con todos los jugadores, luego ya usa tu lógica para sacar el más rico de todos. No es tan complicado

addCommandHandler ( "elmasrico", 
    function ( player, commandName ) 
        for _, jugador in ipairs ( getElementsByType ( "player" ) ) do 
            local dinero = getPlayerMoney ( player ) 
            -- blablabla 
        end 
    end 
) 

Edited by Guest
Link to comment
addCommandHandler ( "elmasrico", 
    function ( player, commandName ) 
        outputChatBox(getPlayerName(getRikolin()).." es el mas rikolin del server") 
    end 
) 
  
function getRikolin () 
    for _, player in ipairs ( getElementsByType ( "player" ) ) do 
        if not rikolin then 
            local rikolin = player 
        end 
        if getPlayerMoney ( player ) > getPlayerMoney ( rikolin ) then 
            rikolin = player 
        end 
    end 
    return rikolin 
end 

Edited by Guest
Link to comment

Gracias por responder!

@Blue-Pie no puedo hacer que funcione, cada vez que pongo para que salga el mensaje "el más rico es (x)" me sale error con el "getPlayerName" en la linea 3

Algo así como esto

¿Podría explicarme o ayudarme por que? Se los agredezco

addCommandHandler ( "elmasrico",

function ( player, commandName )

outputChatBox(getPlayerName(getRikolin()).." es el mas rikolin del server")

end

)

function getRikolin ()

for _, player in ipairs ( getElementsByType ( "player" ) ) do

if not rikolin then

local rikolin = player

end

if getPlayerMoney ( player ) > getPlayerMoney ( rikolin ) then

rikolin = player

end

end

return rikolin

end

Link to comment
  • Discord Moderators

Ese código está mal visualmente, seriamente y operacionalmente. Usa este:

function obtenerJugadorMasRico ( ) 
    local jugadorMasRico = {} 
    for _, jugador in pairs ( getElementsByType( "player" ) ) do 
        local dinero = getPlayerMoney ( jugador ) 
        if dinero > ( jugadorMasRico.dinero or 0 ) then 
            jugadorMasRico.jugador, jugadorMasRico.dinero = jugador, dinero 
        end 
    end 
    return jugadorMasRico.jugador or false 
end 
  
addCommandHandler ( "elmasrico", 
    function ( ) 
        local jugadorMasRico = obtenerJugadorMasRico ( )  
        if jugadorMasRico then 
            outputChatBox ( getPlayerName( jugadorMasRico ) .. " es el más rico del servidor" ) 
        else 
            outputChatBox ( "Todos son pobres" ) 
        end 
    end 
) 

Link to comment
Gracias por responder!

@Blue-Pie no puedo hacer que funcione, cada vez que pongo para que salga el mensaje "el más rico es (x)" me sale error con el "getPlayerName" en la linea 3

Algo así como esto

¿Podría explicarme o ayudarme por que? Se los agredezco

addCommandHandler ( "elmasrico",

function ( player, commandName )

outputChatBox(getPlayerName(getRikolin()).." es el mas rikolin del server")

end

)

function getRikolin ()

for _, player in ipairs ( getElementsByType ( "player" ) ) do

if not rikolin then

local rikolin = player

end

if getPlayerMoney ( player ) > getPlayerMoney ( rikolin ) then

rikolin = player

end

end

return rikolin

end

Fue un pequeño error de tipeo que tuvo BC

  
addCommandHandler ( "elmasrico", 
    function ( player, commandName ) 
        outputChatBox(getPlayerName(getRikolin()).." es el mas rikolin del server") 
    end 
) 
  
function getRikolin () 
    for _, player in ipairs ( getElementsByType ( "player" ) ) do 
        if not rikolin then 
            local rikolin = player 
        end 
        if getPlayerMoney ( player ) > getPlayerMoney ( rikolin ) then 
            rikolin = player 
        end 
    end 
    return rikolin 
end 
  

Link to comment

¿Quieres hacer que al comprobarlo un jugador le ponga el timer a él o a todo el servidor? Me explico, si yo uso el comando /vermasrico por ejemplo, que el timer sea solo para mi o para todos los jugadores.

Edito: Editando el código de @AlexTMJugador, he hecho que el jugador que al jugador que use el comando, le ponga un temporizador de 1 minuto para volver a usarlo. Lo he hecho algo a ciegas así que si te da algún error postea.

local timerComando = { } 
  
function obtenerJugadorMasRico ( ) 
    local jugadorMasRico = {} 
    for _, jugador in pairs ( getElementsByType( "player" ) ) do 
        local dinero = getPlayerMoney ( jugador ) 
        if dinero > ( jugadorMasRico.dinero or 0 ) then 
            jugadorMasRico.jugador, jugadorMasRico.dinero = jugador, dinero 
        end 
    end 
    return jugadorMasRico.jugador or false 
end 
  
addCommandHandler ( "elmasrico", 
    function ( player, commandName ) 
        local jugadorMasRico = obtenerJugadorMasRico ( )  
        if timerComando [ player ] == nil or timerComando [ player ] == false then 
            if jugadorMasRico then 
                outputChatBox ( getPlayerName( jugadorMasRico ) .. " es el más rico del servidor" ) 
                timerComando [ player ] = setTimer ( function ( player ) timerComando [ player ] = false end, 60000, 1, player ) 
            else 
                outputChatBox ( "Todos son pobres" ) 
                timerComando [ player ] = setTimer ( function ( player ) timerComando [ player ] = false end, 60000, 1, player ) 
            end 
        else 
            outputChatBox ( "No puedes usar el comando todavía. Espera el tiempo.", player, 255, 0, 0 ) 
        end 
    end 
) 
  

Edited by Guest
Link to comment

Para todos los jugadores, es decir que si yo pongo /elmasrico debería y deberían esperar "todos" 20 segundos para volver a poner el comando /elmasrico

Y que les salga al player que ingreso el comando "debes esperar 20 segundos para este comando"

Link to comment

Lo he hecho con setTimer pero bueno, usa lo que quieras

function obtenerJugadorMasRico ( ) 
    local jugadorMasRico = {} 
    for _, jugador in pairs ( getElementsByType( "player" ) ) do 
        local dinero = getPlayerMoney ( jugador ) 
        if dinero > ( jugadorMasRico.dinero or 0 ) then 
            jugadorMasRico.jugador, jugadorMasRico.dinero = jugador, dinero 
        end 
    end 
    return jugadorMasRico.jugador or false 
end 
  
addCommandHandler ( "elmasrico", 
    function ( player, commandName ) 
        local jugadorMasRico = obtenerJugadorMasRico ( )  
        if isTimer ( timerComando ) then 
            outputChatBox ( "No puedes usar el comando todavía. Espera el tiempo.", player, 255, 0, 0 ) 
        else 
            if jugadorMasRico then 
                outputChatBox ( getPlayerName( jugadorMasRico ) .. " es el más rico del servidor" ) 
                timerComando = setTimer ( function ( ) 
                    outputChatBox ( "Ya se puede usar el comando /elmasrico de nuevo." ) 
                end, 60000, 1 ) 
            else 
                outputChatBox ( "Todos son pobres" ) 
                timerComando = setTimer ( function ( ) 
                    outputChatBox ( "Ya se puede usar el comando /elmasrico de nuevo." ) 
                end, 60000, 1 )              
            end 
        end 
    end 
) 
  

Link to comment

Gracias Blue Pie

El único error que me daba era lo del

outputChatBox ( "No puedes usar el comando todavía. Espera el tiempo.", player, 255, 0, 0 ) 

pero borrando los "255, 0, 0" se soluciona

Muchas gracias a todos por su tiempo!

Link to comment
  • Discord Moderators

No tienes por qué usar setTimer para eso. Es más rápido guardar la última vez que alguien ha usado el comando y comprobar si pasaron X segundos desde entonces.

local limitarATodos = false -- Si esto es true, el límite se aplicará a todos los jugadores por igual, no de manera individual 
  
function obtenerJugadorMasRico ( ) 
    local jugadorMasRico = {} 
    for _, jugador in pairs ( getElementsByType( "player" ) ) do 
        local dinero = getPlayerMoney ( jugador ) 
        if dinero > ( jugadorMasRico.dinero or 0 ) then 
            jugadorMasRico.jugador, jugadorMasRico.dinero = jugador, dinero 
        end 
    end 
    return jugadorMasRico.jugador or false 
end 
  
local ultimaVezLlamado = limitarATodos and -math.huge or {} 
addCommandHandler ( "elmasrico", 
    function ( jugador ) 
        local ahora, puedeUsarComando = getTickCount ( ) 
        if limitarATodos then 
            -- Comprobar que pasaron 20 segundos desde la última vez que un jugador CUALQUIERA usó el comando 
            puedeUsarComando = ( ahora - ultimaVezLlamado ) >= 20 * 1000 
        else 
            -- Comprobar que pasaron 20 segundos desde la última vez que ESTE jugador usó el comando 
            puedeUsarComando = ( ahora - ( ultimaVezLlamado[jugador] or -math.huge ) ) >= 20 * 1000 
        end 
        if not puedeUsarComando then 
            -- Dar error y no continuar si no debería de usar el comando 
            outputChatBox ( "Espera unos segundos antes de volver a usar este comando" ) 
            return 
        end 
  
        -- Podemos usar el comando, así que guardar el momento en el que lo hemos hecho para comprobar la próxima vez 
        if limitarATodos then 
            ultimaVezLlamado = ahora 
        else 
            ultimaVezLlamado[jugador] = ahora 
        end 
  
        local jugadorMasRico = obtenerJugadorMasRico ( )  
        if jugadorMasRico then 
            outputChatBox ( getPlayerName( jugadorMasRico ) .. " es el más rico del servidor" ) 
        else 
            outputChatBox ( "Todos son pobres" ) 
        end 
    end 
) 
  
if not limitarATodos then 
    addEventHandler ( "onPlayerQuit", root, 
        function ( ) 
            ultimaVezLlamado[source] = nil 
        end 
    ) 
end 

Puedes cambiar el valor de la variable limitarATodos para decidir si quieres que el límite se aplique a todos por igual o de manera individual.

Si vas a usar este código en el lado del servidor, asegúrate de que sustituyes el evento onPlayerQuit por onClientResourceStop y cambias source por localPlayer en la función.

Link to comment
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...