Jump to content

Sistema de Ad(Ayuda)


#Dv^

Recommended Posts

Hola!

¿Cómo hago para que este sistema de advertencias luego de que llegue a 3 advertencias de "ban" de 30 minutos?

Y que en el motivo del kick le salga al que fue expulsado la "razón", es decir la 3 advertencia que se le dio sea el motivo del kick

Muchas Gracias

  
function getPlayerFromNamePart(name) 
  
    local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil 
  
    if name then 
  
        for _, player in ipairs(getElementsByType("player")) do 
  
            local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower() 
  
            if name_:find(name, 1, true) then 
  
                return player 
  
            end 
  
        end 
  
    end 
  
end 
  
  
  
function warnPlayer_CMD(thePlayer, theCMD, theTarget, ...) 
 local accN = getAccountName ( getPlayerAccount (thePlayer) ) 
local groupName = "Admin" or "Moderator" or "SuperModerator" or "Console" -- you can add more 
if groupName then 
    if theTarget ~= nil and isObjectInACLGroup ("user."..accN,aclGetGroup (groupName) ) -- missing bracket 
        
        then 
  
        local theTargetElement = getPlayerFromNamePart(theTarget) 
  
        if(getElementType(theTargetElement) == "player") then 
  
            local allArgs = {...} 
            local data = getElementData(theTargetElement,"warnC")or 0 
            local theReason = table.concat(allArgs, " ") 
            
            setElementData(theTargetElement,"warnC", data + 1) 
            outputChatBox("#ff0000[ADVERTENCIA]: "..getPlayerName(thePlayer).."#FFFFFF advertio a "..getPlayerName(theTargetElement).." ("..tostring(data).."/3)", getRootElement(), 255, 0, 0, true) 
            outputChatBox("#ff0000[ADVERTENCIA]: #ffffffRazón: #FFFFFF("..tostring(theReason)..")", getRootElement(), 255, 0, 0, true) 
  
        else 
  
            outputChatBox("#ff0000[ADVERTENCIA]: #ffffffError! Codigo: /ad [player] [razon]", thePlayer, 255, 0, 0, true) 
              end 
        end 
  
    end 
  
end 
  
addCommandHandler("ad", warnPlayer_CMD, false) 

Link to comment

Intenta con esto:

  
adverts_command = "ad"; 
adverts_ACL = {"Admin", "SuperModerator", "Moderator", "Console"}; 
  
adverts_mes_1 = "#ff0000[ADVERTENCIA]: %s#FFFFFF ha advertido a %s (%d/3)"; 
adverts_mes_2 = "#ff0000[ADVERTENCIA]: %s#FFFFFF ha acumulado el maximo de advertencias consecutivamente, por consecuente ha sido expulsado"; 
  
adverts_reason = " Razon: %s"; 
  
adverts_err_1 = "You must be a member of the staff in order to use this command."; 
adverts_err_2 = "No target was found."; 
adverts_data_key = {"history", "current"}; 
  
addCommandHandler(adverts_command,  
    function (a, _, c, ...) 
        if ( not isGuestAccount(getPlayerAccount(a)) ) then 
            local __isAdmin = 0; 
            for _, aclName in ipairs(adverts_ACL) do 
                if ( isObjectInACLGroup("user."..(getAccountName(getPlayerAccount(a))), aclGetGroup(aclName)) ) then 
                    __isAdmin = 1; 
                    break; 
                end 
            end 
  
            if ( __isAdmin ~= 0 ) then 
                local target = getPlayerFromPartialName(c); 
                if ( target ) then 
                    if ( not isGuestAccount(getPlayerAccount(target)) ) then 
                        local t_account = getPlayerAccount(target); 
                        local t_c_warnings = getAccountData(t_account, adverts_data_key[2]) or 0; 
                        local t_h_warnings = getAccountData(t_account, adverts_data_key[1]) or 0; 
  
                        setAccountData(t_account, adverts_data_key[1], t_h_warnings+1); 
  
                        if ( ... ) then 
                            local reason = table.concat({...}, " "); 
                        end 
  
                        if ( t_c_warnings == 2 ) then 
                            __reason = adverts_mes_2:format(getPlayerName(target)); 
                            if ( reason ) then 
                                __reason = __reason .. ( adverts_reason:format(reason) ); 
                            end 
                            kickPlayer(target, a, __reason) 
                            setAccountData(t_account, adverts_data_key[2], 0); 
                        else 
                            setAccountData(t_account, adverts_data_key[2], t_c_warnings+1); 
                            __reason = adverts_mes_1:format(getPlayerName(a), getPlayerName(target), t_c_warnings+1); 
                            if ( reason ) then 
                                __reason = __reason .. ( adverts_reason:format(reason) ); 
                            end 
                            outputChatBox(__reason) 
                        end 
                else 
                    outputChatBox(adverts_err_2, a); 
                end 
            else 
                outputChatBox(adverts_err_1, a); 
            end 
        end 
    end 
) 
  
  
  
  
function getPlayerFromPartialName(name) 
    local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil 
    if name then 
        for _, player in ipairs(getElementsByType("player")) do 
            local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower() 
            if name_:find(name, 1, true) then 
                return player 
            end 
        end 
    end 
