parent
1bc541b2d1
commit
8e776dfa85
@ -1,2 +1,43 @@
|
||||
# Repeat_Commands
|
||||
Make easy loops from the input bar to execute multiple commands at once.
|
||||
This is a simple plugin that lets you Execute a command or commands multiple times.
|
||||
|
||||
# Syntax
|
||||
#[<start>,]stop[,<step>][,w<wait>] <command>
|
||||
|
||||
<start> is the value at which the loop begins. Default is 1.
|
||||
<stop> is the value at which the loop ends.
|
||||
<step> is the increment by which the counter changes each iteration. Default is
|
||||
1 if <start> is less than <stop>, or -1 if it is greater (to count
|
||||
backwards).
|
||||
<wait> is the number of seconds to pause between executing each command.
|
||||
Default is 0. Does not need to be a whole number (e.g., 1.5 and .2 are
|
||||
valid values).
|
||||
Any instance of '#' within the command itself is replaced with the current
|
||||
value of the loop counter. (Note that this means you cannot nest loops
|
||||
[e.g., by typing '#3 #5 say hello']. This is intentional.).
|
||||
Use two semicolons (;;) to insert a literal semicolon within the command.
|
||||
|
||||
# Examples
|
||||
Below is an example of the easiest and most common sort of way you might use this plugin. Really,
|
||||
most people shouldn't need anything more, but it's there just in case.
|
||||
|
||||
#3 get bread bag;;eat bread
|
||||
|
||||
This will get bread bag;eat bread thre times. You could add a delay between the eat and following
|
||||
get commands like this:
|
||||
|
||||
#3,w1 get bread bag;;eat bread
|
||||
|
||||
That will get bread bag;eat bread, wait one second, then get bread bag;eat bread again, wait
|
||||
another second, and get bread bag;eat bread a third time.
|
||||
|
||||
Insert '#' into the command to stand for the value of the loop counter variable. In other words,
|
||||
if you wanted to 'where' the first five goblins in the area, you could type this:
|
||||
|
||||
#5 where #.goblin
|
||||
|
||||
That will execute where 1.goblin, where 2.goblin... where 5.goblin.
|
||||
|
||||
Other info and examples are displayed when you install the plugin. Note: the MUD does not like
|
||||
receiving 100 commands in rapid succession. Limit your loops, or at least add a short wait if you
|
||||
really must send all those 100 commands, to avoid being disconnected.
|
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE muclient>
|
||||
|
||||
<muclient>
|
||||
<plugin
|
||||
name="Repeat_Commands"
|
||||
author="Areia"
|
||||
id="b7fed72f3de3ab87b4f7bab3"
|
||||
language="Lua"
|
||||
purpose="Execute a command multiple times"
|
||||
save_state="n"
|
||||
date_written="2020-11-24 02:30:00"
|
||||
requires="5.07"
|
||||
version="1.0"
|
||||
>
|
||||
<description trim="y">
|
||||
<![CDATA[
|
||||
]]>
|
||||
</description>
|
||||
|
||||
</plugin>
|
||||
|
||||
<include name="constants.lua"/>
|
||||
|
||||
|
||||
|
||||
<aliases>
|
||||
<alias
|
||||
match="^\#(?<stop>\d+)(?:,w(?<delay>\d*\.?\d+))?\s+(?<command>.+?)$"
|
||||
enabled="y"
|
||||
script="repeat_command"
|
||||
regexp="y"
|
||||
ignore_case="y"
|
||||
sequence="100"
|
||||
>
|
||||
</alias>
|
||||
<alias
|
||||
match="^\#(?<start>\d+),(?<stop>\d+)(?:,w(?<delay>\d*\.?\d+))?\s+(?<command>.+?)$"
|
||||
enabled="y"
|
||||
script="repeat_command"
|
||||
regexp="y"
|
||||
ignore_case="y"
|
||||
sequence="100"
|
||||
>
|
||||
</alias>
|
||||
<alias
|
||||
match="^\#(?<start>\d+),(?<stop>\d+),(?<step>-?\d+)(?:,w(?<delay>\d*\.?\d+))?\s+(?<command>.+?)$"
|
||||
enabled="y"
|
||||
script="repeat_command"
|
||||
regexp="y"
|
||||
ignore_case="y"
|
||||
sequence="100"
|
||||
>
|
||||
</alias>
|
||||
</aliases>
|
||||
|
||||
|
||||
|
||||
<triggers>
|
||||
</triggers>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
<![CDATA[
|
||||
require "wait"
|
||||
|
||||
function repeat_command(alias, line, wc)
|
||||
-- First make sure user isn't trying any funny business with nested loops.
|
||||
-- More for the user's sake than anything...
|
||||
if (wc.command:match("^#%d")) then
|
||||
ColourNote("silver", "black", "Unable to nest command repetition.")
|
||||
return
|
||||
end
|
||||
local start = wc.start and tonumber(wc.start) or 1
|
||||
local stop = tonumber(wc.stop) -- We always get at least this from the user
|
||||
-- If user gives step, use it. Otherwise, default to 1 if start < stop or -1 if start > stop
|
||||
local step = wc.step and tonumber(wc.step) or start < stop and 1 or -1
|
||||
local delay = wc.delay ~= "" and tonumber(wc.delay) or false
|
||||
wait.make(function()
|
||||
for i = start, stop, step do
|
||||
Execute(wc.command:gsub("#", i)) -- Replace '#' with the value of `i`
|
||||
if (delay) then
|
||||
wait.time(delay)
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function OnPluginInstall()
|
||||
ColourNote("silver", "black", "Usage: ", "yellow", "", "#[<start>,]stop[,<step>][,w<wait>] <command>")
|
||||
ColourNote("silver", "black", "<start> is the value at which the loop begins. Default is 1.")
|
||||
ColourNote("silver", "black", "<stop> is the value at which the loop ends.")
|
||||
ColourNote("silver", "black", "<step> is the increment by which the counter changes each iteration. Default is")
|
||||
ColourNote("silver", "black", " 1 if <start> is less than <stop>, or -1 if it is greater (to count")
|
||||
ColourNote("silver", "black", " backwards).")
|
||||
ColourNote("silver", "black", "<wait> is the number of seconds to pause between executing each command.")
|
||||
ColourNote("silver", "black", " Default is 0. Does not need to be a whole number (e.g., 1.5 and .2 are")
|
||||
ColourNote("silver", "black", " valid values).")
|
||||
ColourNote("silver", "black", "Any instance of '#' within the command itself is replaced with the current")
|
||||
ColourNote("silver", "black", " value of the loop counter. (Note that this means you cannot nest loops ")
|
||||
ColourNote("silver", "black", " [e.g., by typing '#3 #5 say hello']. This is intentional.).")
|
||||
ColourNote("silver", "black", "Use two semicolons (;;) to insert a literal semicolon within the command.")
|
||||
ColourNote("silver", "black", "Examples")
|
||||
ColourNote("silver", "black", "Say 'Hello' 3 times (most common usage).")
|
||||
ColourNote("yellow", "black", " #3 say Hello")
|
||||
ColourNote("silver", "black", "Say '5', '4'... '1'.")
|
||||
ColourNote("yellow", "black", " #5,1 say #")
|
||||
ColourNote("silver", "black", "Where 1.goblin, 2.goblin... 5.goblin with a 1-second wait in between.")
|
||||
ColourNote("yellow", "black", " #5,w1 where #.goblin")
|
||||
ColourNote("silver", "black", "Say '2', '4', '6'... '20'.")
|
||||
ColourNote("yellow", "black", " #2,20,2 say #")
|
||||
ColourNote("silver", "black", "get bread bag;eat bread 4 times with a short pause in between.")
|
||||
ColourNote("yellow", "black", " #4,w.5 get bread bag;;eat bread")
|
||||
end
|
||||
]]>
|
||||
</script>
|
||||
|
||||
|
||||
</muclient>
|
Loading…
Reference in new issue