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:
parent
7c8d07f839
commit
f11aa76ca6
4 changed files with 190 additions and 51 deletions
|
@ -303,7 +303,7 @@ send("config aethermap off")</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("config aethermap off")</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("red", "YOUR SHOCKWAVES ARE ABOUT TO EXPIRE!!")
|
flowerbox("red", "YOUR SHOCKWAVES ARE ABOUT TO EXPIRE!!")
|
||||||
send("shipt The shockwaves are about to expire. We'll stop and collect the dust until then.")
|
send("shipt The shockwaves are about to expire. We'll stop and collect the dust until then.")
|
||||||
killTimer(table.remove(dreadnought.pilot.shockwaveTimers, 1))
|
killTimer(table.remove(dreadnought.pilot.shockwaveTimers, 1))
|
||||||
|
dreadnought.pilot.flags.siphonCallout = false
|
||||||
|
disableTrigger("Siphon Callout")
|
||||||
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("clarity", 4, "grid clarity " .. 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("shipt Siphoned from the vortex, Captain. My collector is now filled with " ..matches[2].." energy.")</script>
|
<script>send("shipt Siphoned from the vortex, Captain. My collector is now filled with " ..matches[2].." energy.")
|
||||||
|
if dreadnought.collector.exhaustionCount > 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("Siphoning - Callout")</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("shipt I'm exhausted, Captain. You'll have to find a replacement for me.")
|
<script>send("shipt I'm exhausted, Captain. You'll have to find a replacement for me.")
|
||||||
dreadnought.siphonVortex(dreadnought.aetherbeastsTotal)</script>
|
dreadnought.collector.exhaustionCount = dreadnought.collector.exhaustionCount + 1
|
||||||
|
|
||||||
|
if dreadnought.collector.exhaustionCount < 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("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("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, "%d-hull, .*") 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 "actions", as defined in the Action script.
|
||||||
|
assert(type(x) == "table")
|
||||||
|
assert(type(y) == "table")
|
||||||
|
|
||||||
|
assert(type(x.priority) == "number")
|
||||||
|
assert(type(y.priority) == "number")
|
||||||
|
|
||||||
|
return x.priority >= y.priority
|
||||||
|
end,
|
||||||
|
|
||||||
|
_exch = function(h, x, y)
|
||||||
|
assert(type(x) == "number")
|
||||||
|
assert(type(y) == "number")
|
||||||
|
|
||||||
|
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) <= N do
|
||||||
|
local childIndex = parentIndex * 2
|
||||||
|
|
||||||
|
if childIndex < 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 > 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) == "string")
|
||||||
|
assert(type(priority) == "number")
|
||||||
|
assert(type(command) == "function" or type(command) == "string")
|
||||||
|
|
||||||
|
local aethercraftCommand = function() end
|
||||||
|
|
||||||
|
if type(command) == "string" 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 < b.priority
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
return action
|
||||||
end</script>
|
end</script>
|
||||||
<eventHandlerList/>
|
<eventHandlerList/>
|
||||||
</Script>
|
</Script>
|
|
@ -1 +0,0 @@
|
||||||
mpackage = "Dreadnought"
|
|
10
README.md
10
README.md
|
@ -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
|
||||||
|
|
|
@ -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.
|
Loading…
Add table
Reference in a new issue