diff --git a/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/ImageDesignChangeMessage.kt b/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/ImageDesignChangeMessage.kt new file mode 100644 index 0000000..3d21b32 --- /dev/null +++ b/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/ImageDesignChangeMessage.kt @@ -0,0 +1,89 @@ +package com.projectswg.common.network.packets.swg.zone.object_controller + +import com.projectswg.common.data.customization.CustomizationString +import com.projectswg.common.network.NetBuffer + +class ImageDesignChangeMessage : ObjectController { + + constructor(receiverId: Long) : super(receiverId, CRC) + + constructor(data: NetBuffer) : super(CRC) { + decode(data) + } + + companion object { + const val CRC = 0x0238 + } + + var designerId = 0L + var clientId = 0L + var salonId = 0L + var hairChanged = false + var hair = "" + var hairCustomization = CustomizationString() + var designType = 0 + var startingTime = 0 + var moneyDemanded = 0 + var moneyOffered = 0 + var designerCommitted = false + var clientAccepted = false + var statMigration = false + var bodySkillMod = 0 + var faceSkillMod = 0 + var markingsSkillMod = 0 + var hairSkillMod = 0 + var morphParameters: MutableList = ArrayList() + var indexParameters: MutableList = ArrayList() + var holoemote = "" + + override fun decode(data: NetBuffer) { + decodeHeader(data) + designerId = data.long + clientId = data.long + salonId = data.long + hairChanged = data.boolean + hair = data.ascii + hairCustomization.decode(data) + designType = data.int + startingTime = data.int + moneyDemanded = data.int + moneyOffered = data.int + designerCommitted = data.boolean + clientAccepted = data.int != 0 + statMigration = data.boolean + bodySkillMod = data.int + faceSkillMod = data.int + markingsSkillMod = data.int + hairSkillMod = data.int + morphParameters = data.getList(MorphParameter::class.java) + indexParameters = data.getList(IndexParameter::class.java) + holoemote = data.ascii + } + + override fun encode(): NetBuffer { + val data = NetBuffer.allocate(HEADER_LENGTH + 26) + encodeHeader(data) + data.addLong(designerId) + data.addLong(clientId) + data.addLong(salonId) + data.addBoolean(hairChanged) + data.addAscii(hair) + data.addEncodable(hairCustomization) + data.addInt(designType) + data.addInt(startingTime) + data.addInt(moneyDemanded) + data.addInt(moneyOffered) + data.addBoolean(designerCommitted) + data.addInt(if (clientAccepted) 1 else 0) + data.addBoolean(statMigration) + data.addInt(bodySkillMod) + data.addInt(faceSkillMod) + data.addInt(markingsSkillMod) + data.addInt(hairSkillMod) + data.addList(morphParameters) + data.addList(indexParameters) + data.addAscii(holoemote) + + return data + } +} \ No newline at end of file diff --git a/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/ImageDesignEndMessage.kt b/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/ImageDesignEndMessage.kt new file mode 100644 index 0000000..5a969be --- /dev/null +++ b/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/ImageDesignEndMessage.kt @@ -0,0 +1,89 @@ +package com.projectswg.common.network.packets.swg.zone.object_controller + +import com.projectswg.common.data.customization.CustomizationString +import com.projectswg.common.network.NetBuffer + +class ImageDesignEndMessage : ObjectController { + + constructor(receiverId: Long) : super(receiverId, CRC) + + constructor(data: NetBuffer) : super(CRC) { + decode(data) + } + + companion object { + const val CRC = 0x0239 + } + + var designerId = 0L + var clientId = 0L + var salonId = 0L + var hairChanged = false + var hair = "" + var hairCustomization = CustomizationString() + var designType = 0 + var startingTime = 0 + var moneyDemanded = 0 + var moneyOffered = 0 + var designerCommitted = false + var clientAccepted = false + var statMigration = false + var bodySkillMod = 0 + var faceSkillMod = 0 + var markingsSkillMod = 0 + var hairSkillMod = 0 + var morphParameters: MutableList = ArrayList() + var indexParameters: MutableList = ArrayList() + var holoemote = "" + + override fun decode(data: NetBuffer) { + decodeHeader(data) + designerId = data.long + clientId = data.long + salonId = data.long + hairChanged = data.boolean + hair = data.ascii + hairCustomization.decode(data) + designType = data.int + startingTime = data.int + moneyDemanded = data.int + moneyOffered = data.int + designerCommitted = data.boolean + clientAccepted = data.int != 0 + statMigration = data.boolean + bodySkillMod = data.int + faceSkillMod = data.int + markingsSkillMod = data.int + hairSkillMod = data.int + morphParameters = data.getList(MorphParameter::class.java) + indexParameters = data.getList(IndexParameter::class.java) + holoemote = data.ascii + } + + override fun encode(): NetBuffer { + val data = NetBuffer.allocate(HEADER_LENGTH + 26) + encodeHeader(data) + data.addLong(designerId) + data.addLong(clientId) + data.addLong(salonId) + data.addBoolean(hairChanged) + data.addAscii(hair) + data.addEncodable(hairCustomization) + data.addInt(designType) + data.addInt(startingTime) + data.addInt(moneyDemanded) + data.addInt(moneyOffered) + data.addBoolean(designerCommitted) + data.addInt(if (clientAccepted) 1 else 0) + data.addBoolean(statMigration) + data.addInt(bodySkillMod) + data.addInt(faceSkillMod) + data.addInt(markingsSkillMod) + data.addInt(hairSkillMod) + data.addList(morphParameters) + data.addList(indexParameters) + data.addAscii(holoemote) + + return data + } +} \ No newline at end of file diff --git a/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/ImageDesignStartMessage.kt b/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/ImageDesignStartMessage.kt new file mode 100644 index 0000000..5587a7f --- /dev/null +++ b/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/ImageDesignStartMessage.kt @@ -0,0 +1,40 @@ +package com.projectswg.common.network.packets.swg.zone.object_controller + +import com.projectswg.common.network.NetBuffer + +class ImageDesignStartMessage : ObjectController { + + constructor(receiverId: Long) : super(receiverId, CRC) + + constructor(data: NetBuffer) : super(CRC) { + decode(data) + } + + companion object { + const val CRC = 0x023A + } + + var designerId = 0L + var clientId = 0L + var salonId = 0L + var holoEmote = "" + + override fun decode(data: NetBuffer) { + decodeHeader(data) + designerId = data.long + clientId = data.long + salonId = data.long + holoEmote = data.ascii + } + + override fun encode(): NetBuffer { + val data = NetBuffer.allocate(HEADER_LENGTH + 26 + holoEmote.length) + encodeHeader(data) + data.addLong(designerId) + data.addLong(clientId) + data.addLong(salonId) + data.addAscii(holoEmote) + + return data + } +} \ No newline at end of file diff --git a/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/IndexParameter.kt b/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/IndexParameter.kt new file mode 100644 index 0000000..3f0734b --- /dev/null +++ b/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/IndexParameter.kt @@ -0,0 +1,27 @@ +package com.projectswg.common.network.packets.swg.zone.object_controller + +import com.projectswg.common.encoding.Encodable +import com.projectswg.common.network.NetBuffer + +class IndexParameter : Encodable { + + var name = "" + var value = 0 + + override fun decode(data: NetBuffer) { + name = data.ascii + value = data.int + } + + override fun encode(): ByteArray { + val data = NetBuffer.allocate(length) + + data.addAscii(name) + data.addInt(value) + + return data.array() + } + + override val length: Int + get() = 6 + name.length +} \ No newline at end of file diff --git a/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/MorphParameter.kt b/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/MorphParameter.kt new file mode 100644 index 0000000..fd8df32 --- /dev/null +++ b/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/MorphParameter.kt @@ -0,0 +1,27 @@ +package com.projectswg.common.network.packets.swg.zone.object_controller + +import com.projectswg.common.encoding.Encodable +import com.projectswg.common.network.NetBuffer + +class MorphParameter : Encodable { + + var name = "" + var value = 0f + + override fun decode(data: NetBuffer) { + name = data.ascii + value = data.float + } + + override fun encode(): ByteArray { + val data = NetBuffer.allocate(length) + + data.addAscii(name) + data.addFloat(value) + + return data.array() + } + + override val length: Int + get() = 6 + name.length +} \ No newline at end of file diff --git a/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/ObjectController.java b/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/ObjectController.java index ac0c626..b9c55ff 100644 --- a/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/ObjectController.java +++ b/src/main/java/com/projectswg/common/network/packets/swg/zone/object_controller/ObjectController.java @@ -40,6 +40,7 @@ import com.projectswg.common.network.NetBuffer; import com.projectswg.common.network.packets.SWGPacket; import com.projectswg.common.network.packets.swg.zone.object_controller.combat.CombatAction; import com.projectswg.common.network.packets.swg.zone.object_controller.combat.CombatSpam; +import org.jetbrains.annotations.NotNull; public abstract class ObjectController extends SWGPacket { @@ -72,7 +73,6 @@ public abstract class ObjectController extends SWGPacket { Log.e("Attempting to process invalid controller"); objectId = data.getLong(); data.getInt(); - return; } protected final void encodeHeader(NetBuffer data) { @@ -85,7 +85,7 @@ public abstract class ObjectController extends SWGPacket { } @Override - public abstract void decode(NetBuffer data); + public abstract void decode(@NotNull NetBuffer data); @Override public abstract NetBuffer encode(); @@ -132,6 +132,9 @@ public abstract class ObjectController extends SWGPacket { case 0x01DB: return new BiographyUpdate(data); case 0x0229: return new BuffAddUpdate(data); case 0x022A: return new BuffRemoveUpdate(data); + case ImageDesignStartMessage.CRC: return new ImageDesignStartMessage(data); + case ImageDesignChangeMessage.CRC: return new ImageDesignChangeMessage(data); + case ImageDesignEndMessage.CRC: return new ImageDesignEndMessage(data); case 0x043D: return new GroupOpenLotteryWindow(data); case 0x043E: return new GroupCloseLotteryWindow(data); case 0x0440: return new GroupRequestLotteryItems(data);