From 4df5f8c8906132c937ffbd6819711d09b39f309c Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sun, 9 Aug 2009 23:45:18 +0000 Subject: [PATCH] use a real UUID for the stage ID --- stepmania/src/CryptManager.cpp | 18 ++++++++++++++++++ stepmania/src/CryptManager.h | 1 + stepmania/src/GameState.cpp | 2 ++ stepmania/src/GameState.h | 1 + stepmania/src/StatsManager.cpp | 3 +-- 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/stepmania/src/CryptManager.cpp b/stepmania/src/CryptManager.cpp index 797a1c7d3b..0a7705b58f 100644 --- a/stepmania/src/CryptManager.cpp +++ b/stepmania/src/CryptManager.cpp @@ -396,6 +396,24 @@ RString CryptManager::GetPublicKeyFileName() return PUBLIC_KEY_PATH; } +/* Generate a version 4 random UUID. */ +RString CryptManager::GenerateRandomUUID() +{ + uint32_t buf[4]; + CryptManager::GetRandomBytes( buf, sizeof(buf) ); + + buf[1] &= 0xFFFF0FFF; + buf[1] |= 0x00004000; + buf[2] &= 0x0FFFFFFF; + buf[2] |= 0xA0000000; + + return ssprintf("%08x-%04x-%04x-%04x-%04x%08x\n", + buf[0], + buf[1] >> 16, buf[1] & 0xFFFF, + buf[2] >> 16, buf[2] & 0xFFFF, + buf[3]); +} + /* * (c) 2004-2007 Chris Danford, Glenn Maynard * All rights reserved. diff --git a/stepmania/src/CryptManager.h b/stepmania/src/CryptManager.h index 01ac4e9b00..4cce98164c 100644 --- a/stepmania/src/CryptManager.h +++ b/stepmania/src/CryptManager.h @@ -21,6 +21,7 @@ public: static bool Verify( RageFileBasic &file, RString sSignature, RString sPublicKey ); static void GetRandomBytes( void *pData, int iBytes ); + static RString GenerateRandomUUID(); static RString GetMD5ForFile( RString fn ); // in binary static RString GetMD5ForString( RString sData ); // in binary diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 91f148c139..153a430adb 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -8,6 +8,7 @@ #include "CharacterManager.h" #include "CommonMetrics.h" #include "Course.h" +#include "CryptManager.h" #include "Foreach.h" #include "Game.h" #include "GameCommand.h" @@ -692,6 +693,7 @@ void GameState::BeginStage() if( CurrentOptionsDisqualifyPlayer(pn) ) STATSMAN->m_CurStageStats.m_player[pn].m_bDisqualified = true; m_bEarnedExtraStage = false; + m_sStageGUID = CryptManager::GenerateRandomUUID(); } void GameState::CancelStage() diff --git a/stepmania/src/GameState.h b/stepmania/src/GameState.h index ac7c9fb650..b4e3cceab9 100644 --- a/stepmania/src/GameState.h +++ b/stepmania/src/GameState.h @@ -86,6 +86,7 @@ public: /* This is set to a random number per-game/round; it can be used for a random seed. */ int m_iGameSeed, m_iStageSeed; + RString m_sStageGUID; bool PlayersCanJoin() const; // true if it's not too late for a player to join int GetCoinsNeededToJoin() const; diff --git a/stepmania/src/StatsManager.cpp b/stepmania/src/StatsManager.cpp index 5d9cb9c5d8..7c702a183e 100644 --- a/stepmania/src/StatsManager.cpp +++ b/stepmania/src/StatsManager.cpp @@ -192,8 +192,7 @@ XNode* MakeRecentScoreNode( const StageStats &ss, Trail *pTrail, const PlayerSta XNode* pHighScore = pss.m_HighScore.CreateNode(); pHighScore->AppendChild("Pad", mp); - RString sStageGuid = ssprintf("%08x-0000-1000-0000-53FA337761C6", GAMESTATE->m_iStageSeed); - pHighScore->AppendChild("StageGuid", sStageGuid); + pHighScore->AppendChild("StageGuid", GAMESTATE->m_sStageGUID); pNode->AppendChild( pHighScore );