Jump to content

removeEventHandler inside addEventHandler


kevenvz

Recommended Posts

Hey I got a problem, I think an average scripter can read this code:

function dxMoveElement(dxElement,endX,endY,speed) 
  local posX = getElementData(dxElement,"posX") 
  local posY = getElementData(dxElement,"posY") 
  addEventHandler("onClientRender",root, 
  function moveElement(posX,posY) 
    if (posX > endX) then 
      setElementData(dxElement,"posX",posX - speed) 
    elseif (posX < endX) then 
      setElementData(dxElement,"posX",posX + speed) 
    end 
    if (posY > endY) then 
      setElementData(dxElement,"posX",posY - speed) 
    elseif (posY < endY) then 
      setElementData(dxElement,"posX",posY + speed) 
    end 
    if (posY == endY) and (posX == endX) then 
      removeEventHandler("onClientRender",root,moveElement) 
    end 
  end) 
end 

So I got this bug:

ERROR: Loading script failed: userpanel/dxgui.lua:5: '(' expected near 'moveElement' 

Can anybody say what is wrong with the code? So I can fix it?

Link to comment
  • Moderators
function moveElement(posX,posY) 
    if (posX > endX) then 
      setElementData(dxElement,"posX",posX - speed) 
    elseif (posX < endX) then 
      setElementData(dxElement,"posX",posX + speed) 
    end 
    if (posY > endY) then 
      setElementData(dxElement,"posX",posY - speed) 
    elseif (posY < endY) then 
      setElementData(dxElement,"posX",posY + speed) 
    end 
    if (posY == endY) and (posX == endX) then 
      removeEventHandler("onClientRender",root,moveElement) 
    end 
end 
  
  
  
function dxMoveElement(dxElement,endX,endY,speed) 
  local posX = getElementData(dxElement,"posX") 
  local posY = getElementData(dxElement,"posY") 
  addEventHandler("onClientRender",root,moveElement) 
end 

addEventHandler("onClientRender",root,

function moveElement(posX,posY)

end)

Link to comment

That will not work IIYAMA, addEventHandler doesn't take arguments.

Do this:

function() 
    if (posX > endX) then 
      setElementData(dxElement,"posX",posX - speed) 
    elseif (posX < endX) then 
      setElementData(dxElement,"posX",posX + speed) 
    end 
    if (posY > endY) then 
      setElementData(dxElement,"posX",posY - speed) 
    elseif (posY < endY) then 
      setElementData(dxElement,"posX",posY + speed) 
    end 
    if (posY == endY) and (posX == endX) then 
      removeEventHandler("onClientRender",root,moveElement) 
    end 
end 
  
  
  
function dxMoveElement(dxElement,endX,endY,speed) 
  local posX = getElementData(dxElement,"posX") 
  local posY = getElementData(dxElement,"posY") 
  addEventHandler("onClientRender",root,moveElement) 
end 

I removed the name and arguments, like so:

function moveElement(posX,posY)

The reason it compared two nils is because you were redeclaring the local when you made the function instead of inheriting the local environment the stack above it.

Also, your method is inefficient.

Link to comment

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