#pragma once namespace { enum { ALPHA_NONE, ALPHA_OPEN, ALPHA_CLOSE, ALPHA_OPENING, }; }; class SUICreateCharSecondDlg : public SUIWnd { public: SUICreateCharSecondDlg( SGameManager* pGameManager ) : SUIWnd( pGameManager ) , m_nCurHair(0), m_nCurFace(0), m_nCurBody(0), m_nCurHairColor(0), m_nSelectedHairColor(0), m_nCurSkinColor(0), m_bAniCam(false), m_nCurSex(0), m_nCurRace(0), m_nCurDeco(0), m_nHairPosition(0), m_nFacePosition(0), m_nBodyPosition(0), m_nHairColorPosition(0), m_nSkinColorPosition(0), m_nDecoPosition(0), m_nSelectFace(0), m_nSelectDeco(0), m_nSelectHair(0), m_nSelectSkinColor(0), m_nSelectBody(0) { if (nReferences == 0) { nReferences++; m_CharacterSelectionPoints = new std::map; (*m_CharacterSelectionPoints)["select0000"] = 0; // Face #0 (*m_CharacterSelectionPoints)["select0001"] = 1; // Face #1 (*m_CharacterSelectionPoints)["select0002"] = 2; // Face #2 (*m_CharacterSelectionPoints)["select0003"] = 3; // Face #3 (*m_CharacterSelectionPoints)["select0004"] = 4; // Face #4 (*m_CharacterSelectionPoints)["select0005"] = 5; // Face #5 (*m_CharacterSelectionPoints)["select0006"] = 6; // Face #6 (*m_CharacterSelectionPoints)["select0007"] = 7; // Face #7 (*m_CharacterSelectionPoints)["select0008"] = 8; // Face #8 (*m_CharacterSelectionPoints)["select0009"] = 9; // Face #9 (*m_CharacterSelectionPoints)["select0010"] = 10; // Face #10 (*m_CharacterSelectionPoints)["select0100"] = 100; // Tatoo #0 (*m_CharacterSelectionPoints)["select0101"] = 101; // Tatoo #1 (*m_CharacterSelectionPoints)["select0102"] = 102; // Tatoo #2 (*m_CharacterSelectionPoints)["select0103"] = 103; // Tatoo #3 (*m_CharacterSelectionPoints)["select0104"] = 104; // Tatoo #4 (*m_CharacterSelectionPoints)["select0105"] = 105; // Tatoo #5 (*m_CharacterSelectionPoints)["select0106"] = 106; // Tatoo #6 (*m_CharacterSelectionPoints)["select0107"] = 107; // Tatoo #7 (*m_CharacterSelectionPoints)["select0108"] = 108; // Tatoo #8 (*m_CharacterSelectionPoints)["select0109"] = 109; // Tatoo #9 (*m_CharacterSelectionPoints)["select0110"] = 110; // Tatoo #10 (*m_CharacterSelectionPoints)["select0111"] = 111; // Tatoo #11 (*m_CharacterSelectionPoints)["select0112"] = 112; // Tatoo #12 (*m_CharacterSelectionPoints)["select0113"] = 113; // Tatoo #13 (*m_CharacterSelectionPoints)["select0114"] = 114; // Tatoo #14 (*m_CharacterSelectionPoints)["select0115"] = 115; // Tatoo #15 (*m_CharacterSelectionPoints)["select0116"] = 116; // Tatoo #16 (*m_CharacterSelectionPoints)["select0117"] = 117; // Tatoo #17 (*m_CharacterSelectionPoints)["select0118"] = 118; // Tatoo #18 (*m_CharacterSelectionPoints)["select0119"] = 119; // Tatoo #19 (*m_CharacterSelectionPoints)["select0200"] = 200; // Hair #0 (*m_CharacterSelectionPoints)["select0201"] = 201; // Hair #1 (*m_CharacterSelectionPoints)["select0202"] = 202; // Hair #2 (*m_CharacterSelectionPoints)["select0203"] = 203; // Hair #3 (*m_CharacterSelectionPoints)["select0204"] = 204; // Hair #4 (*m_CharacterSelectionPoints)["select0205"] = 205; // Hair #5 (*m_CharacterSelectionPoints)["select0206"] = 206; // Hair #6 (*m_CharacterSelectionPoints)["select0207"] = 207; // Hair #7 (*m_CharacterSelectionPoints)["select0300"] = 300; // Hairdye #0 (*m_CharacterSelectionPoints)["select0301"] = 301; // Hairdye #1 (*m_CharacterSelectionPoints)["select0302"] = 302; // Hairdye #2 (*m_CharacterSelectionPoints)["select0303"] = 303; // Hairdye #3 (*m_CharacterSelectionPoints)["select0304"] = 304; // Hairdye #4 (*m_CharacterSelectionPoints)["select0305"] = 305; // Hairdye #5 (*m_CharacterSelectionPoints)["select0306"] = 306; // Hairdye #6 (*m_CharacterSelectionPoints)["select0307"] = 307; // Hairdye #7 (*m_CharacterSelectionPoints)["select0308"] = 308; // Hairdye #8 (*m_CharacterSelectionPoints)["select0309"] = 309; // Hairdye #9 (*m_CharacterSelectionPoints)["select0310"] = 310; // Hairdye #10 (*m_CharacterSelectionPoints)["select0311"] = 311; // Hairdye #11 (*m_CharacterSelectionPoints)["select0312"] = 312; // Hairdye #12 (*m_CharacterSelectionPoints)["select0313"] = 313; // Hairdye #13 (*m_CharacterSelectionPoints)["select0314"] = 314; // Hairdye #14 (*m_CharacterSelectionPoints)["select0315"] = 315; // Hairdye #15 (*m_CharacterSelectionPoints)["select0316"] = 316; // Hairdye #16 (*m_CharacterSelectionPoints)["select0317"] = 317; // Hairdye #17 (*m_CharacterSelectionPoints)["select0318"] = 318; // Hairdye #18 (*m_CharacterSelectionPoints)["select0319"] = 319; // Hairdye #19 (*m_CharacterSelectionPoints)["select0320"] = 320; // Hairdye #20 (*m_CharacterSelectionPoints)["select0321"] = 321; // Hairdye #21 (*m_CharacterSelectionPoints)["select0322"] = 322; // Hairdye #22 (*m_CharacterSelectionPoints)["select0323"] = 323; // Hairdye #23 (*m_CharacterSelectionPoints)["select0324"] = 324; // Hairdye #24 (*m_CharacterSelectionPoints)["select0325"] = 325; // Hairdye #25 (*m_CharacterSelectionPoints)["select0326"] = 326; // Hairdye #26 (*m_CharacterSelectionPoints)["select0327"] = 327; // Hairdye #27 (*m_CharacterSelectionPoints)["select0328"] = 328; // Hairdye #28 (*m_CharacterSelectionPoints)["select0329"] = 329; // Hairdye #29 (*m_CharacterSelectionPoints)["select0330"] = 330; // Hairdye #30 (*m_CharacterSelectionPoints)["select0331"] = 331; // Hairdye #31 (*m_CharacterSelectionPoints)["select0332"] = 332; // Hairdye #32 (*m_CharacterSelectionPoints)["select0333"] = 333; // Hairdye #33 (*m_CharacterSelectionPoints)["select0400"] = 400; // Clothes (Outfit) #0 (*m_CharacterSelectionPoints)["select0401"] = 401; // Clothes (Outfit) #1 (*m_CharacterSelectionPoints)["select0402"] = 402; // Clothes (Outfit) #2 (*m_CharacterSelectionPoints)["select0403"] = 403; // Clothes (Outfit) #3 (*m_CharacterSelectionPoints)["select0500"] = 500; // Skin Color #0 (*m_CharacterSelectionPoints)["select0501"] = 501; // Skin Color #1 (*m_CharacterSelectionPoints)["select0502"] = 502; // Skin Color #2 (*m_CharacterSelectionPoints)["select0503"] = 503; // Skin Color #3 (*m_CharacterSelectionPoints)["select0504"] = 504; // Skin Color #4 (*m_CharacterSelectionPoints)["select0505"] = 505; // Skin Color #5 (*m_CharacterSelectionPoints)["select0506"] = 506; // Skin Color #6 (*m_CharacterSelectionPoints)["select0507"] = 507; // Skin Color #7 (*m_CharacterSelectionPoints)["select0508"] = 508; // Skin Color #8 (*m_CharacterSelectionPoints)["select0509"] = 509; // Skin Color #9 (*m_CharacterSelectionPoints)["select0510"] = 510; // Skin Color #10 (*m_CharacterSelectionPoints)["select0511"] = 511; // Skin Color #11 m_CharacterHairDyesMap = new std::map; // Hair colors (*m_CharacterHairDyesMap)[300] = 2815; (*m_CharacterHairDyesMap)[301] = 11975; (*m_CharacterHairDyesMap)[302] = 35583; (*m_CharacterHairDyesMap)[303] = 6121882; (*m_CharacterHairDyesMap)[304] = 4030637; (*m_CharacterHairDyesMap)[305] = 56575; (*m_CharacterHairDyesMap)[306] = 38077; (*m_CharacterHairDyesMap)[307] = 49075; (*m_CharacterHairDyesMap)[308] = 4489344; (*m_CharacterHairDyesMap)[309] = 6783118; (*m_CharacterHairDyesMap)[310] = 8453915; (*m_CharacterHairDyesMap)[311] = 55104; (*m_CharacterHairDyesMap)[312] = 2198622; (*m_CharacterHairDyesMap)[313] = 3962666; (*m_CharacterHairDyesMap)[314] = 13369152; (*m_CharacterHairDyesMap)[315] = 15055633; (*m_CharacterHairDyesMap)[316] = 10521399; (*m_CharacterHairDyesMap)[317] = 9463602; (*m_CharacterHairDyesMap)[318] = 4796732; (*m_CharacterHairDyesMap)[319] = 9213762; (*m_CharacterHairDyesMap)[320] = 15204352; (*m_CharacterHairDyesMap)[321] = 11479296; (*m_CharacterHairDyesMap)[322] = 11492096; (*m_CharacterHairDyesMap)[323] = 9317455; (*m_CharacterHairDyesMap)[324] = 10439219; (*m_CharacterHairDyesMap)[325] = 16711935; (*m_CharacterHairDyesMap)[326] = 10554495; (*m_CharacterHairDyesMap)[327] = 5309291; (*m_CharacterHairDyesMap)[328] = 5243070; (*m_CharacterHairDyesMap)[329] = 12779648; (*m_CharacterHairDyesMap)[330] = 3; (*m_CharacterHairDyesMap)[331] = 4; (*m_CharacterHairDyesMap)[332] = 5; (*m_CharacterHairDyesMap)[333] = 6; m_CharacterSkinColorMap = new std::map; (*m_CharacterSkinColorMap)[500] = 8487040; // icon_item_skincolor_asura_8487040 (*m_CharacterSkinColorMap)[501] = 6192796; // icon_item_skincolor_asura_6192796 (*m_CharacterSkinColorMap)[502] = 4413801; // icon_item_skincolor_asura_4413801 (*m_CharacterSkinColorMap)[503] = 1587028; // icon_item_skincolor_asura_1587028 (*m_CharacterSkinColorMap)[504] = 8487040; // icon_item_skincolor_deva_8487040 (*m_CharacterSkinColorMap)[505] = 3752263; // icon_item_skincolor_deva_3752263 (*m_CharacterSkinColorMap)[506] = 2176583; // icon_item_skincolor_deva_2176583 (*m_CharacterSkinColorMap)[507] = 6706; // icon_item_skincolor_deva_6706 (*m_CharacterSkinColorMap)[508] = 8487040; // icon_item_skincolor_gaia_8487040 (*m_CharacterSkinColorMap)[509] = 7429206; // icon_item_skincolor_gaia_7429206 (*m_CharacterSkinColorMap)[510] = 4208182; // icon_item_skincolor_gaia_4208182 (*m_CharacterSkinColorMap)[511] = 1116426; // icon_item_skincolor_gaia_1116426 } } SUICreateCharSecondDlg::~SUICreateCharSecondDlg(); virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ); virtual void ProcMsgAtStatic( SGameMessage* pMsg ); virtual bool InitData( bool bReload = false ); virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true ); void SetCurrentHairColor(int nNewColor) { m_nCurHairColor = nNewColor; }; // Handling static maps because UI made shit way static int nReferences; static std::map* m_CharacterSelectionPoints; static std::map* m_CharacterHairDyesMap; static std::map* m_CharacterSkinColorMap; private: void SetCurrentFaceIcon( int nRace, int nSex, int nIndex ); void SetCurrentHairIcon( int nRace, int nSex, int nIndex ); void SetCurrentBodyIcon( int nRace, int nSex, int nIndex ); void SetCurrentDecoIcon( int nRace, int nSex, int nIndex ); // @brief 2010.04.21 DB information for each part's list - prodongi struct sPartsListInfo { sPartsListInfo(std::string const& iconName, int nTextureId) { m_iconName = iconName; m_textureId = nTextureId; } bool operator == (sPartsListInfo const& info) { return m_iconName == info.m_iconName; } bool operator < (sPartsListInfo const& info) { return m_iconName < info.m_iconName; } bool operator > (sPartsListInfo const& info) { return m_iconName > info.m_iconName; } std::string m_iconName; int m_textureId; }; typedef std::vector v_partslist; typedef v_partslist::iterator it_partslist; // @brief 2010.04.20 Filters out duplicates when pushing and adds it - prodongi void pushList(v_partslist& list, sPartsListInfo const& info); // @brief 2010.04.21 Check index range - prodongi void checkValidIndex(v_partslist const& list, int& index) const; // Cleaning every partlist array, cleanup of all the shit (being called in destructor) void clear(); // Processing messages void CharCreationProcMsgAtStatic(char const* iconName, char const* selectControl, sPartsListInfo const* info, int selectIndex); // @brief 2010.04.22 Resets the avatar's hair to the currently selected hair. // Should only be done during initialization; it cannot be done when the avatar to customize is created, so it is done here - prodongi void VerifyAvatarHair(); private: bool m_bAniCam; bool m_bCreateChar; int m_nCurHair; int m_nCurFace; int m_nCurBody; int m_nCurHairColor; int m_nCurSkinColor; int m_nCurRace; int m_nCurSex; int m_nCurDeco; // Position of the selected icon int m_nSelectFace; int m_nSelectDeco; int m_nSelectHair; int m_nSelectedHairColor; int m_nSelectSkinColor; int m_nSelectBody; // Position the icon displayed on the screen int m_nHairPosition; int m_nFacePosition; int m_nBodyPosition; int m_nHairColorPosition; int m_nSkinColorPosition; int m_nDecoPosition; // 2010.04.21 Changed to a struct due to insufficient information - prodongi v_partslist m_vHairList; // Hairs v_partslist m_vFaceList; // Faces v_partslist m_vBodyList; // Outfit (costume) v_partslist m_vDecoList; // Face tatoos std::vector m_vSkinColorList; };