From bfeb5cabc17ed919173310f0815990eb0ba21d85 Mon Sep 17 00:00:00 2001 From: TastyPumPum Date: Sat, 6 Apr 2024 18:13:10 +0100 Subject: [PATCH] Wilderness Slayer Cave Tables Adds the wilderness slayer cave tables for all the relevant npcs --- .../monsters/low/a-f/AbyssalDemon.ts | 4 ++- src/simulation/monsters/low/a-f/Ankou.ts | 4 ++- src/simulation/monsters/low/a-f/BlackDemon.ts | 28 +++++++++++++++++ .../monsters/low/a-f/BlackDragon.ts | 28 +++++++++++++++++ src/simulation/monsters/low/a-f/DustDevil.ts | 28 +++++++++++++++++ .../monsters/low/g-m/GreaterDemon.ts | 28 +++++++++++++++++ .../monsters/low/g-m/GreaterNechryael.ts | 30 +++++++++++++++++++ .../monsters/low/g-m/GreenDragon.ts | 28 +++++++++++++++++ src/simulation/monsters/low/g-m/Hellhound.ts | 28 +++++++++++++++++ src/simulation/monsters/low/g-m/IceGiant.ts | 28 +++++++++++++++++ src/simulation/monsters/low/g-m/Jelly.ts | 28 +++++++++++++++++ .../monsters/low/g-m/LesserDemon.ts | 28 +++++++++++++++++ src/structures/SimpleMonster.ts | 17 ++++++----- 13 files changed, 298 insertions(+), 9 deletions(-) diff --git a/src/simulation/monsters/low/a-f/AbyssalDemon.ts b/src/simulation/monsters/low/a-f/AbyssalDemon.ts index d4caf2364..081fc353d 100644 --- a/src/simulation/monsters/low/a-f/AbyssalDemon.ts +++ b/src/simulation/monsters/low/a-f/AbyssalDemon.ts @@ -73,15 +73,17 @@ const AbyssalDemonTable = new LootTable() .every(AbyssalDemonPreTable) /* Tertiary */ - .tertiary(1.25, WildySlayerCaveTable) .tertiary(25, "Ensouled abyssal head") .tertiary(128, "Clue scroll (hard)") .tertiary(1200, "Clue scroll (elite)") .tertiary(6000, "Abyssal head"); +const AbyssalDemonWildyCaveTable = new LootTable().every(AbyssalDemonTable).tertiary(1.25, WildySlayerCaveTable); + export default new SimpleMonster({ id: 415, name: "Abyssal Demon", table: AbyssalDemonTable, + wildyCaveTable: AbyssalDemonWildyCaveTable, aliases: ["abbys", "abby demon", "abby demons", "abyssal demons", "abyssal demon"], }); diff --git a/src/simulation/monsters/low/a-f/Ankou.ts b/src/simulation/monsters/low/a-f/Ankou.ts index 2dc1cffdd..f7792d4ef 100644 --- a/src/simulation/monsters/low/a-f/Ankou.ts +++ b/src/simulation/monsters/low/a-f/Ankou.ts @@ -68,12 +68,14 @@ const AnkouTable = new LootTable({ limit: 100 }) .add(GemTable, 1, 2) /* Tertiary */ - .tertiary(1.51, WildySlayerCaveTable) .tertiary(512, "Clue scroll (hard)"); +const AnkouWildyCaveTable = new LootTable().every(AnkouTable).tertiary(1.51, WildySlayerCaveTable); + export default new SimpleMonster({ id: 2514, name: "Ankou", table: AnkouTable, + wildyCaveTable: AnkouWildyCaveTable, aliases: ["ankou", "ank"], }); diff --git a/src/simulation/monsters/low/a-f/BlackDemon.ts b/src/simulation/monsters/low/a-f/BlackDemon.ts index 6b87db580..5f16662fd 100644 --- a/src/simulation/monsters/low/a-f/BlackDemon.ts +++ b/src/simulation/monsters/low/a-f/BlackDemon.ts @@ -3,6 +3,31 @@ import SimpleMonster from "../../../../structures/SimpleMonster"; import HerbDropTable from "../../../subtables/HerbDropTable"; import RareDropTable, { GemTable } from "../../../subtables/RareDropTable"; +const WildySlayerCaveTable = new LootTable() + .add("Blighted entangle sack", [1, 10], 61) + .add("Blighted anglerfish", [1, 2], 81) + .add("Blighted manta ray", [1, 2], 81) + .add("Blighted karambwan", [1, 2], 122) + .add("Blighted teleport spell sack", [1, 10], 122) + .add("Blighted ancient spell sack", [1, 10], 122) + .add("Blighted vengeance spell sack", [1, 10], 122) + .add("Blighted super restore(4)", 1, 244) + .add("Revenant cave teleport", 1, 244) + .add("Dareeyak teleport (tablet)", 1, 1220) + .add("Wilderness crabs teleport", 1, 1220) + .add("Carrallanger teleport (tablet)", 1, 1220) + .add("Paddewwa teleport (tablet)", 1, 1220) + .add("Annakarl teleport (tablet)", 1, 1220) + .add("Lassar teleport (tablet)", 1, 1220) + .add("Kharyrll teleport (tablet)", 1, 1220) + .add("Senntisten teleport (tablet)", 1, 1220) + .add("Ghorrock teleport (tablet)", 1, 1220) + .add("Target teleport", 1, 1220) + .add("Magic shortbow scroll", 1, 3049) + .add("Ring of wealth scroll", 1, 3049) + .add("Trouver parchment", 2, 12_198) + .add("Looting bag note", 1, 12_198); + const BlackDemonTable = new LootTable() .every("Malicious ashes") @@ -44,9 +69,12 @@ const BlackDemonTable = new LootTable() .tertiary(35, "Ensouled demon head") .tertiary(128, "Clue scroll (hard)"); +const BlackDemonWildyCaveTable = new LootTable().every(BlackDemonTable).tertiary(1.1, WildySlayerCaveTable); + export default new SimpleMonster({ id: 240, name: "Black Demon", table: BlackDemonTable, + wildyCaveTable: BlackDemonWildyCaveTable, aliases: ["black demon"], }); diff --git a/src/simulation/monsters/low/a-f/BlackDragon.ts b/src/simulation/monsters/low/a-f/BlackDragon.ts index 3e6985584..3db260e02 100644 --- a/src/simulation/monsters/low/a-f/BlackDragon.ts +++ b/src/simulation/monsters/low/a-f/BlackDragon.ts @@ -2,6 +2,31 @@ import LootTable from "../../../../structures/LootTable"; import SimpleMonster from "../../../../structures/SimpleMonster"; import RareDropTable, { GemTable } from "../../../subtables/RareDropTable"; +const WildySlayerCaveTable = new LootTable() + .add("Blighted entangle sack", [1, 10], 61) + .add("Blighted anglerfish", [1, 2], 81) + .add("Blighted manta ray", [1, 2], 81) + .add("Blighted karambwan", [1, 2], 122) + .add("Blighted teleport spell sack", [1, 10], 122) + .add("Blighted ancient spell sack", [1, 10], 122) + .add("Blighted vengeance spell sack", [1, 10], 122) + .add("Blighted super restore(4)", 1, 244) + .add("Revenant cave teleport", 1, 244) + .add("Dareeyak teleport (tablet)", 1, 1220) + .add("Wilderness crabs teleport", 1, 1220) + .add("Carrallanger teleport (tablet)", 1, 1220) + .add("Paddewwa teleport (tablet)", 1, 1220) + .add("Annakarl teleport (tablet)", 1, 1220) + .add("Lassar teleport (tablet)", 1, 1220) + .add("Kharyrll teleport (tablet)", 1, 1220) + .add("Senntisten teleport (tablet)", 1, 1220) + .add("Ghorrock teleport (tablet)", 1, 1220) + .add("Target teleport", 1, 1220) + .add("Magic shortbow scroll", 1, 3049) + .add("Ring of wealth scroll", 1, 3049) + .add("Trouver parchment", 2, 12_198) + .add("Looting bag note", 1, 12_198); + const BlackDragonTable = new LootTable() .every("Dragon bones") .every("Black dragonhide") @@ -43,9 +68,12 @@ const BlackDragonTable = new LootTable() .tertiary(500, "Clue scroll (elite)") .tertiary(10_000, "Draconic visage"); +const BlackDragonWildyCaveTable = new LootTable().every(BlackDragonTable).tertiary(1.1, WildySlayerCaveTable); + export default new SimpleMonster({ id: 252, name: "Black Dragon", table: BlackDragonTable, + wildyCaveTable: BlackDragonWildyCaveTable, aliases: ["black dragon", "black drags"], }); diff --git a/src/simulation/monsters/low/a-f/DustDevil.ts b/src/simulation/monsters/low/a-f/DustDevil.ts index 54f02dd00..3b1cb4835 100644 --- a/src/simulation/monsters/low/a-f/DustDevil.ts +++ b/src/simulation/monsters/low/a-f/DustDevil.ts @@ -3,6 +3,31 @@ import SimpleMonster from "../../../../structures/SimpleMonster"; import HerbDropTable from "../../../subtables/HerbDropTable"; import { GemTable } from "../../../subtables/RareDropTable"; +const WildySlayerCaveTable = new LootTable() + .add("Blighted entangle sack", [1, 10], 87) + .add("Blighted anglerfish", [1, 2], 116) + .add("Blighted manta ray", [1, 2], 116) + .add("Blighted karambwan", [1, 2], 173) + .add("Blighted teleport spell sack", [1, 10], 173) + .add("Blighted ancient spell sack", [1, 10], 173) + .add("Blighted vengeance spell sack", [1, 10], 173) + .add("Blighted super restore(4)", 1, 347) + .add("Revenant cave teleport", 1, 347) + .add("Dareeyak teleport (tablet)", 1, 1734) + .add("Wilderness crabs teleport", 1, 1734) + .add("Carrallanger teleport (tablet)", 1, 1734) + .add("Paddewwa teleport (tablet)", 1, 1734) + .add("Annakarl teleport (tablet)", 1, 1734) + .add("Lassar teleport (tablet)", 1, 1734) + .add("Kharyrll teleport (tablet)", 1, 1734) + .add("Senntisten teleport (tablet)", 1, 1734) + .add("Ghorrock teleport (tablet)", 1, 1734) + .add("Target teleport", 1, 1734) + .add("Magic shortbow scroll", 1, 4336) + .add("Ring of wealth scroll", 1, 4336) + .add("Trouver parchment", 2, 17_344) + .add("Looting bag note", 1, 17_344); + export const DustDevilPreTable = new LootTable() /* Weapons and armour */ .add("Adamant axe", 1, 3) @@ -41,9 +66,12 @@ export const DustDevilPreTable = new LootTable() const DustDevilTable = new LootTable().every("Bones").every(DustDevilPreTable); +const DustDevilWildyCaveTable = new LootTable().every(DustDevilTable).tertiary(1.56, WildySlayerCaveTable); + export default new SimpleMonster({ id: 423, name: "Dust Devil", table: DustDevilTable, + wildyCaveTable: DustDevilWildyCaveTable, aliases: ["dust devil", "dusty", "dusties"], }); diff --git a/src/simulation/monsters/low/g-m/GreaterDemon.ts b/src/simulation/monsters/low/g-m/GreaterDemon.ts index b3e44f017..e75eb15ee 100644 --- a/src/simulation/monsters/low/g-m/GreaterDemon.ts +++ b/src/simulation/monsters/low/g-m/GreaterDemon.ts @@ -2,6 +2,31 @@ import LootTable from "../../../../structures/LootTable"; import SimpleMonster from "../../../../structures/SimpleMonster"; import { GemTable } from "../../../subtables/RareDropTable"; +const WildySlayerCaveTable = new LootTable() + .add("Blighted entangle sack", [1, 10], 82) + .add("Blighted anglerfish", [1, 2], 109) + .add("Blighted manta ray", [1, 2], 109) + .add("Blighted karambwan", [1, 2], 163) + .add("Blighted teleport spell sack", [1, 10], 163) + .add("Blighted ancient spell sack", [1, 10], 163) + .add("Blighted vengeance spell sack", [1, 10], 163) + .add("Blighted super restore(4)", 1, 326) + .add("Revenant cave teleport", 1, 326) + .add("Dareeyak teleport (tablet)", 1, 1632) + .add("Wilderness crabs teleport", 1, 1632) + .add("Carrallanger teleport (tablet)", 1, 1632) + .add("Paddewwa teleport (tablet)", 1, 1632) + .add("Annakarl teleport (tablet)", 1, 1632) + .add("Lassar teleport (tablet)", 1, 1632) + .add("Kharyrll teleport (tablet)", 1, 1632) + .add("Senntisten teleport (tablet)", 1, 1632) + .add("Ghorrock teleport (tablet)", 1, 1632) + .add("Target teleport", 1, 1632) + .add("Magic shortbow scroll", 1, 4081) + .add("Ring of wealth scroll", 1, 4081) + .add("Trouver parchment", 2, 16_324) + .add("Looting bag note", 1, 16_324); + const GreaterDemonTable = new LootTable({ limit: 128 }) .every("Vile ashes") @@ -38,9 +63,12 @@ const GreaterDemonTable = new LootTable({ limit: 128 }) .tertiary(40, "Ensouled demon head") .tertiary(128, "Clue scroll (hard)"); +const GreaterDemonWildyCaveTable = new LootTable().every(GreaterDemonTable).tertiary(1.47, WildySlayerCaveTable); + export default new SimpleMonster({ id: 2025, name: "Greater Demon", table: GreaterDemonTable, + wildyCaveTable: GreaterDemonWildyCaveTable, aliases: ["greater demon", "greater", "greaters"], }); diff --git a/src/simulation/monsters/low/g-m/GreaterNechryael.ts b/src/simulation/monsters/low/g-m/GreaterNechryael.ts index 6e9ce6c71..f588cfaa1 100644 --- a/src/simulation/monsters/low/g-m/GreaterNechryael.ts +++ b/src/simulation/monsters/low/g-m/GreaterNechryael.ts @@ -4,6 +4,31 @@ import HerbDropTable from "../../../subtables/HerbDropTable"; import { GemTable } from "../../../subtables/RareDropTable"; import RareSeedTable from "../../../subtables/RareSeedTable"; +const WildySlayerCaveTable = new LootTable() + .add("Blighted entangle sack", [1, 10], 60) + .add("Blighted anglerfish", [1, 2], 80) + .add("Blighted manta ray", [1, 2], 80) + .add("Blighted karambwan", [1, 2], 121) + .add("Blighted teleport spell sack", [1, 10], 121) + .add("Blighted ancient spell sack", [1, 10], 121) + .add("Blighted vengeance spell sack", [1, 10], 121) + .add("Blighted super restore(4)", 1, 241) + .add("Revenant cave teleport", 1, 241) + .add("Dareeyak teleport (tablet)", 1, 1207) + .add("Wilderness crabs teleport", 1, 1207) + .add("Carrallanger teleport (tablet)", 1, 1207) + .add("Paddewwa teleport (tablet)", 1, 1207) + .add("Annakarl teleport (tablet)", 1, 1207) + .add("Lassar teleport (tablet)", 1, 1207) + .add("Kharyrll teleport (tablet)", 1, 1207) + .add("Senntisten teleport (tablet)", 1, 1207) + .add("Ghorrock teleport (tablet)", 1, 1207) + .add("Target teleport", 1, 1207) + .add("Magic shortbow scroll", 1, 3016) + .add("Ring of wealth scroll", 1, 3016) + .add("Trouver parchment", 2, 12_065) + .add("Looting bag note", 1, 12_065); + const GreaterNechryaelTable = new LootTable() .every("Malicious ashes") @@ -44,9 +69,14 @@ const GreaterNechryaelTable = new LootTable() /* Tertiary */ .tertiary(128, "Clue scroll (hard)"); +const GreaterNechryaelWildyCaveTable = new LootTable() + .every(GreaterNechryaelTable) + .tertiary(1.09, WildySlayerCaveTable); + export default new SimpleMonster({ id: 7278, name: "Greater Nechryael", table: GreaterNechryaelTable, + wildyCaveTable: GreaterNechryaelWildyCaveTable, aliases: ["greater nechryael", "greater nech", "greater nechs", "g nechs"], }); diff --git a/src/simulation/monsters/low/g-m/GreenDragon.ts b/src/simulation/monsters/low/g-m/GreenDragon.ts index c3726f30d..9783fbb0c 100644 --- a/src/simulation/monsters/low/g-m/GreenDragon.ts +++ b/src/simulation/monsters/low/g-m/GreenDragon.ts @@ -3,6 +3,31 @@ import SimpleMonster from "../../../../structures/SimpleMonster"; import HerbDropTable from "../../../subtables/HerbDropTable"; import { GemTable } from "../../../subtables/RareDropTable"; +const WildySlayerCaveTable = new LootTable() + .add("Blighted entangle sack", [1, 10], 90) + .add("Blighted anglerfish", [1, 2], 119) + .add("Blighted manta ray", [1, 2], 119) + .add("Blighted karambwan", [1, 2], 179) + .add("Blighted teleport spell sack", [1, 10], 179) + .add("Blighted ancient spell sack", [1, 10], 179) + .add("Blighted vengeance spell sack", [1, 10], 179) + .add("Blighted super restore(4)", 1, 358) + .add("Revenant cave teleport", 1, 358) + .add("Dareeyak teleport (tablet)", 1, 1790) + .add("Wilderness crabs teleport", 1, 1790) + .add("Carrallanger teleport (tablet)", 1, 1790) + .add("Paddewwa teleport (tablet)", 1, 1790) + .add("Annakarl teleport (tablet)", 1, 1790) + .add("Lassar teleport (tablet)", 1, 1790) + .add("Kharyrll teleport (tablet)", 1, 1790) + .add("Senntisten teleport (tablet)", 1, 1790) + .add("Ghorrock teleport (tablet)", 1, 1790) + .add("Target teleport", 1, 1790) + .add("Magic shortbow scroll", 1, 4476) + .add("Ring of wealth scroll", 1, 4476) + .add("Trouver parchment", 2, 17_903) + .add("Looting bag note", 1, 17_903); + const GreenDragonTable = new LootTable() .every("Dragon bones") .every("Green dragonhide") @@ -43,9 +68,12 @@ const GreenDragonTable = new LootTable() .tertiary(35, "Ensouled dragon head") .tertiary(128, "Clue scroll (hard)"); +const GreenDragonWildyCaveTable = new LootTable().every(GreenDragonTable).tertiary(1.61, WildySlayerCaveTable); + export default new SimpleMonster({ id: 260, name: "Green dragon", table: GreenDragonTable, + wildyCaveTable: GreenDragonWildyCaveTable, aliases: ["green dragon", "green drags"], }); diff --git a/src/simulation/monsters/low/g-m/Hellhound.ts b/src/simulation/monsters/low/g-m/Hellhound.ts index 25a7abc17..c0d633be8 100644 --- a/src/simulation/monsters/low/g-m/Hellhound.ts +++ b/src/simulation/monsters/low/g-m/Hellhound.ts @@ -1,14 +1,42 @@ import LootTable from "../../../../structures/LootTable"; import SimpleMonster from "../../../../structures/SimpleMonster"; +const WildySlayerCaveTable = new LootTable() + .add("Blighted entangle sack", [1, 10], 65) + .add("Blighted anglerfish", [1, 2], 87) + .add("Blighted manta ray", [1, 2], 87) + .add("Blighted karambwan", [1, 2], 131) + .add("Blighted teleport spell sack", [1, 10], 131) + .add("Blighted ancient spell sack", [1, 10], 131) + .add("Blighted vengeance spell sack", [1, 10], 131) + .add("Blighted super restore(4)", 1, 261) + .add("Revenant cave teleport", 1, 261) + .add("Dareeyak teleport (tablet)", 1, 1306) + .add("Wilderness crabs teleport", 1, 1306) + .add("Carrallanger teleport (tablet)", 1, 1306) + .add("Paddewwa teleport (tablet)", 1, 1306) + .add("Annakarl teleport (tablet)", 1, 1306) + .add("Lassar teleport (tablet)", 1, 1306) + .add("Kharyrll teleport (tablet)", 1, 1306) + .add("Senntisten teleport (tablet)", 1, 1306) + .add("Ghorrock teleport (tablet)", 1, 1306) + .add("Target teleport", 1, 1306) + .add("Magic shortbow scroll", 1, 3265) + .add("Ring of wealth scroll", 1, 3265) + .add("Trouver parchment", 2, 13_059) + .add("Looting bag note", 1, 13_059); + const HellhoundTable = new LootTable() .every("Vile ashes") .oneIn(32_768, "Smouldering stone") .tertiary(64, "Clue scroll (hard)"); +const HellhoundWildyCaveTable = new LootTable().every(HellhoundTable).tertiary(1.25, WildySlayerCaveTable); + export default new SimpleMonster({ id: 104, name: "Hellhound", table: HellhoundTable, + wildyCaveTable: HellhoundWildyCaveTable, aliases: ["hellhound", "hellh"], }); diff --git a/src/simulation/monsters/low/g-m/IceGiant.ts b/src/simulation/monsters/low/g-m/IceGiant.ts index cc62f46d3..48d10c529 100644 --- a/src/simulation/monsters/low/g-m/IceGiant.ts +++ b/src/simulation/monsters/low/g-m/IceGiant.ts @@ -3,6 +3,31 @@ import SimpleMonster from "../../../../structures/SimpleMonster"; import { GemTable } from "../../../subtables/RareDropTable"; import UncommonSeedDropTable from "../../../subtables/UncommonSeedDropTable"; +const WildySlayerCaveTable = new LootTable() + .add("Blighted entangle sack", [1, 10], 76) + .add("Blighted anglerfish", [1, 2], 101) + .add("Blighted manta ray", [1, 2], 101) + .add("Blighted karambwan", [1, 2], 152) + .add("Blighted teleport spell sack", [1, 10], 152) + .add("Blighted ancient spell sack", [1, 10], 152) + .add("Blighted vengeance spell sack", [1, 10], 152) + .add("Blighted super restore(4)", 1, 304) + .add("Revenant cave teleport", 1, 304) + .add("Dareeyak teleport (tablet)", 1, 1521) + .add("Wilderness crabs teleport", 1, 1521) + .add("Carrallanger teleport (tablet)", 1, 1521) + .add("Paddewwa teleport (tablet)", 1, 1521) + .add("Annakarl teleport (tablet)", 1, 1521) + .add("Lassar teleport (tablet)", 1, 1521) + .add("Kharyrll teleport (tablet)", 1, 1521) + .add("Senntisten teleport (tablet)", 1, 1521) + .add("Ghorrock teleport (tablet)", 1, 1521) + .add("Target teleport", 1, 1521) + .add("Magic shortbow scroll", 1, 3801) + .add("Ring of wealth scroll", 1, 3801) + .add("Trouver parchment", 2, 15_205) + .add("Looting bag note", 1, 15_205); + const IceGiantTable = new LootTable() .every("Big bones") @@ -52,9 +77,12 @@ const IceGiantTable = new LootTable() .tertiary(5000, "Giant champion scroll") .tertiary(5013, "Curved bone"); +const IceGiantWildyCaveTable = new LootTable().every(IceGiantTable).tertiary(1.37, WildySlayerCaveTable); + export default new SimpleMonster({ id: 2085, name: "Ice giant", table: IceGiantTable, + wildyCaveTable: IceGiantWildyCaveTable, aliases: ["ice giant"], }); diff --git a/src/simulation/monsters/low/g-m/Jelly.ts b/src/simulation/monsters/low/g-m/Jelly.ts index 1b286925e..a827e5951 100644 --- a/src/simulation/monsters/low/g-m/Jelly.ts +++ b/src/simulation/monsters/low/g-m/Jelly.ts @@ -2,6 +2,31 @@ import LootTable from "../../../../structures/LootTable"; import SimpleMonster from "../../../../structures/SimpleMonster"; import { GemTable } from "../../../subtables/RareDropTable"; +const WildySlayerCaveTable = new LootTable() + .add("Blighted entangle sack", [1, 10], 73) + .add("Blighted anglerfish", [1, 2], 97) + .add("Blighted manta ray", [1, 2], 97) + .add("Blighted karambwan", [1, 2], 146) + .add("Blighted teleport spell sack", [1, 10], 146) + .add("Blighted ancient spell sack", [1, 10], 146) + .add("Blighted vengeance spell sack", [1, 10], 146) + .add("Blighted super restore(4)", 1, 292) + .add("Revenant cave teleport", 1, 292) + .add("Dareeyak teleport (tablet)", 1, 1461) + .add("Wilderness crabs teleport", 1, 1461) + .add("Carrallanger teleport (tablet)", 1, 1461) + .add("Paddewwa teleport (tablet)", 1, 1461) + .add("Annakarl teleport (tablet)", 1, 1461) + .add("Lassar teleport (tablet)", 1, 1461) + .add("Kharyrll teleport (tablet)", 1, 1461) + .add("Senntisten teleport (tablet)", 1, 1461) + .add("Ghorrock teleport (tablet)", 1, 1461) + .add("Target teleport", 1, 1461) + .add("Magic shortbow scroll", 1, 3651) + .add("Ring of wealth scroll", 1, 3651) + .add("Trouver parchment", 2, 14_605) + .add("Looting bag note", 1, 14_605); + export const JellyPreTable = new LootTable() /* Weapons and armour */ .add("Steel battleaxe", 1, 11) @@ -33,9 +58,12 @@ const JellyTable = new LootTable() /* Tertiary */ .tertiary(128, "Clue scroll (hard)"); +const JellyWildyCaveTable = new LootTable().every(JellyTable).tertiary(1.32, WildySlayerCaveTable); + export default new SimpleMonster({ id: 437, name: "Jelly", table: JellyTable, + wildyCaveTable: JellyWildyCaveTable, aliases: ["jelly", "jello"], }); diff --git a/src/simulation/monsters/low/g-m/LesserDemon.ts b/src/simulation/monsters/low/g-m/LesserDemon.ts index 87b9c4ace..112c49b69 100644 --- a/src/simulation/monsters/low/g-m/LesserDemon.ts +++ b/src/simulation/monsters/low/g-m/LesserDemon.ts @@ -3,6 +3,31 @@ import SimpleMonster from "../../../../structures/SimpleMonster"; import HerbDropTable from "../../../subtables/HerbDropTable"; import { GemTable } from "../../../subtables/RareDropTable"; +const WildySlayerCaveTable = new LootTable() + .add("Blighted entangle sack", [1, 10], 87) + .add("Blighted anglerfish", [1, 2], 116) + .add("Blighted manta ray", [1, 2], 116) + .add("Blighted karambwan", [1, 2], 173) + .add("Blighted teleport spell sack", [1, 10], 173) + .add("Blighted ancient spell sack", [1, 10], 173) + .add("Blighted vengeance spell sack", [1, 10], 173) + .add("Blighted super restore(4)", 1, 347) + .add("Revenant cave teleport", 1, 347) + .add("Dareeyak teleport (tablet)", 1, 1734) + .add("Wilderness crabs teleport", 1, 1734) + .add("Carrallanger teleport (tablet)", 1, 1734) + .add("Paddewwa teleport (tablet)", 1, 1734) + .add("Annakarl teleport (tablet)", 1, 1734) + .add("Lassar teleport (tablet)", 1, 1734) + .add("Kharyrll teleport (tablet)", 1, 1734) + .add("Senntisten teleport (tablet)", 1, 1734) + .add("Ghorrock teleport (tablet)", 1, 1734) + .add("Target teleport", 1, 1734) + .add("Magic shortbow scroll", 1, 4336) + .add("Ring of wealth scroll", 1, 4336) + .add("Trouver parchment", 2, 17_344) + .add("Looting bag note", 1, 17_344); + const LesserDemonTable = new LootTable() .every("Vile ashes") @@ -41,9 +66,12 @@ const LesserDemonTable = new LootTable() .tertiary(50, "Ensouled demon head") .tertiary(5000, "Lesser demon champion scroll"); +const LesserDemonWildyCaveTable = new LootTable().every(LesserDemonTable).tertiary(1.56, WildySlayerCaveTable); + export default new SimpleMonster({ id: 2005, name: "Lesser demon", table: LesserDemonTable, + wildyCaveTable: LesserDemonWildyCaveTable, aliases: ["lesser demon"], }); diff --git a/src/structures/SimpleMonster.ts b/src/structures/SimpleMonster.ts index 81607a53b..6efe1ddd0 100644 --- a/src/structures/SimpleMonster.ts +++ b/src/structures/SimpleMonster.ts @@ -16,6 +16,7 @@ import Monster from "./Monster"; interface SimpleMonsterOptions extends MonsterOptions { table?: LootTable; onTaskTable?: LootTable; + wildyCaveTable?: LootTable; pickpocketTable?: LootTable; customKillLogic?: CustomKillLogic; } @@ -23,6 +24,7 @@ interface SimpleMonsterOptions extends MonsterOptions { export default class SimpleMonster extends Monster { public table?: LootTable; public onTaskTable?: LootTable; + public wildyCaveTable?: LootTable; public pickpocketTable?: LootTable; public customKillLogic?: CustomKillLogic; @@ -38,14 +40,14 @@ export default class SimpleMonster extends Monster { this.table = options.table; this.pickpocketTable = options.pickpocketTable; this.onTaskTable = options.onTaskTable; + this.wildyCaveTable = options.wildyCaveTable; this.customKillLogic = options.customKillLogic; } public kill(quantity = 1, options: MonsterKillOptions = {}): Bank { const loot = new Bank(); const canGetBrimKey = options.onSlayerTask && options.slayerMaster === MonsterSlayerMaster.Konar; - const canGetSlayersEnchantment = options.onSlayerTask && options.slayerMaster === MonsterSlayerMaster.Krystilia; - const canGetLarranKey = options.onSlayerTask && options.slayerMaster === MonsterSlayerMaster.Krystilia; + const wildySlayer = options.onSlayerTask && options.slayerMaster === MonsterSlayerMaster.Krystilia; const slayerMonster: boolean = Boolean(options.onSlayerTask && this.data.slayerLevelRequired > 1); for (let i = 0; i < quantity; i++) { @@ -54,17 +56,15 @@ export default class SimpleMonster extends Monster { loot.add("Brimstone key"); } } - if (canGetSlayersEnchantment && this.data.hitpoints) { + if (wildySlayer && this.data.hitpoints) { if (roll(getSlayersEnchantmentChanceFromHP(this.data.hitpoints))) { loot.add("Slayer's enchantment"); } - } - if (canGetLarranKey) { if (roll(getLarranKeyChanceFromCBLevel(this.data.combatLevel, slayerMonster))) { loot.add("Larran's key"); } } - if (options.inCatacombs && this.data.hitpoints && !canGetLarranKey) { + if (options.inCatacombs && this.data.hitpoints && !wildySlayer) { if (roll(getAncientShardChanceFromHP(this.data.hitpoints))) { loot.add("Ancient shard"); } @@ -74,7 +74,10 @@ export default class SimpleMonster extends Monster { } } if (options.onSlayerTask) { - if (this.onTaskTable) { + if (wildySlayer && this.wildyCaveTable) { + // Roll the monster's wildy slayer cave table + loot.add(this.wildyCaveTable.roll(1, options.lootTableOptions)); + } else if (this.onTaskTable) { // Roll the monster's "on-task" table. loot.add(this.onTaskTable.roll(1, options.lootTableOptions)); } else {