1
0
Fork 0

Let a random Sidekick become the Jackal after the latter died

This commit is contained in:
Moritz Ruth 2020-06-09 22:27:52 +02:00
parent b853fef498
commit d9bc5f137e
No known key found for this signature in database
GPG key ID: AFD57E23E753841B
7 changed files with 49 additions and 32 deletions

View file

@ -8,9 +8,7 @@ import com.comphenix.protocol.events.PacketEvent
import com.comphenix.protocol.wrappers.EnumWrappers
import com.comphenix.protocol.wrappers.PlayerInfoData
import de.moritzruth.spigot_ttt.TTTPlugin
import de.moritzruth.spigot_ttt.game.players.DeathReason
import de.moritzruth.spigot_ttt.game.players.PlayerManager
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
import de.moritzruth.spigot_ttt.game.players.*
import de.moritzruth.spigot_ttt.plugin
import de.moritzruth.spigot_ttt.utils.nextTick
import org.bukkit.ChatColor
@ -24,7 +22,7 @@ import org.bukkit.event.entity.EntityDamageEvent
import org.bukkit.event.entity.PlayerDeathEvent
import org.bukkit.event.player.*
object GeneralGameEventsListener : Listener {
object GameListener : Listener {
private val BLOCKED_COMMANDS = setOf("me", "tell")
fun register() {
@ -105,10 +103,6 @@ object GeneralGameEventsListener : Listener {
tttPlayer.onDeath(reason, null)
}
// gameManager.playerManager.tttPlayers.forEach {
// it.player.playSound(tttPlayer.player.location, Sound.ENTITY_PLAYER_DEATH, SoundCategory.PLAYERS, 2f, 1f)
// }
event.damage = 0.0
}
}
@ -136,6 +130,24 @@ object GeneralGameEventsListener : Listener {
}
}
@EventHandler(priority = EventPriority.HIGHEST)
fun onTTTPlayerDeath(event: TTTPlayerDeathEvent) {
if (!setOf(RoleGroup.JACKAL, null).contains(event.winnerRoleGroup) && event.tttPlayer.role == Role.JACKAL) {
val sidekicks = PlayerManager.tttPlayers.filter { it.role == Role.SIDEKICK }
if (sidekicks.isNotEmpty()) {
val newJackal = sidekicks.random()
newJackal.changeRole(Role.JACKAL)
sidekicks.forEach { sidekick ->
if (sidekick != newJackal) {
sidekick.player.sendMessage(TTTPlugin.prefix + "${newJackal.player.displayName} ${ChatColor.GREEN}ist der neue Jackal")
}
}
}
}
}
private val packetListener = object : PacketAdapter(plugin, PacketType.Play.Server.PLAYER_INFO) {
override fun onPacketSending(event: PacketEvent) {
val packet = WrapperPlayServerPlayerInfo(event.packet)

View file

@ -9,6 +9,7 @@ import de.moritzruth.spigot_ttt.game.items.shop.ShopListener
import de.moritzruth.spigot_ttt.game.players.PlayerManager
import de.moritzruth.spigot_ttt.game.players.Role
import de.moritzruth.spigot_ttt.plugin
import de.moritzruth.spigot_ttt.utils.call
import org.bukkit.GameRule
import kotlin.random.Random
@ -25,7 +26,7 @@ object GameManager {
adjustWorld()
ItemManager.registerListeners()
GeneralGameEventsListener.register()
GameListener.register()
ShopListener.register()
CorpseListener.register()
}
@ -43,7 +44,7 @@ object GameManager {
}
Timers.startOverPhaseTimer(plugin.config.getInt("duration.over", 10)) {
plugin.server.pluginManager.callEvent(GameEndEvent(false))
GameEndEvent(false).call()
phase = null
resetWorld()
@ -89,7 +90,7 @@ object GameManager {
fun abortGame(broadcast: Boolean = false) {
if (phase === null) throw IllegalStateException("The game is not running")
plugin.server.pluginManager.callEvent(GameEndEvent(true))
GameEndEvent(true).call()
phase = null
Timers.cancelCurrentTask()
resetWorld()

View file

@ -79,7 +79,7 @@ object SecondChance: TTTItem, Buyable {
val state = isc.get(event.tttPlayer)
if (state != null) {
if (Random.nextBoolean()) {
event.letRoundEnd = false
event.winnerRoleGroup = null
event.tttPlayer.player.openInventory(chooseSpawnInventory)
state.timeoutAction = TimeoutAction(event.tttPlayer, event.tttCorpse.corpse.trueLocation)
}

View file

@ -36,12 +36,14 @@ object PlayerManager {
}
fun letRemainingRoleGroupWin() {
GameManager.ensurePhase(GamePhase.COMBAT)
val onlyRemainingRoleGroup = getOnlyRemainingRoleGroup() ?: return
GameManager.letRoleWin(onlyRemainingRoleGroup.primaryRole)
}
val stillLivingRoleGroups = stillLivingRoleGroups
if (stillLivingRoleGroups.count() == 1) {
GameManager.letRoleWin(stillLivingRoleGroups.first().primaryRole)
}
fun getOnlyRemainingRoleGroup(): RoleGroup? {
GameManager.ensurePhase(GamePhase.COMBAT)
return if (stillLivingRoleGroups.count() == 1) stillLivingRoleGroups.first()
else null
}
fun onPlayerJoin(player: Player) {

View file

@ -10,10 +10,7 @@ import de.moritzruth.spigot_ttt.game.items.Selectable
import de.moritzruth.spigot_ttt.game.items.TTTItem
import de.moritzruth.spigot_ttt.game.items.shop.Shop
import de.moritzruth.spigot_ttt.plugin
import de.moritzruth.spigot_ttt.utils.hotbarContents
import de.moritzruth.spigot_ttt.utils.nextTick
import de.moritzruth.spigot_ttt.utils.secondsToTicks
import de.moritzruth.spigot_ttt.utils.teleportPlayerToWorldSpawn
import de.moritzruth.spigot_ttt.utils.*
import org.bukkit.*
import org.bukkit.entity.Player
import org.bukkit.potion.PotionEffect
@ -88,7 +85,7 @@ class TTTPlayer(player: Player, role: Role) {
if (killer == null) "${ChatColor.RED}${ChatColor.BOLD}Du bist gestorben"
else "${ChatColor.RED}${ChatColor.BOLD}Du wurdest von " +
"${ChatColor.RESET}${killer.player.displayName}" +
"${ChatColor.RED}${ChatColor.BOLD} getötet"
" ${ChatColor.RED}${ChatColor.BOLD}getötet"
)
player.gameMode = GameMode.SPECTATOR
@ -98,18 +95,18 @@ class TTTPlayer(player: Player, role: Role) {
player.inventory.clear()
credits = 0
val onlyRemainingRoleGroup = PlayerManager.getOnlyRemainingRoleGroup()
val event = TTTPlayerDeathEvent(
this,
player.location,
tttCorpse,
killer,
scream
)
plugin.server.pluginManager.callEvent(event)
scream,
onlyRemainingRoleGroup
).call()
if (event.letRoundEnd) {
PlayerManager.letRemainingRoleGroupWin()
}
event.winnerRoleGroup?.run { GameManager.letRoleWin(primaryRole) }
if (event.scream) {
GameManager.world.playSound(
@ -133,7 +130,7 @@ class TTTPlayer(player: Player, role: Role) {
Shop.setItems(this)
plugin.server.pluginManager.callEvent(TTTPlayerReviveEvent(this))
TTTPlayerReviveEvent(this).call()
player.sendMessage(TTTPlugin.prefix + "${ChatColor.GREEN}${ChatColor.BOLD}Du wurdest wiederbelebt")
nextTick { player.gameMode = GameMode.SURVIVAL }

View file

@ -10,15 +10,14 @@ data class TTTPlayerDeathEvent(
val location: Location,
val tttCorpse: TTTCorpse,
val killer: TTTPlayer?,
var scream: Boolean = true
var scream: Boolean = true,
var winnerRoleGroup: RoleGroup? = null
): Event() {
override fun getHandlers(): HandlerList {
@Suppress("RedundantCompanionReference") // false positive
return Companion.handlers
}
var letRoundEnd = true
companion object {
private val handlers = HandlerList()

View file

@ -0,0 +1,6 @@
package de.moritzruth.spigot_ttt.utils
import de.moritzruth.spigot_ttt.plugin
import org.bukkit.event.Event
fun <T: Event> T.call(): T = this.also { plugin.server.pluginManager.callEvent(this) }