Skip to content
View in the app

A better way to browse. Learn more.

WRobot

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Using Variable from macro in Lua Script is producing an error

Featured Replies

I have a Macro: 

/run if EnableAoe == "1" or EnableAoe == nil then EnableAoe = "0"; print("Disabled AoE") else EnableAoe = "1" print("Enabled AoE") end

And a LUA script condition:

print(EnableAoe)

When I run this it works fine, but as soon as the "EnableAoe" variable is set, the fight class stop working until I reload the ui. The variable is printed just fine though and it doesn't matter if it is a print or not, as soon as I have any reference to that variable that is hit, this happens. Meaning, if I put it in an "if 1 == 2", the issue is not there. Even if I put the spell with the condition as the lowest priority so it is never hit it is a problem. Even if I set the variable to null again, it is a problem. The only thing that fixes it is a reload of the UI.

The error I get in game is this: 

A macro script has been blocked from an action only available to the Blizzard UI.

I have tried both with and without addons. I have tried looking in the taint.log file, and it is spammed hard by wrobot, so it is a bit hard for me to figure what is wrong.

EDIT:
It seems like the problem only occurs after the first time the variable has been accessed. If I put the spell with the Lua Script to the bottom, it works until that spell has been called. If I remove the spell or the condition, the problem persists until the ui has been reloaded.

You're trying to call secure (more or less) code from insecure code (wRobot unlocks Lua). The environments clash.
No, there is no fix for this except using C# and disabling Lua protection for the call you use to extract the EnableAoe variable from the client's memory.

However, this instantly puts you at risk of being banned.

  • Author

I see. Thank you. Is there any way to pass data to wrobot from in game? I just want to toggle a couple of variables using macros instead of having to stop the bot, switch a variable and start it again. It would also be fine if I could draw a gui using wrobot or something similar to switch a variable directly there.

Also, has this behavior changed? I remember this working a couple of years ago. There are also references to this exact thing around the forums.

  • Author

I see what you mean, but it is the other way around I need. I need to pass information from wow to wrobot. Do you mean I can change my keybinding ingame and read that in wrobot or what do you mean? It is just a boolean value I need, so whatever workaround I can use would be fine.

I mean instead of hitting an ingame macro to change a Lua variable, just make your fightclass listen to keys (examples on the forums, by reapler I believe).

Or you could just use the Lua.LuaDoString calls that don't use an unlocked Lua unevironment. If you're on vanilla/tbc you'll be fine. Any other expansion you're taking risks. Although as long as you only read from Lua and don't execute any functions, you should be fine.

Edited by Matenia

  • Author

I tried using Lua.LuaDoString, and I get the same problem it seems.

Lua.LuaDoString<bool>(@"
if (EnableAoe == ""0"") then
    return false 
else
     return true 
end")

 

image.png.7c2f7077658b07cd41cf5ac7c9d8d92e.png

Check the PartyHelper project, it uses LuaDoString with a parameter that enables you to call insecure code.
Or do:

 

Lua.SecureLuaCall = false;
Lua.LuaDoString("");
Lua.SecureLuaCall = true;


 

  • Author

The robotmanager.helpful.var, does not seem to return anything, not sure what variable it is trying to find, the documentation isn't that helpful. Also, I am doing this using the FightClass creator and I don't think I can have multiline c# in it's conditions unfortunately. I may have to convert everything to c# because of this..

  • Author

I finally made it work. For anyone interested here is my solution.

I converted the spell to a c# script and made the following:

// Rain of Fire
Lua.SecureLuaCall = false;
string canCast = Lua.LuaDoString<string>("return EnableAoe");
Lua.SecureLuaCall = true;

if (canCast != "0") {
    var rof = new wManager.Wow.Class.Spell("Rain of Fire");
    rof.Launch();
}

 

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.