Notice: Any messages purporting to come from this site telling you that your password has expired, or that you need to verify your details, confirm your email, resolve issues, making threats, or asking for money, are
spam. We do not email users with any such messages. If you have lost your password you can obtain a new one by using the
password reset link.
Due to spam on this forum, all posts now need moderator approval.
Entire forum
➜ MUSHclient
➜ Bug reports
➜ AcceleratorTo(key, "scriptfunc()", 12) executes in world
AcceleratorTo(key, "scriptfunc()", 12) executes in world
|
It is now over 60 days since the last post. This thread is closed.
Refresh page
Posted by
| Worstje
Netherlands (899 posts) Bio
|
Date
| Sat 26 Sep 2009 05:13 PM (UTC) |
Message
| AcceleratorTo while using the Send To Script (12) option ends up executing the script in the world environment, rather than the environment of the plugin that registered the accelerator. I perceive this to be a bug, given the design of MUSHclient in other similar areas:
- Timers added using this option execute in the plugin.
- Triggers added using this option execute in the plugin.
- Aliases added using this option execute in the plugin.
The reason, as I understand, for the above functions to run in their own plugin is because plugins are not supposed to be able to interfere with the main world, at least not on a script level (hell, you can't even know if the main world is using Lua or VBScript, so it would never be reliable either).
Test case:
--Put this in a plugin:
AcceleratorTo ("Numpad0", "test_func()", 12)
function test_func()
Note("Plugin got called.")
end
And execute this in your world (assuming Lua):
function test_func()
Note("MAIN WORLD got called. This is bad!")
end
Guess which one shows up when you hit the Numpad0 button? :) | Top |
|
Posted by
| Twisol
USA (2,257 posts) Bio
|
Date
| Reply #1 on Sat 26 Sep 2009 07:08 PM (UTC) |
Message
| Gack! You know, I was just going to post about this, but I got ninja'd. :( My novice opinion is that it's not saving the context of the accelerator (the plugin/world ID or whatnot), so it's calling to the world. Maybe if the accelerators used the same (or similar) mechanism as the OnPlugin* callbacks? |
'Soludra' on Achaea
Blog: http://jonathan.com/
GitHub: http://github.com/Twisol | Top |
|
Posted by
| Worstje
Netherlands (899 posts) Bio
|
Date
| Reply #2 on Sat 26 Sep 2009 08:23 PM (UTC) |
Message
| I think the trigger/timer/aliases (or TTA's for short from here on forth) are better comparisons than the OnPlugin* callbacks, which are a different beast. After all, those are a simple matter of testing the script for a function and executing it, whereas the sendto.script method is a wholly other beast.
TTA's support everything scriptingwise. You can assign variables etc, it is not limited to a specific function.
Since you'd want AcceleratorTo(key, "keypressed = true", 12) to work as well for whatever reason (people will find one, trust me), it can't be a callFunction() kind of execution, but has to be a executeScript() kind of method to invoke the script.
Here's an example. Suppose you use the keypad for various affairs. Do you want to make seperate functions to handle each key? Eg... (assuming a script function callback):
AcceleratorTo("Numpad0", "KeyPressNumpadZero", 12);
AcceleratorTo("Numpad1", "KeyPressNumpadOne", 12);
AcceleratorTo("Numpad2", "KeyPressNumpadTwo", 12);
AcceleratorTo("Numpad3", "KeyPressNumpadThree", 12);
...
That would be troublesome. All you can do is call functions. Better would be, with it working as a script like right now:
AcceleratorTo("Numpad0", "KeyPress(0)", 12);
AcceleratorTo("Numpad1", "KeyPress(1)", 12);
AcceleratorTo("Numpad2", "KeyPress(2)", 12);
AcceleratorTo("Numpad3", "KeyPress(3)", 12);
...
That way you can re-use the same function.
To explain in another way... TTA's have 'send to script'. That executes code. TTA's also have a Script field. Which is like the callback you suggest. The latter is a lot more limited, and since Accelerators() aren't exactly full objects like TTA's are, you will want the flexibility. Right now, it is already implemented as a 'send to script', which is good, so that should definitely not change. Callbacks would simply end up as an inconsistency with the rest of similar functions.
| Top |
|
Posted by
| Twisol
USA (2,257 posts) Bio
|
Date
| Reply #3 on Sat 26 Sep 2009 09:37 PM (UTC) |
Message
| Point taken! All a fix would really have to do to run that accelerator, as far as I know, is store the world/plugin ID where it occurred and use that one's script engine to run the script, then. |
'Soludra' on Achaea
Blog: http://jonathan.com/
GitHub: http://github.com/Twisol | Top |
|
Posted by
| Nick Gammon
Australia (23,158 posts) Bio
Forum Administrator |
Date
| Reply #4 on Sat 26 Sep 2009 11:09 PM (UTC) |
Message
| Point taken. When accelerators just did an Execute it didn't matter. I'll have to store the plugin ID with each accelerator. |
- Nick Gammon
www.gammon.com.au, www.mushclient.com | Top |
|
Posted by
| Fiendish
USA (2,537 posts) Bio
Global Moderator |
Date
| Reply #5 on Thu 16 Jun 2011 08:29 AM (UTC) |
Message
| Did you decide to not fix this? I suppose it's not the end of the world to use CallPlugin. |
https://github.com/fiendish/aardwolfclientpackage | Top |
|
Posted by
| Nick Gammon
Australia (23,158 posts) Bio
Forum Administrator |
Date
| Reply #6 on Thu 16 Jun 2011 10:59 PM (UTC) |
Message
| I must have forgotten about it.
Would you think that (say) send-to-variable would then send to a plugin's variable rather than the main world file's variable? |
- Nick Gammon
www.gammon.com.au, www.mushclient.com | Top |
|
Posted by
| Nick Gammon
Australia (23,158 posts) Bio
Forum Administrator |
Date
| Reply #7 on Thu 16 Jun 2011 11:12 PM (UTC) |
Message
| Actually send-to-variable doesn't work in accelerators anyway.
|
- Nick Gammon
www.gammon.com.au, www.mushclient.com | Top |
|
Posted by
| Nick Gammon
Australia (23,158 posts) Bio
Forum Administrator |
Date
| Reply #8 on Thu 16 Jun 2011 11:27 PM (UTC) |
Message
| Suggestion implemented in version 4.76. |
- Nick Gammon
www.gammon.com.au, www.mushclient.com | Top |
|
The dates and times for posts above are shown in Universal Co-ordinated Time (UTC).
To show them in your local time you can join the forum, and then set the 'time correction' field in your profile to the number of hours difference between your location and UTC time.
24,759 views.
It is now over 60 days since the last post. This thread is closed.
Refresh page
top