|
1 | | -// Copyright (C) 2005 - 2021 Settlers Freaks (sf-team at siedler25.org) |
| 1 | +// Copyright (C) 2005 - 2026 Settlers Freaks (sf-team at siedler25.org) |
2 | 2 | // |
3 | 3 | // SPDX-License-Identifier: GPL-2.0-or-later |
4 | 4 |
|
@@ -95,34 +95,23 @@ std::unique_ptr<noFigure> JobFactory::CreateJob(const Job job_id, const MapPoint |
95 | 95 | RTTR_Assert(dynamic_cast<nobUsual*>(goal)); |
96 | 96 | return std::make_unique<nofBaker>(pt, player, static_cast<nobUsual*>(goal)); |
97 | 97 | case Job::Helper: |
98 | | - // Wenn goal = 0 oder Lagerhaus, dann Auslagern anscheinend und mann kann irgendeinen Typ nehmen |
99 | | - if(!goal) |
100 | | - return std::make_unique<nofWellguy>(pt, player, static_cast<nobUsual*>(nullptr)); |
101 | | - else if(goal->GetGOT() == GO_Type::NobStorehouse || goal->GetGOT() == GO_Type::NobHarborbuilding |
102 | | - || goal->GetGOT() == GO_Type::NobHq) |
103 | | - return std::make_unique<nofWellguy>(pt, player, static_cast<nobBaseWarehouse*>(goal)); |
104 | | - else if(goal->GetGOT() == GO_Type::NobUsual) |
| 98 | + if(goal && goal->GetGOT() == GO_Type::NobUsual) |
105 | 99 | { |
| 100 | + RTTR_Assert(dynamic_cast<nobUsual*>(goal)); |
106 | 101 | auto* goalBld = static_cast<nobUsual*>(goal); |
107 | 102 | if(goalBld->GetBuildingType() == BuildingType::Well) |
108 | 103 | return std::make_unique<nofWellguy>(pt, player, goalBld); |
109 | 104 | else if(goalBld->GetBuildingType() == BuildingType::Catapult) |
110 | 105 | return std::make_unique<nofCatapultMan>(pt, player, goalBld); |
111 | 106 | } |
112 | | - throw std::runtime_error("Invalid goal type: " + helpers::toString(goal->GetGOT()) + " for job " |
113 | | - + helpers::toString(job_id)); |
| 107 | + throw std::runtime_error("Invalid goal type: " + (goal ? helpers::toString(goal->GetGOT()) : "NULL") |
| 108 | + + " for job " + helpers::toString(job_id)); |
114 | 109 | case Job::Geologist: |
115 | 110 | RTTR_Assert(dynamic_cast<noFlag*>(goal)); |
116 | 111 | return std::make_unique<nofGeologist>(pt, player, static_cast<noFlag*>(goal)); |
117 | 112 | case Job::Scout: |
118 | | - // Im Spähturm arbeitet ein anderer Späher-Typ |
119 | | - // Wenn goal = 0 oder Lagerhaus, dann Auslagern anscheinend und mann kann irgendeinen Typ nehmen |
120 | | - if(!goal) |
121 | | - return std::make_unique<nofScout_LookoutTower>(pt, player, static_cast<nobUsual*>(nullptr)); |
122 | | - else if(goal->GetGOT() == GO_Type::NobHarborbuilding || goal->GetGOT() == GO_Type::NobStorehouse |
123 | | - || goal->GetGOT() == GO_Type::NobHq) |
124 | | - return std::make_unique<nofPassiveWorker>(Job::Scout, pt, player, goal); |
125 | | - else if(goal->GetGOT() == GO_Type::NobUsual) // Spähturm / Lagerhaus? |
| 113 | + // Different scout for lookout towers and free scouts |
| 114 | + if(goal->GetGOT() == GO_Type::NobUsual) |
126 | 115 | { |
127 | 116 | RTTR_Assert(dynamic_cast<nobUsual*>(goal)); |
128 | 117 | return std::make_unique<nofScout_LookoutTower>(pt, player, static_cast<nobUsual*>(goal)); |
|
0 commit comments