/* * Copyright (C) 2016+ AzerothCore , released under GNU AGPL v3 license, you may redistribute it * and/or modify it under version 3 of the License, or (at your option), any later version. */ #include "AiObjectContext.h" #include "ActionContext.h" #include "ChatActionContext.h" #include "ChatTriggerContext.h" #include "DKAiObjectContext.h" #include "DruidAiObjectContext.h" #include "HunterAiObjectContext.h" #include "MageAiObjectContext.h" #include "PaladinAiObjectContext.h" #include "Playerbots.h" #include "PriestAiObjectContext.h" #include "RogueAiObjectContext.h" #include "ShamanAiObjectContext.h" #include "SharedValueContext.h" #include "StrategyContext.h" #include "TriggerContext.h" #include "ValueContext.h" #include "WarlockAiObjectContext.h" #include "WarriorAiObjectContext.h" #include "WorldPacketActionContext.h" #include "WorldPacketTriggerContext.h" #include "Ai/Dungeon/DungeonStrategyContext.h" #include "Ai/Dungeon/WotlkDungeonActionContext.h" #include "Ai/Dungeon/WotlkDungeonTriggerContext.h" #include "Ai/Raid/RaidStrategyContext.h" #include "Ai/Raid/Aq20/RaidAq20ActionContext.h" #include "Ai/Raid/Aq20/RaidAq20TriggerContext.h" #include "Ai/Raid/MoltenCore/RaidMcActionContext.h" #include "Ai/Raid/MoltenCore/RaidMcTriggerContext.h" #include "Ai/Raid/BlackwingLair/RaidBwlActionContext.h" #include "Ai/Raid/BlackwingLair/RaidBwlTriggerContext.h" #include "Ai/Raid/Karazhan/RaidKarazhanActionContext.h" #include "Ai/Raid/Karazhan/RaidKarazhanTriggerContext.h" #include "Ai/Raid/Magtheridon/RaidMagtheridonActionContext.h" #include "Ai/Raid/Magtheridon/RaidMagtheridonTriggerContext.h" #include "Ai/Raid/GruulsLair/RaidGruulsLairActionContext.h" #include "Ai/Raid/GruulsLair/RaidGruulsLairTriggerContext.h" #include "Ai/Raid/EyeOfEternity/RaidEoEActionContext.h" #include "Ai/Raid/EyeOfEternity/RaidEoETriggerContext.h" #include "Ai/Raid/VaultOfArchavon/RaidVoAActionContext.h" #include "Ai/Raid/VaultOfArchavon/RaidVoATriggerContext.h" #include "Ai/Raid/ObsidianSanctum/RaidOsActionContext.h" #include "Ai/Raid/ObsidianSanctum/RaidOsTriggerContext.h" #include "Ai/Raid/Ulduar/RaidUlduarActionContext.h" #include "Ai/Raid/Ulduar/RaidUlduarTriggerContext.h" #include "Ai/Raid/Onyxia/RaidOnyxiaActionContext.h" #include "Ai/Raid/Onyxia/RaidOnyxiaTriggerContext.h" #include "Ai/Raid/Icecrown/RaidIccActionContext.h" #include "Ai/Raid/Icecrown/RaidIccTriggerContext.h" SharedNamedObjectContextList AiObjectContext::sharedStrategyContexts; SharedNamedObjectContextList AiObjectContext::sharedActionContexts; SharedNamedObjectContextList AiObjectContext::sharedTriggerContexts; SharedNamedObjectContextList AiObjectContext::sharedValueContexts; AiObjectContext::AiObjectContext(PlayerbotAI* botAI, SharedNamedObjectContextList& sharedStrategyContext, SharedNamedObjectContextList& sharedActionContext, SharedNamedObjectContextList& sharedTriggerContext, SharedNamedObjectContextList& sharedValueContext) : PlayerbotAIAware(botAI), strategyContexts(sharedStrategyContext), actionContexts(sharedActionContext), triggerContexts(sharedTriggerContext), valueContexts(sharedValueContext) { } void AiObjectContext::BuildAllSharedContexts() { AiObjectContext::BuildSharedContexts(); PriestAiObjectContext::BuildSharedContexts(); MageAiObjectContext::BuildSharedContexts(); WarlockAiObjectContext::BuildSharedContexts(); WarriorAiObjectContext::BuildSharedContexts(); ShamanAiObjectContext::BuildSharedContexts(); PaladinAiObjectContext::BuildSharedContexts(); DruidAiObjectContext::BuildSharedContexts(); HunterAiObjectContext::BuildSharedContexts(); RogueAiObjectContext::BuildSharedContexts(); DKAiObjectContext::BuildSharedContexts(); } void AiObjectContext::BuildSharedContexts() { BuildSharedStrategyContexts(sharedStrategyContexts); BuildSharedActionContexts(sharedActionContexts); BuildSharedTriggerContexts(sharedTriggerContexts); BuildSharedValueContexts(sharedValueContexts); } void AiObjectContext::BuildSharedStrategyContexts(SharedNamedObjectContextList& strategyContexts) { strategyContexts.Add(new StrategyContext()); strategyContexts.Add(new MovementStrategyContext()); strategyContexts.Add(new AssistStrategyContext()); strategyContexts.Add(new QuestStrategyContext()); strategyContexts.Add(new DungeonStrategyContext()); strategyContexts.Add(new RaidStrategyContext()); } void AiObjectContext::BuildSharedActionContexts(SharedNamedObjectContextList& actionContexts) { actionContexts.Add(new ActionContext()); actionContexts.Add(new ChatActionContext()); actionContexts.Add(new WorldPacketActionContext()); actionContexts.Add(new RaidAq20ActionContext()); actionContexts.Add(new RaidMcActionContext()); actionContexts.Add(new RaidBwlActionContext()); actionContexts.Add(new RaidKarazhanActionContext()); actionContexts.Add(new RaidMagtheridonActionContext()); actionContexts.Add(new RaidGruulsLairActionContext()); actionContexts.Add(new RaidOsActionContext()); actionContexts.Add(new RaidEoEActionContext()); actionContexts.Add(new RaidVoAActionContext()); actionContexts.Add(new RaidUlduarActionContext()); actionContexts.Add(new RaidOnyxiaActionContext()); actionContexts.Add(new RaidIccActionContext()); actionContexts.Add(new WotlkDungeonUKActionContext()); actionContexts.Add(new WotlkDungeonNexActionContext()); actionContexts.Add(new WotlkDungeonANActionContext()); actionContexts.Add(new WotlkDungeonOKActionContext()); actionContexts.Add(new WotlkDungeonDTKActionContext()); actionContexts.Add(new WotlkDungeonVHActionContext()); actionContexts.Add(new WotlkDungeonGDActionContext()); actionContexts.Add(new WotlkDungeonHoSActionContext()); actionContexts.Add(new WotlkDungeonHoLActionContext()); actionContexts.Add(new WotlkDungeonOccActionContext()); actionContexts.Add(new WotlkDungeonUPActionContext()); actionContexts.Add(new WotlkDungeonCoSActionContext()); actionContexts.Add(new WotlkDungeonFoSActionContext()); actionContexts.Add(new WotlkDungeonPoSActionContext()); actionContexts.Add(new WotlkDungeonToCActionContext()); } void AiObjectContext::BuildSharedTriggerContexts(SharedNamedObjectContextList& triggerContexts) { triggerContexts.Add(new TriggerContext()); triggerContexts.Add(new ChatTriggerContext()); triggerContexts.Add(new WorldPacketTriggerContext()); triggerContexts.Add(new RaidAq20TriggerContext()); triggerContexts.Add(new RaidMcTriggerContext()); triggerContexts.Add(new RaidBwlTriggerContext()); triggerContexts.Add(new RaidKarazhanTriggerContext()); triggerContexts.Add(new RaidMagtheridonTriggerContext()); triggerContexts.Add(new RaidGruulsLairTriggerContext()); triggerContexts.Add(new RaidOsTriggerContext()); triggerContexts.Add(new RaidEoETriggerContext()); triggerContexts.Add(new RaidVoATriggerContext()); triggerContexts.Add(new RaidUlduarTriggerContext()); triggerContexts.Add(new RaidOnyxiaTriggerContext()); triggerContexts.Add(new RaidIccTriggerContext()); triggerContexts.Add(new WotlkDungeonUKTriggerContext()); triggerContexts.Add(new WotlkDungeonNexTriggerContext()); triggerContexts.Add(new WotlkDungeonANTriggerContext()); triggerContexts.Add(new WotlkDungeonOKTriggerContext()); triggerContexts.Add(new WotlkDungeonDTKTriggerContext()); triggerContexts.Add(new WotlkDungeonVHTriggerContext()); triggerContexts.Add(new WotlkDungeonGDTriggerContext()); triggerContexts.Add(new WotlkDungeonHoSTriggerContext()); triggerContexts.Add(new WotlkDungeonHoLTriggerContext()); triggerContexts.Add(new WotlkDungeonOccTriggerContext()); triggerContexts.Add(new WotlkDungeonUPTriggerContext()); triggerContexts.Add(new WotlkDungeonCoSTriggerContext()); triggerContexts.Add(new WotlkDungeonFoSTriggerContext()); triggerContexts.Add(new WotlkDungeonPoSTriggerContext()); triggerContexts.Add(new WotlkDungeonToCTriggerContext()); } void AiObjectContext::BuildSharedValueContexts(SharedNamedObjectContextList& valueContexts) { valueContexts.Add(new ValueContext()); } std::vector AiObjectContext::Save() { std::vector result; std::set names = valueContexts.GetCreated(); for (std::set::iterator i = names.begin(); i != names.end(); ++i) { UntypedValue* value = GetUntypedValue(*i); if (!value) continue; std::string const data = value->Save(); if (data == "?") continue; std::string const name = *i; std::ostringstream out; out << name; out << ">" << data; result.push_back(out.str()); } return result; } void AiObjectContext::Load(std::vector data) { for (std::vector::iterator i = data.begin(); i != data.end(); ++i) { std::string const row = *i; std::vector parts = split(row, '>'); if (parts.size() != 2) continue; std::string const name = parts[0]; std::string const text = parts[1]; UntypedValue* value = GetUntypedValue(name); if (!value) continue; value->Load(text); } } Strategy* AiObjectContext::GetStrategy(std::string const name) { return strategyContexts.GetContextObject(name, botAI); } std::set AiObjectContext::GetSiblingStrategy(std::string const name) { return strategyContexts.GetSiblings(name); } Trigger* AiObjectContext::GetTrigger(std::string const name) { return triggerContexts.GetContextObject(name, botAI); } Action* AiObjectContext::GetAction(std::string const name) { return actionContexts.GetContextObject(name, botAI); } UntypedValue* AiObjectContext::GetUntypedValue(std::string const name) { return valueContexts.GetContextObject(name, botAI); } std::set AiObjectContext::GetValues() { return valueContexts.GetCreated(); } std::set AiObjectContext::GetSupportedStrategies() { return strategyContexts.supports(); } std::set AiObjectContext::GetSupportedActions() { return actionContexts.supports(); } std::string const AiObjectContext::FormatValues() { std::ostringstream out; std::set names = valueContexts.GetCreated(); for (std::set::iterator i = names.begin(); i != names.end(); ++i, out << "|") { UntypedValue* value = GetUntypedValue(*i); if (!value) continue; std::string const text = value->Format(); if (text == "?") continue; out << "{" << *i << "=" << text << "}"; } return out.str(); }