diff --git a/common/repositories/criteria/content_filter_criteria.h b/common/repositories/criteria/content_filter_criteria.h index 697d72f71..f47936302 100644 --- a/common/repositories/criteria/content_filter_criteria.h +++ b/common/repositories/criteria/content_filter_criteria.h @@ -54,19 +54,31 @@ namespace ContentFilterCriteria { ); std::vector flags = content_service.GetContentFlags(); - std::string flags_in_filter; + std::string flags_in_filter_enabled; + std::string flags_in_filter_disabled; if (!flags.empty()) { - flags_in_filter = fmt::format( + flags_in_filter_enabled = fmt::format( " OR CONCAT(',', {}content_flags, ',') REGEXP ',({}),' ", table_prefix, implode("|", flags) ); + flags_in_filter_disabled = fmt::format( + " OR CONCAT(',', {}content_flags, ',') NOT REGEXP ',({}),' ", + table_prefix, + implode("|", flags) + ); } criteria += fmt::format( " AND ({}content_flags IS NULL{}) ", table_prefix, - flags_in_filter + flags_in_filter_enabled + ); + + criteria += fmt::format( + " AND ({}content_flags_disabled IS NULL{}) ", + table_prefix, + flags_in_filter_disabled ); return std::string(criteria); diff --git a/utils/sql/git/required/2020_04_11_expansions_content_filters.sql b/utils/sql/git/required/2020_04_11_expansions_content_filters.sql index 0456d157b..3c3171ff2 100644 --- a/utils/sql/git/required/2020_04_11_expansions_content_filters.sql +++ b/utils/sql/git/required/2020_04_11_expansions_content_filters.sql @@ -83,3 +83,22 @@ update doors set min_expansion = 4 where name like '%POKTELE%'; -- content flags CREATE TABLE `content_flags` (`id` int AUTO_INCREMENT,`flag_name` varchar(75),`enabled` tinyint,`notes` text, PRIMARY KEY (id)); + +-- content flags disabled + +ALTER TABLE `doors` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `fishing` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `forage` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `global_loot` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `ground_spawns` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `lootdrop` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `loottable` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `merchantlist` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `object` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `spawn2` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `start_zones` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `starting_items` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `tradeskill_recipe` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `traps` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `zone` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `zone_points` ADD `content_flags_disabled` varchar(100) NULL; \ No newline at end of file diff --git a/zone/zone.cpp b/zone/zone.cpp index 51f6318b1..828557151 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -57,6 +57,7 @@ #include "../common/data_verification.h" #include "zone_reload.h" #include "../common/repositories/criteria/content_filter_criteria.h" +#include "../common/repositories/content_flags_repository.h" #include #include @@ -1230,8 +1231,29 @@ void Zone::ReloadStaticData() { zone->LoadNPCEmotes(&NPCEmoteList); //load the zone config file. - if (!LoadZoneCFG(zone->GetShortName(), zone->GetInstanceVersion())) // try loading the zone name... - LoadZoneCFG(zone->GetFileName(), zone->GetInstanceVersion()); // if that fails, try the file name, then load defaults + if (!LoadZoneCFG(zone->GetShortName(), zone->GetInstanceVersion())) { // try loading the zone name... + LoadZoneCFG( + zone->GetFileName(), + zone->GetInstanceVersion() + ); + } // if that fails, try the file name, then load defaults + + content_service.SetExpansionContext(); + + std::vector set_content_flags; + auto content_flags = ContentFlagsRepository::GetWhere("enabled = 1"); + set_content_flags.reserve(content_flags.size()); + + for (auto &flags: content_flags) { + set_content_flags.push_back(flags.flag_name); + + LogInfo( + "Enabled content flag [{}]", + flags.flag_name + ); + } + + content_service.SetContentFlags(set_content_flags); LogInfo("Zone Static Data Reloaded"); }