Skip to content

Commit 3c1819c

Browse files
committed
✨(wayzer/map/betterTeam) 优化玩家进入状态分配均匀性
1 parent 3366a24 commit 3c1819c

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

scripts/wayzer/map/betterTeam.api.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,16 @@ data class AssignTeamEvent(val player: Player, val group: Iterable<Player>, val
2121
}
2222

2323
interface TeamService {
24+
/** 当前可供玩家使用的全部队伍 */
2425
val allTeam: Set<Team>
26+
/** 当前被规则封禁的队伍 */
2527
var bannedTeam: Set<Team>
28+
/** 存储队伍,用于下一次[randomTeam] */
29+
val savedTeams: MutableMap<String, Team>
30+
/** 根据Tag更新[bannedTeam],将自动为被ban玩家换队 */
2631
fun updateBannedTeam(force: Boolean = false)
32+
/** 为玩家随机分配队伍 */
2733
fun randomTeam(player: Player, group: Iterable<Player> = Groups.player): Team
34+
/** 切换玩家到指定[team],或[randomTeam] */
2835
fun changeTeam(p: Player, team: Team = randomTeam(p))
2936
}

scripts/wayzer/map/betterTeam.kts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,23 @@ val allTeam: Set<Team>
2121
}
2222

2323
var bannedTeam = emptySet<Team>()
24+
val connectingPlayers = mutableListOf<Player>()
25+
fun getConnectingPlayers(): List<Player> {
26+
connectingPlayers.removeAll { it.con == null || it.con.isConnected || it.con.hasConnected }
27+
return connectingPlayers
28+
}
2429

2530
onEnable {
2631
val backup = netServer.assigner
2732
netServer.assigner = NetServer.TeamAssigner { p, g ->
28-
randomTeam(p, g)
33+
//特殊处理 connectingPlayers,避免一群人连入时分配不均
34+
val g2 = if (g == Groups.player) {
35+
if (!p.con.isConnected) {
36+
connectingPlayers.add(p)
37+
}
38+
getConnectingPlayers() + g
39+
} else g
40+
randomTeam(p, g2)
2941
}
3042
onDisable { netServer.assigner = backup }
3143
updateBannedTeam(true)
@@ -36,6 +48,7 @@ val savedTeams = mutableMapOf<String, Team>()
3648
listen<EventType.ResetEvent> {
3749
bannedTeam = emptySet()
3850
savedTeams.clear()
51+
connectingPlayers.clear()
3952
}
4053
listen<EventType.PlayerLeave> { savedTeams[it.player.uuid()] = it.player.team() }
4154

0 commit comments

Comments
 (0)