diff --git a/internal/packets/substructs/AASpellInfo.go b/internal/packets/substructs/AASpellInfo.go new file mode 100644 index 0000000..3bbac32 --- /dev/null +++ b/internal/packets/substructs/AASpellInfo.go @@ -0,0 +1,67 @@ +package substructs + +import "eq2emu/internal/common" + +// AASpellInfo client version 1193 +type AASpellInfo struct { + ID uint32 `eq2:"int32"` + Icon uint16 `eq2:"int16"` + Icon2 uint16 `eq2:"int16"` + IconType uint16 `eq2:"int16"` + Version uint16 `eq2:"int16"` + SubVersion uint16 `eq2:"int16"` + Type uint8 `eq2:"int8"` + ClassSkill uint32 `eq2:"int32"` + MasterySkill uint32 `eq2:"int32"` + MinClassSkillReq uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + SpellTextColor uint32 `eq2:"int32"` + Unknown605MJ3 uint8 `eq2:"int8"` + Tier uint8 `eq2:"int8"` + HealthReq uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + HealthUpkeep uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + PowerReq uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + PowerUpkeep uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + ReqConcentration uint16 `eq2:"int16"` + Unknown uint16 `eq2:"int16"` + CastTime uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + Recovery uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + Recast float32 `eq2:"float"` + Radius float32 `eq2:"float"` + MaxAoeTargets uint16 `eq2:"int16"` + FriendlySpell uint8 `eq2:"int8"` + NumReagents uint8 `eq2:"int8"` + ReagentArray []AASpellReagent `eq2:"array,arraysize=NumReagents"` + NumEffects uint8 `eq2:"int8"` + EffectArray []AASpellEffect `eq2:"array,arraysize=NumEffects"` + DisplaySpellTier uint8 `eq2:"int8"` + Unknown1 uint8 `eq2:"int8"` + MinimumRange float32 `eq2:"float"` + Range float32 `eq2:"float"` + Duration1 uint32 `eq2:"int32"` + Duration2 uint32 `eq2:"int32"` + Unknown9 uint8 `eq2:"int8"` + DurationFlag uint8 `eq2:"int8"` + Target uint8 `eq2:"int8"` + CanEffectRaid uint8 `eq2:"int8"` + AffectOnlyGroupMembers uint8 `eq2:"int8"` + GroupSpell uint8 `eq2:"int8"` + Resistibility float32 `eq2:"float"` + Unknown11 []uint8 `eq2:"int8,len=7"` + HitBonus float32 `eq2:"float"` + Unknown12 uint8 `eq2:"int8"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` + Unknown605MJ6 uint8 `eq2:"int8"` +} + +type AASpellReagent struct { + Reagent common.EQ2String8 `eq2:"string8"` + Consumed uint8 `eq2:"int8"` + QtyRequired uint32 `eq2:"int32"` +} + +type AASpellEffect struct { + SubBulletFlag uint8 `eq2:"int8"` + Effect common.EQ2String16 `eq2:"string16"` + Percentage uint8 `eq2:"int8"` +} diff --git a/internal/packets/substructs/BaseItemDescription.go b/internal/packets/substructs/BaseItemDescription.go new file mode 100644 index 0000000..02e5b00 --- /dev/null +++ b/internal/packets/substructs/BaseItemDescription.go @@ -0,0 +1,304 @@ +package substructs + +import "eq2emu/internal/common" + +// BaseItemDescription Version 1 +type BaseItemDescriptionV1 struct { + CreatorFlag uint8 `eq2:"int8"` + Creator common.EQ2String16 `eq2:"string16"` + UniqueID uint32 `eq2:"int32"` + Icon uint16 `eq2:"int16"` + FlagNames common.EQ2String8 `eq2:"string8"` + Unknown81 []uint8 `eq2:"int8,len=17"` + StatCount uint8 `eq2:"int8"` + StatArray []BaseItemStat `eq2:"array,arraysize=StatCount"` + StatStringCount uint8 `eq2:"int8"` + StatStringArray []BaseItemStatString `eq2:"array,arraysize=StatStringCount"` + Condition uint8 `eq2:"int8"` + Weight uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + SkillReq1 uint32 `eq2:"int32"` + SkillMin uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + SkillRecommended uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + SlotCount uint8 `eq2:"int8"` + SlotArray []uint8 `eq2:"array,arraysize=SlotCount"` +} + +// BaseItemDescription Version 373 +type BaseItemDescriptionV373 struct { + CreatorFlag uint8 `eq2:"int8"` + Creator common.EQ2String16 `eq2:"string16"` + UniqueID uint32 `eq2:"int32"` + Icon uint16 `eq2:"int16"` + Tier uint8 `eq2:"int8"` + FlagNames common.EQ2String8 `eq2:"string8"` + Unknown81 []uint8 `eq2:"int8,len=17"` + StatCount uint8 `eq2:"int8"` + StatArray []BaseItemStat `eq2:"array,arraysize=StatCount"` + StatStringCount uint8 `eq2:"int8"` + StatStringArray []BaseItemStatString `eq2:"array,arraysize=StatStringCount"` + Condition uint8 `eq2:"int8"` + Weight uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + SkillReq1 uint32 `eq2:"int32"` + SkillReq2 uint32 `eq2:"int32"` + SkillMin uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + SkillRecommended uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + SlotCount uint8 `eq2:"int8"` + SlotArray []uint8 `eq2:"array,arraysize=SlotCount"` +} + +// BaseItemDescription Version 546 +type BaseItemDescriptionV546 struct { + Creator common.EQ2String8 `eq2:"string8"` + UniqueID uint32 `eq2:"int32"` + BrokerItemID uint64 `eq2:"int64"` + Icon uint16 `eq2:"int16"` + Tier uint8 `eq2:"int8"` + Flags uint32 `eq2:"int32"` + Unknown81 []uint8 `eq2:"int8,len=15"` + StatCount uint8 `eq2:"int8"` + StatArray []BaseItemStatV546 `eq2:"array,arraysize=StatCount"` + StatStringCount uint8 `eq2:"int8"` + StatStringArray []BaseItemStatStringV546 `eq2:"array,arraysize=StatStringCount"` + Condition uint8 `eq2:"int8"` + Weight uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + SkillReq1 uint32 `eq2:"int32"` + SkillReq2 uint32 `eq2:"int32"` + SkillMin uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + ClassCount uint8 `eq2:"int8"` + ClassArray []BaseItemClass `eq2:"array,arraysize=ClassCount"` + SlotCount uint8 `eq2:"int8"` + SlotArray []uint8 `eq2:"array,arraysize=SlotCount"` + FooterType uint32 `eq2:"int32"` +} + +// BaseItemDescription Version 1096 +type BaseItemDescriptionV1096 struct { + CreatorFlag uint8 `eq2:"int8"` + Creator common.EQ2String8 `eq2:"string8"` + UniqueID uint32 `eq2:"int32"` + BrokerItemID uint64 `eq2:"int64"` + ItemID int32 `eq2:"sint32"` + ItemCRC int32 `eq2:"sint32"` + Icon uint16 `eq2:"int16"` + Tier uint8 `eq2:"int8"` + Flags uint16 `eq2:"int16"` + Flags2 uint16 `eq2:"int16"` + Unknown81096 []uint8 `eq2:"int8,len=17"` + StatCount uint8 `eq2:"int8"` + StatArray []BaseItemStatV1096 `eq2:"array,arraysize=StatCount"` + StatUnknown uint8 `eq2:"int8"` + StatStringCount uint8 `eq2:"int8"` + StatStringArray []BaseItemStatStringV1096 `eq2:"array,arraysize=StatStringCount"` + Unknown19 uint16 `eq2:"int16"` + Unknown20 uint16 `eq2:"int16"` + Condition uint8 `eq2:"int8"` + Weight uint32 `eq2:"int32"` + SkillReq1 uint32 `eq2:"int32"` + SkillReq2 uint32 `eq2:"int32"` + SkillMin uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + ClassCount uint8 `eq2:"int8"` + ClassArray []BaseItemClass `eq2:"array,arraysize=ClassCount"` + SlotCount uint8 `eq2:"int8"` + SlotArray []uint8 `eq2:"array,arraysize=SlotCount"` + FooterType uint32 `eq2:"int32"` +} + +// BaseItemDescription Version 1188 +type BaseItemDescriptionV1188 struct { + CreatorFlag uint8 `eq2:"int8"` + Creator common.EQ2String8 `eq2:"string8"` + UniqueID uint32 `eq2:"int32"` + BrokerItemID uint64 `eq2:"int64"` + ItemID int32 `eq2:"sint32"` + ItemCRC int32 `eq2:"sint32"` + Icon uint16 `eq2:"int16"` + Tier uint8 `eq2:"int8"` + Flags uint16 `eq2:"int16"` + Flags2 uint16 `eq2:"int16"` + Unknown81188 []uint8 `eq2:"int8,len=17"` + StatCount uint8 `eq2:"int8"` + StatArray []BaseItemStatV1188 `eq2:"array,arraysize=StatCount"` + StatUnknown uint8 `eq2:"int8"` + StatStringCount uint8 `eq2:"int8"` + StatStringArray []BaseItemStatStringV1188 `eq2:"array,arraysize=StatStringCount"` + Unknown19 uint16 `eq2:"int16"` + Unknown20 uint16 `eq2:"int16"` + Condition uint8 `eq2:"int8"` + Weight uint32 `eq2:"int32"` + SkillReq1 uint32 `eq2:"int32"` + SkillReq2 uint32 `eq2:"int32"` + SkillMin uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + ClassCount uint8 `eq2:"int8"` + ClassArray []BaseItemClass `eq2:"array,arraysize=ClassCount"` + SlotCount uint8 `eq2:"int8"` + SlotArray []uint8 `eq2:"array,arraysize=SlotCount"` + FooterType uint32 `eq2:"int32"` +} + +// BaseItemDescription Version 1208 +type BaseItemDescriptionV1208 struct { + CreatorFlag uint8 `eq2:"int8"` + Creator common.EQ2String8 `eq2:"string8"` + UniqueID uint32 `eq2:"int32"` + BrokerItemID uint64 `eq2:"int64"` + ItemID int32 `eq2:"sint32"` + ItemCRC int32 `eq2:"sint32"` + Icon uint16 `eq2:"int16"` + Tier uint8 `eq2:"int8"` + Flags uint16 `eq2:"int16"` + Flags2 uint16 `eq2:"int16"` + Unknown81208 []uint8 `eq2:"int8,len=17"` + StatCount uint8 `eq2:"int8"` + StatArray []BaseItemStatV1208 `eq2:"array,arraysize=StatCount"` + StatUnknown uint8 `eq2:"int8"` + StatStringCount uint8 `eq2:"int8"` + StatStringArray []BaseItemStatStringV1208 `eq2:"array,arraysize=StatStringCount"` + Unknown19 uint16 `eq2:"int16"` + Unknown20 uint16 `eq2:"int16"` + Condition uint8 `eq2:"int8"` + Weight uint32 `eq2:"int32"` + SkillReq1 uint32 `eq2:"int32"` + SkillReq2 uint32 `eq2:"int32"` + SkillMin uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + ClassCount uint8 `eq2:"int8"` + ClassArray []BaseItemClass `eq2:"array,arraysize=ClassCount"` + SlotCount uint8 `eq2:"int8"` + SlotArray []uint8 `eq2:"array,arraysize=SlotCount"` + FooterType uint32 `eq2:"int32"` +} + +// BaseItemDescription Version 63119 +type BaseItemDescriptionV63119 struct { + CreatorFlag uint8 `eq2:"int8"` + Creator common.EQ2String8 `eq2:"string8"` + UniqueID uint32 `eq2:"int32"` + BrokerItemID uint64 `eq2:"int64"` + ItemID int32 `eq2:"sint32"` + ItemCRC int32 `eq2:"sint32"` + Icon uint16 `eq2:"int16"` + Tier uint8 `eq2:"int8"` + Flags uint16 `eq2:"int16"` + Flags2 uint16 `eq2:"int16"` + Unknown863119 []uint8 `eq2:"int8,len=17"` + StatUnknown uint8 `eq2:"int8"` + StatStringCount uint8 `eq2:"int8"` + StatStringArray []BaseItemStatStringV63119 `eq2:"array,arraysize=StatStringCount"` + Unknown19 uint16 `eq2:"int16"` + StatCount uint8 `eq2:"int8"` + StatArray []BaseItemStatV63119 `eq2:"array,arraysize=StatCount"` + Unknown20 uint8 `eq2:"int8"` + ModCount uint8 `eq2:"int8"` + ModArray []BaseItemMod `eq2:"array,arraysize=ModCount"` + Unknown21 []uint8 `eq2:"int8,len=4"` + Condition uint8 `eq2:"int8"` + Weight uint32 `eq2:"int32"` + SkillReq1 uint32 `eq2:"int32"` + SkillReq2 uint32 `eq2:"int32"` + SkillMin uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + ClassCount uint8 `eq2:"int8"` + ClassArray []BaseItemClass `eq2:"array,arraysize=ClassCount"` + SlotCount uint8 `eq2:"int8"` + SlotArray []uint8 `eq2:"array,arraysize=SlotCount"` + FooterType uint32 `eq2:"int32"` +} + +// Common nested structs for BaseItemDescription +type BaseItemStat struct { + StatType uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + StatSubtype int16 `eq2:"sint16,oversized=127,oversizedbyte=127"` + Value int16 `eq2:"sint16,oversized=127,oversizedbyte=127"` + StatName common.EQ2String8 `eq2:"string8"` +} + +type BaseItemStatV546 struct { + StatType uint8 `eq2:"int8"` + StatSubtype int16 `eq2:"sint16,oversized=127,oversizedbyte=127"` + Value int16 `eq2:"sint16,oversized=127,oversizedbyte=127"` + StatName common.EQ2String8 `eq2:"string8"` +} + +type BaseItemStatV1096 struct { + StatType uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + StatSubtype int16 `eq2:"sint16,oversized=127,oversizedbyte=127"` + Value any `eq2:"float,type2=sint16,type2criteria=stat_type!=6,oversized=127,oversizedbyte=127"` + StatName common.EQ2String8 `eq2:"string8"` +} + +type BaseItemStatV1188 struct { + StatType uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + StatSubtype int16 `eq2:"sint16,oversized=127,oversizedbyte=127,ifnotequals=stat_type_%i"` + Value any `eq2:"float,type2=sint16,type2criteria=stat_type!=6,oversized=127,oversizedbyte=127"` + StatUnknown uint8 `eq2:"int8,ifequals=stat_type_%i"` + StatName common.EQ2String8 `eq2:"string8"` + StatLevel uint8 `eq2:"int8"` +} + +type BaseItemStatV1208 struct { + StatType uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + StatSubtype int16 `eq2:"sint16,oversized=127,oversizedbyte=127,ifnotequals=stat_type_%i"` + Value any `eq2:"float,type2=sint16,type2criteria=stat_type!=6,oversized=127,oversizedbyte=127"` + StatUnknown uint8 `eq2:"int8,ifequals=stat_type_%i"` + StatName common.EQ2String8 `eq2:"string8"` + StatLevel any `eq2:"int16,type2=int8,type2criteria=stat_name!>2"` +} + +type BaseItemStatV63119 struct { + StatType uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + StatSubtype int16 `eq2:"sint16,oversized=127,oversizedbyte=127,ifnotequals=stat_type_%i"` + Value any `eq2:"float,type2=sint32,type2criteria=stat_type!=6,oversized=127,oversizedbyte=127"` + StatName common.EQ2String8 `eq2:"string8"` + StatLevel any `eq2:"int16,type2=int8,type2criteria=stat_name!>2"` + Value2 any `eq2:"float,type2=sint32,type2criteria=stat_type!=6,oversized=127,oversizedbyte=127"` +} + +type BaseItemStatString struct { + StatString common.EQ2String8 `eq2:"string8"` + AdornmentFlag uint8 `eq2:"int8"` + AdornmentArray []AdornmentUnknown `eq2:"array,arraysize=AdornmentFlag"` + StatDescription common.EQ2String16 `eq2:"string16"` +} + +type BaseItemStatStringV546 struct { + StatString common.EQ2String8 `eq2:"string8"` +} + +type BaseItemStatStringV1096 struct { + StatString common.EQ2String8 `eq2:"string8"` + StatDescription common.EQ2String16 `eq2:"string16"` + StatStringUnknown uint8 `eq2:"int8"` +} + +type BaseItemStatStringV1188 struct { + StatString common.EQ2String8 `eq2:"string8"` + StatStringUnknown uint8 `eq2:"int8"` + StatDescription common.EQ2String16 `eq2:"string16"` +} + +type BaseItemStatStringV1208 struct { + StatString common.EQ2String8 `eq2:"string8"` + StatStringUnknown uint8 `eq2:"int8"` + StatDescription common.EQ2String16 `eq2:"string16"` +} + +type BaseItemStatStringV63119 struct { + StatString common.EQ2String8 `eq2:"string8"` + StatStringUnknown uint8 `eq2:"int8"` + StatDescription common.EQ2String16 `eq2:"string16"` +} + +type AdornmentUnknown struct { + AdornmentUnknown uint8 `eq2:"int8"` +} + +type BaseItemClass struct { + AdventureClass uint8 `eq2:"int8"` + TradeskillClass uint8 `eq2:"int8"` + Level uint16 `eq2:"int16"` +} + +type BaseItemMod struct { + ModString common.EQ2String8 `eq2:"string8"` + ModNeed uint8 `eq2:"int8"` + ModHave uint8 `eq2:"int8,ifvariableset=header_info_mod_need_0"` + ModUnknown []uint8 `eq2:"int8,len=2"` +} diff --git a/internal/packets/substructs/BaseItemDescriptionGeneric.go b/internal/packets/substructs/BaseItemDescriptionGeneric.go new file mode 100644 index 0000000..c6bd74c --- /dev/null +++ b/internal/packets/substructs/BaseItemDescriptionGeneric.go @@ -0,0 +1,26 @@ +package substructs + +import "eq2emu/internal/common" + +// BaseItemDescriptionGeneric Version 373 +type BaseItemDescriptionGeneric struct { + CreatorFlag uint8 `eq2:"int8"` + Creator common.EQ2String16 `eq2:"string16"` + UniqueID uint32 `eq2:"int32"` + Icon uint16 `eq2:"int16"` + Tier uint8 `eq2:"int8"` + FlagNames common.EQ2String8 `eq2:"string8"` + Unknown81 []uint8 `eq2:"int8,len=17"` + StatCount uint8 `eq2:"int8"` + StatArray []BaseItemStat `eq2:"array,arraysize=StatCount"` + StatStringCount uint8 `eq2:"int8"` + StatStringArray []BaseItemStatString `eq2:"array,arraysize=StatStringCount"` + Condition uint8 `eq2:"int8"` + Weight uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + SkillReq1 uint32 `eq2:"int32"` + SkillReq2 uint32 `eq2:"int32"` + SkillMin uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + SkillRecommended uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + SlotCount uint8 `eq2:"int8"` + SlotArray []uint8 `eq2:"array,arraysize=SlotCount"` +} diff --git a/internal/packets/substructs/BaseItemDescriptionInspect.go b/internal/packets/substructs/BaseItemDescriptionInspect.go new file mode 100644 index 0000000..609afd3 --- /dev/null +++ b/internal/packets/substructs/BaseItemDescriptionInspect.go @@ -0,0 +1,21 @@ +package substructs + +import "eq2emu/internal/common" + +// BaseItemDescriptionInspect Version 373 +type BaseItemDescriptionInspect struct { + CreatorFlag uint8 `eq2:"int8"` + Creator common.EQ2String16 `eq2:"string16"` + UniqueID uint32 `eq2:"int32"` + Icon uint16 `eq2:"int16"` + Tier uint8 `eq2:"int8"` + FlagNames common.EQ2String8 `eq2:"string8"` + Unknown81 []uint8 `eq2:"int8,len=17"` + StatCount uint8 `eq2:"int8"` + StatArray []BaseItemStat `eq2:"array,arraysize=StatCount"` + StatStringCount uint8 `eq2:"int8"` + StatStringArray []BaseItemStatString `eq2:"array,arraysize=StatStringCount"` + Condition uint8 `eq2:"int8"` + Weight uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + Unknown []uint8 `eq2:"int8,len=9"` +} diff --git a/internal/packets/substructs/BaseMerchantItemDescription.go b/internal/packets/substructs/BaseMerchantItemDescription.go new file mode 100644 index 0000000..2d2542d --- /dev/null +++ b/internal/packets/substructs/BaseMerchantItemDescription.go @@ -0,0 +1,161 @@ +package substructs + +import "eq2emu/internal/common" + +// BaseMerchantItemDescription Version 1 +type BaseMerchantItemDescriptionV1 struct { + CreatorFlag uint8 `eq2:"int8"` + Creator common.EQ2String8 `eq2:"string8"` + Adornment common.EQ2String16 `eq2:"string16"` + Unknown3 uint32 `eq2:"int32"` + FirstDesc common.EQ2String16 `eq2:"string16"` + UniqueID uint32 `eq2:"int32"` + ItemID int32 `eq2:"sint32"` + Icon uint16 `eq2:"int16"` + Tier uint8 `eq2:"int8"` + Flags uint32 `eq2:"int32"` + Unknown81M []uint8 `eq2:"int8,len=17"` + StatCount uint8 `eq2:"int8"` + StatArray []BaseItemStat `eq2:"array,arraysize=StatCount"` + StatStringCount uint8 `eq2:"int8"` + StatStringArray []BaseItemStatString `eq2:"array,arraysize=StatStringCount"` + Condition uint8 `eq2:"int8"` + Weight uint32 `eq2:"int32"` + SkillReq1 uint32 `eq2:"int32"` + SkillReq2 uint32 `eq2:"int32"` + SkillMin uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + ClassCount uint8 `eq2:"int8"` + ClassArray []BaseItemClass `eq2:"array,arraysize=ClassCount"` + SlotCount uint8 `eq2:"int8"` + SlotArray []uint8 `eq2:"array,arraysize=SlotCount"` + FooterType uint32 `eq2:"int32"` +} + +// BaseMerchantItemDescription Version 860 +type BaseMerchantItemDescriptionV860 struct { + CreatorFlag uint8 `eq2:"int8"` + Creator common.EQ2String8 `eq2:"string8"` + Adornment common.EQ2String16 `eq2:"string16"` + Unknown3 []uint32 `eq2:"int32,len=2"` + AdornmentDesc common.EQ2String16 `eq2:"string16"` + UnknownDesc common.EQ2String16 `eq2:"string16"` + FirstDesc common.EQ2String16 `eq2:"string16"` + UniqueID uint32 `eq2:"int32"` + ItemID int32 `eq2:"sint32"` + Icon uint16 `eq2:"int16"` + Tier uint8 `eq2:"int8"` + Flags uint32 `eq2:"int32"` + Unknown8860M []uint8 `eq2:"int8,len=17"` + StatCount uint8 `eq2:"int8"` + StatArray []BaseItemStatMerchant860 `eq2:"array,arraysize=StatCount"` + StatStringCount uint8 `eq2:"int8"` + StatStringArray []BaseItemStatString `eq2:"array,arraysize=StatStringCount"` + Condition uint8 `eq2:"int8"` + Weight uint32 `eq2:"int32"` + SkillReq1 uint32 `eq2:"int32"` + SkillReq2 uint32 `eq2:"int32"` + SkillMin uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + ClassCount uint8 `eq2:"int8"` + ClassArray []BaseItemClass `eq2:"array,arraysize=ClassCount"` + SlotCount uint8 `eq2:"int8"` + SlotArray []uint8 `eq2:"array,arraysize=SlotCount"` + FooterType uint32 `eq2:"int32"` +} + +// BaseMerchantItemDescription Version 1096 +type BaseMerchantItemDescriptionV1096 struct { + CreatorFlag uint8 `eq2:"int8"` + Creator common.EQ2String8 `eq2:"string8"` + UniqueID uint32 `eq2:"int32"` + ItemID int32 `eq2:"sint32"` + ItemCRC int32 `eq2:"sint32"` + Icon uint16 `eq2:"int16"` + Tier uint8 `eq2:"int8"` + Flags uint16 `eq2:"int16"` + Flags2 uint16 `eq2:"int16"` + Unknown81096M []uint8 `eq2:"int8,len=17"` + StatCount uint8 `eq2:"int8"` + StatArray []BaseItemStatMerchant1096 `eq2:"array,arraysize=StatCount"` + StatUnknown uint8 `eq2:"int8"` + StatStringCount uint8 `eq2:"int8"` + StatStringArray []BaseItemStatStringMerchant1096 `eq2:"array,arraysize=StatStringCount"` + Unknown19 uint16 `eq2:"int16"` + Unknown20 uint16 `eq2:"int16"` + Condition uint8 `eq2:"int8"` + Weight uint32 `eq2:"int32"` + SkillReq1 uint32 `eq2:"int32"` + SkillReq2 uint32 `eq2:"int32"` + SkillMin uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + ClassCount uint8 `eq2:"int8"` + ClassArray []BaseItemClass `eq2:"array,arraysize=ClassCount"` + SlotCount uint8 `eq2:"int8"` + SlotArray []uint8 `eq2:"array,arraysize=SlotCount"` + FooterType uint32 `eq2:"int32"` +} + +// BaseMerchantItemDescription Version 63119 +type BaseMerchantItemDescriptionV63119 struct { + CreatorFlag uint8 `eq2:"int8"` + Creator common.EQ2String8 `eq2:"string8"` + UniqueID uint32 `eq2:"int32"` + ItemID int32 `eq2:"sint32"` + ItemCRC int32 `eq2:"sint32"` + Icon uint16 `eq2:"int16"` + Tier uint8 `eq2:"int8"` + Flags uint16 `eq2:"int16"` + Flags2 uint16 `eq2:"int16"` + Unknown8 []uint8 `eq2:"int8,len=21"` + StatCount uint8 `eq2:"int8"` + StatArray []BaseItemStatMerchant63119 `eq2:"array,arraysize=StatCount"` + StatUnknown uint8 `eq2:"int8"` + StatStringCount uint8 `eq2:"int8"` + StatStringArray []BaseItemStatStringMerchant63119 `eq2:"array,arraysize=StatStringCount"` + Unknown19 uint16 `eq2:"int16"` + Unknown20 uint16 `eq2:"int16"` + Condition uint8 `eq2:"int8"` + Weight uint32 `eq2:"int32"` + SkillReq1 uint32 `eq2:"int32"` + SkillReq2 uint32 `eq2:"int32"` + SkillMin uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + ClassCount uint8 `eq2:"int8"` + ClassArray []BaseItemClass `eq2:"array,arraysize=ClassCount"` + SlotCount uint8 `eq2:"int8"` + SlotArray []uint8 `eq2:"array,arraysize=SlotCount"` + FooterType uint32 `eq2:"int32"` +} + +// Merchant-specific stat structs +type BaseItemStatMerchant860 struct { + StatType uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + StatSubtype int16 `eq2:"sint16,oversized=127,oversizedbyte=127"` + Value int16 `eq2:"sint16,oversized=127,oversizedbyte=127"` + StatName common.EQ2String8 `eq2:"string8"` +} + +type BaseItemStatMerchant1096 struct { + StatType uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + StatSubtype int16 `eq2:"sint16,oversized=127,oversizedbyte=127"` + Value any `eq2:"float,type2=sint16,type2criteria=stat_type!=6,oversized=127,oversizedbyte=127"` + StatName common.EQ2String8 `eq2:"string8"` +} + +type BaseItemStatMerchant63119 struct { + StatType uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + StatSubtype int16 `eq2:"sint16,oversized=127,oversizedbyte=127,ifnotequals=stat_type_%i"` + Value any `eq2:"float,type2=sint32,type2criteria=stat_type!=6"` + StatName common.EQ2String8 `eq2:"string8"` + StatLevel any `eq2:"int16,type2=int8,type2criteria=stat_name!>2"` + Value2 float32 `eq2:"float"` +} + +type BaseItemStatStringMerchant1096 struct { + StatString common.EQ2String8 `eq2:"string8"` + StatDescription common.EQ2String16 `eq2:"string16"` + StatStringUnknown uint8 `eq2:"int8"` +} + +type BaseItemStatStringMerchant63119 struct { + StatString common.EQ2String8 `eq2:"string8"` + StatStringUnknown uint8 `eq2:"int8"` + StatDescription common.EQ2String16 `eq2:"string16"` +} diff --git a/internal/packets/substructs/GroupMember.go b/internal/packets/substructs/GroupMember.go new file mode 100644 index 0000000..3527d50 --- /dev/null +++ b/internal/packets/substructs/GroupMember.go @@ -0,0 +1,193 @@ +package substructs + +// GroupMember Version 1 +type GroupMemberV1 struct { + ZoneStatus uint8 `eq2:"int8"` + Name []byte `eq2:"char,len=16"` + SpawnID uint32 `eq2:"int32"` + PetID uint32 `eq2:"int32"` + LevelCurrent uint16 `eq2:"int16"` + RaceID uint8 `eq2:"int8"` + ClassID uint8 `eq2:"int8"` + HPMax int32 `eq2:"sint32"` + HPCurrent int32 `eq2:"sint32"` + PowerMax int32 `eq2:"sint32"` + PowerCurrent int32 `eq2:"sint32"` + TraumaCount uint8 `eq2:"int8"` + ArcaneCount uint8 `eq2:"int8"` + NoxiousCount uint8 `eq2:"int8"` + ElementalCount uint8 `eq2:"int8"` +} + +// GroupMember Version 373 +type GroupMemberV373 struct { + ZoneStatus uint8 `eq2:"int8"` + Name []byte `eq2:"char,len=16"` + SpawnID uint32 `eq2:"int32"` + PetID uint32 `eq2:"int32"` + LevelCurrent uint16 `eq2:"int16"` + LevelMax uint16 `eq2:"int16"` + RaceID uint8 `eq2:"int8"` + ClassID uint8 `eq2:"int8"` + HPCurrent int32 `eq2:"sint32"` + HPMax int32 `eq2:"sint32"` + PowerCurrent int32 `eq2:"sint32"` + PowerMax int32 `eq2:"sint32"` + TraumaCount uint8 `eq2:"int8"` + ArcaneCount uint8 `eq2:"int8"` + NoxiousCount uint8 `eq2:"int8"` + ElementalCount uint8 `eq2:"int8"` +} + +// GroupMember Version 546 +type GroupMemberV546 struct { + ZoneStatus uint8 `eq2:"int8"` + Name []byte `eq2:"char,len=41"` + SpawnID uint32 `eq2:"int32"` + PetID uint32 `eq2:"int32"` + LevelCurrent uint16 `eq2:"int16"` + LevelMax uint16 `eq2:"int16"` + RaceID uint8 `eq2:"int8"` + ClassID uint8 `eq2:"int8"` + HPCurrent int32 `eq2:"sint32"` + HPMax int32 `eq2:"sint32"` + PowerCurrent int32 `eq2:"sint32"` + PowerMax int32 `eq2:"sint32"` + TraumaCount uint8 `eq2:"int8"` + ArcaneCount uint8 `eq2:"int8"` + NoxiousCount uint8 `eq2:"int8"` + ElementalCount uint8 `eq2:"int8"` + Zone []byte `eq2:"char,len=60"` + Instance uint8 `eq2:"int8"` +} + +// GroupMember Version 562 +type GroupMemberV562 struct { + SpawnID uint32 `eq2:"int32"` + PetID uint32 `eq2:"int32"` + HPCurrent int32 `eq2:"sint32"` + HPMax int32 `eq2:"sint32"` + PowerCurrent int32 `eq2:"sint32"` + PowerMax int32 `eq2:"sint32"` + LevelCurrent uint16 `eq2:"int16"` + LevelMax uint16 `eq2:"int16"` + Name []byte `eq2:"char,len=41"` + Zone []byte `eq2:"char,len=60"` + Instance uint8 `eq2:"int8"` + ZoneStatus uint8 `eq2:"int8"` + Unknown4 uint16 `eq2:"int16"` + RaceID uint8 `eq2:"int8"` + ClassID uint8 `eq2:"int8"` + TraumaCount uint8 `eq2:"int8"` + ArcaneCount uint8 `eq2:"int8"` + NoxiousCount uint8 `eq2:"int8"` + ElementalCount uint8 `eq2:"int8"` + CurseCount uint8 `eq2:"int8"` + Unknown5 []uint8 `eq2:"int8,len=2"` +} + +// GroupMember Version 1188 +type GroupMemberV1188 struct { + SpawnID uint32 `eq2:"int32"` + PetID uint32 `eq2:"int32"` + HPCurrent int32 `eq2:"sint32"` + HPMax int32 `eq2:"sint32"` + PowerCurrent int32 `eq2:"sint32"` + PowerMax int32 `eq2:"sint32"` + LevelCurrent uint16 `eq2:"int16"` + LevelMax uint16 `eq2:"int16"` + Name []byte `eq2:"char,len=41"` + Zone []byte `eq2:"char,len=60"` + Instance uint8 `eq2:"int8"` + ZoneStatus uint8 `eq2:"int8"` + Unknown4 uint16 `eq2:"int16"` + RaceID uint8 `eq2:"int8"` + ClassID uint8 `eq2:"int8"` + TraumaCount uint8 `eq2:"int8"` + ArcaneCount uint8 `eq2:"int8"` + NoxiousCount uint8 `eq2:"int8"` + ElementalCount uint8 `eq2:"int8"` + CurseCount uint8 `eq2:"int8"` + Unknown5 []uint8 `eq2:"int8,len=2"` + CoEUnknown []uint8 `eq2:"int8,len=9"` +} + +// GroupMember Version 57048 +type GroupMemberV57048 struct { + SpawnID uint32 `eq2:"int32"` + PetID uint32 `eq2:"int32"` + HPCurrent int64 `eq2:"sint64"` + HPMax int64 `eq2:"sint64"` + PowerCurrent int32 `eq2:"sint32"` + PowerMax int32 `eq2:"sint32"` + LevelCurrent uint16 `eq2:"int16"` + LevelMax uint16 `eq2:"int16"` + Name []byte `eq2:"char,len=41"` + Zone []byte `eq2:"char,len=60"` + Instance uint8 `eq2:"int8"` + ZoneStatus uint8 `eq2:"int8"` + Unknown4 uint16 `eq2:"int16"` + RaceID uint8 `eq2:"int8"` + ClassID uint8 `eq2:"int8"` + TraumaCount uint8 `eq2:"int8"` + ArcaneCount uint8 `eq2:"int8"` + NoxiousCount uint8 `eq2:"int8"` + ElementalCount uint8 `eq2:"int8"` + CurseCount uint8 `eq2:"int8"` + Unknown5 []uint8 `eq2:"int8,len=2"` + CoEUnknown []uint8 `eq2:"int8,len=9"` +} + +// GroupMember Version 61532 +type GroupMemberV61532 struct { + SpawnID uint32 `eq2:"int32"` + PetID uint32 `eq2:"int32"` + HPCurrent int64 `eq2:"sint64"` + HPCurrent2 int64 `eq2:"sint64"` + HPMax int32 `eq2:"sint32"` + HPMax2 int32 `eq2:"sint32"` + PowerCurrent int32 `eq2:"sint32"` + PowerMax int32 `eq2:"sint32"` + LevelCurrent uint16 `eq2:"int16"` + LevelMax uint16 `eq2:"int16"` + Name []byte `eq2:"char,len=41"` + Zone []byte `eq2:"char,len=60"` + Instance uint8 `eq2:"int8"` + ZoneStatus uint8 `eq2:"int8"` + Unknown4 uint16 `eq2:"int16"` + RaceID uint8 `eq2:"int8"` + ClassID uint8 `eq2:"int8"` + TraumaCount uint8 `eq2:"int8"` + ArcaneCount uint8 `eq2:"int8"` + NoxiousCount uint8 `eq2:"int8"` + ElementalCount uint8 `eq2:"int8"` + CurseCount uint8 `eq2:"int8"` + Unknown5 []uint8 `eq2:"int8,len=2"` + CoEUnknown []uint8 `eq2:"int8,len=9"` +} + +// GroupMember Version 63167 +type GroupMemberV63167 struct { + SpawnID uint32 `eq2:"int32"` + PetID uint32 `eq2:"int32"` + HPCurrent int64 `eq2:"sint64"` + HPMax int64 `eq2:"sint64"` + PowerCurrent int32 `eq2:"sint32"` + PowerMax int32 `eq2:"sint32"` + LevelCurrent uint16 `eq2:"int16"` + LevelMax uint16 `eq2:"int16"` + Name []byte `eq2:"char,len=41"` + Zone []byte `eq2:"char,len=60"` + Instance uint8 `eq2:"int8"` + ZoneStatus uint8 `eq2:"int8"` + Unknown4 uint16 `eq2:"int16"` + RaceID uint8 `eq2:"int8"` + ClassID uint8 `eq2:"int8"` + TraumaCount uint8 `eq2:"int8"` + ArcaneCount uint8 `eq2:"int8"` + NoxiousCount uint8 `eq2:"int8"` + ElementalCount uint8 `eq2:"int8"` + CurseCount uint8 `eq2:"int8"` + Unknown5 []uint8 `eq2:"int8,len=2"` + CoEUnknown []uint8 `eq2:"int8,len=9"` +} diff --git a/internal/packets/substructs/InfoTemplate.go b/internal/packets/substructs/InfoTemplate.go new file mode 100644 index 0000000..aa95d12 --- /dev/null +++ b/internal/packets/substructs/InfoTemplate.go @@ -0,0 +1,20 @@ +package substructs + +// InfoTemplate Version 63119 +type InfoTemplate struct { + NumTabs uint16 `eq2:"int16"` + TabTemplateArray []TabTemplate `eq2:"array,arraysize=NumTabs"` +} + +type TabTemplate struct { + TabNumber uint16 `eq2:"int16"` + TabUnknown1 uint32 `eq2:"int32"` + TemplateSize uint16 `eq2:"int16"` + TemplateArray []TemplateData `eq2:"array,arraysize=TemplateSize"` +} + +type TemplateData struct { + TemplatePos uint16 `eq2:"int16"` + TemplateUnknown3 uint16 `eq2:"int16"` + TemplateID uint32 `eq2:"int32"` +} diff --git a/internal/packets/substructs/Item.go b/internal/packets/substructs/Item.go new file mode 100644 index 0000000..373281e --- /dev/null +++ b/internal/packets/substructs/Item.go @@ -0,0 +1,207 @@ +package substructs + +// Item Version 1 +type ItemV1 struct { + UniqueID uint32 `eq2:"int32"` + BagID uint32 `eq2:"int32"` + InvSlotID uint32 `eq2:"int32"` + MenuType uint32 `eq2:"int32"` + SlotID uint8 `eq2:"int8"` + Index uint16 `eq2:"int16"` + Icon uint16 `eq2:"int16"` + Count uint8 `eq2:"int8"` + Unknown uint8 `eq2:"int8"` + Level uint8 `eq2:"int8"` + Tier uint8 `eq2:"int8"` + NumSlots uint8 `eq2:"int8"` + ItemID int32 `eq2:"sint32"` + Name []byte `eq2:"char,len=81"` +} + +// Item Version 373 +type ItemV373 struct { + UniqueID uint32 `eq2:"int32"` + BagID uint32 `eq2:"int32"` + InvSlotID uint32 `eq2:"int32"` + MenuType uint32 `eq2:"int32"` + SlotID uint8 `eq2:"int8"` + Index uint16 `eq2:"int16"` + Icon uint16 `eq2:"int16"` + Count uint8 `eq2:"int8"` + Level uint8 `eq2:"int8"` + Tier uint8 `eq2:"int8"` + NumSlots uint8 `eq2:"int8"` + ItemID int32 `eq2:"sint32"` + Name []byte `eq2:"char,len=64"` + Unknown6 []uint8 `eq2:"int8,len=17"` +} + +// Item Version 562 +type ItemV562 struct { + UniqueID uint32 `eq2:"int32"` + BagID uint32 `eq2:"int32"` + InvSlotID uint32 `eq2:"int32"` + MenuType uint32 `eq2:"int32"` + Index uint16 `eq2:"int16"` + Icon uint16 `eq2:"int16"` + SlotID uint8 `eq2:"int8"` + Count uint8 `eq2:"int8"` + Unknown4 uint8 `eq2:"int8"` + Tier uint8 `eq2:"int8"` + NumSlots uint8 `eq2:"int8"` + ItemID int32 `eq2:"sint32"` + Name []byte `eq2:"char,len=64"` + Unknown6 []uint8 `eq2:"int8,len=17"` +} + +// Item Version 893 +type ItemV893 struct { + UniqueID uint32 `eq2:"int32"` + BagID uint32 `eq2:"int32"` + InvSlotID uint32 `eq2:"int32"` + MenuType uint32 `eq2:"int32"` + Unknown3b uint32 `eq2:"int32"` + Index uint16 `eq2:"int16"` + Icon uint16 `eq2:"int16"` + SlotID uint8 `eq2:"int8"` + Count uint8 `eq2:"int8"` + Unknown4 uint8 `eq2:"int8"` + Tier uint8 `eq2:"int8"` + NumSlots uint8 `eq2:"int8"` + ItemID int32 `eq2:"sint32"` + Name []byte `eq2:"char,len=64"` + Unknown6 []uint8 `eq2:"int8,len=17"` +} + +// Item Version 1193 +type ItemV1193 struct { + UniqueID uint32 `eq2:"int32"` + BagID uint32 `eq2:"int32"` + InvSlotID uint32 `eq2:"int32"` + MenuType uint32 `eq2:"int32"` + Unknown3b uint32 `eq2:"int32"` + Index uint16 `eq2:"int16"` + Icon uint16 `eq2:"int16"` + SlotID uint8 `eq2:"int8"` + Count uint8 `eq2:"int8"` + Unknown4 uint8 `eq2:"int8"` + Tier uint8 `eq2:"int8"` + NumSlots uint8 `eq2:"int8"` + ItemID int32 `eq2:"sint32"` + Name []byte `eq2:"char,len=64"` + Unknown6 []uint8 `eq2:"int8,len=18"` +} + +// Item Version 1205 +type ItemV1205 struct { + UniqueID uint32 `eq2:"int32"` + BagID uint32 `eq2:"int32"` + InvSlotID uint32 `eq2:"int32"` + MenuType uint32 `eq2:"int32"` + Unknown3b uint32 `eq2:"int32"` + Index uint16 `eq2:"int16"` + Icon uint16 `eq2:"int16"` + SlotID uint8 `eq2:"int8"` + Count uint8 `eq2:"int8"` + Unknown4 uint8 `eq2:"int8"` + Tier uint8 `eq2:"int8"` + NumSlots uint8 `eq2:"int8"` + Unknown5 []uint8 `eq2:"int8,len=2"` + ItemID int32 `eq2:"sint32"` + Name []byte `eq2:"char,len=64"` + Unknown6 []uint8 `eq2:"int8,len=17"` +} + +// Item Version 57048 +type ItemV57048 struct { + UniqueID uint32 `eq2:"int32"` + BagID uint32 `eq2:"int32"` + InvSlotID uint32 `eq2:"int32"` + MenuType uint32 `eq2:"int32"` + Unknown3b uint32 `eq2:"int32"` + Index uint16 `eq2:"int16"` + Icon uint16 `eq2:"int16"` + SlotID uint8 `eq2:"int8"` + Count uint16 `eq2:"int16"` + Unknown4b uint8 `eq2:"int8"` + Unknown4c uint8 `eq2:"int8"` + ItemLevel uint8 `eq2:"int8"` + Tier uint8 `eq2:"int8"` + NumSlots uint8 `eq2:"int8"` + Unknown5 []uint8 `eq2:"int8,len=2"` + ItemID int32 `eq2:"sint32"` + Name []byte `eq2:"char,len=64"` + Unknown6 []uint8 `eq2:"int8,len=17"` +} + +// Item Version 57107 +type ItemV57107 struct { + UniqueID uint32 `eq2:"int32"` + BagID uint32 `eq2:"int32"` + InvSlotID uint32 `eq2:"int32"` + MenuType uint32 `eq2:"int32"` + Unknown3b uint32 `eq2:"int32"` + Index uint16 `eq2:"int16"` + Icon uint16 `eq2:"int16"` + SlotID uint8 `eq2:"int8"` + Count uint16 `eq2:"int16"` + Unknown4b uint8 `eq2:"int8"` + Unknown4c uint8 `eq2:"int8"` + ItemLevel uint8 `eq2:"int8"` + Tier uint8 `eq2:"int8"` + NumSlots uint8 `eq2:"int8"` + Unknown5 []uint8 `eq2:"int8,len=2"` + ItemID int32 `eq2:"sint32"` + BrokerID uint64 `eq2:"int64"` + Name []byte `eq2:"char,len=64"` + Unknown6 []uint8 `eq2:"int8,len=17"` +} + +// Item Version 63119 +type ItemV63119 struct { + UniqueID uint32 `eq2:"int32"` + BagID uint32 `eq2:"int32"` + InvSlotID uint32 `eq2:"int32"` + MenuType uint32 `eq2:"int32"` + Unknown3 uint32 `eq2:"int32"` + Index uint16 `eq2:"int16"` + Icon uint16 `eq2:"int16"` + SlotID uint8 `eq2:"int8"` + Count uint16 `eq2:"int16"` + Unknown4b uint8 `eq2:"int8"` + Unknown4c uint8 `eq2:"int8"` + ItemLevel uint8 `eq2:"int8"` + Tier uint8 `eq2:"int8"` + NumSlots uint8 `eq2:"int8"` + EmptySlots uint8 `eq2:"int8"` + Unknown52 uint8 `eq2:"int8"` + Unknown53 uint8 `eq2:"int8"` + ItemID int32 `eq2:"sint32"` + BrokerID uint64 `eq2:"int64"` + Name []byte `eq2:"char,len=64"` + Unknown6 []uint8 `eq2:"int8,len=17"` +} + +// Item Version 63214 (latest) +type ItemV63214 struct { + UniqueID uint32 `eq2:"int32"` + BagID uint32 `eq2:"int32"` + InvSlotID uint32 `eq2:"int32"` + MenuType uint32 `eq2:"int32"` + Unknown3 uint32 `eq2:"int32"` + Index uint16 `eq2:"int16"` + Icon uint16 `eq2:"int16"` + SlotID uint8 `eq2:"int8"` + Count uint16 `eq2:"int16"` + Unknown4b uint8 `eq2:"int8"` + Unknown4c uint8 `eq2:"int8"` + ItemLevel uint8 `eq2:"int8"` + Tier uint8 `eq2:"int8"` + NumSlots uint8 `eq2:"int8"` + EmptySlots uint8 `eq2:"int8"` + Unknown52 uint8 `eq2:"int8"` + ItemID int32 `eq2:"sint32"` + BrokerID uint64 `eq2:"int64"` + Name []byte `eq2:"char,len=64"` + Unknown6 []uint8 `eq2:"int8,len=17"` +} diff --git a/internal/packets/substructs/ItemDescription.go b/internal/packets/substructs/ItemDescription.go new file mode 100644 index 0000000..99a5afc --- /dev/null +++ b/internal/packets/substructs/ItemDescription.go @@ -0,0 +1,59 @@ +package substructs + +// ItemDescription Version 1 +type ItemDescriptionV1 struct { + InfoHeader WSExamineInfoHeader `eq2:"substruct"` + Info BaseItemDescriptionV1 `eq2:"substruct"` + ItemType uint8 `eq2:"int8"` +} + +// ItemDescription Version 373 +type ItemDescriptionV373 struct { + InfoHeader WSExamineInfoHeader `eq2:"substruct"` + Info BaseItemDescriptionV373 `eq2:"substruct"` + ItemType uint8 `eq2:"int8"` +} + +// ItemDescription Version 546 +type ItemDescriptionV546 struct { + InfoHeader WSExamineInfoHeader `eq2:"substruct"` + Info BaseItemDescriptionV546 `eq2:"substruct"` + ItemType uint8 `eq2:"int8"` +} + +// ItemDescription Version 1096 +type ItemDescriptionV1096 struct { + InfoHeader WSExamineInfoHeader `eq2:"substruct"` + Info BaseItemDescriptionV1096 `eq2:"substruct"` + ItemType uint8 `eq2:"int8"` +} + +// ItemDescription Version 1188 +type ItemDescriptionV1188 struct { + InfoHeader WSExamineInfoHeader `eq2:"substruct"` + Info BaseItemDescriptionV1188 `eq2:"substruct"` + ItemType uint8 `eq2:"int8"` +} + +// ItemDescription Version 1208 +type ItemDescriptionV1208 struct { + InfoHeader WSExamineInfoHeader `eq2:"substruct"` + Info BaseItemDescriptionV1208 `eq2:"substruct"` + ItemType uint8 `eq2:"int8"` +} + +// ItemDescription Version 63119 +type ItemDescriptionV63119 struct { + InfoHeader WSExamineInfoHeader `eq2:"substruct"` + Info BaseItemDescriptionV63119 `eq2:"substruct"` + ItemType uint8 `eq2:"int8"` +} + +// WSExamineInfoHeader - referenced by ItemDescription structs +// This struct definition needs to be provided based on the actual WS_ExamineInfoHeader definition +type WSExamineInfoHeader struct { + // Fields need to be defined based on actual WS_ExamineInfoHeader structure + // Placeholder - replace with actual fields + Unknown1 uint32 `eq2:"int32"` + Unknown2 uint16 `eq2:"int16"` +} diff --git a/internal/packets/substructs/ItemDescriptionGeneric.go b/internal/packets/substructs/ItemDescriptionGeneric.go new file mode 100644 index 0000000..92287d4 --- /dev/null +++ b/internal/packets/substructs/ItemDescriptionGeneric.go @@ -0,0 +1,8 @@ +package substructs + +// ItemDescriptionGeneric Version 373 +type ItemDescriptionGeneric struct { + InfoHeader WSExamineInfoHeader `eq2:"substruct"` + Info BaseItemDescriptionGeneric `eq2:"substruct"` + ItemType uint8 `eq2:"int8"` +} diff --git a/internal/packets/substructs/ItemDescriptionInspect.go b/internal/packets/substructs/ItemDescriptionInspect.go new file mode 100644 index 0000000..cd39ecc --- /dev/null +++ b/internal/packets/substructs/ItemDescriptionInspect.go @@ -0,0 +1,8 @@ +package substructs + +// ItemDescriptionInspect Version 373 +type ItemDescriptionInspect struct { + InfoHeader WSExamineInfoHeader `eq2:"substruct"` + Info BaseItemDescriptionInspect `eq2:"substruct"` + ItemType uint8 `eq2:"int8"` +} diff --git a/internal/packets/substructs/ItemFooter.go b/internal/packets/substructs/ItemFooter.go new file mode 100644 index 0000000..9a7c67d --- /dev/null +++ b/internal/packets/substructs/ItemFooter.go @@ -0,0 +1,818 @@ +package substructs + +import "eq2emu/internal/common" + +// Supporting structs for nested arrays +type EffectItem struct { + SubBulletFlag uint8 `eq2:"int8"` + Effect common.EQ2String16 `eq2:"string16"` +} + +type EffectItemV546 struct { + SubBulletFlag uint8 `eq2:"int8"` + Effect common.EQ2String16 `eq2:"string16"` + Percentage uint8 `eq2:"int8"` +} + +type SetStatItem struct { + SetStatType uint8 `eq2:"int8"` + SetStatSubtype uint8 `eq2:"int8"` + SetValue int16 `eq2:"sint16,oversized=127,oversizedbyte=127"` + SetStatName common.EQ2String8 `eq2:"string8"` +} + +type SetStatItemV1188 struct { + SetStatType uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + SetStatSubtype uint16 `eq2:"int16,oversized=127,oversizedbyte=127,ifnotequals=set_stat_type_%i"` + SetValue any `eq2:"float,type2=sint16,type2criteria=set_stat_type!=6,oversized=127,oversizedbyte=127"` + SetStatName common.EQ2String8 `eq2:"string8"` + SetStatUnknown uint8 `eq2:"int8"` +} + +type SetStatItemV63119 struct { + SetStatType uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + SetStatSubtype uint16 `eq2:"int16,oversized=127,oversizedbyte=127,ifnotequals=set_stat_type_%i"` + SetValue any `eq2:"float,type2=sint32,type2criteria=set_stat_type!=6"` + SetStatName common.EQ2String8 `eq2:"string8"` + SetStatUnknown uint32 `eq2:"int32"` + SetStatUnknownMJ uint16 `eq2:"int16"` +} + +type SetEffectItem struct { + SetSubBulletFlag uint8 `eq2:"int8"` + SetEffect common.EQ2String16 `eq2:"string16"` + SetPercentage uint8 `eq2:"int8"` +} + +type SetBonusItem struct { + SetNumNeeded uint8 `eq2:"int8"` + SetStatCount uint8 `eq2:"int8"` + SetStatArray []SetStatItem `eq2:"array,arraysize=SetStatCount"` + NumSetEffects uint8 `eq2:"int8"` + SetEffectArray []SetEffectItem `eq2:"array,arraysize=NumSetEffects"` +} + +type SetBonusItemV1188 struct { + SetBonusItemsNeeded uint8 `eq2:"int8"` + SetBonusStatsCount uint8 `eq2:"int8"` + SetBonusStatsArray []SetStatItemV1188 `eq2:"array,arraysize=SetBonusStatsCount"` + SetBonusEffectsCount uint8 `eq2:"int8"` + SetBonusEffectsArray []SetBonusEffectItem `eq2:"array,arraysize=SetBonusEffectsCount"` +} + +type SetBonusItemV63119 struct { + SetBonusItemsNeeded uint8 `eq2:"int8"` + SetBonusStatsCount uint8 `eq2:"int8"` + SetBonusStatsArray []SetStatItemV63119 `eq2:"array,arraysize=SetBonusStatsCount"` + SetBonusEffectsCount uint8 `eq2:"int8"` + SetBonusEffectsArray []SetBonusEffectItem `eq2:"array,arraysize=SetBonusEffectsCount"` +} + +type SetBonusEffectItem struct { + SetBonusEffectSubBulletFlag uint8 `eq2:"int8"` + SetBonusEffectText common.EQ2String16 `eq2:"string16"` + SetBonusEffectPercentage uint8 `eq2:"int8"` +} + +type SetItemsItem struct { + SetItemsUnknown1 uint8 `eq2:"int8"` + SetItemsUnknown2 uint8 `eq2:"int8"` + SetItemName common.EQ2String16 `eq2:"string16"` +} + +type AdornItem struct { + AdornSlot uint8 `eq2:"int8"` + AdornUnknown uint32 `eq2:"int32"` + AdornName common.EQ2String16 `eq2:"string16"` + AdornTimeLeft float32 `eq2:"float"` +} + +type AdornItemV1188 struct { + AdornUnknown1 uint8 `eq2:"int8"` + AdornSlot uint8 `eq2:"int8"` + AdornUnknown2 []uint8 `eq2:"int8,len=2"` + AdornItemID uint32 `eq2:"int32"` + AdornName common.EQ2String16 `eq2:"string16"` + AdornTimeLeft float32 `eq2:"float"` + AdornUnknown3 uint32 `eq2:"int32"` +} + +type AdornItemV63119 struct { + AdornSlot uint8 `eq2:"int8"` + AdornUnknown1 uint8 `eq2:"int8"` + AdornUnknown2 []uint8 `eq2:"int8,len=2"` + AdornItemID uint32 `eq2:"int32"` + AdornName common.EQ2String16 `eq2:"string16"` + AdornTimeLeft float32 `eq2:"float"` + AdornUnknown3 uint32 `eq2:"int32"` +} + +type AdornStatItem struct { + AdornStatType uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + AdornStatSubtype int16 `eq2:"sint16,oversized=127,oversizedbyte=127,ifnotequals=adorn_stat_type_%i_%i"` + AdornValue any `eq2:"float,type2=sint16,type2criteria=stat_type!=6,oversized=127,oversizedbyte=127"` + AdornStatName common.EQ2String8 `eq2:"string8"` + AdornStatLevel uint8 `eq2:"int8"` +} + +type AdornStatItemV63119 struct { + AdornStatType uint16 `eq2:"int16,oversized=127,oversizedbyte=127"` + AdornStatSubtype int16 `eq2:"sint16,oversized=127,oversizedbyte=127,ifnotequals=adorn_stat_type_%i_%i"` + AdornValue any `eq2:"float,type2=sint32,type2criteria=adorn_stat_type!=6,oversized=127,oversizedbyte=127"` + AdornStatName common.EQ2String8 `eq2:"string8"` + AdornStatLevel uint8 `eq2:"int8"` + AdornStatUnknown1 []uint8 `eq2:"int8,len=5"` +} + +type AdornLevelItem struct { + NumAdornStats uint32 `eq2:"int32"` + AdornStatsArray []AdornStatItem `eq2:"array,arraysize=NumAdornStats"` +} + +type AdornLevelItemV63119 struct { + NumAdornStats uint32 `eq2:"int32"` + AdornStatsArray []AdornStatItemV63119 `eq2:"array,arraysize=NumAdornStats"` +} + +type TierlineItem struct { + Addon common.EQ2String16 `eq2:"string16"` + TierlineUnknown []uint8 `eq2:"int8,len=5"` +} + +// Version structs +type SubstructItemFooterV1 struct { + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` +} + +type SubstructItemFooterV373 struct { + NumEffects uint8 `eq2:"int8,ifflagnotset=loot"` + EffectArray []EffectItem `eq2:"array,arraysize=NumEffects,ifflagnotset=loot"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` +} + +type SubstructItemFooterV546 struct { + NumEffects uint8 `eq2:"int8,ifflagnotset=loot"` + EffectArray []EffectItemV546 `eq2:"array,arraysize=NumEffects,ifflagnotset=loot"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` +} + +type SubstructItemFooterV562 struct { + // NOTE: Parser needs enhancement for comma-separated conditions + // Original: IfVariableNotSet="header_info_header_unknown_0_0,header_unknown_0" + NumEffects uint8 `eq2:"int8,ifvariablenotset=header_info_header_unknown_0_0"` + EffectArray []EffectItemV546 `eq2:"array,arraysize=NumEffects"` + RequiredClasses uint64 `eq2:"int64"` + RecommendedLevel uint8 `eq2:"int8"` + StackSize uint8 `eq2:"int8"` + SetName common.EQ2String8 `eq2:"string8"` + NumSets uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetArray []SetBonusItem `eq2:"array,arraysize=NumSets"` + NumItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetItemsArray []SetItemsItem `eq2:"array,arraysize=NumItemsInSet"` + Collectable uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + CollectionNeeded uint8 `eq2:"int8,ifvariableset=footer_collectable_0"` + OffersQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + PartOfQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + OffersQuestColor uint8 `eq2:"int8,ifvariableset=footer_offers_quest_0"` + PartOfQuestColor uint8 `eq2:"int8,ifvariableset=footer_part_of_quest_0"` + UnknownSetData1 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + Charges uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + TotalCharges uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + ChargesLeft uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + UnknownSetInfo uint32 `eq2:"int32,ifvariableset=footer_set_name_0"` + UnknownSetInfo2 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3 uint32 `eq2:"int32,ifvariableset=footer_unknown_set_info2_0"` + DisplayCharges uint8 `eq2:"int8"` + CraftingFlag uint8 `eq2:"int8"` + TransmutedFlag uint8 `eq2:"int8"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` +} + +type SubstructItemFooterV860 struct { + NumEffects uint8 `eq2:"int8,ifvariablenotset=header_info_header_unknown_0_0"` + EffectArray []EffectItemV546 `eq2:"array,arraysize=NumEffects"` + RequiredClasses uint64 `eq2:"int64"` + RecommendedLevel uint8 `eq2:"int8"` + StackSize uint8 `eq2:"int8"` + SetName common.EQ2String8 `eq2:"string8"` + NumSets uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetArray []SetBonusItem `eq2:"array,arraysize=NumSets"` + NumItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetItemsArray []SetItemsItem `eq2:"array,arraysize=NumItemsInSet"` + Collectable uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + CollectionNeeded uint8 `eq2:"int8,ifvariableset=footer_collectable_0"` + OffersQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + PartOfQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + OffersQuestColor uint8 `eq2:"int8,ifvariableset=footer_offers_quest_0"` + PartOfQuestColor uint8 `eq2:"int8,ifvariableset=footer_part_of_quest_0"` + UnknownSetData1 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + Charges uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + TotalCharges uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + ChargesLeft uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + UnknownSetInfo uint32 `eq2:"int32,ifvariableset=footer_set_name_0"` + UnknownSetInfo2 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3 uint32 `eq2:"int32,ifvariableset=footer_unknown_set_info2_0"` + FooterUnknown5 uint8 `eq2:"int8"` + DisplayCharges uint8 `eq2:"int8"` + CraftingFlag uint8 `eq2:"int8"` + TransmutedFlag uint8 `eq2:"int8"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` +} + +type SubstructItemFooterV893 struct { + NumEffects uint8 `eq2:"int8,ifvariablenotset=header_info_header_unknown_0_0"` + EffectArray []EffectItemV546 `eq2:"array,arraysize=NumEffects"` + RequiredClasses uint64 `eq2:"int64"` + RecommendedLevel uint8 `eq2:"int8"` + RequiredLevel uint8 `eq2:"int8"` + StackSize uint8 `eq2:"int8"` + FooterUnknown3 uint8 `eq2:"int8"` + SetName common.EQ2String8 `eq2:"string8"` + NumSets uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetArray []SetBonusItem `eq2:"array,arraysize=NumSets"` + NumItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetItemsArray []SetItemsItem `eq2:"array,arraysize=NumItemsInSet"` + Collectable uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + CollectionNeeded uint8 `eq2:"int8,ifvariableset=footer_collectable_0"` + OffersQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + PartOfQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + OffersQuestColor uint8 `eq2:"int8,ifvariableset=footer_offers_quest_0"` + PartOfQuestColor uint8 `eq2:"int8,ifvariableset=footer_part_of_quest_0"` + UnknownSetData1 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + Charges uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + TotalCharges uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + ChargesLeft uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + UnknownSetInfo uint32 `eq2:"int32,ifvariableset=footer_set_name_0"` + UnknownSetInfo2 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3 uint32 `eq2:"int32,ifvariableset=footer_unknown_set_info2_0"` + FooterUnknown5 uint8 `eq2:"int8"` + DisplayCharges uint8 `eq2:"int8"` + CraftingFlag uint8 `eq2:"int8"` + TransmutedFlag uint8 `eq2:"int8"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` +} + +type SubstructItemFooterV927 struct { + NumEffects uint8 `eq2:"int8,ifvariablenotset=header_info_header_unknown_0_0"` + EffectArray []EffectItemV546 `eq2:"array,arraysize=NumEffects"` + RequiredClasses uint64 `eq2:"int64"` + RecommendedLevel uint8 `eq2:"int8"` + RequiredLevel uint8 `eq2:"int8"` + StackSize uint8 `eq2:"int8"` + FooterUnknown3 uint8 `eq2:"int8"` + SetName common.EQ2String8 `eq2:"string8"` + NumSets uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetArray []SetBonusItem `eq2:"array,arraysize=NumSets"` + NumItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetItemsArray []SetItemsItem `eq2:"array,arraysize=NumItemsInSet"` + FooterUnknown4 uint8 `eq2:"int8"` + Collectable uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + CollectionNeeded uint8 `eq2:"int8,ifvariableset=footer_collectable_0"` + OffersQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + PartOfQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + OffersQuestColor uint8 `eq2:"int8,ifvariableset=footer_offers_quest_0"` + PartOfQuestColor uint8 `eq2:"int8,ifvariableset=footer_part_of_quest_0"` + UnknownSetData1 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + Charges uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + TotalCharges uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + ChargesLeft uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + UnknownSetInfo uint32 `eq2:"int32,ifvariableset=footer_set_name_0"` + UnknownSetInfo2 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3 uint32 `eq2:"int32,ifvariableset=footer_unknown_set_info2_0"` + FooterUnknown5 uint8 `eq2:"int8"` + DisplayCharges uint8 `eq2:"int8"` + CraftingFlag uint8 `eq2:"int8"` + TransmutedFlag uint8 `eq2:"int8"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` +} + +type SubstructItemFooterV1027 struct { + NumEffects uint8 `eq2:"int8,ifvariablenotset=header_info_header_unknown_0_0"` + EffectArray []EffectItemV546 `eq2:"array,arraysize=NumEffects"` + RequiredClasses uint64 `eq2:"int64"` + RecommendedLevel uint8 `eq2:"int8"` + RequiredLevel uint8 `eq2:"int8"` + StackSize uint8 `eq2:"int8"` + FooterUnknown3 []uint8 `eq2:"int8,len=2"` + SetName common.EQ2String8 `eq2:"string8"` + NumSets uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetArray []SetBonusItem `eq2:"array,arraysize=NumSets"` + NumItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetItemsArray []SetItemsItem `eq2:"array,arraysize=NumItemsInSet"` + FooterUnknown4 []uint8 `eq2:"int8,len=4"` + Collectable uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + CollectionNeeded uint8 `eq2:"int8,ifvariableset=footer_collectable_0"` + OffersQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + PartOfQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + OffersQuestColor uint8 `eq2:"int8,ifvariableset=footer_offers_quest_0"` + PartOfQuestColor uint8 `eq2:"int8,ifvariableset=footer_part_of_quest_0"` + UnknownSetData1 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + Charges uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + TotalCharges uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + ChargesLeft uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + UnknownSetInfo uint32 `eq2:"int32,ifvariableset=footer_set_name_0"` + UnknownSetInfo2 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3 uint32 `eq2:"int32,ifvariableset=footer_unknown_set_info2_0"` + FooterUnknown5 []uint8 `eq2:"int8,len=2"` + DisplayCharges uint8 `eq2:"int8"` + CraftingFlag uint8 `eq2:"int8"` + TransmutedFlag uint8 `eq2:"int8"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` +} + +type SubstructItemFooterV1096 struct { + NumEffects uint8 `eq2:"int8,ifvariablenotset=header_info_header_unknown_0_0"` + EffectArray []EffectItemV546 `eq2:"array,arraysize=NumEffects"` + RequiredClasses uint64 `eq2:"int64"` + RecommendedLevel uint8 `eq2:"int8"` + RequiredLevel uint8 `eq2:"int8"` + StackSize uint8 `eq2:"int8"` + AdornFlag uint8 `eq2:"int8"` + FooterUnknown3 uint8 `eq2:"int8"` + FooterUnknown3A uint8 `eq2:"int8"` + FooterUnknown3B uint8 `eq2:"int8"` + FooterUnknown3C uint8 `eq2:"int8"` + SetName common.EQ2String8 `eq2:"string8"` + NumSets uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetArray []SetBonusItem `eq2:"array,arraysize=NumSets"` + NumItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetItemsArray []SetItemsItem `eq2:"array,arraysize=NumItemsInSet"` + TransmutedFlag uint8 `eq2:"int8"` + Collectable uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + CollectionNeeded uint8 `eq2:"int8,ifvariableset=footer_collectable_0"` + OffersQuest common.EQ2String8 `eq2:"string8"` + PartOfQuest common.EQ2String8 `eq2:"string8"` + OffersQuestColor uint8 `eq2:"int8,ifvariableset=footer_offers_quest_0"` + PartOfQuestColor uint8 `eq2:"int8,ifvariableset=footer_part_of_quest_0"` + UnknownSetData1 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + Charges uint8 `eq2:"int8"` + TotalCharges uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + ChargesLeft uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + UnknownSetInfo2 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + StatusItem uint8 `eq2:"int8"` + FooterUnknown7 uint8 `eq2:"int8"` + CraftingFlag uint8 `eq2:"int8"` + TransmutedFlagXXX uint8 `eq2:"int8"` + AdornCount uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + AdornArray []AdornItem `eq2:"array,arraysize=AdornCount"` + LockedFlag uint8 `eq2:"int8"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` +} + +type SubstructItemFooterV1188 struct { + NumEffects uint8 `eq2:"int8,ifvariablenotset=header_info_header_unknown_0_0"` + EffectArray []EffectItemV546 `eq2:"array,arraysize=NumEffects"` + RequiredClasses uint64 `eq2:"int64"` + RecommendedLevel uint8 `eq2:"int8"` + RequiredLevel uint8 `eq2:"int8"` + StackSize uint16 `eq2:"int16"` + AdornSlots []uint8 `eq2:"int8,len=6"` + SetName common.EQ2String8 `eq2:"string8"` + SetBonusListCount uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetBonusListArray []SetBonusItemV1188 `eq2:"array,arraysize=SetBonusListCount"` + NumItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetItemsArray []SetItemsItem `eq2:"array,arraysize=NumItemsInSet"` + TotalSetItemsEquipped uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + TotalSetItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + AdornFlag uint8 `eq2:"int8"` + AdornStatsActive uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornStatsTotal uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornName common.EQ2String16 `eq2:"string16,ifvariableset=footer_adorn_flag_0"` + NumAdornLevels uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornStatsUnknown1 uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornLevelArray []AdornLevelItem `eq2:"array,arraysize=NumAdornLevels"` + FooterUnknown4 uint8 `eq2:"int8"` + FooterUnknown4A uint8 `eq2:"int8,ifvariableset=footer_footer_unknown4_0"` + Collectable uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + CollectionNeeded uint8 `eq2:"int8,ifvariableset=footer_collectable_0"` + OffersQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + PartOfQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + OffersQuestColor uint8 `eq2:"int8,ifvariableset=footer_offers_quest_0"` + PartOfQuestColor uint8 `eq2:"int8,ifvariableset=footer_part_of_quest_0"` + UnknownSetData1 []uint8 `eq2:"int8,len=2,ifvariableset=footer_set_name_0"` + Charges uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + TotalCharges uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + ChargesLeft uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + UnknownSetInfo2 []uint8 `eq2:"int8,len=3,ifvariableset=footer_set_name_0"` + StatusItem []uint8 `eq2:"int8,len=2"` + CraftingFlag uint8 `eq2:"int8"` + TransmutedFlag uint8 `eq2:"int8"` + AdornCount uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + AdornArray []AdornItemV1188 `eq2:"array,arraysize=AdornCount"` + LockedFlag uint8 `eq2:"int8"` + AccountRestricted uint8 `eq2:"int8"` + FooterUnknown6 uint8 `eq2:"int8"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` + FooterUnknown7 uint8 `eq2:"int8"` +} + +type SubstructItemFooterV57048 struct { + NumEffects uint8 `eq2:"int8,ifvariablenotset=header_info_header_unknown_0_0"` + EffectArray []EffectItemV546 `eq2:"array,arraysize=NumEffects"` + RequiredClasses uint64 `eq2:"int64"` + RequiredClasses2 uint64 `eq2:"int64"` + RecommendedLevel uint8 `eq2:"int8"` + RequiredLevel uint8 `eq2:"int8"` + StackSize uint16 `eq2:"int16"` + AdornSlots []uint8 `eq2:"int8,len=6"` + SetName common.EQ2String8 `eq2:"string8"` + SetBonusListCount uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetBonusListArray []SetBonusItemV1188 `eq2:"array,arraysize=SetBonusListCount"` + NumItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetItemsArray []SetItemsItem `eq2:"array,arraysize=NumItemsInSet"` + TotalSetItemsEquipped uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + TotalSetItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + AdornFlag uint8 `eq2:"int8"` + AdornStatsActive uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornStatsTotal uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornName common.EQ2String16 `eq2:"string16,ifvariableset=footer_adorn_flag_0"` + NumAdornLevels uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornStatsUnknown1 uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornLevelArray []AdornLevelItem `eq2:"array,arraysize=NumAdornLevels"` + FooterUnknown4 uint8 `eq2:"int8"` + Collectable uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + CollectionNeeded uint8 `eq2:"int8,ifvariableset=footer_collectable_0"` + OffersQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + PartOfQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + OffersQuestColor uint8 `eq2:"int8,ifvariableset=footer_offers_quest_0"` + PartOfQuestColor uint8 `eq2:"int8,ifvariableset=footer_part_of_quest_0"` + UnknownSetData1 []uint8 `eq2:"int8,len=2,ifvariableset=footer_set_name_0"` + Charges uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + TotalCharges uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + ChargesLeft uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + UnknownSetInfo2 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3A uint32 `eq2:"int32,ifvariableset=footer_unknown_set_info3_0"` + UnknownSetInfo4 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + StatusItem []uint8 `eq2:"int8,len=2"` + CraftingFlag uint8 `eq2:"int8"` + TransmutedFlag uint8 `eq2:"int8"` + AdornCount uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + AdornArray []AdornItemV1188 `eq2:"array,arraysize=AdornCount"` + LockedFlag uint8 `eq2:"int8"` + AccountRestricted uint8 `eq2:"int8"` + FooterUnknown6 []uint8 `eq2:"int8,len=13"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` + FooterUnknown7 uint8 `eq2:"int8"` +} + +type SubstructItemFooterV58571 struct { + NumEffects uint8 `eq2:"int8,ifvariablenotset=header_info_header_unknown_0_0"` + EffectArray []EffectItemV546 `eq2:"array,arraysize=NumEffects"` + RequiredClasses uint64 `eq2:"int64"` + RequiredClasses2 uint64 `eq2:"int64"` + RecommendedLevel uint8 `eq2:"int8"` + RequiredLevel uint8 `eq2:"int8"` + StackSize uint16 `eq2:"int16"` + AdornSlots []uint8 `eq2:"int8,len=11"` + SetName common.EQ2String8 `eq2:"string8"` + SetBonusListCount uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetBonusListArray []SetBonusItemV1188 `eq2:"array,arraysize=SetBonusListCount"` + NumItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetItemsArray []SetItemsItem `eq2:"array,arraysize=NumItemsInSet"` + TotalSetItemsEquipped uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + TotalSetItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + AdornFlag uint8 `eq2:"int8"` + AdornStatsActive uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornStatsTotal uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornName common.EQ2String16 `eq2:"string16,ifvariableset=footer_adorn_flag_0"` + NumAdornLevels uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornStatsUnknown1 uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornLevelArray []AdornLevelItem `eq2:"array,arraysize=NumAdornLevels"` + FooterUnknown4 uint8 `eq2:"int8"` + Collectable uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + CollectionNeeded uint8 `eq2:"int8,ifvariableset=footer_collectable_0"` + OffersQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + PartOfQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + OffersQuestColor uint8 `eq2:"int8,ifvariableset=footer_offers_quest_0"` + PartOfQuestColor uint8 `eq2:"int8,ifvariableset=footer_part_of_quest_0"` + UnknownSetData1 []uint8 `eq2:"int8,len=2,ifvariableset=footer_set_name_0"` + Charges uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + TotalCharges uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + ChargesLeft uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + UnknownSetInfo2 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3A uint32 `eq2:"int32,ifvariableset=footer_unknown_set_info3_0"` + UnknownSetInfo4 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + StatusItem []uint8 `eq2:"int8,len=2"` + CraftingFlag uint8 `eq2:"int8"` + TransmutedFlag uint8 `eq2:"int8"` + AdornCount uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + AdornArray []AdornItemV1188 `eq2:"array,arraysize=AdornCount"` + LockedFlag uint8 `eq2:"int8"` + AccountRestricted uint8 `eq2:"int8"` + FooterUnknown6 []uint8 `eq2:"int8,len=15"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` + FooterUnknownVer58571 uint8 `eq2:"int8"` +} + +type SubstructItemFooterV58617 struct { + NumEffects uint8 `eq2:"int8,ifvariablenotset=header_info_header_unknown_0_0"` + EffectArray []EffectItemV546 `eq2:"array,arraysize=NumEffects"` + RequiredClasses uint64 `eq2:"int64"` + RequiredClasses2 uint64 `eq2:"int64"` + RecommendedLevel uint8 `eq2:"int8"` + RequiredLevel uint8 `eq2:"int8"` + StackSize uint16 `eq2:"int16"` + AdornSlots []uint8 `eq2:"int8,len=11"` + SetName common.EQ2String8 `eq2:"string8"` + SetBonusListCount uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetBonusListArray []SetBonusItemV1188 `eq2:"array,arraysize=SetBonusListCount"` + NumItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetItemsArray []SetItemsItem `eq2:"array,arraysize=NumItemsInSet"` + TotalSetItemsEquipped uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + TotalSetItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + AdornFlag uint8 `eq2:"int8"` + AdornStatsActive uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornStatsTotal uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornName common.EQ2String16 `eq2:"string16,ifvariableset=footer_adorn_flag_0"` + NumAdornLevels uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornStatsUnknown1 uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornLevelArray []AdornLevelItem `eq2:"array,arraysize=NumAdornLevels"` + FooterUnknown4 uint8 `eq2:"int8"` + Collectable uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + CollectionNeeded uint8 `eq2:"int8,ifvariableset=footer_collectable_0"` + OffersQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + PartOfQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + OffersQuestColor uint8 `eq2:"int8,ifvariableset=footer_offers_quest_0"` + PartOfQuestColor uint8 `eq2:"int8,ifvariableset=footer_part_of_quest_0"` + UnknownSetData1 []uint8 `eq2:"int8,len=2,ifvariableset=footer_set_name_0"` + Charges uint8 `eq2:"int8"` // Note: XML comment indicates removing ifvariablenotset condition + TotalCharges uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + ChargesLeft uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + UnknownSetInfo2 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3A uint32 `eq2:"int32,ifvariableset=footer_unknown_set_info3_0"` + UnknownSetInfo4 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + StatusItem []uint8 `eq2:"int8,len=2"` + CraftingFlag uint8 `eq2:"int8"` + TransmutedFlag uint8 `eq2:"int8"` + Unknown58617_1_MJ uint8 `eq2:"int8"` + AdornCount uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + AdornArray []AdornItemV1188 `eq2:"array,arraysize=AdornCount"` + LockedFlag uint8 `eq2:"int8"` + AccountRestricted uint8 `eq2:"int8"` + FooterUnknown6 []uint8 `eq2:"int8,len=17"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` + FooterUnknownVer58617 uint8 `eq2:"int8"` +} + +type SubstructItemFooterV60024 struct { + NumEffects uint8 `eq2:"int8,ifvariablenotset=header_info_header_unknown_0_0"` + EffectArray []EffectItemV546 `eq2:"array,arraysize=NumEffects"` + RequiredClasses uint64 `eq2:"int64"` + RequiredClasses2 uint64 `eq2:"int64"` + RecommendedLevel uint8 `eq2:"int8"` + RequiredLevel uint8 `eq2:"int8"` + StackSize uint16 `eq2:"int16"` + AdornSlots []uint8 `eq2:"int8,len=11"` + SetName common.EQ2String8 `eq2:"string8"` + SetBonusListCount uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetBonusListArray []SetBonusItemV1188 `eq2:"array,arraysize=SetBonusListCount"` + NumItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetItemsArray []SetItemsItem `eq2:"array,arraysize=NumItemsInSet"` + TotalSetItemsEquipped uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + TotalSetItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + AdornFlag uint8 `eq2:"int8"` + AdornStatsActive uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornStatsTotal uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornName common.EQ2String16 `eq2:"string16,ifvariableset=footer_adorn_flag_0"` + NumAdornLevels uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornStatsUnknown1 uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornLevelArray []AdornLevelItem `eq2:"array,arraysize=NumAdornLevels"` + FooterUnknown4 uint8 `eq2:"int8"` + Collectable uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + CollectionNeeded uint8 `eq2:"int8,ifvariableset=footer_collectable_0"` + OffersQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + PartOfQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + OffersQuestColor uint8 `eq2:"int8,ifvariableset=footer_offers_quest_0"` + PartOfQuestColor uint8 `eq2:"int8,ifvariableset=footer_part_of_quest_0"` + UnknownSetData1 []uint8 `eq2:"int8,len=2,ifvariableset=footer_set_name_0"` + Charges uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + TotalCharges uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + ChargesLeft uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + UnknownSetInfo2 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3A uint32 `eq2:"int32,ifvariableset=footer_unknown_set_info3_0"` + UnknownSetInfo4 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + StatusItem uint8 `eq2:"int8"` + Unknown60024A uint8 `eq2:"int8"` + Unknown60024B []uint8 `eq2:"int8,len=4,ifvariableset=footer_unknown60024a_0"` + CraftingFlag uint8 `eq2:"int8"` + TransmutedFlag uint8 `eq2:"int8"` + AdornCount uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + AdornArray []AdornItemV1188 `eq2:"array,arraysize=AdornCount"` + LockedFlag uint8 `eq2:"int8"` + AccountRestricted uint8 `eq2:"int8"` + FooterUnknown6 []uint8 `eq2:"int8,len=18"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` + FooterUnknown7 uint8 `eq2:"int8"` +} + +type SubstructItemFooterV60055 struct { + NumEffects uint8 `eq2:"int8,ifvariablenotset=header_info_header_unknown_0_0"` + EffectArray []EffectItemV546 `eq2:"array,arraysize=NumEffects"` + RequiredClasses uint64 `eq2:"int64"` + RequiredClasses2 uint64 `eq2:"int64"` + RecommendedLevel uint8 `eq2:"int8"` + RequiredLevel uint8 `eq2:"int8"` + StackSize uint16 `eq2:"int16"` + AdornSlots []uint8 `eq2:"int8,len=11"` + SetName common.EQ2String8 `eq2:"string8"` + SetBonusListCount uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetBonusListArray []SetBonusItemV1188 `eq2:"array,arraysize=SetBonusListCount"` + NumItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetItemsArray []SetItemsItem `eq2:"array,arraysize=NumItemsInSet"` + TotalSetItemsEquipped uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + TotalSetItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + AdornFlag uint8 `eq2:"int8"` + AdornStatsActive uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornStatsTotal uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornName common.EQ2String16 `eq2:"string16,ifvariableset=footer_adorn_flag_0"` + NumAdornLevels uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornStatsUnknown1 uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornLevelArray []AdornLevelItem `eq2:"array,arraysize=NumAdornLevels"` + FooterUnknown4 uint8 `eq2:"int8"` + Unknown60055ZA uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + Collectable uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + CollectionNeeded uint8 `eq2:"int8,ifvariableset=footer_collectable_0"` + Unknown60055Z uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + OffersQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + PartOfQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + OffersQuestColor uint8 `eq2:"int8,ifvariableset=footer_offers_quest_0"` + PartOfQuestColor uint8 `eq2:"int8,ifvariableset=footer_part_of_quest_0"` + UnknownSetData1 []uint8 `eq2:"int8,len=2,ifvariableset=footer_set_name_0"` + Charges uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + TotalCharges uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + ChargesLeft uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + UnknownSetInfo2 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3A uint32 `eq2:"int32,ifvariableset=footer_unknown_set_info3_0"` + UnknownSetInfo4 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownEmem1 uint8 `eq2:"int8"` + UnknownEmem2 uint8 `eq2:"int8"` + UnknownEmem3 uint8 `eq2:"int8"` + UnknownEmem4 uint8 `eq2:"int8"` + StatusItem uint32 `eq2:"int32"` + CraftingFlag uint8 `eq2:"int8"` + TransmutedFlag uint8 `eq2:"int8"` + AdornCount uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + AdornArray []AdornItemV1188 `eq2:"array,arraysize=AdornCount"` + LockedFlag uint8 `eq2:"int8"` + AccountRestricted uint8 `eq2:"int8"` + FooterUnknown6A uint8 `eq2:"int8"` + FooterUnknown6B uint8 `eq2:"int8"` + FooterUnknown6C uint8 `eq2:"int8"` + FooterUnknown6D uint8 `eq2:"int8"` + FooterUnknown6E uint8 `eq2:"int8"` + FooterUnknown6F uint8 `eq2:"int8"` + FooterUnknown6G uint8 `eq2:"int8"` + FooterUnknown6H uint8 `eq2:"int8"` + FooterUnknown6I uint8 `eq2:"int8"` + FooterUnknown6J uint8 `eq2:"int8"` + FooterUnknown6K uint8 `eq2:"int8"` + FooterUnknown6L uint8 `eq2:"int8"` + FooterUnknown6M uint8 `eq2:"int8"` + FooterUnknown6N uint8 `eq2:"int8"` + FooterUnknown6O uint8 `eq2:"int8"` + FooterUnknown6 []uint8 `eq2:"int8,len=2"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` + FooterUnknown7 uint8 `eq2:"int8"` +} + +type SubstructItemFooterV60174 struct { + NumEffects uint8 `eq2:"int8,ifvariablenotset=header_info_header_unknown_0_0"` + EffectArray []EffectItemV546 `eq2:"array,arraysize=NumEffects"` + FooterUnknown2 uint8 `eq2:"int8"` + RequiredClasses uint64 `eq2:"int64"` + RequiredClasses2 uint64 `eq2:"int64"` + RecommendedLevel uint8 `eq2:"int8"` + RequiredLevel uint8 `eq2:"int8"` + StackSize uint16 `eq2:"int16"` + AdornSlots []uint8 `eq2:"int8,len=11"` + SetName common.EQ2String8 `eq2:"string8"` + SetBonusListCount uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetBonusListArray []SetBonusItemV1188 `eq2:"array,arraysize=SetBonusListCount"` + NumItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetItemsArray []SetItemsItem `eq2:"array,arraysize=NumItemsInSet"` + TotalSetItemsEquipped uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + TotalSetItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + AdornFlag uint8 `eq2:"int8"` + AdornStatsActive uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornStatsTotal uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornName common.EQ2String16 `eq2:"string16,ifvariableset=footer_adorn_flag_0"` + NumAdornLevels uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornStatsUnknown1 uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornLevelArray []AdornLevelItem `eq2:"array,arraysize=NumAdornLevels"` + FooterUnknown4 uint8 `eq2:"int8"` + Unknown60055ZA uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + Collectable uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + CollectionNeeded uint8 `eq2:"int8,ifvariableset=footer_collectable_0"` + Unknown60055Z uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + OffersQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + PartOfQuest common.EQ2String8 `eq2:"string8,ifvariablenotset=footer_set_name_0"` + OffersQuestColor uint8 `eq2:"int8,ifvariableset=footer_offers_quest_0"` + PartOfQuestColor uint8 `eq2:"int8,ifvariableset=footer_part_of_quest_0"` + UnknownSetData1 []uint8 `eq2:"int8,len=2,ifvariableset=footer_set_name_0"` + Charges uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + TotalCharges uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + ChargesLeft uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + UnknownSetInfo2 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3A uint32 `eq2:"int32,ifvariableset=footer_unknown_set_info3_0"` + UnknownSetInfo4 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + StatusItem uint32 `eq2:"int32"` + Unknown60024A uint8 `eq2:"int8"` + TransmutedFlag uint8 `eq2:"int8"` + AdornCount uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + AdornArray []AdornItemV1188 `eq2:"array,arraysize=AdornCount"` + LockedFlag uint8 `eq2:"int8"` + AccountRestricted uint8 `eq2:"int8"` + FooterUnknown6A uint8 `eq2:"int8"` + CraftingFlag uint8 `eq2:"int8"` + FooterUnknown6B []uint8 `eq2:"int8,len=21"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` + FooterUnknown7 uint8 `eq2:"int8"` +} + +type SubstructItemFooterV63119 struct { + NumEffects uint8 `eq2:"int8,ifvariablenotset=header_info_header_unknown_0_0"` + EffectArray []EffectItemV546 `eq2:"array,arraysize=NumEffects"` + Tierline uint8 `eq2:"int8"` + TierlineArray []TierlineItem `eq2:"array,arraysize=Tierline"` + RequiredClasses uint64 `eq2:"int64"` + RequiredClasses2 uint64 `eq2:"int64"` + RecommendedLevel uint8 `eq2:"int8"` + RequiredLevel uint8 `eq2:"int8"` + StackSize uint16 `eq2:"int16"` + AdornSlots []uint8 `eq2:"int8,len=11"` + FooterUnknown3MJ1 uint8 `eq2:"int8"` + SetName common.EQ2String8 `eq2:"string8"` + SetBonusListCount uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetBonusListArray []SetBonusItemV63119 `eq2:"array,arraysize=SetBonusListCount"` + NumItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + SetItemsArray []SetItemsItem `eq2:"array,arraysize=NumItemsInSet"` + TotalSetItemsEquipped uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + TotalSetItemsInSet uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + AdornFlag uint8 `eq2:"int8"` + AdornUnknown64A uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornUnknown64B uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornStatsActive uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornStatsTotal uint8 `eq2:"int8,ifvariableset=footer_adorn_flag_0"` + AdornName common.EQ2String16 `eq2:"string16,ifvariableset=footer_adorn_flag_0"` + NumAdornLevels uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornStatsUnknown1 uint32 `eq2:"int32,ifvariableset=footer_adorn_flag_0"` + AdornLevelArray []AdornLevelItemV63119 `eq2:"array,arraysize=NumAdornLevels"` + FooterUnknown4 uint8 `eq2:"int8"` + Unknown60055ZA uint8 `eq2:"int8,ifvariableset=foot_set_name_0"` + Collectable uint8 `eq2:"int8"` + CollectionNeeded uint8 `eq2:"int8,ifvariableset=footer_collectable_0"` + Unknown60055Z uint8 `eq2:"int8"` + OffersQuest common.EQ2String8 `eq2:"string8"` + PartOfQuest common.EQ2String8 `eq2:"string8"` + OffersQuestColor uint8 `eq2:"int8,ifvariableset=footer_offers_quest_0"` + PartOfQuestColor uint8 `eq2:"int8,ifvariableset=footer_part_of_quest_0"` + UnknownSetData1 []uint8 `eq2:"int8,len=2,ifvariableset=footer_set_name_0"` + Charges uint8 `eq2:"int8"` + TotalCharges uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + ChargesLeft uint16 `eq2:"int16,ifvariableset=footer_charges_0"` + UnknownSetInfo2 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownSetInfo3A uint32 `eq2:"int32,ifvariableset=footer_unknown_set_info3_0"` + UnknownSetInfo4 uint8 `eq2:"int8,ifvariableset=footer_set_name_0"` + UnknownEmem1 []uint8 `eq2:"int8,len=4"` + StatusItem uint32 `eq2:"int32"` + Unknown60024B uint8 `eq2:"int8"` + TransmutedFlag uint8 `eq2:"int8"` + UnknownMJ38A uint8 `eq2:"int8"` + UnknownMJ38B uint8 `eq2:"int8"` + CraftingFlag uint8 `eq2:"int8"` + UnknownMJ38D uint8 `eq2:"int8"` + AdornCount uint8 `eq2:"int8"` + AdornArray []AdornItemV63119 `eq2:"array,arraysize=AdornCount"` + LockedFlag uint8 `eq2:"int8"` + UnknownMJ38C uint8 `eq2:"int8"` + AccountRestricted uint8 `eq2:"int8"` + FooterUnknown6B []uint8 `eq2:"int8,len=7"` + FooterUnknown6C uint32 `eq2:"int32,ifvariablenotset=footer_set_name_0"` + FooterUnknown6D uint8 `eq2:"int8,ifvariablenotset=footer_set_name_0"` + Name common.EQ2String8 `eq2:"string8"` + Description common.EQ2String16 `eq2:"string16"` + FooterUnknown7 uint8 `eq2:"int8"` +} diff --git a/internal/packets/substructs/ItemInfo.go b/internal/packets/substructs/ItemInfo.go new file mode 100644 index 0000000..5cf201d --- /dev/null +++ b/internal/packets/substructs/ItemInfo.go @@ -0,0 +1,12 @@ +package substructs + +// ItemInfo Version 63119 +type ItemInfo struct { + NumItems uint16 `eq2:"int16"` + ItemsArray []ItemIndex `eq2:"array,arraysize=NumItems"` +} + +type ItemIndex struct { + ItemIndex uint16 `eq2:"int16"` + TabUnknown2 uint32 `eq2:"int32"` +}