mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-01-20 02:24:45 +00:00
Merge branch 'player-stasis'
This commit is contained in:
commit
2a858cf007
|
|
@ -482,7 +482,7 @@ object GamePacketOpcode extends Enumeration {
|
|||
// 0x88
|
||||
case 0x88 => game.WeaponDelayFireMessage.decode
|
||||
case 0x89 => game.BugReportMessage.decode
|
||||
case 0x8a => noDecoder(PlayerStasisMessage)
|
||||
case 0x8a => game.PlayerStasisMessage.decode
|
||||
case 0x8b => noDecoder(UnknownMessage139)
|
||||
case 0x8c => noDecoder(OutfitMembershipRequest)
|
||||
case 0x8d => noDecoder(OutfitMembershipResponse)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,41 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet.game
|
||||
|
||||
import net.psforever.packet.{GamePacketOpcode, Marshallable, PlanetSideGamePacket}
|
||||
import scodec.Codec
|
||||
import scodec.codecs._
|
||||
|
||||
/**
|
||||
* Causes the avatar to be prepped for drop pod use.<br>
|
||||
* <br>
|
||||
* This packet is dispatched from the server to all occupants of the HART shuttle when it has completed its take-off animation.
|
||||
* When received by the client, that player's avatar is "removed from the world" and the Interstellar Map is displayed for them.
|
||||
* The "Launch Drop Pod" button window is also made visible.
|
||||
* Selecting individual continental maps for viewing and clicking on the landmasses has the expected behavior for drop pods implementation.<br>
|
||||
* <br>
|
||||
* Being seated on the HART shuttle at the time, a player's avatar does not physically exist when the packet is received.
|
||||
* If the packet is received while the player is outside of the HART shuttle, the state of their avatar is not known to them.
|
||||
* "Removed from the world" merely implies that one can not leave the Interstellar Map once it has been displayed.
|
||||
* According to packet capture, their avatar is not explicitly deconstructed until the dropped-into map is loaded.<br>
|
||||
* <br>
|
||||
* When the packet is received on one's client, but is addressed to another player, nothing seems to happen to that player.
|
||||
* If that player's model is outside of the HART, it will not deconstruct.
|
||||
* Only the client's avatar can be affected by this packet.
|
||||
* @param player_guid the player
|
||||
* @param stasis `true` by default;
|
||||
* nothing when `false` (?)
|
||||
*/
|
||||
final case class PlayerStasisMessage(player_guid : PlanetSideGUID,
|
||||
stasis : Boolean = true)
|
||||
extends PlanetSideGamePacket {
|
||||
type Packet = PlayerStasisMessage
|
||||
def opcode = GamePacketOpcode.PlayerStasisMessage
|
||||
def encode = PlayerStasisMessage.encode(this)
|
||||
}
|
||||
|
||||
object PlayerStasisMessage extends Marshallable[PlayerStasisMessage] {
|
||||
implicit val codec : Codec[PlayerStasisMessage] = (
|
||||
("player_guid" | PlanetSideGUID.codec) ::
|
||||
("stasis" | bool)
|
||||
).as[PlayerStasisMessage]
|
||||
}
|
||||
|
|
@ -1377,6 +1377,27 @@ class GamePacketTest extends Specification {
|
|||
}
|
||||
}
|
||||
|
||||
"PlayerStasisMessage" should {
|
||||
val string = hex"8A 4B 00 80"
|
||||
|
||||
"decode" in {
|
||||
PacketCoding.DecodePacket(string).require match {
|
||||
case PlayerStasisMessage(player_guid, stasis) =>
|
||||
player_guid mustEqual PlanetSideGUID(75)
|
||||
stasis mustEqual true
|
||||
case default =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"encode" in {
|
||||
val msg = PlayerStasisMessage(PlanetSideGUID(75))
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
pkt mustEqual string
|
||||
}
|
||||
}
|
||||
|
||||
"ContinentalLockUpdateMessage" should {
|
||||
val string = hex"A8 16 00 40"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue