/* * Copyright (C) 2016+ AzerothCore , released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version. */ #ifndef _PLAYERBOT_SHAREDVALUECONTEXT_H #define _PLAYERBOT_SHAREDVALUECONTEXT_H #include "NamedObjectContext.h" #include "LootValues.h" #include "PvpValues.h" #include "QuestValues.h" #include "Playerbots.h" class PlayerbotAI; class SharedValueContext : public NamedObjectContext { public: SharedValueContext() : NamedObjectContext(true) { creators["bg masters"] = &SharedValueContext::bg_masters; creators["drop map"] = &SharedValueContext::drop_map; creators["item drop list"] = &SharedValueContext::item_drop_list; creators["entry loot list"] = &SharedValueContext::entry_loot_list; creators["entry quest relation"] = &SharedValueContext::entry_quest_relation; creators["quest guidp map"] = &SharedValueContext::quest_guidp_map; creators["quest givers"] = &SharedValueContext::quest_givers; } private: static UntypedValue* bg_masters(PlayerbotAI* botAI) { return new BgMastersValue(botAI); } static UntypedValue* drop_map(PlayerbotAI* botAI) { return new DropMapValue(botAI); } static UntypedValue* item_drop_list(PlayerbotAI* botAI) { return new ItemDropListValue(botAI); } static UntypedValue* entry_loot_list(PlayerbotAI* botAI) { return new EntryLootListValue(botAI); } static UntypedValue* entry_quest_relation(PlayerbotAI* botAI) { return new EntryQuestRelationMapValue(botAI); } static UntypedValue* quest_guidp_map(PlayerbotAI* botAI) { return new QuestGuidpMapValue(botAI); } static UntypedValue* quest_givers(PlayerbotAI* botAI) { return new QuestGiversValue(botAI); } //Global acess functions public: static SharedValueContext* instance() { static SharedValueContext instance; return &instance; } template Value* getGlobalValue(std::string const name) { NamedObjectContextList valueContexts; valueContexts.Add(this); PlayerbotAI* botAI = new PlayerbotAI(); UntypedValue* value = valueContexts.GetContextObject(name, botAI); delete botAI; return dynamic_cast*>(value); } template Value* getGlobalValue(std::string const name, std::string const param) { return getGlobalValue((std::string(name) + "::" + param)); } template Value* getGlobalValue(std::string const name, uint32 param) { std::ostringstream out; out << param; return getGlobalValue(name, out.str()); } }; #define sSharedValueContext SharedValueContext::instance() #endif