MediaWiki:ClassMasteryData.js: Difference between revisions
From EQOA Sandstorm Wiki
Jump to navigationJump to search
RenodorDev (talk | contribs) No edit summary |
RenodorDev (talk | contribs) No edit summary |
||
| (2 intermediate revisions by the same user not shown) | |||
| Line 106: | Line 106: | ||
races: splitCodes(get(row, "Race")), | races: splitCodes(get(row, "Race")), | ||
archetype: get(row, "Archetype"), | archetype: get(row, "Archetype"), | ||
lycanthropy: get(row, "Lycanthropy"), | |||
classes: splitCodes(get(row, "Class")), | classes: splitCodes(get(row, "Class")), | ||
level: parseInt(get(row, "Level"), 10) || 0, | level: parseInt(get(row, "Level"), 10) || 0, | ||
| Line 142: | Line 143: | ||
defMod: parseInt(get(row, "DEF Mod"), 10) || 0, | defMod: parseInt(get(row, "DEF Mod"), 10) || 0, | ||
speed: parseInt(get(row, "Speed"), 10) || 0 | speed: parseInt(get(row, "Speed"), 10) || 0 | ||
} | }, | ||
spellsAdded: [ | |||
get(row, "=+Spell 1"), | |||
get(row, "=+Spell 2"), | |||
get(row, "=+Spell 3"), | |||
get(row, "=+Spell 4"), | |||
get(row, "=+Spell 5"), | |||
get(row, "=+Spell 6") | |||
].filter(Boolean), | |||
spellsRemoved: [ | |||
get(row, "-Spell 1"), | |||
get(row, "-Spell 2"), | |||
get(row, "-Spell 3"), | |||
get(row, "-Spell 4"), | |||
get(row, "-Spell 5"), | |||
get(row, "-Spell 6") | |||
].filter(Boolean) | |||
}; | }; | ||
}).filter(function (cm) { | }).filter(function (cm) { | ||
Latest revision as of 19:34, 14 May 2026
window.EQOA_CM_DATA = {
classes: {
WAR: "Warrior",
PAL: "Paladin",
SK: "Shadowknight",
RGE: "Rogue",
BRD: "Bard",
RAN: "Ranger",
MNK: "Monk",
CL: "Cleric",
DRD: "Druid",
SHA: "Shaman",
NEC: "Necromancer",
MAG: "Magician",
ENC: "Enchanter",
WIZ: "Wizard",
ALC: "Alchemist"
},
raceClasses: {
Human: ["WAR", "PAL", "RGE", "BRD", "RAN", "MNK", "CL", "DRD", "NEC", "MAG", "ENC", "WIZ", "ALC"],
Elf: ["WAR", "PAL", "RGE", "BRD", "RAN", "CL", "DRD", "MAG", "ENC", "WIZ"],
DarkElf: ["WAR", "SK", "RGE", "CL", "NEC", "MAG", "ENC", "WIZ", "ALC"],
Gnome: ["WAR", "RGE", "CL", "NEC", "MAG", "ENC", "WIZ", "ALC"],
Dwarf: ["WAR", "PAL", "RGE", "CL"],
Halfling: ["WAR", "RGE", "RAN", "DRD"],
Troll: ["WAR", "SK", "RGE", "SHA"],
Ogre: ["WAR", "SK", "SHA", "ALC"],
Erudite: ["PAL", "CL", "NEC", "MAG", "ENC", "WIZ", "ALC"],
Barbarian: ["WAR", "RGE", "RAN", "SHA", "ALC"]
},
raceCodes: {
Human: "HUM",
Elf: "ELF",
DarkElf: "DELF",
Gnome: "GNO",
Dwarf: "DWF",
Halfling: "HLF",
Troll: "TRL",
Ogre: "OGR",
Erudite: "ERU",
Barbarian: "BAR"
},
maxLevel: 60,
cmPerLevel: 25,
masteries: []
};
(function () {
if (!window.EQOA_CM_RAW) return;
var lines = window.EQOA_CM_RAW.trim().split(/\r?\n/);
if (lines.length < 2) return;
var headers = lines[0].split("\t").map(function (h) {
return h.trim();
});
function get(row, name) {
var index = headers.indexOf(name);
return index === -1 ? "" : (row[index] || "").trim();
}
function getAll(row, name) {
var values = [];
headers.forEach(function (header, index) {
if (header === name && row[index]) {
values.push(String(row[index]).trim());
}
});
return values;
}
function splitCodes(value) {
if (!value) return [];
return value.split(/\s+/).filter(Boolean);
}
window.EQOA_CM_DATA.masteries = lines.slice(1).map(function (line) {
var row = line.split("\t");
var reqValues = []
.concat(getAll(row, "CM Req 1"))
.concat(getAll(row, "CM Req 2"))
.concat(getAll(row, "CM Req 3"))
.concat(getAll(row, "CM Req 4"));
var reqNames = reqValues.filter(function (value) {
if (!value) return false;
/* removes ID-style requirements like 0001, 00DA, etc */
if (/^[0-9A-F]{4}$/i.test(value)) return false;
return true;
});
return {
name: get(row, "Mastery"),
description: get(row, "Description"),
classification: get(row, "Classification"),
subCategory: get(row, "Sub-Category"),
races: splitCodes(get(row, "Race")),
archetype: get(row, "Archetype"),
lycanthropy: get(row, "Lycanthropy"),
classes: splitCodes(get(row, "Class")),
level: parseInt(get(row, "Level"), 10) || 0,
points: parseInt(get(row, "Points"), 10) || 0,
cmSpentReq: parseInt(get(row, "CM Spent Req"), 10) || 0,
requirements: reqNames,
stats: {
ac: parseInt(get(row, "AC"), 10) || 0,
str: parseInt(get(row, "STR"), 10) || 0,
sta: parseInt(get(row, "STA"), 10) || 0,
agi: parseInt(get(row, "AGI"), 10) || 0,
dex: parseInt(get(row, "DEX"), 10) || 0,
wis: parseInt(get(row, "WIS"), 10) || 0,
int: parseInt(get(row, "INT"), 10) || 0,
cha: parseInt(get(row, "CHA"), 10) || 0,
hp: parseInt(get(row, "HP Max"), 10) || 0,
pow: parseInt(get(row, "PWR Max"), 10) || 0,
hot: parseInt(get(row, "HoT"), 10) || 0,
pot: parseInt(get(row, "PoT"), 10) || 0,
ar: parseInt(get(row, "AR"), 10) || 0,
cr: parseInt(get(row, "CR"), 10) || 0,
lr: parseInt(get(row, "LR"), 10) || 0,
fr: parseInt(get(row, "FR"), 10) || 0,
pr: parseInt(get(row, "PR"), 10) || 0,
dr: parseInt(get(row, "DR"), 10) || 0,
strMax: parseInt(get(row, "STR Max"), 10) || 0,
staMax: parseInt(get(row, "STA Max"), 10) || 0,
agiMax: parseInt(get(row, "AGI Max"), 10) || 0,
dexMax: parseInt(get(row, "DEX Max"), 10) || 0,
wisMax: parseInt(get(row, "WIS Max"), 10) || 0,
intMax: parseInt(get(row, "INT Max"), 10) || 0,
chaMax: parseInt(get(row, "CHA Max"), 10) || 0,
hpFactor: parseInt(get(row, "HP Factor"), 10) || 0,
offMod: parseInt(get(row, "OFF Mod"), 10) || 0,
defMod: parseInt(get(row, "DEF Mod"), 10) || 0,
speed: parseInt(get(row, "Speed"), 10) || 0
},
spellsAdded: [
get(row, "=+Spell 1"),
get(row, "=+Spell 2"),
get(row, "=+Spell 3"),
get(row, "=+Spell 4"),
get(row, "=+Spell 5"),
get(row, "=+Spell 6")
].filter(Boolean),
spellsRemoved: [
get(row, "-Spell 1"),
get(row, "-Spell 2"),
get(row, "-Spell 3"),
get(row, "-Spell 4"),
get(row, "-Spell 5"),
get(row, "-Spell 6")
].filter(Boolean)
};
}).filter(function (cm) {
return cm.name;
});
})();
var masteryNames = {};
window.EQOA_CM_DATA.masteries.forEach(function (cm) {
masteryNames[cm.name] = true;
});
window.EQOA_CM_DATA.masteries.forEach(function (cm) {
var sourceLine = lines.find(function (line) {
return line.indexOf(cm.name + "\t") === 0;
});
if (!sourceLine) return;
var cells = sourceLine.split("\t");
cm.requirements = cells.filter(function (cell) {
cell = String(cell || "").trim();
return (
cell &&
cell !== cm.name &&
masteryNames[cell]
);
});
});