From 7e1881263de5665840e11567a6a5040b50b5d884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=BCller?= Date: Fri, 13 Sep 2024 21:33:16 +0200 Subject: [PATCH] Fix dummy 0.7 tee skin name not being used The dummy 0.7 skin name was not being updated and used, causing the wrong skin to be selected when switching between player and dummy settings. --- src/game/client/components/menus_settings7.cpp | 7 +++---- src/game/client/components/skins7.cpp | 15 ++++++++++----- src/game/client/components/skins7.h | 1 + 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/game/client/components/menus_settings7.cpp b/src/game/client/components/menus_settings7.cpp index 1c9a6ffe4..36b4827cf 100644 --- a/src/game/client/components/menus_settings7.cpp +++ b/src/game/client/components/menus_settings7.cpp @@ -313,7 +313,6 @@ void CMenus::RenderSettingsTeeCustom7(CUIRect MainView) if(DoButton_Menu(&s_RandomSkinButton, s_apDice[s_CurrentDie], 0, &RandomSkinButton, nullptr, IGraphics::CORNER_ALL, 5.0f, -0.2f)) { m_pClient->m_Skins7.RandomizeSkin(m_Dummy); - Config()->m_ClPlayer7Skin[0] = '\0'; SetNeedSendInfo(); s_CurrentDie = rand() % std::size(s_apDice); } @@ -356,7 +355,7 @@ void CMenus::RenderSkinSelection7(CUIRect MainView) const CSkins7::CSkin *pSkin = s_vpSkinList[i]; if(pSkin == nullptr) continue; - if(!str_comp(pSkin->m_aName, Config()->m_ClPlayer7Skin)) + if(!str_comp(pSkin->m_aName, CSkins7::ms_apSkinNameVariables[m_Dummy])) { m_pSelectedSkin = pSkin; s_OldSelected = i; @@ -401,7 +400,7 @@ void CMenus::RenderSkinSelection7(CUIRect MainView) { s_LastSelectionTime = Client()->GlobalTime(); m_pSelectedSkin = s_vpSkinList[NewSelected]; - str_copy(Config()->m_ClPlayer7Skin, m_pSelectedSkin->m_aName); + str_copy(CSkins7::ms_apSkinNameVariables[m_Dummy], m_pSelectedSkin->m_aName, protocol7::MAX_SKIN_ARRAY_SIZE); for(int Part = 0; Part < protocol7::NUM_SKINPARTS; Part++) { str_copy(CSkins7::ms_apSkinVariables[(int)m_Dummy][Part], m_pSelectedSkin->m_apParts[Part]->m_aName, protocol7::MAX_SKIN_ARRAY_SIZE); @@ -492,7 +491,7 @@ void CMenus::RenderSkinPartSelection7(CUIRect MainView) if(NewSelected != -1 && NewSelected != s_OldSelected) { str_copy(CSkins7::ms_apSkinVariables[(int)m_Dummy][m_TeePartSelected], s_paList[m_TeePartSelected][NewSelected]->m_aName, protocol7::MAX_SKIN_ARRAY_SIZE); - Config()->m_ClPlayer7Skin[0] = '\0'; + CSkins7::ms_apSkinNameVariables[m_Dummy][0] = '\0'; SetNeedSendInfo(); } s_OldSelected = NewSelected; diff --git a/src/game/client/components/skins7.cpp b/src/game/client/components/skins7.cpp index 145e375bb..e4179168e 100644 --- a/src/game/client/components/skins7.cpp +++ b/src/game/client/components/skins7.cpp @@ -23,6 +23,7 @@ const char *const CSkins7::ms_apSkinPartNames[protocol7::NUM_SKINPARTS] = {"body const char *const CSkins7::ms_apSkinPartNamesLocalized[protocol7::NUM_SKINPARTS] = {Localizable("Body", "skins"), Localizable("Marking", "skins"), Localizable("Decoration", "skins"), Localizable("Hands", "skins"), Localizable("Feet", "skins"), Localizable("Eyes", "skins")}; const char *const CSkins7::ms_apColorComponents[NUM_COLOR_COMPONENTS] = {"hue", "sat", "lgt", "alp"}; +char *CSkins7::ms_apSkinNameVariables[NUM_DUMMIES] = {0}; char *CSkins7::ms_apSkinVariables[NUM_DUMMIES][protocol7::NUM_SKINPARTS] = {{0}}; int *CSkins7::ms_apUCCVariables[NUM_DUMMIES][protocol7::NUM_SKINPARTS] = {{0}}; int unsigned *CSkins7::ms_apColorVariables[NUM_DUMMIES][protocol7::NUM_SKINPARTS] = {{0}}; @@ -231,6 +232,7 @@ int CSkins7::GetInitAmount() const void CSkins7::OnInit() { int Dummy = 0; + ms_apSkinNameVariables[Dummy] = Config()->m_ClPlayer7Skin; ms_apSkinVariables[Dummy][protocol7::SKINPART_BODY] = Config()->m_ClPlayer7SkinBody; ms_apSkinVariables[Dummy][protocol7::SKINPART_MARKING] = Config()->m_ClPlayer7SkinMarking; ms_apSkinVariables[Dummy][protocol7::SKINPART_DECORATION] = Config()->m_ClPlayer7SkinDecoration; @@ -251,6 +253,7 @@ void CSkins7::OnInit() ms_apColorVariables[Dummy][protocol7::SKINPART_EYES] = &Config()->m_ClPlayer7ColorEyes; Dummy = 1; + ms_apSkinNameVariables[Dummy] = Config()->m_ClDummy7Skin; ms_apSkinVariables[Dummy][protocol7::SKINPART_BODY] = Config()->m_ClDummy7SkinBody; ms_apSkinVariables[Dummy][protocol7::SKINPART_MARKING] = Config()->m_ClDummy7SkinMarking; ms_apSkinVariables[Dummy][protocol7::SKINPART_DECORATION] = Config()->m_ClDummy7SkinDecoration; @@ -463,17 +466,19 @@ void CSkins7::RandomizeSkin(int Dummy) if(Part == protocol7::SKINPART_MARKING) Alp = rand() % 255; int ColorVariable = (Alp << 24) | (Hue << 16) | (Sat << 8) | Lgt; - *CSkins7::ms_apUCCVariables[Dummy][Part] = true; - *CSkins7::ms_apColorVariables[Dummy][Part] = ColorVariable; + *ms_apUCCVariables[Dummy][Part] = true; + *ms_apColorVariables[Dummy][Part] = ColorVariable; } for(int Part = 0; Part < protocol7::NUM_SKINPARTS; Part++) { - const CSkins7::CSkinPart *pSkinPart = GetSkinPart(Part, rand() % NumSkinPart(Part)); - while(pSkinPart->m_Flags & CSkins7::SKINFLAG_SPECIAL) + const CSkinPart *pSkinPart = GetSkinPart(Part, rand() % NumSkinPart(Part)); + while(pSkinPart->m_Flags & SKINFLAG_SPECIAL) pSkinPart = GetSkinPart(Part, rand() % NumSkinPart(Part)); - mem_copy(CSkins7::ms_apSkinVariables[Dummy][Part], pSkinPart->m_aName, protocol7::MAX_SKIN_ARRAY_SIZE); + str_copy(ms_apSkinVariables[Dummy][Part], pSkinPart->m_aName, protocol7::MAX_SKIN_ARRAY_SIZE); } + + ms_apSkinNameVariables[Dummy][0] = '\0'; } ColorRGBA CSkins7::GetColor(int Value, bool UseAlpha) const diff --git a/src/game/client/components/skins7.h b/src/game/client/components/skins7.h index 39b0cca0b..63ca5c02a 100644 --- a/src/game/client/components/skins7.h +++ b/src/game/client/components/skins7.h @@ -55,6 +55,7 @@ public: static const char *const ms_apSkinPartNamesLocalized[protocol7::NUM_SKINPARTS]; static const char *const ms_apColorComponents[NUM_COLOR_COMPONENTS]; + static char *ms_apSkinNameVariables[NUM_DUMMIES]; static char *ms_apSkinVariables[NUM_DUMMIES][protocol7::NUM_SKINPARTS]; static int *ms_apUCCVariables[NUM_DUMMIES][protocol7::NUM_SKINPARTS]; // use custom color static unsigned int *ms_apColorVariables[NUM_DUMMIES][protocol7::NUM_SKINPARTS];