From 814214df15d3249a1eecbcb364cbcbaa54a09be5 Mon Sep 17 00:00:00 2001 From: MinaciousGrace Date: Sun, 30 Apr 2017 23:00:30 -0400 Subject: [PATCH] fix broken paths preventing read/write of replaydata diffrentiate between profile dirs in the loadreplay function similar to write --- src/HighScore.cpp | 36 +++++++++++++++++++++++++++--------- src/HighScore.h | 3 ++- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/HighScore.cpp b/src/HighScore.cpp index 94a49d9e5a..6d0329fe01 100644 --- a/src/HighScore.cpp +++ b/src/HighScore.cpp @@ -495,11 +495,10 @@ bool HighScoreImpl::WriteReplayData(bool duringload) { RString append; RString profiledir; - //open file if (duringload) profiledir = PROFILEMAN->currentlyloadingprofile; else - profiledir = PROFILEMAN->GetProfileDir(ProfileSlot_Player1); + profiledir = PROFILEMAN->GetProfileDir(ProfileSlot_Player1).substr(1); // THIS NEEDS TO BE HERE CAUSE LOL!!! -mina RString path = profiledir + "ReplayData/" + ScoreKey; ofstream fileStream(path, ios::binary); @@ -522,14 +521,20 @@ bool HighScoreImpl::WriteReplayData(bool duringload) { return true; } -bool HighScore::LoadReplayData() { +bool HighScore::LoadReplayData(bool duringload) { // already exists if (m_Impl->vNoteRowVector.size() > 4 && m_Impl->vOffsetVector.size() > 4) return true; + RString profiledir; vector vNoteRowVector; vector vOffsetVector; - RString profiledir = PROFILEMAN->GetProfileDir(ProfileSlot_Player1); + + if (duringload) + profiledir = PROFILEMAN->currentlyloadingprofile; + else + profiledir = PROFILEMAN->GetProfileDir(ProfileSlot_Player1).substr(1); + RString path = profiledir + "ReplayData/" + m_Impl->ScoreKey; std::ifstream fileStream(path, ios::binary); string line; @@ -545,7 +550,6 @@ bool HighScore::LoadReplayData() { return false; } - //loop until eof while (getline(fileStream, line)) { @@ -728,7 +732,7 @@ void HighScore::LoadFromNode( const XNode* pNode ) if (m_Impl->fSSRNormPercent == 11111.f) { if (m_Impl->grade != Grade_Failed) - m_Impl->fSSRNormPercent = RescoreToWifeJudge(4); + m_Impl->fSSRNormPercent = RescoreToWifeJudgeDuringLoad(4); else m_Impl->fSSRNormPercent = m_Impl->fWifeScore; @@ -923,7 +927,7 @@ void Screenshot::LoadFromNode( const XNode* pNode ) } float HighScore::RescoreToWifeJudge(int x) { - if (!LoadReplayData()) + if (!LoadReplayData(false)) return m_Impl->fWifeScore; const float tso[] = { 1.50f,1.33f,1.16f,1.00f,0.84f,0.66f,0.50f,0.33f,0.20f }; @@ -936,6 +940,20 @@ float HighScore::RescoreToWifeJudge(int x) { return p / static_cast(m_Impl->vOffsetVector.size() * 2); } +float HighScore::RescoreToWifeJudgeDuringLoad(int x) { + if (!LoadReplayData(true)) + return m_Impl->fWifeScore; + + const float tso[] = { 1.50f,1.33f,1.16f,1.00f,0.84f,0.66f,0.50f,0.33f,0.20f }; + float ts = tso[x - 1]; + float p = 0; + FOREACH_CONST(float, m_Impl->vOffsetVector, f) + p += wife2(*f, ts); + + p += (m_Impl->iHoldNoteScores[HNS_LetGo] + m_Impl->iHoldNoteScores[HNS_Missed]) * -6.f; + return p / static_cast(m_Impl->vOffsetVector.size() * 2); +} + // do not use for now- mina float HighScoreImpl::RescoreToWifeTS(float ts) { float p = 0; @@ -1093,7 +1111,7 @@ class LunaHighScore: public Luna // Convert to MS so lua doesn't have to static int GetOffsetVector(T* p, lua_State *L) { - if (p->LoadReplayData()) { + if (p->LoadReplayData(false)) { vector doot = p->GetOffsetVector(); for (size_t i = 0; i < doot.size(); ++i) doot[i] = doot[i] * 1000; @@ -1106,7 +1124,7 @@ class LunaHighScore: public Luna } static int GetNoteRowVector(T* p, lua_State *L) { - if (p->LoadReplayData()) { + if (p->LoadReplayData(false)) { LuaHelpers::CreateTableFromArray(p->GetNoteRowVector(), L); p->UnloadReplayData(); } diff --git a/src/HighScore.h b/src/HighScore.h index 170b3518a1..a10cba9896 100644 --- a/src/HighScore.h +++ b/src/HighScore.h @@ -38,7 +38,6 @@ struct HighScore * @return true if no judgments were recorded, false otherwise. */ bool IsEmpty() const; Grade GetWifeGrade(); - bool LoadReplayData(); float ConvertDpToWife(); float GetPercentDP() const; float GetWifeScore() const; @@ -126,12 +125,14 @@ struct HighScore void LoadFromEttNode(const XNode* pNode); bool WriteReplayData(bool duringload); + bool LoadReplayData(bool duringload); void UnloadReplayData(); RString GetDisplayName() const; // Mina stuff - Mina float RescoreToWifeJudge(int x); + float RescoreToWifeJudgeDuringLoad(int x); //uuugh -mina float RescoreToDPJudge(int x); float GetSkillsetSSR(Skillset ss) const; void SetSkillsetSSR(Skillset ss, float ssr);