sessionDestination As work around for session Node travel. some egg cannon work

This commit is contained in:
Tooze 2026-02-01 21:07:13 -05:00
parent 8a2b160df1
commit 5c93a3fa0e
2 changed files with 74 additions and 11 deletions

View file

@ -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<String>("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.

View file

@ -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<String, Int> {
val added = mutableMapOf<String, Int>()
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<Any> {
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")
}
}