EmpireBenefitsMessage packet

This commit is contained in:
Resaec 2025-12-16 01:03:32 +01:00
parent a799aa5639
commit 958427dc8f
3 changed files with 98 additions and 1 deletions

View file

@ -557,7 +557,7 @@ object GamePacketOpcode extends Enumeration {
case 0xd4 => game.GenericObjectActionAtPositionMessage.decode
case 0xd5 => game.PropertyOverrideMessage.decode
case 0xd6 => game.WarpgateLinkOverrideMessage.decode
case 0xd7 => noDecoder(EmpireBenefitsMessage)
case 0xd7 => game.EmpireBenefitsMessage.decode
// 0xd8
case 0xd8 => noDecoder(ForceEmpireMessage)
case 0xd9 => game.BroadcastWarpgateUpdateMessage.decode

View file

@ -0,0 +1,44 @@
// Copyright (c) 2025 PSForever
package net.psforever.packet.game
import net.psforever.packet.game.EmpireBenefitsMessage.{ZoneLocks, ZoneBenefits}
import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket}
import scodec.Codec
import scodec.codecs._
final case class EmpireBenefitsMessage(
entriesA: Vector[ZoneLocks],
entriesB: Vector[ZoneBenefits]
) extends PlanetSideGamePacket {
type Packet = EmpireBenefitsMessage
def opcode = GamePacketOpcode.EmpireBenefitsMessage
def encode = EmpireBenefitsMessage.encode(this)
}
object EmpireBenefitsMessage extends Marshallable[EmpireBenefitsMessage] {
final case class ZoneLocks(
empire: Int,
zone: String
)
final case class ZoneBenefits(
empire: Int,
value: Int
)
private implicit val entryACodec: Codec[ZoneLocks] = (
("empire" | uint(2)) ::
("zone" | PacketHelpers.encodedStringAligned(6))
).as[ZoneLocks]
private implicit val entryBCodec: Codec[ZoneBenefits] = (
("empire" | uint(2)) ::
("benefit" | uint16L)
).as[ZoneBenefits]
implicit val codec: Codec[EmpireBenefitsMessage] = (
("entriesA" | vectorOfN(uint32L.xmap(_.toInt, _.toLong), entryACodec)) ::
("entriesB" | vectorOfN(uint32L.xmap(_.toInt, _.toLong), entryBCodec))
).as[EmpireBenefitsMessage]
}