diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index cd2f18628..9dfe0d991 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -25,6 +25,7 @@ import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.map.Direction import core.game.world.map.Location +import core.game.world.map.RegionManager import core.game.world.map.zone.ZoneBorders import core.game.world.update.flag.context.Animation import core.tools.Log @@ -105,11 +106,9 @@ class BarbassaultGameArea : InteractionListener, MapArea { EggCannon.openTurretIface(player) return@on true } - setDest(IntType.SCENERY,Scenery.EGG_HOPPER_20264){ player,node -> - return@setDest Location.create(player.location.x, player.location.y-1, 0) - } - on(Scenery.EGG_HOPPER_20264, IntType.SCENERY, "Load","Look-in") { player, node -> + val loc = player.location + player.faceLocation(location(loc.x,loc.y+1,0)) val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false when(optionClicked){ "Load" -> loadEggHopper(player) @@ -118,6 +117,14 @@ class BarbassaultGameArea : InteractionListener, MapArea { return@on true } + //wrapperID for hopper + on(20267, IntType.SCENERY, "Load","Look-in") { player, node -> + sendMessage(player,"hopper") + return@on true + } + setDest(IntType.SCENERY, Scenery.EGG_HOPPER_20264) { player, node -> + return@setDest sessionDestination(player as Player,node,Direction.SOUTH) + } on(Fix_trap_IDs, IntType.SCENERY, "Fix") { player, node -> if (hasTools(player)) { return@on true } @@ -287,6 +294,16 @@ class BarbassaultGameArea : InteractionListener, MapArea { } }) } + fun sessionDestination(player: Player, node: Node, direction: Direction? = null): Location { + val session = player.baSession ?: return node.location + val borders = getRegionBorders(session.region.regionId) + val base = session.base + return Location.create( + base.x + node.location.x - borders.southWestX + (direction?.stepX ?: 0), + base.y + node.location.y - borders.southWestY + (direction?.stepY ?: 0), + base.z + ) + } private fun hasTools(player: Player): Boolean{ if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id != DEFENDER_ICON) {return true} val requiredItems = listOf(Items.HAMMER_2347, Items.LOGS_11760) @@ -299,6 +316,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { return false } } + fun exitMiniGame(player: Player) { // openOverlay(player,493) // work around to actually close interfaces. //player.interfaceManager.closeOverlay()//maybe im doing this wrong. diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt index cd391a1c7..d7742fb8d 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -32,14 +32,21 @@ class EggCannon : ComponentPlugin() { private val easterEggSequence = listOf(56, 38, 26, 26, 56, 56) fun checkEasterEgg(player: Player,button: Int) { currentSequence.add(button) - println("Current sequence: $currentSequence + $button") + // println("Current sequence: $currentSequence + $button") while(currentSequence.size > easterEggSequence.size) { currentSequence.removeAt(0) } if(currentSequence.takeLast(easterEggSequence.size) == easterEggSequence) { sendMessage(player, "[BlickySwitch] Activated!") - //does nothing, just a silly message currentSequence.clear() + if (player.isAdmin) { //ADMIN ONLY! + val eggHopper = player.baSession?.eggHopper + eggHopper?.green = 99 + eggHopper?.red = 99 + eggHopper?.blue = 99 + updateCannonUI(player) + + } } } //END BINKY// @@ -47,7 +54,6 @@ class EggCannon : ComponentPlugin() { data class EggHopperCount(var red: Int = 0,var blue: Int = 0, var green: Int = 0, var yellow: Int = 0 ){ fun addEggs(redToAdd: Int = 0, blueToAdd: Int = 0, greenToAdd: Int = 0, yellowToAdd: Int = 0): Map { val added = mutableMapOf() - val newRed = (red + redToAdd).coerceAtMost(5) added["red"] = newRed - red red = newRed @@ -66,6 +72,21 @@ class EggCannon : ComponentPlugin() { return added } + fun consumeGreen(): Boolean { + if (green <= 0) return false + green-- + return true + } + fun consumeRed(): Boolean { + if (red <= 0) return false + red-- + return true + } + fun consumeBlue(): Boolean { + if (blue <= 0) return false + blue-- + return true + } } override fun newInstance(arg: Any?): Plugin { ComponentDefinition.forId(EggTurret.ID).plugin = this @@ -102,6 +123,7 @@ class EggCannon : ComponentPlugin() { } fun shootNormalEggs(button: Int,player: Player?) { player ?: return + val eggHopper = player.baSession?.eggHopper val penanceSets = listOf( "Penance Healer" to EggTurret.pHealerBtns, "Penance Runner" to EggTurret.pRunnerBtns, @@ -110,11 +132,33 @@ class EggCannon : ComponentPlugin() { ) for ((name, colors) in penanceSets) { when(button) { - colors.green -> { sendMessage(player, "Shoot poison at $name.");return } - colors.red -> { sendMessage(player, "Shoot Explosive at $name.");return } - colors.blue -> { sendMessage(player, "Shoot Stun at $name.");return } + colors.green -> { + if (!eggHopper?.consumeGreen()!!) { + sendMessage(player, "There are no green eggs in the hopper.") + return + } + sendMessage(player, "Shoot poison at $name."); + return + } + colors.red -> { + if (!eggHopper?.consumeRed()!!) { + sendMessage(player, "There are no red eggs in the hopper.") + return + } + sendMessage(player, "Shoot Explosive at $name.") + return + } + colors.blue -> { + if (!eggHopper?.consumeBlue()!!) { + sendMessage(player, "There are no blue eggs in the hopper.") + return + } + sendMessage(player, "Shoot Stun at $name.") + return + } } } + updateCannonUI(player) } fun updateCannonUI(player: Player?){ @@ -123,7 +167,7 @@ class EggCannon : ComponentPlugin() { val penances = listOf( EggTurret.pHealer, EggTurret.pRunner, EggTurret.pRanger, EggTurret.pFighter ) penances.forEach { penance -> - val colors = listOf( "green" to penance.green," red" to penance.red, "blue" to penance.blue) + val colors = listOf( "green" to penance.green,"red" to penance.red, "blue" to penance.blue) colors.forEach { (colorName, componentId) -> val value = when(colorName) { "green" -> eggHopper.green @@ -165,6 +209,7 @@ class EggCannon : ComponentPlugin() { player ?: return val eggsCount = player.baSession?.eggHopper sendDialogueLines(player,"$eggsCount") + sendMessage(player,"$eggsCount") } }