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()
}
fun isFertilized(): Boolean {
return compost != CompostType.NONE
}
fun isGrown(): Boolean{
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 org.rs09.consts.Items
// Animations
val BAKE_PIE_ANIM = Animation(4413)
val BAKE_PIE_GFX = Graphics(746,75)
val STATSPY_ANIM = Animation(6293)
val STATSPY_GFX = Graphics(1059)
val CURE_PLANT_ANIM = Animation(4409)
val CURE_PLANT_GFX = Graphics(742,100)
val NPC_CONTACT_ANIM = Animation(4413)
val NPC_CONTACT_GFX = Graphics(730,130)
val PLANK_MAKE_ANIM = Animation(6298)
val PLANK_MAKE_GFX = Graphics(1063, 120)
val STRING_JEWELLERY_ANIM = Animation(4412)
val STRING_JEWELLERY_GFX = Graphics(728, 100)
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) {
GOLD(Items.GOLD_AMULET_1673, Items.GOLD_AMULET_1692),
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.world.map.Location
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 org.rs09.consts.Components
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.magic.spellconsts.Lunar
import rs09.game.system.config.NPCConfigParser
@@ -26,24 +26,24 @@ class LunarListeners : SpellListener("lunar") {
override fun defineListeners() {
onCast(Lunar.HOME_TELEPORT, NONE){player, _ ->
onCast(Lunar.HOME_TELEPORT, NONE) { player, _ ->
requires(player)
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)))
player.getAudioManager().send(Audio(200), true)
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)))
player.getAudioManager().send(Audio(200), true)
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)))
player.getAudioManager().send(Audio(200), true)
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))
}
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)))
player.getAudioManager().send(Audio(200), true)
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)))
player.getAudioManager().send(Audio(200), true)
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)))
player.getAudioManager().send(Audio(200), true)
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)))
player.getAudioManager().send(Audio(200), true)
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)))
player.getAudioManager().send(Audio(200), true)
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)))
player.getAudioManager().send(Audio(200), true)
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)))
player.getAudioManager().send(Audio(200), true)
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)))
player.getAudioManager().send(Audio(200), true)
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)))
player.getAudioManager().send(Audio(200), true)
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)))
player.getAudioManager().send(Audio(200), true)
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)))
player.getAudioManager().send(Audio(200), true)
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)))
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)))
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)))
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)))
player.interfaceManager.open(Component(429))
player.setAttribute("contact-caller"){
@@ -157,10 +157,14 @@ class LunarListeners : SpellListener("lunar") {
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)))
superglassMake(player)
}
onCast(Lunar.FERTILE_SOIL, OBJECT) { player, node ->
fertileSoil(player, node!!.asScenery())
}
}
private fun plankMake(player: Player, item: Item) {
@@ -393,4 +397,37 @@ class LunarListeners : SpellListener("lunar") {
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 {
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 ENERGY_TRANSFER = 5
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 SPELLBOOK_SWAP = 12
const val MAGIC_IMBUE = 13
const val VENGEANCE = 14
const val BAKE_PIE = 15
const val HOME_TELEPORT = 16
const val FISHING_GUILD_TELEPORT = 17
const val KHAZARD_TELEPORT = 18
const val VENGEANCE_OTHER = 19
const val MOONCLAN_TELEPORT = 20
const val CATHERBY_TELEPORT = 21
const val STRING_JEWELLERY = 22
const val CURE_ME = 23
const val WATERBIRTH_TELEPORT = 24
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 HEAL_OTHER = 29
const val HEAL_GROUP = 30
const val OURANIA_TELEPORT = 31
const val CURE_PLANT = 32
const val MOONCLAN_GR_TELEPORT = 33