From 26db54c90fa2f1b611c8ece155283eab1f6faba7 Mon Sep 17 00:00:00 2001 From: mrkubax10 Date: Sat, 18 Sep 2021 11:21:04 +0200 Subject: [PATCH] Don't save highscore when player skipped track --- src/config/saved_grand_prix.cpp | 8 ++++++-- src/config/saved_grand_prix.hpp | 8 ++++++++ src/race/race_manager.cpp | 5 +++++ src/race/race_manager.hpp | 5 +++++ src/states_screens/dialogs/race_paused_dialog.cpp | 2 ++ src/states_screens/race_result_gui.cpp | 2 +- 6 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/config/saved_grand_prix.cpp b/src/config/saved_grand_prix.cpp index 7a2d5cbad..90ae96ca9 100644 --- a/src/config/saved_grand_prix.cpp +++ b/src/config/saved_grand_prix.cpp @@ -70,6 +70,7 @@ SavedGrandPrix::SavedGrandPrix(unsigned int player_id, int player_karts, int last_track, int reverse_type, + int skipped_tracks, const std::vector &kart_list) : m_savedgp_group("SavedGP", "Represents the saved state of a GP"), @@ -79,7 +80,8 @@ SavedGrandPrix::SavedGrandPrix(unsigned int player_id, m_difficulty((int)difficulty,"difficulty", &m_savedgp_group), m_player_karts(player_karts,"player_karts", &m_savedgp_group), m_next_track(last_track,"last_track", &m_savedgp_group), - m_reverse_type(reverse_type,"reverse_type", &m_savedgp_group) + m_reverse_type(reverse_type,"reverse_type", &m_savedgp_group), + m_skipped_tracks(skipped_tracks, "skipped_tracks", &m_savedgp_group) { for(unsigned int i =0; i < kart_list.size(); i++) { @@ -104,7 +106,8 @@ SavedGrandPrix::SavedGrandPrix(const XMLNode* node) m_difficulty (0,"difficulty", &m_savedgp_group), m_player_karts(0,"player_karts", &m_savedgp_group), m_next_track (0,"last_track", &m_savedgp_group), - m_reverse_type(0,"reverse_type", &m_savedgp_group) + m_reverse_type(0,"reverse_type", &m_savedgp_group), + m_skipped_tracks(0, "skipped_tracks", &m_savedgp_group) { //m_player_group.findYourDataInAChildOf(node); m_player_id. findYourDataInAnAttributeOf(node); @@ -114,6 +117,7 @@ SavedGrandPrix::SavedGrandPrix(const XMLNode* node) m_player_karts.findYourDataInAnAttributeOf(node); m_next_track. findYourDataInAnAttributeOf(node); m_reverse_type.findYourDataInAnAttributeOf(node); + m_skipped_tracks.findYourDataInAnAttributeOf(node); std::vector karts; node->getNodes("Kart", karts); diff --git a/src/config/saved_grand_prix.hpp b/src/config/saved_grand_prix.hpp index 12b0e3511..0e56b91a6 100644 --- a/src/config/saved_grand_prix.hpp +++ b/src/config/saved_grand_prix.hpp @@ -82,6 +82,9 @@ protected: /** GPReverseType of the GP as int */ IntUserConfigParam m_reverse_type; + /** Count of tracks that player skipped */ + IntUserConfigParam m_skipped_tracks; + PtrVector m_karts; public: @@ -96,6 +99,7 @@ public: int player_karts, int last_track, int reverse_type, + int skipped_tracks, const std::vector &kart_list); /** @@ -138,6 +142,10 @@ public: /** Returns the reverse Type. */ int getReverseType() const { return m_reverse_type; } + // ------------------------------------------------------------------------ + /** Returns skipped tracks count */ + int getSkippedTracks() const { return m_skipped_tracks; } + // ------------------------------------------------------------------------ /** Sets the index of the last track finished. */ void setNextTrack(int next_track) { m_next_track = next_track; } diff --git a/src/race/race_manager.cpp b/src/race/race_manager.cpp index 2ddb45f1c..78c607b13 100644 --- a/src/race/race_manager.cpp +++ b/src/race/race_manager.cpp @@ -131,6 +131,7 @@ RaceManager::RaceManager() m_hit_capture_limit = 0; m_flag_return_ticks = stk_config->time2Ticks(20.0f); m_flag_deactivated_ticks = stk_config->time2Ticks(3.0f); + m_skipped_tracks_in_gp = 0; setMaxGoal(0); setTimeTarget(0.0f); setReverseTrack(false); @@ -419,6 +420,7 @@ void RaceManager::startNew(bool from_overworld) m_grand_prix.changeReverse((GrandPrixData::GPReverseType) m_saved_gp->getReverseType()); m_reverse_track = m_grand_prix.getReverse(); + m_skipped_tracks_in_gp = m_saved_gp->getSkippedTracks(); } // if m_saved_gp==NULL } // if m_continue_saved_gp } // if !network_world @@ -743,6 +745,7 @@ void RaceManager::saveGP() (int)m_player_karts.size(), m_track_number, m_grand_prix.getReverseType(), + m_skipped_tracks_in_gp, m_kart_status); // If a new GP is saved, delete any other saved data for this @@ -1045,6 +1048,8 @@ void RaceManager::startGP(const GrandPrixData &gp, bool from_overworld, setGrandPrix(gp); setupPlayerKartInfo(); m_continue_saved_gp = continue_saved_gp; + if (!continue_saved_gp) + m_skipped_tracks_in_gp = 0; setMajorMode(RaceManager::MAJOR_MODE_GRAND_PRIX); startNew(from_overworld); diff --git a/src/race/race_manager.hpp b/src/race/race_manager.hpp index 2abae41a4..3569aac0a 100644 --- a/src/race/race_manager.hpp +++ b/src/race/race_manager.hpp @@ -339,6 +339,7 @@ private: float m_time_target; int m_goal_target; int m_hit_capture_limit; + int m_skipped_tracks_in_gp; void startNextRace(); // start a next race friend bool operator< (const KartStatus& left, const KartStatus& right) @@ -895,6 +896,10 @@ public: unsigned getFlagDeactivatedTicks() const { return m_flag_deactivated_ticks; } // ---------------------------------------------------------------------------------------- + int getSkippedTracksInGP() const { return m_skipped_tracks_in_gp; } + // ---------------------------------------------------------------------------------------- + void addSkippedTrackInGP() { m_skipped_tracks_in_gp++; } + // ---------------------------------------------------------------------------------------- /** Whether the current game mode allow live joining even the current game *. started in network*/ bool supportsLiveJoining() const diff --git a/src/states_screens/dialogs/race_paused_dialog.cpp b/src/states_screens/dialogs/race_paused_dialog.cpp index 3d5c77f08..f375831f4 100644 --- a/src/states_screens/dialogs/race_paused_dialog.cpp +++ b/src/states_screens/dialogs/race_paused_dialog.cpp @@ -382,6 +382,8 @@ GUIEngine::EventPropagation else if (selection == "endrace") { ModalDialog::dismiss(); + if (RaceManager::get()->getMajorMode() == RaceManager::MAJOR_MODE_GRAND_PRIX) + RaceManager::get()->addSkippedTrackInGP(); World::getWorld()->getRaceGUI()->removeReferee(); World::getWorld()->endRaceEarly(); return GUIEngine::EVENT_BLOCK; diff --git a/src/states_screens/race_result_gui.cpp b/src/states_screens/race_result_gui.cpp index 5817aca09..512fce936 100644 --- a/src/states_screens/race_result_gui.cpp +++ b/src/states_screens/race_result_gui.cpp @@ -209,7 +209,7 @@ void RaceResultGUI::init() (RaceManager::get()->getMinorMode() == RaceManager::MINOR_MODE_NORMAL_RACE || RaceManager::get()->getMinorMode() == RaceManager::MINOR_MODE_TIME_TRIAL)) { if (RaceManager::get()->getNumOfTracks() == RaceManager::get()->getTrackNumber() + 1 - && !RaceManager::get()->getGrandPrix().isRandomGP()) + && !RaceManager::get()->getGrandPrix().isRandomGP() && RaceManager::get()->getSkippedTracksInGP() == 0) { Highscores* highscores = World::getWorld()->getGPHighscores(); const AbstractKart* k = RaceManager::get()->getKartWithGPRank(RaceManager::get()->getLocalPlayerGPRank(PLAYER_ID_GAME_MASTER));