DB/SpellChainEffects: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
Barncastle (talk | contribs) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 10: | Line 10: | ||
{{Template:Type|stringref}} m_Texture; | {{Template:Type|stringref}} m_Texture; | ||
}; | }; | ||
== | ==3.3.5a.12340, 4.3.4.15595== | ||
struct SpellChainEffectsEntry // sizeof(0xB4) | struct SpellChainEffectsEntry // sizeof(0xB4) | ||
{ | { | ||
Line 62: | Line 62: | ||
m_WavePhase; // +0xB0, size 0x4, type 3 | m_WavePhase; // +0xB0, size 0x4, type 3 | ||
}; | }; | ||
===m_Combo=== | |||
<code>m_Combo</code> is an encoded uint32_t array containing {{Template:DBField|table=SpellChainEffects|column=ID}}s, it is the predecessor of <code>m_SpellChainEffectID</code>. This is stored in the DB as the byte representation of this array converted to a string. | |||
The client parses this data by reading, decoding (<code>CLightning::DecodeChainEffectsID</code>) and validating each uint32_t one at a time. Reading will cease if one of the following conditions occurs: | |||
#All field data is read | |||
#An invalid {{Template:DBField|table=SpellChainEffects|column=ID}} is found | |||
#12 {{Template:DBField|table=SpellChainEffects|column=ID}}s have been read (additional data is simply ignored) | |||
Note: It appears any referenced records without a valid and accessible <code>m_Texture</code> will be skipped | |||
uint32_t CLightning::DecodeChainEffectsID(uint32_t value) { | |||
return ( | |||
( value & 0xFEFEFEFE) | | |||
((value & 0x08000000) >> 04) | | |||
((value & 0x04000000) >> 11) | | |||
((value & 0x40000000) >> 14) | | |||
((value & 0x02000000) >> 18) | | |||
((value & 0x20000000) >> 21) | | |||
((value & 0x10000000) >> 28) | |||
) & 0xFFFFFF; | |||
} | |||
==6.0.1.18179== | ==6.0.1.18179== | ||
Line 72: | Line 93: | ||
uint32_t m_SegDuration; | uint32_t m_SegDuration; | ||
uint32_t m_SegDelay; | uint32_t m_SegDelay; | ||
uint32_t m_Flags; | uint32_t m_Flags; // &0x20: CHAINFXFLAG_PULSING_ENABLED | ||
uint32_t m_JointCount; | uint32_t m_JointCount; | ||
float m_JointOffsetRadius; | float m_JointOffsetRadius; | ||
Line 116: | Line 137: | ||
}; | }; | ||
[[Category:DBC]] | [[Category:DBC]] | ||
[[Category:DBC_Alpha]] | |||
[[Category:DBC_Vanilla]] | |||
[[Category:DBC_WotLK]] | [[Category:DBC_WotLK]] | ||
[[Category:DBC_WoD]][[Category:6.0.1.18179]] | [[Category:DBC_WoD]][[Category:6.0.1.18179]] |
Revision as of 14:59, 15 July 2018
0.5.3.3368, 1.12.1.5875
struct SpellChainEffectsRec { uint32_t m_ID; float m_AvgSegLen; float m_Width; float m_NoiseScale; float m_TexCoordScale; uint32_t m_SegDuration; uint32_t m_SegDelay; stringrefⁱ m_Texture; };
3.3.5a.12340, 4.3.4.15595
struct SpellChainEffectsEntry // sizeof(0xB4) { m_ID; // +0x0, size 0x4, type 0 m_AvgSegLen; // +0x4, size 0x4, type 3 m_Width; // +0x8, size 0x4, type 3 m_NoiseScale; // +0xC, size 0x4, type 3 m_TexCoordScale; // +0x10, size 0x4, type 3 m_SegDuration; // +0x14, size 0x4, type 0 m_SegDelay; // +0x18, size 0x4, type 0 m_Texture; // +0x1C, size 0x4, type 2 m_Flags; // +0x20, size 0x4, type 0 m_JointCount; // +0x24, size 0x4, type 0 m_JointOffsetRadius; // +0x28, size 0x4, type 3 m_JointsPerMinorJoint; // +0x2C, size 0x4, type 0 m_MinorJointsPerMajorJoint; // +0x30, size 0x4, type 0 m_MinorJointScale; // +0x34, size 0x4, type 3 m_MajorJointScale; // +0x38, size 0x4, type 3 m_JointMoveSpeed; // +0x3C, size 0x4, type 3 m_JointSmoothness; // +0x40, size 0x4, type 3 m_MinDurationBetweenJointJumps; // +0x44, size 0x4, type 3 m_MaxDurationBetweenJointJumps; // +0x48, size 0x4, type 3 m_WaveHeight; // +0x4C, size 0x4, type 3 m_WaveFreq; // +0x50, size 0x4, type 3 m_WaveSpeed; // +0x54, size 0x4, type 3 m_MinWaveAngle; // +0x58, size 0x4, type 3 m_MaxWaveAngle; // +0x5C, size 0x4, type 3 m_MinWaveSpin; // +0x60, size 0x4, type 3 m_MaxWaveSpin; // +0x64, size 0x4, type 3 m_ArcHeight; // +0x68, size 0x4, type 3 m_MinArcAngle; // +0x6C, size 0x4, type 3 m_MaxArcAngle; // +0x70, size 0x4, type 3 m_MinArcSpin; // +0x74, size 0x4, type 3 m_MaxArcSpin; // +0x78, size 0x4, type 3 m_DelayBetweenEffects; // +0x7C, size 0x4, type 3 m_MinFlickerOnDuration; // +0x80, size 0x4, type 3 m_MaxFlickerOnDuration; // +0x84, size 0x4, type 3 m_MinFlickerOffDuration; // +0x88, size 0x4, type 3 m_MaxFlickerOffDuration; // +0x8C, size 0x4, type 3 m_PulseSpeed; // +0x90, size 0x4, type 3 m_PulseOnLength; // +0x94, size 0x4, type 3 m_PulseFadeLength; // +0x98, size 0x4, type 3 m_Alpha; // +0x9C, size 0x1, type 0 m_Red; // +0x9D, size 0x1, type 0 m_Green; // +0x9E, size 0x1, type 0 m_Blue; // +0x9F, size 0x1, type 0 m_BlendMode; // +0xA0, size 0x1, type 0 m_Combo; // +0xA4, size 0x4, type 2 m_RenderLayer; // +0xA8, size 0x4, type 0 m_TextureLength; // +0xAC, size 0x4, type 3 m_WavePhase; // +0xB0, size 0x4, type 3 };
m_Combo
m_Combo
is an encoded uint32_t array containing SpellChainEffectsRec::IDs, it is the predecessor of m_SpellChainEffectID
. This is stored in the DB as the byte representation of this array converted to a string.
The client parses this data by reading, decoding (CLightning::DecodeChainEffectsID
) and validating each uint32_t one at a time. Reading will cease if one of the following conditions occurs:
- All field data is read
- An invalid SpellChainEffectsRec::ID is found
- 12 SpellChainEffectsRec::IDs have been read (additional data is simply ignored)
Note: It appears any referenced records without a valid and accessible m_Texture
will be skipped
uint32_t CLightning::DecodeChainEffectsID(uint32_t value) { return ( ( value & 0xFEFEFEFE) | ((value & 0x08000000) >> 04) | ((value & 0x04000000) >> 11) | ((value & 0x40000000) >> 14) | ((value & 0x02000000) >> 18) | ((value & 0x20000000) >> 21) | ((value & 0x10000000) >> 28) ) & 0xFFFFFF; }
6.0.1.18179
struct SpellChainEffectsRec { uint32_t m_ID; float m_AvgSegLen; float m_Width; float m_NoiseScale; float m_TexCoordScale; uint32_t m_SegDuration; uint32_t m_SegDelay; uint32_t m_Flags; // &0x20: CHAINFXFLAG_PULSING_ENABLED uint32_t m_JointCount; float m_JointOffsetRadius; uint32_t m_JointsPerMinorJoint; uint32_t m_MinorJointsPerMajorJoint; float m_MinorJointScale; float m_MajorJointScale; float m_JointMoveSpeed; float m_JointSmoothness; float m_MinDurationBetweenJointJumps; float m_MaxDurationBetweenJointJumps; float m_WaveHeight; float m_WaveFreq; float m_WaveSpeed; float m_MinWaveAngle; float m_MaxWaveAngle; float m_MinWaveSpin; float m_MaxWaveSpin; float m_ArcHeight; float m_MinArcAngle; float m_MaxArcAngle; float m_MinArcSpin; float m_MaxArcSpin; float m_DelayBetweenEffects; float m_MinFlickerOnDuration; float m_MaxFlickerOnDuration; float m_MinFlickerOffDuration; float m_MaxFlickerOffDuration; float m_PulseSpeed; float m_PulseOnLength; float m_PulseFadeLength; uint8_t m_Alpha; uint8_t m_Red; uint8_t m_Green; uint8_t m_Blue; uint8_t m_BlendMode; uint8_t padding_0[3]; uint32_t m_RenderLayer; float m_TextureLength; float m_WavePhase; uint32_t m_SpellChainEffectID[11]; stringrefⁱ m_Texture; };