diff --git a/apps/openmw/mwscript/interpretercontext.cpp b/apps/openmw/mwscript/interpretercontext.cpp index 121b07e34..e401318d6 100644 --- a/apps/openmw/mwscript/interpretercontext.cpp +++ b/apps/openmw/mwscript/interpretercontext.cpp @@ -111,7 +111,7 @@ namespace MWScript const std::string& name, char type) const { int index = MWBase::Environment::get().getScriptManager()->getLocals (scriptId). - search (type, name); + searchIndex (type, name); if (index!=-1) return index; diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index 49a483f27..c012cb12e 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -528,11 +528,12 @@ namespace MWScript virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) { + MWWorld::Ptr actor = R()(runtime, false); + std::string factionID = ""; if(arg0==0) { - MWWorld::Ptr actor = R()(runtime); factionID = getDialogueActorFaction(actor); } else @@ -562,11 +563,12 @@ namespace MWScript virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) { + MWWorld::Ptr actor = R()(runtime, false); + std::string factionID = ""; if(arg0==0) { - MWWorld::Ptr actor = R()(runtime); factionID = getDialogueActorFaction(actor); } else @@ -602,11 +604,12 @@ namespace MWScript virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) { + MWWorld::Ptr actor = R()(runtime, false); + std::string factionID = ""; if(arg0==0) { - MWWorld::Ptr actor = R()(runtime); factionID = getDialogueActorFaction(actor); } else @@ -637,6 +640,8 @@ namespace MWScript virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) { + MWWorld::Ptr ptr = R()(runtime, false); + std::string factionID = ""; if(arg0 >0) { @@ -645,8 +650,6 @@ namespace MWScript } else { - MWWorld::Ptr ptr = R()(runtime); - if(ptr.getClass().getNpcStats(ptr).getFactionRanks().empty()) { factionID = ""; @@ -750,6 +753,8 @@ namespace MWScript virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) { + MWWorld::Ptr ptr = R()(runtime, false); + std::string factionId; if (arg0==1) @@ -759,8 +764,6 @@ namespace MWScript } else { - MWWorld::Ptr ptr = R()(runtime); - if (!ptr.getClass().getNpcStats (ptr).getFactionRanks().empty()) factionId = ptr.getClass().getNpcStats (ptr).getFactionRanks().begin()->first; } @@ -783,6 +786,8 @@ namespace MWScript virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) { + MWWorld::Ptr ptr = R()(runtime, false); + Interpreter::Type_Integer value = runtime[0].mInteger; runtime.pop(); @@ -795,8 +800,6 @@ namespace MWScript } else { - MWWorld::Ptr ptr = R()(runtime); - if (!ptr.getClass().getNpcStats (ptr).getFactionRanks().empty()) factionId = ptr.getClass().getNpcStats (ptr).getFactionRanks().begin()->first; } @@ -818,6 +821,8 @@ namespace MWScript virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) { + MWWorld::Ptr ptr = R()(runtime, false); + Interpreter::Type_Integer value = runtime[0].mInteger; runtime.pop(); @@ -830,8 +835,6 @@ namespace MWScript } else { - MWWorld::Ptr ptr = R()(runtime); - if (!ptr.getClass().getNpcStats (ptr).getFactionRanks().empty()) factionId = ptr.getClass().getNpcStats (ptr).getFactionRanks().begin()->first; } @@ -913,6 +916,8 @@ namespace MWScript virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) { + MWWorld::Ptr ptr = R()(runtime, false); + std::string factionID = ""; if(arg0 >0 ) { @@ -921,8 +926,6 @@ namespace MWScript } else { - MWWorld::Ptr ptr = R()(runtime); - if(ptr.getClass().getNpcStats(ptr).getFactionRanks().empty()) { factionID = ""; @@ -952,6 +955,8 @@ namespace MWScript virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) { + MWWorld::Ptr ptr = R()(runtime, false); + std::string factionID = ""; if(arg0 >0 ) { @@ -960,7 +965,6 @@ namespace MWScript } else { - MWWorld::Ptr ptr = R()(runtime); if(ptr.getClass().getNpcStats(ptr).getFactionRanks().empty()) { factionID = ""; @@ -985,6 +989,8 @@ namespace MWScript virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) { + MWWorld::Ptr ptr = R()(runtime, false); + std::string factionID = ""; if(arg0 >0 ) { @@ -993,7 +999,6 @@ namespace MWScript } else { - MWWorld::Ptr ptr = R()(runtime); if(ptr.getClass().getNpcStats(ptr).getFactionRanks().empty()) { factionID = ""; diff --git a/components/compiler/lineparser.cpp b/components/compiler/lineparser.cpp index 0a3629912..2f835924d 100644 --- a/components/compiler/lineparser.cpp +++ b/components/compiler/lineparser.cpp @@ -1,6 +1,8 @@ #include "lineparser.hpp" +#include + #include #include "scanner.hpp" @@ -120,7 +122,7 @@ namespace Compiler if (mState==SetMemberVarState) { - mMemberName = name; + mMemberName = Misc::StringUtils::lowerCase (name); std::pair type = getContext().getMemberType (mMemberName, mName); if (type.first!=' ') @@ -297,7 +299,12 @@ namespace Compiler try { - ErrorDowngrade errorDowngrade (getErrorHandler()); + // workaround for broken positioncell instructions. + /// \todo add option to disable this + std::auto_ptr errorDowngrade (0); + if (Misc::StringUtils::lowerCase (loc.mLiteral)=="positioncell") + errorDowngrade.reset (new ErrorDowngrade (getErrorHandler())); + std::vector code; optionals = mExprParser.parseArguments (argumentType, scanner, code); mCode.insert (mCode.begin(), code.begin(), code.end()); diff --git a/components/compiler/locals.hpp b/components/compiler/locals.hpp index cf7899b5c..1b2ae6042 100644 --- a/components/compiler/locals.hpp +++ b/components/compiler/locals.hpp @@ -15,8 +15,6 @@ namespace Compiler std::vector mLongs; std::vector mFloats; - int searchIndex (char type, const std::string& name) const; - std::vector& get (char type); public: @@ -27,9 +25,11 @@ namespace Compiler int getIndex (const std::string& name) const; ///< return index for local variable \a name (-1: does not exist). + bool search (char type, const std::string& name) const; + /// Return index for local variable \a name of type \a type (-1: variable does not /// exit). - bool search (char type, const std::string& name) const; + int searchIndex (char type, const std::string& name) const; const std::vector& get (char type) const;