diff --git a/defs/gen/main.go b/defs/gen/main.go index 0babc23..ae0aac0 100644 --- a/defs/gen/main.go +++ b/defs/gen/main.go @@ -486,34 +486,7 @@ func (p *{{.Name}}) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *{{.Name}}) Size() uint32 { - size := uint32(0) - {{range .Fields}} - {{- if .IsDynamicArray}} - // Dynamic array: {{.GoName}} - for _, elem := range p.{{.GoName}} { - {{- template "sizeFields" .ArrayElements}} - } - {{- else if eq .Type "string"}} - {{- if or (contains .Tag "str16") (contains .Tag "EQ2_16Bit_String")}} - size += 2 + uint32(len(p.{{.GoName}})) - {{- else if or (contains .Tag "str32") (contains .Tag "EQ2_32Bit_String")}} - size += 4 + uint32(len(p.{{.GoName}})) - {{- else}} - size += 1 + uint32(len(p.{{.GoName}})) - {{- end}} - {{- else if .IsArray}} - {{- if eq (baseType .Type) "types.EquipmentItem"}} - size += {{.Size}} * 8 - {{- else if eq (sizeOf (baseType .Type)) 1}} - size += {{.Size}} - {{- else}} - size += {{.Size}} * {{sizeOf (baseType .Type)}} - {{- end}} - {{- else}} - size += {{sizeOf .Type}} - {{- end}} - {{end}} - return size + return types.CalculateSize(p) } {{end}} @@ -580,28 +553,6 @@ func (p *{{.Name}}) Size() uint32 { {{- end}} {{end}} -{{define "sizeFields"}} - _ = elem // Avoid unused variable warning -{{- range .}} -{{- if .IsDynamicArray}} - // Nested array: {{.GoName}} - for _, nestedElem := range elem.{{.GoName}} { - {{- template "sizeNestedFields" .ArrayElements}} - } -{{- else if eq .Type "string"}} - size += 1 + uint32(len(elem.{{.GoName}})) -{{- else if .IsArray}} - {{- if eq (sizeOf (baseType .Type)) 1}} - size += {{.Size}} - {{- else}} - size += {{.Size}} * {{sizeOf (baseType .Type)}} - {{- end}} -{{- else}} - size += {{sizeOf .Type}} -{{- end}} -{{- end}} -{{end}} - {{define "serializeNestedFields"}} {{- range .}} {{- if .IsDynamicArray}} @@ -665,29 +616,6 @@ func (p *{{.Name}}) Size() uint32 { {{- end}} {{- end}} {{end}} - -{{define "sizeNestedFields"}} - _ = nestedElem // Avoid unused variable -{{- range .}} -{{- if .IsDynamicArray}} - // Deeply nested array: {{.GoName}} - for _, deepNested := range nestedElem.{{.GoName}} { - // TODO: Handle deeper nesting if needed - _ = deepNested - } -{{- else if eq .Type "string"}} - size += 1 + uint32(len(nestedElem.{{.GoName}})) -{{- else if .IsArray}} - {{- if eq (sizeOf (baseType .Type)) 1}} - size += {{.Size}} - {{- else}} - size += {{.Size}} * {{sizeOf (baseType .Type)}} - {{- end}} -{{- else}} - size += {{sizeOf .Type}} -{{- end}} -{{- end}} -{{end}} ` func contains(s, substr string) bool { diff --git a/defs/generated/common.go b/defs/generated/common.go index dd15995..772f325 100644 --- a/defs/generated/common.go +++ b/defs/generated/common.go @@ -276,87 +276,7 @@ func (p *CreateCharacter) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CreateCharacter) Size() uint32 { - size := uint32(0) - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 2 - - size += 2 + uint32(len(p.RaceFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 26 - - size += 2 + uint32(len(p.HairFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 2 + uint32(len(p.FaceFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 2 + uint32(len(p.ChestFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 2 + uint32(len(p.LegsFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - return size + return types.CalculateSize(p) } // CreateCharacterV373 represents packet structure for OP_CreateCharacterRequestMsg @@ -630,89 +550,7 @@ func (p *CreateCharacterV373) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CreateCharacterV373) Size() uint32 { - size := uint32(0) - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 2 - - size += 2 + uint32(len(p.RaceFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 26 - - size += 2 + uint32(len(p.HairFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 2 + uint32(len(p.FaceFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 2 + uint32(len(p.ChestFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 2 + uint32(len(p.LegsFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - return size + return types.CalculateSize(p) } // CreateCharacterV546 represents packet structure for OP_CreateCharacterRequestMsg @@ -994,93 +832,7 @@ func (p *CreateCharacterV546) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CreateCharacterV546) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 2 + uint32(len(p.RaceFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 26 - - size += 2 + uint32(len(p.HairFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 2 + uint32(len(p.FaceFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 2 + uint32(len(p.ChestFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 2 + uint32(len(p.LegsFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - return size + return types.CalculateSize(p) } // CreateCharacterV561 represents packet structure for OP_CreateCharacterRequestMsg @@ -1357,91 +1109,7 @@ func (p *CreateCharacterV561) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CreateCharacterV561) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 2 + uint32(len(p.RaceFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 26 - - size += 2 + uint32(len(p.HairFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 2 + uint32(len(p.FaceFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 2 + uint32(len(p.ChestFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 2 + uint32(len(p.LegsFile)) - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - return size + return types.CalculateSize(p) } // CreateCharacterV562 represents packet structure for OP_CreateCharacterRequestMsg @@ -1969,165 +1637,7 @@ func (p *CreateCharacterV562) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CreateCharacterV562) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 4 - - size += 4 - - size += 1 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 2 + uint32(len(p.RaceFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 26 - - size += 2 + uint32(len(p.HairFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.FaceFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.WingFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.ChestFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.LegsFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - size += 1 - - size += 2 + uint32(len(p.SogaRaceFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 26 - - size += 2 + uint32(len(p.SogaHairFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaFaceFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaWingFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaChestFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaLegsFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - return size + return types.CalculateSize(p) } // CreateCharacterV869 represents packet structure for OP_CreateCharacterRequestMsg @@ -2669,169 +2179,7 @@ func (p *CreateCharacterV869) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CreateCharacterV869) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 4 - - size += 4 - - size += 1 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 2 + uint32(len(p.RaceFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 26 - - size += 2 + uint32(len(p.HairFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.FaceFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.WingFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.ChestFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.LegsFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - size += 1 - - size += 2 + uint32(len(p.SogaRaceFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 26 - - size += 2 + uint32(len(p.SogaHairFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaFaceFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaWingFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaChestFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaLegsFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - return size + return types.CalculateSize(p) } // CreateCharacterV1096 represents packet structure for OP_CreateCharacterRequestMsg @@ -3373,169 +2721,7 @@ func (p *CreateCharacterV1096) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CreateCharacterV1096) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 4 - - size += 4 - - size += 1 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 2 + uint32(len(p.RaceFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 26 - - size += 2 + uint32(len(p.HairFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.FaceFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.WingFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.ChestFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.LegsFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - size += 1 - - size += 2 + uint32(len(p.SogaRaceFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 26 - - size += 2 + uint32(len(p.SogaHairFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaFaceFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaWingFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaChestFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaLegsFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - return size + return types.CalculateSize(p) } // CreateCharacterV57080 represents packet structure for OP_CreateCharacterRequestMsg @@ -4082,171 +3268,7 @@ func (p *CreateCharacterV57080) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CreateCharacterV57080) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 4 - - size += 4 - - size += 1 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 2 - - size += 2 + uint32(len(p.RaceFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 26 - - size += 2 + uint32(len(p.HairFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.FaceFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.WingFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.ChestFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.LegsFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - size += 1 - - size += 2 + uint32(len(p.SogaRaceFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 26 - - size += 2 + uint32(len(p.SogaHairFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaFaceFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaWingFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaChestFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaLegsFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - return size + return types.CalculateSize(p) } // CreateCharacterV60085 represents packet structure for OP_CreateCharacterRequestMsg @@ -4793,171 +3815,7 @@ func (p *CreateCharacterV60085) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CreateCharacterV60085) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 4 - - size += 4 - - size += 1 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 2 - - size += 2 + uint32(len(p.RaceFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 26 - - size += 2 + uint32(len(p.HairFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.FaceFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.WingFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.ChestFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.LegsFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - size += 1 - - size += 2 + uint32(len(p.SogaRaceFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 26 - - size += 2 + uint32(len(p.SogaHairFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaFaceFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaWingFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaChestFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaLegsFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - return size + return types.CalculateSize(p) } // CreateCharacterV64659 represents packet structure for OP_CreateCharacterRequestMsg @@ -5492,167 +4350,7 @@ func (p *CreateCharacterV64659) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CreateCharacterV64659) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 4 - - size += 4 - - size += 1 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 4 - - size += 1 - - size += 2 + uint32(len(p.RaceFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 38 - - size += 2 + uint32(len(p.HairFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.FaceFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.WingFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.ChestFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.LegsFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - size += 1 - - size += 2 + uint32(len(p.SogaRaceFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 38 - - size += 2 + uint32(len(p.SogaHairFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaFaceFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaWingFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaChestFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaLegsFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - size += 2 - - return size + return types.CalculateSize(p) } // CreateCharacterV65534 represents packet structure for OP_CreateCharacterRequestMsg @@ -6187,167 +4885,7 @@ func (p *CreateCharacterV65534) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CreateCharacterV65534) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 4 - - size += 4 - - size += 1 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 4 - - size += 1 - - size += 2 + uint32(len(p.RaceFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 38 - - size += 2 + uint32(len(p.HairFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.FaceFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.WingFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.ChestFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.LegsFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - size += 1 - - size += 2 + uint32(len(p.SogaRaceFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 38 - - size += 2 + uint32(len(p.SogaHairFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaFaceFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaWingFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaChestFile)) - - size += 3 - - size += 3 - - size += 2 + uint32(len(p.SogaLegsFile)) - - size += 3 - - size += 3 - - size += 3 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 3 * 4 - - size += 4 - - size += 4 - - size += 2 - - return size + return types.CalculateSize(p) } // BadLanguageFilter represents packet structure for OP_BadLanguageFilter @@ -6381,25 +4919,10 @@ func (p *BadLanguageFilter) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *BadLanguageFilter) Size() uint32 { - size := uint32(0) - - size += 2 - - // Dynamic array: WordsArray - for _, elem := range p.WordsArray { - _ = elem // Avoid unused variable warning - size += 1 + uint32(len(elem.Word)) - - } - - return size + return types.CalculateSize(p) } - - - - diff --git a/defs/generated/login.go b/defs/generated/login.go index 6b022ac..3021551 100644 --- a/defs/generated/login.go +++ b/defs/generated/login.go @@ -39,15 +39,7 @@ func (p *LSCreateCharacterReply) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSCreateCharacterReply) Size() uint32 { - size := uint32(0) - - size += 4 - - size += 1 - - size += 2 + uint32(len(p.Name)) - - return size + return types.CalculateSize(p) } // LSCreateCharacterReplyV1189 represents packet structure for OP_CreateCharacterReplyMsg @@ -85,17 +77,7 @@ func (p *LSCreateCharacterReplyV1189) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSCreateCharacterReplyV1189) Size() uint32 { - size := uint32(0) - - size += 4 - - size += 4 - - size += 1 - - size += 2 + uint32(len(p.Name)) - - return size + return types.CalculateSize(p) } // LSCreateCharacterReplyV60085 represents packet structure for OP_CreateCharacterReplyMsg @@ -133,17 +115,7 @@ func (p *LSCreateCharacterReplyV60085) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSCreateCharacterReplyV60085) Size() uint32 { - size := uint32(0) - - size += 4 - - size += 4 - - size += 1 - - size += 2 + uint32(len(p.Name)) - - return size + return types.CalculateSize(p) } // LSDeleteCharacterRequest represents packet structure for OP_DeleteCharacterRequestMsg @@ -181,17 +153,7 @@ func (p *LSDeleteCharacterRequest) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSDeleteCharacterRequest) Size() uint32 { - size := uint32(0) - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - return size + return types.CalculateSize(p) } // LSDeleteCharacterResponse represents packet structure for OP_DeleteCharacterReplyMsg @@ -239,21 +201,7 @@ func (p *LSDeleteCharacterResponse) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSDeleteCharacterResponse) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 4 - - return size + return types.CalculateSize(p) } // LSLoginRequest represents packet structure for OP_LoginRequestMsg @@ -312,23 +260,7 @@ func (p *LSLoginRequest) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSLoginRequest) Size() uint32 { - size := uint32(0) - - size += 2 + uint32(len(p.SessionID)) - - size += 2 + uint32(len(p.SessionRecycleToken)) - - size += 2 + uint32(len(p.Username)) - - size += 2 + uint32(len(p.Password)) - - size += 4 - - size += 4 - - size += 2 - - return size + return types.CalculateSize(p) } // LSLoginRequestV562 represents packet structure for OP_LoginRequestMsg @@ -401,27 +333,7 @@ func (p *LSLoginRequestV562) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSLoginRequestV562) Size() uint32 { - size := uint32(0) - - size += 2 + uint32(len(p.Accesscode)) - - size += 2 + uint32(len(p.Unknown1)) - - size += 2 + uint32(len(p.Username)) - - size += 2 + uint32(len(p.Password)) - - size += 8 - - size += 2 - - size += 4 - - size += 2 - - size += 4 - - return size + return types.CalculateSize(p) } // LSLoginRequestV1208 represents packet structure for OP_LoginRequestMsg @@ -508,31 +420,7 @@ func (p *LSLoginRequestV1208) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSLoginRequestV1208) Size() uint32 { - size := uint32(0) - - size += 2 + uint32(len(p.Accesscode)) - - size += 2 + uint32(len(p.Unknown1)) - - size += 2 + uint32(len(p.Username)) - - size += 2 + uint32(len(p.Password)) - - size += 8 - - size += 2 - - size += 2 - - size += 1 - - size += 3 * 4 - - size += 2 - - size += 2 + uint32(len(p.Unknown7)) - - return size + return types.CalculateSize(p) } // LSWorldList represents packet structure for OP_WorldListMsg @@ -584,24 +472,7 @@ func (p *LSWorldList) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSWorldList) Size() uint32 { - size := uint32(0) - - size += 1 - - // Dynamic array: WorldList - for _, elem := range p.WorldList { - _ = elem // Avoid unused variable warning - size += 4 - size += 1 + uint32(len(elem.Name)) - size += 1 - size += 1 - size += 1 - size += 1 - size += 1 - - } - - return size + return types.CalculateSize(p) } // LSWorldListV373 represents packet structure for OP_WorldListMsg @@ -662,27 +533,7 @@ func (p *LSWorldListV373) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSWorldListV373) Size() uint32 { - size := uint32(0) - - size += 1 - - // Dynamic array: WorldList - for _, elem := range p.WorldList { - _ = elem // Avoid unused variable warning - size += 4 - size += 1 + uint32(len(elem.Name)) - size += 1 - size += 1 - size += 1 - size += 1 - size += 2 - size += 1 - size += 1 - size += 4 - - } - - return size + return types.CalculateSize(p) } // LSWorldListV546 represents packet structure for OP_WorldListMsg @@ -752,29 +603,7 @@ func (p *LSWorldListV546) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSWorldListV546) Size() uint32 { - size := uint32(0) - - size += 1 - - // Dynamic array: WorldList - for _, elem := range p.WorldList { - _ = elem // Avoid unused variable warning - size += 4 - size += 1 + uint32(len(elem.Name)) - size += 1 + uint32(len(elem.Name2)) - size += 1 - size += 1 - size += 1 - size += 1 - size += 2 - size += 1 - size += 1 - size += 1 - size += 4 - - } - - return size + return types.CalculateSize(p) } // LSWorldListV562 represents packet structure for OP_WorldListMsg @@ -852,31 +681,7 @@ func (p *LSWorldListV562) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSWorldListV562) Size() uint32 { - size := uint32(0) - - size += 1 - - // Dynamic array: WorldList - for _, elem := range p.WorldList { - _ = elem // Avoid unused variable warning - size += 4 - size += 1 + uint32(len(elem.Name)) - size += 1 + uint32(len(elem.Name2)) - size += 1 - size += 1 - size += 1 - size += 1 - size += 2 - size += 1 - size += 1 - size += 2 - size += 4 - - } - - size += 1 - - return size + return types.CalculateSize(p) } // LSWorldListV60114 represents packet structure for OP_WorldListMsg @@ -954,31 +759,7 @@ func (p *LSWorldListV60114) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSWorldListV60114) Size() uint32 { - size := uint32(0) - - size += 1 - - // Dynamic array: WorldList - for _, elem := range p.WorldList { - _ = elem // Avoid unused variable warning - size += 4 - size += 1 + uint32(len(elem.Name)) - size += 1 + uint32(len(elem.Name2)) - size += 1 - size += 1 - size += 1 - size += 1 - size += 2 - size += 1 - size += 1 - size += 2 - size += 4 - - } - - size += 1 - - return size + return types.CalculateSize(p) } // LSWorldListV65534 represents packet structure for OP_WorldListMsg @@ -1056,31 +837,7 @@ func (p *LSWorldListV65534) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSWorldListV65534) Size() uint32 { - size := uint32(0) - - size += 1 - - // Dynamic array: WorldList - for _, elem := range p.WorldList { - _ = elem // Avoid unused variable warning - size += 4 - size += 1 + uint32(len(elem.Name)) - size += 1 + uint32(len(elem.Name2)) - size += 1 - size += 1 - size += 1 - size += 1 - size += 2 - size += 1 - size += 1 - size += 3 - size += 4 - - } - - size += 1 - - return size + return types.CalculateSize(p) } // LSWorldUpdate represents packet structure for OP_WorldStatusChangeMsg @@ -1121,19 +878,7 @@ func (p *LSWorldUpdate) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSWorldUpdate) Size() uint32 { - size := uint32(0) - - size += 4 - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - return size + return types.CalculateSize(p) } // LSPlayRequest represents packet structure for OP_PlayCharacterRequestMsg @@ -1161,13 +906,7 @@ func (p *LSPlayRequest) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSPlayRequest) Size() uint32 { - size := uint32(0) - - size += 4 - - size += 2 + uint32(len(p.Name)) - - return size + return types.CalculateSize(p) } // LSPlayRequestV284 represents packet structure for OP_PlayCharacterRequestMsg @@ -1200,15 +939,7 @@ func (p *LSPlayRequestV284) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSPlayRequestV284) Size() uint32 { - size := uint32(0) - - size += 4 - - size += 4 - - size += 3 - - return size + return types.CalculateSize(p) } // LSPlayResponse represents packet structure for OP_PlayCharacterReplyMsg @@ -1251,19 +982,7 @@ func (p *LSPlayResponse) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSPlayResponse) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 1 + uint32(len(p.Server)) - - size += 2 - - size += 4 - - size += 4 - - return size + return types.CalculateSize(p) } // LSPlayResponseV1096 represents packet structure for OP_PlayCharacterReplyMsg @@ -1311,21 +1030,7 @@ func (p *LSPlayResponseV1096) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSPlayResponseV1096) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 2 - - size += 1 + uint32(len(p.Server)) - - size += 2 - - size += 4 - - size += 4 - - return size + return types.CalculateSize(p) } // LSPlayResponseV60085 represents packet structure for OP_PlayCharacterReplyMsg @@ -1375,21 +1080,7 @@ func (p *LSPlayResponseV60085) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSPlayResponseV60085) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 3 * 2 - - size += 1 + uint32(len(p.Server)) - - size += 2 - - size += 4 - - size += 4 - - return size + return types.CalculateSize(p) } // LSPlayResponseV60099 represents packet structure for OP_PlayCharacterReplyMsg @@ -1439,21 +1130,7 @@ func (p *LSPlayResponseV60099) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSPlayResponseV60099) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 3 * 2 - - size += 1 + uint32(len(p.Server)) - - size += 2 - - size += 4 - - size += 4 - - return size + return types.CalculateSize(p) } // CharSelectProfile represents packet structure for client version 1 @@ -1778,107 +1455,7 @@ func (p *CharSelectProfile) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CharSelectProfile) Size() uint32 { - size := uint32(0) - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 4 - - size += 2 + uint32(len(p.Zone)) - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Zonename2)) - - size += 2 + uint32(len(p.Zonedesc)) - - size += 1 - - size += 2 - - size += 3 - - size += 3 - - size += 21 * 8 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 1 - - size += 1 - - size += 2 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 1 - - return size + return types.CalculateSize(p) } // CharSelectProfileV373 represents packet structure for client version 373 @@ -2203,107 +1780,7 @@ func (p *CharSelectProfileV373) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CharSelectProfileV373) Size() uint32 { - size := uint32(0) - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 4 - - size += 2 + uint32(len(p.Zone)) - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Zonename2)) - - size += 2 + uint32(len(p.Zonedesc)) - - size += 1 - - size += 2 - - size += 3 - - size += 3 - - size += 21 * 8 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 1 - - size += 1 - - size += 2 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 1 - - return size + return types.CalculateSize(p) } // CharSelectProfileV546 represents packet structure for client version 546 @@ -2779,153 +2256,7 @@ func (p *CharSelectProfileV546) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CharSelectProfileV546) Size() uint32 { - size := uint32(0) - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 1 - - size += 4 - - size += 2 + uint32(len(p.Zone)) - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Zonename2)) - - size += 2 + uint32(len(p.Zonedesc)) - - size += 4 - - size += 1 - - size += 2 - - size += 3 - - size += 3 - - size += 23 * 8 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 1 - - size += 1 - - size += 2 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 10 - - size += 2 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - return size + return types.CalculateSize(p) } // CharSelectProfileV562 represents packet structure for client version 562 @@ -3279,117 +2610,7 @@ func (p *CharSelectProfileV562) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CharSelectProfileV562) Size() uint32 { - size := uint32(0) - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 4 - - size += 2 + uint32(len(p.Zone)) - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Zonename2)) - - size += 2 + uint32(len(p.Zonedesc)) - - size += 4 - - size += 2 + uint32(len(p.ServerName)) - - size += 4 - - size += 2 - - size += 4 - - size += 1 - - size += 2 - - size += 3 - - size += 3 - - size += 25 * 8 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 1 - - size += 9 - - size += 3 - - size += 3 - - size += 13 - - size += 7 - - return size + return types.CalculateSize(p) } // CharSelectProfileV887 represents packet structure for client version 887 @@ -3911,169 +3132,7 @@ func (p *CharSelectProfileV887) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CharSelectProfileV887) Size() uint32 { - size := uint32(0) - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 4 - - size += 2 + uint32(len(p.Zone)) - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Zonename2)) - - size += 2 + uint32(len(p.Zonedesc)) - - size += 4 - - size += 2 + uint32(len(p.ServerName)) - - size += 4 - - size += 2 - - size += 4 - - size += 1 - - size += 4 - - size += 1 - - size += 2 - - size += 3 - - size += 3 - - size += 25 * 8 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 1 - - size += 9 - - size += 3 - - size += 3 - - size += 13 - - size += 2 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 7 - - return size + return types.CalculateSize(p) } // CharSelectProfileV60085 represents packet structure for client version 60085 @@ -4595,169 +3654,7 @@ func (p *CharSelectProfileV60085) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *CharSelectProfileV60085) Size() uint32 { - size := uint32(0) - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Name)) - - size += 1 - - size += 1 - - size += 1 - - size += 1 - - size += 4 - - size += 2 + uint32(len(p.Zone)) - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Zonename2)) - - size += 2 + uint32(len(p.Zonedesc)) - - size += 4 - - size += 2 + uint32(len(p.ServerName)) - - size += 4 - - size += 2 - - size += 4 - - size += 1 - - size += 4 - - size += 1 - - size += 2 - - size += 3 - - size += 3 - - size += 25 * 8 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 1 - - size += 9 - - size += 3 - - size += 3 - - size += 13 - - size += 2 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 2 - - size += 3 - - size += 3 - - size += 7 - - return size + return types.CalculateSize(p) } // LSLoginReplyMsg represents packet structure for OP_LoginReplyMsg @@ -4807,21 +3704,7 @@ func (p *LSLoginReplyMsg) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSLoginReplyMsg) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 2 + uint32(len(p.WorldName)) - - size += 1 - - size += 2 * 4 - - size += 4 - - size += 4 - - return size + return types.CalculateSize(p) } // LSLoginReplyMsgV284 represents packet structure for OP_LoginReplyMsg @@ -4976,67 +3859,7 @@ func (p *LSLoginReplyMsgV284) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSLoginReplyMsgV284) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 2 + uint32(len(p.Unknown)) - - size += 1 - - size += 4 - - size += 8 - - size += 4 - - size += 2 + uint32(len(p.Unknown3)) - - size += 1 - - size += 1 - - size += 2 - - size += 1 - - size += 4 - - size += 2 - - size += 1 - - size += 1 - - // Dynamic array: ClassItems - for _, elem := range p.ClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 2 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 1 - - // Dynamic array: UnknownArray2 - for _, elem := range p.UnknownArray2 { - _ = elem // Avoid unused variable warning - size += 4 - - } - - return size + return types.CalculateSize(p) } // LSLoginReplyMsgV843 represents packet structure for OP_LoginReplyMsg @@ -5206,73 +4029,7 @@ func (p *LSLoginReplyMsgV843) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSLoginReplyMsgV843) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 2 + uint32(len(p.Unknown)) - - size += 1 - - size += 4 - - size += 8 - - size += 4 - - size += 2 + uint32(len(p.Unknown3)) - - size += 1 - - size += 1 - - size += 1 - - size += 2 - - size += 1 - - size += 4 - - size += 1 - - size += 3 - - size += 1 - - size += 1 - - size += 1 - - // Dynamic array: ClassItems - for _, elem := range p.ClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 2 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 1 - - // Dynamic array: UnknownArray2 - for _, elem := range p.UnknownArray2 { - _ = elem // Avoid unused variable warning - size += 4 - - } - - return size + return types.CalculateSize(p) } // LSLoginReplyMsgV1096 represents packet structure for OP_LoginReplyMsg @@ -5478,85 +4235,7 @@ func (p *LSLoginReplyMsgV1096) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSLoginReplyMsgV1096) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 2 + uint32(len(p.Unknown)) - - size += 1 - - size += 4 - - size += 8 - - size += 4 - - size += 2 + uint32(len(p.Unknown3)) - - size += 1 - - size += 1 - - size += 1 - - size += 2 - - size += 5 - - size += 4 - - size += 1 - - size += 3 - - size += 1 - - size += 1 - - size += 1 - - // Dynamic array: ClassItems - for _, elem := range p.ClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 2 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 1 - - // Dynamic array: UnknownArray2 - for _, elem := range p.UnknownArray2 { - _ = elem // Avoid unused variable warning - size += 4 - - } - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Password)) - - size += 2 + uint32(len(p.Username)) - - return size + return types.CalculateSize(p) } // LSLoginReplyMsgV1142 represents packet structure for OP_LoginReplyMsg @@ -5767,87 +4446,7 @@ func (p *LSLoginReplyMsgV1142) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSLoginReplyMsgV1142) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 2 + uint32(len(p.Unknown)) - - size += 1 - - size += 4 - - size += 8 - - size += 4 - - size += 2 + uint32(len(p.Unknown3)) - - size += 1 - - size += 1 - - size += 1 - - size += 2 - - size += 5 - - size += 4 - - size += 4 - - size += 1 - - size += 3 - - size += 1 - - size += 1 - - size += 1 - - // Dynamic array: ClassItems - for _, elem := range p.ClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 2 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 1 - - // Dynamic array: UnknownArray2 - for _, elem := range p.UnknownArray2 { - _ = elem // Avoid unused variable warning - size += 4 - - } - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Password)) - - size += 2 + uint32(len(p.Username)) - - return size + return types.CalculateSize(p) } // LSLoginReplyMsgV1188 represents packet structure for OP_LoginReplyMsg @@ -6065,89 +4664,7 @@ func (p *LSLoginReplyMsgV1188) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSLoginReplyMsgV1188) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 2 + uint32(len(p.Unknown)) - - size += 1 - - size += 4 - - size += 8 - - size += 4 - - size += 2 + uint32(len(p.Unknown3)) - - size += 1 - - size += 1 - - size += 1 - - size += 2 - - size += 5 - - size += 4 - - size += 4 - - size += 1 - - size += 3 - - size += 1 - - size += 1 - - size += 1 - - // Dynamic array: ClassItems - for _, elem := range p.ClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 2 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 1 - - // Dynamic array: UnknownArray2 - for _, elem := range p.UnknownArray2 { - _ = elem // Avoid unused variable warning - size += 4 - - } - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Password)) - - size += 2 + uint32(len(p.Username)) - - size += 2 + uint32(len(p.Unknown12)) - - return size + return types.CalculateSize(p) } // LSLoginReplyMsgV57080 represents packet structure for OP_LoginReplyMsg @@ -6486,132 +5003,7 @@ func (p *LSLoginReplyMsgV57080) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSLoginReplyMsgV57080) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 2 + uint32(len(p.Unknown)) - - size += 1 - - size += 4 - - size += 8 - - size += 4 - - size += 2 + uint32(len(p.Unknown3)) - - size += 1 - - size += 1 - - size += 1 - - size += 2 - - size += 5 - - size += 4 - - size += 4 - - size += 1 - - size += 3 - - size += 1 - - size += 1 - - size += 1 - - // Dynamic array: ClassItems - for _, elem := range p.ClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 4 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 1 - - // Dynamic array: UnknownArray2 - for _, elem := range p.UnknownArray2 { - _ = elem // Avoid unused variable warning - size += 4 - - } - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Password)) - - size += 2 + uint32(len(p.Username)) - - size += 2 + uint32(len(p.Service)) - - size += 2 + uint32(len(p.Web1)) - - size += 2 + uint32(len(p.Web2)) - - size += 2 + uint32(len(p.Web3)) - - size += 2 + uint32(len(p.Web4)) - - size += 2 + uint32(len(p.Web5)) - - size += 2 + uint32(len(p.Web6)) - - size += 2 + uint32(len(p.Web7)) - - size += 2 + uint32(len(p.Web8)) - - size += 2 + uint32(len(p.Web9)) - - size += 1 - - size += 1 - - // Dynamic array: Lvl90ClassItems - for _, elem := range p.Lvl90ClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 4 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 5 - - return size + return types.CalculateSize(p) } // LSLoginReplyMsgV60100 represents packet structure for OP_LoginReplyMsg @@ -6928,133 +5320,7 @@ func (p *LSLoginReplyMsgV60100) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSLoginReplyMsgV60100) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 2 + uint32(len(p.Unknown)) - - size += 1 - - size += 4 - - size += 8 - - size += 4 - - size += 2 + uint32(len(p.Unknown3)) - - size += 1 - - size += 1 - - size += 8 - - size += 4 - - size += 2 - - size += 1 - - size += 3 - - size += 3 - - size += 1 - - size += 1 - - // Dynamic array: ClassItems - for _, elem := range p.ClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 4 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 1 - - // Dynamic array: UnknownArray2 - for _, elem := range p.UnknownArray2 { - _ = elem // Avoid unused variable warning - size += 4 - - } - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Password)) - - size += 2 + uint32(len(p.Username)) - - size += 2 + uint32(len(p.Service)) - - size += 1 - - size += 1 - - // Dynamic array: Lvl90ClassItems - for _, elem := range p.Lvl90ClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 4 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 1 - - size += 1 - - // Dynamic array: TimeLockedClassItems - for _, elem := range p.TimeLockedClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 4 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 13 - - return size + return types.CalculateSize(p) } // LSLoginReplyMsgV63181 represents packet structure for OP_LoginReplyMsg @@ -7390,139 +5656,7 @@ func (p *LSLoginReplyMsgV63181) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSLoginReplyMsgV63181) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 2 + uint32(len(p.Unknown)) - - size += 1 - - size += 4 - - size += 8 - - size += 4 - - size += 2 + uint32(len(p.Unknown3)) - - size += 1 - - size += 1 - - size += 1 - - size += 2 - - size += 5 - - size += 8 - - size += 4 - - size += 2 - - size += 1 - - size += 3 - - size += 3 - - size += 1 - - size += 1 - - // Dynamic array: ClassItems - for _, elem := range p.ClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 4 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 1 - - // Dynamic array: UnknownArray2 - for _, elem := range p.UnknownArray2 { - _ = elem // Avoid unused variable warning - size += 4 - - } - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Password)) - - size += 2 + uint32(len(p.Username)) - - size += 2 + uint32(len(p.Service)) - - size += 1 - - size += 1 - - // Dynamic array: Lvl90ClassItems - for _, elem := range p.Lvl90ClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 4 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 1 - - size += 1 - - // Dynamic array: TimeLockedClassItems - for _, elem := range p.TimeLockedClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 4 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 9 - - return size + return types.CalculateSize(p) } // LSLoginReplyMsgV65534 represents packet structure for OP_LoginReplyMsg @@ -7827,136 +5961,10 @@ func (p *LSLoginReplyMsgV65534) Serialize(dest []byte) uint32 { // Size returns the serialized size of the packet func (p *LSLoginReplyMsgV65534) Size() uint32 { - size := uint32(0) - - size += 1 - - size += 2 + uint32(len(p.WorldName)) - - size += 1 - - size += 8 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Unknown3)) - - size += 1 - - size += 1 - - size += 4 + uint32(len(p.Unknown4)) - - size += 4 + uint32(len(p.Unknown7)) - - size += 4 - - size += 1 - - size += 1 - - size += 1 - - // Dynamic array: ClassItems - for _, elem := range p.ClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 4 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 1 - - // Dynamic array: UnknownArray2 - for _, elem := range p.UnknownArray2 { - _ = elem // Avoid unused variable warning - size += 4 - - } - - size += 4 - - size += 4 - - size += 4 - - size += 4 - - size += 2 + uint32(len(p.Password)) - - size += 2 + uint32(len(p.Username)) - - size += 2 + uint32(len(p.Service)) - - size += 1 - - size += 1 - - // Dynamic array: Lvl90ClassItems - for _, elem := range p.Lvl90ClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 4 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 1 - - size += 1 - - // Dynamic array: TimeLockedClassItems - for _, elem := range p.TimeLockedClassItems { - _ = elem // Avoid unused variable warning - size += 1 - size += 1 - // Nested array: StartingItems - for _, nestedElem := range elem.StartingItems { - _ = nestedElem // Avoid unused variable - size += 4 - size += 1 - size += 1 - size += 1 - size += 3 - size += 3 - - } - - } - - size += 13 - - return size + return types.CalculateSize(p) } - - - - diff --git a/defs/generated/test.exe b/defs/generated/test.exe deleted file mode 100644 index 1981753..0000000 Binary files a/defs/generated/test.exe and /dev/null differ diff --git a/types/reflect_size.go b/types/reflect_size.go new file mode 100644 index 0000000..c8bf8e6 --- /dev/null +++ b/types/reflect_size.go @@ -0,0 +1,181 @@ +package types + +import ( + "reflect" + "strings" +) + +// CalculateSize uses reflection to calculate the serialized size of a struct +func CalculateSize(v interface{}) uint32 { + return calculateSizeValue(reflect.ValueOf(v)) +} + +func calculateSizeValue(v reflect.Value) uint32 { + // Dereference pointers + if v.Kind() == reflect.Ptr { + if v.IsNil() { + return 0 + } + v = v.Elem() + } + + switch v.Kind() { + case reflect.Struct: + return calculateStructSize(v) + case reflect.Slice: + return calculateSliceSize(v) + case reflect.Array: + return calculateArraySize(v) + case reflect.String: + // Default to 16-bit length prefix if not specified + return 2 + uint32(v.Len()) + case reflect.Uint8, reflect.Int8: + return 1 + case reflect.Uint16, reflect.Int16: + return 2 + case reflect.Uint32, reflect.Int32, reflect.Float32: + return 4 + case reflect.Uint64, reflect.Int64, reflect.Float64: + return 8 + default: + return 0 + } +} + +func calculateStructSize(v reflect.Value) uint32 { + var size uint32 + t := v.Type() + + // Handle known types + switch t.Name() { + case "Color", "EQ2Color": + return 3 // RGB: 3 bytes + case "EquipmentItem": + return 8 // 2 bytes type + 3 bytes color + 3 bytes highlight + } + + // Calculate size for each field + for i := 0; i < v.NumField(); i++ { + field := v.Field(i) + fieldType := t.Field(i) + + // Skip unexported fields + if !field.CanInterface() { + continue + } + + // Parse struct tags for size hints + tag := fieldType.Tag.Get("eq2") + tagParts := parseTag(tag) + + // Handle string types with specific encoding + if field.Kind() == reflect.String { + strLen := uint32(field.Len()) + if strType, ok := tagParts["type"]; ok { + switch strType { + case "str8", "EQ2_8Bit_String": + size += 1 + strLen + case "str16", "EQ2_16Bit_String": + size += 2 + strLen + case "str32", "EQ2_32Bit_String": + size += 4 + strLen + default: + size += 2 + strLen // Default to 16-bit + } + } else { + size += 2 + strLen // Default to 16-bit + } + } else if field.Kind() == reflect.Array { + // Fixed-size array + elemSize := getElementSize(field.Type().Elem()) + size += uint32(field.Len()) * elemSize + } else if field.Kind() == reflect.Slice { + // Dynamic array - calculate size of all elements + for j := 0; j < field.Len(); j++ { + size += calculateSizeValue(field.Index(j)) + } + } else { + // Regular field + size += calculateSizeValue(field) + } + } + + return size +} + +func calculateSliceSize(v reflect.Value) uint32 { + var size uint32 + for i := 0; i < v.Len(); i++ { + size += calculateSizeValue(v.Index(i)) + } + return size +} + +func calculateArraySize(v reflect.Value) uint32 { + if v.Len() == 0 { + return 0 + } + + elemSize := getElementSize(v.Type().Elem()) + return uint32(v.Len()) * elemSize +} + +func getElementSize(t reflect.Type) uint32 { + switch t.Kind() { + case reflect.Uint8, reflect.Int8: + return 1 + case reflect.Uint16, reflect.Int16: + return 2 + case reflect.Uint32, reflect.Int32, reflect.Float32: + return 4 + case reflect.Uint64, reflect.Int64, reflect.Float64: + return 8 + case reflect.Struct: + // Handle known struct types + switch t.Name() { + case "Color", "EQ2Color": + return 3 + case "EquipmentItem": + return 8 + default: + // For unknown structs, create a zero value and calculate + return calculateSizeValue(reflect.Zero(t)) + } + default: + return 0 + } +} + +func parseTag(tag string) map[string]string { + result := make(map[string]string) + if tag == "" { + return result + } + + parts := strings.Split(tag, ",") + if len(parts) > 0 { + result["name"] = parts[0] + } + + for i := 1; i < len(parts); i++ { + kv := strings.Split(parts[i], ":") + if len(kv) == 2 { + result[kv[0]] = kv[1] + } + } + + return result +} + +// SizeCalculator interface for types that can calculate their own size +type SizeCalculator interface { + Size() uint32 +} + +// CalculateSizeOptimized uses the Size() method if available, otherwise uses reflection +func CalculateSizeOptimized(v interface{}) uint32 { + if sc, ok := v.(SizeCalculator); ok { + return sc.Size() + } + return CalculateSize(v) +} \ No newline at end of file