From 9f19358c8bfc8979ae965a2c4d313e663f13573f Mon Sep 17 00:00:00 2001 From: wish Date: Tue, 20 Feb 2024 21:04:29 +1100 Subject: [PATCH] fix Warehouse serialisation across versions --- common/mhfitem/mhfitem.go | 57 +++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/common/mhfitem/mhfitem.go b/common/mhfitem/mhfitem.go index f0e66ac69..9ad93758a 100644 --- a/common/mhfitem/mhfitem.go +++ b/common/mhfitem/mhfitem.go @@ -1,6 +1,9 @@ package mhfitem -import "erupe-ce/common/byteframe" +import ( + "erupe-ce/common/byteframe" + _config "erupe-ce/config" +) type MHFItem struct { ItemID uint16 @@ -80,19 +83,23 @@ func ReadWarehouseEquipment(bf *byteframe.ByteFrame) MHFEquipment { for i := 0; i < 3; i++ { equipment.Decorations[i].ItemID = bf.ReadUint16() } - for i := 0; i < 3; i++ { - for j := 0; j < 3; j++ { - equipment.Sigils[i].Effects[j].ID = bf.ReadUint16() + if _config.ErupeConfig.RealClientMode >= _config.G1 { + for i := 0; i < 3; i++ { + for j := 0; j < 3; j++ { + equipment.Sigils[i].Effects[j].ID = bf.ReadUint16() + } + for j := 0; j < 3; j++ { + equipment.Sigils[i].Effects[j].Level = bf.ReadUint16() + } + equipment.Sigils[i].Unk0 = bf.ReadUint8() + equipment.Sigils[i].Unk1 = bf.ReadUint8() + equipment.Sigils[i].Unk2 = bf.ReadUint8() + equipment.Sigils[i].Unk3 = bf.ReadUint8() } - for j := 0; j < 3; j++ { - equipment.Sigils[i].Effects[j].Level = bf.ReadUint16() - } - equipment.Sigils[i].Unk0 = bf.ReadUint8() - equipment.Sigils[i].Unk1 = bf.ReadUint8() - equipment.Sigils[i].Unk2 = bf.ReadUint8() - equipment.Sigils[i].Unk3 = bf.ReadUint8() } - equipment.Unk1 = bf.ReadUint16() + if _config.ErupeConfig.RealClientMode >= _config.Z1 { + equipment.Unk1 = bf.ReadUint16() + } return equipment } @@ -106,19 +113,23 @@ func (e MHFEquipment) ToBytes() []byte { for i := 0; i < 3; i++ { bf.WriteUint16(e.Decorations[i].ItemID) } - for i := 0; i < 3; i++ { - for j := 0; j < 3; j++ { - bf.WriteUint16(e.Sigils[i].Effects[j].ID) + if _config.ErupeConfig.RealClientMode >= _config.G1 { + for i := 0; i < 3; i++ { + for j := 0; j < 3; j++ { + bf.WriteUint16(e.Sigils[i].Effects[j].ID) + } + for j := 0; j < 3; j++ { + bf.WriteUint16(e.Sigils[i].Effects[j].Level) + } + bf.WriteUint8(e.Sigils[i].Unk0) + bf.WriteUint8(e.Sigils[i].Unk1) + bf.WriteUint8(e.Sigils[i].Unk2) + bf.WriteUint8(e.Sigils[i].Unk3) } - for j := 0; j < 3; j++ { - bf.WriteUint16(e.Sigils[i].Effects[j].Level) - } - bf.WriteUint8(e.Sigils[i].Unk0) - bf.WriteUint8(e.Sigils[i].Unk1) - bf.WriteUint8(e.Sigils[i].Unk2) - bf.WriteUint8(e.Sigils[i].Unk3) } - bf.WriteUint16(e.Unk1) + if _config.ErupeConfig.RealClientMode >= _config.Z1 { + bf.WriteUint16(e.Unk1) + } return bf.Data() }