package net.scapeemulator.game.model.player.skills.prayer; import static net.scapeemulator.game.model.player.skills.prayer.PrayerType.*; import net.scapeemulator.game.model.player.requirement.PrayerPointRequirement; import net.scapeemulator.game.model.player.requirement.Requirements; import net.scapeemulator.game.model.player.requirement.SkillRequirement; import net.scapeemulator.game.model.player.skills.Skill; /** * @author David Insley */ public enum Prayer { // Tier one prayer bonuses THICK_SKIN(1, 50, 83, 5, DEFENCE), BURST_OF_STRENGTH(4, 50, 84, 7, STRENGTH), CLARITY_OF_THOUGHT(7, 50, 85, 9, ATTACK), SHARP_EYE(8, 50, 862, 11, RANGE, MAGIC), MYSTIC_WILL(9, 50, 863, 13, MAGIC, RANGE), // Tier two prayer bonuses ROCK_SKIN(10, 100, 86, 15, DEFENCE), SUPERHUMAN_STRENGTH(13, 100, 87, 17, STRENGTH), IMPROVED_REFLEXES(16, 100, 88, 19, ATTACK), HAWK_EYE(26, 100, 864, 27, RANGE, MAGIC), MYSTIC_LORE(27, 100, 865, 29, MAGIC, RANGE), // Tier three prayer bonuses STEEL_SKIN(28, 200, 92, 31, DEFENCE), ULTIMATE_STRENGTH(31, 200, 93, 33, STRENGTH), INCREDIBLE_REFLEXES(34, 200, 94, 35, ATTACK), EAGLE_EYE(44, 200, 866, 43, RANGE, MAGIC), MYSTIC_MIGHT(45, 200, 867, 45, MAGIC, RANGE), // Tier four prayer bonuses CHIVALRY(60, 400, 1052, 55, DEFENCE, STRENGTH, ATTACK), PIETY(70, 400, 1053, 57, DEFENCE, STRENGTH, ATTACK), // Stat restore RESTORE(19, 23, 89, 21, RAPID_RESTORE), // Health restore HEAL(22, 33, 90, 23, RAPID_HEAL), // Protect item PROTECT(25, 33, 91, 25, PROTECT_ITEM), // Overhead prayers TODO differentiate to allow summoning to pair with one other protect PROTECT_FROM_SUMMONING(35, 200, 1168, 53, OVERHEAD), PROTECT_FROM_MAGIC(37, 200, 95, 37, OVERHEAD), PROTECT_FROM_RANGED(40, 200, 96, 39, OVERHEAD), PROTECT_FROM_MELEE(43, 200, 97, 41, OVERHEAD), RETRIBUTION(46, 50, 98, 47, OVERHEAD), REDEMPTION(49, 100, 99, 49, OVERHEAD), SMITE(52, 300, 100, 51, OVERHEAD); static { // TODO chivalry/piety knights training ground requirements CHIVALRY.requirements.addRequirements(); PIETY.requirements.addRequirements(); } private final Requirements requirements; /** * How many points are drained per tick. One thousand is one point. */ private final int drainRate; /** * The config id to activate and deactivate this prayer in the prayer tab. */ private final int configId; private final int buttonId; private final PrayerType[] types; private HeadIcon headIcon = HeadIcon.NONE; private Prayer(int levelRequirement, int drainRate, int configId, int buttonId, PrayerType... types) { requirements = new Requirements(); requirements.addRequirement(new SkillRequirement(Skill.PRAYER, levelRequirement, false, "activate that prayer")); requirements.addRequirement(PrayerPointRequirement.NON_ZERO_POINTS); this.drainRate = drainRate; this.configId = configId; this.buttonId = buttonId; this.types = types; } public static Prayer forId(int buttonId) { for (Prayer prayer : values()) { if (prayer.buttonId == buttonId) { return prayer; } } return null; } public boolean conflicts(Prayer other) { for (PrayerType type : types) { for (PrayerType otherType : other.types) { if (type == otherType) { return true; } } } return false; } public Requirements getRequirements() { return requirements; } public double getDrainRate() { return drainRate; } public int getConfigId() { return configId; } public PrayerType[] getTypes() { return types; } public HeadIcon getHeadIcon() { if (headIcon == HeadIcon.NONE) { headIcon = HeadIcon.forPrayer(this); } return headIcon; } }