Jump to content

[APORTE] ClearChat - Ultra optimizado


Recommended Posts

Posted (edited)

Bueno, tras estár pensando durante 15 minutos como optimizar un clear chat, se me ocurrió este script, no está testado,pero no veo errores de sintaxis, está publicado en la community si se desea

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

Client side - cc_client.lua
addEvent("clearchat:start", true) 
addEventHandler("clearchat:start", root, 
    function () 
    local lines = getChatboxLayout()["chat_lines"] 
        for i=1, lines do 
        outputChatBox(" ") 
        end 
        for i=1, lines*20 do 
        outputConsole(" ") 
        end 
    end 
) 
addEventHandler("onClientResourceStart", resourceRoot, 
    function () 
    triggerServerEvent("clearchat:playerready", localPlayer) 
    end 
) 

Server side - cc_server.lua
dl = {} 
addCommandHandler("cc", 
    function (source) 
        if not isGuestAccount(getPlayerAccount(source)) then 
            if hasObjectPermissionTo(source, "command.mute") then 
                for k,v in ipairs(getElementsByType("player")) do 
                    if dl[v] then 
                    triggerClientEvent(v, "clearchat:start", v) 
                    end 
                end 
            end 
        end 
    end 
) 
addEvent("clearchat:playerready", true) 
addEventHandler("clearchat:playerready", root, 
    function () 
    dl[client] = true 
    end 
) 
addEventHandler("onPlayerQuit", root, 
    function () 
        if dl[source] then 
        dl[source] = nil 
        end 
    end 
) 

META - meta.xml
<meta> 
    <info author="venadHD" type="script" version="1.0.0" name="vd_clearchat"/> 
    <script src="cc_client.lua" type='client'/> 
    <script src="cc_server" /> 
</meta> 

Si hay algo mal hecho, avisen

Edited by Guest
Posted
En vez de triggear el evento para cada jugador, por que no usas root?

Imagina que hay 100 jugadores, por tanto

100 x 12 (lineas por defecto, creo) = 1200 lineas a generar

Y en console

100 x (10*20) = 200*100 = 20.000 lineas

Una carga para el servidor innecesaria cuando puedes repartir la carga entre los clientes

Ademas de ahorrar un buen cacho de ancho de banda

Posted · Hidden
Hidden

Me refiero asi:

  
addCommandHandler("cc", 
    function (source) 
        if not isGuestAccount(getPlayerAccount(source)) then 
            if hasObjectPermissionTo(source, "command.mute") then 
                 triggerClientEvent("clearchat:start",  resourceRoot) 
            end 
        end 
    end 
) 

En el caso de tu version, imagina que tienes 100 jugadores, allí estas ejecutando 100 veces la funcion innecesariamente cuando puede usar el argumento predeterninado root.

Posted
Me refiero asi:
  
addCommandHandler("cc", 
    function (source) 
        if not isGuestAccount(getPlayerAccount(source)) then 
            if hasObjectPermissionTo(source, "command.mute") then 
                 triggerClientEvent("clearchat:start",  resourceRoot) 
            end 
        end 
    end 
) 

En el caso de tu version, imagina que tienes 100 jugadores, allí estas ejecutando 100 veces la funcion innecesariamente cuando puede usar el argumento predeterninado root.

en que se diferencia resourceRoot de root en este caso en triggerClientEvent?

Realmente lo estas ejecutando 100 veces igual, ya que es para cada jugador aunque pongas root

Posted · Hidden
Hidden

Deshice el for-loop lo que ahorra CPU, y el resourceRoot se debe utilizar cuando no es necesario mandar ningun elemento ya que tambien ahorra CPU según dice la wiki.

Posted
Deshice el for-loop lo que ahorra CPU, y el resourceRoot se debe utilizar cuando no es necesario mandar ningun elemento ya que tambien ahorra CPU según dice la wiki.

Teoricamente resourceRoot manda a todos los elementos creados por el script, luego pruebo y edito este post

Posted
for i=1, lines*20 do 
        outputConsole(" ") 
end 

¿Por que hiciste esa aritmetica?

A la console le puedes dar con el scroll para arriba, igual que el chatbox, siempre se puede editar para que aparezcan más como ultimo recurso

  • 3 weeks later...
Posted

¿Y no es lo mismo hacer esto? Lo he probado y hace lo mismo.

addCommandHandler ( "cc", 
    function () 
        for i=1,20 do 
            outputChatBox(" ") 
        end 
        for i=1,20 do 
            outputConsole(" ") 
        end 
    end 
) 

PD: O esto mismo

addCommandHandler ( "cc", 
    function () 
        for i=1,20 do 
            outputChatBox(" ") 
        outputConsole(" ") 
        end 
    end 
) 

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