Jump to content

[Ayuda] Timers anti-flood


Recommended Posts

Holaa amigos de la forum de MTA SA xD

En esta ocasión ando con problemas con los timers con 2 scripts de mi server D:

El primero es mi panel VIP, el cual he creado desde 0 con ayuda de lLinux, el panel VIP tiene la opción de darte chaleco con un botón, y te lo pone al 100%, el problema es que los jugadores clickean muchas veces y si les estan disparando facilmente clickean muchas veces en el botón y de ese modo siempre les da el chaleco y jamás pueden matarlos de ese modo están abusando y no puedo darme cuenta, es por eso que quiero ponerle timers es decir, que cuando clickeen 1 vez no puedan volver a ponerse el chaleco durante 1 minuto , de ese modo no podrán abusar.

Lo mismo quiero hacer pero esta vez no es por GUI sino por comando /dm , cada vez que ponen /dm a ellos se le desactivan las armas y el HUD, no pueden disparar ni tampoco pueden matarlos, tiene ventaja si tu quieres ir libremente por el mpaa sin que te maten, pero... a veces lo que hacen es ACTIVARSE /dm lo cual bloquea las armas y no deja que te maten, entonces no pueden matarlos pero luego se lo desactivan , matan a su oponente , y se lo vuelven a activar en el instante para que no se lo puedan matar , todo eso lo usan BINDEADO, es por eso que quiero ponerle timers que pongan /dm y despues de 2 minutos no puedan volver a poner el comando nuevamente.

Aqui les dejo el codigo que triggerea del GUI del client hacia el server del panel VIP:

function ChalecoVIP ( ) 
  
setPedArmor (source,100) 
outputChatBox("[LPM-VIP] Chaleco setiado al 100%.",source,0,255,0,false) 
  
end 
addEvent( "ChalecoVIP", true ) 
addEventHandler( "ChalecoVIP", getRootElement(),ChalecoVIP )  

Y aqui les dejo el código del comando /dm :

No estan completos solo puse las partes más importantes ya que el código es muy largo.

Client

function pasivo() 
    if (modop == false) then 
        modop = true 
        addEventHandler ("onClientPlayerDamage", getLocalPlayer(), stopDamage) 
        addEventHandler ("onClientPlayerStealthKill", getLocalPlayer(), stopDamage) 
        addEventHandler ("onClientPedDamage", getLocalPlayer(), stopDamage) 
        setElementAlpha (getLocalPlayer(), 255) 
        toggleControl ("fire", false) 
        toggleControl ("aim_weapon", false) 
        toggleControl ("vehicle_fire", false) 
        toggleControl ("vehicle_secondary_fire ", false) 
        toggleControl ("next_weapon", false) 
        toggleControl ("previous_weapon", false) 
        showPlayerHudComponent ("weapon", false) 
        showPlayerHudComponent ("crosshair", false) 
        showPlayerHudComponent ("ammo", false) 
        triggerServerEvent("DmON", getLocalPlayer(), getLocalPlayer()) 
    else 
        modop = false 
        removeEventHandler ( "onClientPlayerDamage", getLocalPlayer(), stopDamage ) 
        removeEventHandler ( "onClientPlayerStealthKill", getLocalPlayer(), stopDamage ) 
        removeEventHandler ( "onClientPedDamage", getLocalPlayer(), stopDamage ) 
        setElementAlpha (getLocalPlayer(), 255) 
        toggleControl ("fire", true) 
        toggleControl ("aim_weapon", true) 
        toggleControl ("vehicle_fire", true) 
        toggleControl ("vehicle_secondary_fire ", true) 
        toggleControl ("next_weapon", true) 
        toggleControl ("previous_weapon", true) 
        showPlayerHudComponent ("weapon", true) 
        showPlayerHudComponent ("crosshair", true) 
        showPlayerHudComponent ("ammo", true) 
        toggleControl ("next_weapon", true) 
        toggleControl ("previous_weapon", true) 
        triggerServerEvent("DmOFF", getLocalPlayer(), getLocalPlayer()) 
    end 
