Lunar spell Fertile Soil translated to Kotlin

This commit is contained in:
bushtail
2022-10-01 05:51:09 +00:00
committed by Ryan
parent 6edc2eb81c
commit 5af39b5b21
5 changed files with 93 additions and 106 deletions
@@ -1,76 +0,0 @@
package core.game.node.entity.skill.magic.lunar;
import core.game.node.Node;
import core.game.node.entity.Entity;
import core.game.node.entity.combat.equipment.SpellType;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.link.audio.Audio;
import core.game.node.entity.player.link.SpellBookManager.SpellBook;
import core.game.node.entity.skill.magic.MagicSpell;
import core.game.node.entity.skill.magic.Runes;
import core.game.node.item.Item;
import core.game.node.scenery.Scenery;
import core.game.world.update.flag.context.Animation;
import core.game.world.update.flag.context.Graphics;
import core.plugin.Initializable;
import core.plugin.Plugin;
import rs09.game.node.entity.skill.farming.CompostType;
import rs09.game.node.entity.skill.farming.FarmingPatch;
import rs09.game.node.entity.skill.farming.Patch;
/**
* Represents the fertile soil spell plugin.
* @author 'Vexia
* @version 1.0
*/
@Initializable
public final class FertileSoilSpell extends MagicSpell {
/**
* Represents the graphic to use.
*/
private static final Graphics GRAPHIC = new Graphics(141, 96);
/**
* Represents the animaton to use.
*/
private static final Animation ANIMATION = new Animation(724);
/**
* Constructs a new {@code FertileSoilSpell} {@code Object}.
*/
public FertileSoilSpell() {
super(SpellBook.LUNAR, 83, 87, null, null, null, new Item[] { new Item(Runes.NATURE_RUNE.getId(), 2), new Item(Runes.ASTRAL_RUNE.getId(), 3), new Item(Runes.EARTH_RUNE.getId(), 15) });
}
@Override
public Plugin<SpellType> newInstance(SpellType arg) throws Throwable {
SpellBook.LUNAR.register(2, this);
return this;
}
@Override
public boolean cast(Entity entity, Node target) {
final Player player = ((Player) entity);
final Scenery object = (Scenery) target;
final FarmingPatch fPatch = FarmingPatch.forObject(object);
if(fPatch == null){
player.sendMessage("Um... I don't want to fertilize that!");
return false;
}
final Patch patch = fPatch.getPatchFor(player);
if(patch.getCompost() != CompostType.NONE){
player.sendMessage("This patch has already been composted.");
return false;
}
if (!super.meetsRequirements(player, true, true)) {
return false;
}
patch.setCompost(CompostType.SUPER);
player.sendMessage("You fertilize the soil.");
player.graphics(GRAPHIC);
player.animate(ANIMATION);
player.getAudioManager().send(2891, 1, 1);
return true;
}
}
@@ -96,6 +96,10 @@ class Patch(val player: Player, val patch: FarmingPatch, var plantable: Plantabl
updateBit() updateBit()
} }
fun isFertilized(): Boolean {
return compost != CompostType.NONE
}
fun isGrown(): Boolean{ fun isGrown(): Boolean{
return currentGrowthStage == (plantable?.stages ?: 0) return currentGrowthStage == (plantable?.stages ?: 0)
} }
@@ -4,22 +4,27 @@ import core.game.world.update.flag.context.Animation
import core.game.world.update.flag.context.Graphics import core.game.world.update.flag.context.Graphics
import org.rs09.consts.Items import org.rs09.consts.Items
// Animations
val BAKE_PIE_ANIM = Animation(4413) val BAKE_PIE_ANIM = Animation(4413)
val BAKE_PIE_GFX = Graphics(746,75)
val STATSPY_ANIM = Animation(6293) val STATSPY_ANIM = Animation(6293)
val STATSPY_GFX = Graphics(1059)
val CURE_PLANT_ANIM = Animation(4409) val CURE_PLANT_ANIM = Animation(4409)
val CURE_PLANT_GFX = Graphics(742,100)
val NPC_CONTACT_ANIM = Animation(4413) val NPC_CONTACT_ANIM = Animation(4413)
val NPC_CONTACT_GFX = Graphics(730,130)
val PLANK_MAKE_ANIM = Animation(6298) val PLANK_MAKE_ANIM = Animation(6298)
val PLANK_MAKE_GFX = Graphics(1063, 120)
val STRING_JEWELLERY_ANIM = Animation(4412) val STRING_JEWELLERY_ANIM = Animation(4412)
val STRING_JEWELLERY_GFX = Graphics(728, 100)
val SUPERGLASS_MAKE_ANIM = Animation(4413) val SUPERGLASS_MAKE_ANIM = Animation(4413)
val SUPERGLASS_MAKE_GFX = Graphics(729, 120) val FERTILE_SOIL_ANIM = Animation(724)
// Graphics
val BAKE_PIE_GFX = Graphics(746,75)
val STATSPY_GFX = Graphics(1059)
val CURE_PLANT_GFX = Graphics(742,100)
val NPC_CONTACT_GFX = Graphics(730,130)
val PLANK_MAKE_GFX = Graphics(1063, 120)
val STRING_JEWELLERY_GFX = Graphics(728, 100)
val SUPERGLASS_MAKE_GFX = Graphics(729, 120)
val FERTILE_SOIL_GFX = Graphics(141, 96)
enum class JewelleryString(val unstrung: Int, val strung: Int) { enum class JewelleryString(val unstrung: Int, val strung: Int) {
GOLD(Items.GOLD_AMULET_1673, Items.GOLD_AMULET_1692), GOLD(Items.GOLD_AMULET_1673, Items.GOLD_AMULET_1692),
SAPPHIRE(Items.SAPPHIRE_AMULET_1675, Items.SAPPHIRE_AMULET_1694), SAPPHIRE(Items.SAPPHIRE_AMULET_1675, Items.SAPPHIRE_AMULET_1694),
@@ -13,11 +13,11 @@ import core.game.node.item.Item
import core.game.system.task.Pulse import core.game.system.task.Pulse
import core.game.world.map.Location import core.game.world.map.Location
import core.game.world.map.RegionManager import core.game.world.map.RegionManager
import core.game.world.update.flag.context.Animation
import core.game.world.update.flag.context.Graphics
import core.tools.RandomFunction import core.tools.RandomFunction
import org.rs09.consts.Components import org.rs09.consts.Components
import org.rs09.consts.Items import org.rs09.consts.Items
import rs09.game.node.entity.skill.farming.CompostBins
import rs09.game.node.entity.skill.farming.CompostType
import rs09.game.node.entity.skill.farming.FarmingPatch import rs09.game.node.entity.skill.farming.FarmingPatch
import rs09.game.node.entity.skill.magic.spellconsts.Lunar import rs09.game.node.entity.skill.magic.spellconsts.Lunar
import rs09.game.system.config.NPCConfigParser import rs09.game.system.config.NPCConfigParser
@@ -26,24 +26,24 @@ class LunarListeners : SpellListener("lunar") {
override fun defineListeners() { override fun defineListeners() {
onCast(Lunar.HOME_TELEPORT, NONE){player, _ -> onCast(Lunar.HOME_TELEPORT, NONE) { player, _ ->
requires(player) requires(player)
sendTeleport(player,0.0, Location.create(2100, 3914, 0)) sendTeleport(player,0.0, Location.create(2100, 3914, 0))
} }
onCast(Lunar.MOONCLAN_TELEPORT, NONE){player, _ -> onCast(Lunar.MOONCLAN_TELEPORT, NONE) { player, _ ->
requires(player,69, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563,1), Item(Items.EARTH_RUNE_557,2))) requires(player,69, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563,1), Item(Items.EARTH_RUNE_557,2)))
player.getAudioManager().send(Audio(200), true) player.getAudioManager().send(Audio(200), true)
sendTeleport(player,66.0, Location.create(2111, 3916, 0)) sendTeleport(player,66.0, Location.create(2111, 3916, 0))
} }
onCast(Lunar.MOONCLAN_GR_TELEPORT, NONE){player, _ -> onCast(Lunar.MOONCLAN_GR_TELEPORT, NONE) { player, _ ->
requires(player,70, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563,1), Item(Items.EARTH_RUNE_557,4))) requires(player,70, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563,1), Item(Items.EARTH_RUNE_557,4)))
player.getAudioManager().send(Audio(200), true) player.getAudioManager().send(Audio(200), true)
sendGroupTeleport(player,67.0,"Moonclan Island",Location.create(2111, 3916, 0)) sendGroupTeleport(player,67.0,"Moonclan Island",Location.create(2111, 3916, 0))
} }
onCast(Lunar.OURANIA_TELEPORT, NONE){player,_ -> onCast(Lunar.OURANIA_TELEPORT, NONE) { player, _ ->
requires(player,71, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563,1), Item(Items.EARTH_RUNE_557,6))) requires(player,71, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563,1), Item(Items.EARTH_RUNE_557,6)))
player.getAudioManager().send(Audio(200), true) player.getAudioManager().send(Audio(200), true)
sendTeleport(player,69.0, Location.create(2469, 3247, 0)) sendTeleport(player,69.0, Location.create(2469, 3247, 0))
@@ -55,88 +55,88 @@ class LunarListeners : SpellListener("lunar") {
sendTeleport(player,71.0, Location.create(2527, 3739, 0)) sendTeleport(player,71.0, Location.create(2527, 3739, 0))
} }
onCast(Lunar.WATERBIRTH_GR_TELEPORT, NONE){player,_ -> onCast(Lunar.WATERBIRTH_GR_TELEPORT, NONE) { player, _ ->
requires(player,73, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563), Item(Items.WATER_RUNE_555,5))) requires(player,73, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563), Item(Items.WATER_RUNE_555,5)))
player.getAudioManager().send(Audio(200), true) player.getAudioManager().send(Audio(200), true)
sendGroupTeleport(player,72.0,"Waterbirth Island", Location.create(2527, 3739, 0)) sendGroupTeleport(player,72.0,"Waterbirth Island", Location.create(2527, 3739, 0))
} }
onCast(Lunar.BARBARIAN_TELEPORT, NONE){player,_ -> onCast(Lunar.BARBARIAN_TELEPORT, NONE) { player, _ ->
requires(player,75, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563,2), Item(Items.FIRE_RUNE_554,3))) requires(player,75, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563,2), Item(Items.FIRE_RUNE_554,3)))
player.getAudioManager().send(Audio(200), true) player.getAudioManager().send(Audio(200), true)
sendTeleport(player,76.0, Location.create(2544, 3572, 0)) sendTeleport(player,76.0, Location.create(2544, 3572, 0))
} }
onCast(Lunar.BARBARIAN_GR_TELEPORT, NONE){player,_ -> onCast(Lunar.BARBARIAN_GR_TELEPORT, NONE) { player, _ ->
requires(player,77, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563,2), Item(Items.FIRE_RUNE_554,6))) requires(player,77, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563,2), Item(Items.FIRE_RUNE_554,6)))
player.getAudioManager().send(Audio(200), true) player.getAudioManager().send(Audio(200), true)
sendGroupTeleport(player,77.0,"Barbarian Outpost", Location.create(2544, 3572, 0)) sendGroupTeleport(player,77.0,"Barbarian Outpost", Location.create(2544, 3572, 0))
} }
onCast(Lunar.KHAZARD_TELEPORT, NONE){player,_ -> onCast(Lunar.KHAZARD_TELEPORT, NONE) { player, _ ->
requires(player,78, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563,2), Item(Items.WATER_RUNE_555,4))) requires(player,78, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563,2), Item(Items.WATER_RUNE_555,4)))
player.getAudioManager().send(Audio(200), true) player.getAudioManager().send(Audio(200), true)
sendTeleport(player,80.0, Location.create(2656, 3157, 0)) sendTeleport(player,80.0, Location.create(2656, 3157, 0))
} }
onCast(Lunar.KHAZARD_GR_TELEPORT, NONE){player,_ -> onCast(Lunar.KHAZARD_GR_TELEPORT, NONE) { player, _ ->
requires(player,79, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563,2), Item(Items.WATER_RUNE_555,8))) requires(player,79, arrayOf(Item(Items.ASTRAL_RUNE_9075,2), Item(Items.LAW_RUNE_563,2), Item(Items.WATER_RUNE_555,8)))
player.getAudioManager().send(Audio(200), true) player.getAudioManager().send(Audio(200), true)
sendGroupTeleport(player,81.0, "Port Khazard", Location.create(2656, 3157, 0)) sendGroupTeleport(player,81.0, "Port Khazard", Location.create(2656, 3157, 0))
} }
onCast(Lunar.FISHING_GUILD_TELEPORT, NONE){player,_ -> onCast(Lunar.FISHING_GUILD_TELEPORT, NONE) { player, _ ->
requires(player,85, arrayOf(Item(Items.ASTRAL_RUNE_9075,3), Item(Items.LAW_RUNE_563,3), Item(Items.WATER_RUNE_555,10))) requires(player,85, arrayOf(Item(Items.ASTRAL_RUNE_9075,3), Item(Items.LAW_RUNE_563,3), Item(Items.WATER_RUNE_555,10)))
player.getAudioManager().send(Audio(200), true) player.getAudioManager().send(Audio(200), true)
sendTeleport(player,89.0, Location.create(2611, 3393, 0)) sendTeleport(player,89.0, Location.create(2611, 3393, 0))
} }
onCast(Lunar.FISHING_GUILD_GR_TELEPORT, NONE){player,_ -> onCast(Lunar.FISHING_GUILD_GR_TELEPORT, NONE) { player, _ ->
requires(player,86, arrayOf(Item(Items.ASTRAL_RUNE_9075,3), Item(Items.LAW_RUNE_563,3), Item(Items.WATER_RUNE_555,14))) requires(player,86, arrayOf(Item(Items.ASTRAL_RUNE_9075,3), Item(Items.LAW_RUNE_563,3), Item(Items.WATER_RUNE_555,14)))
player.getAudioManager().send(Audio(200), true) player.getAudioManager().send(Audio(200), true)
sendGroupTeleport(player,90.0,"Fishing Guild", Location.create(2611, 3393, 0)) sendGroupTeleport(player,90.0,"Fishing Guild", Location.create(2611, 3393, 0))
} }
onCast(Lunar.CATHERBY_TELEPORT, NONE){player,_ -> onCast(Lunar.CATHERBY_TELEPORT, NONE) { player, _ ->
requires(player,87, arrayOf(Item(Items.ASTRAL_RUNE_9075,3), Item(Items.LAW_RUNE_563,3), Item(Items.WATER_RUNE_555,10))) requires(player,87, arrayOf(Item(Items.ASTRAL_RUNE_9075,3), Item(Items.LAW_RUNE_563,3), Item(Items.WATER_RUNE_555,10)))
player.getAudioManager().send(Audio(200), true) player.getAudioManager().send(Audio(200), true)
sendTeleport(player,92.0, Location.create(2804, 3433, 0)) sendTeleport(player,92.0, Location.create(2804, 3433, 0))
} }
onCast(Lunar.CATHERBY_GR_TELEPORT, NONE){player,_ -> onCast(Lunar.CATHERBY_GR_TELEPORT, NONE) { player, _ ->
requires(player,88, arrayOf(Item(Items.ASTRAL_RUNE_9075,3), Item(Items.LAW_RUNE_563,3), Item(Items.WATER_RUNE_555,15))) requires(player,88, arrayOf(Item(Items.ASTRAL_RUNE_9075,3), Item(Items.LAW_RUNE_563,3), Item(Items.WATER_RUNE_555,15)))
player.getAudioManager().send(Audio(200), true) player.getAudioManager().send(Audio(200), true)
sendGroupTeleport(player,93.0,"Catherby", Location.create(2804, 3433, 0)) sendGroupTeleport(player,93.0,"Catherby", Location.create(2804, 3433, 0))
} }
onCast(Lunar.ICE_PLATEAU_TELEPORT, NONE){player,_ -> onCast(Lunar.ICE_PLATEAU_TELEPORT, NONE) { player, _ ->
requires(player,89, arrayOf(Item(Items.ASTRAL_RUNE_9075,3), Item(Items.LAW_RUNE_563,3), Item(Items.WATER_RUNE_555,8))) requires(player,89, arrayOf(Item(Items.ASTRAL_RUNE_9075,3), Item(Items.LAW_RUNE_563,3), Item(Items.WATER_RUNE_555,8)))
player.getAudioManager().send(Audio(200), true) player.getAudioManager().send(Audio(200), true)
sendTeleport(player,96.0, Location.create(2972, 3873, 0)) sendTeleport(player,96.0, Location.create(2972, 3873, 0))
} }
onCast(Lunar.ICE_PLATEAU_GR_TELEPORT, NONE){player,_ -> onCast(Lunar.ICE_PLATEAU_GR_TELEPORT, NONE) { player, _ ->
requires(player,90, arrayOf(Item(Items.ASTRAL_RUNE_9075,3), Item(Items.LAW_RUNE_563,3), Item(Items.WATER_RUNE_555,16))) requires(player,90, arrayOf(Item(Items.ASTRAL_RUNE_9075,3), Item(Items.LAW_RUNE_563,3), Item(Items.WATER_RUNE_555,16)))
player.getAudioManager().send(Audio(200), true) player.getAudioManager().send(Audio(200), true)
sendGroupTeleport(player,99.0, "Ice Plateau", Location.create(2972, 3873, 0)) sendGroupTeleport(player,99.0, "Ice Plateau", Location.create(2972, 3873, 0))
} }
onCast(Lunar.BAKE_PIE, NONE){player,_ -> onCast(Lunar.BAKE_PIE, NONE) { player, _ ->
requires(player,65, arrayOf(Item(Items.ASTRAL_RUNE_9075), Item(Items.FIRE_RUNE_554,5), Item(Items.WATER_RUNE_555,4))) requires(player,65, arrayOf(Item(Items.ASTRAL_RUNE_9075), Item(Items.FIRE_RUNE_554,5), Item(Items.WATER_RUNE_555,4)))
bakePie(player) bakePie(player)
} }
onCast(Lunar.MONSTER_EXAMINE, NPC){player,node -> onCast(Lunar.MONSTER_EXAMINE, NPC) { player, node ->
requires(player,66, arrayOf(Item(Items.ASTRAL_RUNE_9075), Item(Items.MIND_RUNE_558), Item(Items.COSMIC_RUNE_564))) requires(player,66, arrayOf(Item(Items.ASTRAL_RUNE_9075), Item(Items.MIND_RUNE_558), Item(Items.COSMIC_RUNE_564)))
examineMonster(player,node!!.asNpc()) examineMonster(player,node!!.asNpc())
} }
onCast(Lunar.CURE_PLANT, OBJECT){player,node -> onCast(Lunar.CURE_PLANT, OBJECT) { player, node ->
requires(player,66, arrayOf(Item(Items.ASTRAL_RUNE_9075), Item(Items.EARTH_RUNE_557,8))) requires(player,66, arrayOf(Item(Items.ASTRAL_RUNE_9075), Item(Items.EARTH_RUNE_557,8)))
curePlant(player,node!!.asScenery()) curePlant(player,node!!.asScenery())
} }
onCast(Lunar.NPC_CONTACT, NONE){ player, _ -> onCast(Lunar.NPC_CONTACT, NONE) { player, _ ->
requires(player,67, arrayOf(Item(Items.ASTRAL_RUNE_9075), Item(Items.COSMIC_RUNE_564), Item(Items.AIR_RUNE_556,2))) requires(player,67, arrayOf(Item(Items.ASTRAL_RUNE_9075), Item(Items.COSMIC_RUNE_564), Item(Items.AIR_RUNE_556,2)))
player.interfaceManager.open(Component(429)) player.interfaceManager.open(Component(429))
player.setAttribute("contact-caller"){ player.setAttribute("contact-caller"){
@@ -157,10 +157,14 @@ class LunarListeners : SpellListener("lunar") {
stringJewellery(player) stringJewellery(player)
} }
onCast(Lunar.SUPERGLASS_MAKE, NONE) {player, _ -> onCast(Lunar.SUPERGLASS_MAKE, NONE) { player, _ ->
requires(player, 77, arrayOf(Item(Items.ASTRAL_RUNE_9075, 2), Item(Items.FIRE_RUNE_554, 6), Item(Items.AIR_RUNE_556, 10))) requires(player, 77, arrayOf(Item(Items.ASTRAL_RUNE_9075, 2), Item(Items.FIRE_RUNE_554, 6), Item(Items.AIR_RUNE_556, 10)))
superglassMake(player) superglassMake(player)
} }
onCast(Lunar.FERTILE_SOIL, OBJECT) { player, node ->
fertileSoil(player, node!!.asScenery())
}
} }
private fun plankMake(player: Player, item: Item) { private fun plankMake(player: Player, item: Item) {
@@ -393,4 +397,37 @@ class LunarListeners : SpellListener("lunar") {
addXP(player, 78.0) addXP(player, 78.0)
} }
} }
}
private fun fertileSoil(player: Player, target: Scenery) {
if (CompostBins.forObjectID(target.id) != null) {
sendMessage(player, "No, that would be silly.")
return
}
val fPatch = FarmingPatch.forObject(target)
if(fPatch == null) {
sendMessage(player, "Um... I don't want to fertilize that!")
return
}
val patch = fPatch.getPatchFor(player)
if (patch.isGrown()) {
sendMessage(player, "Composting isn't going to make it get any bigger.")
return
}
if (patch.isFertilized()) {
sendMessage(player, "This patch has already been composted.")
return
}
requires(player, 83, arrayOf(Item(Items.ASTRAL_RUNE_9075, 3), Item(Items.NATURE_RUNE_561, 2), Item(Items.EARTH_RUNE_557, 15)))
removeRunes(player, true)
visualizeSpell(player, FERTILE_SOIL_ANIM, FERTILE_SOIL_GFX, 2891)
patch.compost = CompostType.SUPER
sendMessage(player, "You fertilize the soil.")
addXP(player, 87.0)
}
}
@@ -2,19 +2,36 @@ package rs09.game.node.entity.skill.magic.spellconsts
object Lunar { object Lunar {
const val BARBARIAN_TELEPORT = 0 const val BARBARIAN_TELEPORT = 0
const val CURE_OTHER = 1
const val FERTILE_SOIL = 2
const val CURE_GROUP = 3
const val NPC_CONTACT = 4 const val NPC_CONTACT = 4
const val ENERGY_TRANSFER = 5
const val MONSTER_EXAMINE = 6 const val MONSTER_EXAMINE = 6
const val HUMIDIFY = 7
const val HUNTER_KIT = 8
const val STAT_SPY = 9
const val DREAM = 10
const val PLANK_MAKE = 11 const val PLANK_MAKE = 11
const val SPELLBOOK_SWAP = 12
const val MAGIC_IMBUE = 13
const val VENGEANCE = 14
const val BAKE_PIE = 15 const val BAKE_PIE = 15
const val HOME_TELEPORT = 16 const val HOME_TELEPORT = 16
const val FISHING_GUILD_TELEPORT = 17 const val FISHING_GUILD_TELEPORT = 17
const val KHAZARD_TELEPORT = 18 const val KHAZARD_TELEPORT = 18
const val VENGEANCE_OTHER = 19
const val MOONCLAN_TELEPORT = 20 const val MOONCLAN_TELEPORT = 20
const val CATHERBY_TELEPORT = 21 const val CATHERBY_TELEPORT = 21
const val STRING_JEWELLERY = 22 const val STRING_JEWELLERY = 22
const val CURE_ME = 23
const val WATERBIRTH_TELEPORT = 24 const val WATERBIRTH_TELEPORT = 24
const val SUPERGLASS_MAKE = 25 const val SUPERGLASS_MAKE = 25
const val BOOST_POTION_SHARE = 26
const val STAT_RESTORE_POT_SHARE = 27
const val ICE_PLATEAU_TELEPORT = 28 const val ICE_PLATEAU_TELEPORT = 28
const val HEAL_OTHER = 29
const val HEAL_GROUP = 30
const val OURANIA_TELEPORT = 31 const val OURANIA_TELEPORT = 31
const val CURE_PLANT = 32 const val CURE_PLANT = 32
const val MOONCLAN_GR_TELEPORT = 33 const val MOONCLAN_GR_TELEPORT = 33