package net.scapeemulator.game.model.player.skills.magic;
import static net.scapeemulator.game.model.player.skills.magic.Rune.*;
import net.scapeemulator.game.model.area.QuadArea;
import net.scapeemulator.game.model.player.Equipment;
import net.scapeemulator.game.model.player.requirement.EquipmentRequirement;
import net.scapeemulator.game.model.player.requirement.RuneRequirement;
import net.scapeemulator.game.model.player.requirement.SkillRequirement;
import net.scapeemulator.game.model.player.skills.Skill;
public class Spellbook {
public static final Spellbook NORMAL_SPELLBOOK = new Spellbook(Magic.NORMAL_SPELLBOOK_ID);
public static final Spellbook ANCIENT_SPELLBOOK = new Spellbook(Magic.ANCIENT_SPELLBOOK_ID);
public static final Spellbook LUNAR_SPELLBOOK = new Spellbook(Magic.LUNAR_SPELLBOOK_ID);
private final int interfaceId;
private Spell[] spells = new Spell[100];
private Spellbook(int interfaceId) {
this.interfaceId = interfaceId;
}
public Spell getSpell(int childId) {
if (childId < 0 || childId >= spells.length) {
return null;
}
return spells[childId];
}
// pls dont judge me, i will change this
public static void loadBooks() {
CombatSpell cs = null;
cs = new DamageSpell("Wind Strike", 45, 2, 711, 90);
cs.setProjectileInformation(91, 92, 45, 31, 50);
cs.getRequirements().addRequirements(level(1, 5.5), rune(AIR), rune(MIND));
NORMAL_SPELLBOOK.spells[1] = cs;
cs = new DamageSpell("Water Strike", 47, 4, 711, 93);
cs.setProjectileInformation(94, 95, 45, 31, 50);
cs.getRequirements().addRequirements(level(5, 7.5), rune(WATER), rune(AIR), rune(MIND));
NORMAL_SPELLBOOK.spells[4] = cs;
cs = new DamageSpell("Earth Strike", 49, 6, 711, 96);
cs.setProjectileInformation(97, 98, 45, 31, 50);
cs.getRequirements().addRequirements(level(9, 9.5), rune(EARTH, 2), rune(AIR), rune(MIND));
NORMAL_SPELLBOOK.spells[6] = cs;
cs = new DamageSpell("Fire Strike", 51, 8, 711, 99);
cs.setProjectileInformation(100, 101, 45, 31, 50);
cs.getRequirements().addRequirements(level(13, 11.5), rune(FIRE, 3), rune(AIR, 2), rune(MIND));
NORMAL_SPELLBOOK.spells[8] = cs;
cs = new DamageSpell("Wind Bolt", 53, 9, 711, 117);
cs.setProjectileInformation(118, 119, 45, 31, 50);
cs.getRequirements().addRequirements(level(17, 13.5), rune(AIR, 2), rune(CHAOS));
NORMAL_SPELLBOOK.spells[10] = cs;
cs = new DamageSpell("Water Bolt", 55, 10, 711, 120);
cs.setProjectileInformation(121, 122, 45, 31, 50);
cs.getRequirements().addRequirements(level(23, 16.5), rune(WATER, 2), rune(AIR, 2), rune(CHAOS));
NORMAL_SPELLBOOK.spells[14] = cs;
cs = new DamageSpell("Earth Bolt", 57, 11, 711, 123);
cs.setProjectileInformation(124, 125, 45, 31, 50);
cs.getRequirements().addRequirements(level(29, 19.5), rune(EARTH, 3), rune(AIR, 2), rune(CHAOS));
NORMAL_SPELLBOOK.spells[17] = cs;
cs = new DamageSpell("Fire Bolt", 59, 12, 711, 126);
cs.setProjectileInformation(127, 128, 45, 31, 50);
cs.getRequirements().addRequirements(level(35, 21.5), rune(FIRE, 4), rune(AIR, 3), rune(CHAOS));
NORMAL_SPELLBOOK.spells[20] = cs;
cs = new DamageSpell("Wind Blast", 61, 13, 711, 132);
cs.setProjectileInformation(133, 134, 45, 31, 50);
cs.getRequirements().addRequirements(level(41, 25.5), rune(AIR, 3), rune(DEATH));
NORMAL_SPELLBOOK.spells[24] = cs;
cs = new DamageSpell("Water Blast", 63, 14, 711, 135);
cs.setProjectileInformation(136, 137, 45, 31, 50);
cs.getRequirements().addRequirements(level(47, 28.5), rune(WATER, 3), rune(AIR, 3), rune(DEATH));
NORMAL_SPELLBOOK.spells[27] = cs;
cs = new DamageSpell("Earth Blast", 65, 15, 711, 138);
cs.setProjectileInformation(139, 140, 45, 31, 50);
cs.getRequirements().addRequirements(level(53, 31.5), rune(EARTH, 4), rune(AIR, 3), rune(DEATH));
NORMAL_SPELLBOOK.spells[33] = cs;
cs = new DamageSpell("Fire Blast", 67, 16, 711, 129);
cs.setProjectileInformation(130, 131, 45, 31, 50);
cs.getRequirements().addRequirements(level(59, 34.5), rune(FIRE, 5), rune(AIR, 4), rune(DEATH));
NORMAL_SPELLBOOK.spells[38] = cs;
cs = new DamageSpell("Wind Wave", 69, 17, 727, 158);
cs.setProjectileInformation(159, 160, 45, 31, 25);
cs.getRequirements().addRequirements(level(62, 36), rune(AIR, 5), rune(BLOOD));
NORMAL_SPELLBOOK.spells[45] = cs;
cs = new DamageSpell("Water Wave", 71, 18, 727, 161);
cs.setProjectileInformation(162, 163, 45, 31, 25);
cs.getRequirements().addRequirements(level(65, 37.5), rune(WATER, 7), rune(AIR, 5), rune(BLOOD));
NORMAL_SPELLBOOK.spells[48] = cs;
cs = new DamageSpell("Earth Wave", 73, 19, 727, 164);
cs.setProjectileInformation(165, 166, 45, 31, 25);
cs.getRequirements().addRequirements(level(70, 40), rune(EARTH, 7), rune(AIR, 5), rune(BLOOD));
NORMAL_SPELLBOOK.spells[52] = cs;
cs = new DamageSpell("Fire Wave", 75, 20, 727, 155);
cs.setProjectileInformation(156, 157, 45, 31, 25);
cs.getRequirements().addRequirements(level(75, 42.5), rune(FIRE, 7), rune(AIR, 5), rune(BLOOD));
NORMAL_SPELLBOOK.spells[55] = cs;
cs = new DamageSpell("Crumble Undead", 77, 15, 724, 145);
cs.setProjectileInformation(146, 147, 45, 31, 50);
cs.getRequirements().addRequirements(level(39, 24.5), rune(EARTH, 2), rune(AIR, 2), rune(CHAOS));
NORMAL_SPELLBOOK.spells[22] = cs;
cs = new DamageSpell("Slayer Dart", 79, 10, 1576, -1);
cs.setProjectileInformation(328, 329, 45, 31, 50);
cs.getRequirements().addRequirement(new EquipmentRequirement(Equipment.WEAPON, "You must equip the Slayer's Staff to cast that spell.", 4170));
cs.getRequirements().addRequirements(level(50, 30), rune(DEATH), rune(MIND, 4));
NORMAL_SPELLBOOK.spells[31] = cs;
cs = new DamageSpell("Claws of Guthix", 81, 20, 710, 177);
cs.setProjectileInformation(178, 179, 45, 31, 50);
cs.getRequirements().addRequirement(new EquipmentRequirement(Equipment.WEAPON, "You must equip a Guthix Staff or Void Mace to cast that spell.", 2416, 8841));
cs.getRequirements().addRequirements(level(60, 35), rune(FIRE), rune(BLOOD, 2), rune(AIR, 4));
NORMAL_SPELLBOOK.spells[42] = cs;
TeleportSpell ts = null;
// Home teleport
ts = new TeleportSpell(TeleportType.STANDARD, new QuadArea(3220, 3218, 3225, 3219), 0);
ts.getRequirements().addRequirements(/* TODO not in combat, time since last use 30m */);
NORMAL_SPELLBOOK.spells[0] = ts;
// Varrock teleport
ts = new TeleportSpell(TeleportType.STANDARD, new QuadArea(3209, 3422, 3218, 3425), 0);
ts.getRequirements().addRequirements(level(25, 35.0), rune(FIRE), rune(AIR, 3), rune(LAW));
NORMAL_SPELLBOOK.spells[15] = ts;
// Lumbridge teleport
ts = new TeleportSpell(TeleportType.STANDARD, new QuadArea(3220, 3218, 3225, 3219), 0);
ts.getRequirements().addRequirements(level(31, 41.0), rune(EARTH), rune(AIR, 3), rune(LAW));
NORMAL_SPELLBOOK.spells[18] = ts;
// Falador teleport
ts = new TeleportSpell(TeleportType.STANDARD, new QuadArea(2962, 3378, 2968, 3380), 0);
ts.getRequirements().addRequirements(level(37, 48.0), rune(WATER), rune(AIR, 3), rune(LAW));
NORMAL_SPELLBOOK.spells[21] = ts;
// House teleport
ts = new TeleportSpell(TeleportType.STANDARD, new QuadArea(2954, 3221, 2957, 3226), 0);
ts.getRequirements().addRequirements(level(40, 30.0), rune(LAW), rune(AIR), rune(EARTH));
NORMAL_SPELLBOOK.spells[23] = ts;
// Camelot teleport
ts = new TeleportSpell(TeleportType.STANDARD, new QuadArea(2756, 3475, 2758, 3480), 0);
ts.getRequirements().addRequirements(level(45, 55.5), rune(AIR, 5), rune(LAW));
NORMAL_SPELLBOOK.spells[26] = ts;
// Ardougne teleport
ts = new TeleportSpell(TeleportType.STANDARD, new QuadArea(2658, 3305, 2661, 3309), 0);
// TODO plague city requirement
ts.getRequirements().addRequirements(level(51, 61.0), rune(WATER, 2), rune(LAW, 2));
NORMAL_SPELLBOOK.spells[32] = ts;
// Watchtower teleport
ts = new TeleportSpell(TeleportType.STANDARD, new QuadArea(2928, 4717, 2933, 4718), 2);
// TODO watchtower requirement
ts.getRequirements().addRequirements(level(58, 68.0), rune(EARTH, 2), rune(LAW, 2));
NORMAL_SPELLBOOK.spells[37] = ts;
//jes = new JewleryEnchantmentSpell();
//jes.getRequirements().addRequirements(level(7), rune(WATER), rune(COSMIC));
//NORMAL_SPELLBOOK.spells[5] = jes;
// Trollheim teleport TODO get coords
// ts = new TeleportSpell(TeleportType.STANDARD, 68.0, new QuadArea(2928, 4717, 2933, 4718),
// 2);
// TODO Eadgars ruse requirement
// ts.getRequirements().addRequirements(level(61), rune(FIRE, 2), rune(LAW, 2));
// NORMAL_SPELLBOOK.spells[44] = ts;
// Ape teleport TODO get coords
// ts = new TeleportSpell(TeleportType.STANDARD, 74.0, new QuadArea(2928, 4717, 2933, 4718),
// 2);
// TODO RFD requirement
// TODO banana requirement
// ts.getRequirements().addRequirements(level(64), rune(FIRE, 2), rune(WATER, 2), rune(LAW,
// 2));
// NORMAL_SPELLBOOK.spells[44] = ts;
}
private static RuneRequirement rune(Rune rune) {
return rune(rune, 1);
}
private static RuneRequirement rune(Rune rune, int amount) {
return new RuneRequirement(rune, amount);
}
private static SkillRequirement level(int level, double xp) {
return new SkillRequirement(Skill.MAGIC, level, true, "cast that spell", xp);
}
public int getInterfaceId() {
return interfaceId;
}
}