Polishing invite interfaces

This commit is contained in:
Tooze 2026-01-30 16:42:54 -05:00
parent 0d157b39dd
commit ee1793dfaf
5 changed files with 83 additions and 39 deletions

View file

@ -2,7 +2,7 @@ package content.minigame.barbassault
import core.game.node.entity.player.Player
enum class BarbRole { ATTACKER, DEFENDER, COLLECTOR, HEALER }
enum class BarbRole { ATTACKER, COLLECTOR,DEFENDER, HEALER }
data class BarbAssaultPoints( val atk: Int = 0, val col: Int = 0, val def: Int = 0, val heal: Int = 0) {
val total: Int get() = atk + col + def + heal
fun hasEnough(cost: BarbAssaultPoints): Boolean = atk >= cost.atk && col >= cost.col && def >= cost.def && heal >= cost.heal

View file

@ -5,6 +5,7 @@ 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
@ -150,6 +151,7 @@ class BarbassaultGameArea : InteractionListener, MapArea {
}
on(Scenery.HEALER_SPRING_20150, IntType.SCENERY, "Take-from") { player, _ ->
val healLevel = player.getBarbLevels().heal
//emote 5400
/* HEALING_VIAL_10546 -- empty
HEALING_VIAL1_10545 // 1

View file

@ -2,6 +2,7 @@ package content.minigame.barbassault.lobby
import content.minigame.barbassault.BarbRole
import content.minigame.barbassault.lobby.BarbTeamManager.abandonTeam
import content.minigame.barbassault.lobby.BarbTeamManager.joinTeam
import content.minigame.barbassault.lobby.CurrentTeam.ROLE_MODEL_MAP
import content.minigame.barbassault.lobby.CurrentTeam.modelZoom
import core.api.closeInterface
@ -17,6 +18,7 @@ import core.plugin.Plugin
@Initializable
class AcceptRoleInterface : ComponentPlugin() {
private var waitingStatus = true
override fun newInstance(arg: Any?): Plugin<Any> {
ComponentDefinition.forId(AcceptRole.ID).plugin = this
return this
@ -59,35 +61,67 @@ class AcceptRoleInterface : ComponentPlugin() {
}
}
}
}
private fun handleAccept(player: Player?) {
sendMessage(player!!,"Accepted Clicked")
return
}
private fun handleDecline(player: Player?) {
if (player == null) return
closeInterface(player)
val leader = player.baSession?.team?.getLeader()?.player
if (leader != null && leader != player) {
private fun handleAccept(player: Player?) {
val team = player?.baSession?.team
val recruit = team?.recruit
val selectedRole = recruit?.role ?: return
val roleName = selectedRole.name.lowercase().replaceFirstChar { it.uppercase() }
val rPlayer = recruit.player
if (!recruit.accept) {
sendMessage(player,"the other player hasn't confirmed their role yet.")
return
}
if (joinTeam(rPlayer, selectedRole)) {
rPlayer.sendMessage("You have joined as ${roleName}.")
team.recruit = null
closeInterface(player)
}
return
}
private fun handleDecline(player: Player?) {
closeInterface(player!!)
/**
val leader = player.baSession?.team?.getLeader()?.player
if (leader != null && leader != player) {
closeInterface(leader)
}**/
}
private fun handleRemove(player: Player, slotIndex: Int){
val team = player.baSession?.team
val follower = team?.getSlot(slotIndex)?.player ?: return
val uiSlot = AcceptRole.team[slotIndex]
sendMessage(player,"You removed the person from the team.")
setInterfaceText(player, AcceptRole.defaultText, AcceptRole.ID,uiSlot.name )
setInterfaceText(player, AcceptRole.defaultText, AcceptRole.ID,uiSlot.role )
setInterfaceText(player, "0", AcceptRole.ID,uiSlot.wave )
abandonTeam(follower)
}
companion object {
fun updateRecruitData(player: Player?){
val team = player?.baSession?.team
val leader = team?.getLeader()?.player ?: return
val recruit = team.recruit
val displayName = recruit?.role?.name?.lowercase()?.replaceFirstChar { it.uppercase() } ?: "Unknown"
val level = recruit?.roleLevel()
setInterfaceText(leader!!, displayName, AcceptRole.ID,AcceptRole.Status.selectedRole )
setInterfaceText(leader, level.toString(), AcceptRole.ID,AcceptRole.Status.levelRole )
}
fun resetWaitingStatus(player: Player?){
val leader = player?.baSession?.team?.getLeader()?.player
setInterfaceText(leader!!, AcceptRole.waiting, AcceptRole.ID,AcceptRole.Status.selectedRole )
setInterfaceText(leader, AcceptRole.waiting, AcceptRole.ID,AcceptRole.Status.levelRole )
}
}
}
private fun handleRemove(player: Player, slotIndex: Int){
val team = player.baSession?.team
val follower = team?.getSlot(slotIndex)?.player ?: return
val uiSlot = AcceptRole.team[slotIndex]
sendMessage(player,"You removed the person from the team.")
setInterfaceText(player, AcceptRole.defaultText, AcceptRole.ID,uiSlot.name )
setInterfaceText(player, AcceptRole.defaultText, AcceptRole.ID,uiSlot.role )
setInterfaceText(player, "0", AcceptRole.ID,uiSlot.wave )
abandonTeam(follower)
}
object AcceptRole {
const val ID = 492
const val defaultText = "none set"
const val waiting = "Waiting ..."
const val AcceptButtonText = 4
const val DeclineButtonText = 2
const val AcceptButton = 35

View file

@ -4,6 +4,7 @@ import content.minigame.barbassault.BarbRole
import content.minigame.barbassault.BarbassaultActivity
import content.minigame.barbassault.arena.BarbassaultSession
import content.minigame.barbassault.arena.BarbassaultState
import content.minigame.barbassault.getBarbLevels
import core.api.clearLogoutListener
import core.api.sendMessage
import core.game.node.entity.player.Player
@ -37,7 +38,16 @@ var Player.team: BarbTeam?
}*/
data class PartySlot( val index: Int, val player: Player, var role: BarbRole? = null )
data class PendingRecruit( var player: Player, var role: BarbRole? = null )
data class PendingRecruit( var player: Player, var role: BarbRole? = null,var accept:Boolean = false ) {
fun roleLevel(): Int = when (role) {
BarbRole.ATTACKER -> player.getBarbLevels().atk
BarbRole.COLLECTOR -> player.getBarbLevels().col
BarbRole.DEFENDER -> player.getBarbLevels().def
BarbRole.HEALER -> player.getBarbLevels().heal
null -> 1
}
}
private val PartySpawns = arrayOf(30 to 18, 29 to 17, 31 to 17, 28 to 16, 32 to 16)
class BarbTeam(val session: BarbassaultSession, leader: Player) {
@ -164,7 +174,7 @@ object BarbTeamManager {
}
fun disbandTeam(session: BarbassaultSession) {
val team = session.team ?: return
val team = session.team
team.allPlayers().forEach {
it.sendMessage("Your leader has left the room and therefore cleared the team!")
@ -179,7 +189,7 @@ object BarbTeamManager {
fun joinTeam(player: Player, role: BarbRole): Boolean {
val session = player.baSession ?: return false
val team = session.team ?: return false
val team = session.team
team.recruit = null
if (!team.addPlayer(player)) {
player.sendMessage("That party is full.")
@ -196,7 +206,7 @@ object BarbTeamManager {
fun abandonTeam(player: Player) {
val session = player.baSession ?: return
val team = session.team ?: return
val team = session.team
if (team.isLeader(player)) {
disbandTeam(session)
return
@ -212,14 +222,6 @@ object BarbTeamManager {
updateCurrentTeam(it)
}
}
fun acceptInvite(player: Player, role: BarbRole) {
val session = player.baSession ?: return
val team = session.team ?: return
val recruit = team.recruit ?: return
if (recruit.player != player) return
joinTeam(player, role)
team.recruit = null
}
}
//Leader leaving room and causing disband "Your leader has left the room and therefore cleared the team!"

View file

@ -51,14 +51,17 @@ class RoleSelectInterface : ComponentPlugin() {
if (player == null) return true
val team = player.baSession?.team;
val pending = team?.recruit ?: return true
var waitingSelected: BarbRole? = null
when (button) {
SelectRole.AcceptButton, SelectRole.AcceptButtonText -> {
val selectedRole = pending.role
val selectedRoleName = selectedRole?.name?.lowercase()?.replaceFirstChar { it.uppercase() }
if (selectedRole != null) {
joinTeam(pending.player, selectedRole)
player.sendMessage("You have joined as ${selectedRole.name}.")
team.recruit = null
waitingSelected = selectedRole
AcceptRoleInterface.updateRecruitData(player)
if (!pending.accept) {team.getLeader()?.player?.sendMessages("The applicant has chosen $selectedRoleName")}
pending.accept = true
} else {
player.sendMessage("You must select a role first!")
}
@ -73,10 +76,13 @@ class RoleSelectInterface : ComponentPlugin() {
val clickedSelectRole = buttonRoleMap[button]
if (clickedSelectRole != null && clickedSelectRole.isActive) {
pending.role = selectRoleToBarbRole[clickedSelectRole]
if (pending.role != waitingSelected ) {
pending.accept = false
AcceptRoleInterface.resetWaitingStatus(player)
}
val displayName = pending.role?.name ?: "Unknown"
val displayName = pending.role?.name?.capitalizeWords() ?: "Unknown"
setInterfaceText(player, displayName, SelectRole.ID, SelectRole.Status.CurrentRole)
selectedButton = button
} else {
}