diff --git a/src/glue/CCharacterCreation.cpp b/src/glue/CCharacterCreation.cpp index 0b40688..d99ada1 100644 --- a/src/glue/CCharacterCreation.cpp +++ b/src/glue/CCharacterCreation.cpp @@ -109,6 +109,18 @@ void CCharacterCreation::GetRandomRaceAndSex(ComponentData* data) { data->sexID = UNITSEX_MALE; } +bool CCharacterCreation::IsClassValid(int32_t classID) { + for (int32_t i = 0; i < CCharacterCreation::s_classes.Count(); i++) { + auto classRec = CCharacterCreation::s_classes[i]; + + if (classRec->m_ID == classID) { + return true; + } + } + + return false; +} + void CCharacterCreation::ResetCharCustomizeInfo() { if (!CCharacterCreation::s_charCustomizeFrame) { return; @@ -139,5 +151,27 @@ void CCharacterCreation::ResetCharCustomizeInfo() { } void CCharacterCreation::SetSelectedClass(int32_t classID) { - // TODO + if (!CCharacterCreation::IsClassValid(classID)) { + return; + } + + CCharacterCreation::s_selectedClassID = classID; + + ComponentData data = {}; + data.raceID = CCharacterCreation::s_character->m_data.raceID; + data.sexID = CCharacterCreation::s_character->m_data.sexID; + data.classID = classID; + data.skinColorID = CCharacterCreation::s_character->m_data.skinColorID; + data.hairStyleID = CCharacterCreation::s_character->m_data.hairStyleID; + data.hairColorID = CCharacterCreation::s_character->m_data.hairColorID; + data.facialHairStyleID = CCharacterCreation::s_character->m_data.facialHairStyleID; + data.faceID = CCharacterCreation::s_character->m_data.faceID; + + // TODO CCharacterComponent::ValidateComponentData(&data, 0); + + CCharacterCreation::CreateComponent(&data, false); + + CCharacterCreation::Dress(); + + CGlueLoading::StartLoad(CCharacterCreation::s_character, true); } diff --git a/src/glue/CCharacterCreation.hpp b/src/glue/CCharacterCreation.hpp index 55e81d0..7908147 100644 --- a/src/glue/CCharacterCreation.hpp +++ b/src/glue/CCharacterCreation.hpp @@ -25,6 +25,7 @@ class CCharacterCreation { static void Dress(); static int32_t GetRandomClassID(); static void GetRandomRaceAndSex(ComponentData* data); + static bool IsClassValid(int32_t classID); static void ResetCharCustomizeInfo(); static void SetSelectedClass(int32_t classID); };