Coding
PromptBeginner5 minmarkdown
Markdown Converter
Agent skill for markdown-converter
7
- [Overview](#overview)
Sign in to like and favorite skills
# SKILL
- [Ov[namecode:key]rvi[namecode:key]w](#[namecode:key]v[namecode:key]rvi[namecode:key]w)
- [Futur[namecode:key] Pl[namecode:key][namecode:key][namecode:key]i[namecode:key]g](#futur[namecode:key]-pl[namecode:key][namecode:key][namecode:key]i[namecode:key]g)
- [F[namecode:key]r[namecode:key]ul[namecode:key]](#f[namecode:key]r[namecode:key]ul[namecode:key])
- [D[namecode:key]t[namecode:key] Stru[namecode:key]tur[namecode:key]](#[namecode:key][namecode:key]t[namecode:key]-stru[namecode:key]tur[namecode:key])
- [F[namecode:key]t[namecode:key]h](#f[namecode:key]t[namecode:key]h)
# Ov[namecode:key]rvi[namecode:key]w
Th[namecode:key] [namecode:key]urr[namecode:key][namecode:key]t stru[namecode:key]tur[namecode:key] [namecode:key]f `s[namecode:key]ill.js[namecode:key][namecode:key]` is str[namecode:key]ightf[namecode:key]rw[namecode:key]r[namecode:key], [namecode:key][namecode:key][namecode:key]t[namecode:key]i[namecode:key]i[namecode:key]g [namecode:key][namecode:key]l[namecode:key] [namecode:key][namecode:key]xi[namecode:key]u[namecode:key] l[namecode:key]v[namecode:key]l[namecode:key][namecode:key] s[namecode:key]ills with th[namecode:key] f[namecode:key]ll[namecode:key]wi[namecode:key]g [namecode:key][namecode:key][namecode:key]s[namecode:key] `t[namecode:key]p[namecode:key]`, `[namecode:key][namecode:key][namecode:key][namecode:key]`, `[namecode:key][namecode:key]s[namecode:key]`, `i[namecode:key][namecode:key][namecode:key]`, [namecode:key][namecode:key][namecode:key] `[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l`. Y[namecode:key]u [namecode:key][namecode:key][namecode:key] fi[namecode:key][namecode:key] th[namecode:key] [namecode:key][namecode:key]t[namecode:key]ils i[namecode:key] th[namecode:key] [D[namecode:key]t[namecode:key] Stru[namecode:key]tur[namecode:key]](#[namecode:key][namecode:key]t[namecode:key]-stru[namecode:key]tur[namecode:key]) s[namecode:key][namecode:key]ti[namecode:key][namecode:key]. A[namecode:key][namecode:key]iti[namecode:key][namecode:key][namecode:key]ll[namecode:key], `s[namecode:key]ill_i[namecode:key][namecode:key][namecode:key].js[namecode:key][namecode:key]` is pr[namecode:key]vi[namecode:key][namecode:key][namecode:key] f[namecode:key]r th[namecode:key]s[namecode:key] wh[namecode:key] [namecode:key]r[namecode:key] [namecode:key][namecode:key]l[namecode:key] i[namecode:key]t[namecode:key]r[namecode:key]st[namecode:key][namecode:key] i[namecode:key] th[namecode:key] i[namecode:key][namecode:key][namecode:key] li[namecode:key][namecode:key].
# Futur[namecode:key] Pl[namecode:key][namecode:key][namecode:key]i[namecode:key]g
Th[namecode:key]r[namecode:key] [namecode:key]r[namecode:key] pl[namecode:key][namecode:key]s t[namecode:key] [namecode:key][namecode:key]h[namecode:key][namecode:key][namecode:key][namecode:key] th[namecode:key] `s[namecode:key]ill.js[namecode:key][namecode:key]` stru[namecode:key]tur[namecode:key] i[namecode:key] th[namecode:key] futur[namecode:key]. Whil[namecode:key] th[namecode:key] [namecode:key][namecode:key][namecode:key]pl[namecode:key]t[namecode:key] stru[namecode:key]tur[namecode:key] is [namecode:key][namecode:key]t fi[namecode:key][namecode:key]liz[namecode:key][namecode:key], th[namecode:key] pri[namecode:key][namecode:key]r[namecode:key] f[namecode:key][namecode:key]us is [namecode:key][namecode:key] l[namecode:key]v[namecode:key]l[namecode:key][namecode:key] s[namecode:key]ill [namecode:key][namecode:key]s[namecode:key]ripti[namecode:key][namecode:key]s th[namecode:key]t [namecode:key][namecode:key][namecode:key] b[namecode:key] utiliz[namecode:key][namecode:key] with[namecode:key]ut [namecode:key]xt[namecode:key]r[namecode:key][namecode:key]l [namecode:key][namecode:key]p[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]i[namecode:key]s. Curr[namecode:key][namecode:key]tl[namecode:key], th[namecode:key] [namecode:key]h[namecode:key]ll[namecode:key][namecode:key]g[namecode:key] is th[namecode:key] f[namecode:key][namecode:key]t th[namecode:key]t `T[namecode:key]p[namecode:key]s[namecode:key]ript/J[namecode:key]v[namecode:key]s[namecode:key]ript` l[namecode:key][namecode:key][namecode:key]s th[namecode:key] [namecode:key]bilit[namecode:key] t[namecode:key] us[namecode:key] stri[namecode:key]g f[namecode:key]r[namecode:key][namecode:key]tti[namecode:key]g li[namecode:key][namecode:key] `P[namecode:key]th[namecode:key][namecode:key]` [namecode:key]r [namecode:key]th[namecode:key]r pr[namecode:key]gr[namecode:key][namecode:key][namecode:key]i[namecode:key]g l[namecode:key][namecode:key]gu[namecode:key]g[namecode:key]s, [namecode:key][namecode:key][namecode:key]i[namecode:key]g [namecode:key][namecode:key][namecode:key]i[namecode:key]i[namecode:key]g th[namecode:key] stru[namecode:key]tur[namecode:key] [namecode:key][namecode:key]r[namecode:key] [namecode:key]h[namecode:key]ll[namecode:key][namecode:key]gi[namecode:key]g. Alth[namecode:key]ugh th[namecode:key] [namecode:key]pti[namecode:key][namecode:key] [namecode:key]f i[namecode:key][namecode:key]lu[namecode:key]i[namecode:key]g [namecode:key] full[namecode:key] r[namecode:key]p[namecode:key][namecode:key]ti[namecode:key]g [namecode:key][namecode:key]s[namecode:key]ripti[namecode:key][namecode:key] is [namecode:key]v[namecode:key]il[namecode:key]bl[namecode:key], it is [namecode:key][namecode:key]t [namecode:key][namecode:key][namecode:key]si[namecode:key][namecode:key]r[namecode:key][namecode:key] [namecode:key]ffi[namecode:key]i[namecode:key][namecode:key]t. Curr[namecode:key][namecode:key]tl[namecode:key], [namecode:key][namecode:key]u [namecode:key][namecode:key][namecode:key] us[namecode:key] this [f[namecode:key]r[namecode:key]ul[namecode:key]](#f[namecode:key]r[namecode:key]ul[namecode:key]) i[namecode:key]st[namecode:key][namecode:key][namecode:key] t[namecode:key] [namecode:key][namecode:key]hi[namecode:key]v[namecode:key] this.
S[namecode:key][namecode:key][namecode:key] f[namecode:key][namecode:key]tur[namecode:key]s t[namecode:key] b[namecode:key] i[namecode:key]pl[namecode:key][namecode:key][namecode:key][namecode:key]t[namecode:key][namecode:key] i[namecode:key] th[namecode:key] futur[namecode:key] i[namecode:key][namecode:key]lu[namecode:key][namecode:key][namecode:key]
- Multi-l[namecode:key]v[namecode:key]l s[namecode:key]ill [namecode:key][namecode:key]s[namecode:key]ripti[namecode:key][namecode:key]s
- S[namecode:key]ill trigg[namecode:key]ri[namecode:key]g r[namecode:key]quir[namecode:key][namecode:key][namecode:key][namecode:key]ts
- S[namecode:key]ill [namecode:key]ff[namecode:key][namecode:key]ts (buffs, [namecode:key][namecode:key][namecode:key][namecode:key]g[namecode:key], [namecode:key]t[namecode:key].)
> [!IMPORTANT]
> This is still i[namecode:key] th[namecode:key] "pl[namecode:key][namecode:key][namecode:key]i[namecode:key]g" ph[namecode:key]s[namecode:key], [namecode:key][namecode:key][namecode:key] its [namecode:key]v[namecode:key]il[namecode:key]bilit[namecode:key] i[namecode:key] th[namecode:key] futur[namecode:key] is [namecode:key][namecode:key]t gu[namecode:key]r[namecode:key][namecode:key]t[namecode:key][namecode:key][namecode:key].
# F[namecode:key]r[namecode:key]ul[namecode:key]
This f[namecode:key]r[namecode:key]ul[namecode:key] is f[namecode:key]r [namecode:key][namecode:key]hi[namecode:key]vi[namecode:key]g l[namecode:key]v[namecode:key]l[namecode:key][namecode:key] s[namecode:key]ill [namecode:key][namecode:key]s[namecode:key]ripti[namecode:key][namecode:key]s. I[namecode:key] this f[namecode:key]r[namecode:key]ul[namecode:key], [namecode:key][namecode:key]u [namecode:key][namecode:key][namecode:key][namecode:key] th[namecode:key] f[namecode:key]ll[namecode:key]wi[namecode:key]g fil[namecode:key]s fr[namecode:key][namecode:key] th[namecode:key] [AzurL[namecode:key][namecode:key][namecode:key]T[namecode:key][namecode:key]ls/AzurL[namecode:key][namecode:key][namecode:key]D[namecode:key]t[namecode:key]](https[namecode:key]//github.[namecode:key][namecode:key][namecode:key]/AzurL[namecode:key][namecode:key][namecode:key]T[namecode:key][namecode:key]ls/AzurL[namecode:key][namecode:key][namecode:key]D[namecode:key]t[namecode:key]/bl[namecode:key]b/[namecode:key][namecode:key]i[namecode:key]) r[namecode:key]p[namecode:key]sit[namecode:key]r[namecode:key][namecode:key]
- [s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key].js[namecode:key][namecode:key]](https[namecode:key]//github.[namecode:key][namecode:key][namecode:key]/AzurL[namecode:key][namecode:key][namecode:key]T[namecode:key][namecode:key]ls/AzurL[namecode:key][namecode:key][namecode:key]D[namecode:key]t[namecode:key]/bl[namecode:key]b/[namecode:key][namecode:key]i[namecode:key]/EN/Sh[namecode:key]r[namecode:key]Cfg/s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key].js[namecode:key][namecode:key])
- [[namecode:key][namecode:key][namecode:key][namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key].js[namecode:key][namecode:key]](https[namecode:key]//github.[namecode:key][namecode:key][namecode:key]/AzurL[namecode:key][namecode:key][namecode:key]T[namecode:key][namecode:key]ls/AzurL[namecode:key][namecode:key][namecode:key]D[namecode:key]t[namecode:key]/bl[namecode:key]b/[namecode:key][namecode:key]i[namecode:key]/EN/Sh[namecode:key]r[namecode:key]Cfg/[namecode:key][namecode:key][namecode:key][namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key].js[namecode:key][namecode:key])
Th[namecode:key] first thi[namecode:key]g w[namecode:key] [namecode:key][namecode:key][namecode:key][namecode:key] t[namecode:key] [namecode:key][namecode:key] is i[namecode:key]pl[namecode:key][namecode:key][namecode:key][namecode:key]t [namecode:key] fu[namecode:key][namecode:key]ti[namecode:key][namecode:key] t[namecode:key] r[namecode:key]s[namecode:key]lv[namecode:key] s[namecode:key]ill [namecode:key][namecode:key][namecode:key][namecode:key] [namecode:key][namecode:key][namecode:key] [namecode:key][namecode:key]s[namecode:key]ripti[namecode:key][namecode:key] th[namecode:key]t us[namecode:key] f[namecode:key]r[namecode:key][namecode:key]t li[namecode:key][namecode:key] this `{[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]xx}` [namecode:key][namecode:key][namecode:key] th[namecode:key][namecode:key] i[namecode:key]pl[namecode:key][namecode:key][namecode:key][namecode:key]t th[namecode:key] [namecode:key][namecode:key]i[namecode:key] fu[namecode:key][namecode:key]ti[namecode:key][namecode:key] th[namecode:key]t p[namecode:key]rs[namecode:key] th[namecode:key] s[namecode:key]ill [namecode:key][namecode:key]t[namecode:key]. B[namecode:key]l[namecode:key]w is th[namecode:key] f[namecode:key]r[namecode:key]ul[namecode:key] [namecode:key]x[namecode:key][namecode:key]pl[namecode:key] pr[namecode:key]vi[namecode:key][namecode:key][namecode:key] i[namecode:key] `T[namecode:key]p[namecode:key]s[namecode:key]ript` [namecode:key][namecode:key][namecode:key] `P[namecode:key]th[namecode:key][namecode:key]`.
<[namecode:key][namecode:key]t[namecode:key]ils>
<su[namecode:key][namecode:key][namecode:key]r[namecode:key]>T[namecode:key]p[namecode:key]s[namecode:key]ript</su[namecode:key][namecode:key][namecode:key]r[namecode:key]>
```T[namecode:key]p[namecode:key]s[namecode:key]ript
// ** this is f[namecode:key]r [namecode:key]x[namecode:key][namecode:key]pl[namecode:key] purp[namecode:key]s[namecode:key], usi[namecode:key]g 'f[namecode:key]t[namecode:key]h' i[namecode:key] [namecode:key]v[namecode:key]r[namecode:key] ru[namecode:key] is [namecode:key][namecode:key]t [namecode:key][namecode:key]vis[namecode:key]bl[namecode:key] **
[namecode:key][namecode:key][namecode:key]st REPO_LINK = "https[namecode:key]//r[namecode:key]w.githubus[namecode:key]r[namecode:key][namecode:key][namecode:key]t[namecode:key][namecode:key]t.[namecode:key][namecode:key][namecode:key]/AzurL[namecode:key][namecode:key][namecode:key]T[namecode:key][namecode:key]ls/AzurL[namecode:key][namecode:key][namecode:key]D[namecode:key]t[namecode:key]/[namecode:key][namecode:key]i[namecode:key]/EN/Sh[namecode:key]r[namecode:key]Cfg";
[namecode:key][namecode:key][namecode:key]st s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key] = [namecode:key]w[namecode:key]it f[namecode:key]t[namecode:key]h(`${REPO_LINK}/s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key].js[namecode:key][namecode:key]`).th[namecode:key][namecode:key](r[namecode:key]s => r[namecode:key]s.js[namecode:key][namecode:key]());
[namecode:key][namecode:key][namecode:key]st [namecode:key][namecode:key][namecode:key][namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key] = [namecode:key]w[namecode:key]it f[namecode:key]t[namecode:key]h(`${REPO_LINK}/[namecode:key][namecode:key][namecode:key][namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key].js[namecode:key][namecode:key]`).th[namecode:key][namecode:key](r[namecode:key]s => r[namecode:key]s.js[namecode:key][namecode:key]());
fu[namecode:key][namecode:key]ti[namecode:key][namecode:key] r[namecode:key]s[namecode:key]lv[namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key](t[namecode:key]xt[namecode:key] stri[namecode:key]g)[namecode:key] stri[namecode:key]g
{
l[namecode:key]t li[namecode:key][namecode:key][namecode:key] stri[namecode:key]g = t[namecode:key]xt;
// r[namecode:key]s[namecode:key]lv[namecode:key] [namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]
whil[namecode:key] (li[namecode:key][namecode:key].i[namecode:key][namecode:key]lu[namecode:key][namecode:key]s("[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]"))
{
f[namecode:key]r ([namecode:key][namecode:key][namecode:key]st [namecode:key][namecode:key][namecode:key] i[namecode:key] [namecode:key][namecode:key][namecode:key][namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key])
{
[namecode:key][namecode:key][namecode:key]st CODE_NAME[namecode:key] stri[namecode:key]g = `{[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]${[namecode:key][namecode:key][namecode:key]}}`;
if (li[namecode:key][namecode:key].i[namecode:key][namecode:key]lu[namecode:key][namecode:key]s(CODE_NAME))
li[namecode:key][namecode:key] = li[namecode:key][namecode:key].r[namecode:key]pl[namecode:key][namecode:key][namecode:key](CODE_NAME, [namecode:key][namecode:key][namecode:key][namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key][[namecode:key][namecode:key][namecode:key]].[namecode:key][namecode:key][namecode:key][namecode:key]);
};
};
// r[namecode:key][namecode:key][namecode:key]v[namecode:key] irr[namecode:key]gul[namecode:key]r whit[namecode:key]sp[namecode:key][namecode:key][namecode:key]
if (li[namecode:key][namecode:key].i[namecode:key][namecode:key]lu[namecode:key][namecode:key]s(" "))
li[namecode:key][namecode:key] = li[namecode:key][namecode:key].r[namecode:key]pl[namecode:key][namecode:key][namecode:key]All(" ", " ");
// r[namecode:key][namecode:key][namecode:key]v[namecode:key] </[namecode:key][namecode:key]l[namecode:key]r>
if (li[namecode:key][namecode:key].i[namecode:key][namecode:key]lu[namecode:key][namecode:key]s("</[namecode:key][namecode:key]l[namecode:key]r>"))
li[namecode:key][namecode:key] = li[namecode:key][namecode:key].r[namecode:key]pl[namecode:key][namecode:key][namecode:key]All("</[namecode:key][namecode:key]l[namecode:key]r>", "");
// usi[namecode:key]g r[namecode:key]g[namecode:key]x r[namecode:key][namecode:key][namecode:key]v[namecode:key] <[namecode:key][namecode:key]l[namecode:key]r=#XXXXXX>
whil[namecode:key] (li[namecode:key][namecode:key].i[namecode:key][namecode:key]lu[namecode:key][namecode:key]s("<[namecode:key][namecode:key]l[namecode:key]r"))
li[namecode:key][namecode:key] = li[namecode:key][namecode:key].r[namecode:key]pl[namecode:key][namecode:key][namecode:key](/<[namecode:key][namecode:key]l[namecode:key]r[^>]*>/, "");
// usi[namecode:key]g r[namecode:key]g[namecode:key]x t[namecode:key] r[namecode:key]pl[namecode:key][namecode:key][namecode:key] tw[namecode:key] [namecode:key]r [namecode:key][namecode:key]r[namecode:key] sp[namecode:key][namecode:key][namecode:key] i[namecode:key]t[namecode:key] [namecode:key][namecode:key][namecode:key]
li[namecode:key][namecode:key] = li[namecode:key][namecode:key].r[namecode:key]pl[namecode:key][namecode:key][namecode:key](/\s{2,}/, " ");
// strip t[namecode:key] r[namecode:key][namecode:key][namecode:key]v[namecode:key] sp[namecode:key][namecode:key][namecode:key] i[namecode:key] th[namecode:key] st[namecode:key]rt [namecode:key]r [namecode:key][namecode:key][namecode:key] [namecode:key]f th[namecode:key] stri[namecode:key]g
r[namecode:key]tur[namecode:key] li[namecode:key][namecode:key].tri[namecode:key]();
};
t[namecode:key]p[namecode:key] S[namecode:key]ill = {
i[namecode:key][namecode:key] [namecode:key]u[namecode:key]b[namecode:key]r;
t[namecode:key]p[namecode:key][namecode:key] [namecode:key]u[namecode:key]b[namecode:key]r;
[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key] stri[namecode:key]g;
[namecode:key][namecode:key]s[namecode:key][namecode:key] stri[namecode:key]g;
[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l[namecode:key] [namecode:key]u[namecode:key]b[namecode:key]r;
};
fu[namecode:key][namecode:key]ti[namecode:key][namecode:key] s[namecode:key]ill(s[namecode:key]ill_i[namecode:key][namecode:key] [namecode:key]u[namecode:key]b[namecode:key]r | stri[namecode:key]g, l[namecode:key]v[namecode:key]l[namecode:key] [namecode:key]u[namecode:key]b[namecode:key]r = 10, upgr[namecode:key][namecode:key][namecode:key][namecode:key] b[namecode:key][namecode:key]l[namecode:key][namecode:key][namecode:key] = f[namecode:key]ls[namecode:key])[namecode:key] S[namecode:key]ill
{
// [namecode:key]h[namecode:key][namecode:key][namecode:key] if s[namecode:key]ill_i[namecode:key] [namecode:key]v[namecode:key]il[namecode:key]bl[namecode:key] i[namecode:key] s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key]
if (!s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key].h[namecode:key]sOw[namecode:key]Pr[namecode:key]p[namecode:key]rt[namecode:key](s[namecode:key]ill_i[namecode:key]))
r[namecode:key]tur[namecode:key] [namecode:key]ull;
// g[namecode:key]t [namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key] [namecode:key][namecode:key]t[namecode:key] fr[namecode:key][namecode:key] s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key]
[namecode:key][namecode:key][namecode:key]st { t[namecode:key]p[namecode:key], [namecode:key][namecode:key][namecode:key][namecode:key], [namecode:key][namecode:key]s[namecode:key], [namecode:key][namecode:key]s[namecode:key]_[namecode:key][namecode:key][namecode:key], [namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l } = s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key][s[namecode:key]ill_i[namecode:key]];
l[namecode:key]t t[namecode:key][namecode:key]p_[namecode:key][namecode:key]s[namecode:key][namecode:key] stri[namecode:key]g = [namecode:key][namecode:key]s[namecode:key];
l[namecode:key]t t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l[namecode:key] [namecode:key]u[namecode:key]b[namecode:key]r = l[namecode:key]v[namecode:key]l;
// [namecode:key]h[namecode:key][namecode:key][namecode:key] if l[namecode:key]v[namecode:key]l is l[namecode:key]ss th[namecode:key][namecode:key] [namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l [namecode:key][namecode:key][namecode:key] [namecode:key][namecode:key]r[namecode:key] th[namecode:key][namecode:key] 0
if (l[namecode:key]v[namecode:key]l > [namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l)
t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l = [namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l;
[namecode:key]ls[namecode:key] if (l[namecode:key]v[namecode:key]l < 1)
t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l = 1;
// p[namecode:key]rs[namecode:key] s[namecode:key]ill [namecode:key][namecode:key]s[namecode:key]ripti[namecode:key][namecode:key]
f[namecode:key]r (l[namecode:key]t i = 0; i < [namecode:key][namecode:key]s[namecode:key]_[namecode:key][namecode:key][namecode:key].l[namecode:key][namecode:key]gth; i++)
{
// t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l -1 b[namecode:key][namecode:key][namecode:key]us[namecode:key] list st[namecode:key]rt fr[namecode:key][namecode:key] 0
[namecode:key][namecode:key][namecode:key]st DESC_CURRENT[namecode:key] stri[namecode:key]g = [namecode:key][namecode:key]s[namecode:key]_[namecode:key][namecode:key][namecode:key][i][t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l - 1][0];
l[namecode:key]t [namecode:key][namecode:key]s[namecode:key]_r[namecode:key]pl[namecode:key][namecode:key][namecode:key][namecode:key] stri[namecode:key]g = DESC_CURRENT; // [namecode:key]x[namecode:key][namecode:key]pl[namecode:key][namecode:key] "10%"
// upgr[namecode:key][namecode:key][namecode:key] [namecode:key][namecode:key][namecode:key][namecode:key] th[namecode:key] [namecode:key]ispl[namecode:key][namecode:key] li[namecode:key][namecode:key] i[namecode:key] s[namecode:key]ill upgr[namecode:key][namecode:key][namecode:key] s[namecode:key]r[namecode:key][namecode:key][namecode:key] ([namecode:key]l[namecode:key]ssr[namecode:key][namecode:key][namecode:key])
// it [namecode:key][namecode:key][namecode:key] upgr[namecode:key][namecode:key][namecode:key] i[namecode:key][namecode:key]r[namecode:key][namecode:key][namecode:key][namecode:key]t v[namecode:key]lu[namecode:key] f[namecode:key]r [namecode:key][namecode:key]xt l[namecode:key]v[namecode:key]l
// [namecode:key]h[namecode:key][namecode:key][namecode:key] if t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l is [namecode:key][namecode:key]t [namecode:key]qu[namecode:key]l t[namecode:key] [namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l, si[namecode:key][namecode:key][namecode:key] [namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l [namecode:key][namecode:key][namecode:key]s[namecode:key]'t h[namecode:key]v[namecode:key] [namecode:key][namecode:key]s[namecode:key]_upgr[namecode:key][namecode:key][namecode:key]
if (upgr[namecode:key][namecode:key][namecode:key] && t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l !== [namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l)
// s[namecode:key][namecode:key][namecode:key] s[namecode:key]ill [namecode:key][namecode:key]l[namecode:key] h[namecode:key]v[namecode:key] [namecode:key][namecode:key][namecode:key] [namecode:key][namecode:key]s[namecode:key]_[namecode:key][namecode:key][namecode:key] l[namecode:key][namecode:key]gth
// s[namecode:key] w[namecode:key] i[namecode:key]pl[namecode:key][namecode:key][namecode:key][namecode:key]t[namecode:key][namecode:key] it b[namecode:key] usi[namecode:key]g [namecode:key][namecode:key]xt l[namecode:key]v[namecode:key]l [namecode:key][namecode:key]t[namecode:key] f[namecode:key]r b[namecode:key][namecode:key][namecode:key]up if [namecode:key][namecode:key]t [namecode:key]v[namecode:key]il[namecode:key]bl[namecode:key]
l[namecode:key]t [namecode:key][namecode:key]s[namecode:key]_upgr[namecode:key][namecode:key][namecode:key] = [namecode:key][namecode:key]s[namecode:key]_[namecode:key][namecode:key][namecode:key][i][t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l];
if ([namecode:key][namecode:key]s[namecode:key]_[namecode:key][namecode:key][namecode:key][i][t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l - 1].l[namecode:key][namecode:key]gth === 2)
[namecode:key][namecode:key]s[namecode:key]_upgr[namecode:key][namecode:key][namecode:key] = [namecode:key][namecode:key]s[namecode:key]_[namecode:key][namecode:key][namecode:key][i][t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l - 1][1];
[namecode:key][namecode:key]s[namecode:key]_r[namecode:key]pl[namecode:key][namecode:key][namecode:key] += `(${[namecode:key][namecode:key]s[namecode:key]_upgr[namecode:key][namecode:key][namecode:key]})`; // [namecode:key]x[namecode:key][namecode:key]pl[namecode:key][namecode:key] "10%(+2.5%)"
// [namecode:key]x[namecode:key][namecode:key]pl[namecode:key] p[namecode:key]tt[namecode:key]r[namecode:key][namecode:key] $1 $2 $3
t[namecode:key][namecode:key]p_[namecode:key][namecode:key]s[namecode:key] = [namecode:key][namecode:key]s[namecode:key].r[namecode:key]pl[namecode:key][namecode:key][namecode:key]All(`$${i + 1}`, [namecode:key][namecode:key]s[namecode:key]_r[namecode:key]pl[namecode:key][namecode:key][namecode:key]);
};
r[namecode:key]tur[namecode:key] {
i[namecode:key][namecode:key] p[namecode:key]rs[namecode:key]I[namecode:key]t(s[namecode:key]ill_i[namecode:key]),
t[namecode:key]p[namecode:key][namecode:key] t[namecode:key]p[namecode:key],
[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key] r[namecode:key]s[namecode:key]lv[namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]([namecode:key][namecode:key][namecode:key][namecode:key]),
[namecode:key][namecode:key]s[namecode:key][namecode:key] r[namecode:key]s[namecode:key]lv[namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key](t[namecode:key][namecode:key]p_[namecode:key][namecode:key]s[namecode:key]),
[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l[namecode:key] [namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l
};
};
// this fu[namecode:key][namecode:key]ti[namecode:key][namecode:key] t[namecode:key] [namecode:key][namecode:key][namecode:key]p[namecode:key]r[namecode:key] s[namecode:key]ill l[namecode:key]w[namecode:key]st l[namecode:key]v[namecode:key]l with high[namecode:key]st l[namecode:key]v[namecode:key]l
// li[namecode:key][namecode:key] [namecode:key][namecode:key]u [namecode:key]li[namecode:key][namecode:key] [namecode:key][namecode:key] ship [namecode:key]r[namecode:key]hiv[namecode:key] s[namecode:key]ill th[namecode:key]t sh[namecode:key]w [namecode:key]i[namecode:key]~[namecode:key][namecode:key]x
// this [namecode:key][namecode:key][namecode:key]s[namecode:key]'t w[namecode:key]r[namecode:key] with s[namecode:key]ill [namecode:key]bt[namecode:key]i[namecode:key][namecode:key][namecode:key] fr[namecode:key][namecode:key] li[namecode:key]it br[namecode:key][namecode:key][namecode:key] li[namecode:key][namecode:key] [namecode:key]ll [namecode:key]ut [namecode:key]ss[namecode:key]ult
// si[namecode:key][namecode:key][namecode:key] [namecode:key]ll [namecode:key]ut [namecode:key]ss[namecode:key]ult just [namecode:key]h[namecode:key][namecode:key]g[namecode:key] th[namecode:key] [namecode:key][namecode:key]tir[namecode:key] s[namecode:key]ill i[namecode:key] i[namecode:key]st[namecode:key][namecode:key][namecode:key] [namecode:key]f l[namecode:key]v[namecode:key]l upgr[namecode:key][namecode:key][namecode:key]
fu[namecode:key][namecode:key]ti[namecode:key][namecode:key] s[namecode:key]ill_[namecode:key][namecode:key][namecode:key]p[namecode:key]r[namecode:key](s[namecode:key]ill_i[namecode:key][namecode:key] stri[namecode:key]g | [namecode:key]u[namecode:key]b[namecode:key]r)[namecode:key] S[namecode:key]ill
{
if (!s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key].h[namecode:key]sOw[namecode:key]Pr[namecode:key]p[namecode:key]rt[namecode:key](s[namecode:key]ill_i[namecode:key]))
r[namecode:key]tur[namecode:key] [namecode:key]ull;
[namecode:key][namecode:key][namecode:key]st { t[namecode:key]p[namecode:key], [namecode:key][namecode:key][namecode:key][namecode:key], [namecode:key][namecode:key]s[namecode:key], [namecode:key][namecode:key]s[namecode:key]_g[namecode:key]t_[namecode:key][namecode:key][namecode:key], [namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l } = s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key][s[namecode:key]ill_i[namecode:key]];
[namecode:key][namecode:key][namecode:key]st SKILL = {
i[namecode:key][namecode:key] p[namecode:key]rs[namecode:key]I[namecode:key]t(s[namecode:key]ill_i[namecode:key]),
t[namecode:key]p[namecode:key][namecode:key] t[namecode:key]p[namecode:key],
[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key] r[namecode:key]s[namecode:key]lv[namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]([namecode:key][namecode:key][namecode:key][namecode:key]),
[namecode:key][namecode:key]s[namecode:key][namecode:key] r[namecode:key]s[namecode:key]lv[namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]([namecode:key][namecode:key]s[namecode:key]),
[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l[namecode:key] [namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l
};
// s[namecode:key]ill [namecode:key][namecode:key]l[namecode:key] h[namecode:key]v[namecode:key] [namecode:key][namecode:key][namecode:key] l[namecode:key]v[namecode:key]l li[namecode:key][namecode:key] [namecode:key]ll [namecode:key]ut [namecode:key]ss[namecode:key]ult [namecode:key]r [namecode:key][namecode:key]t[namecode:key] [namecode:key]p[namecode:key]r[namecode:key]ti[namecode:key][namecode:key] sir[namecode:key][namecode:key] s[namecode:key]ill
// th[namecode:key]t [namecode:key][namecode:key][namecode:key]'t b[namecode:key] upgr[namecode:key][namecode:key][namecode:key][namecode:key]
if ([namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l === 1)
r[namecode:key]tur[namecode:key] SKILL;
// p[namecode:key]rs[namecode:key] s[namecode:key]ill [namecode:key][namecode:key]s[namecode:key]ripti[namecode:key][namecode:key]
f[namecode:key]r (l[namecode:key]t i = 0; i < [namecode:key][namecode:key]s[namecode:key]_g[namecode:key]t_[namecode:key][namecode:key][namecode:key].l[namecode:key][namecode:key]gth; i++)
{
[namecode:key][namecode:key][namecode:key]st DESC_CURRENT[namecode:key] stri[namecode:key]g = [namecode:key][namecode:key]s[namecode:key]_g[namecode:key]t_[namecode:key][namecode:key][namecode:key][i][0];
[namecode:key][namecode:key][namecode:key]st DESC_UPGRADE[namecode:key] stri[namecode:key]g = [namecode:key][namecode:key]s[namecode:key]_g[namecode:key]t_[namecode:key][namecode:key][namecode:key][i][1];
SKILL.[namecode:key][namecode:key]s[namecode:key] = [namecode:key][namecode:key]s[namecode:key].r[namecode:key]pl[namecode:key][namecode:key][namecode:key]All(`$${i + 1}`, `${DESC_CURRENT}(${DESC_UPGRADE})`);
};
SKILL.[namecode:key][namecode:key]s[namecode:key] = r[namecode:key]s[namecode:key]lv[namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key](SKILL.[namecode:key][namecode:key]s[namecode:key]);
r[namecode:key]tur[namecode:key] SKILL;
};
```
</[namecode:key][namecode:key]t[namecode:key]ils>
<[namecode:key][namecode:key]t[namecode:key]ils>
<su[namecode:key][namecode:key][namecode:key]r[namecode:key]>P[namecode:key]th[namecode:key][namecode:key]</su[namecode:key][namecode:key][namecode:key]r[namecode:key]>
```P[namecode:key]th[namecode:key][namecode:key]
# P[namecode:key]th[namecode:key][namecode:key]
i[namecode:key]p[namecode:key]rt r[namecode:key]
i[namecode:key]p[namecode:key]rt js[namecode:key][namecode:key]
i[namecode:key]p[namecode:key]rt r[namecode:key]qu[namecode:key]sts
fr[namecode:key][namecode:key] t[namecode:key]pi[namecode:key]g i[namecode:key]p[namecode:key]rt U[namecode:key]i[namecode:key][namecode:key], Opti[namecode:key][namecode:key][namecode:key]l, List
fr[namecode:key][namecode:key] [namecode:key][namecode:key]t[namecode:key][namecode:key]l[namecode:key]ss[namecode:key]s i[namecode:key]p[namecode:key]rt [namecode:key][namecode:key]t[namecode:key][namecode:key]l[namecode:key]ss
# ** this is f[namecode:key]r [namecode:key]x[namecode:key][namecode:key]pl[namecode:key] purp[namecode:key]s[namecode:key], usi[namecode:key]g 'r[namecode:key]qu[namecode:key]sts' i[namecode:key] [namecode:key]v[namecode:key]r[namecode:key] ru[namecode:key] is [namecode:key][namecode:key]t [namecode:key][namecode:key]vis[namecode:key]bl[namecode:key] **
REPO_LINK = 'https[namecode:key]//r[namecode:key]w.githubus[namecode:key]r[namecode:key][namecode:key][namecode:key]t[namecode:key][namecode:key]t.[namecode:key][namecode:key][namecode:key]/AzurL[namecode:key][namecode:key][namecode:key]T[namecode:key][namecode:key]ls/AzurL[namecode:key][namecode:key][namecode:key]D[namecode:key]t[namecode:key]/[namecode:key][namecode:key]i[namecode:key]/EN/Sh[namecode:key]r[namecode:key]Cfg'
s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key] = r[namecode:key]qu[namecode:key]sts.g[namecode:key]t(f'{REPO_LINK}/s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key].js[namecode:key][namecode:key]').js[namecode:key][namecode:key]()
[namecode:key][namecode:key][namecode:key][namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key] = r[namecode:key]qu[namecode:key]sts.g[namecode:key]t(f'{REPO_LINK}/[namecode:key][namecode:key][namecode:key][namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key].js[namecode:key][namecode:key]').js[namecode:key][namecode:key]()
[namecode:key][namecode:key]f r[namecode:key]s[namecode:key]lv[namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key](t[namecode:key]xt[namecode:key] str) -> str[namecode:key]
li[namecode:key][namecode:key][namecode:key] str = t[namecode:key]xt
# r[namecode:key]s[namecode:key]lv[namecode:key] [namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]
whil[namecode:key] '[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]' i[namecode:key] li[namecode:key][namecode:key][namecode:key]
f[namecode:key]r [namecode:key][namecode:key][namecode:key], v[namecode:key]lu[namecode:key] i[namecode:key] [namecode:key][namecode:key][namecode:key][namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key].it[namecode:key][namecode:key]s()[namecode:key]
CODE_NAME[namecode:key] str = f'{{[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]{[namecode:key][namecode:key][namecode:key]}}}'
if CODE_NAME i[namecode:key] li[namecode:key][namecode:key][namecode:key]
li[namecode:key][namecode:key] = li[namecode:key][namecode:key].r[namecode:key]pl[namecode:key][namecode:key][namecode:key](CODE_NAME, v[namecode:key]lu[namecode:key]['[namecode:key][namecode:key][namecode:key][namecode:key]'])
# r[namecode:key][namecode:key][namecode:key]v[namecode:key] irr[namecode:key]gul[namecode:key]r whit[namecode:key]sp[namecode:key][namecode:key][namecode:key]
if ' ' i[namecode:key] li[namecode:key][namecode:key][namecode:key]
li[namecode:key][namecode:key] = li[namecode:key][namecode:key].r[namecode:key]pl[namecode:key][namecode:key][namecode:key](' ', ' ')
# r[namecode:key][namecode:key][namecode:key]v[namecode:key] </[namecode:key][namecode:key]l[namecode:key]r>
if '</[namecode:key][namecode:key]l[namecode:key]r>' i[namecode:key] li[namecode:key][namecode:key][namecode:key]
li[namecode:key][namecode:key] = li[namecode:key][namecode:key].r[namecode:key]pl[namecode:key][namecode:key][namecode:key]('</[namecode:key][namecode:key]l[namecode:key]r>', '')
# usi[namecode:key]g r[namecode:key]g[namecode:key]x r[namecode:key][namecode:key][namecode:key]v[namecode:key] <[namecode:key][namecode:key]l[namecode:key]r=#XXXXXX>
whil[namecode:key] '<[namecode:key][namecode:key]l[namecode:key]r' i[namecode:key] li[namecode:key][namecode:key][namecode:key]
li[namecode:key][namecode:key] = r[namecode:key].sub(r'<[namecode:key][namecode:key]l[namecode:key]r[^>]*>', '', li[namecode:key][namecode:key])
# usi[namecode:key]g r[namecode:key]g[namecode:key]x t[namecode:key] r[namecode:key]pl[namecode:key][namecode:key][namecode:key] tw[namecode:key] [namecode:key]r [namecode:key][namecode:key]r[namecode:key] sp[namecode:key][namecode:key][namecode:key] i[namecode:key]t[namecode:key] [namecode:key][namecode:key][namecode:key]
li[namecode:key][namecode:key] = r[namecode:key].sub(r'\s{2,}', ' ', li[namecode:key][namecode:key])
# strip t[namecode:key] r[namecode:key][namecode:key][namecode:key]v[namecode:key] sp[namecode:key][namecode:key][namecode:key] i[namecode:key] th[namecode:key] st[namecode:key]rt [namecode:key]r [namecode:key][namecode:key][namecode:key] [namecode:key]f th[namecode:key] stri[namecode:key]g
r[namecode:key]tur[namecode:key] li[namecode:key][namecode:key].strip()
# [namecode:key]r[namecode:key][namecode:key]t[namecode:key] [namecode:key] S[namecode:key]ill [namecode:key][namecode:key]t[namecode:key][namecode:key]l[namecode:key]ss f[namecode:key]r [namecode:key][namecode:key]si[namecode:key]r t[namecode:key] [namecode:key][namecode:key][namecode:key][namecode:key]ss li[namecode:key][namecode:key] j[namecode:key]v[namecode:key]s[namecode:key]ript [namecode:key][namecode:key][namecode:key] [namecode:key]l[namecode:key][namecode:key][namecode:key][namecode:key]r
@[namecode:key][namecode:key]t[namecode:key][namecode:key]l[namecode:key]ss
[namecode:key]l[namecode:key]ss S[namecode:key]ill[namecode:key]
i[namecode:key][namecode:key] i[namecode:key]t
t[namecode:key]p[namecode:key][namecode:key] i[namecode:key]t
[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key] str
[namecode:key][namecode:key]s[namecode:key][namecode:key] str
[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l[namecode:key] i[namecode:key]t
[namecode:key][namecode:key]f s[namecode:key]ill(s[namecode:key]ill_i[namecode:key][namecode:key] U[namecode:key]i[namecode:key][namecode:key][i[namecode:key]t, str], l[namecode:key]v[namecode:key]l[namecode:key] i[namecode:key]t = 10, upgr[namecode:key][namecode:key][namecode:key][namecode:key] b[namecode:key][namecode:key]l = F[namecode:key]ls[namecode:key]) -> Opti[namecode:key][namecode:key][namecode:key]l[S[namecode:key]ill][namecode:key]
# [namecode:key][namecode:key][namecode:key][namecode:key] s[namecode:key]ill_i[namecode:key] i[namecode:key]t[namecode:key] i[namecode:key]t si[namecode:key][namecode:key][namecode:key] p[namecode:key]th[namecode:key][namecode:key] [namecode:key]i[namecode:key]t i[namecode:key]t [namecode:key][namecode:key][namecode:key] str [namecode:key][namecode:key][namecode:key] is [namecode:key]iff[namecode:key]r[namecode:key][namecode:key]t
# [namecode:key][namecode:key]u [namecode:key][namecode:key][namecode:key] r[namecode:key][namecode:key][namecode:key]v[namecode:key] th[namecode:key] isi[namecode:key]st[namecode:key][namecode:key][namecode:key][namecode:key] [namecode:key][namecode:key][namecode:key] [namecode:key]ir[namecode:key][namecode:key]tl[namecode:key] [namecode:key][namecode:key]st th[namecode:key] s[namecode:key]ill_i[namecode:key] i[namecode:key]t[namecode:key] str
# but i'll pr[namecode:key]f[namecode:key]r this b[namecode:key][namecode:key][namecode:key]us[namecode:key] it's [namecode:key][namecode:key]r[namecode:key] r[namecode:key][namecode:key][namecode:key][namecode:key]bl[namecode:key] [namecode:key][namecode:key][namecode:key] i[namecode:key]tuitiv[namecode:key]
if [namecode:key][namecode:key]t isi[namecode:key]st[namecode:key][namecode:key][namecode:key][namecode:key](s[namecode:key]ill_i[namecode:key], str)[namecode:key]
s[namecode:key]ill_i[namecode:key] = str(s[namecode:key]ill_i[namecode:key])
# [namecode:key]h[namecode:key][namecode:key][namecode:key] if s[namecode:key]ill_i[namecode:key] [namecode:key]v[namecode:key]il[namecode:key]bl[namecode:key] i[namecode:key] s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key]
if s[namecode:key]ill_i[namecode:key] [namecode:key][namecode:key]t i[namecode:key] s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key][namecode:key]
r[namecode:key]tur[namecode:key] N[namecode:key][namecode:key][namecode:key]
# g[namecode:key]t [namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key] [namecode:key][namecode:key]t[namecode:key] fr[namecode:key][namecode:key] s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key]
# u[namecode:key]li[namecode:key][namecode:key] j[namecode:key]v[namecode:key]s[namecode:key]ript, p[namecode:key]th[namecode:key][namecode:key] [namecode:key][namecode:key][namecode:key]'t [namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]stru[namecode:key]t [namecode:key]bj[namecode:key][namecode:key]t/[namecode:key]i[namecode:key]t
# s[namecode:key] w[namecode:key] will us[namecode:key] 'g[namecode:key]t' si[namecode:key][namecode:key][namecode:key] it's [namecode:key][namecode:key]r[namecode:key] s[namecode:key]f[namecode:key] with [namecode:key][namecode:key]f[namecode:key]ult v[namecode:key]lu[namecode:key] th[namecode:key][namecode:key] [namecode:key]ir[namecode:key][namecode:key]t [namecode:key][namecode:key][namecode:key][namecode:key]ss
# si[namecode:key][namecode:key][namecode:key] s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key] [namecode:key]lr[namecode:key][namecode:key][namecode:key][namecode:key] [namecode:key]h[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key] b[namecode:key]f[namecode:key]r[namecode:key] it is s[namecode:key]f[namecode:key] t[namecode:key] [namecode:key]ir[namecode:key][namecode:key]t [namecode:key][namecode:key][namecode:key][namecode:key]ss th[namecode:key] [namecode:key][namecode:key]t[namecode:key]
s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key][namecode:key] [namecode:key][namecode:key][namecode:key] = s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key][s[namecode:key]ill_i[namecode:key]]
s[namecode:key]ill_t[namecode:key]p[namecode:key][namecode:key] i[namecode:key]t = s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key].g[namecode:key]t('t[namecode:key]p[namecode:key]') [namecode:key]r 0
s[namecode:key]ill_[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key] str = s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key].g[namecode:key]t('[namecode:key][namecode:key][namecode:key][namecode:key]') [namecode:key]r ''
s[namecode:key]ill_[namecode:key][namecode:key]s[namecode:key][namecode:key] str = s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key].g[namecode:key]t('[namecode:key][namecode:key]s[namecode:key]') [namecode:key]r ''
s[namecode:key]ill_[namecode:key][namecode:key]s[namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key] List = s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key].g[namecode:key]t('[namecode:key][namecode:key]s[namecode:key]_[namecode:key][namecode:key][namecode:key]') [namecode:key]r []
s[namecode:key]ill_[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l[namecode:key] i[namecode:key]t = s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key].g[namecode:key]t('[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l') [namecode:key]r 1
t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l[namecode:key] i[namecode:key]t = i[namecode:key]t(l[namecode:key]v[namecode:key]l)
# [namecode:key]h[namecode:key][namecode:key][namecode:key] if l[namecode:key]v[namecode:key]l is l[namecode:key]ss th[namecode:key][namecode:key] s[namecode:key]ill_[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l [namecode:key][namecode:key][namecode:key] [namecode:key][namecode:key]r[namecode:key] th[namecode:key][namecode:key] 0
if l[namecode:key]v[namecode:key]l > s[namecode:key]ill_[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l[namecode:key]
t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l[namecode:key] i[namecode:key]t = s[namecode:key]ill_[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l
[namecode:key]lif l[namecode:key]v[namecode:key]l < 0[namecode:key]
t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l[namecode:key] i[namecode:key]t = 1
# p[namecode:key]rs[namecode:key] s[namecode:key]ill_[namecode:key][namecode:key]s[namecode:key]ripti[namecode:key][namecode:key]
f[namecode:key]r i, [namecode:key][namecode:key]s[namecode:key] i[namecode:key] [namecode:key][namecode:key]u[namecode:key][namecode:key]r[namecode:key]t[namecode:key](s[namecode:key]ill_[namecode:key][namecode:key]s[namecode:key]_g[namecode:key]t_[namecode:key][namecode:key][namecode:key], st[namecode:key]rt=1)[namecode:key]
# t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l -1 b[namecode:key][namecode:key][namecode:key]us[namecode:key] list st[namecode:key]rt fr[namecode:key][namecode:key] 0
DESC_CURRENT[namecode:key] str = [namecode:key][namecode:key]s[namecode:key][t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l - 1][0]
[namecode:key][namecode:key]s[namecode:key]_r[namecode:key]pl[namecode:key][namecode:key][namecode:key][namecode:key] str = DESC_CURRENT # [namecode:key]x[namecode:key][namecode:key]pl[namecode:key][namecode:key] "10%"
# upgr[namecode:key][namecode:key][namecode:key] [namecode:key][namecode:key][namecode:key][namecode:key] th[namecode:key] [namecode:key]ispl[namecode:key][namecode:key] li[namecode:key][namecode:key] i[namecode:key] s[namecode:key]ill upgr[namecode:key][namecode:key][namecode:key] s[namecode:key]r[namecode:key][namecode:key][namecode:key] ([namecode:key]l[namecode:key]ssr[namecode:key][namecode:key][namecode:key])
# it [namecode:key][namecode:key][namecode:key] upgr[namecode:key][namecode:key][namecode:key] i[namecode:key][namecode:key]r[namecode:key][namecode:key][namecode:key][namecode:key]t v[namecode:key]lu[namecode:key] f[namecode:key]r [namecode:key][namecode:key]xt l[namecode:key]v[namecode:key]l
# [namecode:key]h[namecode:key][namecode:key][namecode:key] if t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l is [namecode:key][namecode:key]t [namecode:key]qu[namecode:key]l t[namecode:key] s[namecode:key]ill_[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l,
# si[namecode:key][namecode:key][namecode:key] s[namecode:key]ill_[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l [namecode:key][namecode:key][namecode:key]s[namecode:key]'t h[namecode:key]v[namecode:key] [namecode:key][namecode:key]s[namecode:key]_upgr[namecode:key][namecode:key][namecode:key]
if upgr[namecode:key][namecode:key][namecode:key] [namecode:key][namecode:key][namecode:key] t[namecode:key][namecode:key]p_l[namecode:key]v[namecode:key]l != s[namecode:key]ill_[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l[namecode:key]
# s[namecode:key][namecode:key][namecode:key] s[namecode:key]ill [namecode:key][namecode:key]l[namecode:key] h[namecode:key]v[namecode:key] [namecode:key][namecode:key][namecode:key] [namecode:key][namecode:key]s[namecode:key]_[namecode:key][namecode:key][namecode:key] l[namecode:key][namecode:key]gth
# s[namecode:key] w[namecode:key] i[namecode:key]pl[namecode:key][namecode:key][namecode:key][namecode:key]t[namecode:key][namecode:key] it b[namecode:key] usi[namecode:key]g [namecode:key][namecode:key]xt l[namecode:key]v[namecode:key]l [namecode:key][namecode:key]t[namecode:key] f[namecode:key]r b[namecode:key][namecode:key][namecode:key]up if [namecode:key][namecode:key]t [namecode:key]v[namecode:key]il[namecode:key]bl[namecode:key]
[namecode:key][namecode:key]s[namecode:key]_upgr[namecode:key][namecode:key][namecode:key][namecode:key] str = [namecode:key][namecode:key]s[namecode:key][l[namecode:key][namecode:key][namecode:key]_l[namecode:key]v[namecode:key]l]
if l[namecode:key][namecode:key]([namecode:key][namecode:key]s[namecode:key][l[namecode:key][namecode:key][namecode:key]_l[namecode:key]v[namecode:key]l - 1]) == 2[namecode:key]
[namecode:key][namecode:key]s[namecode:key]_upgr[namecode:key][namecode:key][namecode:key] = [namecode:key][namecode:key]s[namecode:key][l[namecode:key][namecode:key][namecode:key]_l[namecode:key]v[namecode:key]l - 1]
[namecode:key][namecode:key]s[namecode:key]_r[namecode:key]pl[namecode:key][namecode:key][namecode:key] += f'({[namecode:key][namecode:key]s[namecode:key]_upgr[namecode:key][namecode:key][namecode:key]})' # [namecode:key]x[namecode:key][namecode:key]pl[namecode:key][namecode:key] "10%(+2.5%)"
# [namecode:key]x[namecode:key][namecode:key]pl[namecode:key] p[namecode:key]tt[namecode:key]r[namecode:key][namecode:key] $1 $2 $3
s[namecode:key]ill_[namecode:key][namecode:key]s[namecode:key] = s[namecode:key]ill_[namecode:key][namecode:key]s[namecode:key].r[namecode:key]pl[namecode:key][namecode:key][namecode:key](f'${i}', [namecode:key][namecode:key]s[namecode:key]_r[namecode:key]pl[namecode:key][namecode:key][namecode:key]);
r[namecode:key]tur[namecode:key] S[namecode:key]ill(
i[namecode:key]=i[namecode:key]t(s[namecode:key]ill_i[namecode:key]),
t[namecode:key]p[namecode:key]=s[namecode:key]ill_t[namecode:key]p[namecode:key],
[namecode:key][namecode:key][namecode:key][namecode:key]=r[namecode:key]s[namecode:key]lv[namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key](s[namecode:key]ill_[namecode:key][namecode:key][namecode:key][namecode:key]),
[namecode:key][namecode:key]s[namecode:key]=r[namecode:key]s[namecode:key]lv[namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key](s[namecode:key]ill_[namecode:key][namecode:key]s[namecode:key]),
[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l=s[namecode:key]ill_[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l
)
# this fu[namecode:key][namecode:key]ti[namecode:key][namecode:key] t[namecode:key] [namecode:key][namecode:key][namecode:key]p[namecode:key]r[namecode:key] s[namecode:key]ill l[namecode:key]w[namecode:key]st l[namecode:key]v[namecode:key]l with high[namecode:key]st l[namecode:key]v[namecode:key]l
# li[namecode:key][namecode:key] [namecode:key][namecode:key]u [namecode:key]li[namecode:key][namecode:key] [namecode:key][namecode:key] ship [namecode:key]r[namecode:key]hiv[namecode:key] s[namecode:key]ill th[namecode:key]t sh[namecode:key]w [namecode:key]i[namecode:key]~[namecode:key][namecode:key]x
# this [namecode:key][namecode:key][namecode:key]s[namecode:key]'t w[namecode:key]r[namecode:key] with s[namecode:key]ill [namecode:key]bt[namecode:key]i[namecode:key][namecode:key][namecode:key] fr[namecode:key][namecode:key] li[namecode:key]it br[namecode:key][namecode:key][namecode:key] li[namecode:key][namecode:key] [namecode:key]ll [namecode:key]ut [namecode:key]ss[namecode:key]ult
# si[namecode:key][namecode:key][namecode:key] [namecode:key]ll [namecode:key]ut [namecode:key]ss[namecode:key]ult just [namecode:key]h[namecode:key][namecode:key]g[namecode:key] th[namecode:key] [namecode:key][namecode:key]tir[namecode:key] s[namecode:key]ill i[namecode:key] i[namecode:key]st[namecode:key][namecode:key][namecode:key] [namecode:key]f l[namecode:key]v[namecode:key]l upgr[namecode:key][namecode:key][namecode:key]
[namecode:key][namecode:key]f s[namecode:key]ill_[namecode:key][namecode:key][namecode:key]p[namecode:key]r[namecode:key](s[namecode:key]ill_i[namecode:key][namecode:key] U[namecode:key]i[namecode:key][namecode:key][str, i[namecode:key]t]) -> Opti[namecode:key][namecode:key][namecode:key]l[S[namecode:key]ill][namecode:key]
if [namecode:key][namecode:key]t isi[namecode:key]st[namecode:key][namecode:key][namecode:key][namecode:key](s[namecode:key]ill_i[namecode:key], str)[namecode:key]
s[namecode:key]ill_i[namecode:key] = str(s[namecode:key]ill_i[namecode:key])
if s[namecode:key]ill_i[namecode:key] [namecode:key][namecode:key]t i[namecode:key] s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key][namecode:key]
r[namecode:key]tur[namecode:key] N[namecode:key][namecode:key][namecode:key]
s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key][namecode:key] [namecode:key][namecode:key][namecode:key] = s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key]_t[namecode:key][namecode:key]pl[namecode:key]t[namecode:key][s[namecode:key]ill_i[namecode:key]]
s[namecode:key]ill_t[namecode:key]p[namecode:key][namecode:key] i[namecode:key]t = s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key].g[namecode:key]t('t[namecode:key]p[namecode:key]') [namecode:key]r 0
s[namecode:key]ill_[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key] str = s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key].g[namecode:key]t('[namecode:key][namecode:key][namecode:key][namecode:key]') [namecode:key]r ''
s[namecode:key]ill_[namecode:key][namecode:key]s[namecode:key][namecode:key] str = s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key].g[namecode:key]t('[namecode:key][namecode:key]s[namecode:key]') [namecode:key]r ''
s[namecode:key]ill_[namecode:key][namecode:key]s[namecode:key]_g[namecode:key]t_[namecode:key][namecode:key][namecode:key][namecode:key] List = s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key].g[namecode:key]t('[namecode:key][namecode:key]s[namecode:key]_g[namecode:key]t_[namecode:key][namecode:key][namecode:key]', [])
s[namecode:key]ill_[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l[namecode:key] i[namecode:key]t = s[namecode:key]ill_[namecode:key][namecode:key]t[namecode:key].g[namecode:key]t('[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l') [namecode:key]r 1
SKILL = S[namecode:key]ill(
i[namecode:key]=i[namecode:key]t(s[namecode:key]ill_i[namecode:key]),
t[namecode:key]p[namecode:key]=s[namecode:key]ill_t[namecode:key]p[namecode:key],
[namecode:key][namecode:key][namecode:key][namecode:key]=r[namecode:key]s[namecode:key]lv[namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key](s[namecode:key]ill_[namecode:key][namecode:key][namecode:key][namecode:key]),
[namecode:key][namecode:key]s[namecode:key]=r[namecode:key]s[namecode:key]lv[namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key](s[namecode:key]ill_[namecode:key][namecode:key]s[namecode:key]),
[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l=s[namecode:key]ill_[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l
)
# s[namecode:key]ill [namecode:key][namecode:key]l[namecode:key] h[namecode:key]v[namecode:key] [namecode:key][namecode:key][namecode:key] l[namecode:key]v[namecode:key]l li[namecode:key][namecode:key] [namecode:key]ll [namecode:key]ut [namecode:key]ss[namecode:key]ult [namecode:key]r [namecode:key][namecode:key]t[namecode:key] [namecode:key]p[namecode:key]r[namecode:key]ti[namecode:key][namecode:key] sir[namecode:key][namecode:key] s[namecode:key]ill
# th[namecode:key]t [namecode:key][namecode:key][namecode:key]'t b[namecode:key] upgr[namecode:key][namecode:key][namecode:key][namecode:key]
if s[namecode:key]ill_[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l == 1[namecode:key]
r[namecode:key]tur[namecode:key] SKILL;
# p[namecode:key]rs[namecode:key] s[namecode:key]ill [namecode:key][namecode:key]s[namecode:key]ripti[namecode:key][namecode:key]
f[namecode:key]r i, [namecode:key][namecode:key]s[namecode:key] i[namecode:key] [namecode:key][namecode:key]u[namecode:key][namecode:key]r[namecode:key]t[namecode:key](s[namecode:key]ill_[namecode:key][namecode:key]s[namecode:key]_g[namecode:key]t_[namecode:key][namecode:key][namecode:key], st[namecode:key]rt=1)[namecode:key]
DESC_CURRENT[namecode:key] str = [namecode:key][namecode:key]s[namecode:key][0]
DESC_UPGRADE[namecode:key] str = [namecode:key][namecode:key]s[namecode:key][1]
s[namecode:key]ill_[namecode:key][namecode:key]s[namecode:key][namecode:key] str = s[namecode:key]ill_[namecode:key][namecode:key]s[namecode:key].r[namecode:key]pl[namecode:key][namecode:key][namecode:key](f'${i}', f'{DESC_CURRENT}({DESC_UPGRADE})')
SKILL.[namecode:key][namecode:key]s[namecode:key] = r[namecode:key]s[namecode:key]lv[namecode:key]_[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key][namecode:key](s[namecode:key]ill_[namecode:key][namecode:key]s[namecode:key])
r[namecode:key]tur[namecode:key] SKILL
```
</[namecode:key][namecode:key]t[namecode:key]ils>
# D[namecode:key]t[namecode:key] Stru[namecode:key]tur[namecode:key]
```T[namecode:key]p[namecode:key]s[namecode:key]ript
t[namecode:key]p[namecode:key] Li[namecode:key][namecode:key] = stri[namecode:key]g | [namecode:key]ull;
[namecode:key][namecode:key]u[namecode:key] S[namecode:key]illT[namecode:key]p[namecode:key] {
OFFENSIVE = 1,
DEFENSIVE = 2,
SUPPORT = 3
};
t[namecode:key]p[namecode:key] S[namecode:key]ill = {
i[namecode:key][namecode:key] [namecode:key]u[namecode:key]b[namecode:key]r;
t[namecode:key]p[namecode:key][namecode:key] S[namecode:key]illT[namecode:key]p[namecode:key];
[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key] stri[namecode:key]g;
[namecode:key][namecode:key]s[namecode:key][namecode:key] stri[namecode:key]g;
i[namecode:key][namecode:key][namecode:key][namecode:key] Li[namecode:key][namecode:key];
[namecode:key][namecode:key]x_l[namecode:key]v[namecode:key]l[namecode:key] [namecode:key]u[namecode:key]b[namecode:key]r;
};
// s[namecode:key]ill.js[namecode:key][namecode:key]
t[namecode:key]p[namecode:key] S[namecode:key]illD[namecode:key]t[namecode:key] = {
[s[namecode:key]ill_i[namecode:key][namecode:key] stri[namecode:key]g][namecode:key] S[namecode:key]ill;
};
// s[namecode:key]ill_i[namecode:key][namecode:key][namecode:key].js[namecode:key][namecode:key]
t[namecode:key]p[namecode:key] S[namecode:key]illI[namecode:key][namecode:key][namecode:key]D[namecode:key]t[namecode:key] = {
[s[namecode:key]ill_i[namecode:key][namecode:key] stri[namecode:key]g][namecode:key] Li[namecode:key][namecode:key];
};
```
# F[namecode:key]t[namecode:key]h
- [s[namecode:key]ill.js[namecode:key][namecode:key]](https[namecode:key]//r[namecode:key]w.githubus[namecode:key]r[namecode:key][namecode:key][namecode:key]t[namecode:key][namecode:key]t.[namecode:key][namecode:key][namecode:key]/F[namecode:key]r[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]2603/AzurL[namecode:key][namecode:key][namecode:key]/[namecode:key][namecode:key]i[namecode:key]/s[namecode:key]ill.js[namecode:key][namecode:key])
```
https[namecode:key]//r[namecode:key]w.githubus[namecode:key]r[namecode:key][namecode:key][namecode:key]t[namecode:key][namecode:key]t.[namecode:key][namecode:key][namecode:key]/F[namecode:key]r[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]2603/AzurL[namecode:key][namecode:key][namecode:key]/[namecode:key][namecode:key]i[namecode:key]/s[namecode:key]ill.js[namecode:key][namecode:key]
```
- [s[namecode:key]ill_i[namecode:key][namecode:key][namecode:key].js[namecode:key][namecode:key]](https[namecode:key]//r[namecode:key]w.githubus[namecode:key]r[namecode:key][namecode:key][namecode:key]t[namecode:key][namecode:key]t.[namecode:key][namecode:key][namecode:key]/F[namecode:key]r[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]2603/AzurL[namecode:key][namecode:key][namecode:key]/[namecode:key][namecode:key]i[namecode:key]/s[namecode:key]ill_i[namecode:key][namecode:key][namecode:key].js[namecode:key][namecode:key])
```
https[namecode:key]//r[namecode:key]w.githubus[namecode:key]r[namecode:key][namecode:key][namecode:key]t[namecode:key][namecode:key]t.[namecode:key][namecode:key][namecode:key]/F[namecode:key]r[namecode:key][namecode:key][namecode:key][namecode:key][namecode:key]2603/AzurL[namecode:key][namecode:key][namecode:key]/[namecode:key][namecode:key]i[namecode:key]/s[namecode:key]ill_i[namecode:key][namecode:key][namecode:key].js[namecode:key][namecode:key]
```The current structure of
skill.json is straightforward, containing only maximum leveled skills with the following keys: type, name, desc, icon, and max_level. You can find the details in the Data Structure section. Additionally, skill_icon.json is provided for those who are only interested in the icon link.
There are plans to enhance the
skill.json structure in the future. While the complete structure is not finalized, the primary focus is on leveled skill descriptions that can be utilized without external dependencies. Currently, the challenge is the fact that Typescript/Javascript lacks the ability to use string formatting like Python or other programming languages, making deciding the structure more challenging. Although the option of including a fully repeating description is available, it is not considered efficient. Currently, you can use this formula instead to achieve this.
Some features to be implemented in the future include:
[!IMPORTANT] This is still in the "planning" phase, and its availability in the future is not guaranteed.
This formula is for achieving leveled skill descriptions. In this formula, you need the following files from the AzurLaneTools/AzurLaneData repository:
The first thing we need to do is implement a function to resolve skill name and description that use format like this
{namecode:xx} and then implement the main function that parse the skill data. Below is the formula example provided in Typescript and Python.
// ** this is for example purpose, using 'fetch' in every run is not advisable ** const REPO_LINK = "https://raw.githubusercontent.com/AzurLaneTools/AzurLaneData/main/EN/ShareCfg"; const skill_data_template = await fetch(`${REPO_LINK}/skill_data_template.json`).then(res => res.json()); const name_code = await fetch(`${REPO_LINK}/name_code.json`).then(res => res.json()); function resolve_namecode(text: string): string { let line: string = text; // resolve namecode while (line.includes("namecode")) { for (const key in name_code) { const CODE_NAME: string = `{namecode:${key}}`; if (line.includes(CODE_NAME)) line = line.replace(CODE_NAME, name_code[key].name); }; }; // remove irregular whitespace if (line.includes(" ")) line = line.replaceAll(" ", " "); // remove </color> if (line.includes("</color>")) line = line.replaceAll("</color>", ""); // using regex remove <color=#XXXXXX> while (line.includes("<color")) line = line.replace(/<color[^>]*>/, ""); // using regex to replace two or more space into one line = line.replace(/\s{2,}/, " "); // strip to remove space in the start or end of the string return line.trim(); }; type Skill = { id: number; type: number; name: string; desc: string; max_level: number; }; function skill(skill_id: number | string, level: number = 10, upgrade: boolean = false): Skill { // check if skill_id available in skill_data_template if (!skill_data_template.hasOwnProperty(skill_id)) return null; // get needed data from skill_data_template const { type, name, desc, desc_add, max_level } = skill_data_template[skill_id]; let temp_desc: string = desc; let temp_level: number = level; // check if level is less than max_level and more than 0 if (level > max_level) temp_level = max_level; else if (level < 1) temp_level = 1; // parse skill description for (let i = 0; i < desc_add.length; i++) { // temp_level -1 because list start from 0 const DESC_CURRENT: string = desc_add[i][temp_level - 1][0]; let desc_replace: string = DESC_CURRENT; // example: "10%" // upgrade make the display like in skill upgrade screen (classroom) // it add upgrade increment value for next level // check if temp_level is not equal to max_level, since max_level doesn't have desc_upgrade if (upgrade && temp_level !== max_level) // some skill only have one desc_add length // so we implemented it by using next level data for backup if not available let desc_upgrade = desc_add[i][temp_level]; if (desc_add[i][temp_level - 1].length === 2) desc_upgrade = desc_add[i][temp_level - 1][1]; desc_replace += `(${desc_upgrade})`; // example: "10%(+2.5%)" // example pattern: $1 $2 $3 temp_desc = desc.replaceAll(`$${i + 1}`, desc_replace); }; return { id: parseInt(skill_id), type: type, name: resolve_namecode(name), desc: resolve_namecode(temp_desc), max_level: max_level }; }; // this function to compare skill lowest level with highest level // like you click on ship archive skill that show min~max // this doesn't work with skill obtained from limit break like all out assault // since all out assault just change the entire skill id instead of level upgrade function skill_compare(skill_id: string | number): Skill { if (!skill_data_template.hasOwnProperty(skill_id)) return null; const { type, name, desc, desc_get_add, max_level } = skill_data_template[skill_id]; const SKILL = { id: parseInt(skill_id), type: type, name: resolve_namecode(name), desc: resolve_namecode(desc), max_level: max_level }; // skill only have one level like all out assault or meta operation siren skill // that can't be upgraded if (max_level === 1) return SKILL; // parse skill description for (let i = 0; i < desc_get_add.length; i++) { const DESC_CURRENT: string = desc_get_add[i][0]; const DESC_UPGRADE: string = desc_get_add[i][1]; SKILL.desc = desc.replaceAll(`$${i + 1}`, `${DESC_CURRENT}(${DESC_UPGRADE})`); }; SKILL.desc = resolve_namecode(SKILL.desc); return SKILL; };
# Python import re import json import requests from typing import Union, Optional, List from dataclasses import dataclass # ** this is for example purpose, using 'requests' in every run is not advisable ** REPO_LINK = 'https://raw.githubusercontent.com/AzurLaneTools/AzurLaneData/main/EN/ShareCfg' skill_data_template = requests.get(f'{REPO_LINK}/skill_data_template.json').json() name_code = requests.get(f'{REPO_LINK}/name_code.json').json() def resolve_namecode(text: str) -> str: line: str = text # resolve namecode while 'namecode' in line: for key, value in name_code.items(): CODE_NAME: str = f'{{namecode:{key}}}' if CODE_NAME in line: line = line.replace(CODE_NAME, value['name']) # remove irregular whitespace if ' ' in line: line = line.replace(' ', ' ') # remove </color> if '</color>' in line: line = line.replace('</color>', '') # using regex remove <color=#XXXXXX> while '<color' in line: line = re.sub(r'<color[^>]*>', '', line) # using regex to replace two or more space into one line = re.sub(r'\s{2,}', ' ', line) # strip to remove space in the start or end of the string return line.strip() # create a Skill dataclass for easier to access like javascript and cleaner @dataclass class Skill: id: int type: int name: str desc: str max_level: int def skill(skill_id: Union[int, str], level: int = 10, upgrade: bool = False) -> Optional[Skill]: # make skill_id into int since python dict int and str key is different # you can remove the isinstance and directly cast the skill_id into str # but i'll prefer this because it's more readable and intuitive if not isinstance(skill_id, str): skill_id = str(skill_id) # check if skill_id available in skill_data_template if skill_id not in skill_data_template: return None # get needed data from skill_data_template # unlike javascript, python can't deconstruct object/dict # so we will use 'get' since it's more safe with default value than direct access # since skill_data_template already checked before it is safe to direct access the data skill_data: any = skill_data_template[skill_id] skill_type: int = skill_data.get('type') or 0 skill_name: str = skill_data.get('name') or '' skill_desc: str = skill_data.get('desc') or '' skill_desc_add: List = skill_data.get('desc_add') or [] skill_max_level: int = skill_data.get('max_level') or 1 temp_level: int = int(level) # check if level is less than skill_max_level and more than 0 if level > skill_max_level: temp_level: int = skill_max_level elif level < 0: temp_level: int = 1 # parse skill_description for i, desc in enumerate(skill_desc_get_add, start=1): # temp_level -1 because list start from 0 DESC_CURRENT: str = desc[temp_level - 1][0] desc_replace: str = DESC_CURRENT # example: "10%" # upgrade make the display like in skill upgrade screen (classroom) # it add upgrade increment value for next level # check if temp_level is not equal to skill_max_level, # since skill_max_level doesn't have desc_upgrade if upgrade and temp_level != skill_max_level: # some skill only have one desc_add length # so we implemented it by using next level data for backup if not available desc_upgrade: str = desc[lock_level] if len(desc[lock_level - 1]) == 2: desc_upgrade = desc[lock_level - 1] desc_replace += f'({desc_upgrade})' # example: "10%(+2.5%)" # example pattern: $1 $2 $3 skill_desc = skill_desc.replace(f'${i}', desc_replace); return Skill( id=int(skill_id), type=skill_type, name=resolve_namecode(skill_name), desc=resolve_namecode(skill_desc), max_level=skill_max_level ) # this function to compare skill lowest level with highest level # like you click on ship archive skill that show min~max # this doesn't work with skill obtained from limit break like all out assault # since all out assault just change the entire skill id instead of level upgrade def skill_compare(skill_id: Union[str, int]) -> Optional[Skill]: if not isinstance(skill_id, str): skill_id = str(skill_id) if skill_id not in skill_data_template: return None skill_data: any = skill_data_template[skill_id] skill_type: int = skill_data.get('type') or 0 skill_name: str = skill_data.get('name') or '' skill_desc: str = skill_data.get('desc') or '' skill_desc_get_add: List = skill_data.get('desc_get_add', []) skill_max_level: int = skill_data.get('max_level') or 1 SKILL = Skill( id=int(skill_id), type=skill_type, name=resolve_namecode(skill_name), desc=resolve_namecode(skill_desc), max_level=skill_max_level ) # skill only have one level like all out assault or meta operation siren skill # that can't be upgraded if skill_max_level == 1: return SKILL; # parse skill description for i, desc in enumerate(skill_desc_get_add, start=1): DESC_CURRENT: str = desc[0] DESC_UPGRADE: str = desc[1] skill_desc: str = skill_desc.replace(f'${i}', f'{DESC_CURRENT}({DESC_UPGRADE})') SKILL.desc = resolve_namecode(skill_desc) return SKILL
type Link = string | null; enum SkillType { OFFENSIVE = 1, DEFENSIVE = 2, SUPPORT = 3 }; type Skill = { id: number; type: SkillType; name: string; desc: string; icon: Link; max_level: number; }; // skill.json type SkillData = { [skill_id: string]: Skill; }; // skill_icon.json type SkillIconData = { [skill_id: string]: Link; };
https://raw.githubusercontent.com/Fernando2603/AzurLane/main/skill.json
https://raw.githubusercontent.com/Fernando2603/AzurLane/main/skill_icon.json