Jump to content

Using Variable from macro in Lua Script is producing an error


Recommended Posts

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

There are a couple threads on the forums on how to use keybinds in your fightclass.
Yes it worked when warden was garbage and wRobot could just run whatever code unprotected.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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;


 

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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();
}

 

Link to comment
Share on other sites

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
×
×
  • Create New...