Jump to content

Help with onClientRender event handler


f8upd8

Recommended Posts

Posted

I need to create a system, that capable of draw text above elements heads and delete it. And there is my problem

Let's assume that i did it via onClientRender.. So... And then i wanted to erase text. How can i remove event handler? I can't send my text arguments direct to onClientRender, so i need to use abstract function () inside onClientRender. And.. Is there way to remove handler? My server has a number of onClientRender handlers and won't delete incorrect handler.

That looks like:

ClientSide.
 

addEvent("drawTextForElement", true)
addEventHandler("drawTextForElement", getRootElement(), function ()
    drawTextAbove(source, dText, dFont, dZize, dColor)
end)

function drawTextAbove(source, dText, dFont, dZize, dColor)
    local dText, dFont, dZize, dColor = dText, dFont, dZize, dColor
    local dElement = source
    addEventHandler("onClientRender", source, function ()
        dxDrawTextOnElement(dElement ,"Kurisu",1,20,0,0,255,255,1,"arial")
    end)
end

ServerSide:

        triggerClientEvent(getRootElement(), "drawTextForElement", kurisu)

 

  • MTA Team
Posted (edited)

Store it as so

local myFunction

function drawTextAbove(source, dText, dFont, dZize, dColor)
    local dText, dFont, dZize, dColor = dText, dFont, dZize, dColor
    local dElement = source
	myFunction = function ()
        dxDrawTextOnElement(dElement ,"Kurisu",1,20,0,0,255,255,1,"arial")
    end	
    addEventHandler("onClientRender", source, myFunction)
end

And further to what you're trying to achieve:

local myFunction
local renderHandler = false

addEvent("drawTextForElement", true)
addEventHandler("drawTextForElement", getRootElement(), function ()
	if renderHandler then
		removeEventHandler("onClientRender", source, myFunction)
		renderHandler = false
	end
    drawTextAbove(source, dText, dFont, dZize, dColor)
end)

function drawTextAbove(source, dText, dFont, dZize, dColor)
    local dText, dFont, dZize, dColor = dText, dFont, dZize, dColor
    local dElement = source
	myFunction = function ()
        dxDrawTextOnElement(dElement ,"Kurisu",1,20,0,0,255,255,1,"arial")
    end	
    addEventHandler("onClientRender", source, myFunction)
	renderHandler = true
end

A better way would be to just make your 'dText' (and such other variables) global, or atleast within the scope of this whole script; then create a named function instead of anonymous one.

Edited by LopSided_
  • Like 1
Posted
15 minutes ago, LopSided_ said:

Store it as so


local myFunction

function drawTextAbove(source, dText, dFont, dZize, dColor)
    local dText, dFont, dZize, dColor = dText, dFont, dZize, dColor
    local dElement = source
	myFunction = function ()
        dxDrawTextOnElement(dElement ,"Kurisu",1,20,0,0,255,255,1,"arial")
    end	
    addEventHandler("onClientRender", source, myFunction)
end

And further to what you're trying to achieve:


local myFunction
local renderHandler = false

addEvent("drawTextForElement", true)
addEventHandler("drawTextForElement", getRootElement(), function ()
	if renderHandler then
		removeEventHandler("onClientRender", source, myFunction)
		renderHandler = false
	end
    drawTextAbove(source, dText, dFont, dZize, dColor)
end)

function drawTextAbove(source, dText, dFont, dZize, dColor)
    local dText, dFont, dZize, dColor = dText, dFont, dZize, dColor
    local dElement = source
	myFunction = function ()
        dxDrawTextOnElement(dElement ,"Kurisu",1,20,0,0,255,255,1,"arial")
    end	
    addEventHandler("onClientRender", source, myFunction)
	renderHandler = true
end

A better way would be to just make your 'dText' (and such other variables) global, or atleast within the scope of this whole script; then create a named function instead of anonymous one.

Oh thank you! Your solution of function deanonymization fits perfectly!

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