/* * 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 "Helpers.h" #include "DKAiObjectContext.h" #include "DruidAiObjectContext.h" #include "HunterAiObjectContext.h" #include "MageAiObjectContext.h" #include "PaladinAiObjectContext.h" #include "PriestAiObjectContext.h" #include "RogueAiObjectContext.h" #include "ShamanAiObjectContext.h" #include "WarlockAiObjectContext.h" #include "WarriorAiObjectContext.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); } 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(); }