Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package packets
- import utils.*
- import java.io.ByteArrayOutputStream
- data class ServerUpdate(
- var worldEdits: ArrayList<WorldEdit> = ArrayList<WorldEdit>(),
- var hits: ArrayList<Hit> = ArrayList<Hit>(),
- var particles: ArrayList<Particle> = ArrayList<Particle>(),
- var sounds: ArrayList<Sound> = ArrayList<Sound>(),
- var shots: ArrayList<Shot> = ArrayList<Shot>(),
- var worldObjects: ArrayList<WorldObject>,
- var chunkLoots: ArrayList<ChunkLoot>,
- var p48s: ArrayList<P48> = ArrayList<P48>(),
- var pickups: ArrayList<Pickup> = ArrayList<Pickup>(),
- var kills: ArrayList<Kill> = ArrayList<Kill>(),
- var attacks: ArrayList<Attack> = ArrayList<Attack>(),
- var buffs: ArrayList<Buff> = ArrayList(),
- var missions: ArrayList<Mission> = ArrayList<Mission>()
- ) : Packet(Opcode.ServerUpdate) {
- constructor(reader: Reader) : this() {
- val length = reader.readInt()
- val compressed = ByteArray(length)
- reader.read(compressed)
- val uncompressed = Zlib.inflate(compressed)
- val stream = uncompressed.inputStream()
- val _reader = Reader(stream)
- repeat(_reader.readInt()) {
- worldEdits.add(WorldEdit(_reader))
- }
- repeat(_reader.readInt()) {
- hits.add(Hit(_reader))
- }
- repeat(_reader.readInt()) {
- particles.add(Particle(_reader))
- }
- repeat(_reader.readInt()) {
- sounds.add(Sound(_reader))
- }
- repeat(_reader.readInt()) {
- shots.add(Shot(_reader))
- }
- repeat(_reader.readInt()) {
- worldObjects.add(WorldObject(_reader))
- }
- repeat(_reader.readInt()) {
- chunkLoots.add(ChunkLoot(_reader))
- }
- repeat(_reader.readInt()) {
- p48s.add(P48(_reader))
- }
- repeat(_reader.readInt()) {
- pickups.add(Pickup(_reader))
- }
- repeat(_reader.readInt()) {
- kills.add(Kill(_reader))
- }
- repeat(_reader.readInt()) {
- attacks.add(Attack(_reader))
- }
- repeat(_reader.readInt()) {
- buffs.add(Buff(_reader))
- }
- repeat(_reader.readInt()) {
- missions.add(Mission(_reader))
- }
- }
- override fun write(writer: Writer) {
- val stream = ByteArrayOutputStream()
- val _writer = Writer(stream)
- _writer.writeInt(worldEdits.size)
- worldEdits.forEach {
- it.write(writer)
- }
- _writer.writeInt(hits.size)
- hits.forEach {
- it.write(writer)
- }
- _writer.writeInt(particles.size)
- particles.forEach {
- it.write(writer)
- }
- _writer.writeInt(sounds.size)
- sounds.forEach {
- it.write(writer)
- }
- _writer.writeInt(shots.size)
- shots.forEach {
- it.write(writer)
- }
- _writer.writeInt(worldObjects.size)
- worldObjects.forEach {
- it.write(writer)
- }
- _writer.writeInt(chunkLoots.size)
- chunkLoots.forEach {
- it.write(writer)
- }
- _writer.writeInt(p48s.size)
- p48s.forEach {
- it.write(writer)
- }
- _writer.writeInt(pickups.size)
- pickups.forEach {
- it.write(writer)
- }
- _writer.writeInt(kills.size)
- kills.forEach {
- it.write(writer)
- }
- _writer.writeInt(attacks.size)
- attacks.forEach {
- it.write(writer)
- }
- _writer.writeInt(buffs.size)
- buffs.forEach {
- it.write(writer)
- }
- _writer.writeInt(missions.size)
- missions.forEach {
- it.write(writer)
- }
- val uncompressed = stream.toByteArray()
- val compressed = Zlib.deflate(uncompressed)
- writer.writeInt(compressed.size)
- writer.write(compressed)
- }
- }
- data class WorldEdit (
- var position: Vector3<Int>,
- var color: Vector3<Byte>,
- var blockType: BlockType,
- var unknown: Int
- ): CwSerializable {
- constructor(reader: Reader) : this(
- position = reader.readVector3Int(),
- color = reader.readVector3Byte(),
- blockType = BlockType(reader.readByte()),
- unknown = reader.readInt()
- )
- override fun write(writer: Writer) {
- writer.writeVector3Int(position)
- writer.writeVector3Byte(color)
- writer.writeByte(blockType.value.toInt())
- writer.writeInt(unknown)
- }
- }
- inline class BlockType(val value: Byte) {
- companion object {
- var Air = BlockType(0)
- var Solid = BlockType(1)
- var Liquid = BlockType(2)
- var Wet = BlockType(3)
- }
- }
- data class Particle (
- val position: Vector3<Long>,
- val velocity: Vector3<Float>,
- val color: Vector3<Byte>,
- val alpha: Float,
- val size: Float,
- val count: Int,
- val particleType: ParticleType,
- val spread: Float,
- val unknown: Int
- ):CwSerializable {
- constructor(reader: Reader) : this(
- position = reader.readVector3Long(),
- velocity = reader.readVector3Float(),
- color = reader.readVector3Byte(),
- alpha = reader.readFloat(),
- size = reader.readFloat(),
- count = reader.readInt(),
- particleType = ParticleType(reader.readByte()),
- spread = reader.readFloat(),
- unknown = reader.readInt()
- )
- override fun write(writer: Writer) {
- writer.writeVector3Long(position)
- writer.writeVector3Float(velocity)
- writer.writeVector3Byte(color)
- writer.writeFloat(alpha)
- writer.writeFloat(size)
- writer.writeInt(count)
- writer.writeByte(particleType.value.toInt())
- writer.writeFloat(spread)
- }
- }
- inline class ParticleType(val value: Byte) {
- companion object {
- val Normal = ParticleType(0)
- val Fire = ParticleType(1)
- val Unknown = ParticleType(2)
- val NoSpreadNoRotation = ParticleType(3)
- val NoGravity = ParticleType(4)
- }
- }
- data class Sound (
- var position: Vector3<Float>,
- var soundID: SoundID,
- var pitch: Float,
- var volume: Float
- ):CwSerializable {
- constructor(reader: Reader) : this(
- position = reader.readVector3Float(),
- soundID = SoundID(reader.readInt()),
- pitch = reader.readFloat(),
- volume = reader.readFloat()
- )
- override fun write(writer: Writer) {
- writer.writeVector3Float(position)
- writer.writeInt(soundID.value)
- writer.writeFloat(pitch)
- writer.writeFloat(volume)
- }
- }
- inline class SoundID(val value: Int) {
- companion object {
- var Hit = SoundID(0)
- var Blade1 = SoundID(1)
- var Blade2 = SoundID(2)
- var LongBlade1 = SoundID(3)
- var LongBlade2 = SoundID(4)
- var Hit1 = SoundID(5)
- var Hit2 = SoundID(6)
- var Punch1 = SoundID(7)
- var Punch2 = SoundID(8)
- var HitArrow = SoundID(9)
- var HitArrowCritical = SoundID(10)
- var Smash1 = SoundID(11)
- var SlamGround = SoundID(12)
- var SmashHit2 = SoundID(13)
- var SmashJump = SoundID(14)
- var Swing = SoundID(15)
- var ShieldSwing = SoundID(16)
- var SwingSlow = SoundID(17)
- var SwingSlow2 = SoundID(18)
- var ArrowDestroy = SoundID(19)
- var Blade3 = SoundID(20)
- var Punch3 = SoundID(21)
- var Salvo2 = SoundID(22)
- var SwordHit03 = SoundID(23)
- var Block = SoundID(24)
- var ShieldSlam = SoundID(25)
- var Roll = SoundID(26)
- var Destroy2 = SoundID(27)
- var Cry = SoundID(28)
- var Levelup2 = SoundID(29)
- var Missioncomplete = SoundID(30)
- var Watersplash01 = SoundID(31)
- var Step2 = SoundID(32)
- var StepWater = SoundID(33)
- var StepWater2 = SoundID(34)
- var StepWater3 = SoundID(35)
- var Channel2 = SoundID(36)
- var ChannelHit = SoundID(37)
- var Fireball = SoundID(38)
- var FireHit = SoundID(39)
- var Magic01 = SoundID(40)
- var Watersplash = SoundID(41)
- var WatersplashHit = SoundID(42)
- var LichScream = SoundID(43)
- var Drink2 = SoundID(44)
- var Pickup = SoundID(45)
- var Disenchant2 = SoundID(46)
- var Upgrade2 = SoundID(47)
- var Swirl = SoundID(48)
- var HumanVoice01 = SoundID(49)
- var HumanVoice02 = SoundID(50)
- var Gate = SoundID(51)
- var SpikeTrap = SoundID(52)
- var FireTrap = SoundID(53)
- var Lever = SoundID(54)
- var Charge2 = SoundID(55)
- var Magic02 = SoundID(56)
- var Drop = SoundID(57)
- var DropCoin = SoundID(58)
- var DropItem = SoundID(59)
- var MaleGroan = SoundID(60)
- var FemaleGroan = SoundID(61)
- var MaleGroan2 = SoundID(62)
- var FemaleGroan2 = SoundID(63)
- var GoblinMaleGroan = SoundID(64)
- var GoblinFemaleGroan = SoundID(65)
- var LizardMaleGroan = SoundID(66)
- var LizardFemaleGroan = SoundID(67)
- var DwarfMaleGroan = SoundID(68)
- var DwarfFemaleGroan = SoundID(69)
- var OrcMaleGroan = SoundID(70)
- var OrcFemaleGroan = SoundID(71)
- var UndeadMaleGroan = SoundID(72)
- var UndeadFemaleGroan = SoundID(73)
- var FrogmanMaleGroan = SoundID(74)
- var FrogmanFemaleGroan = SoundID(75)
- var MonsterGroan = SoundID(76)
- var TrollGroan = SoundID(77)
- var MoleGroan = SoundID(78)
- var SlimeGroan = SoundID(79)
- var ZombieGroan = SoundID(80)
- var Explosion = SoundID(81)
- var Punch4 = SoundID(82)
- var MenuOpen2 = SoundID(83)
- var MenuClose2 = SoundID(84)
- var MenuSelect = SoundID(85)
- var MenuTab = SoundID(86)
- var MenuGrabItem = SoundID(87)
- var MenuDropItem = SoundID(88)
- var Craft = SoundID(89)
- var CraftProc = SoundID(90)
- var Absorb = SoundID(91)
- var Manashield = SoundID(92)
- var Bulwark = SoundID(93)
- var Bird1 = SoundID(94)
- var Bird2 = SoundID(95)
- var Bird3 = SoundID(96)
- var Cricket1 = SoundID(97)
- var Cricket2 = SoundID(98)
- var Owl1 = SoundID(99)
- var Owl2 = SoundID(100)
- }
- }
- data class WorldObject(
- var chunk: Vector2<Int>,
- var objectID: Int,
- var paddingA: Int,
- var objectType: ObjectType,
- var paddingB: Int,
- var position: Vector3<Long>,
- var orientation: Orientation,
- var size: Vector3<Float>,
- var isClosed: Boolean,
- var transformTime: Int,
- var unknown: Int,
- var paddingC: Int,
- var interactor: Long
- ):CwSerializable {
- constructor(reader: Reader) : this(
- chunk = reader.readVector2Int(),
- objectID = reader.readInt(),
- paddingA = reader.readInt(),
- objectType = ObjectType(reader.readInt()),
- paddingB = reader.readInt(),
- position = reader.readVector3Long(),
- orientation = Orientation(reader.readInt()),
- size = reader.readVector3Float(),
- isClosed = reader.readBooleanAsInt(),
- transformTime = reader.readInt(),
- unknown = reader.readInt(),
- paddingC = reader.readInt(),
- interactor = reader.readLong()
- )
- override fun write(writer: Writer) {
- writer.writeVector2Int(chunk)
- writer.writeInt(objectID)
- writer.writeInt(paddingA)
- writer.writeInt(objectType.value)
- writer.writeInt(paddingB)
- writer.writeVector3Long(position)
- writer.writeInt(orientation.value)
- writer.writeVector3Float(size)
- writer.writeBooleanAsInt(isClosed)
- writer.writeInt(transformTime)
- writer.writeInt(unknown)
- writer.writeInt(paddingC)
- writer.writeLong(interactor)
- }
- }
- inline class ObjectType(val value: Int) {
- companion object {
- val Statue = ObjectType(0)
- val Door = ObjectType(1)
- val BigDoor = ObjectType(2)
- val Window = ObjectType(3)
- val CastleWindow = ObjectType(4)
- val Gate = ObjectType(5)
- val FireTrap = ObjectType(6)
- val SpikeTrap = ObjectType(7)
- val StompTrap = ObjectType(8)
- val Lever = ObjectType(9)
- val Chest = ObjectType(10)
- val ChestTop02 = ObjectType(11)
- val Table1 = ObjectType(12)
- val Table2 = ObjectType(13)
- val Table3 = ObjectType(14)
- val Stool1 = ObjectType(15)
- val Stool2 = ObjectType(16)
- val Stool3 = ObjectType(17)
- val Bench = ObjectType(18)
- val Bed = ObjectType(19)
- val BedTable = ObjectType(20)
- val MarketStand1 = ObjectType(21)
- val MarketStand2 = ObjectType(22)
- val MarketStand3 = ObjectType(23)
- val Barrel = ObjectType(24)
- val Crate = ObjectType(25)
- val OpenCrate = ObjectType(26)
- val Sack = ObjectType(27)
- val Shelter = ObjectType(28)
- val Cupboard = ObjectType(29)
- val Desktop = ObjectType(30)
- val Counter = ObjectType(31)
- val Shelf1 = ObjectType(32)
- val Shelf2 = ObjectType(33)
- val Shelf3 = ObjectType(34)
- val CastleShelf1 = ObjectType(35)
- val CastleShelf2 = ObjectType(36)
- val CastleShelf3 = ObjectType(37)
- val StoneShelf1 = ObjectType(38)
- val StoneShelf2 = ObjectType(39)
- val StoneShelf3 = ObjectType(40)
- val SandstoneShelf1 = ObjectType(41)
- val SandstoneShelf2 = ObjectType(42)
- val SandstoneShelf3 = ObjectType(43)
- val Corpse = ObjectType(44)
- val RuneStone = ObjectType(45)
- val Artifact = ObjectType(46)
- val FlowerBox1 = ObjectType(47)
- val FlowerBox2 = ObjectType(48)
- val FlowerBox3 = ObjectType(49)
- val StreetLight = ObjectType(50)
- val FireStreetLight = ObjectType(51)
- val Fence1 = ObjectType(52)
- val Fence2 = ObjectType(53)
- val Fence3 = ObjectType(54)
- val Fence4 = ObjectType(55)
- val Vase1 = ObjectType(56)
- val Vase2 = ObjectType(57)
- val Vase3 = ObjectType(58)
- val Vase4 = ObjectType(59)
- val Vase5 = ObjectType(60)
- val Vase6 = ObjectType(61)
- val Vase7 = ObjectType(62)
- val Vase8 = ObjectType(63)
- val Vase9 = ObjectType(64)
- val Campfire = ObjectType(65)
- val Tent = ObjectType(66)
- val BeachUmbrella = ObjectType(67)
- val BeachTowel = ObjectType(68)
- val SleepingMat = ObjectType(69)
- val Furnace = ObjectType(70)
- val Anvil = ObjectType(71)
- val SpinningWheel = ObjectType(72)
- val Loom = ObjectType(73)
- val SawBench = ObjectType(74)
- val Workbench = ObjectType(75)
- val CustomizationBench = ObjectType(76)
- }
- }
- inline class Orientation(val value: Int) {
- companion object {
- val South = Orientation(0)
- val East = Orientation(1)
- val North = Orientation(2)
- val West = Orientation(3)
- }
- }
- data class ChunkLoot(
- var chunk: Vector2<Int>,
- var drops: ArrayList<Drop> = ArrayList<Drop>()
- ): CwSerializable {
- constructor(reader: Reader) : this(reader.readVector2Int()) {
- repeat(reader.readInt()) {
- drops.add(Drop(reader))
- }
- }
- override fun write(writer: Writer) {
- writer.writeVector2Int(chunk)
- drops.forEach {
- it.write(writer)
- }
- }
- }
- data class Drop(
- var item: Item,
- var position: Vector3<Long>,
- var rotation: Float,
- var scale: Float,
- var unknownA: Int,
- var droptime: Int,
- var unknownB: Int,
- var unknownC: Int
- ): CwSerializable {
- constructor(reader: Reader) : this(
- item = Item(reader),
- position = reader.readVector3Long(),
- rotation = reader.readFloat(),
- scale = reader.readFloat(),
- unknownA = reader.readInt(),
- droptime = reader.readInt(),
- unknownB = reader.readInt(),
- unknownC = reader.readInt()
- )
- override fun write(writer: Writer) {
- item.write(writer)
- writer.writeVector3Long(position)
- writer.writeFloat(rotation)
- writer.writeFloat(scale)
- writer.writeInt(unknownA)
- writer.writeInt(droptime)
- writer.writeInt(unknownB)
- writer.writeInt(unknownC)
- }
- }
- data class P48(
- var chunk: Vector2<Int>,
- var subPackets: ArrayList<ByteArray> = ArrayList<ByteArray>()
- ): CwSerializable {
- constructor(reader: Reader) : this(reader.readVector2Int()) {
- repeat(reader.readInt()) {
- subPackets.add(reader.readByteArray(16))
- }
- }
- override fun write(writer: Writer) {
- writer.writeVector2Int(chunk)
- writer.writeInt(subPackets.size)
- subPackets.forEach {
- writer.write(it)
- }
- }
- }
- data class Pickup(
- var interactor: Long,
- var item: Item
- ): CwSerializable {
- constructor(reader: Reader) : this(
- interactor = reader.readLong(),
- item = Item(reader)
- )
- override fun write(writer: Writer) {
- writer.writeLong(interactor)
- item.write(writer)
- }
- }
- data class Kill(
- var killer: Long,
- var victim: Long,
- var unknown: Int,
- var xp: Int
- ): CwSerializable {
- constructor(reader: Reader) : this(
- killer = reader.readLong(),
- victim = reader.readLong(),
- unknown = reader.readInt(),
- xp = reader.readInt()
- )
- override fun write(writer: Writer) {
- writer.writeLong(killer)
- writer.writeLong(victim)
- writer.writeInt(unknown)
- writer.writeInt(xp)
- }
- }
- data class Attack(
- var target: Long,
- var attacker: Long,
- var damage: Float,
- var unknown: Int
- ): CwSerializable {
- constructor(reader: Reader) : this(
- target = reader.readLong(),
- attacker = reader.readLong(),
- damage = reader.readFloat(),
- unknown = reader.readInt()
- )
- override fun write(writer: Writer) {
- writer.writeLong(target)
- writer.writeLong(attacker)
- writer.writeFloat(damage)
- writer.writeInt(unknown)
- }
- }
- data class Mission(
- var sector: Vector2<Int>,
- var unknownA: Int,
- var unknownB: Int,
- var unknownC: Int,
- var id: Int,
- var type: Int,
- var boss: CreatureType,
- var level: Int,
- var unknownE: Byte,
- var state: MissionState,
- var padding: Short,
- var currentHP: Int,
- var maxHP: Int,
- var chunk: Vector2<Int>
- ):CwSerializable {
- constructor(reader: Reader) : this(
- sector = reader.readVector2Int(),
- unknownA = reader.readInt(),
- unknownB = reader.readInt(),
- unknownC = reader.readInt(),
- id = reader.readInt(),
- type = reader.readInt(),
- boss = CreatureType(reader.readInt()),
- level = reader.readInt(),
- unknownE = reader.readByte(),
- state = MissionState(reader.readByte()),
- padding = reader.readShort(),
- currentHP = reader.readInt(),
- maxHP = reader.readInt(),
- chunk = reader.readVector2Int()
- )
- override fun write(writer: Writer) {
- writer.writeVector2Int(sector)
- writer.writeInt(unknownA)
- writer.writeInt(unknownB)
- writer.writeInt(unknownC)
- writer.writeInt(id)
- writer.writeInt(type)
- writer.writeInt(boss.value)
- writer.writeInt(level)
- writer.writeByte(unknownE.toInt())
- writer.writeByte(state.value.toInt())
- writer.writeShort(padding.toInt())
- writer.writeInt(currentHP)
- writer.writeInt(maxHP)
- writer.writeVector2Int(chunk)
- }
- }
- inline class MissionState(val value: Byte) {
- companion object {
- val Ready = MissionState(0)
- val InProgress = MissionState(1)
- val Finished = MissionState(2)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement