Files
2026-06-01 12:46:52 +02:00

278 lines
12 KiB
C++

#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<std::string, int>;
(*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<int, int>;
// 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<int, int>;
(*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<std::string, int>* m_CharacterSelectionPoints;
static std::map<int, int>* m_CharacterHairDyesMap;
static std::map<int, int>* 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<sPartsListInfo> 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<unsigned long> m_vSkinColorList;
};