diff --git a/mapeditor/mapcontroller.cpp b/mapeditor/mapcontroller.cpp index f7b4fddde..285a174a1 100644 --- a/mapeditor/mapcontroller.cpp +++ b/mapeditor/mapcontroller.cpp @@ -67,6 +67,17 @@ MinimapScene * MapController::miniScene(int level) void MapController::setMap(std::unique_ptr cmap) { _map = std::move(cmap); + + //fix map + for(auto obj : _map->objects) + if(obj->getOwner() == PlayerColor::UNFLAGGABLE) + if(dynamic_cast(obj.get()) || + dynamic_cast(obj.get()) || + dynamic_cast(obj.get()) || + dynamic_cast(obj.get()) || + dynamic_cast(obj.get())) + obj->tempOwner = PlayerColor::NEUTRAL; + _scenes[0].reset(new MapScene(0)); _scenes[1].reset(new MapScene(1)); _miniscenes[0].reset(new MinimapScene(0)); diff --git a/mapeditor/validator.cpp b/mapeditor/validator.cpp index 4fa976c9a..42365cbe3 100644 --- a/mapeditor/validator.cpp +++ b/mapeditor/validator.cpp @@ -61,10 +61,16 @@ std::list Validator::validate(const CMap * map) for(auto o : map->objects) { - if(auto * ins = dynamic_cast(o.get())) + if(o->getOwner() == PlayerColor::UNFLAGGABLE) { - if(ins->getOwner() == PlayerColor::UNFLAGGABLE) - issues.emplace_back(QString("Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner").arg(ins->instanceName.c_str()), true); + if(dynamic_cast(o.get()) || + dynamic_cast(o.get()) || + dynamic_cast(o.get()) || + dynamic_cast(o.get()) || + dynamic_cast(o.get())) + { + issues.emplace_back(QString("Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner").arg(o->instanceName.c_str()), true); + } } if(auto * ins = dynamic_cast(o.get())) { @@ -76,11 +82,19 @@ std::list Validator::validate(const CMap * map) } if(auto * ins = dynamic_cast(o.get())) { - bool has = amountOfCastles.count(ins->getOwner().getNum()); - if(!has) - issues.emplace_back(QString("Hero %1 must have an owner").arg(ins->instanceName.c_str()), true); + if(ins->ID == Obj::PRISON) + { + if(ins->getOwner() != PlayerColor::NEUTRAL) + issues.emplace_back(QString("Prison %1 must be a NEUTRAL").arg(ins->instanceName.c_str()), true); + } else - issues.emplace_back(QString("Hero %1: heroes on map are not supported in current version").arg(ins->instanceName.c_str()), false); + { + bool has = amountOfCastles.count(ins->getOwner().getNum()); + if(!has) + issues.emplace_back(QString("Hero %1 must have an owner").arg(ins->instanceName.c_str()), true); + else + issues.emplace_back(QString("Hero %1: heroes on map are not supported in current version").arg(ins->instanceName.c_str()), false); + } } }