diff --git a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt index 1edaa3e76..930983898 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt @@ -64,10 +64,10 @@ class BaHornSystem : InteractionListener { if (optionClicked == "drop") { sendMessage(player, "I need that!"); return@on false } val styleCallMap = mapOf( - "tell-style1" to (BarbassaultSession.AttackerStyle.Style_1 to BaCall.ATTACKER_STYLE_1), - "tell-style2" to (BarbassaultSession.AttackerStyle.Style_2 to BaCall.ATTACKER_STYLE_2), - "tell-style3" to (BarbassaultSession.AttackerStyle.Style_3 to BaCall.ATTACKER_STYLE_3), - "tell-style4" to (BarbassaultSession.AttackerStyle.Style_4 to BaCall.ATTACKER_STYLE_4), + "tell-style1" to (BarbassaultSession.AttackerStyle.STYLE_1 to BaCall.ATTACKER_STYLE_1), + "tell-style2" to (BarbassaultSession.AttackerStyle.STYLE_2 to BaCall.ATTACKER_STYLE_2), + "tell-style3" to (BarbassaultSession.AttackerStyle.STYLE_3 to BaCall.ATTACKER_STYLE_3), + "tell-style4" to (BarbassaultSession.AttackerStyle.STYLE_4 to BaCall.ATTACKER_STYLE_4), "medic" to (null to BaCall.MEDIC) ) val pair = styleCallMap[optionClicked] ?: return@on false diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index f6837483b..97ff827fc 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -1,14 +1,10 @@ package content.minigame.barbassault.arena -import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultTut -import content.minigame.barbassault.BarbassaultTut.Companion.TutorialItemSpawn import content.minigame.barbassault.arena.BaHornSystem.HornHelper.getHealerHorn -import content.minigame.barbassault.arena.scenery.DefenderTrap import content.minigame.barbassault.getBarbLevels import content.minigame.barbassault.lobby.baSession import core.api.* -import core.game.global.action.DropListener import core.game.interaction.IntType import core.game.interaction.InteractionListener @@ -19,7 +15,6 @@ import core.game.node.entity.player.Player import core.game.node.entity.player.info.LogType import core.game.node.entity.player.info.PlayerMonitor import core.game.node.entity.player.info.login.PlayerParser -import core.game.node.item.GroundItem import core.game.node.item.GroundItemManager import core.game.node.item.Item import core.game.system.task.Pulse @@ -28,10 +23,7 @@ import core.game.world.map.Direction import core.game.world.map.Location import core.game.world.map.zone.ZoneBorders import core.game.world.update.flag.context.Animation -import core.game.worldevents.holiday.easter.EasterEvent.Companion.EGG_SPAWN_TIME -import core.game.worldevents.holiday.easter.EasterEvent.Companion.eggs import core.tools.Log -import org.rs09.consts.Components import org.rs09.consts.Items import org.rs09.consts.Scenery @@ -63,14 +55,14 @@ class BarbassaultGameArea : InteractionListener, MapArea { arenaItems(Items.LOGS_11760,30,46,0), arenaItems(Items.LOGS_11760,29,47,0) ) - enum class pennanceNPC { runner, healer, fighter, ranger } + enum class pennanceNPC { RUNNER, HEALER, FIGHTER, RANGER } data class npcSpawnLoc(val tunnel:pennanceNPC, val x: Int,val y: Int,val z: Int,val direction: Direction) val npcSpawns: List = listOf( - npcSpawnLoc(pennanceNPC.runner,42,45,0,Direction.SOUTH), - npcSpawnLoc(pennanceNPC.healer,36,46,0,Direction.SOUTH), + npcSpawnLoc(pennanceNPC.RUNNER,42,45,0,Direction.SOUTH), + npcSpawnLoc(pennanceNPC.HEALER,36,46,0,Direction.SOUTH), - npcSpawnLoc(pennanceNPC.fighter,24,46,0,Direction.SOUTH), - npcSpawnLoc(pennanceNPC.ranger,36,46,0,Direction.SOUTH), + npcSpawnLoc(pennanceNPC.FIGHTER,24,46,0,Direction.SOUTH), + npcSpawnLoc(pennanceNPC.RANGER,36,46,0,Direction.SOUTH), ) override fun defineAreaBorders(): Array { diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 36ff7712d..78e1eab02 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -2,33 +2,24 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultActivity -import content.minigame.barbassault.BarbassaultTut +import content.minigame.barbassault.arena.scenery.GloryHorn import content.minigame.barbassault.lobby.BarbTeam -import content.minigame.barbassault.lobby.BarbTeamManager -import content.minigame.barbassault.lobby.SelectRole import content.minigame.barbassault.lobby.baSession import core.api.* import core.game.node.entity.Entity -import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.map.build.DynamicRegion -import core.game.world.map.zone.MapZone -import core.game.world.map.zone.Zone import core.game.world.map.zone.ZoneBorders import core.game.world.map.zone.ZoneRestriction import core.tools.Log import core.tools.secondsToTicks import core.tools.ticksToSeconds import org.rs09.consts.Components -import org.rs09.consts.NPCs -import org.rs09.consts.Music import org.rs09.consts.Music.ASSAULT_AND_BATTERY_604 -import org.rs09.consts.Music.PIRATES_OF_PENANCE_211 -import kotlin.math.roundToInt /* Player @@ -248,26 +239,27 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea val role = team.getRoleForPlayer(player) ?: return@forEach val call = roleCalls[role] ?: return@forEach + when (role) { BarbRole.ATTACKER -> { //make sure wave is using wring childid. - setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_ATT_485, 1) updateAttackerUI(player, call as AttackerCall) + setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_ATT_485, 2) setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_ATT_485, 7) } BarbRole.COLLECTOR -> { - setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_ATT_485, 1) updateOtherRoleUI(player, call, Components.BARBASSAULT_OVER_COL_486, 4) + setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_COL_486, 2) setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_COL_486, 6) } BarbRole.DEFENDER -> { - setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_ATT_485, 1) updateOtherRoleUI(player, call, Components.BARBASSAULT_OVER_DEF_487, 3) + setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_DEF_487, 1) setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_DEF_487, 5) } BarbRole.HEALER -> { - setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_ATT_485, 1) updateOtherRoleUI(player, call, Components.BARBASSAULT_OVER_HEAL_488, 31) + setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_HEAL_488, 29) setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_HEAL_488, 33) } } @@ -294,7 +286,23 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea roleCalls[BarbRole.HEALER]?.toCall = roleCalls[BarbRole.DEFENDER]?.required roleCalls[BarbRole.DEFENDER]?.toCall = roleCalls[BarbRole.HEALER]?.required updateRoleUI() + updateGloryHornUI() } + + fun updateGloryHornUI(){ + team.allPlayers().forEach { player -> + val atkCallText = (roleCalls[BarbRole.COLLECTOR]?.toCall as? AttackerStyle)?.let { "${it.top} ${it.bottom}" } ?: GloryHorn.CallOut.defaultText + val colCallText = (roleCalls[BarbRole.ATTACKER]?.toCall as? HasUIText)?.ui ?: GloryHorn.CallOut.defaultText + val defCallText = (roleCalls[BarbRole.HEALER]?.toCall as? HasUIText)?.ui ?: GloryHorn.CallOut.defaultText + val healCallText = (roleCalls[BarbRole.DEFENDER]?.toCall as? HasUIText)?.ui ?: GloryHorn.CallOut.defaultText + + setInterfaceText(player, atkCallText, Components.BARBASSAULT_HORN_484, GloryHorn.CallOut.attacker) + setInterfaceText(player, colCallText, Components.BARBASSAULT_HORN_484, GloryHorn.CallOut.collector) + setInterfaceText(player, defCallText, Components.BARBASSAULT_HORN_484, GloryHorn.CallOut.defender) + setInterfaceText(player, healCallText, Components.BARBASSAULT_HORN_484, GloryHorn.CallOut.healer) + } + } + private val hornTargets = mapOf( BarbRole.COLLECTOR to BarbRole.ATTACKER, BarbRole.ATTACKER to BarbRole.COLLECTOR , @@ -322,10 +330,10 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea val roleCalls: MutableMap> = mutableMapOf() interface HasUIText { val ui: String } enum class AttackerStyle(val top: String, val bottom: String) : HasUIText { - Style_1("Controlled/","Bronze/Wind"), - Style_2("Accurate/","Iron/Water"), - Style_3("Aggressive/","Steel/Earth"), - Style_4("Defensive/","Mithril/Fire"); + STYLE_1("Controlled/","Bronze/Wind"), + STYLE_2("Accurate/","Iron/Water"), + STYLE_3("Aggressive/","Steel/Earth"), + STYLE_4("Defensive/","Mithril/Fire"); override val ui: String get() = top } enum class EggColor(override val ui: String): HasUIText { RED("Red Eggs"), GREEN("Green Eggs"),BLUE("Blue Eggs") } diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt index 8d8e78b36..408081285 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt @@ -1,82 +1,112 @@ package content.minigame.barbassault.arena.scenery -import core.api.sendMessage +import content.minigame.barbassault.arena.BaHornSystem.BaCall +import content.minigame.barbassault.arena.BarbassaultSession +import content.minigame.barbassault.lobby.baSession +import core.api.* import core.game.component.Component import core.game.component.ComponentDefinition import core.game.component.ComponentPlugin import core.game.interaction.IntType import core.game.interaction.InteractionListener import core.game.node.entity.player.Player +import core.game.system.task.Pulse +import core.game.world.GameWorld +import core.game.world.update.flag.context.Animation +import core.plugin.Initializable import core.plugin.Plugin -import org.rs09.consts.Components import org.rs09.consts.Scenery +@Initializable class HornOfGlory : ComponentPlugin() , InteractionListener { - companion object { - val QUEEN_ARRIVE = "The Queen has arrived and you can no longer use the horn of glory!" - //attacker - val CONTROLED_BRONZE_WIND = 0 - val ACCURATE_IRON_WATER = 1 - val AGGRISSIVE_STEEL_EARTH = 2 - val DEFENSIVE_MITHRIL_FIRE = 3 - //defender - val FOOD_TOFU = 0 - val FOOD_CRACKERS = 1 - val FOOD_WORMS = 2 - //collector - val RED_EGG = 0 - val GREEN_EGG = 1 - val BLUE_EGG = 2 - //healer - val POISON_TOFU = 0 - val POISON_WORMS = 1 - val POISON_MEAT = 2 + var hornCallLock = false + val CallMap = mapOf( + GloryHorn.CONTROLED_BRONZE_WIND to (BarbassaultSession.AttackerStyle.STYLE_1 to BaCall.ATTACKER_STYLE_1), + GloryHorn.ACCURATE_IRON_WATER to (BarbassaultSession.AttackerStyle.STYLE_2 to BaCall.ATTACKER_STYLE_2), + GloryHorn.AGGRISSIVE_STEEL_EARTH to (BarbassaultSession.AttackerStyle.STYLE_3 to BaCall.ATTACKER_STYLE_3), + GloryHorn.DEFENSIVE_MITHRIL_FIRE to (BarbassaultSession.AttackerStyle.STYLE_4 to BaCall.ATTACKER_STYLE_4), - val CALL_BUTTON = mapOf( - 16 to CONTROLED_BRONZE_WIND, - 17 to ACCURATE_IRON_WATER, - 18 to AGGRISSIVE_STEEL_EARTH, - 19 to DEFENSIVE_MITHRIL_FIRE, + GloryHorn.POISON_TOFU to (BarbassaultSession.PoisonFood.TOFU to BaCall.HEALER_TOFU), + GloryHorn.POISON_WORMS to (BarbassaultSession.PoisonFood.WORMS to BaCall.HEALER_WORMS), + GloryHorn.POISON_MEAT to (BarbassaultSession.PoisonFood.MEAT to BaCall.HEALER_MEAT), - 20 to FOOD_TOFU, - 22 to FOOD_CRACKERS, - 21 to FOOD_WORMS, - - 13 to RED_EGG, - 14 to GREEN_EGG, - 15 to BLUE_EGG, - - 23 to POISON_TOFU, - 24 to POISON_WORMS, - 25 to POISON_MEAT - - ) - } + GloryHorn.RED_EGG to (BarbassaultSession.EggColor.RED to BaCall.COLLECTOR_RED), + GloryHorn.GREEN_EGG to (BarbassaultSession.EggColor.GREEN to BaCall.COLLECTOR_GREEN), + GloryHorn.BLUE_EGG to (BarbassaultSession.EggColor.BLUE to BaCall.COLLECTOR_BLUE), + GloryHorn.FOOD_TOFU to (BarbassaultSession.LureFood.TOFU to BaCall.DEFENDER_TOFU), + GloryHorn.FOOD_CRACKERS to (BarbassaultSession.LureFood.CRACKERS to BaCall.DEFENDER_CRACKERS), + GloryHorn.FOOD_WORMS to (BarbassaultSession.LureFood.WORMS to BaCall.DEFENDER_WORMS), + ) override fun newInstance(arg: Any?): Plugin { - ComponentDefinition.forId(Components.BARBASSAULT_HORN_484).plugin = this + ComponentDefinition.forId(484).plugin = this return this } - override fun handle( - player: Player?, - component: Component?, - opcode: Int, - button: Int, - slot: Int, - itemId: Int - ): Boolean { - sendMessage(player!!,"Button " +button ) + override fun handle(player: Player?,component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int ): Boolean { + player ?: return true + val pair = CallMap[button] ?: return true + val role = pair.first + val call = pair.second + if(!hornCallLock) { + player.baSession?.onHornCall(player, role) + sendChat(player, call.text) + player.animate(Animation(5436)) + player.lock(6) + hornCallLock = true + GameWorld.Pulser.submit(object : Pulse(6, player) { + override fun pulse(): Boolean { + player.unlock() + hornCallLock = false + return true + } + }) + } + return true } + override fun open(player: Player?, component: Component?) { + super.open(player, component) + player ?: return + } override fun defineListeners() { on(Scenery.HORN_OF_GLORY_20247, IntType.SCENERY, "Call") { player, _ -> //emote 5438 - player.interfaceManager.open(Component(484)) + player.interfaceManager.open(Component(GloryHorn.ID)) return@on true } } + +} + +object GloryHorn { + val ID = 484 + //collector + val RED_EGG = 13 + val GREEN_EGG = 14 + val BLUE_EGG = 15 + //attacker + val CONTROLED_BRONZE_WIND = 16 + val ACCURATE_IRON_WATER = 17 + val AGGRISSIVE_STEEL_EARTH = 18 + val DEFENSIVE_MITHRIL_FIRE = 19 + //defender + val FOOD_TOFU = 20 + val FOOD_WORMS = 21 + val FOOD_CRACKERS = 22 + //healer + val POISON_TOFU = 23 + val POISON_WORMS = 24 + val POISON_MEAT = 25 + object CallOut { + val defaultText = "---------------------" + const val attacker = 5 + const val defender = 6 + const val collector = 7 + const val healer = 8 + } + } diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt index 7c46eebb4..487e7192f 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt @@ -113,7 +113,7 @@ class ItemMachine: InteractionListener { if (!hasCape(player, capeId)) return player.animate(Animation(5419)) player.lock(5) - + // theres two emotes for the machine and lock duration GameWorld.Pulser.submit(object : Pulse(3, player) { override fun pulse(): Boolean { addArrayOfItems(player,items,amount)