diff --git a/src/level/scoreboard.cpp b/src/level/scoreboard.cpp index 18ad9684..78afa482 100644 --- a/src/level/scoreboard.cpp +++ b/src/level/scoreboard.cpp @@ -41,6 +41,7 @@ void CScoreboard::CScoreboardKillRule::Read(CLevelParserLine* line) { CScoreboardRule::Read(line); CObjectCondition::Read(line); + this->friendlyFire = line->GetParam("friendlyFire")->AsBool(false); } void CScoreboard::CScoreboardObjectRule::Read(CLevelParserLine* line) @@ -82,6 +83,8 @@ void CScoreboard::ProcessKill(CObject* target, CObject* killer) killer->GetTeam() != 0 && rule->CheckForObject(target)) { + if (killer->GetTeam() == target->GetTeam() && !rule->friendlyFire) + continue; AddPoints(killer->GetTeam(), rule->score); } } diff --git a/src/level/scoreboard.h b/src/level/scoreboard.h index 313e326c..4a094912 100644 --- a/src/level/scoreboard.h +++ b/src/level/scoreboard.h @@ -99,6 +99,8 @@ public: class CScoreboardKillRule final : public CScoreboardRule, public CObjectCondition { public: + bool friendlyFire = false; + //! Read from line in scene file void Read(CLevelParserLine* line) override; };