Add skill extension properties

This commit is contained in:
Major
2017-09-24 19:44:17 +01:00
parent 8c2f086ae5
commit b4e8a7136b
5 changed files with 161 additions and 103 deletions
@@ -1,28 +0,0 @@
package org.apollo.game.plugins.api
import org.apollo.game.model.entity.Player
import org.apollo.game.model.entity.Skill
import org.apollo.game.model.entity.SkillSet
val Player.skills: SkillSet get() = skillSet
val SkillSet.attack: Skill get() = getSkill(Skill.ATTACK)
val SkillSet.defence: Skill get() = getSkill(Skill.DEFENCE)
val SkillSet.strength: Skill get() = getSkill(Skill.STRENGTH)
val SkillSet.hitpoints: Skill get() = getSkill(Skill.HITPOINTS)
val SkillSet.ranged: Skill get() = getSkill(Skill.RANGED)
val SkillSet.prayer: Skill get() = getSkill(Skill.PRAYER)
val SkillSet.magic: Skill get() = getSkill(Skill.MAGIC)
val SkillSet.cooking: Skill get() = getSkill(Skill.COOKING)
val SkillSet.woodcutting: Skill get() = getSkill(Skill.WOODCUTTING)
val SkillSet.fletching: Skill get() = getSkill(Skill.FLETCHING)
val SkillSet.fishing: Skill get() = getSkill(Skill.FISHING)
val SkillSet.firemaking: Skill get() = getSkill(Skill.FIREMAKING)
val SkillSet.crafting: Skill get() = getSkill(Skill.CRAFTING)
val SkillSet.smithing: Skill get() = getSkill(Skill.SMITHING)
val SkillSet.mining: Skill get() = getSkill(Skill.MINING)
val SkillSet.herblore: Skill get() = getSkill(Skill.HERBLORE)
val SkillSet.agility: Skill get() = getSkill(Skill.AGILITY)
val SkillSet.thieving: Skill get() = getSkill(Skill.THIEVING)
val SkillSet.slayer: Skill get() = getSkill(Skill.SLAYER)
val SkillSet.farming: Skill get() = getSkill(Skill.FARMING)
val SkillSet.runecraft: Skill get() = getSkill(Skill.RUNECRAFT)
+81
View File
@@ -0,0 +1,81 @@
package org.apollo.game.plugin.api
import org.apollo.game.model.entity.Player
import org.apollo.game.model.entity.Skill
import org.apollo.game.model.entity.SkillSet
val Player.attack: SkillProxy get() = SkillProxy(skillSet, Skill.ATTACK)
val Player.defence: SkillProxy get() = SkillProxy(skillSet, Skill.DEFENCE)
val Player.strength: SkillProxy get() = SkillProxy(skillSet, Skill.STRENGTH)
val Player.hitpoints: SkillProxy get() = SkillProxy(skillSet, Skill.HITPOINTS)
val Player.ranged: SkillProxy get() = SkillProxy(skillSet, Skill.RANGED)
val Player.prayer: SkillProxy get() = SkillProxy(skillSet, Skill.PRAYER)
val Player.magic: SkillProxy get() = SkillProxy(skillSet, Skill.MAGIC)
val Player.cooking: SkillProxy get() = SkillProxy(skillSet, Skill.COOKING)
val Player.woodcutting: SkillProxy get() = SkillProxy(skillSet, Skill.WOODCUTTING)
val Player.fletching: SkillProxy get() = SkillProxy(skillSet, Skill.FLETCHING)
val Player.fishing: SkillProxy get() = SkillProxy(skillSet, Skill.FISHING)
val Player.firemaking: SkillProxy get() = SkillProxy(skillSet, Skill.FIREMAKING)
val Player.crafting: SkillProxy get() = SkillProxy(skillSet, Skill.CRAFTING)
val Player.smithing: SkillProxy get() = SkillProxy(skillSet, Skill.SMITHING)
val Player.mining: SkillProxy get() = SkillProxy(skillSet, Skill.MINING)
val Player.herblore: SkillProxy get() = SkillProxy(skillSet, Skill.HERBLORE)
val Player.agility: SkillProxy get() = SkillProxy(skillSet, Skill.AGILITY)
val Player.thieving: SkillProxy get() = SkillProxy(skillSet, Skill.THIEVING)
val Player.slayer: SkillProxy get() = SkillProxy(skillSet, Skill.SLAYER)
val Player.farming: SkillProxy get() = SkillProxy(skillSet, Skill.FARMING)
val Player.runecraft: SkillProxy get() = SkillProxy(skillSet, Skill.RUNECRAFT)
/**
* A proxy class to allow
*/
class SkillProxy(val skills: SkillSet, val skill: Int) {
/**
* The maximum level of this skill.
*/
val maximum = skills.getMaximumLevel(skill)
/**
* The current level of this skill.
*/
val current = skills.getCurrentLevel(skill)
val experience = ExperienceProxy()
/**
* A proxy class to make [experience] (effectively) write-only.
*/
inner class ExperienceProxy {
operator fun plusAssign(amount: Int) = skills.addExperience(skill, amount.toDouble())
operator fun plusAssign(amount: Double) = skills.addExperience(skill, amount)
}
/**
* Boosts the current level of this skill by [amount], if possible (i.e. if `current + amount <= maximum + amount`).
*/
fun boost(amount: Int) {
val new = Math.min(current + amount, maximum + amount)
skills.setCurrentLevel(skill, new)
}
/**
* Drains the current level of this skill by [amount], if possible (i.e. if `current - amount >= 0`).
*/
fun drain(amount: Int) {
val new = Math.max(current - amount, 0)
skills.setCurrentLevel(skill, new)
}
/**
* Restores the current level of this skill by [amount], if possible (i.e. if `current + amount < maximum`).
*/
fun restore(amount: Int) {
val new = Math.max(current + amount, maximum)
skills.setCurrentLevel(skill, new)
}
}