generated from nhcarrigan/template
Compare commits
43 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
2827ddef72
|
|||
|
34f2b250f3
|
|||
|
d20ae27fd2
|
|||
|
29e2766b31
|
|||
|
65c4a409ca
|
|||
|
78b1c1ec17
|
|||
|
4163137e64
|
|||
|
952e9d6299
|
|||
|
9cff54cfcd
|
|||
|
f83728df57
|
|||
|
50b9883951
|
|||
|
87686a310f
|
|||
|
19f5f5e54f
|
|||
|
7d1126e8ad
|
|||
|
ec0763819e
|
|||
|
4a9ecbf706
|
|||
|
96868c4143
|
|||
|
48477ee286
|
|||
|
b3d257048f
|
|||
|
3735cff23f
|
|||
|
a09280470e
|
|||
|
48120e0789
|
|||
|
0542402b4d
|
|||
|
689133d05d
|
|||
|
8a332dc9ce
|
|||
|
56d963dc90
|
|||
|
77c7ee02a6
|
|||
|
d1559c327f
|
|||
|
4c297f1ce1
|
|||
|
b6e218167d
|
|||
|
0609cc7584
|
|||
|
7c390f45b5
|
|||
|
7ecc655484
|
|||
|
4b3a856ef9
|
|||
|
d84725921a
|
|||
|
e4808680ed
|
|||
|
f001acc382
|
|||
|
8a38d02e69
|
|||
|
eed61db410
|
|||
|
0ae6aa12b2
|
|||
|
0d6d05e50b
|
|||
|
74dd3bf463
|
|||
|
959b86fa8b
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@elysium/api",
|
||||
"version": "0.4.0",
|
||||
"version": "0.3.2",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"main": "./prod/src/index.js",
|
||||
|
||||
@@ -223,8 +223,8 @@ export const defaultAchievements: Array<Achievement> = [
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 78, type: "equipmentOwned" },
|
||||
description: "Own all 78 pieces of equipment.",
|
||||
condition: { amount: 65, type: "equipmentOwned" },
|
||||
description: "Own all 65 pieces of equipment.",
|
||||
icon: "🛡️",
|
||||
id: "fully_equipped",
|
||||
name: "Fully Equipped",
|
||||
@@ -316,26 +316,8 @@ export const defaultAchievements: Array<Achievement> = [
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 75, type: "questsCompleted" },
|
||||
description: "Complete 75 quests.",
|
||||
icon: "🌠",
|
||||
id: "quest_hero",
|
||||
name: "Quest Hero",
|
||||
reward: { crystals: 10_000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 100, type: "questsCompleted" },
|
||||
description: "Complete 100 quests.",
|
||||
icon: "💫",
|
||||
id: "quest_legend",
|
||||
name: "Quest Legend",
|
||||
reward: { crystals: 15_000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 112, type: "questsCompleted" },
|
||||
description: "Complete all 112 quests across the known multiverse.",
|
||||
condition: { amount: 122, type: "questsCompleted" },
|
||||
description: "Complete all 122 quests across the known multiverse.",
|
||||
icon: "🌌",
|
||||
id: "quest_eternal",
|
||||
name: "Quest Eternal",
|
||||
@@ -361,15 +343,6 @@ export const defaultAchievements: Array<Achievement> = [
|
||||
reward: { crystals: 5000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 50, type: "bossesDefeated" },
|
||||
description: "Defeat 50 bosses.",
|
||||
icon: "⚡",
|
||||
id: "boss_legend",
|
||||
name: "Legendary Vanquisher",
|
||||
reward: { crystals: 15_000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
condition: { amount: 72, type: "bossesDefeated" },
|
||||
description: "Defeat all 72 bosses across every plane of existence.",
|
||||
@@ -423,7 +396,7 @@ export const defaultAchievements: Array<Achievement> = [
|
||||
icon: "✨",
|
||||
id: "prestige_transcendent",
|
||||
name: "Transcendent",
|
||||
reward: { runestones: 100 },
|
||||
reward: { crystals: 10_000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
@@ -432,7 +405,7 @@ export const defaultAchievements: Array<Achievement> = [
|
||||
icon: "💎",
|
||||
id: "prestige_eternal",
|
||||
name: "Eternal Looper",
|
||||
reward: { runestones: 500 },
|
||||
reward: { crystals: 25_000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
@@ -441,7 +414,7 @@ export const defaultAchievements: Array<Achievement> = [
|
||||
icon: "🌟",
|
||||
id: "prestige_immortal",
|
||||
name: "Immortal Cycler",
|
||||
reward: { runestones: 2000 },
|
||||
reward: { crystals: 50_000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
{
|
||||
@@ -450,7 +423,7 @@ export const defaultAchievements: Array<Achievement> = [
|
||||
icon: "👑",
|
||||
id: "prestige_absolute",
|
||||
name: "Absolute Champion",
|
||||
reward: { runestones: 10_000 },
|
||||
reward: { crystals: 100_000 },
|
||||
unlockedAt: null,
|
||||
},
|
||||
];
|
||||
|
||||
+53
-53
@@ -360,7 +360,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 40,
|
||||
crystalReward: 0,
|
||||
crystalReward: 40_000,
|
||||
currentHp: 2_000_000_000,
|
||||
damagePerSecond: 120_000,
|
||||
description:
|
||||
@@ -378,7 +378,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 50,
|
||||
crystalReward: 0,
|
||||
crystalReward: 100_000,
|
||||
currentHp: 8_000_000_000,
|
||||
damagePerSecond: 350_000,
|
||||
description:
|
||||
@@ -396,7 +396,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 60,
|
||||
crystalReward: 0,
|
||||
crystalReward: 300_000,
|
||||
currentHp: 30_000_000_000,
|
||||
damagePerSecond: 1_000_000,
|
||||
description:
|
||||
@@ -414,7 +414,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 75,
|
||||
crystalReward: 0,
|
||||
crystalReward: 800_000,
|
||||
currentHp: 100_000_000_000,
|
||||
damagePerSecond: 3_000_000,
|
||||
description:
|
||||
@@ -433,7 +433,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
// ── Abyssal Trench ────────────────────────────────────────────────────────
|
||||
{
|
||||
bountyRunestones: 40,
|
||||
crystalReward: 0,
|
||||
crystalReward: 1_500_000,
|
||||
currentHp: 250_000_000_000,
|
||||
damagePerSecond: 5_000_000,
|
||||
description:
|
||||
@@ -451,7 +451,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 55,
|
||||
crystalReward: 0,
|
||||
crystalReward: 4_000_000,
|
||||
currentHp: 1_000_000_000_000,
|
||||
damagePerSecond: 15_000_000,
|
||||
description:
|
||||
@@ -469,7 +469,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 70,
|
||||
crystalReward: 0,
|
||||
crystalReward: 12_000_000,
|
||||
currentHp: 4_000_000_000_000,
|
||||
damagePerSecond: 50_000_000,
|
||||
description:
|
||||
@@ -487,7 +487,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 85,
|
||||
crystalReward: 0,
|
||||
crystalReward: 40_000_000,
|
||||
currentHp: 15_000_000_000_000,
|
||||
damagePerSecond: 150_000_000,
|
||||
description:
|
||||
@@ -505,7 +505,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 100,
|
||||
crystalReward: 0,
|
||||
crystalReward: 150_000_000,
|
||||
currentHp: 50_000_000_000_000,
|
||||
damagePerSecond: 500_000_000,
|
||||
description:
|
||||
@@ -524,7 +524,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
// ── Infernal Court ────────────────────────────────────────────────────────
|
||||
{
|
||||
bountyRunestones: 55,
|
||||
crystalReward: 0,
|
||||
crystalReward: 350_000_000,
|
||||
currentHp: 120_000_000_000_000,
|
||||
damagePerSecond: 800_000_000,
|
||||
description:
|
||||
@@ -542,7 +542,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 70,
|
||||
crystalReward: 0,
|
||||
crystalReward: 1_000_000_000,
|
||||
currentHp: 500_000_000_000_000,
|
||||
damagePerSecond: 2_500_000_000,
|
||||
description:
|
||||
@@ -560,7 +560,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 90,
|
||||
crystalReward: 0,
|
||||
crystalReward: 3_000_000_000,
|
||||
currentHp: 2_000_000_000_000_000,
|
||||
damagePerSecond: 8_000_000_000,
|
||||
description:
|
||||
@@ -578,7 +578,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 110,
|
||||
crystalReward: 0,
|
||||
crystalReward: 10_000_000_000,
|
||||
currentHp: 6_000_000_000_000_000,
|
||||
damagePerSecond: 25_000_000_000,
|
||||
description:
|
||||
@@ -596,7 +596,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 135,
|
||||
crystalReward: 0,
|
||||
crystalReward: 30_000_000_000,
|
||||
currentHp: 8_000_000_000_000_000,
|
||||
damagePerSecond: 80_000_000_000,
|
||||
description:
|
||||
@@ -615,7 +615,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
// ── Crystalline Spire ─────────────────────────────────────────────────────
|
||||
{
|
||||
bountyRunestones: 70,
|
||||
crystalReward: 0,
|
||||
crystalReward: 8e10,
|
||||
currentHp: 2e16,
|
||||
damagePerSecond: 120_000_000_000,
|
||||
description:
|
||||
@@ -633,7 +633,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 90,
|
||||
crystalReward: 0,
|
||||
crystalReward: 3e11,
|
||||
currentHp: 8e16,
|
||||
damagePerSecond: 4e11,
|
||||
description:
|
||||
@@ -651,7 +651,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 115,
|
||||
crystalReward: 0,
|
||||
crystalReward: 1e12,
|
||||
currentHp: 3e17,
|
||||
damagePerSecond: 1.2e12,
|
||||
description:
|
||||
@@ -669,7 +669,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 140,
|
||||
crystalReward: 0,
|
||||
crystalReward: 4e12,
|
||||
currentHp: 1e18,
|
||||
damagePerSecond: 4e12,
|
||||
description:
|
||||
@@ -687,7 +687,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 175,
|
||||
crystalReward: 0,
|
||||
crystalReward: 1.5e13,
|
||||
currentHp: 4e18,
|
||||
damagePerSecond: 1.5e13,
|
||||
description:
|
||||
@@ -706,7 +706,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
// ── Void Sanctum ──────────────────────────────────────────────────────────
|
||||
{
|
||||
bountyRunestones: 90,
|
||||
crystalReward: 0,
|
||||
crystalReward: 4e13,
|
||||
currentHp: 1e19,
|
||||
damagePerSecond: 4e13,
|
||||
description:
|
||||
@@ -724,7 +724,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 115,
|
||||
crystalReward: 0,
|
||||
crystalReward: 1.5e14,
|
||||
currentHp: 5e19,
|
||||
damagePerSecond: 1.5e14,
|
||||
description:
|
||||
@@ -742,7 +742,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 145,
|
||||
crystalReward: 0,
|
||||
crystalReward: 5e14,
|
||||
currentHp: 2e20,
|
||||
damagePerSecond: 5e14,
|
||||
description:
|
||||
@@ -760,7 +760,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 180,
|
||||
crystalReward: 0,
|
||||
crystalReward: 2e15,
|
||||
currentHp: 8e20,
|
||||
damagePerSecond: 2e15,
|
||||
description:
|
||||
@@ -778,7 +778,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 225,
|
||||
crystalReward: 0,
|
||||
crystalReward: 8e15,
|
||||
currentHp: 3e21,
|
||||
damagePerSecond: 8e15,
|
||||
description:
|
||||
@@ -797,7 +797,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
// ── Eternal Throne ────────────────────────────────────────────────────────
|
||||
{
|
||||
bountyRunestones: 115,
|
||||
crystalReward: 0,
|
||||
crystalReward: 2e16,
|
||||
currentHp: 1e22,
|
||||
damagePerSecond: 2e16,
|
||||
description:
|
||||
@@ -815,7 +815,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 150,
|
||||
crystalReward: 0,
|
||||
crystalReward: 8e16,
|
||||
currentHp: 5e22,
|
||||
damagePerSecond: 8e16,
|
||||
description:
|
||||
@@ -833,7 +833,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 190,
|
||||
crystalReward: 0,
|
||||
crystalReward: 3e17,
|
||||
currentHp: 2e23,
|
||||
damagePerSecond: 3e17,
|
||||
description:
|
||||
@@ -851,7 +851,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 235,
|
||||
crystalReward: 0,
|
||||
crystalReward: 1.2e18,
|
||||
currentHp: 8e23,
|
||||
damagePerSecond: 1.2e18,
|
||||
description:
|
||||
@@ -869,7 +869,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 295,
|
||||
crystalReward: 0,
|
||||
crystalReward: 5e18,
|
||||
currentHp: 3e24,
|
||||
damagePerSecond: 5e18,
|
||||
description:
|
||||
@@ -888,7 +888,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
// ── Primordial Chaos ──────────────────────────────────────────────────────
|
||||
{
|
||||
bountyRunestones: 150,
|
||||
crystalReward: 0,
|
||||
crystalReward: 2e20,
|
||||
currentHp: 1e26,
|
||||
damagePerSecond: 2e20,
|
||||
description:
|
||||
@@ -906,7 +906,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 200,
|
||||
crystalReward: 0,
|
||||
crystalReward: 8e21,
|
||||
currentHp: 5e27,
|
||||
damagePerSecond: 8e21,
|
||||
description:
|
||||
@@ -924,7 +924,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 265,
|
||||
crystalReward: 0,
|
||||
crystalReward: 4e23,
|
||||
currentHp: 2e29,
|
||||
damagePerSecond: 4e23,
|
||||
description:
|
||||
@@ -942,7 +942,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 350,
|
||||
crystalReward: 0,
|
||||
crystalReward: 2e25,
|
||||
currentHp: 8e30,
|
||||
damagePerSecond: 2e25,
|
||||
description:
|
||||
@@ -961,7 +961,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
// ── Infinite Expanse ──────────────────────────────────────────────────────
|
||||
{
|
||||
bountyRunestones: 200,
|
||||
crystalReward: 0,
|
||||
crystalReward: 8e27,
|
||||
currentHp: 3e33,
|
||||
damagePerSecond: 8e27,
|
||||
description:
|
||||
@@ -979,7 +979,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 265,
|
||||
crystalReward: 0,
|
||||
crystalReward: 3e31,
|
||||
currentHp: 2e35,
|
||||
damagePerSecond: 3e31,
|
||||
description:
|
||||
@@ -997,7 +997,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 350,
|
||||
crystalReward: 0,
|
||||
crystalReward: 1e35,
|
||||
currentHp: 5e37,
|
||||
damagePerSecond: 1e35,
|
||||
description:
|
||||
@@ -1015,7 +1015,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 465,
|
||||
crystalReward: 0,
|
||||
crystalReward: 5e38,
|
||||
currentHp: 3e39,
|
||||
damagePerSecond: 5e38,
|
||||
description:
|
||||
@@ -1034,7 +1034,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
// ── Reality Forge ─────────────────────────────────────────────────────────
|
||||
{
|
||||
bountyRunestones: 265,
|
||||
crystalReward: 0,
|
||||
crystalReward: 2e42,
|
||||
currentHp: 8e47,
|
||||
damagePerSecond: 2e42,
|
||||
description:
|
||||
@@ -1052,7 +1052,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 350,
|
||||
crystalReward: 0,
|
||||
crystalReward: 1e47,
|
||||
currentHp: 4e52,
|
||||
damagePerSecond: 1e47,
|
||||
description:
|
||||
@@ -1070,7 +1070,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 465,
|
||||
crystalReward: 0,
|
||||
crystalReward: 6e51,
|
||||
currentHp: 2e57,
|
||||
damagePerSecond: 6e51,
|
||||
description:
|
||||
@@ -1088,7 +1088,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 615,
|
||||
crystalReward: 0,
|
||||
crystalReward: 2e56,
|
||||
currentHp: 8e61,
|
||||
damagePerSecond: 2e56,
|
||||
description:
|
||||
@@ -1107,7 +1107,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
// ── Cosmic Maelstrom ──────────────────────────────────────────────────────
|
||||
{
|
||||
bountyRunestones: 350,
|
||||
crystalReward: 0,
|
||||
crystalReward: 1e60,
|
||||
currentHp: 4e65,
|
||||
damagePerSecond: 1e60,
|
||||
description:
|
||||
@@ -1125,7 +1125,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 465,
|
||||
crystalReward: 0,
|
||||
crystalReward: 6e65,
|
||||
currentHp: 2e71,
|
||||
damagePerSecond: 6e65,
|
||||
description:
|
||||
@@ -1143,7 +1143,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 615,
|
||||
crystalReward: 0,
|
||||
crystalReward: 3e71,
|
||||
currentHp: 1e77,
|
||||
damagePerSecond: 3e71,
|
||||
description:
|
||||
@@ -1161,7 +1161,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 815,
|
||||
crystalReward: 0,
|
||||
crystalReward: 1e77,
|
||||
currentHp: 5e82,
|
||||
damagePerSecond: 1e77,
|
||||
description:
|
||||
@@ -1180,7 +1180,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
// ── Primeval Sanctum ──────────────────────────────────────────────────────
|
||||
{
|
||||
bountyRunestones: 465,
|
||||
crystalReward: 0,
|
||||
crystalReward: 5e82,
|
||||
currentHp: 2e88,
|
||||
damagePerSecond: 5e82,
|
||||
description:
|
||||
@@ -1198,7 +1198,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 615,
|
||||
crystalReward: 0,
|
||||
crystalReward: 3e89,
|
||||
currentHp: 1e95,
|
||||
damagePerSecond: 3e89,
|
||||
description:
|
||||
@@ -1216,7 +1216,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 815,
|
||||
crystalReward: 0,
|
||||
crystalReward: 2e96,
|
||||
currentHp: 8e101,
|
||||
damagePerSecond: 2e96,
|
||||
description:
|
||||
@@ -1234,7 +1234,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 1080,
|
||||
crystalReward: 0,
|
||||
crystalReward: 1e103,
|
||||
currentHp: 5e108,
|
||||
damagePerSecond: 1e103,
|
||||
description:
|
||||
@@ -1253,7 +1253,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
// ── The Absolute ──────────────────────────────────────────────────────────
|
||||
{
|
||||
bountyRunestones: 615,
|
||||
crystalReward: 0,
|
||||
crystalReward: 5e110,
|
||||
currentHp: 2e116,
|
||||
damagePerSecond: 5e110,
|
||||
description:
|
||||
@@ -1271,7 +1271,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 815,
|
||||
crystalReward: 0,
|
||||
crystalReward: 3e119,
|
||||
currentHp: 1e125,
|
||||
damagePerSecond: 3e119,
|
||||
description:
|
||||
@@ -1289,7 +1289,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 1080,
|
||||
crystalReward: 0,
|
||||
crystalReward: 1e129,
|
||||
currentHp: 5e134,
|
||||
damagePerSecond: 1e129,
|
||||
description:
|
||||
@@ -1307,7 +1307,7 @@ export const defaultBosses: Array<Boss> = [
|
||||
},
|
||||
{
|
||||
bountyRunestones: 1430,
|
||||
crystalReward: 0,
|
||||
crystalReward: 5e139,
|
||||
currentHp: 2e145,
|
||||
damagePerSecond: 5e139,
|
||||
description:
|
||||
|
||||
@@ -695,168 +695,6 @@ export const defaultEquipment: Array<Equipment> = [
|
||||
setId: "eternal_throne",
|
||||
type: "trinket",
|
||||
},
|
||||
// ── Primordial Chaos ──────────────────────────────────────────────────────
|
||||
{
|
||||
bonus: { goldMultiplier: 9 },
|
||||
description:
|
||||
"The Primordial Titan's carapace — formed before the concept of armour existed. It simply is what armour aspires to be.",
|
||||
equipped: false,
|
||||
id: "chaos_mantle",
|
||||
name: "The Chaos Mantle",
|
||||
owned: false,
|
||||
rarity: "legendary",
|
||||
setId: "primordial_chaos",
|
||||
type: "armour",
|
||||
},
|
||||
{
|
||||
bonus: { clickMultiplier: 5, combatMultiplier: 2, goldMultiplier: 2.5 },
|
||||
description:
|
||||
"The crystallised core of the Titan itself — the first stable thing to emerge from chaos. It radiates in every direction simultaneously.",
|
||||
equipped: false,
|
||||
id: "titan_core",
|
||||
name: "The Titan Core",
|
||||
owned: false,
|
||||
rarity: "legendary",
|
||||
setId: "primordial_chaos",
|
||||
type: "trinket",
|
||||
},
|
||||
// ── Infinite Expanse ──────────────────────────────────────────────────────
|
||||
{
|
||||
bonus: { combatMultiplier: 14 },
|
||||
description:
|
||||
"Forged from the Expanse Sovereign's own reach — a blade that has no beginning and no end, only edge.",
|
||||
equipped: false,
|
||||
id: "expanse_blade",
|
||||
name: "The Expanse Blade",
|
||||
owned: false,
|
||||
rarity: "legendary",
|
||||
setId: "infinite_expanse",
|
||||
type: "weapon",
|
||||
},
|
||||
{
|
||||
bonus: { goldMultiplier: 10 },
|
||||
description:
|
||||
"A second iteration of the void's armour — the first was not enough. This one has never been tested to its limit.",
|
||||
equipped: false,
|
||||
id: "void_armour_mk2",
|
||||
name: "Void Armour Mk. II",
|
||||
owned: false,
|
||||
rarity: "legendary",
|
||||
setId: "infinite_expanse",
|
||||
type: "armour",
|
||||
},
|
||||
// ── Reality Forge ─────────────────────────────────────────────────────────
|
||||
{
|
||||
bonus: { combatMultiplier: 16 },
|
||||
description:
|
||||
"The Reality Architect's primary instrument — a sword that does not cut through things but rewrites what they are.",
|
||||
equipped: false,
|
||||
id: "cosmos_blade",
|
||||
name: "The Cosmos Blade",
|
||||
owned: false,
|
||||
rarity: "legendary",
|
||||
setId: "reality_forge",
|
||||
type: "weapon",
|
||||
},
|
||||
{
|
||||
bonus: { goldMultiplier: 12 },
|
||||
description:
|
||||
"Plated from the substance of reality itself — wearing it makes you feel slightly more real than everything around you.",
|
||||
equipped: false,
|
||||
id: "reality_plate",
|
||||
name: "The Reality Plate",
|
||||
owned: false,
|
||||
rarity: "legendary",
|
||||
setId: "reality_forge",
|
||||
type: "armour",
|
||||
},
|
||||
// ── Cosmic Maelstrom ──────────────────────────────────────────────────────
|
||||
{
|
||||
bonus: { combatMultiplier: 18 },
|
||||
description:
|
||||
"Torn from the eye of the Cosmic Annihilator — a weapon that carries the force of an ending universe in every swing.",
|
||||
equipped: false,
|
||||
id: "maelstrom_edge",
|
||||
name: "The Maelstrom Edge",
|
||||
owned: false,
|
||||
rarity: "legendary",
|
||||
setId: "cosmic_maelstrom",
|
||||
type: "weapon",
|
||||
},
|
||||
{
|
||||
bonus: { goldMultiplier: 14 },
|
||||
description:
|
||||
"Armour that has weathered the destruction of countless realities. It has learned not to flinch.",
|
||||
equipped: false,
|
||||
id: "cosmic_plate",
|
||||
name: "The Cosmic Plate",
|
||||
owned: false,
|
||||
rarity: "legendary",
|
||||
setId: "cosmic_maelstrom",
|
||||
type: "armour",
|
||||
},
|
||||
// ── Primeval Sanctum ──────────────────────────────────────────────────────
|
||||
{
|
||||
bonus: { combatMultiplier: 22 },
|
||||
description:
|
||||
"The first weapon — older than the concept of war, older than the concept of a weapon. It remembers what it was made for.",
|
||||
equipped: false,
|
||||
id: "primeval_blade",
|
||||
name: "The Primeval Blade",
|
||||
owned: false,
|
||||
rarity: "legendary",
|
||||
setId: "primeval_sanctum",
|
||||
type: "weapon",
|
||||
},
|
||||
{
|
||||
bonus: { goldMultiplier: 17 },
|
||||
description:
|
||||
"The shield-form of the Primeval God — absolute protection from before the concept of harm existed.",
|
||||
equipped: false,
|
||||
id: "ancient_aegis",
|
||||
name: "The Ancient Aegis",
|
||||
owned: false,
|
||||
rarity: "legendary",
|
||||
setId: "primeval_sanctum",
|
||||
type: "armour",
|
||||
},
|
||||
// ── The Absolute ──────────────────────────────────────────────────────────
|
||||
{
|
||||
bonus: { combatMultiplier: 28 },
|
||||
description:
|
||||
"There is no name for what this was before it became a sword. There is no name for what it is now. It ends things.",
|
||||
equipped: false,
|
||||
id: "absolute_blade",
|
||||
name: "The Absolute Blade",
|
||||
owned: false,
|
||||
rarity: "legendary",
|
||||
setId: "the_absolute",
|
||||
type: "weapon",
|
||||
},
|
||||
{
|
||||
bonus: { goldMultiplier: 20 },
|
||||
description:
|
||||
"Eternity given the shape of armour — it has always existed, it will always exist, and it has always protected its wearer.",
|
||||
equipped: false,
|
||||
id: "eternity_plate",
|
||||
name: "The Eternity Plate",
|
||||
owned: false,
|
||||
rarity: "legendary",
|
||||
setId: "the_absolute",
|
||||
type: "armour",
|
||||
},
|
||||
{
|
||||
bonus: { clickMultiplier: 6, combatMultiplier: 3, goldMultiplier: 3 },
|
||||
description:
|
||||
"The heart of everything — a thing so fundamental that its removal from the Absolute One ended all things, briefly. Briefly.",
|
||||
equipped: false,
|
||||
id: "omniversal_core",
|
||||
name: "The Omniversal Core",
|
||||
owned: false,
|
||||
rarity: "legendary",
|
||||
setId: "the_absolute",
|
||||
type: "trinket",
|
||||
},
|
||||
// ── Purchasable endgame sinks ─────────────────────────────────────────────
|
||||
{
|
||||
bonus: { clickMultiplier: 4.25 },
|
||||
@@ -919,7 +757,7 @@ export const defaultEquipment: Array<Equipment> = [
|
||||
type: "armour",
|
||||
},
|
||||
{
|
||||
bonus: { clickMultiplier: 5, combatMultiplier: 3, goldMultiplier: 2.5 },
|
||||
bonus: { clickMultiplier: 5, combatMultiplier: 1.75, goldMultiplier: 2 },
|
||||
cost: { crystals: 100_000_000, essence: 0, gold: 0 },
|
||||
description:
|
||||
"An artifact from beyond all known planes — it refracts power through all dimensions simultaneously.",
|
||||
|
||||
+68
-68
@@ -265,9 +265,9 @@ export const defaultQuests: Array<Quest> = [
|
||||
name: "The Sunken Temple",
|
||||
prerequisiteIds: [ "witch_coven" ],
|
||||
rewards: [
|
||||
{ amount: 60_000_000, type: "gold" },
|
||||
{ amount: 25_000, type: "essence" },
|
||||
{ amount: 400, type: "crystals" },
|
||||
{ amount: 2_000_000, type: "gold" },
|
||||
{ amount: 1500, type: "essence" },
|
||||
{ amount: 75, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "shadow_marshes",
|
||||
@@ -643,7 +643,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 2_000_000_000_000_000, type: "gold" },
|
||||
{ amount: 600_000_000_000, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1_000_000_000, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "infernal_court",
|
||||
@@ -659,7 +659,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 6_000_000_000_000_000, type: "gold" },
|
||||
{ amount: 2_000_000_000_000, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 3_000_000_000, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "infernal_court",
|
||||
@@ -675,7 +675,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 2e16, type: "gold" },
|
||||
{ amount: 6_000_000_000_000, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 8_000_000_000, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "infernal_court",
|
||||
@@ -691,7 +691,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 6e16, type: "gold" },
|
||||
{ amount: 2e13, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 2.5e10, type: "crystals" },
|
||||
{ targetId: "infernal_warden_1", type: "upgrade" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -708,7 +708,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 2e17, type: "gold" },
|
||||
{ amount: 6e13, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 8e10, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "infernal_court",
|
||||
@@ -741,7 +741,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 2e18, type: "gold" },
|
||||
{ amount: 8e14, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 3e12, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "crystalline_spire",
|
||||
@@ -757,7 +757,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 8e18, type: "gold" },
|
||||
{ amount: 3e15, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1e13, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "crystalline_spire",
|
||||
@@ -773,7 +773,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 3e19, type: "gold" },
|
||||
{ amount: 1e16, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 4e13, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "crystalline_spire",
|
||||
@@ -789,7 +789,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1e20, type: "gold" },
|
||||
{ amount: 4e16, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1.5e14, type: "crystals" },
|
||||
{ targetId: "crystal_sage_1", type: "upgrade" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -806,7 +806,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 4e20, type: "gold" },
|
||||
{ amount: 1.5e17, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 5e14, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "crystalline_spire",
|
||||
@@ -839,7 +839,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 5e21, type: "gold" },
|
||||
{ amount: 2e18, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 2e15, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "void_sanctum",
|
||||
@@ -855,7 +855,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 2e22, type: "gold" },
|
||||
{ amount: 8e18, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 8e15, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "void_sanctum",
|
||||
@@ -871,7 +871,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 8e22, type: "gold" },
|
||||
{ amount: 3e19, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 3e16, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "void_sanctum",
|
||||
@@ -887,7 +887,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 3e23, type: "gold" },
|
||||
{ amount: 1e20, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1e17, type: "crystals" },
|
||||
{ targetId: "void_sentinel_1", type: "upgrade" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -904,7 +904,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1e24, type: "gold" },
|
||||
{ amount: 4e20, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 4e17, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "void_sanctum",
|
||||
@@ -937,7 +937,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1e25, type: "gold" },
|
||||
{ amount: 4e21, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1.5e18, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "eternal_throne",
|
||||
@@ -953,7 +953,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 4e25, type: "gold" },
|
||||
{ amount: 1.5e22, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 5e18, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "eternal_throne",
|
||||
@@ -969,7 +969,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1.5e26, type: "gold" },
|
||||
{ amount: 6e22, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 2e19, type: "crystals" },
|
||||
{ targetId: "eternal_champion_1", type: "upgrade" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -986,7 +986,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 6e26, type: "gold" },
|
||||
{ amount: 2.5e23, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 8e19, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "eternal_throne",
|
||||
@@ -1002,7 +1002,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 3e27, type: "gold" },
|
||||
{ amount: 1e24, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 4e20, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "eternal_throne",
|
||||
@@ -1035,7 +1035,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 4e28, type: "gold" },
|
||||
{ amount: 1.5e25, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 5e21, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "primordial_chaos",
|
||||
@@ -1051,7 +1051,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 2e29, type: "gold" },
|
||||
{ amount: 8e25, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 2e22, type: "crystals" },
|
||||
{ targetId: "titan_warrior", type: "adventurer" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -1068,7 +1068,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1e30, type: "gold" },
|
||||
{ amount: 4e26, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 8e22, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "primordial_chaos",
|
||||
@@ -1084,7 +1084,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 6e30, type: "gold" },
|
||||
{ amount: 2e27, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 4e23, type: "crystals" },
|
||||
{ targetId: "titan_warrior_1", type: "upgrade" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -1101,7 +1101,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 3e31, type: "gold" },
|
||||
{ amount: 1e28, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 2e24, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "primordial_chaos",
|
||||
@@ -1134,7 +1134,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 6e34, type: "gold" },
|
||||
{ amount: 2e31, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 5e27, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "infinite_expanse",
|
||||
@@ -1150,7 +1150,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 3e36, type: "gold" },
|
||||
{ amount: 1e33, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 2.5e29, type: "crystals" },
|
||||
{ targetId: "cosmos_knight", type: "adventurer" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -1167,7 +1167,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1.5e38, type: "gold" },
|
||||
{ amount: 5e34, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1e31, type: "crystals" },
|
||||
{ targetId: "nexus_sage_1", type: "upgrade" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -1184,7 +1184,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 8e39, type: "gold" },
|
||||
{ amount: 2.5e36, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 5e32, type: "crystals" },
|
||||
{ targetId: "cosmos_knight_1", type: "upgrade" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -1201,7 +1201,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 4e41, type: "gold" },
|
||||
{ amount: 1.2e38, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 2.5e34, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "infinite_expanse",
|
||||
@@ -1234,7 +1234,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1e46, type: "gold" },
|
||||
{ amount: 3e42, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 2e38, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "reality_forge",
|
||||
@@ -1250,7 +1250,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 5e47, type: "gold" },
|
||||
{ amount: 1.5e44, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1e40, type: "crystals" },
|
||||
{ targetId: "primordial_mage", type: "adventurer" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -1267,7 +1267,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 2.5e49, type: "gold" },
|
||||
{ amount: 8e45, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 5e41, type: "crystals" },
|
||||
{ targetId: "primordial_mage_1", type: "upgrade" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -1284,7 +1284,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1.2e51, type: "gold" },
|
||||
{ amount: 4e47, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 2.5e43, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "reality_forge",
|
||||
@@ -1300,7 +1300,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 6e52, type: "gold" },
|
||||
{ amount: 2e49, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1.2e45, type: "crystals" },
|
||||
{ targetId: "astral_sovereign_1", type: "upgrade" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -1317,7 +1317,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 5e62, type: "gold" },
|
||||
{ amount: 1.5e59, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 8e54, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "reality_forge",
|
||||
@@ -1333,7 +1333,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 2e67, type: "gold" },
|
||||
{ amount: 6e63, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 3e59, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "reality_forge",
|
||||
@@ -1349,7 +1349,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1e72, type: "gold" },
|
||||
{ amount: 3e68, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1.5e64, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "reality_forge",
|
||||
@@ -1382,7 +1382,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1.5e58, type: "gold" },
|
||||
{ amount: 5e54, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 3e50, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "cosmic_maelstrom",
|
||||
@@ -1398,7 +1398,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 8e60, type: "gold" },
|
||||
{ amount: 2.5e57, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1.5e53, type: "crystals" },
|
||||
{ targetId: "infinity_ranger", type: "adventurer" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -1415,7 +1415,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 4e63, type: "gold" },
|
||||
{ amount: 1.2e60, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 7e55, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "cosmic_maelstrom",
|
||||
@@ -1431,7 +1431,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 2e66, type: "gold" },
|
||||
{ amount: 6e62, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 3.5e58, type: "crystals" },
|
||||
{ targetId: "reality_warden_1", type: "upgrade" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -1448,7 +1448,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1e69, type: "gold" },
|
||||
{ amount: 3e65, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1.8e61, type: "crystals" },
|
||||
{ targetId: "infinity_ranger_1", type: "upgrade" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -1465,7 +1465,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 5e76, type: "gold" },
|
||||
{ amount: 1.5e73, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 8e68, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "cosmic_maelstrom",
|
||||
@@ -1481,7 +1481,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 2e83, type: "gold" },
|
||||
{ amount: 6e79, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 3e75, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "cosmic_maelstrom",
|
||||
@@ -1497,7 +1497,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1e90, type: "gold" },
|
||||
{ amount: 3e86, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1.5e82, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "cosmic_maelstrom",
|
||||
@@ -1530,7 +1530,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 2.5e76, type: "gold" },
|
||||
{ amount: 7e72, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 4e68, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "primeval_sanctum",
|
||||
@@ -1546,7 +1546,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1.2e80, type: "gold" },
|
||||
{ amount: 3.5e76, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 2e72, type: "crystals" },
|
||||
{ targetId: "transcendent_rogue", type: "adventurer" },
|
||||
],
|
||||
status: "locked",
|
||||
@@ -1563,7 +1563,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 6e83, type: "gold" },
|
||||
{ amount: 1.8e80, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1e76, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "primeval_sanctum",
|
||||
@@ -1579,7 +1579,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 3e87, type: "gold" },
|
||||
{ amount: 9e83, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 5e79, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "primeval_sanctum",
|
||||
@@ -1595,7 +1595,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1.5e91, type: "gold" },
|
||||
{ amount: 4.5e87, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 2.5e83, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "primeval_sanctum",
|
||||
@@ -1611,7 +1611,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 8e95, type: "gold" },
|
||||
{ amount: 2.5e92, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1e88, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "primeval_sanctum",
|
||||
@@ -1627,7 +1627,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 4e102, type: "gold" },
|
||||
{ amount: 1.2e99, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 5e94, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "primeval_sanctum",
|
||||
@@ -1643,7 +1643,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 2e109, type: "gold" },
|
||||
{ amount: 6e105, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 2.5e101, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "primeval_sanctum",
|
||||
@@ -1676,7 +1676,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 4e101, type: "gold" },
|
||||
{ amount: 1.2e98, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 6e93, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "the_absolute",
|
||||
@@ -1692,7 +1692,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 2e108, type: "gold" },
|
||||
{ amount: 6e104, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 3e100, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "the_absolute",
|
||||
@@ -1708,7 +1708,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1e115, type: "gold" },
|
||||
{ amount: 3e111, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1.5e107, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "the_absolute",
|
||||
@@ -1724,7 +1724,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 5e121, type: "gold" },
|
||||
{ amount: 1.5e118, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 7e113, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "the_absolute",
|
||||
@@ -1740,7 +1740,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 3e130, type: "gold" },
|
||||
{ amount: 9e126, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 4e122, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "the_absolute",
|
||||
@@ -1756,7 +1756,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1e118, type: "gold" },
|
||||
{ amount: 3e114, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1.5e110, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "the_absolute",
|
||||
@@ -1772,7 +1772,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 5e124, type: "gold" },
|
||||
{ amount: 1.5e121, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 7e116, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "the_absolute",
|
||||
@@ -1788,7 +1788,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 2e131, type: "gold" },
|
||||
{ amount: 6e127, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 3e123, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "the_absolute",
|
||||
@@ -1804,7 +1804,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 1e137, type: "gold" },
|
||||
{ amount: 3e133, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 1.5e129, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "the_absolute",
|
||||
@@ -1820,7 +1820,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 5e143, type: "gold" },
|
||||
{ amount: 1.5e140, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 7e135, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "the_absolute",
|
||||
@@ -1836,7 +1836,7 @@ export const defaultQuests: Array<Quest> = [
|
||||
rewards: [
|
||||
{ amount: 2e150, type: "gold" },
|
||||
{ amount: 6e146, type: "essence" },
|
||||
{ amount: 0, type: "crystals" },
|
||||
{ amount: 3e142, type: "crystals" },
|
||||
],
|
||||
status: "locked",
|
||||
zoneId: "the_absolute",
|
||||
|
||||
@@ -8,4 +8,4 @@
|
||||
/**
|
||||
* The current game state schema version. Bump this whenever a breaking change is made to GameState.
|
||||
*/
|
||||
export const currentSchemaVersion = 2;
|
||||
export const currentSchemaVersion = 1;
|
||||
|
||||
@@ -104,7 +104,7 @@ export const defaultUpgrades: Array<Upgrade> = [
|
||||
description:
|
||||
"Forge partnerships with mage guilds across the realm. All income +50%.",
|
||||
id: "essence_guild",
|
||||
multiplier: 2,
|
||||
multiplier: 1.5,
|
||||
name: "Essence Guild",
|
||||
purchased: false,
|
||||
target: "global",
|
||||
@@ -459,7 +459,7 @@ export const defaultUpgrades: Array<Upgrade> = [
|
||||
unlocked: false,
|
||||
},
|
||||
{
|
||||
costCrystals: 50_000_000,
|
||||
costCrystals: 10_000_000,
|
||||
costEssence: 0,
|
||||
costGold: 0,
|
||||
description: "Transcend mortal limits through void energy. All income x3.",
|
||||
|
||||
@@ -24,7 +24,7 @@ vi.mock("../../src/services/discord.js", () => ({
|
||||
}));
|
||||
|
||||
const DISCORD_ID = "test_discord_id";
|
||||
const CURRENT_SCHEMA_VERSION = 2;
|
||||
const CURRENT_SCHEMA_VERSION = 1;
|
||||
|
||||
const makeState = (overrides: Partial<GameState> = {}): GameState => ({
|
||||
player: { discordId: DISCORD_ID, username: "u", discriminator: "0", avatar: null, totalGoldEarned: 0, totalClicks: 0, characterName: "T" },
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@elysium/web",
|
||||
"version": "0.4.0",
|
||||
"version": "0.3.2",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
+14
-19
@@ -11,6 +11,7 @@
|
||||
/* eslint-disable max-lines -- Engine file necessarily exceeds line limit */
|
||||
/* eslint-disable import/group-exports -- Exports appear alongside their definitions for readability */
|
||||
/* eslint-disable import/exports-last -- Exports appear alongside their definitions for readability */
|
||||
/* eslint-disable unicorn/no-array-reduce -- reduce is the most readable approach for multiplier chains */
|
||||
/* eslint-disable max-nested-callbacks -- Tick engine requires nested array operations for game logic */
|
||||
import {
|
||||
type Achievement,
|
||||
@@ -817,30 +818,24 @@ export const applyTick = (
|
||||
zones: updatedZones,
|
||||
};
|
||||
|
||||
// Check achievements and apply crystal and runestone rewards for newly unlocked ones
|
||||
// Check achievements and apply crystal rewards for newly unlocked ones
|
||||
const updatedAchievements = checkAchievements(partialState);
|
||||
let crystalsFromAchievements = 0;
|
||||
let runestonesFromAchievements = 0;
|
||||
for (const [ index, achievement ] of updatedAchievements.entries()) {
|
||||
const wasLocked = state.achievements[index]?.unlockedAt === null;
|
||||
const isNowUnlocked = achievement.unlockedAt !== null;
|
||||
if (wasLocked && isNowUnlocked) {
|
||||
crystalsFromAchievements
|
||||
= crystalsFromAchievements + (achievement.reward?.crystals ?? 0);
|
||||
runestonesFromAchievements
|
||||
= runestonesFromAchievements + (achievement.reward?.runestones ?? 0);
|
||||
}
|
||||
}
|
||||
const crystalsFromAchievements = updatedAchievements.reduce(
|
||||
(sum, achievement, index) => {
|
||||
const wasLocked = state.achievements[index]?.unlockedAt === null;
|
||||
const isNowUnlocked = achievement.unlockedAt !== null;
|
||||
if (wasLocked && isNowUnlocked) {
|
||||
return sum + (achievement.reward?.crystals ?? 0);
|
||||
}
|
||||
return sum;
|
||||
},
|
||||
0,
|
||||
);
|
||||
|
||||
return {
|
||||
...partialState,
|
||||
achievements: updatedAchievements,
|
||||
prestige: {
|
||||
...partialState.prestige,
|
||||
runestones:
|
||||
partialState.prestige.runestones + runestonesFromAchievements,
|
||||
},
|
||||
resources: {
|
||||
resources: {
|
||||
...partialState.resources,
|
||||
crystals: capResource(
|
||||
partialState.resources.crystals + crystalsFromAchievements,
|
||||
|
||||
@@ -49,18 +49,6 @@ const initialiseFrontendLogger = (): void => {
|
||||
? argument
|
||||
: JSON.stringify(argument);
|
||||
}).join(" ");
|
||||
|
||||
/*
|
||||
* Ignore errors originating entirely from third-party scripts (e.g. AdSense).
|
||||
* Stack frames from our own code reference elysium.nhcarrigan.com or localhost;
|
||||
* if none are present but external URLs are, the error is not actionable.
|
||||
*/
|
||||
const hasExternalUrl = (/https?:\/\//u).test(message);
|
||||
const hasOurDomain = message.includes("elysium.nhcarrigan.com");
|
||||
const hasOwnFrame = hasOurDomain || message.includes("localhost");
|
||||
if (hasExternalUrl && !hasOwnFrame) {
|
||||
return;
|
||||
}
|
||||
const context = "console.error";
|
||||
post("/api/fe/error", { context, message });
|
||||
};
|
||||
|
||||
-150
@@ -1,150 +0,0 @@
|
||||
/**
|
||||
* Dev Puppeteer script — intercepts /api/game/load and injects a fresh
|
||||
* game state built from the actual compiled data files, so we can browse
|
||||
* the game UI without auth or a real DB record.
|
||||
*/
|
||||
import puppeteer from "puppeteer";
|
||||
import { createRequire } from "module";
|
||||
|
||||
const require = createRequire(import.meta.url);
|
||||
|
||||
// Load actual game data from compiled API output
|
||||
const { defaultAchievements } = require("./apps/api/prod/src/data/achievements.js");
|
||||
const { defaultEquipment } = require("./apps/api/prod/src/data/equipment.js");
|
||||
const { defaultBosses } = require("./apps/api/prod/src/data/bosses.js");
|
||||
const { defaultQuests } = require("./apps/api/prod/src/data/quests.js");
|
||||
const { defaultAdventurers } = require("./apps/api/prod/src/data/adventurers.js");
|
||||
const { defaultUpgrades } = require("./apps/api/prod/src/data/upgrades.js");
|
||||
const { defaultZones } = require("./apps/api/prod/src/data/zones.js");
|
||||
|
||||
console.log("📦 Data loaded:");
|
||||
console.log(` achievements : ${defaultAchievements.length}`);
|
||||
console.log(` equipment : ${defaultEquipment.length}`);
|
||||
console.log(` bosses : ${defaultBosses.length}`);
|
||||
console.log(` quests : ${defaultQuests.length}`);
|
||||
|
||||
// Spot-check for our new items
|
||||
const newEquipIds = [
|
||||
"chaos_mantle", "titan_core", "expanse_blade", "void_armour_mk2",
|
||||
"cosmos_blade", "reality_plate", "maelstrom_edge", "cosmic_plate",
|
||||
"primeval_blade", "ancient_aegis", "absolute_blade", "eternity_plate",
|
||||
"omniversal_core",
|
||||
];
|
||||
const foundNew = newEquipIds.filter(id => defaultEquipment.some(e => e.id === id));
|
||||
const missingNew = newEquipIds.filter(id => !defaultEquipment.some(e => e.id === id));
|
||||
console.log(`\n🗡️ New equipment found (${foundNew.length}/13): ${foundNew.join(", ")}`);
|
||||
if (missingNew.length > 0) console.log(` ❌ Missing: ${missingNew.join(", ")}`);
|
||||
|
||||
const questEternal = defaultAchievements.find(a => a.id === "quest_eternal");
|
||||
const fullyEquipped = defaultAchievements.find(a => a.id === "fully_equipped");
|
||||
console.log(`\n🏆 quest_eternal condition amount : ${questEternal?.condition?.amount}`);
|
||||
console.log(`🏆 fully_equipped condition amount: ${fullyEquipped?.condition?.amount}`);
|
||||
|
||||
// Build a minimal but valid mock game state
|
||||
const mockState = {
|
||||
achievements : defaultAchievements,
|
||||
adventurers : defaultAdventurers,
|
||||
baseClickPower: 1,
|
||||
bosses : defaultBosses,
|
||||
equipment : defaultEquipment,
|
||||
lastTickAt : Date.now(),
|
||||
player : {
|
||||
avatar : null,
|
||||
characterName : "Hikari Test",
|
||||
createdAt : Date.now(),
|
||||
discordId : "000000000000000001",
|
||||
discriminator : "0",
|
||||
lastSavedAt : Date.now(),
|
||||
lifetimeAchievementsUnlocked: 0,
|
||||
lifetimeAdventurersRecruited: 0,
|
||||
lifetimeBossesDefeated : 0,
|
||||
lifetimeClicks : 0,
|
||||
lifetimeGoldEarned : 0,
|
||||
lifetimeQuestsCompleted : 0,
|
||||
totalClicks : 0,
|
||||
totalGoldEarned : 0,
|
||||
username : "HikariTest",
|
||||
},
|
||||
prestige : {
|
||||
count : 0,
|
||||
runestones : 0,
|
||||
},
|
||||
quests : defaultQuests,
|
||||
resources : {
|
||||
crystals : 0,
|
||||
essence : 0,
|
||||
gold : 0,
|
||||
},
|
||||
upgrades : defaultUpgrades,
|
||||
zones : defaultZones,
|
||||
};
|
||||
|
||||
const mockLoadResponse = {
|
||||
currentSchemaVersion: 1,
|
||||
inGuild : true,
|
||||
loginBonus : null,
|
||||
loginStreak : 0,
|
||||
offlineEssence : 0,
|
||||
offlineGold : 0,
|
||||
offlineSeconds : 0,
|
||||
schemaOutdated : false,
|
||||
signature : undefined,
|
||||
state : mockState,
|
||||
};
|
||||
|
||||
console.log("\n🌐 Launching browser...");
|
||||
const browser = await puppeteer.launch({
|
||||
args : ["--no-sandbox", "--disable-setuid-sandbox"],
|
||||
headless: false,
|
||||
});
|
||||
|
||||
const page = await browser.newPage();
|
||||
await page.setViewport({ height: 900, width: 1400 });
|
||||
|
||||
// Intercept the game load call and inject our mock state
|
||||
await page.setRequestInterception(true);
|
||||
page.on("request", (req) => {
|
||||
if (req.url().includes("/api/game/load") && req.method() === "GET") {
|
||||
console.log(" ↩️ Intercepted /api/game/load — injecting mock state");
|
||||
req.respond({
|
||||
body : JSON.stringify(mockLoadResponse),
|
||||
contentType : "application/json",
|
||||
headers : { "Content-Type": "application/json" },
|
||||
status : 200,
|
||||
});
|
||||
} else {
|
||||
req.continue();
|
||||
}
|
||||
});
|
||||
|
||||
// Set a fake token so the frontend thinks we're logged in
|
||||
await page.evaluateOnNewDocument(() => {
|
||||
localStorage.setItem("elysium_token", "dev.fake.token");
|
||||
});
|
||||
|
||||
console.log(" 🔗 Navigating to http://localhost:5173 ...");
|
||||
await page.goto("http://localhost:5173", { waitUntil: "networkidle2" });
|
||||
|
||||
// Give the game a moment to tick and render
|
||||
await new Promise(r => setTimeout(r, 3000));
|
||||
|
||||
await page.screenshot({ path: "/tmp/elysium-01-game.png" });
|
||||
console.log(" 📸 Screenshot: /tmp/elysium-01-game.png");
|
||||
|
||||
// Try to find the equipment panel
|
||||
const equipmentTab = await page.$("button, a, [role='tab']");
|
||||
console.log(`\n🔍 Checking page title: ${await page.title()}`);
|
||||
|
||||
// Log any visible text that mentions our new items
|
||||
const pageText = await page.evaluate(() => document.body.innerText);
|
||||
const newItemsVisible = newEquipIds.filter(id => pageText.toLowerCase().includes(id.replace(/_/g, " ").toLowerCase().slice(0, 8)));
|
||||
console.log(`\n🗡️ New item names visible in UI: ${newItemsVisible.length > 0 ? newItemsVisible.join(", ") : "none yet (may need to navigate to equipment panel)"}`);
|
||||
|
||||
// Check achievement counts visible in page
|
||||
const hasQuestEternal = pageText.includes("112");
|
||||
const hasFullyEquipped = pageText.includes("78");
|
||||
console.log(` quest_eternal (112) visible: ${hasQuestEternal}`);
|
||||
console.log(` fully_equipped (78) visible: ${hasFullyEquipped}`);
|
||||
|
||||
console.log("\n✅ Browser open — take a look around! Close it when done.");
|
||||
console.log(" (or Ctrl+C to exit)\n");
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "elysium",
|
||||
"version": "0.4.0",
|
||||
"version": "0.3.2",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
@@ -11,6 +11,6 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nhcarrigan/typescript-config": "4.0.0",
|
||||
"typescript": "6.0.2"
|
||||
"typescript": "5.9.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@elysium/types",
|
||||
"version": "0.4.0",
|
||||
"version": "0.3.2",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"main": "./prod/src/index.js",
|
||||
|
||||
@@ -20,8 +20,7 @@ interface AchievementCondition {
|
||||
}
|
||||
|
||||
interface AchievementReward {
|
||||
crystals?: number;
|
||||
runestones?: number;
|
||||
crystals?: number;
|
||||
}
|
||||
|
||||
interface Achievement {
|
||||
|
||||
Generated
+8
-8
@@ -10,10 +10,10 @@ importers:
|
||||
devDependencies:
|
||||
'@nhcarrigan/typescript-config':
|
||||
specifier: 4.0.0
|
||||
version: 4.0.0(typescript@6.0.2)
|
||||
version: 4.0.0(typescript@5.9.3)
|
||||
typescript:
|
||||
specifier: 6.0.2
|
||||
version: 6.0.2
|
||||
specifier: 5.9.3
|
||||
version: 5.9.3
|
||||
|
||||
apps/api:
|
||||
dependencies:
|
||||
@@ -2833,8 +2833,8 @@ packages:
|
||||
engines: {node: '>=14.17'}
|
||||
hasBin: true
|
||||
|
||||
typescript@6.0.2:
|
||||
resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==}
|
||||
typescript@5.9.3:
|
||||
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
|
||||
engines: {node: '>=14.17'}
|
||||
hasBin: true
|
||||
|
||||
@@ -3507,9 +3507,9 @@ snapshots:
|
||||
dependencies:
|
||||
typescript: 5.8.2
|
||||
|
||||
'@nhcarrigan/typescript-config@4.0.0(typescript@6.0.2)':
|
||||
'@nhcarrigan/typescript-config@4.0.0(typescript@5.9.3)':
|
||||
dependencies:
|
||||
typescript: 6.0.2
|
||||
typescript: 5.9.3
|
||||
|
||||
'@nodelib/fs.scandir@2.1.5':
|
||||
dependencies:
|
||||
@@ -6147,7 +6147,7 @@ snapshots:
|
||||
|
||||
typescript@5.8.2: {}
|
||||
|
||||
typescript@6.0.2: {}
|
||||
typescript@5.9.3: {}
|
||||
|
||||
unbox-primitive@1.1.0:
|
||||
dependencies:
|
||||
|
||||
Reference in New Issue
Block a user