Knight Limb Counter v2

A while ago I released a version of my targetting script/limb counter, and I've had the link to that thread in my signature ever since. When Weaponmastery was released I had intentions to update it to account for the new specialisations and attack lines, but I kept pushing it further down the list of things I needed/wanted to do, so it never got done. And I still haven't done it because I've not played dual blunt or two-handed. What I have done, though, is a total re-write of the underlying code and added some new functionality.

What's new?

- Now accounts for limb damage resetting after that limb has gone undamaged for a time.

- Improved the anti-illusion, including when using in-game queueing. Added a toggle to turn the anti-illusion off (though that shouldn't be necessary). You will need to CONFIG SHOWQUEUEALERTS ON in order for the anti-illusion to work with queueing (I have plans to add a configuration option to gag those lines at a later date for those who don't want to see them).

- Has a formula for sword and shield slice damage. I've found it to be accurate as a Paladin, but I've had reports from a couple of people that it's not accurate for Runewarden (likely because of the weapon rune that increases limb damage, I may just have the wrong modifier). If you find it's not accurate you can turn using it off and fall back to the "count number of hits against a total number required" method.

- Limb damage amounts are now tracked as a percentage rather than a raw amount. Limbs are broken at 100. Makes it easier to also account for things like dragoncraft rend which just do a flat percentage of limb damage.

- 3rd person dragoncraft rend triggers have been (re-)added.

- A completely new text UI for configuring it, including a configuration for the "number of hits" required (separated by Weaponmastery spec OR non-Knight class).

- Probably a load of other things I've forgotten.

How do I install it?

Download the mpackage file from my Dropbox here. Use the 'Package Manager' in Mudlet to install it.

What Weaponmastery specialisations does this support?

It currently has triggers for the Dual Cutting and Sword and Shield specialisations. It should also work for any class which uses the generic jab/slash/slice/swing attack lines, such as Bard using targetted jabs.

I'm not any good at coding. How much code do I have to write to get this to work?

Very little! You just need to call one function as part of your targetting alias. If the pattern for your targetting alias is something like this:

^t (\w+)$

then you'd simply make the code for that alias

antonius.targetting.target(matches[2])

That function will set a global "target" variable so if you're using that to store the name of your target everything will still work, though you can continue to explicitly set that variable in your alias too if you want to. Configuring everything else can be done using aliases provided as part of the limb counter.

If you use Svo or Wundersys then there's a @limbhits custom prompt tag to add the values for the current target to your prompt. See the documentation for your system for details on how to update the custom prompt.

What aliases do I need to know?

limbreset/lr - completely resets the limb damage values for the current target.

hits <number> - manually override the total number of required hits for the current target. Remains for the current Mudlet session, ASSESSing the target again won't update the number of required hits to the (assumedly) incorrect value.

usesnbformula <boolean> - whether or not to use the formula for limb damage values as Sword and Shield specialisation

weapondamage <number> - the longsword damage stat to pass to the Sword and Shield formula

hitcount <number1> <number2> - set a minimum health value of number2 for the required hits value of number1 (see the section below for more information on configuring required hit counts)

For the options which take boolean values (ai and usesnbformula) the value is optional - excluding a value will simply toggle the value for that option (on becomes off, and vice versa). Valid boolean options are true/yes/on to turn it on and literally anything else to turn it off.

How does the "required hit" configuration work exactly?

Use the alias 'tconfig hits' to bring up the required hit configuration (alternatively use the 'tconfig' alias to bring up the main configuration, then click "(view hits)"). This will bring up the configuration for your current class or if you're a class that has Weaponmastery (Paladin, Runewarden or Infernal) for your Weaponmastery specialisation. The numbers on the left (between 1 and 30) are the required hit values. The numbers on the right (defaulted to 0) is the minimum maximum health at which that number of hits is required. Clicking on the right-hand number will update the Mudlet command line with the beginning of the alias to update the hitcount. Simply enter the minimum maximum health value that you wish to require that number of hits (e.g. 'tconfig hitcount 10 3000' would use 10 as the required hitcount for anybody with 3000 health or above) then send the command. Changes to the configuration are automatically saved as they're made, in addition to being saved again when you close Mudlet.

In this case, 9 hits has a minimum health of 2500. That means that anybody who has 2500 health or more will require 9 hits to break. However, 10 hits has been configured with a value of 3000, so anybody who has 3000 health or more will require 10 hits. That means that the range of maximum health values for 9 hits is 2500-2999.

The value for 8 hits has been set to 1, so anybody who has a maximum health of 1 or more will require 8 hits. This makes the range for 8 hits 1-2499 - or put another way, anybody with less than 2500 health will require 8 hits. When comparing this configuration against a target's maximum health it essentially ignores anything that's still set to 0, so setting the value to 1 is very important; if you don't then the number of required hits won't get set for anybody in that 1-2499 health range and the counter won't work properly.

