@blakearoberts/ldragon
v0.1.6
Published
Lexer/parser for League of Legends spell templates
Downloads
5
Maintainers
Readme
LDragon
LDragon uses Chevrotain to define a lexer/parser capable of compiling a League of Legends champion spell description template into an abstract syntax tree (AST).
LDragon can run in the browser, checkout the live demo!
Installation
npm
npm install @blakearoberts/ldragon --save
Getting Started
import { ChampionBin, FontConfig, visit } from '@blakearoberts/ldragon';
const f = async <T,>(url: string) => {
const response = await fetch(url, options)
if (!response.ok) {
throw new Error(response.statusText);
}
return (await response.json()) as T;
}
const bin = await f<ChampionBin>(
'https://raw.communitydragon.org/latest/game/data/characters/aatrox/aatrox.bin.json');
const fontConfig = await f<FontConfig>(
'https://raw.communitydragon.org/latest/game/data/menu/main_en_us.stringtable.json');
const championId = 'Aatrox',
spellKey = 'Characters/Aatrox/Spells/AatroxPassiveAbility/AatroxPassive',
tooltip = fontConfig.entries['passive_aatroxpassive_tooltip'];
const ast = visit(championId, spellKey, bin, fontConfig, tooltip);
console.log(ast);
React Example
Checkout the example React app for a simple way to render an LDragon AST to the DOM. This example is built into a static site and hosted via this project's GitHub Pages.
AST Nodes
The AST returned from parsing a spell is comprised of nodes with relationships demonstrated by the following directed acyclic graph:
graph LR;
D[DescriptionNode]
TX[TextNode]
B[BreakNode]
EL[ElementNode]
EX[ExpressionNode]
TP[TemplateNode]
DV[DataValueIdentifier]
GC[GameCalculationIdentifier]
GM[GameCalculationModifiedIdentifier]
EF[EffectIdentifier]
C[ConstantValue]
A[AbilityLevelValue]
CL[CharLevelValue]
CB[CharLevelBreakpointsValue]
subgraph Nodes
D --> TX & B & EL & EX & TP
EL --> TX & EX & TP
end
subgraph Identifiers
EX --> DV & GC & GM & EF
GC --> DV & EF
GM --> GC
end
subgraph Values
DV --> C & A
EF --> C & A
GC -- part --> C & A & CL & CB
GM -- multiplier --> C
end
Contributing
Contributions are welcome! There are plenty of edge cases this library fails to parse. Issues and pull requests would be greatly appreciated!
To build and compile the TypeScript sources to JavaScript use:
npm run build
To run the unit tests use:
npm test
License
This project is licensed under the terms of the MIT license.