diff --git a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/GnomeBowstring.kt b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/GnomeBowstring.kt new file mode 100644 index 000000000..e264ec422 --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/GnomeBowstring.kt @@ -0,0 +1,173 @@ +package rs09.game.ai.general.scriptrepository + +import api.ContentAPI +import core.game.interaction.DestinationFlag +import core.game.interaction.MovementPulse +import core.game.node.entity.skill.crafting.spinning.SpinningItem +import core.game.node.entity.skill.crafting.spinning.SpinningPulse +import core.game.node.item.Item +import core.game.world.map.Location +import core.game.world.map.path.Pathfinder +import core.game.world.map.zone.ZoneBorders +import org.rs09.consts.Items +import rs09.game.ai.general.ScriptAPI + +@PlayerCompatible +@ScriptName("Gnome Stronghold Bowstring") +@ScriptDescription("Start in Gnome Stronghold, South of the Agility Course") +@ScriptIdentifier("gnome_bowstring") +class GnomeBowstring : Script() { + var state = State.PICKING + var stage = 0 + var bLadderSwitch = false + var sLadderSwitch = false + val flaxzone = ZoneBorders(2457,3391,2493,3413,0) + val bankbottomLadder = ZoneBorders(2444, 3413, 2445, 3414, 0) + val banktopLadder = ZoneBorders(2445, 3415, 2446, 3414, 1) + val spinnerbottomLadder = ZoneBorders (2475, 3400, 2476, 3399, 0) + val spinnertopLadder = ZoneBorders (2474, 3397, 2476, 3399, 1) + val pick = ZoneBorders(2478, 3394, 339, 9) + val bank = ZoneBorders(2447, 3415, 2444, 3434) + var overlay: ScriptAPI.BottingOverlay? = null + override fun tick() { + + when(state){ + + State.INIT -> { + overlay = scriptAPI.getOverlay() + overlay!!.init() + overlay!!.setTitle("Picking") + overlay!!.setTaskLabel("Flax Picked") + overlay!!.setAmount(0) + } + + State.PICKING -> { + bot.interfaceManager.close() + if(!flaxzone.insideBorder(bot)){ + scriptAPI.walkTo(flaxzone.randomLoc) + } else if(flaxzone.insideBorder(bot)) { + var flax = scriptAPI.getNearestNode(2646, true) + scriptAPI.interact(bot,flax,"pick") + } + if(bot.inventory.getAmount(Items.FLAX_1779) > 27){ + sLadderSwitch = true + state = State.TO_SPINNER + } + } + + State.TO_SPINNER -> { + if(sLadderSwitch){ + if(!spinnerbottomLadder.insideBorder(bot.location)){ + scriptAPI.walkTo(spinnerbottomLadder.randomLoc) + } else { + val ladder = scriptAPI.getNearestNode("Staircase", true) + if(ladder != null){ + ladder.interaction.handle(bot, ladder.interaction[0]) + sLadderSwitch = false + } else { + scriptAPI.walkTo(spinnerbottomLadder.randomLoc) + } + } + } + if(stage == 0) + Pathfinder.find(bot, Location.create(2475,3399, 1)).walk(bot).also { stage++ } + when(bot.location){ + Location.create(2475,3399, 1) -> Pathfinder.find(bot, Location.create(2477, 3399,1)).walk(bot) + Location.create(2477,3399, 1) -> Pathfinder.find(bot, Location.create(2477,3398, 1)).walk(bot) + Location.create(2477,3398, 1) -> Pathfinder.find(bot, Location.create(2476,3398, 1)).walk(bot) + Location.create(2476,3398, 1) -> { + val spinner = scriptAPI.getNearestNode(2644, true) + bot.faceLocation(spinner?.location) + bot.pulseManager.run(object: MovementPulse(bot,spinner, DestinationFlag.OBJECT){ + override fun pulse(): Boolean { + bot.faceLocation(spinner?.location) + state = State.SPINNING + return true + } + }) + } + } + } + + State.SPINNING -> { + bot.pulseManager.run(SpinningPulse(bot, Item(Items.FLAX_1779),bot.inventory.getAmount(Items.FLAX_1779),SpinningItem.FLAX)) + sLadderSwitch = true + state = State.FIND_BANK + } + + State.FIND_BANK -> { + if(sLadderSwitch){ + val ladder = scriptAPI.getNearestNode("staircase", true) + if(ladder != null){ + ladder.interaction.handle(bot, ladder.interaction[0]) + sLadderSwitch = false + } + } + if(!bankbottomLadder.insideBorder(bot.location) && !spinnertopLadder.insideBorder(bot)){ + scriptAPI.walkTo(bankbottomLadder.randomLoc) + }else if(bankbottomLadder.insideBorder(bot)){ + bLadderSwitch = true + } + if(bLadderSwitch){ + val ladder = scriptAPI.getNearestNode("staircase", true) + if(ladder != null){ + ladder.interaction.handle(bot, ladder.interaction[0]) + bLadderSwitch = false + } + } + if(banktopLadder.insideBorder(bot)){ + state = State.BANKING + } + } + + State.BANKING -> { + val bank = scriptAPI.getNearestNode(2213, true) + if(bank != null) { + bot.pulseManager.run(object : MovementPulse(bot, bank, DestinationFlag.OBJECT) { + override fun pulse(): Boolean { + bot.faceLocation(bank.location) + scriptAPI.bankItem(Items.BOW_STRING_1777) + return true + } + }) + } + if(ContentAPI.freeSlots(bot) > 27){ + bLadderSwitch = true + state = State.RETURN_TO_FLAX + } + } + + State.RETURN_TO_FLAX -> { + if(!banktopLadder.insideBorder(bot.location) && bLadderSwitch){ + scriptAPI.walkTo(banktopLadder.randomLoc) + } else if(bLadderSwitch){ + val ladder = scriptAPI.getNearestNode("Staircase", true) + if(ladder != null){ + ladder.interaction.handle(bot, ladder.interaction[0]) + bLadderSwitch = false + } else { + scriptAPI.walkTo(banktopLadder.randomLoc) + } + } + if(!flaxzone.insideBorder(bot)){ + scriptAPI.walkTo(flaxzone.randomLoc) + } else if(flaxzone.insideBorder(bot)){ + state = State.PICKING + } + } + } + } + override fun newInstance(): Script { + TODO("Not yet implemented") + } +} +enum class State { + PICKING, + MINING, + SPINNING, + TO_SPINNER, + FIND_BANK, + RETURN_TO_FLAX, + BANKING, + INIT +}