Jump to content

Lag al Utilizar getAccounts


Narutimmy

Recommended Posts

hola, bueno estoy haciendo un resource una lista de jugadores el problema es que mi internal pesa unos 400mb, entonces al generar la lista o mas bien al objetener a los jugadores registrados da un lag por unos 10segundos aprox....

en cambio si lo ago en una internal de 2 o 3 cuentas es al instante, como podria optimizarlo?

Link to comment
Pues, quizás sólo obteniendo las cuentas activas? Cuando el servidor inicia, todas las cuentas que se han conectado el último mes se guardan en una tabla, luego en vez de getAccounts puedes usar esa tabla, el lagaso sólo será al principio.

El problema es que intento hacer un top score all time.... entonces ahi muchos que ya no juegan pero son lugar 1 o 2... y la idea es que otros intenten superarlos.

Lo otro que pensaba parecido a lo que me dijistes que al iniciar el server me genere la tabla y todo hastas ahi bien, y luego solicitar esa tabla desde el cliente.

Link to comment

Depende de lo que pidas, pero deberia ser algo estilo tabla y no tabla, es decir, es mas ligero que cargue en cliente que cada vez en servidor

--[[ PARTE DE SERVIDOR ]] 
  
--Usar esto la iniciar el script 
local t = {} 
--Formato de tabla: {["cuenta"] = valor, ["cuenta2"] = valor, ... } 
function inicia () 
    for k,v in ipairs(getAccounts()) do 
    t[getAccountName(v)] = --[[Valor de estadistica]] 
    end 
triggerClientEvent(root, "estadisticas", root, t) 
end 
  
--Usar esto posteriormente con un timer, que se yo.. 2-5 minutos? 
function actualizar ()   
    for k,v in ipairs(getElementsByType("player")) do 
    local acc = getAccountName(getPlayerAccount(v)) 
        if acc:lower() ~= "guest" then 
        t[acc] = --[[Valor de estadistica]] 
        end 
    end 
triggerClientEvent(root, "estadisticas", root, t) 
end 
  
--[[ PARTE DE CLIENTE ]] 
local tabla = {} 
--Formato de tabla: {["cuenta"] = valor, ["cuenta2"] = valor, ... } 
addEvent("estadistica", true) 
addEventHandler("estadistica", root, 
    function (t) 
    tabla = t 
    end 
) 

Adicionalmente, te recomiendo que elimines cuentas con mas de 60 dias sin uso, asi la competicion es activa

https://community.multitheftauto.com/index.php?p=resources&s=details&id=12193

o sino el codigo source directamente

dias_borrado = 60 
addEventHandler("onResourceStart", resourceRoot, 
    function () 
        for k,v in ipairs(getAccounts()) do 
            if not getAccountData(v, "ia:u") then 
            setAccountData(v, "ia:u", "0") 
            end 
        end 
    end 
) 
addEventHandler("onPlayerLogin", root, 
    function (old, new) 
        if not getAccountData(new, "ia:u") then 
        setAccountData(new, "ia:u", "0") 
        end 
    end 
) 
setTimer( 
    function () 
        for k,v in ipairs(getAccounts()) do 
            if getAccountData(v, "ia:u") then 
            setAccountData(v, "ia:u", tostring(tonumber(getAccountData(v, "ia:u") or 0) + 1)) 
                if dias_borrado <= getAccountData(v, "ia:u") then 
                removeAccount(v) 
                end 
            else 
            setAccountData(v, "ia:u", "0") 
            end 
        end 
    end 
, 86400000, 0) 

Link to comment
Yo más bien recomendaría que lo hicieras con un botón refresh, si claro está es un highscore. Así te evitas que te dé esos problemas de lag. La actualización sería para el jugador que solicite el refresh. Yo lo hago de esa forma y no me da lag. Y eso esa forma por que intenté de otras formas y me daba tu mismo problema y eso que había pocos jugadores registrados (300)

Y si hay algun genio que lo pulsa 8000 veces?, creo que mi metodo es mas efectivo

Link to comment
Yo más bien recomendaría que lo hicieras con un botón refresh, si claro está es un highscore. Así te evitas que te dé esos problemas de lag. La actualización sería para el jugador que solicite el refresh. Yo lo hago de esa forma y no me da lag. Y eso esa forma por que intenté de otras formas y me daba tu mismo problema y eso que había pocos jugadores registrados (300)

Y si hay algun genio que lo pulsa 8000 veces?, creo que mi metodo es mas efectivo

so algo asi pense ya que 1 no pasa mucho pero si varios se agarran a refresh.... explota el vps

EDIT:

De echo lo habia echo de esta forma:

players = { } 
--SERVER 
function top(source) 
  
  
for i, account in ipairs ( getAccounts( ) ) do 
  
table.insert (players,{element = getAccountName(account),kills = getAccountData ( account, "TK" ) or 0,deaths = getAccountData ( account, "TD" ) or 0, gang = getAccountData ( account, "gang" ) or "None"} ) 
  
end 
table.sort (players,function ( a, b ) return ( tonumber ( a.kills ) or 0 ) > ( tonumber ( b.kills ) or 0 ) end) 
  
local time = getRealTime() 
local hours = time.hour 
local minutes = time.minute 
local dia = time.monthday 
local mes = time.month 
local ano = time.year-100 
  
FechaUpdate = "["..dia.."/"..mes.."/"..ano.."] - "..hours..":"..minutes  
  
  
  
  
  
----outputChatBox(players[1].element, source, 255, 0, 0) 
  
end 

Link to comment
  • 2 weeks later...
  • Recently Browsing   0 members

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