Hi there,
since there's not that much info out and about about serverside curing right now I thought I'd post what I have found so far and maybe a few scripts or snippets to make life easier. Myself and
@Dunn are already using this and won't be going back to client side curing at all, serverside curing is the future in my opinion as it cuts out a lot of work and with a little work is very customisable.
First things first, understanding the priority system. Everything the serverside curing does (except for moss or health/mana sipping) is based on the 1-25 priority slot system. So while afflictions and defences might be seperate if you put blindness at position 2 in the defence list and have asthma at position 4 in the affliction list it will def up blindness before curing asthma.
Another oddity is having slickness (usually a smoke cure) over asthma in the affliction list. If you do that it will eat bloodroot to cure the slickness (quite useful at time, but mostly not) and then eat kelp to cure asthma. If you have asthma over slickness in the affliction list then it will eat kelp and smoke, which is the more efficient curing route.
Secondly, every single curing balance is combined on the same affliction list. So you might have paralysis, aeon, heartseed in the same high prio. You'll have to be able to figure that out yourself.
Thirdly, while curing will work in aeon/retardation (CURING commands are -not- sluggish commands by the way) it will still go through the list from position 1 through to 25. So if you have slickness at position 3 and prone at 4 it will cure slickness first (usually not a good idea).
Now lets look at what you will still have to script or code yourself, since serverside curing does NOT do it:
-Refilling your pipes: you will need to do that yourself.
-Precaching herbs: serverside will OUTR for you if you don't have anything outrifted, but it will not pre-cache for you.
-Use of Fitness, Bloodboil, Dragonheal, Fool Tarot, Rage, Restore and other class specific active healing methods cannot be Queued (for now I believe, might come soon) so you will need to have a lock queue that checks stuff like that for you.
-Intelligent priority switching: For more advanced tricks like moving confusion higher in the priority list if you have disrupt will have to be done client side.
-Use of Insomnia, Thirdeye and a few other survival or vision abilities: Serverside curing will always use herbs to def up.
-Mixing and matching Herbs and Transmutation cures: Time to pick a side, one or the other.
-Deffing up: You will have to handle that yourself if you don't want to put certain defs into the defence priority list (such as deathsight, because who wants to lose equilibrium in the middle of a fight over a def that isn't that important)
Comments
Please create an output command for afflictions, add it to gmcp, or add it as a prompt option.
→My Mudlet Scripts
it from the "ignore" list, depending on how you wrote it).
Creating a Defence Set:
Basic functionality of curing systems includes a very nice setup for def'ing up a set of defences. There are two strategies for this.
1) Adding all defences to your queue at priority 25, and using a second alias to remove them when defup completes.
2) Adding all defences to a higher priority, as well as adding an 'anchor' defence to signify you've finished def'ing up.
This will be an example of automatically disabling on completion.
First step: We want a list of things that will be def'd up. This is how I did it, in a script:
This allows me to later add other defence sets if necessary. The idea here is that all defences get added to priority 24, and the 'anchor' defence gets added to priority 25, meaning it will always come last. For me, I used secondsight as my 'anchor' defence.
Second: A way to call this. A simple alias will do:
Now with this enabled, all I need to do is 'defup basic' to add all my basic defences to the list. The last step is removing them from the list, to prevent them being spammed in combat when you don't need to re-def them. This is where the anchor defence comes in.
Finally:
This is the line when secondsight is used. Since it is the only defence from the list in priority 25, when it is used every other defence is up. It's important to use a defence here that requires both balance and equilibrium, so it isn't put up early.
From here, it's a simple matter of gagging lines such as:
You have set the 'thirdeye' defence to the 24 priority.
and
You have set the 'thirdeye' defence to the 0 priority.
To keep yourself from getting spammed when you use this. You can use the examples Nemutaur provided above for gagging them, or you can use a simple regex pattern of:
^You have set the '\w+' defence to the \d+ priority\.$
Which will catch all defence priority changes.
Cascades of quicksilver light streak across the firmament as the celestial voice of Ourania intones, "Oh Jarrod..."
defenses = {
["basic"] = {"thirdeye",
"alertness",
"cloak",
"deathsight",
"mindseye",
"hiding",
"scales",
"pacing",
"lipreading",
"weaving"
},
anchor = "secondsight",
current = "basic"
}
function addDefenses(type)
for i,v in ipairs(defenses[type]) do
send("curing priority defence "..v.." 24")
end
send("curing priority defence "..defenses.anchor.." 25")
defenses.current = type
end
function removeDefenses()
for i,v in ipairs(defenses[defenses.current]) do
send("curing priority defence "..v.." reset")
end
send("curing priority defence "..defenses.anchor.." reset")
end
Cascades of quicksilver light streak across the firmament as the celestial voice of Ourania intones, "Oh Jarrod..."
If you want to let Serverside curing handle your health and mana sipping (with or without moss usage) that's easy enough to set up as well.
1. CURING ON (turns on serverside curing)
2. CURING AFFLICTIONS OFF (won't use serverside curing to heal afflictions)
3. CURING DEFENCES OFF (turn off Def keepup if you don't want that stuff)
4. CURING TRANSMUTATION ON|OFF (ON if you use Alchemic cures, OFF if you use forestal/herbals)
Now you can sip health or mana when your health hits a certain percentage of your max health. Currently the server allows you to set it from 0% (you'll be dead, basically never sip) to 90%. Hopefully they will implement up to 99% in the future so we can mimick Fullhealth (FL in Svo) to board ships and enter the text editor mode in the future.
Alright, so pick when you want to start sipping health and mana. I'd suggest 80%, so do: CURING SIPHEALTH 80 and CURING SIPMANA 80.
If you don't want to use moss to restore health and mana just do CURING MOSSHEALTH 0 and CURING MOSSMANA 0 and you're set. If you want to use it then set the threshold at 10% lower than your sipping threshold, since that's about what it will cure for and you don't want to waste moss if you hit 90% mana because of mana draining defences or a rather small damage attack for example. So with the values from before it would be CURING MOSSHEALTH 70 and CURING MOSSMANA 70.
By default Serverside curing will prioritise restoring health over mana. In some situations you will want to prioritise mana though. Fighting a priest who is just sapping your health is one example, moss will be more than enough to keep your health up so you need to be sipping mana. So we'll be making another toggle that switches between Health and Mana priority (using CURING PRIORITY HEALTH|MANA).
Code for Script:
--Prioritise health sipping by default
healthPriority = true
function healthManaToggle()
if healthPriority then
--switch to mana priority
send("curing priority mana")
healthPriority = false
cecho("\nUsing MANA sipping priority")
elseif not healthPriority then
--switch to health priority
send("curing priority health")
healthPriority = true
cecho("\nUsing HEALTH sipping priority")
end
end
Make a new alias called: Health/Mana Priority Toggle
Pattern is: ^hm$
Code is: healthManaToggle()
Now for something a little more advanced. We will be moving up the moss health and moss mana thresholds if you are off sip balance. This will ensure that you are using your moss balance effectively. If you are below 90% health and off sip balance you will want to switch moss thresholds up to 90% for health and 85% (my personal preference) for mana. This moss threshold change ensures that your health stays as high as possible without wasting moss if you dip below 90% health and have sip balance.
For this you will need two triggers and a few more functions.
First off you will have to turn on Serverside reporting so that we can capture what was sipped. Do this with CURING REPORTING ON .
Then make a trigger with the pattern:
^\[Curing\]\: SIP (\w+)$ (perl regex)
You take a drink from (begin of line substring)
Check the 'multiline / AND Trigger' checkbox and set the 'line delta' to 1. This will make sure the trigger only fires if both those lines show up one after the other.
The code will be:
sipped(string.lower(multimatches[1][2]))
string.lower just makes everything lowercase since the command will look like this SIP HEALTH.
The second trigger will be Sip balance regain.
Make a trigger with the pattern:
You may drink another health or mana elixir or tonic. (exact match)
The code will be:
hmbal()
Now to the functions, you can put these in the same script as the Health/Mana Priority function since these are all Health and Mana functions.
--Increase the Moss Threshold
function mossTreshholdUp()
send("curing mosshealth 90")
send("curing mossmana 85")
end
--Decrease the Moss Threshold
function mossTreshholdDown()
send("curing mosshealth 70")
send("curing mossmana 70")
end
--What you sipped function, this increases the moss threshold
--If you are using Transmutation cures replace "health" with "vitality" and "mana" with "mentality"
function sipped(elix)
if elix == "health" or elix == "mana" then
--checks for health or mana sip, so it won't change things on immunity or other sips
mossTreshholdUp()
end
end
--Sip balance regain function
--This moves the moss threshold down again
function hmbal ()
mossTreshholdDown()
end -- if
Now there will be a little bit of moss threshold change spam when you sip and regain sip balance. If you want this gagged just make a trigger with the pattern:
^Moss (?:health|mana) curing threshold set to \d+\%\.$ (perl regex)
Code is: deleteFull()
Note: Yes this is susceptible to illusions, but honestly if someone wants to waste time illusioning this they are really running out of things to illusion.
Maybe you missed the part where you can setup priorities once and have a passable system forever after.
Maybe you're just looking for whatever excuse you can to hate new things.
Whatever your reasoning, go do it in another thread.
Cascades of quicksilver light streak across the firmament as the celestial voice of Ourania intones, "Oh Jarrod..."
First of all it's important to understand that all the balances will be put on the same list, so the easier thing to list them all first and then figure out what belongs where. You can then sort them at a priority of 1 through 25. Some of these aren't technically balances but they are cured by the same style of cure, so for our purposes they are balances:
- Herb
- Salve
- Pipe (balanceless but you'll see why the cure order is important in a bit)
- Focus (some affs are focus only)
- Writhe
- Wake (Sleep)
- Immunity (Voyria)
- Stand (Prone)
- Concentrate (Disrupt)
First off while it may seem that it doesn't matter what slot (1 through 25) you put something like 'disrupt' or 'prone' aff remember that if you are aeoned it will cure from 1st to 25th, so if you have 'prone' at 1 and 'aeon' at 2 you will try to stand before curing aeon which is a bad idea. Same goes for retardation.
A lot of you might be thinking that there's way more herb afflictions than 25 (41 by my last count) but you can group up afflictions if they're all equally important or in some cases unimportant. Examples of important groups would be:
- asthma, sensitivity (both cured by kelp)
- nausea, haemophilia, lethargy (all ginseng affs)
- stupidity, epilepsy (both golenseal or focus affs)
- temperedmelancholic, temperedcholeric, temperedsanguine, temperedphlegmatic (all ginger affs)
And some not as important affs that can be grouped:
- dizziness, shyness (both goldenseal, but not life threatening affs)
- claustrophobia, agoraphobia, vertigo, loneliness (four of the least harmful lobelia affs)
So by grouping up stuff from the same balance you can easily fit all the herbs into ~17 or so slots. Now remember that even though blindness and deafness are not exactly afflictions you will need to know when you want those defs (which use herb balance) to be deffed instead of eating to cure an affliction, so two slots will be left empty down the tail end of the herb balance. The same goes for caloric and mass with salve balance.
Before we get into setting up this script with all the priorities lets take a look at the things you will need to activate for Serverside affliction curing and the options you have available.
1. CURING ON (self explanatory)
2. CURING AFFLICTIONS ON (use serverside curing to cure afflictions)
3. CURING TRANSMUTATION ON|OFF (ON for alchemic cures, OFF for forestal)
The two options you have will be CURING FOCUS ON|OFF and CURING TREE ON|OFF.
If you have the Focus ability in Survival then turn on Focussing with CURING FOCUS ON. Its rare that you want to turn focussing off to conserve mana.
The Tree tattoo option is a little trickier and will require some curing theory so you understand it better. Up until recently most people use tree tattoos exclusively as a way to get out of a lock that doesn't have paralysis yet. This is good and correct usage of tree against locking classes such as serpents, apostates, bards, dragons and well any class that can afflict you with impatience (assuming you have focus).
But what about the other classes? Why do you need to save that tree tattoo versus a knight while he is prepping you or an occultist who is stacking you with affs. The answer is you don't. Use that tree tattoo as often as possible if you have no other way to cure an affliction because you are off herb balance for example. This will slow down their offense and buy you more time to execute yours.
The way that serverside curing handles CURING TREE ON is that it will touch tree as soon as there is an affliction that can be cured by tree and you are off the balance required to cure it. So if you have it on and a knight doubleslashes you with curare(paralysis) and kalmia(asthma) serverside curing will first eat bloodroot and then immediately touch tree to cure the asthma. It will take the knight much longer to start any sort of affliction stack on you curing this way.
How about if I just want to use Tree tattoo when I am close to being truelocked? Sadly that's a topic for another day since it will require you to track what afflictions you have on you at any given time. But if you already have something like that in place you can tell the system to touch tree (assuming you have tree balance) by doing CURING QUEUE ADD TOUCH TREE. If you do this while off tree balance it will wait until you have tree balance and immediately touch the tree tattoo. So you can use CURING QUEUE RESET if you were off tree balance and you want to remove TOUCH TREE from the curing queue.
Long story short, use CURING TREE ON (in combat, turn it off when bashing) for now and make sure you have enough tree tattoo uses left. My advice is to get two tree tattoos if you have extra slots. If you don't have an extra slot I'd advise learning Canvas in Inkmilling, it's only 70 lessons to get to Canvas and that's great value for an extra tattoo slot.
Right, we're almost at the script part just bear with me for two more things. In the script you will notice I have slots which don't have any afflictions in it. Those are what I like to call gaps where you could move up certain afflictions if you are off focus balance for example and then once you have focus balance move them down again. The reason for the focus balance gap would be that if you have the afflictions paralysis, asthma, clumsiness and stupidity the focus could cure either stupidity or clumsiness. So you can keep those two afflictions a little lower in the priority list, but once you focus and stupidity wasn't cured and you really want that to be cured before something else, move it up. The most important free slot is #1, this is where you can put afflictions that you want prioritised for certain situations, like impatience when you are almost truelocked.
Last thing before the script, this priority list will be static. It will not realise that you are softlocked (asthma, anorexia, slickness) and move up impatience to the #1 slot automatically. So you will need to use your head when fighting and know the limitations of what you have set up for now. It is very possible to fight like this. There have always been fighters who were horrible at coding but knew the limitations of their curing systems and how to work with it, @Mizik is the most prominent example, @Jarrel probably second.
Lets get to it then, make a new script and call it something clever like 'Curing Priorities' and paste this table and the function into it:
afflictionPrioritiesDefault = {
---------------------------------
--HERBS (+ a few focusables obviously)
---------------------------------
["paralysis"] = 3,
["impatience"] = 4,
["scytherus"] = 5,
["asthma"] = 6,
["sensitivity"] = 6,
["spiritdisrupt"] = 7,
["darkshade"] = 7,
["hypersomnia"] = 8,
["hallucinations"] = 8,
--9 GAP FOR OFF-FOCUS BAL SHIFTS
["nausea"] = 10,
["haemophilia"] = 10,
["lethargy"] = 10,
["addiction"] = 10,
["stupidity"] = 11,
["epilepsy"] = 11,
["confusion"] = 12,
["recklessness"] = 13,
["masochism"] = 13,
["weariness"] = 14,
["temperedmelancholic"] = 15,
["temperedcholeric"] = 15,
["temperedsanguine"] = 15,
["temperedphlegmatic"] = 15,
["lovers"] = 16,
["pacified"] = 16,
["peace"] = 16,
["justice"] = 16,
["healthleech"] = 17,
["clumsiness"] = 17,
["dissonance"] = 18,
["loneliness"] = 19,
["claustrophobia"] = 19,
["agoraphobia"] = 19,
["vertigo"] = 19,
--BLINDNESS def at 20
--DEAFNESS def at 21
["generosity"] = 22,
["dementia"] = 23,
["paranoia"] = 23,
["dizziness"] = 24,
["shyness"] = 24,
["fluids"] = 25,
--------------------------
--SALVE
--------------------------
["heartseed"] = 3,
["anorexia"] = 4,
--5 GAP: For resto leg breaks and prone
["brokenleftleg"] = 6,
["brokenrightleg"] = 6,
["damagedleftleg"] = 7, --move these up if prone (something we'll cover later)
["damagedrightleg"] = 7,
["mangledleftleg"] = 7,
["mangledrightleg"] = 7,
["mangledhead"] = 8,
["brokenleftarm"] = 9,
["brokenrightarm"] = 9,
["damagedleftarm"] = 10,
["damagedhead"] = 11,
["damagedrightarm"] = 12,
["mangledleftarm"] = 13,
["mangledrightarm"] = 13,
["frozen"] = 14,
["shivering"] = 14,
--CALORIC def at 14
["mildtrauma"] = 15,
["serioustrauma"] = 15,
--MASS def at 16
["burning"] = 17,
["stuttering"] = 18,
["slashedthroat"] = 18,
["laceratedthroat"] = 18,
["selarnia"] = 19,
["itching"] = 19,
--broken = crippled (lvl1 break: mending)
--damaged = broken (lvl2 break: restoration)
--mangled = mangled
--lvl1 torso = mildtrauma
--lvl2 torso = serioustrauma
---------------------------
--PIPE
---------------------------
["aeon"] = 2, --high up since you always want to cure this first
["slickness"] = 10, --huge gap so that you cure asthma before slickness (with bloodroot instead of smoking)
["whisperingmadness"] = 11,
["hellsight"] = 12,
["manaleech"] = 13,
["disloyalty"] = 14,
["deadening"] = 15,
--REBOUNDING defence
---------------------------
--FOCUS (pure focus affs)
---------------------------
["earthdisrupt"] = 15, --number doesn't really matter
["airdisrupt"] = 15, --just keep it low so that it isn't a high priority in retardation
["firedisrupt"] = 15,
["waterdisrupt"] = 15,
-------------------------
--WRITHE
-------------------------
["bound"] = 6, --number doesn't really matter
["transfixation"] = 6, --keep it high, but not too high because of retardation
["webbed"] = 6,
["entangled"] = 6,
["daeggerimpale"] = 6,
["soulspear"] = 6,
["impaled"] = 6,
-----------------------
--BAL FREE CURES
-----------------------
["sleeping"] = 2, --same rank as aeon, if you're asleep and aeoned you need to wake first anyway.
["voyria"] = 12, --somewhat low because of retardation curing
["prone"] = 9, --somwhat low because of retardation curing
["disrupted"] = 9, --somewhat low because of retardation curing, need to concentrate to stand in retardation
}
function resetAllPrios()
for k,v in pairs(afflictionPrioritiesDefault) do
--set the prios here by their number obv
send("curing priority " .. k .. " " .. tostring(v))
end
end
Also on Pastebin for easy copy/paste: http://pastebin.com/f8YS6Vpr
Then two triggers.
First one called 'Logged in'
Pattern: Password correct. Welcome to Achaea. (exact match)
Code: resetAllPrios()
This trigger will ensure that when you log in the prios will be reset (in case you changed them sometime during the last session). This pattern cannot be illusioned since it is OOC so it can't be used to trick your system into resetting priorities mid fight (something we will do in future tutorials).
Second Trigger will gag all the priority shift spam that will occur once you log in. Call it something like 'Aff Priority Shift Gag'
Pattern: ^You have set the \'(\w+)\' affliction to the (\d+) priority\.$ (perl regex)
Code: deleteFull()
Also != topic of this thread.
Cascades of quicksilver light streak across the firmament as the celestial voice of Ourania intones, "Oh Jarrod..."
Results of disembowel testing | Knight limb counter | GMCP AB files
This thread is designed to give them a basis for how to get started, as well as scripts to expand functionality. None of this is necessary to get a working, effective system, this thread is about optimizing the system that's in place to have it account for the most possible situations. You have not been constructive or on topic, and it'd be nice if you spent your time in Nim's thread instead of posting here about how much you dislike it.
Cascades of quicksilver light streak across the firmament as the celestial voice of Ourania intones, "Oh Jarrod..."