Skip to content

Commit

Permalink
practice-mode: basic hole repeat support
Browse files Browse the repository at this point in the history
  • Loading branch information
hex-agon committed Sep 7, 2023
1 parent f7566da commit eab2cd7
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ enum class ClientPacketType(
LOCKER_INVENTORY_REQUEST(0xd3, LockerInventoryRequestPacketHandler()),
MATCH_PLAYER_QUIT(0x130, MatchPlayerQuitPacketHandler()),
UNKNOWN_140(0x140),
HOLE_REPEAT_CHANGE_WIND(0x141),
ACHIEVEMENT_STATUS_REQUEST(0x157, AchievementStatusRequestPacketHandler()),
PLAYER_RING_PROC(0x15d),
MATCH_PLAYER_TOURNEY_SHOT(0x12f, MatchTourneyShotPacketHandler()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import io.netty.buffer.ByteBuf
import work.fking.pangya.game.GameServer
import work.fking.pangya.game.net.ClientPacketHandler
import work.fking.pangya.game.player.Player
import work.fking.pangya.game.room.HoleMode.REPEAT
import work.fking.pangya.game.room.courseById
import work.fking.pangya.game.room.holeModeById
import work.fking.pangya.game.room.roomTypeById
Expand All @@ -23,6 +24,8 @@ class CreateRoomPacketHandler : ClientPacketHandler {
val course = courseById(packet.readByte())
val holeModeId = packet.readByte()
val holeMode = holeModeById(holeModeId)
val repeatingHole = if (holeMode == REPEAT) packet.readUnsignedByte().toInt() else -1
val repeatFixedHole = if (holeMode == REPEAT) packet.readIntLE() == 7 else false
val unknown3 = packet.readIntLE()
val name = packet.readPString()
val password = packet.readPString()
Expand All @@ -36,6 +39,8 @@ class CreateRoomPacketHandler : ClientPacketHandler {
roomType = roomType,
course = course,
holeMode = holeMode,
repeatFixedHole = repeatFixedHole,
repeatingHole = repeatingHole,
holeCount = holeCount.toInt(),
maxPlayers = maxPlayers.toInt(),
shotTime = Duration.of(shotTime.toLong(), ChronoUnit.MILLIS),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package work.fking.pangya.game.packet.handler.room

import io.netty.buffer.ByteBuf
import io.netty.buffer.ByteBufUtil
import work.fking.pangya.game.GameServer
import work.fking.pangya.game.net.ClientPacketHandler
import work.fking.pangya.game.player.Player
Expand All @@ -9,6 +10,8 @@ import work.fking.pangya.game.room.RoomCourseChange
import work.fking.pangya.game.room.RoomGameTimeChange
import work.fking.pangya.game.room.RoomHoleCountChange
import work.fking.pangya.game.room.RoomHoleModeChange
import work.fking.pangya.game.room.RoomHoleRepeatFixedHoleChange
import work.fking.pangya.game.room.RoomHoleRepeatHoleChange
import work.fking.pangya.game.room.RoomNameChange
import work.fking.pangya.game.room.RoomNaturalWindChange
import work.fking.pangya.game.room.RoomPasswordChange
Expand All @@ -34,6 +37,7 @@ class RoomSettingsUpdatePacketHandler : ClientPacketHandler {

repeat(count.toInt()) {
val type = packet.readUnsignedByte()
println(ByteBufUtil.prettyHexDump(packet))
val roomUpdate = when (type.toInt()) {
0 -> RoomNameChange(packet.readPString())
1 -> RoomPasswordChange(packet.readPString())
Expand All @@ -44,6 +48,8 @@ class RoomSettingsUpdatePacketHandler : ClientPacketHandler {
6 -> RoomShotTimeChange(Duration.of(packet.readUnsignedByte().toLong(), ChronoUnit.SECONDS))
7 -> RoomPlayerCountChange(packet.readUnsignedByte().toInt())
8 -> RoomGameTimeChange(Duration.of(packet.readUnsignedByte().toLong(), ChronoUnit.MINUTES))
11 -> RoomHoleRepeatHoleChange(packet.readUnsignedByte().toInt())
12 -> RoomHoleRepeatFixedHoleChange(packet.readIntLE() == 7)
13 -> RoomArtifactChange(packet.readInt())
14 -> RoomNaturalWindChange(packet.readInt() == 0x1000000)
else -> throw IllegalStateException("Unsupported room setting change type=$type")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ class RoomManager {
roomType: RoomType,
course: Course,
holeMode: HoleMode,
repeatFixedHole: Boolean,
repeatingHole: Int,
holeCount: Int,
maxPlayers: Int,
shotTime: Duration,
Expand All @@ -58,6 +60,8 @@ class RoomManager {
roomType = roomType,
course = course,
holeMode = holeMode,
repeatFixedHole = repeatFixedHole,
repeatingHole = repeatingHole,
holeCount = holeCount,
maxPlayers = maxPlayers,
shotTime = shotTime,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package work.fking.pangya.game.room

import io.netty.buffer.ByteBuf
import work.fking.pangya.game.room.HoleMode.REPEAT
import work.fking.pangya.networking.protocol.writePString
import java.time.Duration

Expand All @@ -10,6 +11,8 @@ class RoomSettings(
roomType: RoomType,
course: Course,
holeMode: HoleMode,
repeatFixedHole: Boolean,
repeatingHole: Int,
holeCount: Int,
maxPlayers: Int,
shotTime: Duration,
Expand All @@ -29,6 +32,10 @@ class RoomSettings(
private set
var holeMode = holeMode
private set
var repeatFixedHole = repeatFixedHole
private set
var repeatingHole = repeatingHole
private set
var maxPlayers = maxPlayers
private set
var shotTime = shotTime
Expand All @@ -53,6 +60,8 @@ class RoomSettings(
is RoomGameTimeChange -> gameTime = update.gameTime
is RoomArtifactChange -> artifactIffId = update.artifactIffId
is RoomNaturalWindChange -> naturalWind = update.naturalWind
is RoomHoleRepeatHoleChange -> repeatingHole = update.repeatingHole
is RoomHoleRepeatFixedHoleChange -> repeatFixedHole = update.fixedHole
}
}

Expand All @@ -67,6 +76,10 @@ fun ByteBuf.write(settings: RoomSettings) {
write(course)
writeByte(holeCount)
write(holeMode)
if (holeMode == REPEAT) {
writeByte(repeatingHole)
writeIntLE(if (repeatFixedHole) 7 else 6)
}
writeIntLE(if (naturalWind) 1 else 0)
writeByte(maxPlayers) // max players
writeByte(30)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,6 @@ data class RoomShotTimeChange(val shotTime: Duration) : RoomUpdate
data class RoomPlayerCountChange(val playerCount: Int) : RoomUpdate
data class RoomGameTimeChange(val gameTime: Duration) : RoomUpdate
data class RoomArtifactChange(val artifactIffId: Int) : RoomUpdate
data class RoomNaturalWindChange(val naturalWind: Boolean) : RoomUpdate
data class RoomNaturalWindChange(val naturalWind: Boolean) : RoomUpdate
data class RoomHoleRepeatHoleChange(val repeatingHole: Int) : RoomUpdate
data class RoomHoleRepeatFixedHoleChange(val fixedHole: Boolean) : RoomUpdate
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class LoginTask(
val sessionClient = loginServer.sessionClient
val userSession = sessionClient.sessionKeyForUsername(username)

if (userSession == null) {
if (userSession != null) {
duplicateConnection()
return
}
Expand Down

0 comments on commit eab2cd7

Please sign in to comment.