mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-07-14 07:55:07 +00:00
added DensityLevelUpdateMessage packet and tests; including default packet during initialization phase
This commit is contained in:
parent
77b4890706
commit
3965437116
5 changed files with 103 additions and 4 deletions
|
|
@ -561,7 +561,7 @@ object GamePacketOpcode extends Enumeration {
|
||||||
case 0xca => noDecoder(OutfitBenefitMessage)
|
case 0xca => noDecoder(OutfitBenefitMessage)
|
||||||
case 0xcb => noDecoder(EmpireChangeTimeMessage)
|
case 0xcb => noDecoder(EmpireChangeTimeMessage)
|
||||||
case 0xcc => noDecoder(ClockCalibrationMessage)
|
case 0xcc => noDecoder(ClockCalibrationMessage)
|
||||||
case 0xcd => noDecoder(DensityLevelUpdateMessage)
|
case 0xcd => game.DensityLevelUpdateMessage.decode
|
||||||
case 0xce => noDecoder(ActOfGodMessage)
|
case 0xce => noDecoder(ActOfGodMessage)
|
||||||
case 0xcf => noDecoder(AvatarAwardMessage)
|
case 0xcf => noDecoder(AvatarAwardMessage)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2016 PSForever.net to present
|
// Copyright (c) 2017 PSForever
|
||||||
package net.psforever.packet.game
|
package net.psforever.packet.game
|
||||||
|
|
||||||
import net.psforever.packet.{GamePacketOpcode, Marshallable, PlanetSideGamePacket}
|
import net.psforever.packet.{GamePacketOpcode, Marshallable, PlanetSideGamePacket}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
// Copyright (c) 2017 PSForever
|
||||||
|
package net.psforever.packet.game
|
||||||
|
|
||||||
|
import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket}
|
||||||
|
import scodec.{Attempt, Codec, Err}
|
||||||
|
import scodec.codecs._
|
||||||
|
import shapeless.{::, HNil}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* na
|
||||||
|
* @param zone_id the continent
|
||||||
|
* @param building_id the building
|
||||||
|
* @param density na
|
||||||
|
*/
|
||||||
|
final case class DensityLevelUpdateMessage(zone_id : PlanetSideGUID,
|
||||||
|
building_id : PlanetSideGUID,
|
||||||
|
density : List[Int])
|
||||||
|
extends PlanetSideGamePacket {
|
||||||
|
type Packet = DensityLevelUpdateMessage
|
||||||
|
def opcode = GamePacketOpcode.DensityLevelUpdateMessage
|
||||||
|
def encode = DensityLevelUpdateMessage.encode(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
object DensityLevelUpdateMessage extends Marshallable[DensityLevelUpdateMessage] {
|
||||||
|
implicit val codec : Codec[DensityLevelUpdateMessage] = (
|
||||||
|
("zone_id" | PlanetSideGUID.codec) ::
|
||||||
|
("building_id" | PlanetSideGUID.codec) ::
|
||||||
|
("density" | PacketHelpers.listOfNSized(8, uint(3)))
|
||||||
|
).exmap[DensityLevelUpdateMessage] (
|
||||||
|
{
|
||||||
|
case a :: b :: c :: HNil =>
|
||||||
|
Attempt.Successful(DensityLevelUpdateMessage(a, b, c))
|
||||||
|
},
|
||||||
|
{
|
||||||
|
case DensityLevelUpdateMessage(a, b, c) =>
|
||||||
|
if(c.length != 8) {
|
||||||
|
Attempt.Failure(Err("list must have 8 entries"))
|
||||||
|
}
|
||||||
|
else if(c.count(i => { i < 0 || i > 7 }) > 0) {
|
||||||
|
Attempt.Failure(Err("list entries must be 0-7 inclusive"))
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Attempt.Successful(a :: b :: c :: HNil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
// Copyright (c) 2017 PSForever
|
||||||
|
package game
|
||||||
|
|
||||||
|
import org.specs2.mutable._
|
||||||
|
import net.psforever.packet._
|
||||||
|
import net.psforever.packet.game._
|
||||||
|
import scodec.bits._
|
||||||
|
|
||||||
|
class DensityLevelUpdateMessageTest extends Specification {
|
||||||
|
val string = hex"cd 0100 1f4e 000000"
|
||||||
|
|
||||||
|
"decode" in {
|
||||||
|
PacketCoding.DecodePacket(string).require match {
|
||||||
|
case DensityLevelUpdateMessage(zone_id, building_id, unk) =>
|
||||||
|
zone_id mustEqual PlanetSideGUID(1)
|
||||||
|
building_id mustEqual PlanetSideGUID(19999)
|
||||||
|
unk.length mustEqual 8
|
||||||
|
unk.head mustEqual 0
|
||||||
|
unk(1) mustEqual 0
|
||||||
|
unk(2) mustEqual 0
|
||||||
|
unk(3) mustEqual 0
|
||||||
|
unk(4) mustEqual 0
|
||||||
|
unk(5) mustEqual 0
|
||||||
|
unk(6) mustEqual 0
|
||||||
|
unk(7) mustEqual 0
|
||||||
|
case _ =>
|
||||||
|
ko
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
"encode" in {
|
||||||
|
val msg = DensityLevelUpdateMessage(PlanetSideGUID(1), PlanetSideGUID(19999), List(0,0, 0,0, 0,0, 0,0))
|
||||||
|
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||||
|
|
||||||
|
pkt mustEqual string
|
||||||
|
}
|
||||||
|
|
||||||
|
"encode (failure; wrong number of list entries)" in {
|
||||||
|
val msg = DensityLevelUpdateMessage(PlanetSideGUID(1), PlanetSideGUID(19999), List(0))
|
||||||
|
PacketCoding.EncodePacket(msg).isSuccessful mustEqual false
|
||||||
|
}
|
||||||
|
|
||||||
|
"encode (failure; list number too big)" in {
|
||||||
|
val msg1 = DensityLevelUpdateMessage(PlanetSideGUID(1), PlanetSideGUID(19999), List(0,0, 0,0, 0,0, 0,8))
|
||||||
|
PacketCoding.EncodePacket(msg1).isSuccessful mustEqual false
|
||||||
|
}
|
||||||
|
|
||||||
|
"encode (failure; list number too small)" in {
|
||||||
|
val msg1 = DensityLevelUpdateMessage(PlanetSideGUID(1), PlanetSideGUID(19999), List(0,0, 0,0, 0,-1, 0,0))
|
||||||
|
PacketCoding.EncodePacket(msg1).isSuccessful mustEqual false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3059,6 +3059,8 @@ class WorldSessionActor extends Actor with MDCContextAware {
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
sendResponse(DensityLevelUpdateMessage(continentNumber, buildingNumber, List(0,0, 0,0, 0,0, 0,0))) //TODO what is density?
|
||||||
|
//TODO BroadcastWarpgateUpdateMessage() for warp gates
|
||||||
// sendResponse(
|
// sendResponse(
|
||||||
// BuildingInfoUpdateMessage(
|
// BuildingInfoUpdateMessage(
|
||||||
// PlanetSideGUID(6), //Ceryshen
|
// PlanetSideGUID(6), //Ceryshen
|
||||||
|
|
@ -3084,8 +3086,6 @@ class WorldSessionActor extends Actor with MDCContextAware {
|
||||||
// true //Boosted generator room pain field
|
// true //Boosted generator room pain field
|
||||||
// )
|
// )
|
||||||
// )
|
// )
|
||||||
//TODO DensityLevelUpdateMessage()
|
|
||||||
//TODO BroadcastWarpgateUpdateMessage() for warp gates
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def configZone(zone : Zone) : Unit = {
|
def configZone(zone : Zone) : Unit = {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue