forked from phenom/healer-man
Update Healer Man server
This commit is contained in:
1 parent
ab1434a3b8
commit
e284f4fc76
60 files changed
+2704
-118
No files matched your search
@@ -327,6 +327,10 @@ function collectAbilitySpellIds() {
|
||||
for (const chains of Object.values(wow.classes ?? {})) {
|
||||
for (const chain of chains) for (const rank of chain.ranks ?? []) add("wow335", Number(rank.spellId));
|
||||
}
|
||||
// Penance's player spell delegates visible healing and damage bolts to
|
||||
// child spells that are absent from the learnable progression catalog.
|
||||
add("wow335", 47750);
|
||||
add("wow335", 47666);
|
||||
|
||||
const coa = JSON.parse(fs.readFileSync(path.join(projectRoot, "src", "game", "generated", "coaAbilityRuntimeCatalog.json"), "utf8"));
|
||||
for (const abilities of Object.values(coa.abilitiesByClass ?? {})) {
|
||||
@@ -474,10 +478,21 @@ function buildWowEntries(source, requestedIds, tables) {
|
||||
}
|
||||
sounds.push(...soundEntry(soundTable, row.missileSound), ...soundEntry(soundTable, row.animationSound));
|
||||
}
|
||||
// Creature 19668 uses display 19110: the FleshBeast model with its black skin.
|
||||
// The summon is a persistent actor, so retain its model beside the cast kit.
|
||||
if (source === "wow335" && spellId === 34433) {
|
||||
addAssets("summon", [{ model: "Creature/FleshBeast/FleshBeast.mdx" }]);
|
||||
}
|
||||
for (const [phase, assets] of Object.entries(phases)) {
|
||||
phases[phase] = [...new Map(assets.map((asset) => [`${asset.model}:${asset.attachment ?? ""}`, asset])).values()];
|
||||
}
|
||||
const uniqueSounds = [...new Map(sounds.map((sound) => [sound.sourcePath, sound])).values()];
|
||||
const uniqueSounds = [...new Map(sounds.map((sound) => [sound.sourcePath, sound])).values()]
|
||||
.map((sound) => {
|
||||
if (source !== "wow335" || ![47540, 47666, 47750].includes(spellId)) return sound;
|
||||
if (spellId === 47540) return { ...sound, phase: "cast-start" };
|
||||
const phase = /ShadowCast|Pennance_MissileLoop/i.test(sound.sourcePath) ? "tick" : "impact";
|
||||
return { ...sound, phase };
|
||||
});
|
||||
if (!visualIds.length && !uniqueSounds.length) continue;
|
||||
entries.push({
|
||||
key: `${source}:${spellId}`,
|
||||
|
||||
@@ -116,7 +116,11 @@ export function packageWowOriginalEffects(manifest, options = {}) {
|
||||
const skin = original.buffer.readUInt32LE(60) ? source.read(skinName) : null;
|
||||
if (original.buffer.readUInt32LE(60) && !skin) throw new Error(`Missing skin: ${skinName}`);
|
||||
const mesh = skin ? decodeWotlkM2Mesh(original.buffer, skin.buffer, name) : null;
|
||||
const packagedTextures = effects.textures.map(packageTexture);
|
||||
const packagedTextures = effects.textures.map((texture) => packageTexture(
|
||||
name === "creature/fleshbeast/fleshbeast.m2" && texture.type === 11 && !texture.filename
|
||||
? { ...texture, filename: "Creature/FleshBeast/FleshBeastBlack.blp" }
|
||||
: texture,
|
||||
));
|
||||
const readyParticleIndices = effects.particles.flatMap((particle, index) => (
|
||||
packagedTextures[particle.textureIndex]?.url
|
||||
&& particle.samples.emissionRate.some((sample) => (sample.value?.value ?? sample.value) > 0)
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Shadowfiend summon preview</title></head>
|
||||
<body style="margin:0;background:#0b121b;color:#e8eef8;font:14px system-ui">
|
||||
<div id="root"></div><script type="module" src="/src/dev/ShadowfiendPreview.tsx"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user