mirror of
				https://github.com/TES3MP/openmw-tes3mp.git
				synced 2025-10-31 21:56:45 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "compilercontext.hpp"
 | |
| 
 | |
| #include "../mwworld/esmstore.hpp"
 | |
| 
 | |
| #include <components/esm/loaddial.hpp>
 | |
| 
 | |
| #include <components/compiler/locals.hpp>
 | |
| 
 | |
| #include "../mwbase/environment.hpp"
 | |
| #include "../mwbase/world.hpp"
 | |
| #include "../mwbase/scriptmanager.hpp"
 | |
| 
 | |
| #include "../mwworld/ptr.hpp"
 | |
| #include "../mwworld/class.hpp"
 | |
| #include "../mwworld/manualref.hpp"
 | |
| 
 | |
| namespace MWScript
 | |
| {
 | |
|     CompilerContext::CompilerContext (Type type)
 | |
|     : mType (type)
 | |
|     {}
 | |
| 
 | |
|     bool CompilerContext::canDeclareLocals() const
 | |
|     {
 | |
|         return mType==Type_Full;
 | |
|     }
 | |
| 
 | |
|     char CompilerContext::getGlobalType (const std::string& name) const
 | |
|     {
 | |
|         return MWBase::Environment::get().getWorld()->getGlobalVariableType (name);
 | |
|     }
 | |
| 
 | |
|     std::pair<char, bool> CompilerContext::getMemberType (const std::string& name,
 | |
|         const std::string& id) const
 | |
|     {
 | |
|         std::string script;
 | |
|         bool reference = false;
 | |
| 
 | |
|         if (const ESM::Script *scriptRecord =
 | |
|             MWBase::Environment::get().getWorld()->getStore().get<ESM::Script>().search (id))
 | |
|         {
 | |
|             script = scriptRecord->mId;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             MWWorld::ManualRef ref (MWBase::Environment::get().getWorld()->getStore(), id);
 | |
| 
 | |
|             script = ref.getPtr().getClass().getScript (ref.getPtr());
 | |
|             reference = true;
 | |
|         }
 | |
| 
 | |
|         char type = ' ';
 | |
| 
 | |
|         if (!script.empty())
 | |
|             type = MWBase::Environment::get().getScriptManager()->getLocals (script).getType (
 | |
|                 Misc::StringUtils::lowerCase (name));
 | |
| 
 | |
|         return std::make_pair (type, reference);
 | |
|     }
 | |
| 
 | |
|     bool CompilerContext::isId (const std::string& name) const
 | |
|     {
 | |
|         const MWWorld::ESMStore &store =
 | |
|             MWBase::Environment::get().getWorld()->getStore();
 | |
| 
 | |
|         return
 | |
|             store.get<ESM::Activator>().search (name) ||
 | |
|             store.get<ESM::Potion>().search (name) ||
 | |
|             store.get<ESM::Apparatus>().search (name) ||
 | |
|             store.get<ESM::Armor>().search (name) ||
 | |
|             store.get<ESM::Book>().search (name) ||
 | |
|             store.get<ESM::Clothing>().search (name) ||
 | |
|             store.get<ESM::Container>().search (name) ||
 | |
|             store.get<ESM::Creature>().search (name) ||
 | |
|             store.get<ESM::Door>().search (name) ||
 | |
|             store.get<ESM::Ingredient>().search (name) ||
 | |
|             store.get<ESM::CreatureLevList>().search (name) ||
 | |
|             store.get<ESM::ItemLevList>().search (name) ||
 | |
|             store.get<ESM::Light>().search (name) ||
 | |
|             store.get<ESM::Lockpick>().search (name) ||
 | |
|             store.get<ESM::Miscellaneous>().search (name) ||
 | |
|             store.get<ESM::NPC>().search (name) ||
 | |
|             store.get<ESM::Probe>().search (name) ||
 | |
|             store.get<ESM::Repair>().search (name) ||
 | |
|             store.get<ESM::Static>().search (name) ||
 | |
|             store.get<ESM::Weapon>().search (name) ||
 | |
|             store.get<ESM::Script>().search (name);
 | |
|     }
 | |
| 
 | |
|     bool CompilerContext::isJournalId (const std::string& name) const
 | |
|     {
 | |
|         const MWWorld::ESMStore &store =
 | |
|             MWBase::Environment::get().getWorld()->getStore();
 | |
| 
 | |
|         const ESM::Dialogue *topic = store.get<ESM::Dialogue>().search (name);
 | |
| 
 | |
|         return topic && topic->mType==ESM::Dialogue::Journal;
 | |
|     }
 | |
| }
 |