Merged current DizerCore with TrinityCore#31973 as it provided cleaner solution
Druid forms are now unique to race and should remain, with fix to moonkin form and extensive modifications to barbershop code to allow for druid forms to remain post accepting the change.
fixed:
Barbershop not accepting changes based on player selection
src/server/game/DataStores/DB2Stores.cpp :
Register all shapeshift-form customization options for every race/gender (the all-options block with std::ranges::find dedup) so ValidateAppearance no longer rejects form options like moonkin's 922 + 8654..8664
src/server/game/Handlers/CharacterHandler.cpp:
Four logic changes in HandleAlterAppearance plus one include fix:
(a) partial-packet merge so a single form option doesn't wipe hair/skin/face;
(b) seat-check bypass when packet.CustomizedChrModelID != 0;
(c) gender clamp so an invalid NewSex == 3 falls back to native gender;
(d) instant display refresh via GetModelForForm/SetDisplayId, SpellAuraEffect;
Changes proposed:
Issues addressed:
Closes # (insert issue tracker number)
29664
Tests performed:
Known issues and TODO list: (add/remove lines as needed)
None that i can think of