mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-07-14 16:04:41 +00:00
initial work on DisconnectMessage; it's pretty straightforward, I think
This commit is contained in:
parent
2a4cda557e
commit
5855348209
3 changed files with 59 additions and 1 deletions
|
|
@ -535,7 +535,7 @@ object GamePacketOpcode extends Enumeration {
|
||||||
case 0xb4 => game.BattleExperienceMessage.decode
|
case 0xb4 => game.BattleExperienceMessage.decode
|
||||||
case 0xb5 => noDecoder(TargetingImplantRequest)
|
case 0xb5 => noDecoder(TargetingImplantRequest)
|
||||||
case 0xb6 => game.ZonePopulationUpdateMessage.decode
|
case 0xb6 => game.ZonePopulationUpdateMessage.decode
|
||||||
case 0xb7 => noDecoder(DisconnectMessage)
|
case 0xb7 => game.DisconnectMessage.decode
|
||||||
// 0xb8
|
// 0xb8
|
||||||
case 0xb8 => noDecoder(ExperienceAddedMessage)
|
case 0xb8 => noDecoder(ExperienceAddedMessage)
|
||||||
case 0xb9 => game.OrbitalStrikeWaypointMessage.decode
|
case 0xb9 => game.OrbitalStrikeWaypointMessage.decode
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
// Copyright (c) 2016 PSForever.net to present
|
||||||
|
package net.psforever.packet.game
|
||||||
|
|
||||||
|
import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket}
|
||||||
|
import scodec.Codec
|
||||||
|
import scodec.codecs._
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dispatched to the client to force a disconnect.<br>
|
||||||
|
* <br>
|
||||||
|
* The client's render will fade and be centered with a system textbox with the given message.
|
||||||
|
* Using the button on the textbox will drop the current world session and return the player to the world select screen.
|
||||||
|
* Being disconnected like this has no client-based consequences on its own.<br>
|
||||||
|
* <br>
|
||||||
|
* Exploration:<br>
|
||||||
|
* When do the other two messages appear, if at all?
|
||||||
|
* @param msg the displayed message
|
||||||
|
* @param unk2 na
|
||||||
|
* @param unk3 na
|
||||||
|
*/
|
||||||
|
final case class DisconnectMessage(msg : String,
|
||||||
|
unk2 : String = "",
|
||||||
|
unk3 : String = "")
|
||||||
|
extends PlanetSideGamePacket {
|
||||||
|
type Packet = DisconnectMessage
|
||||||
|
def opcode = GamePacketOpcode.DisconnectMessage
|
||||||
|
def encode = DisconnectMessage.encode(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
object DisconnectMessage extends Marshallable[DisconnectMessage] {
|
||||||
|
implicit val codec : Codec[DisconnectMessage] = (
|
||||||
|
("msg" | PacketHelpers.encodedString) ::
|
||||||
|
("unk2" | PacketHelpers.encodedString) ::
|
||||||
|
("unk3" | PacketHelpers.encodedString)
|
||||||
|
).as[DisconnectMessage]
|
||||||
|
}
|
||||||
|
|
@ -1492,6 +1492,28 @@ class GamePacketTest extends Specification {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"DisconnectMessage" should {
|
||||||
|
val string = hex"B7 85 46 69 72 73 74 86 53 65 63 6F 6E 64 8E 46 69 72 73 74 20 26 20 73 65 63 6F 6E 64"
|
||||||
|
|
||||||
|
"decode" in {
|
||||||
|
PacketCoding.DecodePacket(string).require match {
|
||||||
|
case DisconnectMessage(unk1, unk2, unk3) =>
|
||||||
|
unk1 mustEqual "First"
|
||||||
|
unk2 mustEqual "Second"
|
||||||
|
unk3 mustEqual "First & second"
|
||||||
|
case default =>
|
||||||
|
ko
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
"encode" in {
|
||||||
|
val msg = DisconnectMessage("First", "Second", "First & second")
|
||||||
|
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||||
|
|
||||||
|
pkt mustEqual string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
"OrbitalStrikeWaypointMessage" should {
|
"OrbitalStrikeWaypointMessage" should {
|
||||||
val string_on = hex"B9 46 0C AA E3 D2 2A 92 00"
|
val string_on = hex"B9 46 0C AA E3 D2 2A 92 00"
|
||||||
val string_off = hex"B9 46 0C 00"
|
val string_off = hex"B9 46 0C 00"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue