cleaned horn calls up.

This commit is contained in:
Tooze 2026-05-26 17:02:28 -04:00
parent e1f941f496
commit a6e6d5cfdf
4 changed files with 88 additions and 129 deletions

View file

@ -154,7 +154,7 @@ class BarbassaultArenaListener : InteractionListener {
}
onUseWith(IntType.NPC, intArrayOf(Items.POISONED_TOFU_10539,Items.POISONED_MEAT_10541,Items.POISONED_WORMS_10540), *PENANCE_HEALER_IDS) { player, used, target ->
val session = getBASession(player) ?: return@onUseWith true
val currentCall = (session.roleCalls[BarbRole.HEALER] as? BarbassaultSession.HealerCall)?.required?.itemId()
val currentCall = (session.roleCalls[BarbRole.HEALER] as? BarbassaultSession.HealerCall)?.required?.itemId
removeItem(player,used)
if (used.id == currentCall) {
applyBAPoison(target as Entity,player,20)
@ -228,8 +228,8 @@ class BarbassaultArenaListener : InteractionListener {
on(LureItems, IntType.ITEM, "Drop") { player, node ->
val session = getBASession(player) ?: return@on true
val currentCall = (session.roleCalls[BarbRole.DEFENDER] as? BarbassaultSession.DefenderCall)?.required
sendMessage(player,currentCall?.itemId().toString())
val flag = node.id == currentCall?.itemId()
//sendMessage(player,currentCall?.itemId.toString())
val flag = node.id == currentCall?.itemId
handleDropItem(player,node,flag)
return@on true
@ -241,7 +241,7 @@ class BarbassaultArenaListener : InteractionListener {
if (session.team.getRoleForPlayer(player) != BarbRole.COLLECTOR) { sendMessage(player, "You need to be a collector to do that");return@on false }
val currentCall = (session.roleCalls[BarbRole.COLLECTOR]as? BarbassaultSession.CollectorCall)?.required
if (node.id != currentCall?.itemId()) { handleWrongEgg(player,node); return@on false }
if (node.id != currentCall?.itemId) { handleWrongEgg(player,node); return@on false }
val eggInBag = getCollectorBag(player).addToBag(node)

View file

@ -13,115 +13,71 @@ class BAHornSystem : InteractionListener {
private val ATTACKER_HORNS = intArrayOf( Items.ATTACKER_HORN_10516, Items.ATTACKER_HORN_10517, Items.ATTACKER_HORN_10518, Items.ATTACKER_HORN_10519, Items.ATTACKER_HORN_10520 )
private val HEALER_HORNS = intArrayOf( Items.HEALER_HORN_10526, Items.HEALER_HORN_10527, Items.HEALER_HORN_10528, Items.HEALER_HORN_10529, Items.HEALER_HORN_10530 )
// private val ALL_HORNS = intArrayOf( Items.COLLECTOR_HORN_10560, Items.DEFENDER_HORN_10538 ) + HEALER_HORNS + ATTACKER_HORNS
enum class BaCall(val text: String) {
COLLECTOR_RED("Collector: Red Eggs!"),
COLLECTOR_GREEN("Collector: Green Eggs!"),
COLLECTOR_BLUE("Collector: Blue Eggs!"),
HEALER_TOFU("Healer: Poison tofu!"),
HEALER_WORMS("Healer: Poison worms!"),
HEALER_MEAT("Healer: Poison meat!"),
ATTACKER_STYLE_1("Attacker: Controlled/Bronze/Wind!"),
ATTACKER_STYLE_2("Attacker: Accurate/Iron/Water!"),
ATTACKER_STYLE_3("Attacker: Aggressive/Steel/Earth!"),
ATTACKER_STYLE_4("Attacker: Defensive/Mithril/Fire!"),
DEFENDER_TOFU("Defender: Drop Tofu!"),
DEFENDER_CRACKERS("Defender: Drop Crackers!"),
DEFENDER_WORMS("Defender: Drop Worms!"),
MEDIC("Medic!!")
}
override fun defineListeners() {
on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-tofu", "Tell-worms", "Tell-meat","Medic", "Drop") { player, _ ->
val optionClicked = player.getAttribute<String>("interact:option")?.lowercase() ?: return@on false
if (optionClicked == "drop") { sendMessage(player, "I need that!"); return@on false }
val defenderMap = mapOf(
"tell-tofu" to (BarbassaultSession.PoisonFood.TOFU to BaCall.HEALER_TOFU),
"tell-worms" to (BarbassaultSession.PoisonFood.WORMS to BaCall.HEALER_WORMS),
"tell-meat" to (BarbassaultSession.PoisonFood.MEAT to BaCall.HEALER_MEAT),
"medic" to (null to BaCall.MEDIC) )
val pair = defenderMap[optionClicked] ?: return@on false
val food = pair.first
val call = pair.second
sendChat(player, call.text)
when (food) {
is BarbassaultSession.PoisonFood -> getBASession(player)?.onHornCall(player, food)
null -> getBASession(player)?.alertHealers(player)
val session = getBASession(player) ?: return@on true
var poisFoodToTell = BarbassaultSession.PoisonFood.TOFU
when (optionClicked) {
"tell-tofu" -> poisFoodToTell = BarbassaultSession.PoisonFood.TOFU
"tell-worms" ->poisFoodToTell = BarbassaultSession.PoisonFood.WORMS
"tell-meat" -> poisFoodToTell = BarbassaultSession.PoisonFood.MEAT
"drop" -> { sendMessage(player, "I need that!");return@on true }
"medic" -> { sendChat(player, "Medic!"); session.alertHealers(player);return@on true }
else -> return@on true
}
sendChat(player, poisFoodToTell.hornShout)
session.onHornCall(player, poisFoodToTell)
true
}
on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style1", "Tell-style2", "Tell-style3", "Tell-style4","Medic" , "Drop") { player, _ ->
val optionClicked = player.getAttribute<String>("interact:option")?.lowercase() ?: return@on false
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),
"medic" to (null to BaCall.MEDIC) )
val pair = styleCallMap[optionClicked] ?: return@on false
val style = pair.first
val call = pair.second
sendChat(player, call.text)
when (style) {
is BarbassaultSession.AttackerStyle -> getBASession(player)?.onHornCall(player, style)
null-> getBASession(player)?.alertHealers(player)
val session = getBASession(player) ?: return@on true
var styleToTell = BarbassaultSession.AttackerStyle.STYLE_1
when (optionClicked){
"tell-style1" -> styleToTell = BarbassaultSession.AttackerStyle.STYLE_1
"tell-style2" -> styleToTell = BarbassaultSession.AttackerStyle.STYLE_2
"tell-style3" -> styleToTell = BarbassaultSession.AttackerStyle.STYLE_3
"tell-style4" -> styleToTell = BarbassaultSession.AttackerStyle.STYLE_4
"drop" -> { sendMessage(player, "I need that!");return@on true }
"medic" -> { sendChat(player, "Medic!"); session.alertHealers(player);return@on true }
}
sendChat(player, styleToTell.hornShout)
session.onHornCall(player, styleToTell)
true
}
on(ATTACKER_HORNS, IntType.ITEM, "Tell-red", "Tell-green", "Tell-blue", "Medic", "Drop") { player, _ ->
val optionClicked = player.getAttribute<String>("interact:option")?.lowercase() ?: return@on false
if (optionClicked == "drop") { sendMessage(player, "I need that!"); return@on false }
val collectorMap = mapOf(
"tell-red" to (BarbassaultSession.EggColor.RED to BaCall.COLLECTOR_RED),
"tell-green" to (BarbassaultSession.EggColor.GREEN to BaCall.COLLECTOR_GREEN),
"tell-blue" to (BarbassaultSession.EggColor.BLUE to BaCall.COLLECTOR_BLUE),
"medic" to (null to BaCall.MEDIC) )
val pair = collectorMap[optionClicked] ?: return@on false
val color = pair.first
val call = pair.second
sendChat(player, call.text)
when (color) {
is BarbassaultSession.EggColor -> getBASession(player)?.onHornCall(player, color)
null -> getBASession(player)?.alertHealers(player)
val session = getBASession(player) ?: return@on true
var eggToTell = BarbassaultSession.EggColor.RED
when (optionClicked) {
"tell-red" -> eggToTell = BarbassaultSession.EggColor.RED
"tell-green" -> eggToTell = BarbassaultSession.EggColor.GREEN
"tell-blue" -> eggToTell = BarbassaultSession.EggColor.RED
"drop" -> { sendMessage(player, "I need that!");return@on true }
"medic" -> { sendChat(player, "Medic!"); session.alertHealers(player);return@on true }
}
sendChat(player, eggToTell.hornShout)
session.onHornCall(player, eggToTell)
true
}
on(HEALER_HORNS, IntType.ITEM, "Tell-tofu", "Tell-crackers", "Tell-worms","Medic", "Drop") { player, _ ->
val optionClicked = player.getAttribute<String>("interact:option")?.lowercase() ?: return@on false
if (optionClicked == "drop") { sendMessage(player, "I need that!"); return@on false }
val lureMap = mapOf(
"tell-tofu" to (BarbassaultSession.LureFood.TOFU to BaCall.DEFENDER_TOFU),
"tell-crackers" to (BarbassaultSession.LureFood.CRACKERS to BaCall.DEFENDER_CRACKERS),
"tell-worms" to (BarbassaultSession.LureFood.WORMS to BaCall.DEFENDER_WORMS),
"medic" to (null to BaCall.MEDIC) )
val pair = lureMap[optionClicked] ?: return@on false
val lure = pair.first
val call = pair.second
sendChat(player, call.text)
when (lure) {
is BarbassaultSession.LureFood -> getBASession(player)?.onHornCall(player, lure)
null -> getBASession(player)?.alertHealers(player)
val session = getBASession(player) ?: return@on true
var lureFoodToTell = BarbassaultSession.LureFood.TOFU
when (optionClicked){
"tell-tofu" -> lureFoodToTell = BarbassaultSession.LureFood.TOFU
"tell-crackers" -> lureFoodToTell = BarbassaultSession.LureFood.CRACKERS
"tell-worms" -> lureFoodToTell = BarbassaultSession.LureFood.WORMS
"drop" -> { sendMessage(player, "I need that!");return@on true }
"medic" -> { sendChat(player, "Medic!"); session.alertHealers(player);return@on true }
}
sendChat(player, lureFoodToTell.hornShout)
session.onHornCall(player, lureFoodToTell)
true
}

View file

@ -1,11 +1,9 @@
package content.minigame.barbassault.arena
import content.minigame.barbassault.ALL_BARBASS_ITEMS
import content.minigame.barbassault.BA_SESSION_KEY
import content.minigame.barbassault.BarbRole
import content.minigame.barbassault.BAActivity
import content.minigame.barbassault.LureItems
import content.minigame.barbassault.arena.BAHornSystem.BaCall
import content.minigame.barbassault.arena.scenery.EggCannon
import content.minigame.barbassault.arena.scenery.GloryHorn
import content.minigame.barbassault.getBALevels
@ -569,13 +567,12 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M
session.onHornCall(bot, calledValue)
val text = when (calledValue) {
is EggColor -> calledValue.baCall().text
is PoisonFood -> calledValue.baCall().text
is LureFood -> calledValue.baCall().text
is AttackerStyle -> calledValue.baCall().text
is EggColor -> calledValue.hornShout
is PoisonFood -> calledValue.hornShout
is LureFood -> calledValue.hornShout
is AttackerStyle -> calledValue.hornShout
else -> return
}
sendChat(bot, text)
}
@ -599,27 +596,31 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M
}
val roleCalls: MutableMap<BarbRole, RoleCall<*>> = 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");
interface HasUIText { val ui: String; val hornShout:String }
enum class AttackerStyle(val top: String, val bottom: String, override val hornShout:String):HasUIText {
STYLE_1("Controlled/","Bronze/Wind", "Attacker: Controlled/Bronze/Wind!"),
STYLE_2("Accurate/","Iron/Water", "Attacker: Accurate/Iron/Water!"),
STYLE_3("Aggressive/","Steel/Earth", "Attacker: Aggressive/Steel/Earth!"),
STYLE_4("Defensive/","Mithril/Fire", "Attacker: Defensive/Mithril/Fire!");
override val ui: String get() = top
fun baCall() = when (this) { STYLE_1 -> BaCall.ATTACKER_STYLE_1; STYLE_2 -> BaCall.ATTACKER_STYLE_2;STYLE_3 -> BaCall.ATTACKER_STYLE_3;STYLE_4 -> BaCall.ATTACKER_STYLE_4
}
}
enum class EggColor(override val ui: String): HasUIText { RED("Red Eggs"), GREEN("Green Eggs"),BLUE("Blue Eggs");
fun itemId(): Int = when (this) { RED -> Items.RED_EGG_10532; GREEN -> Items.GREEN_EGG_10531; BLUE -> Items.BLUE_EGG_10533 }
fun baCall() = when (this) { RED -> BaCall.COLLECTOR_RED; GREEN -> BaCall.COLLECTOR_GREEN;BLUE -> BaCall.COLLECTOR_BLUE}
enum class EggColor(override val ui: String, val itemId:Int, override val hornShout:String):HasUIText {
RED( "Red Eggs", Items.RED_EGG_10532, "Collector: Red Eggs!"),
GREEN("Green Eggs",Items.GREEN_EGG_10531, "Collector: Green Eggs!"),
BLUE( "Blue Eggs", Items.BLUE_EGG_10533, "Collector: Blue Eggs!")
}
enum class PoisonFood(override val ui: String): HasUIText { TOFU("Pois. Tofu"), WORMS("Pois. Worms"), MEAT("Pois. Meat");
fun itemId(): Int = when (this) { TOFU -> Items.POISONED_TOFU_10539; WORMS -> Items.POISONED_WORMS_10540; MEAT -> Items.POISONED_MEAT_10541 }
fun baCall() = when (this) { TOFU -> BaCall.HEALER_TOFU; WORMS -> BaCall.HEALER_WORMS; MEAT -> BaCall.HEALER_MEAT}
enum class PoisonFood(override val ui: String, val itemId:Int, override val hornShout:String):HasUIText {
TOFU( "Pois. Tofu", Items.POISONED_TOFU_10539, "Healer: Poison tofu!"),
WORMS("Pois. Worms",Items.POISONED_WORMS_10540,"Healer: Poison worms!"),
MEAT( "Pois. Meat", Items.POISONED_MEAT_10541, "Healer: Poison meat!");
}
enum class LureFood(override val ui: String) : HasUIText { TOFU("Tofu"), CRACKERS("Crackers"), WORMS("Worms");
fun itemId(): Int = when (this) { WORMS -> Items.WORMS_10515; CRACKERS -> Items.CRACKERS_10513; TOFU -> Items.TOFU_10514 }
fun baCall() = when (this) { TOFU -> BaCall.DEFENDER_TOFU; CRACKERS -> BaCall.DEFENDER_CRACKERS;WORMS -> BaCall.DEFENDER_WORMS}
enum class LureFood(override val ui: String, val itemId:Int, override val hornShout:String):HasUIText {
TOFU( "Tofu", Items.WORMS_10515, "Defender: Drop Tofu!"),
CRACKERS("Crackers",Items.CRACKERS_10513,"Defender: Drop Crackers!"),
WORMS( "Worms", Items.TOFU_10514, "Defender: Drop Worms!");
}
class AttackerCall( override val required: AttackerStyle ) : RoleCall<AttackerStyle>()

View file

@ -1,7 +1,7 @@
package content.minigame.barbassault.arena.scenery
import content.minigame.barbassault.arena.BAHornSystem.BaCall
import content.minigame.barbassault.arena.BarbassaultSession
import content.minigame.barbassault.arena.BarbassaultSession.HasUIText
import content.minigame.barbassault.getBASession
import core.api.*
import core.game.component.Component
@ -20,20 +20,20 @@ import org.rs09.consts.Scenery
@Initializable
class HornOfGlory : ComponentPlugin() , InteractionListener {
var hornCallLock = false
private 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),
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),
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)
val CallMap = mapOf(
GloryHorn.CONTROLED_BRONZE_WIND to BarbassaultSession.AttackerStyle.STYLE_1,
GloryHorn.ACCURATE_IRON_WATER to BarbassaultSession.AttackerStyle.STYLE_2,
GloryHorn.AGGRISSIVE_STEEL_EARTH to BarbassaultSession.AttackerStyle.STYLE_3,
GloryHorn.DEFENSIVE_MITHRIL_FIRE to BarbassaultSession.AttackerStyle.STYLE_4,
GloryHorn.POISON_TOFU to BarbassaultSession.PoisonFood.TOFU ,
GloryHorn.POISON_WORMS to BarbassaultSession.PoisonFood.WORMS,
GloryHorn.POISON_MEAT to BarbassaultSession.PoisonFood.MEAT,
GloryHorn.RED_EGG to BarbassaultSession.EggColor.RED,
GloryHorn.GREEN_EGG to BarbassaultSession.EggColor.GREEN,
GloryHorn.BLUE_EGG to BarbassaultSession.EggColor.BLUE,
GloryHorn.FOOD_TOFU to BarbassaultSession.LureFood.TOFU,
GloryHorn.FOOD_CRACKERS to BarbassaultSession.LureFood.CRACKERS,
GloryHorn.FOOD_WORMS to BarbassaultSession.LureFood.WORMS
)
override fun newInstance(arg: Any?): Plugin<Any> {
@ -43,11 +43,12 @@ class HornOfGlory : ComponentPlugin() , InteractionListener {
override fun handle(player: Player?,component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int ): Boolean {
player ?: return true
val (gameValue, uiCall) = CallMap[button] ?: return true
val session = getBASession(player) ?: return true
val toCall = CallMap[button] as HasUIText
if(!hornCallLock) {
getBASession(player)?.onHornGloryCall(gameValue)
sendChat(player, uiCall.text)
session.onHornGloryCall(toCall)
sendChat(player, toCall.hornShout)
player.animate(Animation(5436))
player.lock(6)
hornCallLock = true
@ -66,6 +67,7 @@ class HornOfGlory : ComponentPlugin() , InteractionListener {
override fun open(player: Player?, component: Component?) {
super.open(player, component)
player ?: return
getBASession(player)?.updateGloryHornUI()
}
override fun defineListeners() {
on(Scenery.HORN_OF_GLORY_20247, IntType.SCENERY, "Call") { player, _ ->