diff --git a/common/repositories/criteria/content_filter_criteria.h b/common/repositories/criteria/content_filter_criteria.h index c316bd87f..1173415c5 100644 --- a/common/repositories/criteria/content_filter_criteria.h +++ b/common/repositories/criteria/content_filter_criteria.h @@ -31,23 +31,28 @@ namespace ContentFilterCriteria { std::string criteria; criteria += fmt::format( - " AND (min_expansion >= {} OR min_expansion = 0)", + " AND (min_expansion <= {} OR min_expansion = 0)", content_service.GetCurrentExpansion() ); criteria += fmt::format( - " AND (max_expansion <= {} OR max_expansion = 0)", + " AND (max_expansion >= {} OR max_expansion = 0)", content_service.GetCurrentExpansion() ); std::vector flags = content_service.GetContentFlags(); - for (auto &flag: flags) { + for (auto &flag: flags) { flag = "'" + flag + "'"; } + std::string flags_in_filter; + if (!flags.empty()) { + flags_in_filter = fmt::format("OR content_flags IN ({})", implode(", ", flags)); + } + criteria += fmt::format( - " AND (content_flags IS NULL OR content_flags IN ({}))", - implode(", ", flags) + " AND (content_flags IS NULL {})", + flags_in_filter ); return std::string(criteria); diff --git a/zone/doors.cpp b/zone/doors.cpp index 6cb0617fd..82521aac2 100644 --- a/zone/doors.cpp +++ b/zone/doors.cpp @@ -28,6 +28,7 @@ #include "string_ids.h" #include "worldserver.h" #include "zonedb.h" +#include "../common/repositories/criteria/content_filter_criteria.h" #include #include @@ -716,10 +717,12 @@ bool ZoneDatabase::LoadDoors(int32 door_count, Door *into, const char *zone_name " WHERE " " zone = '%s' " " AND ( version = % u OR version = - 1 ) " + " %s " " ORDER BY " " doorid ASC ", zone_name, - version + version, + ContentFilterCriteria::apply().c_str() ); auto results = QueryDatabase(query); if (!results.Success()) {