diff --git a/Server/src/main/content/minigame/barbassault/Barbassault.kt b/Server/src/main/content/minigame/barbassault/Barbassault.kt index d30994e73..a1ed33e0e 100644 --- a/Server/src/main/content/minigame/barbassault/Barbassault.kt +++ b/Server/src/main/content/minigame/barbassault/Barbassault.kt @@ -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 diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 874659c47..f6837483b 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -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 diff --git a/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt index 54f9514d7..2a3f45c14 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt @@ -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 { 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 diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt index a7cc43719..7b215bfbb 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt @@ -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!" diff --git a/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt index bb95c010c..b5ea36bfe 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt @@ -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 { }