Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions data/skill/prayer/altar.objs.toml
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,10 @@ examine = "A shrine for the faithful to worship at."
id = 55340
examine = "Shrine to the glory of Zaros."

[prayer_altar_zaros_senntisten]
id = 47120
examine = "An ancient altar to the glory of Zaros."

[prayer_altar_warped_construction]
id = 55667
examine = "A shrine for the faithful to worship at."
34 changes: 34 additions & 0 deletions game/src/main/kotlin/content/skill/prayer/bone/PrayerAltars.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package content.skill.prayer.bone

import content.skill.prayer.PrayerConfigs.PRAYERS
import content.skill.prayer.PrayerConfigs.USING_QUICK_PRAYERS
import content.skill.prayer.getActivePrayerVarKey
import content.skill.prayer.isCurses
import world.gregs.voidps.engine.Script
import world.gregs.voidps.engine.client.message
import world.gregs.voidps.engine.entity.character.player.Player
Expand All @@ -8,6 +12,18 @@ import world.gregs.voidps.engine.entity.character.player.skill.Skill
class PrayerAltars : Script {

init {
objectOperate("Pray", "prayer_altar_zaros,prayer_altar_zaros_senntisten") {
prayAtZaros()
}

objectOperate("Pray-at", "prayer_altar_zaros,prayer_altar_zaros_senntisten") {
prayAtZaros()
}

objectOperate("Convert", "prayer_altar_zaros,prayer_altar_zaros_senntisten") {
prayAtZaros()
}

objectOperate("Pray", "prayer_altar_*") {
pray()
}
Expand All @@ -31,4 +47,22 @@ class PrayerAltars : Script {
set("prayer_point_power_task", true)
}
}

private fun Player.prayAtZaros() {
if (levels.getOffset(Skill.Prayer) < 0) {
levels.set(Skill.Prayer, levels.getMax(Skill.Prayer))
set("prayer_point_power_task", true)
message("You recharge your Prayer points.")
}
switchPrayerBook()
}

private fun Player.switchPrayerBook() {
clear(getActivePrayerVarKey())
this[USING_QUICK_PRAYERS] = false
val curses = !isCurses()
set(PRAYERS, if (curses) "curses" else "normal")
anim("altar_pray")
message(if (curses) "You switch to the Ancient Curses." else "You switch to the normal Prayer book.")
}
}
41 changes: 41 additions & 0 deletions game/src/test/kotlin/content/skill/prayer/PrayerTest.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package content.skill.prayer

import WorldTest
import content.skill.prayer.PrayerConfigs.ACTIVE_PRAYERS
import content.skill.prayer.PrayerConfigs.PRAYERS
import content.skill.prayer.PrayerConfigs.USING_QUICK_PRAYERS
import interfaceOption
import itemOnObject
import itemOption
Expand All @@ -9,6 +12,7 @@ import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.DynamicTest.dynamicTest
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestFactory
import world.gregs.voidps.engine.client.instruction.handle.interactObject
import world.gregs.voidps.engine.entity.character.player.skill.Skill
import world.gregs.voidps.engine.entity.character.player.skill.exp.Experience
import world.gregs.voidps.engine.entity.obj.GameObjects
Expand All @@ -18,6 +22,43 @@ import world.gregs.voidps.type.Tile

internal class PrayerTest : WorldTest() {

@Test
fun `Home Zaros altar recharges and switches prayers`() {
val player = createPlayer()
player.experience.set(Skill.Prayer, Experience.MAXIMUM_EXPERIENCE)
player.levels.set(Skill.Prayer, 1)
val altar = GameObjects.add("prayer_altar_zaros", player.tile)

player.interactObject(altar, "Convert")
tick()

assertEquals(player.levels.getMax(Skill.Prayer), player.levels.get(Skill.Prayer))
assertEquals("curses", player[PRAYERS])
}

@Test
fun `Senntisten Zaros altar recharges and switches prayers`() {
val player = createPlayer()
player.experience.set(Skill.Prayer, Experience.MAXIMUM_EXPERIENCE)
player.levels.set(Skill.Prayer, 1)
val altar = GameObjects.add("prayer_altar_zaros_senntisten", player.tile)
player.addVarbit(ACTIVE_PRAYERS, "protect_from_melee")
player[USING_QUICK_PRAYERS] = true

player.interactObject(altar, "Pray")
tick()

assertEquals(player.levels.getMax(Skill.Prayer), player.levels.get(Skill.Prayer))
assertEquals("curses", player[PRAYERS])
assertFalse(player.containsVarbit(ACTIVE_PRAYERS, "protect_from_melee"))
assertFalse(player[USING_QUICK_PRAYERS, false])

player.interactObject(altar, "Pray-at")
tick()

assertFalse(player.isCurses())
}

@Test
fun `Active prayers drain prayer points`() {
val player = createPlayer()
Expand Down