Similarly, the value for 15 hits has been left as 0. Since these are ignored, we've essentially created a range of 8751+ for 14 hits. Or, put another way, anybody who has more than 8751 maximum health will always require 14 hits, no matter how far above that value they are.

Note: These are values taken from my current configuration, but they're by no means complete. You'll need to do some experimenting of your own to find the correct values for your weapons (if you don't already have them).

The limb counter isn't accurate. Who do I complain to?

Nobody. I'm not making any guarantees that the limb damage values will be accurate for your specific opponent. I will, however, guarantee to the best of my ability that the limb counter tracks only valid hits (i.e. ignores illusioned attacks) and calculates limb damage values correctly using the information provided to it. It's possible that in some situations it won't correctly recognise that a leg or arm break has been cured because the delay between seeing salve applications (restoration then mending) is shorter than expected. In those cases blame the game or your internet connection because that's lags fault.

If you think there's an issue with the tracking then send me a colour HTMLlog and I'll take a look. I will not be reading through an entire fight - or even a section of one - in plain text so don't send me those.

I'm having another issue with the limb counter. What do I do?

Post here or send me a PM. Include as much information as possible, such as any errors from the Errors view in Mudlet (Click Scripts, then click errors near the bottom of the left hand menu) and a short section of game output that shows the issue. It's entirely possible there are issues with this initial export.

I'm a class that's not currently supported. Will you add that class in for me?

Possibly! I'm mostly done with adding Blademaster support, I just have a couple of issues I still need to develop solutions for (mainly how to determine whether a limb is prepped) - though see the section above about not guaranteeing the reliability of data. If you can provide the necessary lines for creating triggers - and all required limb values for classes with slightly more complex limb breaks, such as Monk or Blademaster - then it's a lot more likely (I won't be doing any work on identifying limb damage values, sorry!). Feel free to post here or PM me.

Are you willing to add additional functionality?

Yes, within reason. Feel free to post here or PM me regarding changes or additions you'd like to see made and I'll see if they're feasible.

I hate your colour scheme. Can I change it?

Not currently, but if there's enough interest I might look into that. See the section above on requesting changes to functionality.

How much does it cost?

Nothing. It's completely free. I will happily accept donations if you want to make them but they're absolutely not required.

Hey, I just want to set the expectations from the start. If you tell it that it takes a total of 10 slashes to break a limb, it will treat each slash as 10% and it will accurately count using that. If it doesn't actually take 10 slashes, and instead takes 11, that's on the user. I've made sure the code works, they have to make sure they're giving it the right info to work with.

@Aegoth: Can do. Are all staffstrikes worth the same amount of limb damage? Or will it at least still work sufficiently if I count them all as being worth the same amount? Or do you have approximate numbers (in terms of a percentage) that I could use for each type?

Not currently. I find it's easier to work with everything as a percentage when factoring in things like dragon rend (which is just a flat 25% limb damage) than it is to convert that 25% limb damage to a decimal number of hits. I'll give it some thought, might be able to add a configuration option to have the prompt output in raw number of hits (converted back from the percentage that's tracked). If you're worried about knowing when they're prepped, the attack lines are coloured: yellow = prepped on next attack, orange = prepped (breaks on next attack), red = broken. The prompt tag also has the orange and red colouring, may add the yellow in too.

Currently working on Magi for @Aegoth (and anybody else who wants support for it) as well as a couple of other things, most notably tracking the last limb that had damage applied to it (for working with a couple of the aliases), the ability to configure the order limbs are displayed on the prompt, and introducing events - for changing target and any changes to limb damage - so that people can use the information (more) easily with a GUI if they wish.

Okay, new version is up! A few days later than I'd hoped but I ended up being a lot busier than anticipated in the evenings the last few days.

Here's the brief rundown of changes:

I've added support for staffstrike as requested by @Aegoth. They're currently all considered the same amount of limb damage. I set my configuration to 1 hp for 7 hits and 6500 hp for 8 hits based on Aegoth's numbers, I'd suggest other Magi do the same until/unless they find them to not be accurate. The only issue is that for those needing 8 hits, the prepped on next hit line (the one highlighted in yellow) is the point at which you need to switch to air strike, whereas for those needing 7 hits you switch to air strike when they're prepped (the orange line). Will continue to think of ways to make that more intuitive/obvious.

Now possible to rearrange the order of limbs on the prompt tag. Just hit tconfig and use the up/down "arrows" in the bottom section. Should allow people to choose an order that makes sense for them rather than relying on my order.

Added a single event: "antonius hits updated". Has no arguments. Gets called when you change target or when the hit count for any limb changes. If you want to display your current target's hit counts in a GUI rather than using the prompt tag this should enable you to do that.

Changed the way that avoided attacks are handled in the triggers (now a single trigger that's enabled/disabled after an attack line) so adding in new attack lines is a lot easier.

Related to the above, fixed an issue with the 3rd person rend trigger not taking into account parrying and dodges.

Removed an alias that just sets a variable that's part of my own offensive systems since it doesn't need to be there.

Now tracks the last limb that was hit in antonius.targetting.lasthit - only gets updated if the person in question is your currently set target. The 'reset' alias no longer requires a bodypart to be specified, and if none is specified will reset the count for the last limb hit.

Sawbones/Predict tracking now works, though the percentage ranges are still pretty rough estimations. It will move the count up to the minimum value or down to the maximum value in the case that the current count is outside of that range, otherwise it just leaves it alone.

I tested as much as I could using a separate profile, but it's possible I've messed something up somewhere. Post here or shoot me a PM if you find any issues and I'll do my best to get them resolved as soon as possible.

Thanks to @Will for reporting an issue and helping me out with testing things, I've just realised there was a pretty important trigger (to track balance and eq off of the prompt) that was completely missing. If you've installed this you'll want to update from the Dropbox which should have the fixed version in it.

I just recently went through the process of removing old scripts, switching over to Svof and finding a proper limb counter. With my lack of coding expertise I was able to figure this all out pretty easily thanks to your well worded explanations. Thank you for sharing this!

New version is up with a minor (but pretty important) change. Dropbox link remains the same, details are below.

In preparation for the promised Weaponmastery specialisation change artefact later this month, I've made a change that I've been planning for a while: tracking Weaponmastery specialisations against class as well, so that you can have different break points for the same specialisation for different classes (required since Runewardens get a limb damage bonus from Laguz). The required hits configuration for a Knight specialisation is now stored under antonius.targetting.conf.requiredhits["Class - Spec"] rather than just antonius.targetting.conf.requiredhits["Spec"]; if you're a Dual Cutting Paladin, for example, it's now antonius.targetting.conf.requiredhits["Paladin - Dual Cutting"] rather than antonius.targetting.conf.requiredhits["Dual Cutting"].

After installing the latest version, when you first load up the required hits configuration ("tconfig hits" or "tconfig" then click "view hits") as a Knight class it will copy across the current configuration stored under just your current specialisation to the class/specialisation combo, and delete the configuration under just the specialisation. This will only be a problem if you have both Runewarden and Paladin/Infernal as the same Weaponmastery specialisation (though only one set of numbers will be entirely accurate in that case). The first class you do "tconfig hits" as will have the numbers copied over, you'll need to manually reconfigure the breakpoints for the second class.

As a precaution, I'd take a note of your required hit configurations for Knight classes before updating, but there shouldn't be any problems.

Planned future updates:

Support for dual blunt and two-handed (hopefully within a day or two of the artefact being released)

Support for Blademaster (no idea when this will be, still a lot of things that need to be ironed out)

Some way of displaying current limb damage information for those that don't have Svof or Wundersys installed

It's a great ability that makes for an awful trait since you're so limited in spots already. Even if I had a fourth major trait slot I'd probably not take it. It had a bit more value before the introduction of decaying limb damage since there was a much higher chance then that their limbs would be starting partially prepped from previous fights.

Two of the four Weaponmastery specialisations - dual cutting and dual blunt - get Predict as an ability, which is just Sawbones with a different name and a slightly faster balance/equilibrium (whichever one it uses) cost.

Two-handed really doesn't need much precision in limb breaks at all, from what I've seen, heard and theorised, since you can just steamroll with damage and/or fractures into devastate. Of all of the Weaponmastery specialisations this is probably the one that has the most room to pick it up in that third major trait slot but it also has the least use for what it provides.

For Sword and Shield, you can get the main benefit of Sawbones - checking if a break is real when they apply a salve or if they've cured torso damage while out of the room - from the Expert Diagnoser trait by checking for the presence of the associated affliction, in addition to the other benefits of Expert Diagnoser for affliction stacking.

Just fixed a minor issue for Wundersys users with the prompt tags not being assigned properly; @limbhits prompt tag should now function correctly and display the current limb damage amounts rather than just showing the name of the currently targetted person (that's now correctly the @target prompt tag).

EDIT: Well that's sort of fixed, but apparently Wundersys doesn't work with colours that contain underscores? Or maybe even colours in general. I'll figure something out. Might force me to add colours to the configuration.

@Aegoth Not yet. I have support for dual blunt (using a single weapon set) in my version that I've been testing out the last month or so, I'll be updating tonight with dual blunt support and a fracture tracker for two-handed (actual limb damage for two-handed really doesn't seem that useful, and I hate the spec, so I haven't gotten as much done there).

I have a fair amount of the logic for Blademaster coded based on the data from Dorn's, but those numbers aren't the most accurate. The general principle with his is as follows:

Based on maximum health, they need X points of damage to break. For example, somebody with 4k health may need 8 points to break. For each stance and band combination, compass, on-side and off-side hits deal a certain number of points worth of limb damage (e.g. off-side slash may be worth 1.5 points, on-side slash is worth 2). That fits into my counter pretty nicely, because the hit configuration can be used for determining total number of points required based on maximum health, and then I can convert the points per slash to a percentage. What I may do is add an additional grid so that the point values for the actual stance/band/slash combinations can be modified too.

Once I've got that done, the only issue left is finding a nice way to determine when limbs are prepped to apply the colouring to the lines and prompt tag.

For Monk, I have basically nothing, and since I've never really played Monk (using Tekura, I have some stuff for kaido and telepathy set up) I don't even know where to start. I know that stance doesn't affect limb damage, but are all types of punch worth the same amount? Are all kicks (except AXK) worth the same amount? How much is a punch worth? How much is a kick worth? What's the total required?

Essentially what I need is information, including on how current Monks are going about doing things with their own limb counters. I can then take that knowledge and package it up with my code.

Limb breaks can be useful for 2H. Head damage affects Brain, torso obviously affects DSB. A broken limb will go the extra break when using devastate, also a well timed broken leg while building fractures can allow you to break / upset. It's a pretty static formula from what I can tell too

New version is up. Has support for dual blunt (using a single set of weapons), as well as tracking for two-handed fractures (with a bastard sword). I'll likely look at finishing up two-handed support this weekend.

Has a couple of new configuration options (under 'tconfig') for you to tell the system what variable(s) you use to store your targetted limb(s) in. It defaults to the variables I use for my offense, but you can change it and it supports namespacing. There's a "new" @targetting custom prompt tag - it's always been there for svo, I just don't think I mentioned it, and I just added it for wsys - which you can use to remind yourself what you're currently targetting in terms of limbs on your prompt, if you want; it uses the values of the variables you told it about in the aforementioned config options.

If you're Two Handed specialisation the limb damage prompt tag has been updated to show fracture counts as well. You'll have the ability to change the order of them under 'tconfig'; it's defaulted to head/torso/arms/legs from left to right. Fracture data is stored in the fractures table for each individual target object; for your current target that would be antonius.target.fractures; it's a simple dictionary with bodypart (head/torso/arms/legs) mapped to a number.

Dual blunt will consider "prepped next" as two individual whirls (otherwise known as a full doublewhirl) away from a break, "prepped" as one individual whirl, and broken as normal. Basically, if you've done full doublewhirls to a single limb and the last hit was yellow, you only want to do half a doublewhirl to it in order to prep - a full doublewhirl would break. I haven't added support for limb damage from assault yet because I haven't personally found a need for it, but may add that to the list to tackle this weekend (shouldn't take too long).

Shoot me a forum PM or in-game message if you run into issues with it.

@Cynders asked if it was possible to turn off some of the echoes (for people applying and such) that I have going on, so I've added some additional configuration options to allow people to do just that. Here's what they look like on 'tconfig':

- Will show warning 3 seconds after salve application by target. - Will show when limbs are cured by all. - Will show when limb damage decays on target. - Will warn of limb damage decay 30 seconds prior.

First three take one of three possible values: all, none or target. All is the default, current functionality. Target will only show up if it's your current target (though some of the checks that just have echos, and no actual updates to hit values, are done at the point of the call - and not when the timer ends - to avoid creating tempTimers entirely, so if you're switching targets a lot you may see some for previous targets). None will turn that echo off completely.

Last one takes a number. 0 turns the warning off entirely, though it also uses the check for limb damage decay (the previous option) too. Please don't make it a value above 180, I have no idea what will happen.

@Antonius : If you'd like to tell me how to modify a certain attack based off a % of a "baseline" attack, like say.. "slice" in comparison to "rend" for SnB, I can add monk limbcounter functionality to your counter using "hammerfist" as the baseline.

If you have the Health Inspector trait, the anti-illusion check on the assess trigger (expecting it to use equilibrium) will fail. For now, you can get around that by disabling anti-illusion (or removing the code that checks that from the trigger). I'm still planning a suitable workaround for this, but it's probably going to take the form of a couple of extra configuration options. Illusions are considerably less of an issue than they were in the past, but I'd still like to avoid becoming susceptible to them if possible.