Numerous Empathing and Siphoning enhancements

Siphoners will now call out a maximum of 5 times that they’re
exhausted, rather than spamming the hell out of the ship. Also, as long
as the empath is able to cast Clarity, whenever the ship is shockwaved,
the empath will now clarity the chair so they can make their escape.

Plus, several documentation fixes and additions, such as clarifying the
README a bit and adding in the Collector documentation.
This commit is contained in:
Zach Dziura 2016-02-17 01:10:07 -05:00
parent 7c8d07f839
commit f11aa76ca6
4 changed files with 190 additions and 51 deletions

View file

@ -303,7 +303,7 @@ send(&quot;config aethermap off&quot;)</script>
<colorTriggerBgColor>#000000</colorTriggerBgColor> <colorTriggerBgColor>#000000</colorTriggerBgColor>
<regexCodeList/> <regexCodeList/>
<regexCodePropertyList/> <regexCodePropertyList/>
<TriggerGroup isActive="no" isFolder="yes" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <TriggerGroup isActive="yes" isFolder="yes" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no">
<name>Autopilot</name> <name>Autopilot</name>
<script></script> <script></script>
<triggerType>0</triggerType> <triggerType>0</triggerType>
@ -318,7 +318,7 @@ send(&quot;config aethermap off&quot;)</script>
<colorTriggerBgColor>#000000</colorTriggerBgColor> <colorTriggerBgColor>#000000</colorTriggerBgColor>
<regexCodeList/> <regexCodeList/>
<regexCodePropertyList/> <regexCodePropertyList/>
<Trigger isActive="no" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no">
<name>Siphon Callout</name> <name>Siphon Callout</name>
<script>if dreadnought.aetherbeastsTotal == 0 and dreadnought.pilot.flags.siphonCallout then <script>if dreadnought.aetherbeastsTotal == 0 and dreadnought.pilot.flags.siphonCallout then
dreadnought.calloutSiphon() dreadnought.calloutSiphon()
@ -587,6 +587,8 @@ end
flowerbox(&quot;red&quot;, &quot;YOUR SHOCKWAVES ARE ABOUT TO EXPIRE!!&quot;) flowerbox(&quot;red&quot;, &quot;YOUR SHOCKWAVES ARE ABOUT TO EXPIRE!!&quot;)
send(&quot;shipt The shockwaves are about to expire. We'll stop and collect the dust until then.&quot;) send(&quot;shipt The shockwaves are about to expire. We'll stop and collect the dust until then.&quot;)
killTimer(table.remove(dreadnought.pilot.shockwaveTimers, 1)) killTimer(table.remove(dreadnought.pilot.shockwaveTimers, 1))
dreadnought.pilot.flags.siphonCallout = false
disableTrigger(&quot;Siphon Callout&quot;)
end))</script> end))</script>
<triggerType>0</triggerType> <triggerType>0</triggerType>
<conditonLineDelta>0</conditonLineDelta> <conditonLineDelta>0</conditonLineDelta>
@ -1168,6 +1170,29 @@ end</script>
<integer>1</integer> <integer>1</integer>
</regexCodePropertyList> </regexCodePropertyList>
</Trigger> </Trigger>
<Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no">
<name>Entering Shockwave</name>
<script>if dreadnought.empath.flags.haveClarity then
heap.insert(dreadnought.empath.commands, action(&quot;clarity&quot;, 4, &quot;grid clarity &quot; .. dreadnought.empath.modules.chair))
dreadnought.repairShip(dreadnought.balance, dreadnought.empath.commands)
end</script>
<triggerType>0</triggerType>
<conditonLineDelta>0</conditonLineDelta>
<mStayOpen>0</mStayOpen>
<mCommand></mCommand>
<packageName></packageName>
<mFgColor>#ff0000</mFgColor>
<mBgColor>#ffff00</mBgColor>
<mSoundFile></mSoundFile>
<colorTriggerFgColor>#000000</colorTriggerFgColor>
<colorTriggerBgColor>#000000</colorTriggerBgColor>
<regexCodeList>
<string>^You are thrust forward as(?:\s\w+(?:\'\w+)?)+ shudders violently and comes to a complete stop\.$</string>
</regexCodeList>
<regexCodePropertyList>
<integer>1</integer>
</regexCodePropertyList>
</Trigger>
</TriggerGroup> </TriggerGroup>
<Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no">
<name>Grid Balance</name> <name>Grid Balance</name>
@ -1206,7 +1231,7 @@ dreadnought.repairShip(dreadnought.balance, dreadnought.empath.commands)</script
<colorTriggerBgColor>#000000</colorTriggerBgColor> <colorTriggerBgColor>#000000</colorTriggerBgColor>
<regexCodeList/> <regexCodeList/>
<regexCodePropertyList/> <regexCodePropertyList/>
<TriggerGroup isActive="yes" isFolder="yes" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="yes" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <TriggerGroup isActive="no" isFolder="yes" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="yes" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no">
<name>Turret Setup</name> <name>Turret Setup</name>
<script></script> <script></script>
<triggerType>0</triggerType> <triggerType>0</triggerType>
@ -1778,7 +1803,10 @@ end</script>
<regexCodePropertyList/> <regexCodePropertyList/>
<Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no">
<name>Siphoning Vortex</name> <name>Siphoning Vortex</name>
<script>send(&quot;shipt Siphoned from the vortex, Captain. My collector is now filled with &quot; ..matches[2]..&quot; energy.&quot;)</script> <script>send(&quot;shipt Siphoned from the vortex, Captain. My collector is now filled with &quot; ..matches[2]..&quot; energy.&quot;)
if dreadnought.collector.exhaustionCount &gt; 0 then
dreadnought.collector.exhaustionCount = 0
end</script>
<triggerType>0</triggerType> <triggerType>0</triggerType>
<conditonLineDelta>99</conditonLineDelta> <conditonLineDelta>99</conditonLineDelta>
<mStayOpen>0</mStayOpen> <mStayOpen>0</mStayOpen>
@ -1841,7 +1869,11 @@ disableTrigger(&quot;Siphoning - Callout&quot;)</script>
<Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no">
<name>Exhaustion</name> <name>Exhaustion</name>
<script>send(&quot;shipt I'm exhausted, Captain. You'll have to find a replacement for me.&quot;) <script>send(&quot;shipt I'm exhausted, Captain. You'll have to find a replacement for me.&quot;)
dreadnought.siphonVortex(dreadnought.aetherbeastsTotal)</script> dreadnought.collector.exhaustionCount = dreadnought.collector.exhaustionCount + 1
if dreadnought.collector.exhaustionCount &lt; 5 then
dreadnought.siphonVortex(dreadnought.aetherbeastsTotal)
end</script>
<triggerType>0</triggerType> <triggerType>0</triggerType>
<conditonLineDelta>0</conditonLineDelta> <conditonLineDelta>0</conditonLineDelta>
<mStayOpen>0</mStayOpen> <mStayOpen>0</mStayOpen>
@ -2025,51 +2057,15 @@ tempTimer(0.1, [[send(&quot;shipt Aye aye, Captain! Deactivating my collector&qu
<colorTriggerFgColor>#000000</colorTriggerFgColor> <colorTriggerFgColor>#000000</colorTriggerFgColor>
<colorTriggerBgColor>#000000</colorTriggerBgColor> <colorTriggerBgColor>#000000</colorTriggerBgColor>
<regexCodeList> <regexCodeList>
<string>implodes and your body is instantly torn apart by the unstable reality of the Aetherways\.$</string> <string>implodes and your body is instantly torn apart by the unstable reality of the Aetherways.</string>
</regexCodeList> </regexCodeList>
<regexCodePropertyList> <regexCodePropertyList>
<integer>1</integer> <integer>0</integer>
</regexCodePropertyList> </regexCodePropertyList>
</Trigger> </Trigger>
</TriggerGroup> </TriggerGroup>
</TriggerPackage> </TriggerPackage>
<TimerPackage> <TimerPackage/>
<TimerGroup isActive="yes" isFolder="yes" isTempTimer="no" isOffsetTimer="no">
<name>Dreadnought</name>
<script></script>
<command></command>
<packageName></packageName>
<time>00:00:00.000</time>
<TimerGroup isActive="no" isFolder="yes" isTempTimer="no" isOffsetTimer="no">
<name>Shockwaves</name>
<script></script>
<command></command>
<packageName></packageName>
<time>00:00:00.000</time>
<Timer isActive="yes" isFolder="no" isTempTimer="no" isOffsetTimer="no">
<name>Shockwaves Expired</name>
<script></script>
<command>shipt Attention! The shockwaves have expired!</command>
<packageName></packageName>
<time>00:01:00.000</time>
</Timer>
<Timer isActive="yes" isFolder="no" isTempTimer="no" isOffsetTimer="no">
<name>Five Minute Announcement</name>
<script></script>
<command>shipt Attention! The shockwaves will expire in five minutes!</command>
<packageName></packageName>
<time>00:00:55.000</time>
</Timer>
<Timer isActive="yes" isFolder="no" isTempTimer="no" isOffsetTimer="no">
<name>Fifteen Minute Announcement</name>
<script></script>
<command>shipt Attention! The shockwaves will expire in fifteen minutes!</command>
<packageName></packageName>
<time>00:00:45.000</time>
</Timer>
</TimerGroup>
</TimerGroup>
</TimerPackage>
<AliasPackage> <AliasPackage>
<AliasGroup isActive="yes" isFolder="yes"> <AliasGroup isActive="yes" isFolder="yes">
<name>Dreadnought</name> <name>Dreadnought</name>
@ -2077,7 +2073,7 @@ tempTimer(0.1, [[send(&quot;shipt Aye aye, Captain! Deactivating my collector&qu
<command></command> <command></command>
<packageName></packageName> <packageName></packageName>
<regex></regex> <regex></regex>
<AliasGroup isActive="no" isFolder="yes"> <AliasGroup isActive="yes" isFolder="yes">
<name>Pilot</name> <name>Pilot</name>
<script></script> <script></script>
<command></command> <command></command>
@ -2850,7 +2846,9 @@ end</script>
<ScriptGroup isActive="yes" isFolder="yes"> <ScriptGroup isActive="yes" isFolder="yes">
<name>Collector</name> <name>Collector</name>
<packageName></packageName> <packageName></packageName>
<script></script> <script>dreadnought.collector = dreadnought.collector or {
exhaustionCount = 0
}</script>
<eventHandlerList/> <eventHandlerList/>
<Script isActive="yes" isFolder="no"> <Script isActive="yes" isFolder="no">
<name>Siphon Vortex</name> <name>Siphon Vortex</name>
@ -2906,6 +2904,137 @@ if string.find(line, &quot;%d-hull, .*&quot;) then
deleteLine() deleteLine()
end end
]]) ]])
end</script>
<eventHandlerList/>
</Script>
</ScriptGroup>
<ScriptGroup isActive="yes" isFolder="yes">
<name>Data Structures</name>
<packageName></packageName>
<script>-------------------------------------------------
-- Put your Lua functions here. --
-- --
-- Note that you can also use external Scripts --
-------------------------------------------------
</script>
<eventHandlerList/>
<Script isActive="yes" isFolder="no">
<name>Heap</name>
<packageName></packageName>
<script>heap = {
new = function()
return {
size = 0,
elements = {}
}
end,
_lowerPriority = function (x, y)
-- X and Y are &quot;actions&quot;, as defined in the Action script.
assert(type(x) == &quot;table&quot;)
assert(type(y) == &quot;table&quot;)
assert(type(x.priority) == &quot;number&quot;)
assert(type(y.priority) == &quot;number&quot;)
return x.priority &gt;= y.priority
end,
_exch = function(h, x, y)
assert(type(x) == &quot;number&quot;)
assert(type(y) == &quot;number&quot;)
local temp = h.elements[x]
h.elements[x] = h.elements[y]
h.elements[y] = temp
end,
_sink = function (h, parentIndex)
local N = h.size
while (parentIndex*2) &lt;= N do
local childIndex = parentIndex * 2
if childIndex &lt; N and heap._lowerPriority(h.elements[childIndex],
h.elements[childIndex+1]) then
childIndex = childIndex + 1
end
if not heap._lowerPriority(h.elements[parentIndex], h.elements[childIndex]) then
break
else
heap._exch(h, parentIndex, childIndex)
parentIndex = childIndex
end
end
end,
_swim = function (h, childIndex)
while childIndex &gt; 1 and heap._lowerPriority(h.elements[math.floor(childIndex/2)],
h.elements[childIndex]) do
local parentIndex = math.floor(childIndex / 2)
heap._exch(h, childIndex, parentIndex)
childIndex = parentIndex
end
end,
insert = function (h, element)
table.insert(h.elements, element)
h.size = h.size + 1
heap._swim(h, h.size)
end,
extract = function (h)
heap._exch(h, 1, h.size)
h.size = h.size - 1
local ret = table.remove(h.elements)
heap._sink(h, 1)
return ret
end,
head = function (h)
local element = h.elements[1]
return element
end
}</script>
<eventHandlerList/>
</Script>
<Script isActive="yes" isFolder="no">
<name>Action</name>
<packageName></packageName>
<script>function action(name, priority, command)
assert(type(name) == &quot;string&quot;)
assert(type(priority) == &quot;number&quot;)
assert(type(command) == &quot;function&quot; or type(command) == &quot;string&quot;)
local aethercraftCommand = function() end
if type(command) == &quot;string&quot; then
aethercraftCommand = function()
send(command)
end
else
aethercraftCommand = function()
command()
end
end
local action = {
name = name,
priority = priority,
command = aethercraftCommand
}
setmetatable(action, {
__lt = function(a, b)
return a.priority &lt; b.priority
end
})
return action
end</script> end</script>
<eventHandlerList/> <eventHandlerList/>
</Script> </Script>

View file

@ -1 +0,0 @@
mpackage = "Dreadnought"

View file

@ -6,15 +6,17 @@ An automated aetherhunting system for Lusternia, written in Lua for the Mudlet c
Installation Installation
---------- ----------
1. Download the latest release and extract it somewhere in your computer. 1. Click on the `releases` button above and download the latest `Source Code (zip)` file for the latest Dreadnought release.
2. Within the project's root directory, create a ZIP archive of the included `Dreadnought` directory. 2. Extract the zip file somewhere on your computer (such as your Downloads folder).
3. Open Mudlet and import the newly created ZIP archive using the built-in package manager. 3. Open Mudlet. On the Menu Bar, click on `Package Manager`.
4. Click on `Install`, navigate to the folder where you extracted the zip file, and select the `Dreadnought.xml` file.
5. Click `OK` to close the Package Manager window.
Updating Updating
-------- --------
1. Open up Mudlet's Package Manager. 1. Open up Mudlet's Package Manager.
2. Select the `Dreadnought` package and click Uninstall. 2. Select the `Dreadnought` package and click `Uninstall`.
3. See the above Installation instructions. 3. See the above Installation instructions.
Documentation Documentation

View file

@ -0,0 +1,9 @@
Collector
=========
The collector has the easiest set of commands to use: there's only one! The collector can be toggled between two modes: `Auto`, which will automatically siphon from a vortex should one appear in view; and `Call` which will siphon once for every time someone announced `"Siphon"` on the ship aether.
Commands
--------
- `smode <call|auto|off>` - Toggles the siphoning mode, or turns siphoning off completely.