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.
Entire forum
➜ MUSHclient
➜ General
➜ Command Throttling
Posting of new messages is disabled at present.
Refresh page
Posted by
| Mccane
(28 posts) Bio
|
Date
| Tue 29 Apr 2008 12:23 PM (UTC) |
Message
| Oh the MUD I play, you have a limit of five commands per second. Any additional commands will cause three seconds of freeze time in which you can't do anything for five seconds. I have created somewhat of a buffer zone to prevent myself from stepping over this five command limit. I basically made a timer that sets the variable Buffer to 0 every 1 second. I then made an alias that matches * (everything). First it checks the Buffer variable. If the variable is greater than or equal to 5, the command will not be sent. If it less than 5, it will send the command, and then add 1 to Buffer. Here is the alias and timer:
<aliases>
<alias
match="*"
enabled="y"
send_to="12"
keep_evaluating="y"
sequence="1"
>
<send>Buffer = tonumber(GetVariable("Buffer"))
if (Buffer >= 5) then
Note("Command not executed. You have exceeded the buffer.")
else
Send("%0")
Buffer = Buffer + 1
SetVariable("Buffer", Buffer)
end</send>
</alias>
</aliases>
<timers>
<timer enabled="y" second="1.00" send_to="12"
>
<send>SetVariable("Buffer", "0")</send>
</timer>
</timers>
Here is my dilemma. How can I incorporate this with my scripts without going through them all and adding in this buffer safety? Is there a way to make the Send function parse through this alias? Or is there some other method I could use to achieve the same result?
Thanks. | Top |
|
Posted by
| Cage_fire_2000
USA (119 posts) Bio
|
Date
| Reply #1 on Wed 30 Apr 2008 03:25 AM (UTC) |
Message
| How are you even sending 5 commands a second without cheating? Anyway, if you're using an alias to send multiple commands, you could use the send to speedwalk and then set the delay between commands to like 200 or above? | Top |
|
Posted by
| Mccane
(28 posts) Bio
|
Date
| Reply #2 on Wed 30 Apr 2008 09:34 AM (UTC) |
Message
| It's not cheating to command stack or script on this MUD. It is a balance feature to prevent people from spamming in excess of five commands or command flooding. I considered using speedwalk, but the problem is sometimes I might want all five commands to go at once instead of a certain time frame apart. Additionally, unless I create some sort of script to prevent it, if I use speedwalk, even commands such as 'look' or 'inv', or 'who' will be delayed by the set time when I don't want them to be. I guess I might just have to go through my scripts and wherever anything is sent to the MUD, have it add something to the Buffer variable... | Top |
|
Posted by
| Shaun Biggs
USA (644 posts) Bio
|
Date
| Reply #3 on Wed 30 Apr 2008 03:59 PM (UTC) Amended on Wed 30 Apr 2008 04:00 PM (UTC) by Shaun Biggs
|
Message
| If you want to have the command buffer automatically used, you can change the references in the script area. This may also break several scripts, but it does show a rough idea of how to set this up.
ReallySend = Send
Buffer = 0
Send = function( cmd )
if (Buffer >= 5) then
Note("Command not executed. You have exceeded the buffer.")
else
ReallySend( cmd )
Buffer = Buffer + 1
SetVariable("Buffer", Buffer)
end
end -- buffered Send
Actually, using something like this, you can set up a stack which will allow you to stack several commands and spit out the next 5 commands in a queue to the mud every second. Or as requested if you have not sent the maximum this second. |
It is much easier to fight for one's ideals than to live up to them. | Top |
|
Posted by
| Worstje
Netherlands (899 posts) Bio
|
Date
| Reply #4 on Wed 30 Apr 2008 06:12 PM (UTC) |
Message
| You can make a plugin to trap OnPluginSend(), see if it can send stuff. If it can't send something, add it to a queue. Have a timer that fires every second, and try to resend the first value in the queue. However, if it CAN send something in the OnPluginSend(), you check to see if it is the first value in the queue and remove that.
Additionally you might want to make it so you consider stuff being in the queue a 'non-send' situation, and add it to the queue instead. That way you'd force proper ordening of your commands, although it would be a pain to butt in.
I could script it for you if you'd like, although it'd have to wait a few hours. | Top |
|
Posted by
| Nick Gammon
Australia (23,122 posts) Bio
Forum Administrator |
Date
| Reply #5 on Wed 30 Apr 2008 09:31 PM (UTC) |
Message
| Yes I agree with Worstje. See the documentation for OnPluginSend.
http://www.gammon.com.au/scripts/doc.php?general=plugin_callbacks
Each line that is being proposed to be sent would need to be checked, like this:
- Check when the fifth-last line was sent. If the time of that is less than a second from now, queue the new line.
- If it is OK to send the line, send it and also remember the time it was sent in a table which remembers the last 5 line times.
Then you also need a timer that fires fairly frequently (say, every half second) which checks if there are commands in the queue, and if so, and you haven't yet exceeded your limit of 5 commands in the last second, pulls out one or more items from the queue and sends it.
There was a similar post six months ago:
http://www.gammon.com.au/forum/?id=8348
|
- Nick Gammon
www.gammon.com.au, www.mushclient.com | Top |
|
Posted by
| Nick Gammon
Australia (23,122 posts) Bio
Forum Administrator |
Date
| Reply #6 on Thu 01 May 2008 12:08 AM (UTC) |
Message
| See this post:
http://www.gammon.com.au/forum/?id=8634
I just wrote a plugin that should do what you need.
You won't need your alias any more, whatever you type is queued up, and then sent at an interval of 0.2 seconds per command, so you can't exceed 5 commands per second. |
- 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,964 views.
Posting of new messages is disabled at present.
Refresh page
top