#Dv^ Posted June 9, 2016 Share Posted June 9, 2016 (edited) 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 June 10, 2016 by Guest Link to comment
aka Blue Posted June 9, 2016 Share Posted June 9, 2016 (edited) 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 June 9, 2016 by Guest Link to comment
Bc# Posted June 9, 2016 Share Posted June 9, 2016 (edited) 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 June 10, 2016 by Guest Link to comment
#Dv^ Posted June 9, 2016 Author Share Posted June 9, 2016 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 AlexTMjugador Posted June 9, 2016 Discord Moderators Share Posted June 9, 2016 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
Destroyer.- Posted June 9, 2016 Share Posted June 9, 2016 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
#Dv^ Posted June 9, 2016 Author Share Posted June 9, 2016 Gracias Alex! El tuyo realmente dio por funcionar! Agradezco a todos por igual por las respuestas Link to comment
aka Blue Posted June 9, 2016 Share Posted June 9, 2016 Bueno, yo no aporté ningún código, solo te digo una pequeña idea de como hacerlo PD: Me di cuenta que puse player en los argumentos y player en el bucle . Link to comment
#Dv^ Posted June 9, 2016 Author Share Posted June 9, 2016 y si quiero que esperen 20 segundos para volver a usar el comando /elmasrico ¿Debería usar "setTimer"? Donde debería ir? Mil gracias Link to comment
aka Blue Posted June 9, 2016 Share Posted June 9, 2016 (edited) ¿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 June 9, 2016 by Guest Link to comment
#Dv^ Posted June 9, 2016 Author Share Posted June 9, 2016 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
Castillo Posted June 9, 2016 Share Posted June 9, 2016 y si quiero que esperen 20 segundos para volver a usar el comando /elmasrico¿Debería usar "setTimer"? Donde debería ir? Mil gracias Usa getTickCount, los timers no son eficientes, y menos en el lado del servidor. Link to comment
aka Blue Posted June 9, 2016 Share Posted June 9, 2016 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
#Dv^ Posted June 9, 2016 Author Share Posted June 9, 2016 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 AlexTMjugador Posted June 9, 2016 Discord Moderators Share Posted June 9, 2016 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
aka Blue Posted June 9, 2016 Share Posted June 9, 2016 Es que depende del lado en el que lo estás haciendo. Si te da ese error en el código que te pasé, supongo que es porque el script está en la parte cliente. PD: De nada, no tengo nada que hacer mientras se me descarga el CS . Link to comment
Recommended Posts