Check object action exists (Lua Script)

  • #1, by darren-beckettTuesday, 15. September 2015, 15:05 5 years ago
    Can somebody please fix my script?

    if game.CurrentObject.ObjectActions[DoubleClick]:isEmpty() then
    print("No DoubleClick Action")
    end

    Error: attempt to index a nil value

    Great Poster

    351 Posts


  • #2, by afrlmeTuesday, 15. September 2015, 15:57 5 years ago
    hmm... you forgot to wrap the name of the object action in "these", like so... "Double click".

    Imperator

    6842 Posts

  • #3, by darren-beckettTuesday, 15. September 2015, 20:33 5 years ago
    No, it says
    Error: DoubleClick could not be found in linklist

    Great Poster

    351 Posts

  • #4, by sebastianTuesday, 15. September 2015, 20:36 5 years ago
    erm yeah... what do you want to check? If there is a Double Click Action, but empty or If there is a Double Click Action at all?

    Thread Captain

    2337 Posts

  • #5, by afrlmeTuesday, 15. September 2015, 20:53 5 years ago
    I'm guessing they want to check if the action exists or not so they can call another action maybe?

    It's not DoubleClick, it's Double click. Table & field names are case sensitive. They have to be written exactly as they are inside of the editor.

    Example: I have a command called left_click, now to access the action for that inside of the current object below the cursor I could do something like...
    if game.CurrentObject.ObjectActions["'left_click' executed"] ~= nil then
    print("exists")
    else
    print("does not exist")
    end
    1
    2
    3
    4
    5
    6

    ... I have no idea if what I've just written is correct though as I'm writing off the top of my head.

    Imperator

    6842 Posts

  • #6, by darren-beckettTuesday, 15. September 2015, 23:10 5 years ago
    Still not working.
    I have a DoubleClick action and the object below the cursor does not have a DoubleClick action assigned (It only has a LeftClick). Whichever way I write the code, it returns nil or could not be found in linklist.

    Great Poster

    351 Posts

  • #7, by sebastianTuesday, 15. September 2015, 23:46 5 years ago
    thats not an action you have there. these are all buttons

    Thread Captain

    2337 Posts

  • #8, by darren-beckettTuesday, 15. September 2015, 23:56 5 years ago
    These are what I select as actions for my objects.
    The objects all have actions for when the LeftClick or DoubleClick is Executeted on it.

    Great Poster

    351 Posts

  • #9, by afrlmeWednesday, 16. September 2015, 00:17 5 years ago
    Look at my example script above.

    If you are talking about accessing an executed action inside of an object then it would be: "'DoubleClick' executed".

    * edit: I completely forgot about the command checker script I wrote ages ago. Might serve as a useful basis but not as it currently is...

    local act = game.CurrentObject.ObjectActions

    -- iterate through the object list with a for loop...
    for i = 1, #act do
    if i < #act then if act[i]:getName() == "'DoubleClick' executed" then
    print("DoubleClick exists"); break
    elseif i == #act and act[i]:getName() ~= "'DoubleClick' executed" then
    print("DoubleClick does not exist")
    end
    end
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    Imperator

    6842 Posts

  • #10, by darren-beckettWednesday, 16. September 2015, 13:53 5 years ago
    Thanks for your help, I've now created a function i can use globally:

    function objectActionExists(obj, actionName)
    local strActionName = "'" .. actionName .. "' executed"
    local act = obj.ObjectActions

    -- iterate through the object list with a for loop...
    for i = 1, #act do
    if act[i]:getName() == strActionName then
    return true
    end
    end
    return false
    end
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    Great Poster

    351 Posts

  • #11, by LebosteinWednesday, 16. September 2015, 13:56 5 years ago

    Key Killer

    601 Posts

Write post