end 
addEvent ("pasivo",true) 
addEventHandler ("pasivo",getLocalPlayer(),pasivo) 

Server

function comando(hitElement) 
if(isElement(hitElement)) and (getElementType (hitElement) == "player") then 
triggerClientEvent ("pasivo",hitElement) 
end 
end 
addCommandHandler ("dm",comando) 

Espero que puedan ayudarme, esto me ahorraría muchisimos problemas! Gracias

Link to comment

Agrega al client-side en la función que ejecuta el evento al clickear (cambia el nombre del botón ya que yo lo desconozco)

  
    guiSetEnabled(nombredelboton, false) 
    setTimer(guiSetEnabled, 15000, 1, nombredelboton, true) 
  

Para lo del pasivo agregale que cuando se lo active un elementData ej:

  
setElementData(player,"PasivoTime","oshezi") 
setTimer(removeElementData,60000,1,player,"PasivoTime") 
  

Luego agrégale un IF al else donde lo desactiva.

  
pasivotime = getElementData(player,"PasivoTime") 
if not pasivotime then 
  

Suerte!

Link to comment

Por que hiciste el comando del lado de server? lo pudiste hacer directo en el lado del cliente.

anti_pasivo_abuse = false -- antiabuso desactivado 
function pasivo() 
    if anti_pasivo_abuse then return end -- si el antiabuso esta activado, hasta aca llega la funcion por el [b]return[/b] 
    anti_pasivo_abuse = true -- activamos el antiabuso 
    setTimer(function() anti_pasivo_abuse = false end, 120000, 1) -- timer de 2 min, para desactivar el antiabuso 
    -- el resto de codigo 

no lo he probado

Al final te tiene que quedar algo así:

anti_pasivo_abuse = false 
  
function pasivo() 
    if anti_pasivo_abuse then return end 
    anti_pasivo_abuse = true 
    setTimmer(function() anti_pasivo_abuse = false end, 120000, 1) 
    if (modop == false) then 
        modop = true 
        addEventHandler ("onClientPlayerDamage", getLocalPlayer(), stopDamage) 
        addEventHandler ("onClientPlayerStealthKill", getLocalPlayer(), stopDamage) 
        addEventHandler ("onClientPedDamage", getLocalPlayer(), stopDamage) 
        setElementAlpha (getLocalPlayer(), 255) 
        toggleControl ("fire", false) 
        toggleControl ("aim_weapon", false) 
        toggleControl ("vehicle_fire", false) 
        toggleControl ("vehicle_secondary_fire ", false) 
        toggleControl ("next_weapon", false) 
        toggleControl ("previous_weapon", false) 
        showPlayerHudComponent ("weapon", false) 
        showPlayerHudComponent ("crosshair", false) 
        showPlayerHudComponent ("ammo", false) 
        triggerServerEvent("DmON", getLocalPlayer(), getLocalPlayer()) 
    else 
        modop = false 
        removeEventHandler ( "onClientPlayerDamage", getLocalPlayer(), stopDamage ) 
        removeEventHandler ( "onClientPlayerStealthKill", getLocalPlayer(), stopDamage ) 
        removeEventHandler ( "onClientPedDamage", getLocalPlayer(), stopDamage ) 
        setElementAlpha (getLocalPlayer(), 255) 
        toggleControl ("fire", true) 
        toggleControl ("aim_weapon", true) 
        toggleControl ("vehicle_fire", true) 
        toggleControl ("vehicle_secondary_fire ", true) 
        toggleControl ("next_weapon", true) 
        toggleControl ("previous_weapon", true) 
        showPlayerHudComponent ("weapon", true) 
        showPlayerHudComponent ("crosshair", true) 
        showPlayerHudComponent ("ammo", true) 
        toggleControl ("next_weapon", true) 
        toggleControl ("previous_weapon", true) 
        triggerServerEvent("DmOFF", getLocalPlayer(), getLocalPlayer()) 
    end 
end 

Para el del boton ya te dijeron, solo tienes que deshabilitar el boton y poner un timer para ativarlo denuevo.

Link to comment
  • Recently Browsing   0 members

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