end 

No comprendí a qué te referías con lo del ban, el script que te dejé arriba debería luego de la tercer advertencia expulsar al jugador (kickear) y reiniciarle las advertencias.

Link to comment

Lo siento xD

     
adverts_command = "ad"; 
adverts_ACL = {"Admin", "SuperModerator", "Moderator", "Console"}; 
  
adverts_mes_1 = "#ff0000[ADVERTENCIA]: %s#FFFFFF ha advertido a %s #FF0000(%d/3)"; 
adverts_mes_2 = "Demasiadas advertencias, fuiste expulsado(30 minutos)"; 
  
adverts_reason = " [Razón]: #FFFFFF%s"; 
  
adverts_err_1 = "#2971D5[#4E5861AD#2971D5]#FFFFFF Sintaxis invalida! Use /ad [nombre]."; 
adverts_err_2 = "#2971D5[#4E5861AD#2971D5]#FFFFFF No se encontró el objectivo."; 
adverts_data_key = {"history", "current"}; 
  
addCommandHandler(adverts_command, 
    function (a, _, c, ...) 
        if ( not isGuestAccount(getPlayerAccount(a)) ) then 
            local __isAdmin = 0; 
            for _, aclName in ipairs(adverts_ACL) do 
                if ( isObjectInACLGroup("user."..(getAccountName(getPlayerAccount(a))), aclGetGroup(aclName)) ) then 
                    __isAdmin = 1; 
                    break; 
                end 
            end 
  
            if ( __isAdmin ~= 0 ) then 
                local target = getPlayerFromPartialName(c); 
                if ( target ) then 
                    if ( not isGuestAccount(getPlayerAccount(target)) ) then 
                        local t_account = getPlayerAccount(target); 
                        local t_c_warnings = getAccountData(t_account, adverts_data_key[2]) or 0; 
                        local t_h_warnings = getAccountData(t_account, adverts_data_key[1]) or 0; 
  
                        setAccountData(t_account, adverts_data_key[1], t_h_warnings+1); 
  
                        if ( ... ) then 
                            reason = table.concat({...}, " "); 
                        end 
  
                        if ( t_c_warnings == 2 ) then 
                            __reason = adverts_mes_2:format(getPlayerName(target)); 
                            if ( reason ) then 
                                __reason = __reason .. ( adverts_reason:format(reason) ); 
                            end 
                            banPlayer(target,a, __reason, 30min) 
                            setAccountData(t_account, adverts_data_key[2], 0); 
                        else 
                            setAccountData(t_account, adverts_data_key[2], t_c_warnings+1); 
                            __reason = adverts_mes_1:format(getPlayerName(a), getPlayerName(target), t_c_warnings+1); 
                            if ( reason ) then 
                                __reason = __reason .. ( adverts_reason:format(reason) ); 
                            end 
                            outputChatBox(""..__reason.." ", root, 255, 0, 0, true) 
                             
                             
                        end 
                else 
                    outputChatBox(""..adverts_err_2.."", source, 255, 0, 0, true); 
                end 
            else 
                outputChatBox(""..adverts_err_1.."", source, 255, 0, 0, true); 
            end 
        end 
    end 
end 
) 
  
  
  
  
function getPlayerFromPartialName(name) 
    local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil 
    if name then 
        for _, player in ipairs(getElementsByType("player")) do 
            local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower() 
            if name_:find(name, 1, true) then 
                return player 
            end 
        end 
    end 
end 

Link to comment

Gracias men, seguiré leyendo sobre esto por que me embola xD

Aparte no logro entender como se usa el getTickCount()

Leí en la Wiki pero no se como usarlo en mi script que hice

Osea quiero darle tiempo al uso de comandos en el servidor, cuando alguien ingresa el comando /hola por ejemplo todos tengan que esperar 30 segundos para usarlo, pero me embola y no se como aplicarlo

Link to comment
Gracias men, seguiré leyendo sobre esto por que me embola xD

Aparte no logro entender como se usa el getTickCount()

Leí en la Wiki pero no se como usarlo en mi script que hice

Osea quiero darle tiempo al uso de comandos en el servidor, cuando alguien ingresa el comando /hola por ejemplo todos tengan que esperar 30 segundos para usarlo, pero me embola y no se como aplicarlo

getTickCount devuelve un número en milisegundos, este número continuará aumentando infinitamente.

Si ahora llamo la función getTickCount y me devuelve 1435133 en un segundo me devolverá 1436133 (1435133+1000ms[1 seg]).

Con esa función, dentro de un evento de renderizado (el cual es "llamado" cada vez que el tick aumenta su valor) puedes saber cuánto tiempo ha pasado.

Link to comment
  • Recently Browsing   0 members

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