mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-02-23 08:33:36 +00:00
; moved from brnach squad-req, due to branch incompatibilities
This commit is contained in:
parent
1fb35bacd1
commit
f45420b511
4 changed files with 151 additions and 1 deletions
|
|
@ -446,7 +446,7 @@ object GamePacketOpcode extends Enumeration {
|
|||
case 0x6b => game.TriggerSoundMessage.decode
|
||||
case 0x6c => game.LootItemMessage.decode
|
||||
case 0x6d => game.VehicleSubStateMessage.decode
|
||||
case 0x6e => noDecoder(SquadMembershipRequest)
|
||||
case 0x6e => game.SquadMembershipRequest.decode
|
||||
case 0x6f => noDecoder(SquadMembershipResponse)
|
||||
|
||||
// OPCODES 0x70-7f
|
||||
|
|
|
|||
|
|
@ -0,0 +1,55 @@
|
|||
// Copyright (c) 2019 PSForever
|
||||
package net.psforever.packet.game
|
||||
|
||||
import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket}
|
||||
import net.psforever.types.SquadRequestType
|
||||
import scodec.Codec
|
||||
import scodec.codecs._
|
||||
|
||||
/**
|
||||
* SquadMembershipRequest is a Client->Server message for manipulating squad and platoon members.
|
||||
* @param request_type na
|
||||
* @param unk2 na
|
||||
* @param unk3 na
|
||||
* @param player_name na
|
||||
* @param unk5 na
|
||||
*/
|
||||
final case class SquadMembershipRequest(request_type : SquadRequestType.Value,
|
||||
unk2 : Long,
|
||||
unk3 : Option[Long],
|
||||
player_name : String,
|
||||
unk5 : Option[Option[String]])
|
||||
extends PlanetSideGamePacket {
|
||||
request_type match {
|
||||
case SquadRequestType.Accept | SquadRequestType.Reject | SquadRequestType.Disband |
|
||||
SquadRequestType.PAccept | SquadRequestType.PReject | SquadRequestType.PDisband =>
|
||||
assert(unk3.isEmpty, s"a $request_type request requires the unk3 field be undefined")
|
||||
case _ =>
|
||||
assert(unk3.nonEmpty, s"a $request_type request requires the unk3 field be defined")
|
||||
}
|
||||
if(request_type == SquadRequestType.Invite) {
|
||||
assert(unk5.nonEmpty, "an Invite request requires the unk5 field be undefined")
|
||||
}
|
||||
|
||||
type Packet = SquadMembershipRequest
|
||||
def opcode = GamePacketOpcode.SquadMembershipRequest
|
||||
def encode = SquadMembershipRequest.encode(this)
|
||||
}
|
||||
|
||||
object SquadMembershipRequest extends Marshallable[SquadMembershipRequest] {
|
||||
implicit val codec : Codec[SquadMembershipRequest] = (
|
||||
("request_type" | SquadRequestType.codec) >>:~ { request_type =>
|
||||
("unk2" | uint32L) ::
|
||||
conditional(request_type != SquadRequestType.Accept &&
|
||||
request_type != SquadRequestType.Reject &&
|
||||
request_type != SquadRequestType.Disband &&
|
||||
request_type != SquadRequestType.PAccept &&
|
||||
request_type != SquadRequestType.PReject &&
|
||||
request_type != SquadRequestType.PDisband, "unk3" | uint32L) ::
|
||||
(("player_name" | PacketHelpers.encodedWideStringAligned(4)) >>:~ { pname =>
|
||||
conditional(request_type == SquadRequestType.Invite,
|
||||
"unk5" | optional(bool, PacketHelpers.encodedWideStringAligned({if(pname.length == 0) 3 else 7}))
|
||||
).hlist
|
||||
})
|
||||
}).as[SquadMembershipRequest]
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
// Copyright (c) 2019 PSForever
|
||||
package net.psforever.types
|
||||
|
||||
import net.psforever.packet.PacketHelpers
|
||||
import scodec.codecs._
|
||||
|
||||
object SquadRequestType extends Enumeration {
|
||||
type Type = Value
|
||||
val Invite, //00
|
||||
Unk01, //01
|
||||
Accept, //02
|
||||
Reject, //03
|
||||
Cancel, //04
|
||||
Leave, //05
|
||||
Promote, //06
|
||||
Disband, //07
|
||||
PInvite, //08
|
||||
PAccept, //09
|
||||
PReject, //10
|
||||
PCancel, //11
|
||||
PLeave, //12
|
||||
PDisband, //13
|
||||
Unk14, //14
|
||||
Unk15 //15
|
||||
= Value
|
||||
|
||||
implicit val codec = PacketHelpers.createEnumerationCodec(this, uint4L)
|
||||
}
|
||||
67
common/src/test/scala/game/SquadMembershipRequestTest.scala
Normal file
67
common/src/test/scala/game/SquadMembershipRequestTest.scala
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
// Copyright (c) 2019 PSForever
|
||||
package game
|
||||
|
||||
import net.psforever.packet._
|
||||
import net.psforever.packet.game._
|
||||
import net.psforever.types.SquadRequestType
|
||||
import org.specs2.mutable._
|
||||
import scodec.bits._
|
||||
|
||||
class SquadMembershipRequestTest extends Specification {
|
||||
//481c897e-b47b-41cc-b7ad-c604606d985e / PSCap-2016-03-18_12-48-12-PM.gcap / Game record 5521 at 662.786844s
|
||||
val string1 = hex"6e015aa7a0224d87a0280000"
|
||||
//... / PSCap-2016-06-29_07-49-26-PM (last).gcap / Game record 77 at 9.732430 (found in MultiPacket)
|
||||
val string2 = hex"6E265DD7A02800"
|
||||
//TODO find example where player_name field is defined
|
||||
//TODO find example where unk field is defined and is a string
|
||||
|
||||
"decode (1)" in {
|
||||
PacketCoding.DecodePacket(string1).require match {
|
||||
case SquadMembershipRequest(req_type, unk2, unk3, p_name, unk5) =>
|
||||
req_type mustEqual SquadRequestType.Invite
|
||||
unk2 mustEqual 41593365L
|
||||
unk3.contains(41605156L) mustEqual true
|
||||
p_name mustEqual ""
|
||||
unk5.contains(None) mustEqual true
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"decode (2)" in {
|
||||
PacketCoding.DecodePacket(string2).require match {
|
||||
case SquadMembershipRequest(req_type, unk2, unk3, p_name, unk5) =>
|
||||
req_type mustEqual SquadRequestType.Accept
|
||||
unk2 mustEqual 41606501L
|
||||
unk3.isEmpty mustEqual true
|
||||
p_name mustEqual ""
|
||||
unk5.isEmpty mustEqual true
|
||||
case _ =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"encode (1)" in {
|
||||
val msg = SquadMembershipRequest(SquadRequestType.Invite, 41593365, Some(41605156L), "", Some(None))
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
pkt mustEqual string1
|
||||
}
|
||||
|
||||
"encode (1; failure 1)" in {
|
||||
SquadMembershipRequest(SquadRequestType.Invite, 41593365, None, "", Some(None)) must throwA[AssertionError]
|
||||
}
|
||||
|
||||
"encode (1; failure 2)" in {
|
||||
SquadMembershipRequest(SquadRequestType.Invite, 41593365, Some(41605156L), "", None) must throwA[AssertionError]
|
||||
}
|
||||
|
||||
"encode (2)" in {
|
||||
val msg = SquadMembershipRequest(SquadRequestType.Accept, 41606501, None, "", None)
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
pkt mustEqual string2
|
||||
}
|
||||
|
||||
"encode (2; failure)" in {
|
||||
SquadMembershipRequest(SquadRequestType.Accept, 41606501, Some(41606501), "", None) must throwA[AssertionError]
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue