mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-07-11 22:44:37 +00:00
Some little mod
This commit is contained in:
parent
63b89e4c98
commit
eaf61d3c3a
8 changed files with 88 additions and 62 deletions
|
|
@ -36,24 +36,24 @@ import scodec.codecs._
|
||||||
* The exact range of unique and valid icon values for this parameter is currently unknown.
|
* The exact range of unique and valid icon values for this parameter is currently unknown.
|
||||||
* It is also unknown what the two bytes preceding `method` specify, as changing them does nothing to the displayed message.
|
* It is also unknown what the two bytes preceding `method` specify, as changing them does nothing to the displayed message.
|
||||||
* @param killer the name of the player who did the killing
|
* @param killer the name of the player who did the killing
|
||||||
* @param killer_unk See above
|
* @param killer_charId Same as CharacterInfoMessage
|
||||||
* @param killer_empire the empire affiliation of the killer
|
* @param killer_empire the empire affiliation of the killer
|
||||||
* @param killer_inVehicle true, if the killer was in a vehicle at the time of the kill; false, otherwise
|
* @param killer_inVehicle true, if the killer was in a vehicle at the time of the kill; false, otherwise
|
||||||
* @param unk na; but does not like being set to 0
|
* @param unk na; but does not like being set to 0
|
||||||
* @param method modifies the icon in the message, related to the way the victim was killed
|
* @param method modifies the icon in the message, related to the way the victim was killed
|
||||||
* @param victim the name of the player who was killed
|
* @param victim the name of the player who was killed
|
||||||
* @param victim_unk See above
|
* @param victim_charId Same as CharacterInfoMessage
|
||||||
* @param victim_empire the empire affiliation of the victim
|
* @param victim_empire the empire affiliation of the victim
|
||||||
* @param victim_inVehicle true, if the victim was in a vehicle when he was killed; false, otherwise
|
* @param victim_inVehicle true, if the victim was in a vehicle when he was killed; false, otherwise
|
||||||
*/
|
*/
|
||||||
final case class DestroyDisplayMessage(killer : String,
|
final case class DestroyDisplayMessage(killer : String,
|
||||||
killer_unk : Long,
|
killer_charId : Long,
|
||||||
killer_empire : PlanetSideEmpire.Value,
|
killer_empire : PlanetSideEmpire.Value,
|
||||||
killer_inVehicle : Boolean,
|
killer_inVehicle : Boolean,
|
||||||
unk : Int,
|
unk : Int,
|
||||||
method : Int,
|
method : Int,
|
||||||
victim : String,
|
victim : String,
|
||||||
victim_unk : Long,
|
victim_charId : Long,
|
||||||
victim_empire : PlanetSideEmpire.Value,
|
victim_empire : PlanetSideEmpire.Value,
|
||||||
victim_inVehicle : Boolean
|
victim_inVehicle : Boolean
|
||||||
)
|
)
|
||||||
|
|
@ -66,13 +66,13 @@ final case class DestroyDisplayMessage(killer : String,
|
||||||
object DestroyDisplayMessage extends Marshallable[DestroyDisplayMessage] {
|
object DestroyDisplayMessage extends Marshallable[DestroyDisplayMessage] {
|
||||||
implicit val codec : Codec[DestroyDisplayMessage] = (
|
implicit val codec : Codec[DestroyDisplayMessage] = (
|
||||||
("killer" | PacketHelpers.encodedWideString) ::
|
("killer" | PacketHelpers.encodedWideString) ::
|
||||||
("killer_unk" | ulongL(32)) ::
|
("killer_charId" | ulongL(32)) ::
|
||||||
("killer_empire" | PlanetSideEmpire.codec) ::
|
("killer_empire" | PlanetSideEmpire.codec) ::
|
||||||
("killer_inVehicle" | bool) ::
|
("killer_inVehicle" | bool) ::
|
||||||
("unk" | uint16L) ::
|
("unk" | uint16L) ::
|
||||||
("method" | uint16L) ::
|
("method" | uint16L) ::
|
||||||
("victim" | PacketHelpers.encodedWideStringAligned(5)) ::
|
("victim" | PacketHelpers.encodedWideStringAligned(5)) ::
|
||||||
("victim_unk" | ulongL(32)) ::
|
("victim_charId" | ulongL(32)) ::
|
||||||
("victim_empire" | PlanetSideEmpire.codec) ::
|
("victim_empire" | PlanetSideEmpire.codec) ::
|
||||||
("victim_inVehicle" | bool)
|
("victim_inVehicle" | bool)
|
||||||
).as[DestroyDisplayMessage]
|
).as[DestroyDisplayMessage]
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ final case class MoveItemMessage(item_guid : PlanetSideGUID,
|
||||||
avatar_guid_1 : PlanetSideGUID,
|
avatar_guid_1 : PlanetSideGUID,
|
||||||
avatar_guid_2 : PlanetSideGUID,
|
avatar_guid_2 : PlanetSideGUID,
|
||||||
dest : Int,
|
dest : Int,
|
||||||
unk1 : Int)
|
unk1 : Int) // TODO ammo quantity ?
|
||||||
extends PlanetSideGamePacket {
|
extends PlanetSideGamePacket {
|
||||||
type Packet = MoveItemMessage
|
type Packet = MoveItemMessage
|
||||||
def opcode = GamePacketOpcode.MoveItemMessage
|
def opcode = GamePacketOpcode.MoveItemMessage
|
||||||
|
|
|
||||||
|
|
@ -15,32 +15,35 @@ import scodec.codecs._
|
||||||
* @param avatar_guid the player's GUID
|
* @param avatar_guid the player's GUID
|
||||||
* @param pos where the player is in the world
|
* @param pos where the player is in the world
|
||||||
* @param vel how the player is moving
|
* @param vel how the player is moving
|
||||||
* @param unk1 na
|
* @param facingYaw the angle with respect to the horizon towards which the avatar is looking;
|
||||||
* @param aim_pitch the vertical angle of viewing
|
* the model's whole body is facing this direction;
|
||||||
* @param unk2 na
|
* measurements are counter-clockwise from East
|
||||||
|
* @param facingPitch the angle with respect to the sky and the ground towards which the avatar is looking
|
||||||
|
* @param facingYawUpper the angle of the avatar's upper body with respect to its forward-facing direction
|
||||||
* @param seq_time na
|
* @param seq_time na
|
||||||
|
* @param unk1 na
|
||||||
|
* @param is_crouching avatar is crouching
|
||||||
|
* @param is_jumping avatar is jumping;
|
||||||
|
* must remain flagged for jump to maintain animation
|
||||||
|
* @param jump_thrust provide a measure of vertical stability when really close to the avatar character
|
||||||
|
* @param is_cloaked avatar is cloaked by virtue of an Infiltration Suit
|
||||||
|
* @param unk2 na
|
||||||
* @param unk3 na
|
* @param unk3 na
|
||||||
* @param is_crouching whether the player is crouched
|
|
||||||
* @param is_jumping na
|
|
||||||
* @param unk4 na
|
|
||||||
* @param is_cloaking whether the player is cloaked by virtue of an Infiltration Suit
|
|
||||||
* @param unk5 na
|
|
||||||
* @param unk6 na
|
|
||||||
*/
|
*/
|
||||||
final case class PlayerStateMessageUpstream(avatar_guid : PlanetSideGUID,
|
final case class PlayerStateMessageUpstream(avatar_guid : PlanetSideGUID,
|
||||||
pos : Vector3,
|
pos : Vector3,
|
||||||
vel : Option[Vector3],
|
vel : Option[Vector3],
|
||||||
unk1 : Int,
|
facingYaw : Int,
|
||||||
aim_pitch : Int,
|
facingPitch : Int,
|
||||||
unk2 : Int,
|
facingYawUpper : Int,
|
||||||
seq_time : Int,
|
seq_time : Int,
|
||||||
unk3 : Int,
|
unk1 : Int,
|
||||||
is_crouching : Boolean,
|
is_crouching : Boolean,
|
||||||
is_jumping : Boolean,
|
is_jumping : Boolean,
|
||||||
unk4 : Boolean,
|
jump_thrust : Boolean,
|
||||||
is_cloaking : Boolean,
|
is_cloaked : Boolean,
|
||||||
unk5 : Int,
|
unk2 : Int,
|
||||||
unk6 : Int)
|
unk3 : Int)
|
||||||
extends PlanetSideGamePacket {
|
extends PlanetSideGamePacket {
|
||||||
type Packet = PlayerStateMessageUpstream
|
type Packet = PlayerStateMessageUpstream
|
||||||
def opcode = GamePacketOpcode.PlayerStateMessageUpstream
|
def opcode = GamePacketOpcode.PlayerStateMessageUpstream
|
||||||
|
|
@ -49,19 +52,19 @@ final case class PlayerStateMessageUpstream(avatar_guid : PlanetSideGUID,
|
||||||
|
|
||||||
object PlayerStateMessageUpstream extends Marshallable[PlayerStateMessageUpstream] {
|
object PlayerStateMessageUpstream extends Marshallable[PlayerStateMessageUpstream] {
|
||||||
implicit val codec : Codec[PlayerStateMessageUpstream] = (
|
implicit val codec : Codec[PlayerStateMessageUpstream] = (
|
||||||
("avatar_guid" | PlanetSideGUID.codec) ::
|
("avatar_guid" | PlanetSideGUID.codec) ::
|
||||||
("pos" | Vector3.codec_pos) ::
|
("pos" | Vector3.codec_pos) ::
|
||||||
("vel" | optional(bool, Vector3.codec_vel)) ::
|
("vel" | optional(bool, Vector3.codec_vel)) ::
|
||||||
("unk1" | uint8L) ::
|
("facingYaw" | uint8L) ::
|
||||||
("aim_pitch" | uint8L) ::
|
("facingPitch" | uint8L) ::
|
||||||
("unk2" | uint8L) ::
|
("facingYawUpper" | uint8L) ::
|
||||||
("seq_time" | uintL(10)) ::
|
("seq_time" | uintL(10)) ::
|
||||||
("unk3" | uintL(3)) ::
|
("unk1" | uintL(3)) ::
|
||||||
("is_crouching" | bool) ::
|
("is_crouching" | bool) ::
|
||||||
("is_jumping" | bool) ::
|
("is_jumping" | bool) ::
|
||||||
("unk4" | bool) ::
|
("jump_thrust" | bool) ::
|
||||||
("is_cloaking" | bool) ::
|
("is_cloaked" | bool) ::
|
||||||
("unk5" | uint8L) ::
|
("unk2" | uint8L) ::
|
||||||
("unk6" | uint16L)
|
("unk3" | uint16L)
|
||||||
).as[PlayerStateMessageUpstream]
|
).as[PlayerStateMessageUpstream]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,20 @@ import net.psforever.types.Vector3
|
||||||
import scodec.Codec
|
import scodec.Codec
|
||||||
import scodec.codecs._
|
import scodec.codecs._
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (Where the child object was before it was moved is not specified or important.)<br>
|
||||||
|
* @param avatar_guid the player.
|
||||||
|
* @param unk1 dont know how call that. It's the "item" ID when use a rek to hack or a medkit to heal.
|
||||||
|
* @param object_guid can be : Door, Terminal, Avatar (medkit).
|
||||||
|
* @param unk2 ???
|
||||||
|
* @param unk3 ??? true when use a rek (false when door, medkit or open equip term)
|
||||||
|
* @param unk4 ???
|
||||||
|
* @param unk5 ???
|
||||||
|
* @param unk6 ???
|
||||||
|
* @param unk7 ??? 25 when door 223 when terminal
|
||||||
|
* @param unk8 ??? 0 when door 1 when use rek (252 then equipment term)
|
||||||
|
* @param itemType object ID from game_objects.adb (ex 612 is an equipment terminal, for medkit we have 121 (avatar))
|
||||||
|
*/
|
||||||
final case class UseItemMessage(avatar_guid : PlanetSideGUID,
|
final case class UseItemMessage(avatar_guid : PlanetSideGUID,
|
||||||
unk1 : Int,
|
unk1 : Int,
|
||||||
object_guid : PlanetSideGUID,
|
object_guid : PlanetSideGUID,
|
||||||
|
|
@ -16,7 +30,7 @@ final case class UseItemMessage(avatar_guid : PlanetSideGUID,
|
||||||
unk6 : Int,
|
unk6 : Int,
|
||||||
unk7 : Int,
|
unk7 : Int,
|
||||||
unk8 : Int,
|
unk8 : Int,
|
||||||
unk9 : Long)
|
itemType : Long)
|
||||||
extends PlanetSideGamePacket {
|
extends PlanetSideGamePacket {
|
||||||
type Packet = UseItemMessage
|
type Packet = UseItemMessage
|
||||||
def opcode = GamePacketOpcode.UseItemMessage
|
def opcode = GamePacketOpcode.UseItemMessage
|
||||||
|
|
@ -35,6 +49,6 @@ object UseItemMessage extends Marshallable[UseItemMessage] {
|
||||||
("unk6" | uint8L) ::
|
("unk6" | uint8L) ::
|
||||||
("unk7" | uint8L) ::
|
("unk7" | uint8L) ::
|
||||||
("unk8" | uint8L) ::
|
("unk8" | uint8L) ::
|
||||||
("unk9" | uint32L)
|
("itemType" | uint32L)
|
||||||
).as[UseItemMessage]
|
).as[UseItemMessage]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,15 +12,15 @@ class DestroyDisplayMessageTest extends Specification {
|
||||||
|
|
||||||
"decode" in {
|
"decode" in {
|
||||||
PacketCoding.DecodePacket(string).require match {
|
PacketCoding.DecodePacket(string).require match {
|
||||||
case DestroyDisplayMessage(killer, killer_unk, killer_empire, killer_inVehicle, unk, method, victim, victim_unk, victim_empire, victim_inVehicle) =>
|
case DestroyDisplayMessage(killer, killer_charId, killer_empire, killer_inVehicle, unk, method, victim, victim_charId, victim_empire, victim_inVehicle) =>
|
||||||
killer mustEqual "Angello"
|
killer mustEqual "Angello"
|
||||||
killer_unk mustEqual 30981173
|
killer_charId mustEqual 30981173
|
||||||
killer_empire mustEqual PlanetSideEmpire.VS
|
killer_empire mustEqual PlanetSideEmpire.VS
|
||||||
killer_inVehicle mustEqual false
|
killer_inVehicle mustEqual false
|
||||||
unk mustEqual 121
|
unk mustEqual 121
|
||||||
method mustEqual 969
|
method mustEqual 969
|
||||||
victim mustEqual "HMFIC"
|
victim mustEqual "HMFIC"
|
||||||
victim_unk mustEqual 31035057
|
victim_charId mustEqual 31035057
|
||||||
victim_empire mustEqual PlanetSideEmpire.TR
|
victim_empire mustEqual PlanetSideEmpire.TR
|
||||||
victim_inVehicle mustEqual false
|
victim_inVehicle mustEqual false
|
||||||
case _ =>
|
case _ =>
|
||||||
|
|
|
||||||
|
|
@ -12,21 +12,21 @@ class PlayerStateMessageUpstreamTest extends Specification {
|
||||||
|
|
||||||
"decode" in {
|
"decode" in {
|
||||||
PacketCoding.DecodePacket(string).require match {
|
PacketCoding.DecodePacket(string).require match {
|
||||||
case PlayerStateMessageUpstream(avatar_guid, pos, vel, unk1, aim_pitch, unk2, seq_time, unk3, is_crouching, unk4, unk5, is_cloaking, unk6, unk7) =>
|
case PlayerStateMessageUpstream(avatar_guid, pos, vel, facingYaw, facingPitch, facingYawUpper, seq_time, unk1, is_crouching, is_jumping, jump_thrust, is_cloaked, unk2, unk3) =>
|
||||||
avatar_guid mustEqual PlanetSideGUID(75)
|
avatar_guid mustEqual PlanetSideGUID(75)
|
||||||
pos mustEqual Vector3(3694.1094f, 2735.4531f, 90.84375f)
|
pos mustEqual Vector3(3694.1094f, 2735.4531f, 90.84375f)
|
||||||
vel mustEqual Some(Vector3(4.375f, 2.59375f, 0.0f))
|
vel mustEqual Some(Vector3(4.375f, 2.59375f, 0.0f))
|
||||||
unk1 mustEqual 10
|
facingYaw mustEqual 10
|
||||||
aim_pitch mustEqual 3
|
facingPitch mustEqual 3
|
||||||
unk2 mustEqual 0
|
facingYawUpper mustEqual 0
|
||||||
seq_time mustEqual 136
|
seq_time mustEqual 136
|
||||||
unk3 mustEqual 0
|
unk1 mustEqual 0
|
||||||
is_crouching mustEqual false
|
is_crouching mustEqual false
|
||||||
unk4 mustEqual false
|
is_jumping mustEqual false
|
||||||
unk5 mustEqual false
|
jump_thrust mustEqual false
|
||||||
is_cloaking mustEqual false
|
is_cloaked mustEqual false
|
||||||
unk6 mustEqual 112
|
unk2 mustEqual 112
|
||||||
unk7 mustEqual 0
|
unk3 mustEqual 0
|
||||||
case _ =>
|
case _ =>
|
||||||
ko
|
ko
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ class UseItemMessageTest extends Specification {
|
||||||
|
|
||||||
"decode" in {
|
"decode" in {
|
||||||
PacketCoding.DecodePacket(string).require match {
|
PacketCoding.DecodePacket(string).require match {
|
||||||
case UseItemMessage(avatar_guid, unk1, object_guid, unk2, unk3, unk4, unk5, unk6, unk7, unk8, unk9) =>
|
case UseItemMessage(avatar_guid, unk1, object_guid, unk2, unk3, unk4, unk5, unk6, unk7, unk8, itemType) =>
|
||||||
avatar_guid mustEqual PlanetSideGUID(75)
|
avatar_guid mustEqual PlanetSideGUID(75)
|
||||||
unk1 mustEqual 0
|
unk1 mustEqual 0
|
||||||
object_guid mustEqual PlanetSideGUID(372)
|
object_guid mustEqual PlanetSideGUID(372)
|
||||||
|
|
@ -23,7 +23,7 @@ class UseItemMessageTest extends Specification {
|
||||||
unk6 mustEqual 11
|
unk6 mustEqual 11
|
||||||
unk7 mustEqual 25
|
unk7 mustEqual 25
|
||||||
unk8 mustEqual 0
|
unk8 mustEqual 0
|
||||||
unk9 mustEqual 364
|
itemType mustEqual 364
|
||||||
case _ =>
|
case _ =>
|
||||||
ko
|
ko
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -279,12 +279,14 @@ class WorldSessionActor extends Actor with MDCContextAware {
|
||||||
sendResponse(PacketCoding.CreateGamePacket(0, EmoteMsg(avatar_guid, emote)))
|
sendResponse(PacketCoding.CreateGamePacket(0, EmoteMsg(avatar_guid, emote)))
|
||||||
|
|
||||||
case msg @ DropItemMessage(item_guid) =>
|
case msg @ DropItemMessage(item_guid) =>
|
||||||
|
log.info("DropItem: " + msg)
|
||||||
//item dropped where you spawn in VS Sanctuary
|
//item dropped where you spawn in VS Sanctuary
|
||||||
sendResponse(PacketCoding.CreateGamePacket(0, ObjectDetachMessage(PlanetSideGUID(75), item_guid, app.pos, 0, 0, 0)))
|
sendResponse(PacketCoding.CreateGamePacket(0, ObjectDetachMessage(PlanetSideGUID(75), item_guid, app.pos, 0, 0, 0)))
|
||||||
log.info("DropItem: " + msg)
|
|
||||||
|
|
||||||
case msg @ PickupItemMessage(item_guid, player_guid, unk1, unk2) =>
|
case msg @ PickupItemMessage(item_guid, player_guid, unk1, unk2) =>
|
||||||
log.info("PickupItem: " + msg)
|
log.info("PickupItem: " + msg)
|
||||||
|
sendResponse(PacketCoding.CreateGamePacket(0, PickupItemMessage(item_guid, player_guid, unk1, unk2)))
|
||||||
|
sendResponse(PacketCoding.CreateGamePacket(0, ObjectAttachMessage(player_guid, item_guid, 250))) // item on mouse
|
||||||
|
|
||||||
case msg @ ReloadMessage(item_guid, ammo_clip, unk1) =>
|
case msg @ ReloadMessage(item_guid, ammo_clip, unk1) =>
|
||||||
log.info("Reload: " + msg)
|
log.info("Reload: " + msg)
|
||||||
|
|
@ -298,15 +300,20 @@ class WorldSessionActor extends Actor with MDCContextAware {
|
||||||
|
|
||||||
case msg @ ZipLineMessage(player_guid,origin_side,action,id,pos) =>
|
case msg @ ZipLineMessage(player_guid,origin_side,action,id,pos) =>
|
||||||
log.info("ZipLineMessage: " + msg)
|
log.info("ZipLineMessage: " + msg)
|
||||||
if(action == 0) {
|
if (!origin_side && action == 0) {
|
||||||
//doing this lets you use the zip line, but you can't get off
|
//doing this lets you use the zip line in one direction, cant come back
|
||||||
//sendResponse(PacketCoding.CreateGamePacket(0,ZipLineMessage(player_guid, origin_side, action, id, pos)))
|
sendResponse(PacketCoding.CreateGamePacket(0, ZipLineMessage(player_guid, origin_side, action, id, pos)))
|
||||||
}
|
}
|
||||||
else if(action == 1) {
|
else if (!origin_side && action == 1) {
|
||||||
//disembark from zipline at destination?
|
//disembark from zipline at destination !
|
||||||
|
sendResponse(PacketCoding.CreateGamePacket(0, ZipLineMessage(player_guid, origin_side, action, 0, pos)))
|
||||||
}
|
}
|
||||||
else if(action == 2) {
|
else if (!origin_side && action == 2) {
|
||||||
//get off by force
|
//get off by force
|
||||||
|
sendResponse(PacketCoding.CreateGamePacket(0, ZipLineMessage(player_guid, origin_side, action, 0, pos)))
|
||||||
|
}
|
||||||
|
else if (origin_side && action == 0) {
|
||||||
|
// for teleporters & the other zipline direction
|
||||||
}
|
}
|
||||||
|
|
||||||
case msg @ RequestDestroyMessage(object_guid) =>
|
case msg @ RequestDestroyMessage(object_guid) =>
|
||||||
|
|
@ -325,15 +332,17 @@ class WorldSessionActor extends Actor with MDCContextAware {
|
||||||
case msg @ ChangeAmmoMessage(item_guid, unk1) =>
|
case msg @ ChangeAmmoMessage(item_guid, unk1) =>
|
||||||
log.info("ChangeAmmo: " + msg)
|
log.info("ChangeAmmo: " + msg)
|
||||||
|
|
||||||
case msg @ UseItemMessage(avatar_guid, unk1, object_guid, unk2, unk3, unk4, unk5, unk6, unk7, unk8, unk9) =>
|
case msg @ UseItemMessage(avatar_guid, unk1, object_guid, unk2, unk3, unk4, unk5, unk6, unk7, unk8, itemType) =>
|
||||||
log.info("UseItem: " + msg)
|
log.info("UseItem: " + msg)
|
||||||
// TODO: Not all fields in the response are identical to source in real packet logs (but seems to be ok)
|
// TODO: Not all fields in the response are identical to source in real packet logs (but seems to be ok)
|
||||||
// TODO: Not all incoming UseItemMessage's respond with another UseItemMessage (i.e. doors only send out GenericObjectStateMsg)
|
// TODO: Not all incoming UseItemMessage's respond with another UseItemMessage (i.e. doors only send out GenericObjectStateMsg)
|
||||||
sendResponse(PacketCoding.CreateGamePacket(0, UseItemMessage(avatar_guid, unk1, object_guid, unk2, unk3, unk4, unk5, unk6, unk7, unk8, unk9)))
|
if (itemType != 121) sendResponse(PacketCoding.CreateGamePacket(0, UseItemMessage(avatar_guid, unk1, object_guid, unk2, unk3, unk4, unk5, unk6, unk7, unk8, itemType)))
|
||||||
if(unk1 != 0){ // TODO : medkit use ?!
|
if (itemType == 121 && !unk3){ // TODO : medkit use ?!
|
||||||
sendResponse(PacketCoding.CreateGamePacket(0, GenericObjectStateMsg(object_guid, 16)))
|
sendResponse(PacketCoding.CreateGamePacket(0, UseItemMessage(avatar_guid, unk1, object_guid, 0, unk3, unk4, unk5, unk6, unk7, unk8, itemType)))
|
||||||
|
sendResponse(PacketCoding.CreateGamePacket(0, PlanetsideAttributeMessage(avatar_guid, 0, 100))) // avatar with 100 hp
|
||||||
sendResponse(PacketCoding.CreateGamePacket(0, ObjectDeleteMessage(PlanetSideGUID(unk1), 2)))
|
sendResponse(PacketCoding.CreateGamePacket(0, ObjectDeleteMessage(PlanetSideGUID(unk1), 2)))
|
||||||
} else {
|
}
|
||||||
|
if (unk1 == 0 && !unk3 && unk7 == 25) {
|
||||||
// TODO: This should only actually be sent to doors upon opening; may break non-door items upon use
|
// TODO: This should only actually be sent to doors upon opening; may break non-door items upon use
|
||||||
sendResponse(PacketCoding.CreateGamePacket(0, GenericObjectStateMsg(object_guid, 16)))
|
sendResponse(PacketCoding.CreateGamePacket(0, GenericObjectStateMsg(object_guid, 16)))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue