More actions
Content deleted Content added
// via Wikitext Extension for VSCode |
// via Wikitext Extension for VSCode Tag: Reverted |
||
Line 3: | Line 3: | ||
local aliases = { |
local aliases = { |
||
keys = { |
keys = { |
||
pre = { |
pre = {'pre', 'premade'}, |
||
' |
maneuver = {'man', 'maneuver', 'm'}, |
||
' |
interaction = {'int', 'interaction', 'i'}, |
||
}, |
delivery = {'del', 'delivery', 'd'}, |
||
target = {'tar', 'target', 't'}, |
|||
' |
duration = {'dur', 'duration', 'dr'}, |
||
' |
upgrade = {'upg', 'upgrade', 'u'}, |
||
' |
executionTime = {'executionTime', 'et', 'x'}, |
||
}, |
piercing = {'prc', 'piercing', 'p'}, |
||
interaction = { |
|||
'int', |
|||
'interaction', |
|||
'i' |
|||
}, |
|||
delivery = { |
|||
'del', |
|||
'delivery', |
|||
'd' |
|||
}, |
|||
target = { |
|||
'tar', |
|||
'target', |
|||
't' |
|||
}, |
|||
duration = { |
|||
'dur', |
|||
'duration', |
|||
'dr' |
|||
}, |
|||
upgrade = { |
|||
'upg', |
|||
'upgrade', |
|||
'u' |
|||
}, |
|||
executionTime = { |
|||
'executionTime', |
|||
'et', |
|||
'x' |
|||
}, |
|||
piercing = { |
|||
'prc', |
|||
'piercing', |
|||
'p' |
|||
}, |
|||
-- nearRange = { |
-- nearRange = { |
||
-- 'nearRange', |
-- 'nearRange', |
||
Line 55: | Line 20: | ||
-- 'fr' |
-- 'fr' |
||
-- }, |
-- }, |
||
flaw = { |
flaw = {'flaw', 'fl', 'f'}, |
||
' |
special = {'special', 'sp', 's'}, |
||
' |
range = {'range', 'rng', 'r'}, |
||
' |
attribute = {'attribute', 'attr', 'a'}, |
||
}, |
expansion = {'expansion', 'exp'}, |
||
expansionRange = {'expansionRange', 'er'}, |
|||
expansionCount = {'expansionCount', 'ec'}, |
|||
expansionAttribute = {'expansionAttribute', 'ea'}, |
|||
sustained = {'sustained', 'sus'}, |
|||
requirement = {'req', 'requirement', 'rq'}, |
|||
}, |
|||
verbal = {'ver', 'verbal'}, |
|||
somatic = {'som', 'somatic'}, |
|||
material = {'mat', 'material'}, |
|||
' |
magelore = {'mag', 'magelore', 'ml'}, |
||
}, |
invoked = {'inv', 'invoked', 'invoke'}, |
||
hp = {'hp', 'health', 'hitpoints', 'hitPoints', 'hit points'}, |
|||
attribute = { |
|||
hpx = {'hpx', 'healthx', 'hitpointsx', 'hitPointsx', 'hit pointsx'}, |
|||
'attribute', |
|||
'attr', |
|||
'a' |
|||
}, |
|||
expansion = { |
|||
'expansion', |
|||
'exp', |
|||
}, |
|||
expansionRange = { |
|||
'expansionRange', |
|||
'er' |
|||
}, |
|||
expansionCount = { |
|||
'expansionCount', |
|||
'ec' |
|||
}, |
|||
expansionAttribute = { |
|||
'expansionAttribute', |
|||
'ea' |
|||
}, |
|||
sustained = { |
|||
'sustained', |
|||
'sus' |
|||
}, |
|||
requirement = { |
|||
'req', |
|||
'requirement', |
|||
'rq' |
|||
}, |
|||
verbal = { |
|||
'ver', |
|||
'verbal', |
|||
}, |
|||
somatic = { |
|||
'som', |
|||
'somatic', |
|||
}, |
|||
material = { |
|||
'mat', |
|||
'material', |
|||
}, |
|||
magelore = { |
|||
'mag', |
|||
'magelore', |
|||
'ml' |
|||
}, |
|||
invoked = { |
|||
'inv', |
|||
'invoked', |
|||
'invoke', |
|||
}, |
|||
hp = { |
|||
'hp', |
|||
'health', |
|||
'hitpoints', |
|||
'hitPoints', |
|||
'hit points', |
|||
}, |
|||
hpx = { |
|||
'hpx', |
|||
'healthx', |
|||
'hitpointsx', |
|||
'hitPointsx', |
|||
'hit pointsx', |
|||
}, |
|||
mp = { |
mp = { |
||
'mp', |
'mp', 'mana', 'magic', 'magick', 'magik', 'mana points', |
||
' |
'magic points', 'magick points', 'magik points' |
||
'magic', |
|||
'magick', |
|||
'magik', |
|||
'mana points', |
|||
'magic points', |
|||
'magick points', |
|||
'magik points', |
|||
}, |
}, |
||
mpx = { |
mpx = { |
||
'mpx', |
'mpx', 'manax', 'manapointsx', 'mana pointsx', 'magic pointsx', |
||
' |
'magick pointsx', 'magik pointsx' |
||
'manapointsx', |
|||
'mana pointsx', |
|||
'magic pointsx', |
|||
'magick pointsx', |
|||
'magik pointsx', |
|||
}, |
|||
gp = { |
|||
'gp', |
|||
'gold', |
|||
'goldPieces', |
|||
'gold pieces', |
|||
}, |
|||
gpx = { |
|||
'gpx', |
|||
'goldx', |
|||
'goldPiecesx', |
|||
'gold piecesx', |
|||
}, |
|||
matx = { |
|||
'matx', |
|||
'materialx', |
|||
}, |
|||
class = { |
|||
'class', |
|||
}, |
}, |
||
gp = {'gp', 'gold', 'goldPieces', 'gold pieces'}, |
|||
gpx = {'gpx', 'goldx', 'goldPiecesx', 'gold piecesx'}, |
|||
matx = {'matx', 'materialx'}, |
|||
class = {'class'} |
|||
}, |
}, |
||
values = { |
values = { |
||
maneuver = { |
maneuver = { |
||
active = { |
active = {'ac', 'active', 'a'}, |
||
' |
reactive = {'re', 'reaction', 'r'}, |
||
' |
passive = {'ps', 'passive', 'p'}, |
||
' |
slow = {'sl', 'slow', 's'} |
||
}, |
|||
reactive = { |
|||
're', |
|||
'reaction', |
|||
'r' |
|||
}, |
|||
passive = { |
|||
'ps', |
|||
'passive', |
|||
'p' |
|||
}, |
|||
slow = { |
|||
'sl', |
|||
'slow', |
|||
's' |
|||
} |
|||
}, |
}, |
||
interaction = { |
interaction = { |
||
attack = { |
attack = {'atk', 'attack', 'a'}, |
||
' |
block = {'blk', 'block', 'b'}, |
||
' |
manifest = {'man', 'manifest', 'm'}, |
||
' |
feat = {'fea', 'feat', 'f'} |
||
}, |
|||
block = { |
|||
'blk', |
|||
'block', |
|||
'b' |
|||
}, |
|||
manifest = { |
|||
'man', |
|||
'manifest', |
|||
'm' |
|||
}, |
|||
feat = { |
|||
'fea', |
|||
'feat', |
|||
'f' |
|||
} |
|||
}, |
}, |
||
delivery = { |
delivery = { |
||
self = { |
self = {'sel', 'self', 's'}, |
||
' |
missile = {'mis', 'missile', 'm'}, |
||
' |
hand = {'han', 'hand', 'h', 'claw'}, |
||
' |
bite = {'bit', 'bite', 'b', 'mouth'}, |
||
}, |
item = {'itm', 'item', 'i'}, |
||
magelore = {'mag', 'magelore', 'ml'}, |
|||
' |
weapon = {'wep', 'weapon', 'w'}, |
||
' |
shield = {'shl', 'shield', 'sh'}, |
||
' |
armor = {'rmr', 'armor', 'r'}, |
||
}, |
sight = {'sit', 'sight', 'eye', 'e'}, |
||
aura = {'aur', 'aura', 'a'}, |
|||
' |
cone = {'con', 'cone', 'c'}, |
||
other = {'oth', 'other', 'o'} |
|||
'h', |
|||
'claw' |
|||
}, |
|||
bite = { |
|||
'bit', |
|||
'bite', |
|||
'b', |
|||
'mouth' |
|||
}, |
|||
item = { |
|||
'itm', |
|||
'item', |
|||
'i' |
|||
}, |
|||
magelore = { |
|||
'mag', |
|||
'magelore', |
|||
'ml' |
|||
}, |
|||
weapon = { |
|||
'wep', |
|||
'weapon', |
|||
'w' |
|||
}, |
|||
shield = { |
|||
'shl', |
|||
'shield', |
|||
'sh' |
|||
}, |
|||
armor = { |
|||
'rmr', |
|||
'armor', |
|||
'r' |
|||
}, |
|||
sight = { |
|||
'sit', |
|||
'sight', |
|||
'eye', |
|||
'e' |
|||
}, |
|||
aura = { |
|||
'aur', |
|||
'aura', |
|||
'a' |
|||
}, |
|||
cone = { |
|||
'con', |
|||
'cone', |
|||
'c' |
|||
}, |
|||
other = { |
|||
'oth', |
|||
'other', |
|||
'o' |
|||
} |
|||
}, |
}, |
||
target = { |
target = { |
||
self = { |
self = {'sel', 'self', 's'}, |
||
' |
creature = {'cre', 'creature', 'c'}, |
||
' |
body = {'bod', 'body', 'b'}, |
||
' |
vitals = {'vit', 'vitals', 'v'}, |
||
}, |
limb = {'lim', 'limb', 'l'}, |
||
arm = {'arm'}, |
|||
leg = {'leg'}, |
|||
' |
item = {'itm', 'item', 'i'}, |
||
' |
weapon = {'wep', 'weapon', 'w'}, |
||
}, |
shield = {'shl', 'shield', 'sh'}, |
||
armor = {'rmr', 'armor', 'r'}, |
|||
ship = {'ship'}, |
|||
' |
attack = {'atk', 'attack', 'a'}, |
||
ability = {'ab', 'ability'}, |
|||
}, |
spell = {'spl', 'spell'}, |
||
other = {'oth', 'other', 'o'}, |
|||
' |
ci = {'ci', 'creatureItem', 'itemCreature', 'ic'}, |
||
' |
ai = {'ai', 'attackItem', 'itemAttack', 'ia'}, |
||
area = {'area', 'ar'}, |
|||
}, |
|||
limb = { |
|||
'lim', |
|||
'limb', |
|||
'l' |
|||
}, |
|||
arm = { |
|||
'arm', |
|||
}, |
|||
leg = { |
|||
'leg', |
|||
}, |
|||
item = { |
|||
'itm', |
|||
'item', |
|||
'i' |
|||
}, |
|||
weapon = { |
|||
'wep', |
|||
'weapon', |
|||
'w' |
|||
}, |
|||
shield = { |
|||
'shl', |
|||
'shield', |
|||
'sh' |
|||
}, |
|||
armor = { |
|||
'rmr', |
|||
'armor', |
|||
'r' |
|||
}, |
|||
ship = { |
|||
'ship', |
|||
}, |
|||
attack = { |
|||
'atk', |
|||
'attack', |
|||
'a' |
|||
}, |
|||
ability = { |
|||
'ab', |
|||
'ability' |
|||
}, |
|||
spell = { |
|||
'spl', |
|||
'spell', |
|||
}, |
|||
other = { |
|||
'oth', |
|||
'other', |
|||
'o' |
|||
}, |
|||
ci = { |
|||
'ci', |
|||
'creatureItem', |
|||
'itemCreature', |
|||
'ic' |
|||
}, |
|||
ai = { |
|||
'ai', |
|||
'attackItem', |
|||
'itemAttack', |
|||
'ia' |
|||
}, |
|||
area = { |
|||
'area', |
|||
'ar' |
|||
}, |
|||
aci = { |
aci = { |
||
'cia', |
'cia', 'iac', 'aci', 'ica', 'cai', 'aic', 'creatureItemArea', |
||
' |
'itemCreatureArea', 'AreaCreatureItem', 'itemAreaCreature', |
||
' |
'creatureAreaItem', 'AreaItemCreature' |
||
'ica', |
|||
'cai', |
|||
'aic', |
|||
'creatureItemArea', |
|||
'itemCreatureArea', |
|||
'AreaCreatureItem', |
|||
'itemAreaCreature', |
|||
'creatureAreaItem', |
|||
'AreaItemCreature', |
|||
}, |
}, |
||
ac = { |
ac = {'ac', 'ca', 'areaCreature', 'creatureArea'}, |
||
' |
al = {'al', 'la', 'armLeg', 'legArm'}, |
||
' |
cs = {'cs', 'sc', 'creatureSelf', 'selfCreature'} |
||
'areaCreature', |
|||
'creatureArea', |
|||
}, |
|||
al = { |
|||
'al', |
|||
'la', |
|||
'armLeg', |
|||
'legArm', |
|||
}, |
|||
cs = { |
|||
'cs', |
|||
'sc', |
|||
'creatureSelf', |
|||
'selfCreature', |
|||
} |
|||
}, |
}, |
||
duration = { |
duration = { |
||
instant = { |
instant = {'0', 'in', 'instant', 'i'}, |
||
' |
always = {'always', 'forever', '4', 'inf'}, |
||
' |
noLimit = {'noLimit', '1', 'nl'}, |
||
' |
whileUp = {'up', 'whileUp', 'u'}, |
||
' |
whileDown = {'dn', 'whileDown', 'd'}, |
||
}, |
whileAlive = {'al', 'whileAlive', 'a'}, |
||
whileDead = {'dd', 'whileDead'}, |
|||
' |
endOfTurn = {'end', 'endOfTurn', 'e'}, |
||
dawn = {'dawn', 'd'}, |
|||
' |
startOfTargetNextTurn = {'tStart', 'startOfTargetNextTurn', 'ts'}, |
||
' |
endOfTargetNextTurn = {'tEnd', 'endOfTargetNextTurn', 'te'}, |
||
startOfYourNextTurn = {'uStart', 'startOfYourNextTurn', 'us'}, |
|||
}, |
|||
endOfYourNextTurn = {'uEnd', 'endOfYourNextTurn', 'ue'}, |
|||
endOfCombat = {'endOfCombat', 'ec'}, |
|||
timeParse = {'^%d+[mhdwys]$'} |
|||
'nl', |
|||
}, |
|||
whileUp = { |
|||
'up', |
|||
'whileUp', |
|||
'u' |
|||
}, |
|||
whileDown = { |
|||
'dn', |
|||
'whileDown', |
|||
'd' |
|||
}, |
|||
whileAlive = { |
|||
'al', |
|||
'whileAlive', |
|||
'a' |
|||
}, |
|||
whileDead = { |
|||
'dd', |
|||
'whileDead', |
|||
}, |
|||
endOfTurn = { |
|||
'end', |
|||
'endOfTurn', |
|||
'e' |
|||
}, |
|||
dawn = { |
|||
'dawn', |
|||
'd' |
|||
}, |
|||
startOfTargetNextTurn = { |
|||
'tStart', |
|||
'startOfTargetNextTurn', |
|||
'ts' |
|||
}, |
|||
endOfTargetNextTurn = { |
|||
'tEnd', |
|||
'endOfTargetNextTurn', |
|||
'te' |
|||
}, |
|||
startOfYourNextTurn = { |
|||
'uStart', |
|||
'startOfYourNextTurn', |
|||
'us' |
|||
}, |
|||
endOfYourNextTurn = { |
|||
'uEnd', |
|||
'endOfYourNextTurn', |
|||
'ue' |
|||
}, |
|||
endOfCombat = { |
|||
'endOfCombat', |
|||
'ec' |
|||
}, |
|||
timeParse = { |
|||
'^%d+[mhdwys]$' |
|||
} |
|||
}, |
}, |
||
upgrade = { |
upgrade = { |
||
warded = { |
warded = {'wrd', 'warded', 'w'}, |
||
absolute = {'abs', 'absolute', 'a'} |
|||
'warded', |
|||
'w' |
|||
}, |
|||
absolute = { |
|||
'abs', |
|||
'absolute', |
|||
'a' |
|||
} |
|||
}, |
}, |
||
executionTime = { |
executionTime = { |
||
freeAction = { |
freeAction = {'0a', 'freeAction', 'fa'}, |
||
' |
singleAction = {'1a', 'a', 'singleAction', 'sa'}, |
||
' |
doubleAction = {'2a', 'doubleAction', 'da'}, |
||
' |
tripleAction = {'3a', 'tripleAction', 'ta'}, |
||
}, |
freeReaction = {'0r', 'freeReaction', 'fr'}, |
||
reaction = {'1r', 'reaction', 'r'}, |
|||
' |
shortRest = {'sr', 'shortRest', 's'}, |
||
' |
longRest = {'lr', 'longRest', 'l'}, |
||
timeParse = {'^%d+[mhdwy]$'} |
|||
'sa', |
|||
}, |
|||
doubleAction = { |
|||
'2a', |
|||
'doubleAction', |
|||
'da' |
|||
}, |
|||
tripleAction = { |
|||
'3a', |
|||
'tripleAction', |
|||
'ta' |
|||
}, |
|||
freeReaction = { |
|||
'0r', |
|||
'freeReaction', |
|||
'fr' |
|||
}, |
|||
reaction = { |
|||
'1r', |
|||
'reaction', |
|||
'r' |
|||
}, |
|||
shortRest = { |
|||
'sr', |
|||
'shortRest', |
|||
's' |
|||
}, |
|||
longRest = { |
|||
'lr', |
|||
'longRest', |
|||
'l' |
|||
}, |
|||
timeParse = { |
|||
'^%d+[mhdwy]$' |
|||
} |
|||
}, |
|||
piercing = { |
|||
av0 = { |
|||
'av0', |
|||
'a' |
|||
}, |
|||
unblockable = { |
|||
'ub', |
|||
'u' |
|||
} |
|||
}, |
}, |
||
piercing = {av0 = {'av0', 'a'}, unblockable = {'ub', 'u'}}, |
|||
range = { |
range = { |
||
melee = { |
melee = {'melee', 'm'}, |
||
' |
weapon = {'weapon', 'weaponReach', 'w'}, |
||
' |
hand = {'hand', 'handReach', 'h'}, |
||
}, |
bite = {'bite', 'biteReach', 'b'}, |
||
item = {'item', 'itemReach', 'i'}, |
|||
' |
shield = {'shield', 'shieldReach', 'sh'}, |
||
' |
armor = {'armor', 'armorReach', 'r'}, |
||
' |
sight = {'sight', 'sightReach', 'eye', 'e'}, |
||
}, |
self = {'self', 's'}, |
||
distParse = {'^%d+[fm]$'}, |
|||
other = {'other', 'o'} |
|||
'handReach', |
|||
'h' |
|||
}, |
|||
bite = { |
|||
'bite', |
|||
'biteReach', |
|||
'b' |
|||
}, |
|||
item = { |
|||
'item', |
|||
'itemReach', |
|||
'i' |
|||
}, |
|||
shield = { |
|||
'shield', |
|||
'shieldReach', |
|||
'sh' |
|||
}, |
|||
armor = { |
|||
'armor', |
|||
'armorReach', |
|||
'r' |
|||
}, |
|||
sight = { |
|||
'sight', |
|||
'sightReach', |
|||
'eye', |
|||
'e' |
|||
}, |
|||
self = { |
|||
'self', |
|||
's' |
|||
}, |
|||
distParse = { |
|||
'^%d+[fm]$' |
|||
}, |
|||
other = { |
|||
'other', |
|||
'o' |
|||
} |
|||
}, |
}, |
||
attribute = { |
attribute = { |
||
int = { |
int = {'int', 'INT', 'i'}, |
||
' |
str = {'str', 'STR', 's'}, |
||
' |
mov = {'mov', 'MOV', 'm'}, |
||
' |
per = {'per', 'PER', 'p'}, |
||
}, |
snk = {'snk', 'SNK', 's'}, |
||
unp = {'unp', 'UNP', 'u'} |
|||
'str', |
|||
'STR', |
|||
's' |
|||
}, |
|||
mov = { |
|||
'mov', |
|||
'MOV', |
|||
'm' |
|||
}, |
|||
per = { |
|||
'per', |
|||
'PER', |
|||
'p' |
|||
}, |
|||
snk = { |
|||
'snk', |
|||
'SNK', |
|||
's' |
|||
}, |
|||
unp = { |
|||
'unp', |
|||
'UNP', |
|||
'u' |
|||
}, |
|||
}, |
}, |
||
expansionAttribute = { |
expansionAttribute = { |
||
int = { |
int = {'int', 'INT', 'i'}, |
||
' |
str = {'str', 'STR', 's'}, |
||
' |
mov = {'mov', 'MOV', 'm'}, |
||
' |
per = {'per', 'PER', 'p'}, |
||
}, |
snk = {'snk', 'SNK', 's'}, |
||
unp = {'unp', 'UNP', 'u'} |
|||
'str', |
|||
'STR', |
|||
's' |
|||
}, |
|||
mov = { |
|||
'mov', |
|||
'MOV', |
|||
'm' |
|||
}, |
|||
per = { |
|||
'per', |
|||
'PER', |
|||
'p' |
|||
}, |
|||
snk = { |
|||
'snk', |
|||
'SNK', |
|||
's' |
|||
}, |
|||
unp = { |
|||
'unp', |
|||
'UNP', |
|||
'u' |
|||
}, |
|||
}, |
}, |
||
expansion = { |
expansion = { |
||
detonate = { |
detonate = {'det', 'detonate', 'd'}, |
||
' |
ripple = {'rip', 'ripple', 'r'}, |
||
' |
cascade = {'cas', 'cascade', 'c'}, |
||
' |
fork = {'for', 'fork', 'f'} |
||
}, |
|||
ripple = { |
|||
'rip', |
|||
'ripple', |
|||
'r' |
|||
}, |
|||
cascade = { |
|||
'cas', |
|||
'cascade', |
|||
'c' |
|||
}, |
|||
fork = { |
|||
'for', |
|||
'fork', |
|||
'f' |
|||
} |
|||
}, |
|||
expansionRange = { |
|||
distParse = { |
|||
'^%d+[fm]$' |
|||
} |
|||
}, |
|||
expansionCount = { |
|||
expansionCount = { |
|||
'expansionCount', |
|||
'ec', |
|||
} |
|||
}, |
|||
sustained = { |
|||
sustained = { |
|||
'sus', |
|||
'sustained', |
|||
's', |
|||
'1', |
|||
} |
|||
}, |
|||
verbal = { |
|||
verbal = { |
|||
'ver', |
|||
'verbal', |
|||
'v', |
|||
'1', |
|||
} |
|||
}, |
|||
somatic = { |
|||
somatic = { |
|||
'som', |
|||
'somatic', |
|||
's', |
|||
'1', |
|||
} |
|||
}, |
|||
material = { |
|||
material = { |
|||
'mat', |
|||
'material', |
|||
'm', |
|||
'1', |
|||
} |
|||
}, |
|||
magelore = { |
|||
magelore = { |
|||
'mag', |
|||
'magelore', |
|||
'ml', |
|||
'1', |
|||
} |
|||
}, |
|||
invoked = { |
|||
invoked = { |
|||
'inv', |
|||
'invoked', |
|||
'i', |
|||
'1', |
|||
} |
|||
}, |
}, |
||
expansionRange = {distParse = {'^%d+[fm]$'}}, |
|||
expansionCount = {expansionCount = {'expansionCount', 'ec'}}, |
|||
sustained = {sustained = {'sus', 'sustained', 's', '1'}}, |
|||
verbal = {verbal = {'ver', 'verbal', 'v', '1'}}, |
|||
somatic = {somatic = {'som', 'somatic', 's', '1'}}, |
|||
material = {material = {'mat', 'material', 'm', '1'}}, |
|||
magelore = {magelore = {'mag', 'magelore', 'ml', '1'}}, |
|||
invoked = {invoked = {'inv', 'invoked', 'i', '1'}}, |
|||
class = { |
class = { |
||
ber = { |
ber = {'ber'}, |
||
due = {'due'}, |
|||
}, |
vet = {'vet'}, |
||
kni = {'kni'}, |
|||
pal = {'pal'}, |
|||
}, |
ass = {'ass'}, |
||
cor = {'cor'}, |
|||
arc = {'arc'}, |
|||
}, |
thi = {'thi'}, |
||
ran = {'ran'}, |
|||
fla = {'fla'}, |
|||
}, |
sto = {'sto'}, |
||
lif = {'lif'}, |
|||
nec = {'nec'}, |
|||
} |
nat = {'nat'} |
||
ass = { |
|||
'ass', |
|||
}, |
|||
cor = { |
|||
'cor', |
|||
}, |
|||
arc = { |
|||
'arc', |
|||
}, |
|||
thi = { |
|||
'thi', |
|||
}, |
|||
ran = { |
|||
'ran', |
|||
}, |
|||
fla = { |
|||
'fla', |
|||
}, |
|||
sto = { |
|||
'sto', |
|||
}, |
|||
lif = { |
|||
'lif', |
|||
}, |
|||
nec = { |
|||
'nec', |
|||
}, |
|||
nat = { |
|||
'nat', |
|||
}, |
|||
} |
} |
||
} |
} |
||
Line 811: | Line 211: | ||
color = '#f9f06b', |
color = '#f9f06b', |
||
class = 'component-tagged verbal' |
class = 'component-tagged verbal' |
||
} |
} |
||
}, |
}, |
||
somatic = { |
somatic = { |
||
Line 820: | Line 220: | ||
color = '#f9f06b', |
color = '#f9f06b', |
||
class = 'component-tagged somatic' |
class = 'component-tagged somatic' |
||
} |
} |
||
}, |
}, |
||
material = { |
material = { |
||
Line 829: | Line 229: | ||
color = '#ff7800', |
color = '#ff7800', |
||
class = 'component-tagged material' |
class = 'component-tagged material' |
||
} |
} |
||
}, |
}, |
||
magelore = { |
magelore = { |
||
Line 838: | Line 238: | ||
color = '#f9f06b', |
color = '#f9f06b', |
||
class = 'component-tagged magelore' |
class = 'component-tagged magelore' |
||
} |
} |
||
}, |
}, |
||
invoked = { |
invoked = { |
||
Line 847: | Line 247: | ||
color = '#f9f06b', |
color = '#f9f06b', |
||
class = 'component-tagged invoked' |
class = 'component-tagged invoked' |
||
} |
} |
||
}, |
}, |
||
flaw = { |
flaw = { |
||
Line 856: | Line 256: | ||
color = '#e01b24', |
color = '#e01b24', |
||
class = 'flaw-tagged flaw' |
class = 'flaw-tagged flaw' |
||
} |
} |
||
}, |
}, |
||
special = { |
special = { |
||
Line 865: | Line 265: | ||
color = '#9141AC', |
color = '#9141AC', |
||
class = 'special-tagged special' |
class = 'special-tagged special' |
||
} |
} |
||
}, |
}, |
||
es = { |
es = { |
||
Line 874: | Line 274: | ||
color = '#9141AC', |
color = '#9141AC', |
||
class = 'elderSorcery-tagged elderSorcery' |
class = 'elderSorcery-tagged elderSorcery' |
||
} |
} |
||
}, |
}, |
||
warded = { |
warded = { |
||
Line 883: | Line 283: | ||
color = '#f9f06b', |
color = '#f9f06b', |
||
class = 'warded-tagged warded' |
class = 'warded-tagged warded' |
||
} |
} |
||
}, |
}, |
||
elements = { |
elements = { |
||
Line 920: | Line 320: | ||
color = '#33d17a', |
color = '#33d17a', |
||
class = 'element-tagged nature' |
class = 'element-tagged nature' |
||
} |
} |
||
}, |
}, |
||
class = { |
class = { |
||
Line 1,012: | Line 412: | ||
symbol = '🧙', |
symbol = '🧙', |
||
class = 'class-tagged natureMage' |
class = 'class-tagged natureMage' |
||
} |
} |
||
}, |
}, |
||
power = { |
power = { |
||
Line 1,084: | Line 484: | ||
color = '#77767b', |
color = '#77767b', |
||
class = 'power-tagged unknown' |
class = 'power-tagged unknown' |
||
} |
} |
||
}, |
}, |
||
category = { |
category = { |
||
Line 1,122: | Line 522: | ||
symbol = '🔄', |
symbol = '🔄', |
||
class = 'rotator' |
class = 'rotator' |
||
} |
} |
||
}, |
}, |
||
effects = { |
effects = { |
||
Line 1,274: | Line 674: | ||
symbol = '🕰️', |
symbol = '🕰️', |
||
class = 'effect-tagged temporal' |
class = 'effect-tagged temporal' |
||
} |
} |
||
}, |
}, |
||
pre = { |
pre = { |
||
Line 1,312: | Line 712: | ||
symbol = '👉️', |
symbol = '👉️', |
||
class = 'deliveryPackage-tagged touch' |
class = 'deliveryPackage-tagged touch' |
||
} |
} |
||
}, |
}, |
||
maneuver = { |
maneuver = { |
||
Line 1,338: | Line 738: | ||
symbol = '🐢', |
symbol = '🐢', |
||
class = 'maneuver-tagged slow' |
class = 'maneuver-tagged slow' |
||
} |
} |
||
}, |
}, |
||
interaction = { |
interaction = { |
||
Line 1,556: | Line 956: | ||
}, |
}, |
||
ability = { |
ability = { |
||
text = 'Ability', |
|||
link = 'Ability target abilities', |
|||
symbol = '🅰', |
|||
color = '#f6d32d', |
|||
class = 'target-tagged ability' |
class = 'target-tagged ability' |
||
}, |
}, |
||
Line 1,583: | Line 983: | ||
class = 'target-tagged area' |
class = 'target-tagged area' |
||
}, |
}, |
||
ci = { |
ci = {tags = {'creature', 'item'}}, |
||
ai = {tags = {'attack', 'item'}}, |
|||
aci = {tags = {'area', 'creature', 'item'}}, |
|||
ac = {tags = {'area', 'creature'}}, |
|||
} |
al = {tags = {'arm', 'leg'}}, |
||
cs = {tags = {'creature', 'self'}} |
|||
ai = { |
|||
tags = { |
|||
'attack', |
|||
'item' |
|||
} |
|||
}, |
|||
aci = { |
|||
tags = { |
|||
'area', |
|||
'creature', |
|||
'item', |
|||
} |
|||
}, |
|||
ac = { |
|||
tags = { |
|||
'area', |
|||
'creature', |
|||
} |
|||
}, |
|||
al = { |
|||
tags = { |
|||
'arm', |
|||
'leg', |
|||
} |
|||
}, |
|||
cs = { |
|||
tags = { |
|||
'creature', |
|||
'self', |
|||
} |
|||
}, |
|||
}, |
}, |
||
upgrade = { |
upgrade = { |
||
Line 1,806: | Line 1,175: | ||
-- link = 'Armor range abilities', |
-- link = 'Armor range abilities', |
||
no = true |
no = true |
||
} |
} |
||
}, |
}, |
||
attribute = { |
attribute = { |
||
Line 1,844: | Line 1,213: | ||
link = 'UNP save abilities', |
link = 'UNP save abilities', |
||
class = 'saveAttribute-tagged unp' |
class = 'saveAttribute-tagged unp' |
||
} |
} |
||
}, |
}, |
||
expansionAttribute = { |
expansionAttribute = { |
||
Line 1,882: | Line 1,251: | ||
link = 'UNP save abilities', |
link = 'UNP save abilities', |
||
class = 'expansionAttribute-tagged unp' |
class = 'expansionAttribute-tagged unp' |
||
} |
} |
||
}, |
}, |
||
expansion = { |
expansion = { |
||
Line 1,928: | Line 1,297: | ||
target = 'creature', |
target = 'creature', |
||
duration = 'instant', |
duration = 'instant', |
||
range = 'weapon' |
range = 'weapon' |
||
}, |
}, |
||
ray = { |
ray = { |
||
Line 1,938: | Line 1,307: | ||
duration = 'instant', |
duration = 'instant', |
||
range = '60f', |
range = '60f', |
||
piercing = 'av0' |
piercing = 'av0' |
||
}, |
}, |
||
ball = { |
ball = { |
||
Line 1,948: | Line 1,317: | ||
duration = 'instant', |
duration = 'instant', |
||
range = '30f', |
range = '30f', |
||
piercing = 'ub' |
piercing = 'ub' |
||
}, |
}, |
||
aura = { |
aura = { |
||
Line 1,959: | Line 1,328: | ||
duration = 'instant', |
duration = 'instant', |
||
range = '10f', |
range = '10f', |
||
attribute = 'mov' |
attribute = 'mov' |
||
}, |
}, |
||
ritual = { |
ritual = { |
||
Line 1,968: | Line 1,337: | ||
target = 'creature', |
target = 'creature', |
||
duration = 'instant', |
duration = 'instant', |
||
range = '5f' |
range = '5f' |
||
}, |
}, |
||
touch = { |
touch = { |
||
Line 1,978: | Line 1,347: | ||
duration = 'instant', |
duration = 'instant', |
||
range = 'hand', |
range = 'hand', |
||
piercing = 'ub' |
piercing = 'ub' |
||
}, |
}, |
||
triumph = { |
triumph = { |
||
Line 1,988: | Line 1,357: | ||
target = 'self', |
target = 'self', |
||
duration = 'instant', |
duration = 'instant', |
||
range = 'self' |
range = 'self' |
||
}, |
}, |
||
self = { |
self = { |
||
Line 1,998: | Line 1,367: | ||
target = 'self', |
target = 'self', |
||
duration = 'instant', |
duration = 'instant', |
||
range = 'self' |
range = 'self' |
||
}, |
}, |
||
passive = { |
passive = { |
||
Line 2,007: | Line 1,376: | ||
target = 'self', |
target = 'self', |
||
duration = '4', |
duration = '4', |
||
range = 'self' |
range = 'self' |
||
}, |
}, |
||
crown = { |
crown = { |
||
Line 2,018: | Line 1,387: | ||
duration = '8h', |
duration = '8h', |
||
range = 'self', |
range = 'self', |
||
sustained = 'sus' |
sustained = 'sus' |
||
} |
} |
||
} |
} |
||
Line 2,035: | Line 1,404: | ||
-- Check for irregular forms |
-- Check for irregular forms |
||
if irregulars[word] then |
if irregulars[word] then return irregulars[word] end |
||
return irregulars[word] |
|||
end |
|||
-- Regular pluralization rules |
-- Regular pluralization rules |
||
Line 2,057: | Line 1,424: | ||
local function addCategory(category, key, val, skill, spell, addCats, noLower) |
local function addCategory(category, key, val, skill, spell, addCats, noLower) |
||
if addCats then |
if addCats then |
||
if not noLower then |
if not noLower then category = category:lower() end |
||
category = category:lower() |
|||
end |
|||
if tags[key] and tags[key][val] then |
if tags[key] and tags[key][val] then |
||
if tags[key][val].tags then |
if tags[key][val].tags then |
||
out = '' |
out = '' |
||
for _, t in ipairs(tags[key][val].tags) do |
for _, t in ipairs(tags[key][val].tags) do |
||
out = out .. |
out = out .. |
||
addCategory(category, key, t, skill, spell, |
|||
addCats, true) |
|||
end |
end |
||
return out |
return out |
||
Line 2,072: | Line 1,439: | ||
end |
end |
||
if skill then |
if skill then |
||
skillCategory = category:gsub('ability', 'skill'):gsub('abilities', |
skillCategory = category:gsub('ability', 'skill'):gsub('abilities', |
||
'skills') |
|||
skillCategory = skillCategory:gsub("^%l", string.upper) |
skillCategory = skillCategory:gsub("^%l", string.upper) |
||
end |
end |
||
if spell then |
if spell then |
||
spellCategory = category:gsub('ability', 'spell'):gsub('abilities', |
spellCategory = category:gsub('ability', 'spell'):gsub('abilities', |
||
'spells') |
|||
spellCategory = spellCategory:gsub("^%l", string.upper) |
spellCategory = spellCategory:gsub("^%l", string.upper) |
||
end |
end |
||
category = category:gsub("^%l", string.upper) |
category = category:gsub("^%l", string.upper) |
||
local c = '[[Category:' .. tostring(category) .. ']]' |
local c = '[[Category:' .. tostring(category) .. ']]' |
||
if skill then |
if skill then |
||
Line 2,097: | Line 1,466: | ||
if not tags[key] or not tags[key][value] then |
if not tags[key] or not tags[key][value] then |
||
if value then |
if value then |
||
local out = |
local out = |
||
frame:preprocess("{{ucfirst:" .. tostring(value) .. "}}") |
|||
out = out .. '.' |
if not ('.' == out:sub(-1)) then out = out .. '.' end |
||
end |
|||
return out |
return out |
||
else |
else |
||
Line 2,109: | Line 1,477: | ||
if tag.no then |
if tag.no then |
||
local out = frame:preprocess("{{ucfirst:" .. tag.text .. "}}") |
local out = frame:preprocess("{{ucfirst:" .. tag.text .. "}}") |
||
if not ('.' == out:sub(-1)) then |
if not ('.' == out:sub(-1)) then out = out .. '.' end |
||
out = out .. '.' |
|||
end |
|||
return out |
return out |
||
end |
end |
||
Line 2,122: | Line 1,488: | ||
end |
end |
||
local tagText = "{{Tag|{{ucfirst:" .. tag.text .. "}}" |
local tagText = "{{Tag|{{ucfirst:" .. tag.text .. "}}" |
||
if tag.symbol then |
if tag.symbol then tagText = tagText .. "|" .. tag.symbol end |
||
tagText = tagText .. "|" .. tag.symbol |
|||
end |
|||
if tag.link then |
if tag.link then |
||
tagText = tagText .. "|l=:Category:{{ucfirst:" .. tag.link .. "}}" |
tagText = tagText .. "|l=:Category:{{ucfirst:" .. tag.link .. "}}" |
||
end |
end |
||
if tag.color then |
if tag.color then tagText = tagText .. "|c=" .. tag.color end |
||
if tag.class then tagText = tagText .. "|class=" .. tag.class end |
|||
if transparent then tagText = tagText .. "|o=1" end |
|||
end |
|||
if tag.class then |
|||
tagText = tagText .. "|class=" .. tag.class |
|||
end |
|||
if transparent then |
|||
tagText = tagText .. "|o=1" |
|||
end |
|||
tagText = tagText .. "}}" |
tagText = tagText .. "}}" |
||
-- out = frame:preprocess(tagText) |
-- out = frame:preprocess(tagText) |
||
Line 2,148: | Line 1,506: | ||
local hasPre = false |
local hasPre = false |
||
for _, key in ipairs(keys) do |
for _, key in ipairs(keys) do |
||
if ('pre' == key and table['pre']) or |
if ('pre' == key and table['pre']) or |
||
('executionTime' == key and table['executionTime']) or |
|||
('target' == key) or ('duration' == key) or |
|||
('invoked' == key and table['invoked']) then |
|||
hasPre = true |
hasPre = true |
||
content = content .. |
content = content .. |
||
frame:preprocess( |
|||
makeTag(frame, key, table[key], makeCat)) |
|||
else |
else |
||
if hasPre then |
if hasPre then |
||
subContent = subContent .. |
subContent = subContent .. |
||
makeTag(frame, key, table[key], makeCat) |
|||
else |
else |
||
content = content .. |
content = content .. |
||
frame:preprocess( |
|||
makeTag(frame, key, table[key], makeCat)) |
|||
end |
end |
||
end |
end |
||
Line 2,166: | Line 1,532: | ||
for _, key in ipairs(keys) do |
for _, key in ipairs(keys) do |
||
if table[key] then |
if table[key] then |
||
content = frame:preprocess( |
content = frame:preprocess( |
||
'{{ucfirst:' .. content .. table[key] .. '}}') |
|||
end |
end |
||
end |
end |
||
Line 2,174: | Line 1,541: | ||
local function makeBar(frame, title, content, link, flags, bottom) |
local function makeBar(frame, title, content, link, flags, bottom) |
||
if content == '' then |
if content == '' then return '' end |
||
return '' |
|||
end |
|||
local barSpace = mw.html.create('span') |
local barSpace = mw.html.create('span') |
||
barSpace:wikitext(frame:preprocess(' ')):css('display', 'none') |
|||
barSpace |
|||
:wikitext(frame:preprocess(' ')) |
|||
:css('display', 'none') |
|||
local barTitle = mw.html.create('span') |
local barTitle = mw.html.create('span') |
||
local barTitleClass = "{{lc:" .. title .. "}}" |
local barTitleClass = "{{lc:" .. title .. "}}" |
||
Line 2,187: | Line 1,550: | ||
barTitleClass = barTitleClass:gsub('\"', '') |
barTitleClass = barTitleClass:gsub('\"', '') |
||
local barText = "{{ucfirst:" .. title .. "}}" |
local barText = "{{ucfirst:" .. title .. "}}" |
||
if link then |
if link then barText = "[[" .. link .. "|" .. barText .. "]]" end |
||
barText = "[[" .. link .. "|" .. barText .. "]]" |
|||
end |
|||
barText = barText .. ":" |
barText = barText .. ":" |
||
barTitle:addClass('ability-bar-title'):wikitext(frame:preprocess(barText)) |
|||
barTitle |
|||
: |
:css('font-weight', 'bold'):css('margin-right', '0.5em') |
||
:wikitext(frame:preprocess(barText)) |
|||
:css('font-weight', 'bold') |
|||
:css('margin-right', '0.5em') |
|||
local barContent = mw.html.create('span') |
local barContent = mw.html.create('span') |
||
barContent |
barContent:addClass('ability-bar-content'):wikitext(content) |
||
:addClass('ability-bar-content') |
|||
:wikitext(content) |
|||
local output = mw.html.create('div') |
local output = mw.html.create('div') |
||
if bottom then |
if bottom then output = mw.html.create('span') end |
||
if not flags then flags = {} end |
|||
end |
|||
if not flags then |
|||
flags = {} |
|||
end |
|||
for k, v in pairs(flags) do |
for k, v in pairs(flags) do |
||
if type(v) == 'string' then |
if type(v) == 'string' then |
||
Line 2,212: | Line 1,564: | ||
end |
end |
||
end |
end |
||
output:addClass('ability-bar'):addClass('ability-bar-' .. barTitleClass) |
|||
output |
|||
:attr(flags):attr('test', 'out'):node(barSpace):node(barTitle):node( |
|||
:addClass('ability-bar') |
|||
barSpace):node(barContent):css('display', 'block') |
|||
:addClass('ability-bar-' .. barTitleClass) |
|||
:attr(flags) |
|||
:attr('test', 'out') |
|||
:node(barSpace) |
|||
:node(barTitle) |
|||
:node(barSpace) |
|||
:node(barContent) |
|||
:css('display', 'block') |
|||
-- if flags then |
-- if flags then |
||
-- for k, v in ipairs(flags) do |
|||
-- output:attr(k, v) |
|||
-- end |
|||
-- end |
-- end |
||
return tostring(output) |
return tostring(output) |
||
end |
|||
local function nonempty(v) |
|||
if v == nil then return false end |
|||
if type(v) ~= 'string' then return true end |
|||
return mw.text.trim(v) ~= '' |
|||
end |
end |
||
Line 2,236: | Line 1,587: | ||
for canonicalKey, keyAliasList in pairs(aliases.keys) do |
for canonicalKey, keyAliasList in pairs(aliases.keys) do |
||
for _, alias in ipairs(keyAliasList) do |
for _, alias in ipairs(keyAliasList) do |
||
local v = args[alias] |
|||
if nonempty(v) then |
|||
resolved[canonicalKey] = v |
|||
break |
break |
||
end |
end |
||
Line 2,247: | Line 1,599: | ||
local rawValue = resolved[canonicalKey] |
local rawValue = resolved[canonicalKey] |
||
-- Treat empty/whitespace as false |
|||
if rawValue ~= nil and not nonempty(rawValue) then |
|||
resolved[canonicalKey] = false |
|||
elseif rawValue ~= nil then |
|||
for canonicalValue, valueAliasList in pairs(canonicalValueTable) do |
for canonicalValue, valueAliasList in pairs(canonicalValueTable) do |
||
for _, alias in ipairs(valueAliasList) do |
for _, alias in ipairs(valueAliasList) do |
||
if rawValue == |
if rawValue == alias then |
||
resolved[canonicalKey] = false |
|||
break |
|||
elseif rawValue == alias then |
|||
resolved[canonicalKey] = canonicalValue |
resolved[canonicalKey] = canonicalValue |
||
break |
break |
||
elseif type(valueAliasList) == "table" and valueAliasList[1] and |
|||
type(rawValue) == "string" and |
|||
rawValue:match(valueAliasList[1]) then |
|||
-- (keep your existing time/range parsing here unchanged) |
|||
if canonicalKey == "duration" or canonicalKey == |
|||
"executionTime" then |
|||
local num = tonumber(rawValue:match("^(%d+)")) |
local num = tonumber(rawValue:match("^(%d+)")) |
||
local unit = rawValue:match("[%a]+$") |
local unit = rawValue:match("[%a]+$") |
||
local unitMap = { |
local unitMap = { |
||
m = "minute", |
|||
h = "hour", |
|||
d = "day", |
|||
w = "week", |
|||
y = "year", |
|||
r = "round", |
|||
s = "second" |
|||
} |
|||
resolved[canonicalKey] = unitMap[unit] and |
|||
(num .. " " .. |
|||
unitMap[unit] .. |
|||
(num > 1 and "s" or |
|||
"")) or |
|||
rawValue |
|||
elseif canonicalKey == "range" or canonicalKey == |
|||
"expansionRange" then |
|||
local num = tonumber(rawValue:match("^(%d+)")) |
local num = tonumber(rawValue:match("^(%d+)")) |
||
local unit = rawValue:match("[%a]+$") |
local unit = rawValue:match("[%a]+$") |
||
local unitMap = {f = "feet", m = "miles"} |
local unitMap = {f = "feet", m = "miles"} |
||
resolved[canonicalKey] = unitMap[unit] and |
|||
(num .. " " .. |
|||
unitMap[unit]) or |
|||
rawValue |
|||
resolved[canonicalKey] = rawValue |
|||
end |
|||
end |
end |
||
end |
end |
||
Line 2,290: | Line 1,650: | ||
end |
end |
||
local classFixes = { |
local classFixes = {bar = 'ber', sam = 'due', ama = 'cor'} |
||
bar = 'ber', |
|||
sam = 'due', |
|||
ama = 'cor' |
|||
} |
|||
local classArchetypes = { |
local classArchetypes = { |
||
Line 2,329: | Line 1,685: | ||
lif = 'Life Mage', |
lif = 'Life Mage', |
||
nec = 'Necromancer', |
nec = 'Necromancer', |
||
nat = 'Nature Mage' |
nat = 'Nature Mage' |
||
} |
} |
||
local archetypeName = { |
local archetypeName = {warr = 'Warrior', semi = 'Semi', mage = 'Mage'} |
||
warr = 'Warrior', |
|||
semi = 'Semi', |
|||
mage = 'Mage', |
|||
} |
|||
function p.a |
function p.a(frame) |
||
makeCat = true |
makeCat = true |
||
-- Figure out all the default values |
-- Figure out all the default values |
||
-- Prefer parent args if invoked via a template |
|||
local args = frame.args |
|||
local parent = frame:getParent() |
|||
local rawArgs = parent and parent.args or frame.args |
|||
-- Drop empty/whitespace-only values so "" behaves like false/nil |
|||
local args = {} |
|||
for k, v in pairs(rawArgs) do if nonempty(v) then args[k] = v end end |
|||
local resolved = {} |
local resolved = {} |
||
if args['pre'] then |
if args['pre'] then |
||
local toResolve = resolveAlias(premades[args['pre']], aliases) |
local toResolve = resolveAlias(premades[args['pre']], aliases) |
||
for k, v in pairs(toResolve) do |
for k, v in pairs(toResolve) do resolved[k] = v end |
||
resolved[k] = v |
|||
end |
|||
end |
end |
||
local userResolve = resolveAlias(args, aliases) |
local userResolve = resolveAlias(args, aliases) |
||
for k, v in pairs(userResolve) do |
for k, v in pairs(userResolve) do resolved[k] = v end |
||
resolved[k] = v |
|||
end |
|||
if resolved['pre'] and premades[args['pre']]['skip'] then |
if resolved['pre'] and premades[args['pre']]['skip'] then |
||
resolved['pre'] = nil |
resolved['pre'] = nil |
||
end |
end |
||
if not resolved['duration'] then |
if not resolved['duration'] then resolved['duration'] = 'instant' end |
||
resolved['duration'] = 'instant' |
|||
end |
|||
if resolved['interaction'] == 'attack' then |
if resolved['interaction'] == 'attack' then |
||
Line 2,393: | Line 1,745: | ||
if resolved['expansionCount'] then |
if resolved['expansionCount'] then |
||
if resolved['expansionCount'] == '1' then |
if resolved['expansionCount'] == '1' then |
||
resolved['expansionCount'] = '{{Space}}' .. |
resolved['expansionCount'] = '{{Space}}' .. |
||
resolved['expansionCount'] .. |
|||
' extra execution.' |
|||
else |
else |
||
resolved['expansionCount'] = '{{Space}}' .. |
resolved['expansionCount'] = '{{Space}}' .. |
||
resolved['expansionCount'] .. |
|||
' extra executions.' |
|||
end |
end |
||
end |
end |
||
Line 2,416: | Line 1,772: | ||
if args['class'] then |
if args['class'] then |
||
class = args['class'] |
class = args['class'] |
||
if classFixes[class] then |
if classFixes[class] then class = classFixes[class] end |
||
class = classFixes[class] |
|||
end |
|||
end |
end |
||
if args['class'] or args['arch'] then |
if args['class'] or args['arch'] then |
||
archetype = classArchetypes[class] |
archetype = classArchetypes[class] |
||
if args['arch'] then |
if args['arch'] then archetype = args['arch'] end |
||
archetype = args['arch'] |
|||
end |
|||
classFull = className[class] |
classFull = className[class] |
||
archetypeFull = archetypeName[archetype] |
archetypeFull = archetypeName[archetype] |
||
standard = true |
standard = true |
||
if archetype == 'warr' or archetype == 'semi' then |
if archetype == 'warr' or archetype == 'semi' then skill = true end |
||
if archetype == 'mage' then spell = true end |
|||
end |
|||
if archetype == 'mage' then |
|||
spell = true |
|||
end |
|||
end |
end |
||
local costMP = nil |
local costMP = nil |
||
Line 2,443: | Line 1,791: | ||
rank = '2' |
rank = '2' |
||
end |
end |
||
if args['rank'] then |
if args['rank'] then rank = args['rank'] end |
||
rank = args['rank'] |
|||
end |
|||
if args['skill'] then |
if args['skill'] then |
||
skill = true |
skill = true |
||
Line 2,465: | Line 1,811: | ||
end |
end |
||
end |
end |
||
if args['mp'] then |
if args['mp'] then costMP = args['mp'] end |
||
if args['hp'] then costHP = args['hp'] end |
|||
if args['gp'] then costGP = args['gp'] end |
|||
end |
|||
if args[' |
if args['shatter'] then costShatter = args['shatter'] end |
||
costHP = args['hp'] |
|||
end |
|||
if args['gp'] then |
|||
costGP = args['gp'] |
|||
end |
|||
if args['shatter'] then |
|||
costShatter = args['shatter'] |
|||
end |
|||
local basic = false |
local basic = false |
||
local journeyman = false |
local journeyman = false |
||
if args['basic'] then |
if args['basic'] then basic = true end |
||
if args['journeyman'] or args['jm'] then journeyman = true end |
|||
end |
|||
if args['journeyman'] or args['jm'] then |
|||
journeyman = true |
|||
end |
|||
-- Category string |
-- Category string |
||
Line 2,496: | Line 1,830: | ||
c = c .. addCategory('Abilities', nil, nil, skill, spell, addCats) |
c = c .. addCategory('Abilities', nil, nil, skill, spell, addCats) |
||
if basic then |
if basic then |
||
c = c .. |
|||
c = c .. addCategory('Basic abilities', 'basic', nil, skill, spell, addCats) |
|||
addCategory('Basic abilities', 'basic', nil, skill, spell, |
|||
addCats) |
|||
end |
end |
||
if journeyman then |
if journeyman then |
||
c = c .. |
|||
c = c .. addCategory('Journeyman abilities', 'journeyman', nil, skill, spell, addCats) |
|||
addCategory('Journeyman abilities', 'journeyman', nil, skill, |
|||
spell, addCats) |
|||
end |
end |
||
if standard then |
if standard then |
||
c = c .. |
|||
c = c .. addCategory('Standard abilities', nil, nil, false, false, addCats) |
|||
addCategory('Standard abilities', nil, nil, false, false, |
|||
addCats) |
|||
if skill then |
if skill then |
||
c = c .. |
c = c .. |
||
addCategory('Semblant skills', nil, nil, skill, spell, |
|||
addCats) |
|||
end |
end |
||
if spell then |
if spell then |
||
c = c .. |
c = c .. |
||
addCategory('Conjured spells', nil, nil, skill, spell, |
|||
addCats) |
|||
end |
end |
||
else |
else |
||
c = c .. |
|||
c = c .. addCategory('Nonstandard abilities', nil, nil, skill, spell, addCats) |
|||
addCategory('Nonstandard abilities', nil, nil, skill, spell, |
|||
addCats) |
|||
end |
end |
||
if args['ethereal'] then |
if args['ethereal'] then |
||
c = c .. |
|||
c = c .. addCategory('Ethereal abilities', nil, nil, skill, spell, addCats) |
|||
addCategory('Ethereal abilities', nil, nil, skill, spell, |
|||
addCats) |
|||
end |
end |
||
if args['av'] then |
if args['av'] then |
||
c = c .. |
|||
c = c .. addCategory('AV granting abilities', nil, nil, skill, spell, addCats, true) |
|||
addCategory('AV granting abilities', nil, nil, skill, spell, |
|||
addCats, true) |
|||
c = c .. |
|||
addCategory('AV' .. args['av'] .. ' granting abilities', nil, |
|||
nil, skill, spell, addCats, true) |
|||
end |
end |
||
if (archetype and archetypeFull) then |
if (archetype and archetypeFull) then |
||
c = c .. |
|||
c = c .. addCategory(archetypeFull .. ' archetype abilities', 'archetype', archetype, skill, spell, addCats) |
|||
addCategory(archetypeFull .. ' archetype abilities', |
|||
'archetype', archetype, skill, spell, addCats) |
|||
end |
end |
||
if (class and classFull) then |
if (class and classFull) then |
||
c = c .. |
|||
c = c .. addCategory(classFull .. ' class abilities', 'class', class, skill, spell, addCats, true) |
|||
addCategory(classFull .. ' class abilities', 'class', class, |
|||
skill, spell, addCats, true) |
|||
end |
end |
||
if (rank and (class and classFull)) then |
if (rank and (class and classFull)) then |
||
if rank == '3' then |
if rank == '3' then rank = '3+' end |
||
c = c .. |
|||
addCategory('Rank ' .. rank .. ' ' .. classFull .. ' abilities', |
|||
end |
|||
'rank', rank, skill, spell, addCats, true) |
|||
end |
end |
||
if resolved['pre'] then |
if resolved['pre'] then |
||
c = c .. |
|||
c = c .. addCategory(resolved['pre'] .. 'abilities', 'pre', resolved['pre'], skill, spell, addCats) |
|||
addCategory(resolved['pre'] .. 'abilities', 'pre', |
|||
resolved['pre'], skill, spell, addCats) |
|||
end |
end |
||
if resolved['interaction'] then |
if resolved['interaction'] then |
||
c = c .. |
|||
c = c .. addCategory(resolved['interaction'] .. ' interaction abilities', 'interaction', resolved['interaction'], skill, spell, addCats) |
|||
addCategory(resolved['interaction'] .. ' interaction abilities', |
|||
'interaction', resolved['interaction'], skill, |
|||
spell, addCats) |
|||
end |
end |
||
if resolved['delivery'] then |
if resolved['delivery'] then |
||
c = c .. |
|||
c = c .. addCategory(resolved['delivery'] .. ' delivery abilities', 'delivery', resolved['delivery'], skill, spell, addCats) |
|||
addCategory(resolved['delivery'] .. ' delivery abilities', |
|||
'delivery', resolved['delivery'], skill, spell, |
|||
addCats) |
|||
end |
end |
||
if resolved['target'] then |
if resolved['target'] then |
||
c = c .. |
|||
c = c .. addCategory(resolved['target'] .. ' target abilities', 'target', resolved['target'], skill, spell, addCats) |
|||
addCategory(resolved['target'] .. ' target abilities', 'target', |
|||
resolved['target'], skill, spell, addCats) |
|||
end |
end |
||
if resolved['duration'] then |
if resolved['duration'] then |
||
c = c .. |
|||
c = c .. addCategory(noPlural(resolved['duration']) .. ' duration abilities', 'duration', resolved['duration'], skill, spell, addCats) |
|||
addCategory( |
|||
noPlural(resolved['duration']) .. ' duration abilities', |
|||
'duration', resolved['duration'], skill, spell, addCats) |
|||
end |
end |
||
-- if resolved['range'] then |
-- if resolved['range'] then |
||
Line 2,550: | Line 1,919: | ||
-- end |
-- end |
||
if resolved['expansion'] then |
if resolved['expansion'] then |
||
c = c .. |
|||
c = c .. addCategory(resolved['expansion'] .. ' expansion abilities', 'expansion', resolved['expansion'], skill, spell, addCats) |
|||
addCategory(resolved['expansion'] .. ' expansion abilities', |
|||
'expansion', resolved['expansion'], skill, spell, |
|||
addCats) |
|||
end |
end |
||
-- if resolved['expansionRange'] then |
-- if resolved['expansionRange'] then |
||
Line 2,556: | Line 1,928: | ||
-- end |
-- end |
||
if resolved['attribute'] then |
if resolved['attribute'] then |
||
c = c .. |
|||
c = c .. addCategory(resolved['attribute'] .. ' save abilities', 'attribute', resolved['attribute'], skill, spell, addCats) |
|||
addCategory(resolved['attribute'] .. ' save abilities', |
|||
'attribute', resolved['attribute'], skill, spell, |
|||
addCats) |
|||
end |
end |
||
if resolved['piercing'] then |
if resolved['piercing'] then |
||
c = c .. addCategory(resolved['piercing'] .. ' abilities', 'piercing', |
c = c .. addCategory(resolved['piercing'] .. ' abilities', 'piercing', |
||
resolved['piercing'], skill, spell, addCats) |
|||
end |
end |
||
if resolved['sustained'] then |
if resolved['sustained'] then |
||
c = c .. |
|||
c = c .. addCategory('Sustained abilities', 'sustained', resolved['sustained'], skill, spell, addCats) |
|||
addCategory('Sustained abilities', 'sustained', |
|||
resolved['sustained'], skill, spell, addCats) |
|||
end |
end |
||
if resolved['upgrade'] then |
if resolved['upgrade'] then |
||
c = c .. |
|||
c = c .. addCategory(resolved['upgrade'] .. ' abilities', 'upgrade', resolved['upgrade'], skill, spell, addCats) |
|||
addCategory(resolved['upgrade'] .. ' abilities', 'upgrade', |
|||
resolved['upgrade'], skill, spell, addCats) |
|||
end |
end |
||
if resolved['executionTime'] then |
if resolved['executionTime'] then |
||
c = c .. |
|||
c = c .. addCategory(noPlural(resolved['executionTime']) .. ' execution time abilities', 'executionTime', resolved['executionTime'], skill, spell, addCats) |
|||
addCategory( |
|||
noPlural(resolved['executionTime']) .. |
|||
' execution time abilities', 'executionTime', |
|||
resolved['executionTime'], skill, spell, addCats) |
|||
end |
end |
||
if resolved['maneuver'] then |
if resolved['maneuver'] then |
||
c = c .. addCategory(resolved['maneuver'] .. ' abilities', 'maneuver', |
c = c .. addCategory(resolved['maneuver'] .. ' abilities', 'maneuver', |
||
resolved['maneuver'], skill, spell, addCats) |
|||
end |
end |
||
if resolved['verbal'] then |
if resolved['verbal'] then |
||
c = c .. |
|||
c = c .. addCategory('Verbal component abilities', 'verbal', resolved['verbal'], skill, spell, addCats) |
|||
addCategory('Verbal component abilities', 'verbal', |
|||
resolved['verbal'], skill, spell, addCats) |
|||
end |
end |
||
if resolved['somatic'] then |
if resolved['somatic'] then |
||
c = c .. |
|||
c = c .. addCategory('Somatic component abilities', 'somatic', resolved['somatic'], skill, spell, addCats) |
|||
addCategory('Somatic component abilities', 'somatic', |
|||
resolved['somatic'], skill, spell, addCats) |
|||
end |
end |
||
if resolved['material'] then |
if resolved['material'] then |
||
c = c .. |
|||
c = c .. addCategory('Material component abilities', 'material', resolved['material'], skill, spell, addCats) |
|||
addCategory('Material component abilities', 'material', |
|||
resolved['material'], skill, spell, addCats) |
|||
end |
end |
||
if resolved['magelore'] then |
if resolved['magelore'] then |
||
c = c .. |
|||
c = c .. addCategory('Magelore component abilities', 'magelore', resolved['magelore'], skill, spell, addCats) |
|||
addCategory('Magelore component abilities', 'magelore', |
|||
resolved['magelore'], skill, spell, addCats) |
|||
end |
end |
||
if resolved['invoked'] then |
if resolved['invoked'] then |
||
c = c .. |
|||
c = c .. addCategory('Invoke component abilities', 'invoked', resolved['invoked'], skill, spell, addCats) |
|||
addCategory('Invoke component abilities', 'invoked', |
|||
resolved['invoked'], skill, spell, addCats) |
|||
end |
end |
||
Line 2,592: | Line 1,987: | ||
if args['flaw'] or args['f'] or args['fl'] then |
if args['flaw'] or args['f'] or args['fl'] then |
||
flawContent = flawContent .. makeTag(frame, 'flaw', 'flaw', makeCat) |
flawContent = flawContent .. makeTag(frame, 'flaw', 'flaw', makeCat) |
||
c = c .. |
|||
c = c .. addCategory('Flaw abilities', 'flaw', 'flaw', skill, spell, addCats) |
|||
addCategory('Flaw abilities', 'flaw', 'flaw', skill, spell, |
|||
addCats) |
|||
end |
end |
||
local specialContent = '' |
local specialContent = '' |
||
if args['special'] or args['s'] or args['sp'] then |
if args['special'] or args['s'] or args['sp'] then |
||
specialContent = specialContent .. |
specialContent = specialContent .. |
||
makeTag(frame, 'special', 'special', makeCat) |
|||
c = c .. |
|||
addCategory('Special abilities', 'special', 'special', skill, |
|||
spell, addCats) |
|||
end |
end |
||
local esContent = '' |
local esContent = '' |
||
if args['es'] then |
if args['es'] then |
||
esContent = esContent .. makeTag(frame, 'es', 'es', makeCat) |
esContent = esContent .. makeTag(frame, 'es', 'es', makeCat) |
||
c = c .. |
|||
c = c .. addCategory('Elder Sorcery abilities', 'es', 'es', skill, spell, addCats) |
|||
addCategory('Elder Sorcery abilities', 'es', 'es', skill, spell, |
|||
addCats) |
|||
end |
end |
||
local wardedContent = '' |
local wardedContent = '' |
||
if args['warded'] then |
if args['warded'] then |
||
wardedContent = wardedContent .. |
wardedContent = wardedContent .. |
||
makeTag(frame, 'warded', 'warded', makeCat) |
|||
c = c .. |
|||
addCategory('Warded abilities', 'warded', 'warded', skill, |
|||
spell, addCats) |
|||
end |
end |
||
local elementContent = '' |
local elementContent = '' |
||
if args['life'] then |
if args['life'] then |
||
elementContent = elementContent .. |
elementContent = elementContent .. |
||
makeTag(frame, 'elements', 'life', makeCat) |
|||
c = c .. |
|||
addCategory('Life element abilities', 'elements', 'life', skill, |
|||
spell, addCats) |
|||
end |
end |
||
if args['storm'] then |
if args['storm'] then |
||
elementContent = elementContent .. |
elementContent = elementContent .. |
||
makeTag(frame, 'elements', 'storm', makeCat) |
|||
c = c .. |
|||
addCategory('Storm element abilities', 'elements', 'storm', |
|||
skill, spell, addCats) |
|||
end |
end |
||
if args['necro'] then |
if args['necro'] then |
||
elementContent = elementContent .. |
elementContent = elementContent .. |
||
makeTag(frame, 'elements', 'necro', makeCat) |
|||
c = c .. |
|||
addCategory('Necromancy element abilities', 'elements', 'necro', |
|||
skill, spell, addCats) |
|||
end |
end |
||
if args['flame'] then |
if args['flame'] then |
||
elementContent = elementContent .. |
elementContent = elementContent .. |
||
makeTag(frame, 'elements', 'flame', makeCat) |
|||
c = c .. |
|||
addCategory('Flame element abilities', 'elements', 'flame', |
|||
skill, spell, addCats) |
|||
end |
end |
||
if args['nature'] then |
if args['nature'] then |
||
elementContent = elementContent .. |
elementContent = elementContent .. |
||
makeTag(frame, 'elements', 'nature', makeCat) |
|||
c = c .. |
|||
addCategory('Nature element abilities', 'elements', 'nature', |
|||
skill, spell, addCats) |
|||
end |
end |
||
Line 2,635: | Line 2,055: | ||
if args['magic'] then |
if args['magic'] then |
||
powerContent = powerContent .. makeTag(frame, 'power', 'magic', makeCat) |
powerContent = powerContent .. makeTag(frame, 'power', 'magic', makeCat) |
||
c = c .. |
|||
c = c .. addCategory('Magically powered abilities', 'power', 'magic', skill, spell, addCats) .. addCategory('Magical effects', nil, nil, false, false, addCats) |
|||
addCategory('Magically powered abilities', 'power', 'magic', |
|||
skill, spell, addCats) .. |
|||
addCategory('Magical effects', nil, nil, false, false, addCats) |
|||
end |
end |
||
if args['divine'] then |
if args['divine'] then |
||
powerContent = powerContent .. |
powerContent = powerContent .. |
||
makeTag(frame, 'power', 'divine', makeCat) |
|||
c = c .. addCategory('Divinely powered abilities', 'power', 'divine', skill, spell, addCats) .. addCategory('Divine effects', nil, nil, false, false, addCats) |
|||
c = c .. |
|||
addCategory('Divinely powered abilities', 'power', 'divine', |
|||
skill, spell, addCats) .. |
|||
addCategory('Divine effects', nil, nil, false, false, addCats) |
|||
end |
end |
||
if args['spirit'] then |
if args['spirit'] then |
||
powerContent = powerContent .. |
powerContent = powerContent .. |
||
makeTag(frame, 'power', 'spirit', makeCat) |
|||
c = c .. addCategory('Spiritually powered abilities', 'power', 'spirit', skill, spell, addCats) .. addCategory('Spiritual effects', nil, nil, false, false, addCats) |
|||
c = c .. |
|||
addCategory('Spiritually powered abilities', 'power', 'spirit', |
|||
skill, spell, addCats) .. |
|||
addCategory('Spiritual effects', nil, nil, false, false, addCats) |
|||
end |
end |
||
if args['primal'] then |
if args['primal'] then |
||
powerContent = powerContent .. |
powerContent = powerContent .. |
||
makeTag(frame, 'power', 'primal', makeCat) |
|||
c = c .. addCategory('Primally powered abilities', 'power', 'primal', skill, spell, addCats) .. addCategory('Primal effects', nil, nil, false, false, addCats) |
|||
c = c .. |
|||
addCategory('Primally powered abilities', 'power', 'primal', |
|||
skill, spell, addCats) .. |
|||
addCategory('Primal effects', nil, nil, false, false, addCats) |
|||
end |
end |
||
if args['martial'] then |
if args['martial'] then |
||
powerContent = powerContent .. |
powerContent = powerContent .. |
||
makeTag(frame, 'power', 'martial', makeCat) |
|||
c = c .. |
|||
addCategory('Martially powered abilities', 'power', 'martial', |
|||
skill, spell, addCats) |
|||
end |
end |
||
if args['psionic'] then |
if args['psionic'] then |
||
powerContent = powerContent .. |
powerContent = powerContent .. |
||
makeTag(frame, 'power', 'psionic', makeCat) |
|||
c = c .. addCategory('Psionically powered abilities', 'power', 'psionic', skill, spell, addCats) .. addCategory('Mental effects', nil, nil, false, false, addCats) |
|||
c = c .. |
|||
addCategory('Psionically powered abilities', 'power', 'psionic', |
|||
skill, spell, addCats) .. |
|||
addCategory('Mental effects', nil, nil, false, false, addCats) |
|||
end |
end |
||
if args['techo'] then |
if args['techo'] then |
||
powerContent = powerContent .. makeTag(frame, 'power', 'techo', makeCat) |
powerContent = powerContent .. makeTag(frame, 'power', 'techo', makeCat) |
||
c = c .. |
|||
c = c .. addCategory('Technologically powered abilities', 'power', 'techo', skill, spell, addCats) .. addCategory('Technological effects', nil, nil, false, false, addCats) |
|||
addCategory('Technologically powered abilities', 'power', |
|||
'techo', skill, spell, addCats) .. |
|||
addCategory('Technological effects', nil, nil, false, false, |
|||
addCats) |
|||
end |
end |
||
if args['finance'] then |
if args['finance'] then |
||
powerContent = powerContent .. |
powerContent = powerContent .. |
||
makeTag(frame, 'power', 'finance', makeCat) |
|||
c = c .. addCategory('Financially powered abilities', 'power', 'finance', skill, spell, addCats) .. addCategory('Financial effects', nil, nil, false, false, addCats) |
|||
c = c .. |
|||
addCategory('Financially powered abilities', 'power', 'finance', |
|||
skill, spell, addCats) .. |
|||
addCategory('Financial effects', nil, nil, false, false, addCats) |
|||
end |
end |
||
if args['alchemy'] then |
if args['alchemy'] then |
||
powerContent = powerContent .. |
powerContent = powerContent .. |
||
makeTag(frame, 'power', 'alchemy', makeCat) |
|||
c = c .. addCategory('Alchemically powered abilities', 'power', 'alchemy', skill, spell, addCats) .. addCategory('Alchemical effects', nil, nil, false, false, addCats) |
|||
c = c .. |
|||
addCategory('Alchemically powered abilities', 'power', |
|||
'alchemy', skill, spell, addCats) .. |
|||
addCategory('Alchemical effects', nil, nil, false, false, |
|||
addCats) |
|||
end |
end |
||
if args['unknown'] then |
if args['unknown'] then |
||
powerContent = powerContent .. |
powerContent = powerContent .. |
||
makeTag(frame, 'power', 'unknown', makeCat) |
|||
c = c .. |
|||
addCategory('Unknown powered abilities', 'power', 'unknown', |
|||
skill, spell, addCats) |
|||
end |
end |
||
if class then |
if class then |
||
Line 2,678: | Line 2,136: | ||
end |
end |
||
if args['rotator'] then |
if args['rotator'] then |
||
powerContent = powerContent .. |
powerContent = powerContent .. |
||
makeTag(frame, 'category', 'rotator', makeCat) |
|||
end |
end |
||
powerContent = powerContent .. elementContent |
powerContent = powerContent .. elementContent |
||
if skill then |
if skill then |
||
powerContent = powerContent .. |
powerContent = powerContent .. |
||
makeTag(frame, 'category', 'skill', makeCat) |
|||
end |
end |
||
if spell then |
if spell then |
||
powerContent = powerContent .. |
powerContent = powerContent .. |
||
makeTag(frame, 'category', 'spell', makeCat) |
|||
end |
end |
||
local deliveryContent = '' |
local deliveryContent = '' |
||
if standard and skill then |
if standard and skill then |
||
deliveryContent = deliveryContent .. |
deliveryContent = deliveryContent .. |
||
makeTag(frame, 'category', 'semblant', makeCat) |
|||
end |
end |
||
if standard and spell then |
if standard and spell then |
||
deliveryContent = deliveryContent .. |
deliveryContent = deliveryContent .. |
||
makeTag(frame, 'category', 'conjure', makeCat) |
|||
end |
end |
||
local effectContent = '' |
local effectContent = '' |
||
if args['mental'] then |
if args['mental'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'mental', makeCat) |
|||
c = c .. |
|||
addCategory('Mental effects', 'effect', 'mental', skill, spell, |
|||
addCats) |
|||
end |
end |
||
if args['truth'] then |
if args['truth'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'truth', makeCat) |
|||
c = c .. addCategory('Truth detecting effects', 'effect', 'truthDetecting', skill, spell, addCats) |
|||
c = c .. |
|||
addCategory('Truth detecting effects', 'effect', |
|||
'truthDetecting', skill, spell, addCats) |
|||
end |
end |
||
if args['duelMod'] then |
if args['duelMod'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'duelModifying', makeCat) |
|||
c = c .. |
|||
addCategory('Duel modifying effects', 'effect', 'duelModifying', |
|||
skill, spell, addCats) |
|||
end |
end |
||
if args['movement'] then |
if args['movement'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'movement', makeCat) |
|||
c = c .. |
|||
addCategory('Movement effects', 'effect', 'movement', skill, |
|||
spell, addCats) |
|||
end |
end |
||
if args['poison'] then |
if args['poison'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'poison', makeCat) |
|||
c = c .. |
|||
addCategory('Poison effects', 'effect', 'poison', skill, spell, |
|||
addCats) |
|||
end |
end |
||
if args['displacement'] then |
if args['displacement'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'displacement', makeCat) |
|||
c = c .. |
|||
addCategory('Displacement effects', 'effect', 'displacement', |
|||
skill, spell, addCats) |
|||
end |
end |
||
if args['transformation'] then |
if args['transformation'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'transformation', makeCat) |
|||
c = c .. |
|||
addCategory('Transformation effects', 'effect', |
|||
'transformation', skill, spell, addCats) |
|||
end |
end |
||
if args['control'] then |
if args['control'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'control', makeCat) |
|||
c = c .. |
|||
addCategory('Control effects', 'effect', 'control', skill, |
|||
spell, addCats) |
|||
end |
end |
||
if args['resist'] then |
if args['resist'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'resist', makeCat) |
|||
c = c .. |
|||
addCategory('Resistance effects', 'effect', 'resist', skill, |
|||
spell, addCats) |
|||
end |
end |
||
if args['awaken'] then |
if args['awaken'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'awaken', makeCat) |
|||
c = c .. |
|||
addCategory('Awakening effects', 'effect', 'awaken', skill, |
|||
spell, addCats) |
|||
end |
end |
||
if args['immune'] then |
if args['immune'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'immune', makeCat) |
|||
c = c .. |
|||
addCategory('Immunity effects', 'effect', 'immune', skill, |
|||
spell, addCats) |
|||
end |
end |
||
if args['long'] then |
if args['long'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'long', makeCat) |
|||
c = c .. |
|||
addCategory('Long range effects', 'effect', 'long', skill, |
|||
spell, addCats) |
|||
end |
end |
||
if args['sense'] then |
if args['sense'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'sense', makeCat) |
|||
c = c .. |
|||
addCategory('Sensory effects', 'effect', 'sense', skill, spell, |
|||
addCats) |
|||
end |
end |
||
if args['revive'] or args['rev'] then |
if args['revive'] or args['rev'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'revive', makeCat) |
|||
c = c .. |
|||
addCategory('Revival effects', 'effect', 'revive', skill, spell, |
|||
addCats) |
|||
end |
end |
||
if args['summon'] then |
if args['summon'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'summon', makeCat) |
|||
c = c .. |
|||
addCategory('Summoning effects', 'effect', 'summon', skill, |
|||
spell, addCats) |
|||
end |
end |
||
if args['heal'] then |
if args['heal'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'heal', makeCat) |
|||
c = c .. |
|||
addCategory('Healing effects', 'effect', 'heal', skill, spell, |
|||
addCats) |
|||
end |
end |
||
if args['reanimate'] or args['rean'] then |
if args['reanimate'] or args['rean'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'reanimate', makeCat) |
|||
c = c .. |
|||
addCategory('Reanimation effects', 'effect', 'reanimate', skill, |
|||
spell, addCats) |
|||
end |
end |
||
if args['regenerate'] or args['regen'] then |
if args['regenerate'] or args['regen'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'regenerate', makeCat) |
|||
c = c .. |
|||
addCategory('Regeneration effects', 'effect', 'regenerate', |
|||
skill, spell, addCats) |
|||
end |
end |
||
if args['revitalize'] or args['revit'] then |
if args['revitalize'] or args['revit'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'revitalize', makeCat) |
|||
c = c .. |
|||
addCategory('Revitalization effects', 'effect', 'revitalize', |
|||
skill, spell, addCats) |
|||
end |
end |
||
if args['kill'] then |
if args['kill'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'kill', makeCat) |
|||
c = c .. |
|||
addCategory('Killing effects', 'effect', 'kill', skill, spell, |
|||
addCats) |
|||
end |
end |
||
if args['damage'] then |
if args['damage'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'damage', makeCat) |
|||
c = c .. |
|||
addCategory('Damaging effects', 'effect', 'damage', skill, |
|||
spell, addCats) |
|||
end |
end |
||
if args['steal'] then |
if args['steal'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'steal', makeCat) |
|||
c = c .. |
|||
addCategory('Stealing effects', 'effect', 'steal', skill, spell, |
|||
addCats) |
|||
end |
end |
||
if args['loud'] then |
if args['loud'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'loud', makeCat) |
|||
c = c .. |
|||
addCategory('Loud effects', 'effect', 'loud', skill, spell, |
|||
addCats) |
|||
end |
end |
||
if args['knockout'] then |
if args['knockout'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'knockout', makeCat) |
|||
c = c .. |
|||
addCategory('Knockout effects', 'effect', 'knockout', skill, |
|||
spell, addCats) |
|||
end |
end |
||
if args['time'] then |
if args['time'] then |
||
effectContent = effectContent .. |
effectContent = effectContent .. |
||
makeTag(frame, 'effects', 'time', makeCat) |
|||
c = c .. |
|||
addCategory('Temporal effects', 'effect', 'time', skill, spell, |
|||
addCats) |
|||
end |
end |
||
local costContent = '' |
local costContent = '' |
||
if costMP then |
if costMP then |
||
c = c .. |
|||
c = c .. addCategory('MP cost abilities', 'costMP', costMP, skill, spell, addCats, true) |
|||
addCategory('MP cost abilities', 'costMP', costMP, skill, spell, |
|||
addCats, true) |
|||
if costMP == 'x' then |
if costMP == 'x' then |
||
costContent = costContent .. frame:preprocess( |
costContent = costContent .. frame:preprocess( |
||
"{{Tag|X MP|🩵|l=:Category:MP cost abilities|c=#3584e4|class=cost-tagged mpx}}") |
|||
c = c .. addCategory('Variable MP cost abilities', 'costMP', 'x', skill, spell, addCats, true) |
|||
c = c .. |
|||
addCategory('Variable MP cost abilities', 'costMP', 'x', |
|||
skill, spell, addCats, true) |
|||
else |
else |
||
costContent = costContent .. frame:preprocess( |
costContent = costContent .. frame:preprocess( |
||
"{{Tag|" .. costMP .. |
|||
" MP|🩵|l=:Category:MP cost abilities|c=#3584e4|class=cost-tagged mp" .. |
|||
costMP .. "}}") |
|||
c = c .. |
|||
addCategory(costMP .. ' MP cost abilities', 'costMP', |
|||
costMP, skill, spell, addCats, true) |
|||
end |
end |
||
end |
end |
||
if costHP then |
if costHP then |
||
c = c .. |
|||
c = c .. addCategory('HP cost abilities', 'costHP', costHP, skill, spell, addCats, true) |
|||
addCategory('HP cost abilities', 'costHP', costHP, skill, spell, |
|||
addCats, true) |
|||
if costHP == 'x' then |
if costHP == 'x' then |
||
costContent = costContent .. frame:preprocess( |
costContent = costContent .. frame:preprocess( |
||
"{{Tag|X HP|❤️|l=:Category:HP cost abilities|c=#e01b24|class=cost-tagged hpx}}") |
|||
c = c .. addCategory('Variable HP cost abilities', 'costHP', 'x', skill, spell, addCats, true) |
|||
c = c .. |
|||
addCategory('Variable HP cost abilities', 'costHP', 'x', |
|||
skill, spell, addCats, true) |
|||
else |
else |
||
costContent = costContent .. frame:preprocess( |
costContent = costContent .. frame:preprocess( |
||
"{{Tag|" .. costHP .. |
|||
" HP|❤️|l=:Category:HP cost abilities|c=#e01b24|class=cost-tagged hp" .. |
|||
costHP .. "}}") |
|||
c = c .. |
|||
addCategory(costHP .. ' HP cost abilities', 'costHP', |
|||
costHP, skill, spell, addCats, true) |
|||
end |
end |
||
end |
end |
||
if costGP then |
if costGP then |
||
c = c .. |
|||
c = c .. addCategory('GP cost abilities', 'costGP', costGP, skill, spell, addCats, true) |
|||
addCategory('GP cost abilities', 'costGP', costGP, skill, spell, |
|||
addCats, true) |
|||
if costGP == 'x' then |
if costGP == 'x' then |
||
costContent = costContent .. frame:preprocess( |
costContent = costContent .. frame:preprocess( |
||
"{{Tag|X GP|🪙|l=:Category:GP cost abilities|c=#F6D32D|class=cost-tagged gpx}}") |
|||
c = c .. addCategory('Variable GP cost abilities', 'costGP', 'x', skill, spell, addCats, true) |
|||
c = c .. |
|||
addCategory('Variable GP cost abilities', 'costGP', 'x', |
|||
skill, spell, addCats, true) |
|||
else |
else |
||
costContent = costContent .. frame:preprocess( |
costContent = costContent .. frame:preprocess( |
||
"{{Tag|" .. costGP .. |
|||
" GP|🪙|l=:Category:GP cost abilities|c=#F6D32D|class=cost-tagged gp" .. |
|||
costGP .. "}}") |
|||
c = c .. |
|||
addCategory(costGP .. ' GP cost abilities', 'costGP', |
|||
costGP, skill, spell, addCats, true) |
|||
end |
end |
||
end |
end |
||
if costShatter then |
if costShatter then |
||
c = c .. |
|||
c = c .. addCategory('Shatter cost abilities', 'costShatter', costShatter, skill, spell, addCats) |
|||
addCategory('Shatter cost abilities', 'costShatter', |
|||
costShatter, skill, spell, addCats) |
|||
costContent = costContent .. frame:preprocess( |
|||
"{{Tag|Shatter|💥|l=:Category:Shatter cost abilities|class=cost-tagged shatter}}") |
|||
end |
end |
||
if args['cost'] then |
if args['cost'] then |
||
Line 2,838: | Line 2,409: | ||
local executionTimeTitle = 'Execution time' |
local executionTimeTitle = 'Execution time' |
||
if spell then |
if spell then executionTimeTitle = 'Casting time' end |
||
executionTimeTitle = 'Casting time' |
|||
end |
|||
local expansionContent = 'TEST' |
local expansionContent = 'TEST' |
||
Line 2,852: | Line 2,421: | ||
local heightenedContent = '' |
local heightenedContent = '' |
||
if args['heightened'] then |
if args['heightened'] then |
||
heightenedContent = heightenedContent .. |
heightenedContent = heightenedContent .. |
||
'For each additional {{L|Core|MP}} spent, ' .. |
|||
args['heightened'] |
|||
-- heightenedContent = heightenedContent .. ' You can only {{L|Core|Heightening|Heighten}} if you are {{L|Core|Proficiency Bonus|Proficient}} or {{L|Core|Fluency Bonus|Fluent}} in ' .. args['name'] .. ' and only up to the corresponding bonus.' |
-- heightenedContent = heightenedContent .. ' You can only {{L|Core|Heightening|Heighten}} if you are {{L|Core|Proficiency Bonus|Proficient}} or {{L|Core|Fluency Bonus|Fluent}} in ' .. args['name'] .. ' and only up to the corresponding bonus.' |
||
c = c .. |
|||
c = c .. addCategory('Heightened abilities', 'heightened', args['heightened'], skill, spell, addCats, true) |
|||
addCategory('Heightened abilities', 'heightened', |
|||
args['heightened'], skill, spell, addCats, true) |
|||
end |
end |
||
Line 2,869: | Line 2,442: | ||
local restrictionContent = '' |
local restrictionContent = '' |
||
if args['restrict'] then |
if args['restrict'] then |
||
restrictionContent = restrictionContent .. |
restrictionContent = restrictionContent .. |
||
frame:preprocess(args['restrict']) |
|||
end |
end |
||
Line 2,876: | Line 2,450: | ||
if args['vstat'] and args['val'] then |
if args['vstat'] and args['val'] then |
||
local vstat = frame:preprocess("{{uc:" .. args['vstat'] .. "}}") |
local vstat = frame:preprocess("{{uc:" .. args['vstat'] .. "}}") |
||
statValContent = 'This ability sets your {{L|Core|' .. vstat .. '}}' .. |
statValContent = 'This ability sets your {{L|Core|' .. vstat .. '}}' .. |
||
' score to a minimum of ' .. args['val'] .. '.' |
|||
c = c .. |
|||
c = c .. addCategory(vstat .. ' setting abilities', 'vstat', args['vstat'], skill, spell, addCats, true) |
|||
addCategory('Attribute setting abilities', 'val', args['val'], |
|||
skill, spell, addCats, true) |
|||
c = c .. |
|||
addCategory(vstat .. ' setting abilities', 'vstat', |
|||
args['vstat'], skill, spell, addCats, true) |
|||
c = c .. |
|||
addCategory( |
|||
vstat .. ' value of ' .. args['val'] .. ' setting abilities', |
|||
'val', args['val'], skill, spell, addCats, true) |
|||
end |
end |
||
local f = 'proficiency' |
local f = 'proficiency' |
||
if args['fflu'] then |
if args['fflu'] then f = 'fluency' end |
||
f = 'fluency' |
|||
end |
|||
if args['fstat'] and (args['fflu'] or args['fpro']) then |
if args['fstat'] and (args['fflu'] or args['fpro']) then |
||
local fstat = frame:preprocess("{{uc:" .. args['fstat'] .. "}}") |
local fstat = frame:preprocess("{{uc:" .. args['fstat'] .. "}}") |
||
statFeatContent = |
|||
statFeatContent = 'This ability gives {{L|Core|' .. f .. ' Bonus|' .. f .. '}} in {{L|Core|' .. fstat .. '}} {{L|Core|Feat Interaction|Feat Saves}}.' |
|||
'This ability gives {{L|Core|' .. f .. ' Bonus|' .. f .. |
|||
'}} in {{L|Core|' .. fstat .. |
|||
'}} {{L|Core|Feat Interaction|Feat Saves}}.' |
|||
c = c .. addCategory(fstat .. ' feat save ' .. f .. ' granting abilities', 'fstat', args['fstat'], skill, spell, addCats, true) |
|||
c = c .. |
|||
addCategory('Feat save improvement abilities', 'flu', |
|||
args['fflu'], skill, spell, addCats) |
|||
c = c .. |
|||
addCategory('Feat save ' .. f .. ' granting abilities', 'fstat', |
|||
args['fstat'], skill, spell, addCats, true) |
|||
c = c .. |
|||
addCategory( |
|||
fstat .. ' feat save ' .. f .. ' granting abilities', |
|||
'fstat', args['fstat'], skill, spell, addCats, true) |
|||
end |
end |
||
if args['rotator'] then |
if args['rotator'] then |
||
c = c .. |
|||
c = c .. addCategory('Rotator abilities', 'rotator', args['rotator'], skill, spell, addCats) |
|||
addCategory('Rotator abilities', 'rotator', args['rotator'], |
|||
skill, spell, addCats) |
|||
end |
end |
||
if args['style'] then |
if args['style'] then |
||
c = c .. |
|||
c = c .. addCategory('Casting style abilities', 'style', args['style'], skill, spell, addCats) |
|||
addCategory('Casting style abilities', 'style', args['style'], |
|||
skill, spell, addCats) |
|||
end |
end |
||
if args['weapon'] then |
if args['weapon'] then |
||
c = c .. |
|||
c = c .. addCategory('Weapon fighting style abilities', 'weapon', args['weapon'], skill, spell, addCats) |
|||
addCategory('Weapon fighting style abilities', 'weapon', |
|||
args['weapon'], skill, spell, addCats) |
|||
end |
end |
||
Line 2,916: | Line 2,512: | ||
content = frame:preprocess(esContent .. powerContent), |
content = frame:preprocess(esContent .. powerContent), |
||
link = ':Category:Powered abilities' |
link = ':Category:Powered abilities' |
||
}, |
}, { |
||
{ |
|||
title = 'effect types', |
title = 'effect types', |
||
content = frame:preprocess(flawContent .. specialContent .. |
content = frame:preprocess(flawContent .. specialContent .. |
||
effectContent), |
|||
link = ':Category:Effects' |
link = ':Category:Effects' |
||
}, |
}, { |
||
{ |
|||
title = 'delivery', |
title = 'delivery', |
||
content = frame:preprocess(wardedContent .. deliveryContent) .. |
content = frame:preprocess(wardedContent .. deliveryContent) .. |
||
makeContent(frame, resolved, { |
|||
'expansion', 'pre', 'upgrade', 'piercing', 'delivery', |
|||
'interaction' |
|||
}, makeCat), |
|||
link = ':Category:Delivery abilities' |
link = ':Category:Delivery abilities' |
||
}, |
}, { |
||
{ |
|||
title = 'save attribute', |
title = 'save attribute', |
||
content = makeContent(frame, resolved, {'attribute'}, makeCat), |
content = makeContent(frame, resolved, {'attribute'}, makeCat), |
||
link = 'Core:Feat Interaction' |
link = 'Core:Feat Interaction' |
||
}, |
}, { |
||
{ |
|||
title = 'expansion save attribute', |
title = 'expansion save attribute', |
||
content = makeContent(frame, resolved, {'expansionAttribute'} |
content = makeContent(frame, resolved, {'expansionAttribute'}, |
||
makeCat) |
|||
}, |
|||
{ |
}, { |
||
title = 'target', |
title = 'target', |
||
content = makeContent(frame, resolved, {'target', 'hitDC'}, makeCat), |
content = makeContent(frame, resolved, {'target', 'hitDC'}, makeCat), |
||
link = ':Category:Target abilities' |
link = ':Category:Target abilities' |
||
}, |
}, { |
||
{ |
|||
title = executionTimeTitle, |
title = executionTimeTitle, |
||
content = makeContent(frame, resolved |
content = makeContent(frame, resolved, |
||
{'executionTime', 'maneuver'}, makeCat), |
|||
link = 'Core:Maneuvers' |
link = 'Core:Maneuvers' |
||
}, |
}, { |
||
{ |
|||
title = 'trigger', |
title = 'trigger', |
||
content = args['trigger'] or '', |
content = args['trigger'] or '', |
||
link = 'Core:Reactive Maneuvers' |
link = 'Core:Reactive Maneuvers' |
||
}, |
}, { |
||
{ |
|||
title = 'cost and components', |
title = 'cost and components', |
||
content = frame:preprocess(costContent) .. |
content = frame:preprocess(costContent) .. |
||
makeContent(frame, resolved, { |
|||
'material', 'invoked', 'verbal', 'somatic', 'magelore' |
|||
}, makeCat), |
|||
link = ':Category:Cost abilities' |
link = ':Category:Cost abilities' |
||
}, |
}, { |
||
{ |
|||
title = 'Mana cost', |
title = 'Mana cost', |
||
content = args['mpx'] or '', |
content = args['mpx'] or '', |
||
link = ':Category:MP cost abilities' |
link = ':Category:MP cost abilities' |
||
}, |
}, { |
||
{ |
|||
title = 'Hit cost', |
title = 'Hit cost', |
||
content = args['hpx'] or '', |
content = args['hpx'] or '', |
||
link = ':Category:HP cost abilities' |
link = ':Category:HP cost abilities' |
||
}, |
}, { |
||
{ |
|||
title = 'Gold cost', |
title = 'Gold cost', |
||
content = args['gpx'] or '', |
content = args['gpx'] or '', |
||
link = ':Category:GP cost abilities' |
link = ':Category:GP cost abilities' |
||
}, |
}, { |
||
{ |
|||
title = 'Material cost', |
title = 'Material cost', |
||
content = makeContent(frame, resolved, {'matx'}, makeCat), |
content = makeContent(frame, resolved, {'matx'}, makeCat), |
||
link = ':Category:Material component abilities' |
link = ':Category:Material component abilities' |
||
}, |
}, { |
||
{ |
|||
title = 'duration', |
title = 'duration', |
||
content = makeContent(frame, resolved, {'duration', 'sustained'} |
content = makeContent(frame, resolved, {'duration', 'sustained'}, |
||
makeCat), |
|||
link = ':Category:Duration abilities' |
link = ':Category:Duration abilities' |
||
}, |
}, { |
||
{ |
|||
title = 'range', |
title = 'range', |
||
content = makeContent(frame, resolved, {'range'}, makeCat), |
content = makeContent(frame, resolved, {'range'}, makeCat), |
||
link = 'Core:Range' |
link = 'Core:Range' |
||
}, |
}, -- { |
||
-- { |
|||
-- title = 'expansion', |
-- title = 'expansion', |
||
-- content = makeContent(frame, resolved, {'expansion'}, makeCat) |
-- content = makeContent(frame, resolved, {'expansion'}, makeCat) |
||
Line 2,992: | Line 2,584: | ||
{ |
{ |
||
title = 'expansion range', |
title = 'expansion range', |
||
content = makeContent(frame, resolved |
content = makeContent(frame, resolved, |
||
{'expansionRange', 'expansionCount'}, makeCat), |
|||
link = 'Core:Expansions' |
link = 'Core:Expansions' |
||
}, |
}, -- { |
||
-- { |
|||
-- title = 'expansion count', |
-- title = 'expansion count', |
||
-- content = frame:preprocess('TEST') |
-- content = frame:preprocess('TEST') |
||
Line 3,002: | Line 2,594: | ||
title = 'Requirements', |
title = 'Requirements', |
||
content = makeContent(frame, resolved, {'requirement'}, makeCat) |
content = makeContent(frame, resolved, {'requirement'}, makeCat) |
||
} |
} |
||
} |
} |
||
local barsBottom = { |
local barsBottom = { |
||
{title = 'End condition', content = args['end'] or ''}, |
|||
{ |
|||
{title = 'On critical hit', content = args['crithit'] or ''}, |
|||
content = args[' |
{title = 'On hit', content = args['hit'] or ''}, |
||
{title = 'On miss', content = args['miss'] or ''}, |
|||
}, |
|||
{title = 'On critically miss', content = args['critmiss'] or ''}, |
|||
{ |
|||
{title = 'On critical fail', content = args['critfail'] or ''}, |
|||
content = args[' |
{title = 'On fail', content = args['fail'] or ''}, |
||
{title = 'On success', content = args['success'] or ''}, |
|||
}, |
|||
{title = 'On critical success', content = args['critsuccess'] or ''}, { |
|||
{ |
|||
title = 'On hit', |
|||
content = args['hit'] or '' |
|||
}, |
|||
{ |
|||
title = 'On miss', |
|||
content = args['miss'] or '' |
|||
}, |
|||
{ |
|||
title = 'On critically miss', |
|||
content = args['critmiss'] or '' |
|||
}, |
|||
{ |
|||
title = 'On critical fail', |
|||
content = args['critfail'] or '' |
|||
}, |
|||
{ |
|||
title = 'On fail', |
|||
content = args['fail'] or '' |
|||
}, |
|||
{ |
|||
title = 'On success', |
|||
content = args['success'] or '' |
|||
}, |
|||
{ |
|||
title = 'On critical success', |
|||
content = args['critsuccess'] or '' |
|||
}, |
|||
{ |
|||
title = 'Heightened', |
title = 'Heightened', |
||
content = frame:preprocess(heightenedContent), |
content = frame:preprocess(heightenedContent), |
||
link = ':Category:Heightened abilities' |
link = ':Category:Heightened abilities' |
||
}, |
}, { |
||
{ |
|||
title = 'If proficient', |
title = 'If proficient', |
||
content = proficiencyContent, |
content = proficiencyContent, |
||
Line 3,056: | Line 2,619: | ||
content = fluencyContent, |
content = fluencyContent, |
||
link = 'Core:Fluency Bonus' |
link = 'Core:Fluency Bonus' |
||
}, |
}, { |
||
{ |
|||
title = 'Attribute improvement', |
title = 'Attribute improvement', |
||
content = frame:preprocess(statValContent), |
content = frame:preprocess(statValContent), |
||
link = 'Core:Attributes', |
link = 'Core:Attributes', |
||
flags = { |
flags = { |
||
attribute = args['vstat'] and |
attribute = args['vstat'] and |
||
frame:preprocess('{{lc:' .. args['vstat'] .. '}}') or "", |
|||
value = args['val'] |
value = args['val'] |
||
} |
} |
||
}, |
}, { |
||
{ |
|||
title = 'Feat save improvement', |
title = 'Feat save improvement', |
||
content = frame:preprocess(statFeatContent), |
content = frame:preprocess(statFeatContent), |
||
link = 'Core:Feat Interaction', |
link = 'Core:Feat Interaction', |
||
flags = { |
flags = { |
||
attribute = args['fstat'] and |
attribute = args['fstat'] and |
||
frame:preprocess('{{lc:' .. args['fstat'] .. '}}'), |
|||
value = f |
value = f |
||
} |
} |
||
} |
} |
||
} |
} |
||
local outputTop = '' |
local outputTop = '' |
||
for _, bar in ipairs(barsTop) do |
for _, bar in ipairs(barsTop) do |
||
outputTop = outputTop .. |
outputTop = outputTop .. |
||
makeBar(frame, bar['title'], bar['content'], |
|||
bar['link'], bar['flags'], false) |
|||
end |
end |
||
local outputBottom = '' |
local outputBottom = '' |
||
for _, bar in ipairs(barsBottom) do |
for _, bar in ipairs(barsBottom) do |
||
outputBottom = outputBottom .. |
outputBottom = outputBottom .. |
||
makeBar(frame, bar['title'], bar['content'], |
|||
bar['link'], bar['flags'], true) |
|||
end |
end |
||
local outputMiddle = '' |
local outputMiddle = '' |
||
if args['e'] then |
if args['e'] then outputMiddle = frame:preprocess(args['e']) end |
||
outputMiddle = frame:preprocess(args['e']) |
|||
end |
|||
local output = mw.html.create('span') |
local output = mw.html.create('span') |
||
output |
output:addClass('ability-variables') |
||
if args['basic'] then output:addClass('ability-basic') end |
|||
if args['basic'] then |
|||
output |
|||
:addClass('ability-basic') |
|||
end |
|||
output:wikitext(outputTop) |
output:wikitext(outputTop) |
||
if outputMiddle ~= '' then |
if outputMiddle ~= '' then |
||
output |
output:wikitext('<hr>'):wikitext( |
||
'<span class="ability-overview-base">' .. outputMiddle .. '</span>') |
|||
:wikitext('<hr>') |
|||
:wikitext('<span class="ability-overview-base">' .. outputMiddle .. '</span>') |
|||
end |
end |
||
if outputBottom ~= '' then |
if outputBottom ~= '' then output:wikitext('<hr>'):wikitext(outputBottom) end |
||
output |
|||
:wikitext('<hr>') |
|||
:wikitext(outputBottom) |
|||
end |
|||
output = tostring(output) .. c |
output = tostring(output) .. c |
||
output = output .. |
output = output .. |
||
frame:preprocess( |
|||
'<templatestyles src="Template:Ability/styles.css" />') |
|||
if not name then |
if not name then |
||
output = output .. |
output = output .. |
||
'<span style="color: red;>NO NAME PROVIDED VERY BAD EVERY ABILITY NEEDS A NAME OKAY</span>' |
|||
end |
end |
||
Revision as of 04:49, 13 August 2025
Module:A Parameter Documentation
This page details all the parameters and their aliases accepted by the Module:A Scribunto module for formatting TTRPG abilities. Call the module using:
{{#invoke:A|a|name=Example Ability|<other parameters>}}
Core Parameters
Basic Information
name
- The name of the ability (required)e
- The effect/description of the abilitytrigger
- What triggers the ability to activate
Type Flags
skill
- Flag to mark this as a skill ability- Setting a warrior or semi class will automatically set this flag to
true
. This can be overridden by setting it to0
orfalse
.
- Setting a warrior or semi class will automatically set this flag to
spell
- Flag to mark this as a spell ability- Setting a mage class will automatically set this flag to
true
. This can be overridden by setting it to0
orfalse
.
- Setting a mage class will automatically set this flag to
standard
- Flag to mark this as a standard ability- Setting a class will automatically set this flag to
true
. This can be overridden by setting it to0
orfalse
. - Note that abilities that are provided by other class abilities are not always considered standard abilities nor abilities of that class. The main exceptions are crowns and other mage rotators.
- Setting a class will automatically set this flag to
Class Information
class
- The class this ability belongs to
Supported values:bar
/ber
(Berserker)sam
/due
(Duelist)vet
(Veteran)kni
(Knight)pal
(Paladin)ass
(Assassin)ama
/cor
(Corsair)arc
(Archer)thi
(Thief)ran
(Ranger)fla
(Flame Mage)sto
(Storm Mage)lif
(Life Mage)nec
(Necromancer)nat
(Nature Mage)
arch
- Override the default archetype for a class
Supported values:warr
(Warrior)semi
(Semi)mage
(Mage)
rank
- The rank requirement for the ability
Supported values:1
(Rank 1)2
(Rank 2)3
(Rank 3+)
Ability Properties
Maneuver Type (maneuver
/man
/m
)
active
/ac
/a
- Active maneuverreactive
/re
/r
- Reactive maneuverpassive
/ps
/p
- Passive maneuverslow
/sl
/s
- Slow maneuver
Execution Time (executionTime
/time
/et
/x
)
0a
/freeAction
/fa
- Free action1a
/a
/singleAction
/sa
- Single action2a
/doubleAction
/da
- Double action3a
/tripleAction
/ta
- Triple action0r
/freeReaction
/fr
- Free reaction1r
/reaction
/r
- Reactionsr
/shortRest
/s
- Short restlr
/longRest
/l
- Long rest- Time duration format:
XmXhXdXwXy
(minutes, hours, days, weeks, years)
Interaction Type (interaction
/int
/i
)
attack
/atk
/a
- Attack interactionblock
/blk
/b
- Block interactionmanifest
/man
/m
- Manifest interactionfeat
/fea
/f
- Feat interaction
Delivery Method (delivery
/del
/d
)
self
/sel
/s
- Self deliverymissile
/mis
/m
- Missile deliveryhand
/han
/h
/claw
- Hand deliverybite
/bit
/b
/mouth
- Bite deliveryitem
/itm
/i
- Item deliverymagelore
/mag
/ml
- Magelore deliveryweapon
/wep
/w
- Weapon deliveryshield
/shl
/sh
- Shield deliveryarmor
/rmr
/r
- Armor deliverysight
/sit
/eye
/e
- Sight deliveryaura
/aur
/a
- Aura deliverycone
/con
/c
- Cone deliveryother
/oth
/o
- Other delivery
Target Type (target
/tar
/t
)
self
/sel
/s
- Self targetcreature
/cre
/c
- Creature targetbody
/bod
/b
- Body targetvitals
/vit
/v
- Vitals targetlimb
/lim
/l
- Limb targetarm
- Arm targetleg
- Leg targetitem
/itm
/i
- Item targetweapon
/wep
/w
- Weapon targetshield
/shl
/sh
- Shield targetarmor
/rmr
/r
- Armor targetattack
/atk
/a
- Attack targetother
/oth
/o
- Other target
Duration (duration
/dur
/dr
)
instant
/in
/i
/0
- Instant durationalways
/forever
/4
/inf
- Always active- Note: Use one of the aliases. Entering
always
is currently bugged.
- Note: Use one of the aliases. Entering
whileUp
/up
/u
- While upwhileDown
/dn
/d
- While downwhileAlive
/al
/a
- While alivewhileDead
/dd
- While deadendOfTurn
/end
/e
- Until end of turndawn
/d
- Until dawnstartOfTargetNextTurn
/tStart
/ts
- Until start of target's next turnendOfTargetNextTurn
/tEnd
/te
- Until end of target's next turnstartOfYourNextTurn
/uStart
/us
- Until start of your next turnendOfYourNextTurn
/uEnd
/ue
- Until end of your next turnendOfCombat
/ec
- Until end of combat- Time duration format:
XmXhXdXwXy
(minutes, hours, days, weeks, years)
Sustained Flag
sustained
/sus
/s
- Ability is sustained
Range (range
/rng
/r
)
melee
/m
- Melee rangeweapon
/w
- Weapon rangehand
/h
- Hand rangebite
/b
- Bite rangeitem
/i
- Item rangeshield
/sh
- Shield rangearmor
/a
- Armor rangesight
/eye
/e
- Sight rangeself
/s
- Self range- Distance format:
Xf
orXm
(feet or miles)
Attribute Saves (attribute
/attr
/a
)
int
/INT
/i
- Intelligence savestr
/STR
/s
- Strength savemov
/MOV
/m
- Movement saveper
/PER
/p
- Perception savesnk
/SNK
/s
- Sneak save
Expansion Type (expansion
/exp
)
detonate
/det
/d
- Detonate expansionripple
/rip
/r
- Ripple expansioncascade
/cas
/c
- Cascade expansionfork
/for
/f
- Fork expansion
Piercing (piercing
/prc
/p
)
av0
/a
- AV0 piercingunblockable
/ub
/u
- Unblockable
Component Flags
verbal
/ver
/v
- Verbal componentsomatic
/som
/s
- Somatic componentmaterial
/mat
/m
- Material componentmagelore
/mag
/ml
- Magelore componentinvoked
/inv
/i
- Invoked component
Resource Costs
mp
- Mana point costmpx
- Variable mana point cost descriptionhp
- Hit point costhpx
- Variable hit point cost descriptionmatx
- Material component cost description
Element Flags
life
- Life elementstorm
- Storm elementnecro
- Necro elementflame
- Flame elementnature
- Nature element
Power Source Flags
magic
- Magical power sourcedivine
- Divine power sourcespirit
- Spirit power sourceprimal
- Primal power sourcemartial
- Martial power sourcepsionic
- Psionic power sourcetecho
- Techno power source
Effect Type Flags
mental
- Mental effecttruth
- Truth detection effectduelMod
- Duel modification effectmovement
- Movement effectdisplacement
- Displacement effecttransformation
- Transformation effectcontrol
- Control effectresist
- Resistance effectimmune
- Immunity effectlong
- Long range effectsense
- Sensory effectrevive
- Revival effectsummon
- Summoning effectheal
- Healing effect
State Parameters
end
- The condition under which the ability ends
Results Parameters
crithit
- Critical hit effecthit
- Hit effectmiss
- Miss effectcritmiss
- Critical miss effectcritfail
- Critical fail effectfail
- Fail effectsave
- Save effectcritsave
- Critical save effect
Attribute Modification
vstat
- Attribute to modifyval
- New minimum value for the attributefstat
- Feat save attribute to modifyflu
- Flag for fluency in feat savepro
- Flag for proficiency in feat save
Premade Templates
The module includes several premade templates that can be used as a base for abilities:
Strike Template (pre=strike
)
{ maneuver = 'active', executionTime = '1a', interaction = 'attack', delivery = 'weapon', target = 'creature', duration = 'instant', range = 'weapon', }
Ray Template (pre=ray
)
{ maneuver = 'active', executionTime = '1a', interaction = 'attack', delivery = 'missile', target = 'creature', duration = 'instant', range = '60f', piercing = 'av0', }
Ball Template (pre=ball
)
{ maneuver = 'active', executionTime = '1a', interaction = 'attack', delivery = 'missile', target = 'creature', duration = 'instant', range = '30f', piercing = 'ub', }
Touch Template (pre=touch
)
{ maneuver = 'active', executionTime = '1a', interaction = 'attack', delivery = 'hand', target = 'creature', duration = 'instant', range = 'hand', piercing = 'ub', }
Ritual Template (pre=ritual
)
{ maneuver = 'slow', executionTime = '10m', interaction = 'manifest', delivery = 'sight', target = 'creature', duration = 'instant', range = '5f', }
Additional Features
The module automatically handles:
- Adding AC modifiers for limb (+2), vitals (+5), and other specific targets
- Managing item interaction DCs
- Handling class archetypes and their hierarchies
- Processing time and distance formats
- Managing component requirements for invoked abilities
local p = {}
local aliases = {
keys = {
pre = {'pre', 'premade'},
maneuver = {'man', 'maneuver', 'm'},
interaction = {'int', 'interaction', 'i'},
delivery = {'del', 'delivery', 'd'},
target = {'tar', 'target', 't'},
duration = {'dur', 'duration', 'dr'},
upgrade = {'upg', 'upgrade', 'u'},
executionTime = {'executionTime', 'et', 'x'},
piercing = {'prc', 'piercing', 'p'},
-- nearRange = {
-- 'nearRange',
-- 'nr'
-- },
-- farRange = {
-- 'farRange',
-- 'fr'
-- },
flaw = {'flaw', 'fl', 'f'},
special = {'special', 'sp', 's'},
range = {'range', 'rng', 'r'},
attribute = {'attribute', 'attr', 'a'},
expansion = {'expansion', 'exp'},
expansionRange = {'expansionRange', 'er'},
expansionCount = {'expansionCount', 'ec'},
expansionAttribute = {'expansionAttribute', 'ea'},
sustained = {'sustained', 'sus'},
requirement = {'req', 'requirement', 'rq'},
verbal = {'ver', 'verbal'},
somatic = {'som', 'somatic'},
material = {'mat', 'material'},
magelore = {'mag', 'magelore', 'ml'},
invoked = {'inv', 'invoked', 'invoke'},
hp = {'hp', 'health', 'hitpoints', 'hitPoints', 'hit points'},
hpx = {'hpx', 'healthx', 'hitpointsx', 'hitPointsx', 'hit pointsx'},
mp = {
'mp', 'mana', 'magic', 'magick', 'magik', 'mana points',
'magic points', 'magick points', 'magik points'
},
mpx = {
'mpx', 'manax', 'manapointsx', 'mana pointsx', 'magic pointsx',
'magick pointsx', 'magik pointsx'
},
gp = {'gp', 'gold', 'goldPieces', 'gold pieces'},
gpx = {'gpx', 'goldx', 'goldPiecesx', 'gold piecesx'},
matx = {'matx', 'materialx'},
class = {'class'}
},
values = {
maneuver = {
active = {'ac', 'active', 'a'},
reactive = {'re', 'reaction', 'r'},
passive = {'ps', 'passive', 'p'},
slow = {'sl', 'slow', 's'}
},
interaction = {
attack = {'atk', 'attack', 'a'},
block = {'blk', 'block', 'b'},
manifest = {'man', 'manifest', 'm'},
feat = {'fea', 'feat', 'f'}
},
delivery = {
self = {'sel', 'self', 's'},
missile = {'mis', 'missile', 'm'},
hand = {'han', 'hand', 'h', 'claw'},
bite = {'bit', 'bite', 'b', 'mouth'},
item = {'itm', 'item', 'i'},
magelore = {'mag', 'magelore', 'ml'},
weapon = {'wep', 'weapon', 'w'},
shield = {'shl', 'shield', 'sh'},
armor = {'rmr', 'armor', 'r'},
sight = {'sit', 'sight', 'eye', 'e'},
aura = {'aur', 'aura', 'a'},
cone = {'con', 'cone', 'c'},
other = {'oth', 'other', 'o'}
},
target = {
self = {'sel', 'self', 's'},
creature = {'cre', 'creature', 'c'},
body = {'bod', 'body', 'b'},
vitals = {'vit', 'vitals', 'v'},
limb = {'lim', 'limb', 'l'},
arm = {'arm'},
leg = {'leg'},
item = {'itm', 'item', 'i'},
weapon = {'wep', 'weapon', 'w'},
shield = {'shl', 'shield', 'sh'},
armor = {'rmr', 'armor', 'r'},
ship = {'ship'},
attack = {'atk', 'attack', 'a'},
ability = {'ab', 'ability'},
spell = {'spl', 'spell'},
other = {'oth', 'other', 'o'},
ci = {'ci', 'creatureItem', 'itemCreature', 'ic'},
ai = {'ai', 'attackItem', 'itemAttack', 'ia'},
area = {'area', 'ar'},
aci = {
'cia', 'iac', 'aci', 'ica', 'cai', 'aic', 'creatureItemArea',
'itemCreatureArea', 'AreaCreatureItem', 'itemAreaCreature',
'creatureAreaItem', 'AreaItemCreature'
},
ac = {'ac', 'ca', 'areaCreature', 'creatureArea'},
al = {'al', 'la', 'armLeg', 'legArm'},
cs = {'cs', 'sc', 'creatureSelf', 'selfCreature'}
},
duration = {
instant = {'0', 'in', 'instant', 'i'},
always = {'always', 'forever', '4', 'inf'},
noLimit = {'noLimit', '1', 'nl'},
whileUp = {'up', 'whileUp', 'u'},
whileDown = {'dn', 'whileDown', 'd'},
whileAlive = {'al', 'whileAlive', 'a'},
whileDead = {'dd', 'whileDead'},
endOfTurn = {'end', 'endOfTurn', 'e'},
dawn = {'dawn', 'd'},
startOfTargetNextTurn = {'tStart', 'startOfTargetNextTurn', 'ts'},
endOfTargetNextTurn = {'tEnd', 'endOfTargetNextTurn', 'te'},
startOfYourNextTurn = {'uStart', 'startOfYourNextTurn', 'us'},
endOfYourNextTurn = {'uEnd', 'endOfYourNextTurn', 'ue'},
endOfCombat = {'endOfCombat', 'ec'},
timeParse = {'^%d+[mhdwys]$'}
},
upgrade = {
warded = {'wrd', 'warded', 'w'},
absolute = {'abs', 'absolute', 'a'}
},
executionTime = {
freeAction = {'0a', 'freeAction', 'fa'},
singleAction = {'1a', 'a', 'singleAction', 'sa'},
doubleAction = {'2a', 'doubleAction', 'da'},
tripleAction = {'3a', 'tripleAction', 'ta'},
freeReaction = {'0r', 'freeReaction', 'fr'},
reaction = {'1r', 'reaction', 'r'},
shortRest = {'sr', 'shortRest', 's'},
longRest = {'lr', 'longRest', 'l'},
timeParse = {'^%d+[mhdwy]$'}
},
piercing = {av0 = {'av0', 'a'}, unblockable = {'ub', 'u'}},
range = {
melee = {'melee', 'm'},
weapon = {'weapon', 'weaponReach', 'w'},
hand = {'hand', 'handReach', 'h'},
bite = {'bite', 'biteReach', 'b'},
item = {'item', 'itemReach', 'i'},
shield = {'shield', 'shieldReach', 'sh'},
armor = {'armor', 'armorReach', 'r'},
sight = {'sight', 'sightReach', 'eye', 'e'},
self = {'self', 's'},
distParse = {'^%d+[fm]$'},
other = {'other', 'o'}
},
attribute = {
int = {'int', 'INT', 'i'},
str = {'str', 'STR', 's'},
mov = {'mov', 'MOV', 'm'},
per = {'per', 'PER', 'p'},
snk = {'snk', 'SNK', 's'},
unp = {'unp', 'UNP', 'u'}
},
expansionAttribute = {
int = {'int', 'INT', 'i'},
str = {'str', 'STR', 's'},
mov = {'mov', 'MOV', 'm'},
per = {'per', 'PER', 'p'},
snk = {'snk', 'SNK', 's'},
unp = {'unp', 'UNP', 'u'}
},
expansion = {
detonate = {'det', 'detonate', 'd'},
ripple = {'rip', 'ripple', 'r'},
cascade = {'cas', 'cascade', 'c'},
fork = {'for', 'fork', 'f'}
},
expansionRange = {distParse = {'^%d+[fm]$'}},
expansionCount = {expansionCount = {'expansionCount', 'ec'}},
sustained = {sustained = {'sus', 'sustained', 's', '1'}},
verbal = {verbal = {'ver', 'verbal', 'v', '1'}},
somatic = {somatic = {'som', 'somatic', 's', '1'}},
material = {material = {'mat', 'material', 'm', '1'}},
magelore = {magelore = {'mag', 'magelore', 'ml', '1'}},
invoked = {invoked = {'inv', 'invoked', 'i', '1'}},
class = {
ber = {'ber'},
due = {'due'},
vet = {'vet'},
kni = {'kni'},
pal = {'pal'},
ass = {'ass'},
cor = {'cor'},
arc = {'arc'},
thi = {'thi'},
ran = {'ran'},
fla = {'fla'},
sto = {'sto'},
lif = {'lif'},
nec = {'nec'},
nat = {'nat'}
}
}
}
local tags = {
verbal = {
verbal = {
text = 'Verbal',
link = 'Verbal component abilities',
symbol = '🗣️',
color = '#f9f06b',
class = 'component-tagged verbal'
}
},
somatic = {
somatic = {
text = 'Somatic',
link = 'Somatic component abilities',
symbol = '👐',
color = '#f9f06b',
class = 'component-tagged somatic'
}
},
material = {
material = {
text = 'Material',
link = 'Material component abilities',
symbol = '💎',
color = '#ff7800',
class = 'component-tagged material'
}
},
magelore = {
magelore = {
text = 'Magelore',
link = 'Magelore component abilities',
symbol = '🔮',
color = '#f9f06b',
class = 'component-tagged magelore'
}
},
invoked = {
invoked = {
text = 'Invoked',
link = 'Invoked component abilities',
symbol = '🪄',
color = '#f9f06b',
class = 'component-tagged invoked'
}
},
flaw = {
flaw = {
text = 'Flaw',
link = 'Flaw abilities',
symbol = '❌',
color = '#e01b24',
class = 'flaw-tagged flaw'
}
},
special = {
special = {
text = 'Special',
link = 'Special abilities',
symbol = '✴️',
color = '#9141AC',
class = 'special-tagged special'
}
},
es = {
es = {
text = 'Elder Sorcery',
link = 'Elder Sorcery abilities',
symbol = '🌌',
color = '#9141AC',
class = 'elderSorcery-tagged elderSorcery'
}
},
warded = {
warded = {
text = 'Warded',
link = 'Warded abilities',
symbol = '🏮',
color = '#f9f06b',
class = 'warded-tagged warded'
}
},
elements = {
life = {
text = 'Life',
link = 'Life element abilities',
symbol = '☀️',
color = '#ffffff',
class = 'element-tagged life'
},
storm = {
text = 'Storm',
link = 'Storm element abilities',
symbol = '💧',
color = '#3584e4',
class = 'element-tagged storm'
},
necro = {
text = 'Necromancy',
link = 'Necromancy element abilities',
symbol = '💀',
color = '#3d3846',
class = 'element-tagged necromancy'
},
flame = {
text = 'Flame',
link = 'Flame element abilities',
symbol = '🔥',
color = '#e01b24',
class = 'element-tagged flame'
},
nature = {
text = 'Nature',
link = 'Nature element abilities',
symbol = '🌱',
color = '#33d17a',
class = 'element-tagged nature'
}
},
class = {
ber = {
text = 'Berserker',
link = 'Berserker class abilities',
symbol = '🪓',
class = 'class-tagged berserker'
},
due = {
text = 'Duelist',
link = 'Duelist class abilities',
symbol = '🤺',
class = 'class-tagged duelist'
},
vet = {
text = 'Veteran',
link = 'Veteran class abilities',
symbol = '🪖',
class = 'class-tagged veteran'
},
kni = {
text = 'Knight',
link = 'Knight class abilities',
symbol = '⚔️',
class = 'class-tagged knight'
},
pal = {
text = 'Paladin',
link = 'Paladin class abilities',
symbol = '🛡️',
class = 'class-tagged paladin'
},
ass = {
text = 'Assassin',
link = 'Assassin class abilities',
symbol = '🗡️',
class = 'class-tagged assassin'
},
cor = {
text = 'Corsair',
link = 'Corsair class abilities',
symbol = '🏴☠️',
class = 'class-tagged corsair'
},
arc = {
text = 'Archer',
link = 'Archer class abilities',
symbol = '🏹',
class = 'class-tagged archer'
},
thi = {
text = 'Thief',
link = 'Thief class abilities',
symbol = '💰️',
class = 'class-tagged thief'
},
ran = {
text = 'Ranger',
link = 'Ranger class abilities',
symbol = '🐾',
class = 'class-tagged ranger'
},
fla = {
text = 'Flame Mage',
link = 'Flame Mage class abilities',
symbol = '🧙',
class = 'class-tagged flameMage'
},
sto = {
text = 'Storm Mage',
link = 'Storm Mage class abilities',
symbol = '🧙',
class = 'class-tagged stormMage'
},
lif = {
text = 'Life Mage',
link = 'Life Mage class abilities',
symbol = '🧙',
class = 'class-tagged lifeMage'
},
nec = {
text = 'Necromancer',
link = 'Necromancer class abilities',
symbol = '🧙',
class = 'class-tagged necromancer'
},
nat = {
text = 'Nature Mage',
link = 'Nature Mage class abilities',
symbol = '🧙',
class = 'class-tagged natureMage'
}
},
power = {
divine = {
text = 'Divine',
link = 'Divinely powered abilities',
symbol = '🪽',
color = '#f9f06b',
class = 'power-tagged divine'
},
magic = {
text = 'Magical',
link = 'Magically powered abilities',
symbol = '✨',
color = '#9141ac',
class = 'power-tagged magical'
},
spirit = {
text = 'Spiritual',
link = 'Spiritually powered abilities',
symbol = '🪭',
color = '#9a9996',
class = 'power-tagged spiritual'
},
martial = {
text = 'Martial',
link = 'Martially powered abilities',
symbol = '💪',
color = '#ff7800',
class = 'power-tagged martial'
},
psionic = {
text = 'Psionic',
link = 'Psionically powered abilities',
symbol = '🤯',
color = '#3584e4',
class = 'power-tagged psionic'
},
primal = {
text = 'Primal',
link = 'Primally powered abilities',
symbol = '⛰️',
color = '#986a44',
class = 'power-tagged primal'
},
techo = {
text = 'Technological',
link = 'Technologically powered abilities',
symbol = '⚙️',
color = '#e01b24',
class = 'power-tagged technological'
},
finance = {
text = 'Financial',
link = 'Financially powered abilities',
symbol = '🪙',
color = '#fcc200',
class = 'power-tagged financial'
},
alchemy = {
text = 'Alchemical',
link = 'Alchemically powered abilities',
symbol = '🧪',
color = '#33d17a',
class = 'power-tagged alchemical'
},
unknown = {
text = 'Unknown',
link = 'Unknown powered abilities',
symbol = '❓',
color = '#77767b',
class = 'power-tagged unknown'
}
},
category = {
skill = {
text = 'Skill',
link = 'Skills',
symbol = '🤹',
class = 'skill'
},
spell = {
text = 'Spell',
link = 'Spells',
symbol = '✨',
class = 'spell'
},
semblant = {
text = 'Semblant',
link = 'Semblant skills',
symbol = '🎭',
class = 'standard-tagged semblant'
},
conjure = {
text = 'Conjured',
link = 'Conjured spells',
symbol = '🔮',
class = 'standard-tagged conjure'
},
standard = {
text = 'Standard',
link = 'Standard abilities',
symbol = '🏁',
class = 'standard-tagged normal'
},
rotator = {
text = 'Rotator',
link = 'Rotator abilities',
symbol = '🔄',
class = 'rotator'
}
},
effects = {
mental = {
text = 'Mental',
link = 'Mental effects',
symbol = '🧠',
class = 'effect-tagged mental'
},
truth = {
text = 'Truth detecting',
link = 'Truth detecting effects',
symbol = '⚖️',
class = 'effect-tagged truthDetecting'
},
duelMod = {
text = 'Duel modifying',
link = 'Duel modifying effects',
symbol = '🤺',
class = 'effect-tagged duelModifying'
},
movement = {
text = 'Movement',
link = 'Movement effects',
symbol = '👣',
class = 'effect-tagged movement'
},
poison = {
text = 'Poison',
link = 'Poison effects',
symbol = '☠️',
class = 'effect-tagged poison'
},
displacement = {
text = 'Displacement',
link = 'Displacement effects',
symbol = '🌀',
class = 'effect-tagged displacement'
},
transformation = {
text = 'Transformation',
link = 'Transformation effects',
symbol = '🌳',
class = 'effect-tagged transformation'
},
control = {
text = 'Control',
link = 'Control effects',
symbol = '⛓️',
class = 'effect-tagged control'
},
resist = {
text = 'Resistance',
link = 'Resistance effects',
symbol = '🚫',
class = 'effect-tagged resistance'
},
awaken = {
text = 'Awakening',
link = 'Awakening effects',
symbol = '🌞',
class = 'effect-tagged awakening'
},
immune = {
text = 'Immunity',
link = 'Immunity effects',
symbol = '🚫',
class = 'effect-tagged immunity'
},
long = {
text = 'Long range',
link = 'Long range effects',
symbol = '📏',
class = 'effect-tagged longRange'
},
sense = {
text = 'Sensory',
link = 'Sensory effects',
symbol = '👁️',
class = 'effect-tagged sensory'
},
revive = {
text = 'Revival',
link = 'Revival effects',
symbol = '🤍',
class = 'effect-tagged revival'
},
summon = {
text = 'Summoning',
link = 'Summoning effects',
symbol = '🖤',
class = 'effect-tagged summoning'
},
heal = {
text = 'Healing',
link = 'Healing effects',
symbol = '❤️',
class = 'effect-tagged healing'
},
reanimate = {
text = 'Reanimation',
link = 'Reanimation effects',
symbol = '🩶',
class = 'effect-tagged reanimation'
},
regenerate = {
text = 'Regeneration',
link = 'Regeneration effects',
symbol = '💚',
class = 'effect-tagged regeneration'
},
revitalize = {
text = 'Revitalization',
link = 'Revitalization effects',
symbol = '🩵',
class = 'effect-tagged revitalization'
},
kill = {
text = 'Killing',
link = 'Killing effects',
symbol = '☠️',
class = 'effect-tagged killing'
},
damage = {
text = 'Damaging',
link = 'Damaging effects',
symbol = '💢',
class = 'effect-tagged damaging'
},
steal = {
text = 'Stealing',
link = 'Stealing effects',
symbol = '💰',
class = 'effect-tagged stealing'
},
loud = {
text = 'Loud',
link = 'Loud effects',
symbol = '🔊',
class = 'effect-tagged loud'
},
knockout = {
text = 'Knockout',
link = 'Knockout effects',
symbol = '💤',
class = 'effect-tagged knockout'
},
time = {
text = 'Temporal',
link = 'Temporal effects',
symbol = '🕰️',
class = 'effect-tagged temporal'
}
},
pre = {
strike = {
text = 'Strike',
link = 'Strike delivery abilities',
symbol = '⚔️',
class = 'deliveryPackage-tagged strike'
},
ray = {
text = 'Ray',
link = 'Ray delivery abilities',
symbol = '⚡️',
class = 'deliveryPackage-tagged ray'
},
ball = {
text = 'Ball',
link = 'Ball delivery abilities',
symbol = '🔥',
class = 'deliveryPackage-tagged ball'
},
aura = {
text = 'Aura',
link = 'Aura delivery abilities',
symbol = '🌟',
class = 'deliveryPackage-tagged aura'
},
ritual = {
text = 'Ritual',
link = 'Ritual delivery abilities',
symbol = '🕯️',
class = 'deliveryPackage-tagged ritual'
},
touch = {
text = 'Touch',
link = 'Touch delivery abilities',
symbol = '👉️',
class = 'deliveryPackage-tagged touch'
}
},
maneuver = {
active = {
text = 'Active',
link = 'Active abilities',
symbol = '➡️',
class = 'maneuver-tagged active'
},
reactive = {
text = 'Reactive',
link = 'Reactive abilities',
symbol = '↩️',
class = 'maneuver-tagged reactive'
},
passive = {
text = 'Passive',
link = 'Passive abilities',
symbol = '🔁',
class = 'maneuver-tagged passive'
},
slow = {
text = 'Slow',
link = 'Slow abilities',
symbol = '🐢',
class = 'maneuver-tagged slow'
}
},
interaction = {
attack = {
text = 'Attack',
link = 'Attack abilities',
symbol = '⚔️',
color = '#ff7800',
class = 'interaction-tagged attack'
},
block = {
text = 'Block',
link = 'Block abilities',
symbol = '🛡️',
color = '#ff7800',
class = 'interaction-tagged block'
},
manifest = {
text = 'Manifest',
link = 'Manifest abilities',
symbol = '✳️',
color = '#ff7800',
class = 'interaction-tagged manifest'
},
feat = {
text = 'Feat',
link = 'Feat abilities',
symbol = '🎖️',
color = '#ff7800',
class = 'interaction-tagged feat'
}
},
delivery = {
self = {
text = 'Self',
link = 'Self delivery abilities',
symbol = '🤲',
color = '#f6d32d',
class = 'delivery-tagged self'
},
missile = {
text = 'Missile',
link = 'Missile delivery abilities',
symbol = '🏹',
color = '#f6d32d',
class = 'delivery-tagged missile'
},
hand = {
text = 'Hand',
link = 'Hand delivery abilities',
symbol = '🤚',
color = '#f6d32d',
class = 'delivery-tagged hand'
},
bite = {
text = 'Bite',
link = 'Bite delivery abilities',
symbol = '🦷',
color = '#f6d32d',
class = 'delivery-tagged bite'
},
item = {
text = 'Item',
link = 'Item delivery abilities',
symbol = '📦',
color = '#f6d32d',
class = 'delivery-tagged item'
},
magelore = {
text = 'Magelore',
link = 'Magelore delivery abilities',
symbol = '🔮',
color = '#f6d32d',
class = 'delivery-tagged magelore'
},
weapon = {
text = 'Weapon',
link = 'Weapon delivery abilities',
symbol = '🗡️',
color = '#f6d32d',
class = 'delivery-tagged weapon'
},
shield = {
text = 'Shield',
link = 'Shield delivery abilities',
symbol = '🛡️',
color = '#f6d32d',
class = 'delivery-tagged shield'
},
armor = {
text = 'Armor',
link = 'Armor delivery abilities',
symbol = '🪖',
color = '#f6d32d',
class = 'delivery-tagged armor'
},
sight = {
text = 'Sight',
link = 'Sight delivery abilities',
symbol = '👁️',
color = '#f6d32d',
class = 'delivery-tagged sight'
},
aura = {
text = 'Aura',
link = 'Aura delivery abilities',
symbol = '🌟',
color = '#f6d32d',
class = 'delivery-tagged aura'
},
cone = {
text = 'Cone',
link = 'Cone delivery abilities',
symbol = '🐲',
color = '#f6d32d',
class = 'delivery-tagged cone'
},
other = {
text = 'Other',
link = 'Other delivery abilities',
symbol = '❓',
color = '#f6d32d',
class = 'delivery-tagged other'
}
},
target = {
self = {
text = 'Self',
link = 'Self target abilities',
symbol = '🤲',
color = '#f6d32d',
class = 'target-tagged self'
},
creature = {
text = 'Creature',
link = 'Creature target abilities',
symbol = '👤',
color = '#f6d32d',
class = 'target-tagged creature'
},
body = {
text = 'Body',
link = 'Body target abilities',
symbol = '🧍',
color = '#f6d32d',
class = 'target-tagged body'
},
vitals = {
text = 'Vitals',
link = 'Vitals target abilities',
symbol = '🫀',
color = '#f6d32d',
class = 'target-tagged vitals'
},
limb = {
text = 'Limb',
link = 'Limb target abilities',
symbol = '🦾',
color = '#f6d32d',
class = 'target-tagged limb'
},
arm = {
text = 'Arm',
link = 'Arm target abilities',
symbol = '💪',
color = '#f6d32d',
class = 'target-tagged arm'
},
leg = {
text = 'Leg',
link = 'Leg target abilities',
symbol = '🦵',
color = '#f6d32d',
class = 'target-tagged leg'
},
item = {
text = 'Item',
link = 'Item target abilities',
symbol = '📦',
color = '#f6d32d',
class = 'target-tagged item'
},
weapon = {
text = 'Weapon',
link = 'Weapon target abilities',
symbol = '🗡️',
color = '#f6d32d',
class = 'target-tagged weapon'
},
shield = {
text = 'Shield',
link = 'Shield target abilities',
symbol = '🛡️',
color = '#f6d32d',
class = 'target-tagged shield'
},
armor = {
text = 'Armor',
link = 'Armor target abilities',
symbol = '🪖',
color = '#f6d32d',
class = 'target-tagged armor'
},
ship = {
text = 'Ship',
link = 'Ship target abilities',
symbol = '⛵️',
color = '#f6d32d',
class = 'target-tagged ship'
},
attack = {
text = 'Attack',
link = 'Attack target abilities',
symbol = '⚔️',
color = '#f6d32d',
class = 'target-tagged attack'
},
ability = {
text = 'Ability',
link = 'Ability target abilities',
symbol = '🅰',
color = '#f6d32d',
class = 'target-tagged ability'
},
spell = {
text = 'Spell',
link = 'Spell target abilities',
symbol = '💫',
color = '#f6d32d',
class = 'target-tagged spell'
},
other = {
text = 'Other',
link = 'Other target abilities',
symbol = '❓',
color = '#f6d32d',
class = 'target-tagged other'
},
area = {
text = 'Area',
link = 'Area target abilities',
symbol = '🏕️',
color = '#f6d32d',
class = 'target-tagged area'
},
ci = {tags = {'creature', 'item'}},
ai = {tags = {'attack', 'item'}},
aci = {tags = {'area', 'creature', 'item'}},
ac = {tags = {'area', 'creature'}},
al = {tags = {'arm', 'leg'}},
cs = {tags = {'creature', 'self'}}
},
upgrade = {
warded = {
text = 'Warded',
link = 'Warded abilities',
class = 'upgrade-tagged warded'
},
absolute = {
text = 'Absolute',
link = 'Absolute abilities',
class = 'upgrade-tagged absolute'
}
},
executionTime = {
freeAction = {
text = 'Free action',
symbol = '0️⃣',
link = 'Free action abilities',
class = 'executionTime-tagged a0'
},
singleAction = {
text = 'Single action',
symbol = '1️⃣',
link = 'Single action abilities',
class = 'executionTime-tagged a1'
},
doubleAction = {
text = 'Double action',
symbol = '2️⃣',
link = 'Double action abilities',
class = 'executionTime-tagged a2'
},
tripleAction = {
text = 'Triple action',
symbol = '3️⃣',
link = 'Triple action abilities',
class = 'executionTime-tagged a3'
},
freeReaction = {
text = 'Free reaction',
symbol = '0️⃣',
link = 'Free reaction abilities',
class = 'executionTime-tagged r0'
},
reaction = {
text = 'Reaction',
symbol = '1️⃣',
link = 'Reaction abilities',
class = 'executionTime-tagged r1'
},
shortRest = {
text = 'Short rest',
symbol = '🌙',
link = 'Short rest abilities',
class = 'executionTime-tagged shortRest'
},
longRest = {
text = 'Long rest',
symbol = '🌙',
link = 'Long rest abilities',
class = 'executionTime-tagged longRest'
}
},
piercing = {
av0 = {
text = 'AV0',
symbol = '🎯',
link = 'AV0 abilities',
color = '#33d17a',
class = 'piercing-tagged av0'
},
unblockable = {
text = 'UB',
symbol = '🪨',
link = 'UB abilities',
color = '#33d17a',
class = 'piercing-tagged ub'
}
},
duration = {
instant = {
text = 'Instant',
link = 'Instant duration abilities',
no = true
},
always = {
text = 'Always active',
link = 'Always active duration abilities',
no = true
},
noLimit = {
text = 'No limit',
link = 'No limit duration abilities',
no = true
},
whileUp = {
text = 'While up',
link = 'While up duration abilities',
no = true
},
whileDown = {
text = 'While down',
link = 'While down duration abilities',
no = true
},
whileAlive = {
text = 'While alive',
link = 'While alive duration abilities',
no = true
},
whileDead = {
text = 'While dead',
link = 'While dead duration abilities',
no = true
},
endOfTurn = {
text = 'Until the end of the turn',
link = 'Until end of turn duration abilities',
no = true
},
dawn = {
text = 'Until dawn',
link = 'Until dawn duration abilities',
no = true
},
startOfTargetNextTurn = {
text = 'Until the start of target\'s next turn',
link = 'Until start of target\'s next turn duration abilities',
no = true
},
endOfTargetNextTurn = {
text = 'Until the end of target\'s next turn',
link = 'Until end of target\'s next turn duration abilities',
no = true
},
startOfYourNextTurn = {
text = 'Until the start of your next turn',
link = 'Until start of your next turn duration abilities',
no = true
},
endOfYourNextTurn = {
text = 'Until the end of your next turn',
link = 'Until end of your next turn duration abilities',
no = true
},
endOfCombat = {
text = 'Until the end of combat',
link = 'Until end of combat duration abilities',
no = true
}
},
range = {
melee = {
text = 'Your melee range',
-- link = 'Melee abilities',
no = true
},
weapon = {
text = 'Your weapon\'s range',
-- link = 'Weapon range abilities',
no = true
},
hand = {
text = 'Your hand\'s range',
-- link = 'Hand range abilities',
no = true
},
bite = {
text = 'Your bite\'s range',
-- link = 'Bite range abilities',
no = true
},
item = {
text = 'Your item\'s range',
-- link = 'Item range abilities',
no = true
},
shield = {
text = 'Your shield\'s range',
-- link = 'Shield range abilities',
no = true
},
armor = {
text = 'Your armor\'s range',
-- link = 'Armor range abilities',
no = true
}
},
attribute = {
int = {
text = 'Intelligence',
symbol = 'INT',
link = 'INT save abilities',
class = 'saveAttribute-tagged int'
},
str = {
text = 'Strength',
symbol = 'STR',
link = 'STR save abilities',
class = 'saveAttribute-tagged str'
},
mov = {
text = 'Movement',
symbol = 'MOV',
link = 'MOV save abilities',
class = 'saveAttribute-tagged mov'
},
per = {
text = 'Perception',
symbol = 'PER',
link = 'PER save abilities',
class = 'saveAttribute-tagged per'
},
snk = {
text = 'Sneak',
symbol = 'SNK',
link = 'SNK save abilities',
class = 'saveAttribute-tagged snk'
},
unp = {
text = 'Unused Presence',
symbol = 'UNP',
link = 'UNP save abilities',
class = 'saveAttribute-tagged unp'
}
},
expansionAttribute = {
int = {
text = 'Intelligence',
symbol = 'INT',
link = 'INT save abilities',
class = 'expansionAttribute-tagged int'
},
str = {
text = 'Strength',
symbol = 'STR',
link = 'STR save abilities',
class = 'expansionAttribute-tagged str'
},
mov = {
text = 'Movement',
symbol = 'MOV',
link = 'MOV save abilities',
class = 'expansionAttribute-tagged mov'
},
per = {
text = 'Perception',
symbol = 'PER',
link = 'PER save abilities',
class = 'expansionAttribute-tagged per'
},
snk = {
text = 'Sneak',
symbol = 'SNK',
link = 'SNK save abilities',
class = 'expansionAttribute-tagged snk'
},
unp = {
text = 'Unused Presence',
symbol = 'UNP',
link = 'UNP save abilities',
class = 'expansionAttribute-tagged unp'
}
},
expansion = {
detonate = {
text = 'Detonate',
symbol = '💥',
link = 'Detonate expansion abilities',
class = 'expansion-tagged detonate'
},
ripple = {
text = 'Ripple',
symbol = '🌊',
link = 'Ripple expansion abilities',
class = 'expansion-tagged ripple'
},
cascade = {
text = 'Cascade',
symbol = '➰',
link = 'Cascade expansion abilities',
class = 'expansion-tagged cascade'
},
fork = {
text = 'Fork',
symbol = '🔱',
link = 'Fork expansion abilities',
class = 'expansion-tagged fork'
}
},
sustained = {
sustained = {
text = 'Sustained',
symbol = '⏳️',
link = 'Sustained abilities',
class = 'sustained'
}
}
}
local premades = {
strike = {
maneuver = 'active',
executionTime = '1a',
interaction = 'attack',
delivery = 'weapon',
target = 'creature',
duration = 'instant',
range = 'weapon'
},
ray = {
maneuver = 'active',
executionTime = '1a',
interaction = 'attack',
delivery = 'missile',
target = 'creature',
duration = 'instant',
range = '60f',
piercing = 'av0'
},
ball = {
maneuver = 'active',
executionTime = '1a',
interaction = 'attack',
delivery = 'missile',
target = 'creature',
duration = 'instant',
range = '30f',
piercing = 'ub'
},
aura = {
skip = true,
maneuver = 'active',
executionTime = '1a',
interaction = 'feat',
delivery = 'aura',
target = 'creature',
duration = 'instant',
range = '10f',
attribute = 'mov'
},
ritual = {
maneuver = 'slow',
executionTime = '10m',
interaction = 'manifest',
delivery = 'sight',
target = 'creature',
duration = 'instant',
range = '5f'
},
touch = {
maneuver = 'active',
executionTime = '1a',
interaction = 'attack',
delivery = 'hand',
target = 'creature',
duration = 'instant',
range = 'hand',
piercing = 'ub'
},
triumph = {
skip = true,
maneuver = 'reactive',
executionTime = '0r',
interaction = 'manifest',
delivery = 'self',
target = 'self',
duration = 'instant',
range = 'self'
},
self = {
skip = true,
maneuver = 'active',
executionTime = '1a',
interaction = 'man',
delivery = 'self',
target = 'self',
duration = 'instant',
range = 'self'
},
passive = {
skip = true,
maneuver = 'passive',
interaction = 'man',
delivery = 'self',
target = 'self',
duration = '4',
range = 'self'
},
crown = {
skip = true,
maneuver = 'active',
executionTime = '1a',
interaction = 'man',
delivery = 'self',
target = 'self',
duration = '8h',
range = 'self',
sustained = 'sus'
}
}
function noPlural(word)
-- Common irregular plural forms
local irregulars = {
["children"] = "child",
["men"] = "man",
["women"] = "woman",
["feet"] = "foot",
["teeth"] = "tooth",
["mice"] = "mouse",
["geese"] = "goose"
}
-- Check for irregular forms
if irregulars[word] then return irregulars[word] end
-- Regular pluralization rules
if word:match("ies$") then
-- Change words ending in 'ies' to 'y' (e.g., "parties" -> "party")
return word:sub(1, -4) .. "y"
elseif word:match("ves$") then
-- Change words ending in 'ves' to 'f' or 'fe' (e.g., "wolves" -> "wolf")
return word:sub(1, -4) .. "f"
elseif word:match("s$") and not word:match("ss$") then
-- Remove trailing 's' (e.g., "cats" -> "cat", but keep "boss")
return word:sub(1, -2)
else
-- Return the word unchanged if no pluralization rule applies
return word
end
end
local function addCategory(category, key, val, skill, spell, addCats, noLower)
if addCats then
if not noLower then category = category:lower() end
if tags[key] and tags[key][val] then
if tags[key][val].tags then
out = ''
for _, t in ipairs(tags[key][val].tags) do
out = out ..
addCategory(category, key, t, skill, spell,
addCats, true)
end
return out
else
category = tags[key][val].link
end
end
if skill then
skillCategory = category:gsub('ability', 'skill'):gsub('abilities',
'skills')
skillCategory = skillCategory:gsub("^%l", string.upper)
end
if spell then
spellCategory = category:gsub('ability', 'spell'):gsub('abilities',
'spells')
spellCategory = spellCategory:gsub("^%l", string.upper)
end
category = category:gsub("^%l", string.upper)
local c = '[[Category:' .. tostring(category) .. ']]'
if skill then
c = c .. '[[Category:' .. tostring(skillCategory) .. ']]'
end
if spell then
c = c .. '[[Category:' .. tostring(spellCategory) .. ']]'
end
return c
else
return ''
end
end
local function makeTag(frame, key, value, makeCat, transparent)
if not tags[key] or not tags[key][value] then
if value then
local out =
frame:preprocess("{{ucfirst:" .. tostring(value) .. "}}")
if not ('.' == out:sub(-1)) then out = out .. '.' end
return out
else
return ''
end
end
local tag = tags[key][value]
if tag.no then
local out = frame:preprocess("{{ucfirst:" .. tag.text .. "}}")
if not ('.' == out:sub(-1)) then out = out .. '.' end
return out
end
if tag.tags then
local out = ''
for _, t in ipairs(tag.tags) do
out = out .. makeTag(frame, key, t, makeCat, transparent)
end
return out
end
local tagText = "{{Tag|{{ucfirst:" .. tag.text .. "}}"
if tag.symbol then tagText = tagText .. "|" .. tag.symbol end
if tag.link then
tagText = tagText .. "|l=:Category:{{ucfirst:" .. tag.link .. "}}"
end
if tag.color then tagText = tagText .. "|c=" .. tag.color end
if tag.class then tagText = tagText .. "|class=" .. tag.class end
if transparent then tagText = tagText .. "|o=1" end
tagText = tagText .. "}}"
-- out = frame:preprocess(tagText)
out = tagText
return out
end
local function makeContent(frame, table, keys, makeCat)
local content = ''
local subContent = ''
local hasPre = false
for _, key in ipairs(keys) do
if ('pre' == key and table['pre']) or
('executionTime' == key and table['executionTime']) or
('target' == key) or ('duration' == key) or
('invoked' == key and table['invoked']) then
hasPre = true
content = content ..
frame:preprocess(
makeTag(frame, key, table[key], makeCat))
else
if hasPre then
subContent = subContent ..
makeTag(frame, key, table[key], makeCat)
else
content = content ..
frame:preprocess(
makeTag(frame, key, table[key], makeCat))
end
end
end
if hasPre then
content = content .. frame:preprocess('{{TagSub|' .. subContent .. '}}')
-- content = content .. '{{TagSub|' .. subContent .. '}}'
end
if content == '' then
for _, key in ipairs(keys) do
if table[key] then
content = frame:preprocess(
'{{ucfirst:' .. content .. table[key] .. '}}')
end
end
end
return content
end
local function makeBar(frame, title, content, link, flags, bottom)
if content == '' then return '' end
local barSpace = mw.html.create('span')
barSpace:wikitext(frame:preprocess(' ')):css('display', 'none')
local barTitle = mw.html.create('span')
local barTitleClass = "{{lc:" .. title .. "}}"
barTitleClass = barTitleClass:gsub(' ', '-')
barTitleClass = barTitleClass:gsub('\'', '')
barTitleClass = barTitleClass:gsub('\"', '')
local barText = "{{ucfirst:" .. title .. "}}"
if link then barText = "[[" .. link .. "|" .. barText .. "]]" end
barText = barText .. ":"
barTitle:addClass('ability-bar-title'):wikitext(frame:preprocess(barText))
:css('font-weight', 'bold'):css('margin-right', '0.5em')
local barContent = mw.html.create('span')
barContent:addClass('ability-bar-content'):wikitext(content)
local output = mw.html.create('div')
if bottom then output = mw.html.create('span') end
if not flags then flags = {} end
for k, v in pairs(flags) do
if type(v) == 'string' then
output:addClass('flag-' .. k .. '-' .. v)
end
end
output:addClass('ability-bar'):addClass('ability-bar-' .. barTitleClass)
:attr(flags):attr('test', 'out'):node(barSpace):node(barTitle):node(
barSpace):node(barContent):css('display', 'block')
-- if flags then
-- for k, v in ipairs(flags) do
-- output:attr(k, v)
-- end
-- end
return tostring(output)
end
local function nonempty(v)
if v == nil then return false end
if type(v) ~= 'string' then return true end
return mw.text.trim(v) ~= ''
end
local function resolveAlias(args, aliases)
local resolved = {}
-- Resolve keys
for canonicalKey, keyAliasList in pairs(aliases.keys) do
for _, alias in ipairs(keyAliasList) do
local v = args[alias]
if nonempty(v) then
resolved[canonicalKey] = v
break
end
end
end
-- Resolve values
for canonicalKey, canonicalValueTable in pairs(aliases.values) do
local rawValue = resolved[canonicalKey]
-- Treat empty/whitespace as false
if rawValue ~= nil and not nonempty(rawValue) then
resolved[canonicalKey] = false
elseif rawValue ~= nil then
for canonicalValue, valueAliasList in pairs(canonicalValueTable) do
for _, alias in ipairs(valueAliasList) do
if rawValue == alias then
resolved[canonicalKey] = canonicalValue
break
elseif type(valueAliasList) == "table" and valueAliasList[1] and
type(rawValue) == "string" and
rawValue:match(valueAliasList[1]) then
-- (keep your existing time/range parsing here unchanged)
if canonicalKey == "duration" or canonicalKey ==
"executionTime" then
local num = tonumber(rawValue:match("^(%d+)"))
local unit = rawValue:match("[%a]+$")
local unitMap = {
m = "minute",
h = "hour",
d = "day",
w = "week",
y = "year",
r = "round",
s = "second"
}
resolved[canonicalKey] = unitMap[unit] and
(num .. " " ..
unitMap[unit] ..
(num > 1 and "s" or
"")) or
rawValue
elseif canonicalKey == "range" or canonicalKey ==
"expansionRange" then
local num = tonumber(rawValue:match("^(%d+)"))
local unit = rawValue:match("[%a]+$")
local unitMap = {f = "feet", m = "miles"}
resolved[canonicalKey] = unitMap[unit] and
(num .. " " ..
unitMap[unit]) or
rawValue
end
end
end
end
end
end
return resolved
end
local classFixes = {bar = 'ber', sam = 'due', ama = 'cor'}
local classArchetypes = {
ber = 'warr',
due = 'warr',
vet = 'warr',
kni = 'warr',
pal = 'warr',
ass = 'semi',
cor = 'semi',
arc = 'semi',
thi = 'semi',
ran = 'semi',
fla = 'mage',
sto = 'mage',
lif = 'mage',
nec = 'mage',
nat = 'mage'
}
local className = {
ber = 'Berserker',
due = 'Duelist',
vet = 'Veteran',
kni = 'Knight',
pal = 'Paladin',
ass = 'Assassin',
cor = 'Corsair',
arc = 'Archer',
thi = 'Thief',
ran = 'Ranger',
fla = 'Flame Mage',
sto = 'Storm Mage',
lif = 'Life Mage',
nec = 'Necromancer',
nat = 'Nature Mage'
}
local archetypeName = {warr = 'Warrior', semi = 'Semi', mage = 'Mage'}
function p.a(frame)
makeCat = true
-- Figure out all the default values
-- Prefer parent args if invoked via a template
local parent = frame:getParent()
local rawArgs = parent and parent.args or frame.args
-- Drop empty/whitespace-only values so "" behaves like false/nil
local args = {}
for k, v in pairs(rawArgs) do if nonempty(v) then args[k] = v end end
local resolved = {}
if args['pre'] then
local toResolve = resolveAlias(premades[args['pre']], aliases)
for k, v in pairs(toResolve) do resolved[k] = v end
end
local userResolve = resolveAlias(args, aliases)
for k, v in pairs(userResolve) do resolved[k] = v end
if resolved['pre'] and premades[args['pre']]['skip'] then
resolved['pre'] = nil
end
if not resolved['duration'] then resolved['duration'] = 'instant' end
if resolved['interaction'] == 'attack' then
local dc = "Hit target's {{AC}}"
if resolved['target'] == 'limb' then
dc = "Hit target's {{Var:ACLimb}}"
end
if resolved['target'] == 'arm' then
dc = "Hit target's {{Var:ACLimb}}"
end
if resolved['target'] == 'leg' then
dc = "Hit target's {{Var:ACLimb}}"
end
if resolved['target'] == 'vitals' then
dc = "Hit target's {{Var:ACVitals}}"
end
if resolved['target'] == 'item' then
dc = "Hit DC [[Core:Item Target|depends on item]]"
end
if resolved['target'] == 'shield' then
dc = "Hit user's {{Var:ACWielded}}"
end
if resolved['target'] == 'armor' then
dc = "Hit user's {{Var:ACWorn}}"
end
if resolved['target'] == 'weapon' then
dc = "Hit user's {{Var:ACWielded}}"
end
resolved['hitDC'] = dc
end
if resolved['expansionCount'] then
if resolved['expansionCount'] == '1' then
resolved['expansionCount'] = '{{Space}}' ..
resolved['expansionCount'] ..
' extra execution.'
else
resolved['expansionCount'] = '{{Space}}' ..
resolved['expansionCount'] ..
' extra executions.'
end
end
if resolved['invoked'] then
resolved['verbal'] = 'verbal'
resolved['somatic'] = 'somatic'
resolved['mage'] = 'magelore'
end
local skill = false
local spell = false
local standard = false
local class = nil
local classFull = nil
local archetype = nil
local archetypeFull = nil
local rank = nil
if args['class'] then
class = args['class']
if classFixes[class] then class = classFixes[class] end
end
if args['class'] or args['arch'] then
archetype = classArchetypes[class]
if args['arch'] then archetype = args['arch'] end
classFull = className[class]
archetypeFull = archetypeName[archetype]
standard = true
if archetype == 'warr' or archetype == 'semi' then skill = true end
if archetype == 'mage' then spell = true end
end
local costMP = nil
local costHP = nil
local costGP = nil
if args['pre'] == 'crown' then
spell = true
costMP = '1'
rank = '2'
end
if args['rank'] then rank = args['rank'] end
if args['skill'] then
skill = true
if args['skill'] == '0' or args['skill'] == 'false' then
skill = false
end
end
if args['spell'] then
spell = true
if args['spell'] == '0' or args['spell'] == 'false' then
spell = false
end
end
if args['standard'] then
standard = true
if args['standard'] == '0' or args['standard'] == 'false' then
standard = false
end
end
if args['mp'] then costMP = args['mp'] end
if args['hp'] then costHP = args['hp'] end
if args['gp'] then costGP = args['gp'] end
if args['shatter'] then costShatter = args['shatter'] end
local basic = false
local journeyman = false
if args['basic'] then basic = true end
if args['journeyman'] or args['jm'] then journeyman = true end
-- Category string
local c = ''
local name = args['name']
local page = mw.title.getCurrentTitle().text
local namespace = frame:preprocess('{{NAMESPACE}}')
local addCats = ((namespace == 'Ability') and (page == name))
c = c .. addCategory('Abilities', nil, nil, skill, spell, addCats)
if basic then
c = c ..
addCategory('Basic abilities', 'basic', nil, skill, spell,
addCats)
end
if journeyman then
c = c ..
addCategory('Journeyman abilities', 'journeyman', nil, skill,
spell, addCats)
end
if standard then
c = c ..
addCategory('Standard abilities', nil, nil, false, false,
addCats)
if skill then
c = c ..
addCategory('Semblant skills', nil, nil, skill, spell,
addCats)
end
if spell then
c = c ..
addCategory('Conjured spells', nil, nil, skill, spell,
addCats)
end
else
c = c ..
addCategory('Nonstandard abilities', nil, nil, skill, spell,
addCats)
end
if args['ethereal'] then
c = c ..
addCategory('Ethereal abilities', nil, nil, skill, spell,
addCats)
end
if args['av'] then
c = c ..
addCategory('AV granting abilities', nil, nil, skill, spell,
addCats, true)
c = c ..
addCategory('AV' .. args['av'] .. ' granting abilities', nil,
nil, skill, spell, addCats, true)
end
if (archetype and archetypeFull) then
c = c ..
addCategory(archetypeFull .. ' archetype abilities',
'archetype', archetype, skill, spell, addCats)
end
if (class and classFull) then
c = c ..
addCategory(classFull .. ' class abilities', 'class', class,
skill, spell, addCats, true)
end
if (rank and (class and classFull)) then
if rank == '3' then rank = '3+' end
c = c ..
addCategory('Rank ' .. rank .. ' ' .. classFull .. ' abilities',
'rank', rank, skill, spell, addCats, true)
end
if resolved['pre'] then
c = c ..
addCategory(resolved['pre'] .. 'abilities', 'pre',
resolved['pre'], skill, spell, addCats)
end
if resolved['interaction'] then
c = c ..
addCategory(resolved['interaction'] .. ' interaction abilities',
'interaction', resolved['interaction'], skill,
spell, addCats)
end
if resolved['delivery'] then
c = c ..
addCategory(resolved['delivery'] .. ' delivery abilities',
'delivery', resolved['delivery'], skill, spell,
addCats)
end
if resolved['target'] then
c = c ..
addCategory(resolved['target'] .. ' target abilities', 'target',
resolved['target'], skill, spell, addCats)
end
if resolved['duration'] then
c = c ..
addCategory(
noPlural(resolved['duration']) .. ' duration abilities',
'duration', resolved['duration'], skill, spell, addCats)
end
-- if resolved['range'] then
-- c = c .. addCategory(resolved['range'] .. ' range abilities', 'range', resolved['range'], skill, spell, addCats)
-- end
if resolved['expansion'] then
c = c ..
addCategory(resolved['expansion'] .. ' expansion abilities',
'expansion', resolved['expansion'], skill, spell,
addCats)
end
-- if resolved['expansionRange'] then
-- c = c .. addCategory(resolved['expansionRange'] .. ' expansion range abilities', 'expansionRange', resolved['expansionRange'], skill, spell, addCats)
-- end
if resolved['attribute'] then
c = c ..
addCategory(resolved['attribute'] .. ' save abilities',
'attribute', resolved['attribute'], skill, spell,
addCats)
end
if resolved['piercing'] then
c = c .. addCategory(resolved['piercing'] .. ' abilities', 'piercing',
resolved['piercing'], skill, spell, addCats)
end
if resolved['sustained'] then
c = c ..
addCategory('Sustained abilities', 'sustained',
resolved['sustained'], skill, spell, addCats)
end
if resolved['upgrade'] then
c = c ..
addCategory(resolved['upgrade'] .. ' abilities', 'upgrade',
resolved['upgrade'], skill, spell, addCats)
end
if resolved['executionTime'] then
c = c ..
addCategory(
noPlural(resolved['executionTime']) ..
' execution time abilities', 'executionTime',
resolved['executionTime'], skill, spell, addCats)
end
if resolved['maneuver'] then
c = c .. addCategory(resolved['maneuver'] .. ' abilities', 'maneuver',
resolved['maneuver'], skill, spell, addCats)
end
if resolved['verbal'] then
c = c ..
addCategory('Verbal component abilities', 'verbal',
resolved['verbal'], skill, spell, addCats)
end
if resolved['somatic'] then
c = c ..
addCategory('Somatic component abilities', 'somatic',
resolved['somatic'], skill, spell, addCats)
end
if resolved['material'] then
c = c ..
addCategory('Material component abilities', 'material',
resolved['material'], skill, spell, addCats)
end
if resolved['magelore'] then
c = c ..
addCategory('Magelore component abilities', 'magelore',
resolved['magelore'], skill, spell, addCats)
end
if resolved['invoked'] then
c = c ..
addCategory('Invoke component abilities', 'invoked',
resolved['invoked'], skill, spell, addCats)
end
local flawContent = ''
if args['flaw'] or args['f'] or args['fl'] then
flawContent = flawContent .. makeTag(frame, 'flaw', 'flaw', makeCat)
c = c ..
addCategory('Flaw abilities', 'flaw', 'flaw', skill, spell,
addCats)
end
local specialContent = ''
if args['special'] or args['s'] or args['sp'] then
specialContent = specialContent ..
makeTag(frame, 'special', 'special', makeCat)
c = c ..
addCategory('Special abilities', 'special', 'special', skill,
spell, addCats)
end
local esContent = ''
if args['es'] then
esContent = esContent .. makeTag(frame, 'es', 'es', makeCat)
c = c ..
addCategory('Elder Sorcery abilities', 'es', 'es', skill, spell,
addCats)
end
local wardedContent = ''
if args['warded'] then
wardedContent = wardedContent ..
makeTag(frame, 'warded', 'warded', makeCat)
c = c ..
addCategory('Warded abilities', 'warded', 'warded', skill,
spell, addCats)
end
local elementContent = ''
if args['life'] then
elementContent = elementContent ..
makeTag(frame, 'elements', 'life', makeCat)
c = c ..
addCategory('Life element abilities', 'elements', 'life', skill,
spell, addCats)
end
if args['storm'] then
elementContent = elementContent ..
makeTag(frame, 'elements', 'storm', makeCat)
c = c ..
addCategory('Storm element abilities', 'elements', 'storm',
skill, spell, addCats)
end
if args['necro'] then
elementContent = elementContent ..
makeTag(frame, 'elements', 'necro', makeCat)
c = c ..
addCategory('Necromancy element abilities', 'elements', 'necro',
skill, spell, addCats)
end
if args['flame'] then
elementContent = elementContent ..
makeTag(frame, 'elements', 'flame', makeCat)
c = c ..
addCategory('Flame element abilities', 'elements', 'flame',
skill, spell, addCats)
end
if args['nature'] then
elementContent = elementContent ..
makeTag(frame, 'elements', 'nature', makeCat)
c = c ..
addCategory('Nature element abilities', 'elements', 'nature',
skill, spell, addCats)
end
local powerContent = ''
if args['magic'] then
powerContent = powerContent .. makeTag(frame, 'power', 'magic', makeCat)
c = c ..
addCategory('Magically powered abilities', 'power', 'magic',
skill, spell, addCats) ..
addCategory('Magical effects', nil, nil, false, false, addCats)
end
if args['divine'] then
powerContent = powerContent ..
makeTag(frame, 'power', 'divine', makeCat)
c = c ..
addCategory('Divinely powered abilities', 'power', 'divine',
skill, spell, addCats) ..
addCategory('Divine effects', nil, nil, false, false, addCats)
end
if args['spirit'] then
powerContent = powerContent ..
makeTag(frame, 'power', 'spirit', makeCat)
c = c ..
addCategory('Spiritually powered abilities', 'power', 'spirit',
skill, spell, addCats) ..
addCategory('Spiritual effects', nil, nil, false, false, addCats)
end
if args['primal'] then
powerContent = powerContent ..
makeTag(frame, 'power', 'primal', makeCat)
c = c ..
addCategory('Primally powered abilities', 'power', 'primal',
skill, spell, addCats) ..
addCategory('Primal effects', nil, nil, false, false, addCats)
end
if args['martial'] then
powerContent = powerContent ..
makeTag(frame, 'power', 'martial', makeCat)
c = c ..
addCategory('Martially powered abilities', 'power', 'martial',
skill, spell, addCats)
end
if args['psionic'] then
powerContent = powerContent ..
makeTag(frame, 'power', 'psionic', makeCat)
c = c ..
addCategory('Psionically powered abilities', 'power', 'psionic',
skill, spell, addCats) ..
addCategory('Mental effects', nil, nil, false, false, addCats)
end
if args['techo'] then
powerContent = powerContent .. makeTag(frame, 'power', 'techo', makeCat)
c = c ..
addCategory('Technologically powered abilities', 'power',
'techo', skill, spell, addCats) ..
addCategory('Technological effects', nil, nil, false, false,
addCats)
end
if args['finance'] then
powerContent = powerContent ..
makeTag(frame, 'power', 'finance', makeCat)
c = c ..
addCategory('Financially powered abilities', 'power', 'finance',
skill, spell, addCats) ..
addCategory('Financial effects', nil, nil, false, false, addCats)
end
if args['alchemy'] then
powerContent = powerContent ..
makeTag(frame, 'power', 'alchemy', makeCat)
c = c ..
addCategory('Alchemically powered abilities', 'power',
'alchemy', skill, spell, addCats) ..
addCategory('Alchemical effects', nil, nil, false, false,
addCats)
end
if args['unknown'] then
powerContent = powerContent ..
makeTag(frame, 'power', 'unknown', makeCat)
c = c ..
addCategory('Unknown powered abilities', 'power', 'unknown',
skill, spell, addCats)
end
if class then
classContent = makeContent(frame, resolved, {'class'}, makeCat)
powerContent = powerContent .. classContent
end
if args['rotator'] then
powerContent = powerContent ..
makeTag(frame, 'category', 'rotator', makeCat)
end
powerContent = powerContent .. elementContent
if skill then
powerContent = powerContent ..
makeTag(frame, 'category', 'skill', makeCat)
end
if spell then
powerContent = powerContent ..
makeTag(frame, 'category', 'spell', makeCat)
end
local deliveryContent = ''
if standard and skill then
deliveryContent = deliveryContent ..
makeTag(frame, 'category', 'semblant', makeCat)
end
if standard and spell then
deliveryContent = deliveryContent ..
makeTag(frame, 'category', 'conjure', makeCat)
end
local effectContent = ''
if args['mental'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'mental', makeCat)
c = c ..
addCategory('Mental effects', 'effect', 'mental', skill, spell,
addCats)
end
if args['truth'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'truth', makeCat)
c = c ..
addCategory('Truth detecting effects', 'effect',
'truthDetecting', skill, spell, addCats)
end
if args['duelMod'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'duelModifying', makeCat)
c = c ..
addCategory('Duel modifying effects', 'effect', 'duelModifying',
skill, spell, addCats)
end
if args['movement'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'movement', makeCat)
c = c ..
addCategory('Movement effects', 'effect', 'movement', skill,
spell, addCats)
end
if args['poison'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'poison', makeCat)
c = c ..
addCategory('Poison effects', 'effect', 'poison', skill, spell,
addCats)
end
if args['displacement'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'displacement', makeCat)
c = c ..
addCategory('Displacement effects', 'effect', 'displacement',
skill, spell, addCats)
end
if args['transformation'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'transformation', makeCat)
c = c ..
addCategory('Transformation effects', 'effect',
'transformation', skill, spell, addCats)
end
if args['control'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'control', makeCat)
c = c ..
addCategory('Control effects', 'effect', 'control', skill,
spell, addCats)
end
if args['resist'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'resist', makeCat)
c = c ..
addCategory('Resistance effects', 'effect', 'resist', skill,
spell, addCats)
end
if args['awaken'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'awaken', makeCat)
c = c ..
addCategory('Awakening effects', 'effect', 'awaken', skill,
spell, addCats)
end
if args['immune'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'immune', makeCat)
c = c ..
addCategory('Immunity effects', 'effect', 'immune', skill,
spell, addCats)
end
if args['long'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'long', makeCat)
c = c ..
addCategory('Long range effects', 'effect', 'long', skill,
spell, addCats)
end
if args['sense'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'sense', makeCat)
c = c ..
addCategory('Sensory effects', 'effect', 'sense', skill, spell,
addCats)
end
if args['revive'] or args['rev'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'revive', makeCat)
c = c ..
addCategory('Revival effects', 'effect', 'revive', skill, spell,
addCats)
end
if args['summon'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'summon', makeCat)
c = c ..
addCategory('Summoning effects', 'effect', 'summon', skill,
spell, addCats)
end
if args['heal'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'heal', makeCat)
c = c ..
addCategory('Healing effects', 'effect', 'heal', skill, spell,
addCats)
end
if args['reanimate'] or args['rean'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'reanimate', makeCat)
c = c ..
addCategory('Reanimation effects', 'effect', 'reanimate', skill,
spell, addCats)
end
if args['regenerate'] or args['regen'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'regenerate', makeCat)
c = c ..
addCategory('Regeneration effects', 'effect', 'regenerate',
skill, spell, addCats)
end
if args['revitalize'] or args['revit'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'revitalize', makeCat)
c = c ..
addCategory('Revitalization effects', 'effect', 'revitalize',
skill, spell, addCats)
end
if args['kill'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'kill', makeCat)
c = c ..
addCategory('Killing effects', 'effect', 'kill', skill, spell,
addCats)
end
if args['damage'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'damage', makeCat)
c = c ..
addCategory('Damaging effects', 'effect', 'damage', skill,
spell, addCats)
end
if args['steal'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'steal', makeCat)
c = c ..
addCategory('Stealing effects', 'effect', 'steal', skill, spell,
addCats)
end
if args['loud'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'loud', makeCat)
c = c ..
addCategory('Loud effects', 'effect', 'loud', skill, spell,
addCats)
end
if args['knockout'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'knockout', makeCat)
c = c ..
addCategory('Knockout effects', 'effect', 'knockout', skill,
spell, addCats)
end
if args['time'] then
effectContent = effectContent ..
makeTag(frame, 'effects', 'time', makeCat)
c = c ..
addCategory('Temporal effects', 'effect', 'time', skill, spell,
addCats)
end
local costContent = ''
if costMP then
c = c ..
addCategory('MP cost abilities', 'costMP', costMP, skill, spell,
addCats, true)
if costMP == 'x' then
costContent = costContent .. frame:preprocess(
"{{Tag|X MP|🩵|l=:Category:MP cost abilities|c=#3584e4|class=cost-tagged mpx}}")
c = c ..
addCategory('Variable MP cost abilities', 'costMP', 'x',
skill, spell, addCats, true)
else
costContent = costContent .. frame:preprocess(
"{{Tag|" .. costMP ..
" MP|🩵|l=:Category:MP cost abilities|c=#3584e4|class=cost-tagged mp" ..
costMP .. "}}")
c = c ..
addCategory(costMP .. ' MP cost abilities', 'costMP',
costMP, skill, spell, addCats, true)
end
end
if costHP then
c = c ..
addCategory('HP cost abilities', 'costHP', costHP, skill, spell,
addCats, true)
if costHP == 'x' then
costContent = costContent .. frame:preprocess(
"{{Tag|X HP|❤️|l=:Category:HP cost abilities|c=#e01b24|class=cost-tagged hpx}}")
c = c ..
addCategory('Variable HP cost abilities', 'costHP', 'x',
skill, spell, addCats, true)
else
costContent = costContent .. frame:preprocess(
"{{Tag|" .. costHP ..
" HP|❤️|l=:Category:HP cost abilities|c=#e01b24|class=cost-tagged hp" ..
costHP .. "}}")
c = c ..
addCategory(costHP .. ' HP cost abilities', 'costHP',
costHP, skill, spell, addCats, true)
end
end
if costGP then
c = c ..
addCategory('GP cost abilities', 'costGP', costGP, skill, spell,
addCats, true)
if costGP == 'x' then
costContent = costContent .. frame:preprocess(
"{{Tag|X GP|🪙|l=:Category:GP cost abilities|c=#F6D32D|class=cost-tagged gpx}}")
c = c ..
addCategory('Variable GP cost abilities', 'costGP', 'x',
skill, spell, addCats, true)
else
costContent = costContent .. frame:preprocess(
"{{Tag|" .. costGP ..
" GP|🪙|l=:Category:GP cost abilities|c=#F6D32D|class=cost-tagged gp" ..
costGP .. "}}")
c = c ..
addCategory(costGP .. ' GP cost abilities', 'costGP',
costGP, skill, spell, addCats, true)
end
end
if costShatter then
c = c ..
addCategory('Shatter cost abilities', 'costShatter',
costShatter, skill, spell, addCats)
costContent = costContent .. frame:preprocess(
"{{Tag|Shatter|💥|l=:Category:Shatter cost abilities|class=cost-tagged shatter}}")
end
if args['cost'] then
costContent = costContent .. frame:preprocess(args['cost'])
end
local executionTimeTitle = 'Execution time'
if spell then executionTimeTitle = 'Casting time' end
local expansionContent = 'TEST'
-- if args['ec'] or args['expCount'] or args['expansionCount'] then
-- -- local ec = args['ec'] or args['expCount'] or args['expansionCount']
-- -- ec = tostring(ec)
-- local ec = '1'
-- expansionContent = 'This ability expands ' .. ec .. ' time' .. (tonumber(ec) > 1 and 's' or '') .. '.'
-- end
local heightenedContent = ''
if args['heightened'] then
heightenedContent = heightenedContent ..
'For each additional {{L|Core|MP}} spent, ' ..
args['heightened']
-- heightenedContent = heightenedContent .. ' You can only {{L|Core|Heightening|Heighten}} if you are {{L|Core|Proficiency Bonus|Proficient}} or {{L|Core|Fluency Bonus|Fluent}} in ' .. args['name'] .. ' and only up to the corresponding bonus.'
c = c ..
addCategory('Heightened abilities', 'heightened',
args['heightened'], skill, spell, addCats, true)
end
local proficiencyContent = ''
if args['pro'] then
proficiencyContent = proficiencyContent .. frame:preprocess(args['pro'])
end
local fluencyContent = ''
if args['flu'] then
fluencyContent = fluencyContent .. frame:preprocess(args['flu'])
end
local restrictionContent = ''
if args['restrict'] then
restrictionContent = restrictionContent ..
frame:preprocess(args['restrict'])
end
local statValContent = ''
local statFeatContent = ''
if args['vstat'] and args['val'] then
local vstat = frame:preprocess("{{uc:" .. args['vstat'] .. "}}")
statValContent = 'This ability sets your {{L|Core|' .. vstat .. '}}' ..
' score to a minimum of ' .. args['val'] .. '.'
c = c ..
addCategory('Attribute setting abilities', 'val', args['val'],
skill, spell, addCats, true)
c = c ..
addCategory(vstat .. ' setting abilities', 'vstat',
args['vstat'], skill, spell, addCats, true)
c = c ..
addCategory(
vstat .. ' value of ' .. args['val'] .. ' setting abilities',
'val', args['val'], skill, spell, addCats, true)
end
local f = 'proficiency'
if args['fflu'] then f = 'fluency' end
if args['fstat'] and (args['fflu'] or args['fpro']) then
local fstat = frame:preprocess("{{uc:" .. args['fstat'] .. "}}")
statFeatContent =
'This ability gives {{L|Core|' .. f .. ' Bonus|' .. f ..
'}} in {{L|Core|' .. fstat ..
'}} {{L|Core|Feat Interaction|Feat Saves}}.'
c = c ..
addCategory('Feat save improvement abilities', 'flu',
args['fflu'], skill, spell, addCats)
c = c ..
addCategory('Feat save ' .. f .. ' granting abilities', 'fstat',
args['fstat'], skill, spell, addCats, true)
c = c ..
addCategory(
fstat .. ' feat save ' .. f .. ' granting abilities',
'fstat', args['fstat'], skill, spell, addCats, true)
end
if args['rotator'] then
c = c ..
addCategory('Rotator abilities', 'rotator', args['rotator'],
skill, spell, addCats)
end
if args['style'] then
c = c ..
addCategory('Casting style abilities', 'style', args['style'],
skill, spell, addCats)
end
if args['weapon'] then
c = c ..
addCategory('Weapon fighting style abilities', 'weapon',
args['weapon'], skill, spell, addCats)
end
-- Remove range from self targeted abilities
if resolved['target'] == 'self' or resolved['range'] == 'self' then
resolved['range'] = nil
end
local barsTop = {
-- {
-- title = 'elements',
-- content = frame:preprocess(elementContent)
-- },
{
title = 'power sources',
content = frame:preprocess(esContent .. powerContent),
link = ':Category:Powered abilities'
}, {
title = 'effect types',
content = frame:preprocess(flawContent .. specialContent ..
effectContent),
link = ':Category:Effects'
}, {
title = 'delivery',
content = frame:preprocess(wardedContent .. deliveryContent) ..
makeContent(frame, resolved, {
'expansion', 'pre', 'upgrade', 'piercing', 'delivery',
'interaction'
}, makeCat),
link = ':Category:Delivery abilities'
}, {
title = 'save attribute',
content = makeContent(frame, resolved, {'attribute'}, makeCat),
link = 'Core:Feat Interaction'
}, {
title = 'expansion save attribute',
content = makeContent(frame, resolved, {'expansionAttribute'},
makeCat)
}, {
title = 'target',
content = makeContent(frame, resolved, {'target', 'hitDC'}, makeCat),
link = ':Category:Target abilities'
}, {
title = executionTimeTitle,
content = makeContent(frame, resolved,
{'executionTime', 'maneuver'}, makeCat),
link = 'Core:Maneuvers'
}, {
title = 'trigger',
content = args['trigger'] or '',
link = 'Core:Reactive Maneuvers'
}, {
title = 'cost and components',
content = frame:preprocess(costContent) ..
makeContent(frame, resolved, {
'material', 'invoked', 'verbal', 'somatic', 'magelore'
}, makeCat),
link = ':Category:Cost abilities'
}, {
title = 'Mana cost',
content = args['mpx'] or '',
link = ':Category:MP cost abilities'
}, {
title = 'Hit cost',
content = args['hpx'] or '',
link = ':Category:HP cost abilities'
}, {
title = 'Gold cost',
content = args['gpx'] or '',
link = ':Category:GP cost abilities'
}, {
title = 'Material cost',
content = makeContent(frame, resolved, {'matx'}, makeCat),
link = ':Category:Material component abilities'
}, {
title = 'duration',
content = makeContent(frame, resolved, {'duration', 'sustained'},
makeCat),
link = ':Category:Duration abilities'
}, {
title = 'range',
content = makeContent(frame, resolved, {'range'}, makeCat),
link = 'Core:Range'
}, -- {
-- title = 'expansion',
-- content = makeContent(frame, resolved, {'expansion'}, makeCat)
-- },
{
title = 'expansion range',
content = makeContent(frame, resolved,
{'expansionRange', 'expansionCount'}, makeCat),
link = 'Core:Expansions'
}, -- {
-- title = 'expansion count',
-- content = frame:preprocess('TEST')
-- },
{
title = 'Requirements',
content = makeContent(frame, resolved, {'requirement'}, makeCat)
}
}
local barsBottom = {
{title = 'End condition', content = args['end'] or ''},
{title = 'On critical hit', content = args['crithit'] or ''},
{title = 'On hit', content = args['hit'] or ''},
{title = 'On miss', content = args['miss'] or ''},
{title = 'On critically miss', content = args['critmiss'] or ''},
{title = 'On critical fail', content = args['critfail'] or ''},
{title = 'On fail', content = args['fail'] or ''},
{title = 'On success', content = args['success'] or ''},
{title = 'On critical success', content = args['critsuccess'] or ''}, {
title = 'Heightened',
content = frame:preprocess(heightenedContent),
link = ':Category:Heightened abilities'
}, {
title = 'If proficient',
content = proficiencyContent,
link = 'Core:Proficiency Bonus'
},
{
title = 'If fluent',
content = fluencyContent,
link = 'Core:Fluency Bonus'
}, {
title = 'Attribute improvement',
content = frame:preprocess(statValContent),
link = 'Core:Attributes',
flags = {
attribute = args['vstat'] and
frame:preprocess('{{lc:' .. args['vstat'] .. '}}') or "",
value = args['val']
}
}, {
title = 'Feat save improvement',
content = frame:preprocess(statFeatContent),
link = 'Core:Feat Interaction',
flags = {
attribute = args['fstat'] and
frame:preprocess('{{lc:' .. args['fstat'] .. '}}'),
value = f
}
}
}
local outputTop = ''
for _, bar in ipairs(barsTop) do
outputTop = outputTop ..
makeBar(frame, bar['title'], bar['content'],
bar['link'], bar['flags'], false)
end
local outputBottom = ''
for _, bar in ipairs(barsBottom) do
outputBottom = outputBottom ..
makeBar(frame, bar['title'], bar['content'],
bar['link'], bar['flags'], true)
end
local outputMiddle = ''
if args['e'] then outputMiddle = frame:preprocess(args['e']) end
local output = mw.html.create('span')
output:addClass('ability-variables')
if args['basic'] then output:addClass('ability-basic') end
output:wikitext(outputTop)
if outputMiddle ~= '' then
output:wikitext('<hr>'):wikitext(
'<span class="ability-overview-base">' .. outputMiddle .. '</span>')
end
if outputBottom ~= '' then output:wikitext('<hr>'):wikitext(outputBottom) end
output = tostring(output) .. c
output = output ..
frame:preprocess(
'<templatestyles src="Template:Ability/styles.css" />')
if not name then
output = output ..
'<span style="color: red;>NO NAME PROVIDED VERY BAD EVERY ABILITY NEEDS A NAME OKAY</span>'
end
return output
end
return p