diff --git a/src/level/scoreboard.cpp b/src/level/scoreboard.cpp index bb78aae1..dc86eeed 100644 --- a/src/level/scoreboard.cpp +++ b/src/level/scoreboard.cpp @@ -47,6 +47,7 @@ void CScoreboard::CScoreboardEndTakeRule::Read(CLevelParserLine* line) { CScoreboardRule::Read(line); this->team = line->GetParam("team")->AsInt(0); + this->order = line->GetParam("order")->AsInt(0); } void CScoreboard::AddKillRule(std::unique_ptr rule) @@ -75,9 +76,11 @@ void CScoreboard::ProcessKill(CObject* target, CObject* killer) void CScoreboard::ProcessEndTake(int team) { + m_finishCounter++; for (auto& rule : m_rulesEndTake) { - if (rule->team == team || rule->team == 0) + if ((rule->team == team || rule->team == 0) && + (rule->order == m_finishCounter || rule->order == 0)) { AddPoints(team, rule->score); } diff --git a/src/level/scoreboard.h b/src/level/scoreboard.h index c0c2512b..17aa98ec 100644 --- a/src/level/scoreboard.h +++ b/src/level/scoreboard.h @@ -94,6 +94,7 @@ public: { public: int team = 0; + int order = 0; //! Read from line in scene file void Read(CLevelParserLine* line) override; @@ -117,4 +118,5 @@ private: std::vector> m_rulesKill = {}; std::vector> m_rulesEndTake = {}; std::map m_score; + int m_finishCounter = 0; }; \ No newline at end of file