Ok so augments are intended to provide an easy way for developers to create many different unique systems inside their game, that right now all center around combat. The systems major attribute is that it is hardcoded into the servers core to handle many different filters applied to a combat and augment that combat based on the type of modifier used. Its much more difficult to explain without an example or demonstration so let me show you what one looks like to better explain.
YAML:
[DragonHunter]
name = "Dragon Hunter"
description = "The secret of slaying dragons passed down from the ancient hunters"
modifiers = [
# All Fire Resistance
{ damage = "fire", mod = "resist", value = 45, chance = 60},
# Dragon Piercing shots
{ monster = "Dragon", mod = "piercing", value = 100, chance = 50, origin = "ranged"},
{ monster = "Dragon Lord", mod = "piercing", value = 75, chance = 30, origin = "ranged"},
# Dragon shots extra damage
{ monster = "Dragon", mod = "critical", value = 65, factor = "flat", chance = 60, origin = "ranged"},
# Ricochet some damage from Dragon Fire attacks
{ monster = "Dragon", damage = "fire", mod = "ricochet", value = 95, chance = 25},
{ monster = "Dragon Lord", damage = "fire", mod = "ricochet", value = 35, chance = 10},
]
The above is TOML. TOML is just another markup language like xml, yaml or html. I am using it because I feel like it is more user friendly and clearner looking, as well as feature rich versus XML. The comments are denoted by a '#'.
Above we have different parts, the first braces [] denotes an array, and in our specific usage, that is how we are separating our different "augment" objects. I have been naming the objects in a similar fashion to the actual name of the augment, but no spaces are allowed there.
Anyways moving along, some of it is self explanatory, there is a name, a description and then the best part, our list of modifiers!
Modifiers right now are applied on combat (both single target and area). We have many different types, such as absorb, life steal, critical, reflect, ect. Looking more closely you will find that there are many "filters" applied to each individual modifiers, like above we find that almost all of those are specifically focused on a monster with the name either Dragon or Dragon Lord, this means those particular modifiers will never ever be active on damage that doesn't originate from the specified monster. We can further refine the type of damage this works on by filtering it further like you see above, by damage type. Where it says damage = "fire" that configures the modifier to only apply to fire damage. We can also filter by Race, CreatureType (which I have made and defined many, such as guild summon, own summon, monster, player, ect), and even Origin.
So if we wanted, we could make a modifier only apply on damage originating from a "condition" or from say a "spell" or "ranged". We could make the modifier only apply to "undead" race types, or if we wanted to be very specific we could say only death damage from undead that is from a condition (curse).
Alternatively, anything not specified is defaulted to all.... what that means is, if you don't specifically say "physical" for the damage (as example), then all damage will have the modifier applied to it. Same applies for origin, creaturetype, and race (feels like I'm forgetting a filter). As for the monster name part, if you don't specifically list a name, then it won't filter by name.
In addition to the defaults for the different filters, the chance also has a default of 100 if not specifically listed. Which brings me to the next cool thing about this system, it allows for both flat rate values, and percent rate values (percent is default if none are specified). You can even make multiple "absorb" type modifiers, one with flat, and another with percent, and they will both work and apply to the damage.
I know, its a lot to read, but that is because this system provides a lot of things one can do to customize it. One cool thing about the toml parser, is that it will recursively load all toml files inside the augments folder, so you can make many different lists of augments and sort them for the various systems one might make with this, such as "charms", "prey", "weapon upgrade", "vocation passives", "skill tree", the list of possibilities goes on and on.
The last cool thing I want to mention about this system is that the augment can be either added to an item, or to a player directly, and there is no "decay" time or anything, if you want to write some sort of timer for making the augment expire in lua, then that is completely possible, I have provided a full lua API for this system to go with the toml parser.
There is a whole list of "modifier types" for both offensive and defensive usage, not just the ones I mentioned above, we even have cool things like "deflect and ricochet". At any rate, the amount of ways these things can be put together to create a unique mechanic is quite extensive.