public TES5VariableAssignationConversionFactory(TES5ObjectCallFactory objectCallFactory, TES5ReferenceFactory referenceFactory, TES5ValueFactory valueFactory, TES5TypeInferencer typeInferencer)
 {
     this.objectCallFactory = objectCallFactory;
     this.referenceFactory  = referenceFactory;
     this.valueFactory      = valueFactory;
     this.typeInferencer    = typeInferencer;
 }
        public static void GenerateINFOAddTopicScripts(ESMAnalyzer esmAnalyzer, BuildTracker buildTracker, IBuildTarget tifBuildTarget)
        {
            TES5TypeInferencer    typeInferencer    = new TES5TypeInferencer(esmAnalyzer);
            TES5ObjectCallFactory objectCallFactory = new TES5ObjectCallFactory(typeInferencer);
            TES4TopicsToTES5GlobalVariableFinder globalVariableFinder = new TES4TopicsToTES5GlobalVariableFinder();
            TES5GlobalVariables globalVariables = esmAnalyzer.GlobalVariables;
            var builtTIFs = buildTracker.GetBuiltScripts(BuildTargetFactory.TIFName);

            foreach (TES4Record infoRecord in esmAnalyzer.GetRecords().Where(r => r.RecordType == TES4RecordType.INFO))
            {
                TES4SubrecordData[] names = infoRecord.GetSubrecords("NAME").ToArray();
                if (names.Any())
                {
                    string                fragment0Name     = TES5FragmentFactory.GetFragmentName(0);
                    string                nameTES5FormIDHex = (infoRecord.FormID + 0x01000000).ToString("x8");
                    string                scriptName        = TES5ReferenceFactory.tif_Prefix + "_" + nameTES5FormIDHex;
                    TES5Script?           infoTIF           = builtTIFs.Where(s => s.Key == scriptName).Select(s => s.Value.Script).FirstOrDefault();
                    TES5FunctionCodeBlock fragment0;
                    if (infoTIF != null)
                    {
                        fragment0 = infoTIF.BlockList.Blocks.OfType <TES5FunctionCodeBlock>().Where(b => b.BlockName == fragment0Name).First();
                    }
                    else
                    {
                        TES5ScriptHeader  scriptHeader  = TES5ScriptHeaderFactory.GetFromCacheOrConstructByBasicType(scriptName, TES5BasicType.T_TOPICINFO, TES5TypeFactory.TES4_Prefix, true);
                        TES5GlobalScope   globalScope   = new TES5GlobalScope(scriptHeader);
                        TES5FunctionScope functionScope = new TES5FunctionScope(fragment0Name);
                        functionScope.AddParameter(new TES5SignatureParameter("akSpeakerRef", TES5BasicType.T_OBJECTREFERENCE, true));
                        TES5LocalScope localScope = new TES5LocalScope(functionScope);
                        TES5CodeScope  codeScope  = TES5CodeScopeFactory.CreateCodeScope(localScope);
                        fragment0 = new TES5FunctionCodeBlock(functionScope, codeScope, TES5VoidType.Instance, false, true);
                        TES5BlockList blockList = new TES5BlockList()
                        {
                            fragment0
                        };
                        infoTIF = new TES5Script(globalScope, blockList, true);
                        string     outputPath = tifBuildTarget.GetTranspileToPath(scriptName);
                        TES5Target target     = new TES5Target(infoTIF, outputPath);
                        buildTracker.RegisterBuiltScript(tifBuildTarget, target);
                    }
                    foreach (TES4SubrecordData name in names)
                    {
                        int                 formID                   = infoRecord.ExpandBytesIntoFormID(name);
                        TES4Record          addedTopic               = esmAnalyzer.GetRecordByFormID(formID);
                        Tuple <int, string>?globalVariable           = globalVariableFinder.GetGlobalVariableNullable(addedTopic.FormID);
                        string              globalVariableEditorID   = globalVariable != null ? globalVariable.Item2 : globalVariableFinder.GetGlobalVariableEditorID(addedTopic.GetEditorID());
                        Nullable <int>      globalVariableTES5FormID = globalVariable != null ? globalVariable.Item1 : (Nullable <int>)null;
                        TES5Property        topicAddedProperty       = TES5PropertyFactory.ConstructWithTES5FormID(globalVariableEditorID, TES5BasicType.T_GLOBALVARIABLE, globalVariableEditorID, globalVariableTES5FormID);
                        infoTIF.GlobalScope.AddPropertyIfNotExists(topicAddedProperty);
                        TES5Reference topicAddedReference = TES5ReferenceFactory.CreateReferenceToVariableOrProperty(topicAddedProperty);
                        fragment0.AddChunk(objectCallFactory.CreateObjectCall(topicAddedReference, "SetValueInt", new TES5ObjectCallArguments()
                        {
                            new TES5Integer(1)
                        }));
                    }
                }
            }
        }
 public TES5ValueFactory(TES5ObjectCallFactory objectCallFactory, TES5ReferenceFactory referenceFactory, TES5ObjectPropertyFactory objectPropertyFactory, ESMAnalyzer analyzer, TES5TypeInferencer typeInferencer, MetadataLogService metadataLogService)
 {
     this.objectCallFactory     = objectCallFactory;
     this.referenceFactory      = referenceFactory;
     this.analyzer              = analyzer;
     this.objectPropertyFactory = objectPropertyFactory;
     this.typeInferencer        = typeInferencer;
     this.metadataLogService    = metadataLogService;
 }
 public SetOrForceActorValueFactory(string tes4FunctionName, string tes5FunctionName, TES5ValueFactory valueFactory, TES5ObjectCallFactory objectCallFactory, TES5ObjectCallArgumentsFactory objectCallArgumentsFactory, TES5ReferenceFactory referenceFactory, TES5ObjectPropertyFactory objectPropertyFactory, ESMAnalyzer analyzer, TES5TypeInferencer typeInferencer, MetadataLogService metadataLogService)
     : base(tes4FunctionName, tes5FunctionName, objectCallFactory)
 {
     this.objectCallArgumentsFactory = objectCallArgumentsFactory;
     this.valueFactory          = valueFactory;
     this.referenceFactory      = referenceFactory;
     this.analyzer              = analyzer;
     this.objectPropertyFactory = objectPropertyFactory;
     this.typeInferencer        = typeInferencer;
     this.metadataLogService    = metadataLogService;
 }
 public ForceWeatherFactory(TES5ValueFactory valueFactory, TES5ObjectCallFactory objectCallFactory, TES5ObjectCallArgumentsFactory objectCallArgumentsFactory, TES5ReferenceFactory referenceFactory, TES5ObjectPropertyFactory objectPropertyFactory, ESMAnalyzer analyzer, TES5TypeInferencer typeInferencer, MetadataLogService metadataLogService)
 {
     this.objectCallArgumentsFactory = objectCallArgumentsFactory;
     this.valueFactory          = valueFactory;
     this.referenceFactory      = referenceFactory;
     this.analyzer              = analyzer;
     this.objectPropertyFactory = objectPropertyFactory;
     this.typeInferencer        = typeInferencer;
     this.metadataLogService    = metadataLogService;
     this.objectCallFactory     = objectCallFactory;
 }
Exemplo n.º 6
0
        public static BuildTarget Get(string target, Build build, BuildLogServices buildLogServices, bool includeQFWriteCommand = true)
        {
            switch (target)
            {
            case BuildTarget.BUILD_TARGET_STANDALONE:
            {
                StandaloneParsingService standaloneParsingService = new StandaloneParsingService(new SyntaxErrorCleanParser(new TES4OBScriptGrammar()));
                return(new BuildTarget(BuildTarget.BUILD_TARGET_STANDALONE, TES5TypeFactory.TES4Prefix, build, buildLogServices.MetadataLogService, new Standalone.TranspileCommand(standaloneParsingService, build, buildLogServices.MetadataLogService), new Standalone.CompileCommand(), new Standalone.ASTCommand(), new Standalone.BuildScopeCommand(standaloneParsingService), new Standalone.WriteCommand()));
            }

            case BuildTarget.BUILD_TARGET_TIF:
            {
                FragmentsParsingService fragmentsParsingService = new FragmentsParsingService(new SyntaxErrorCleanParser(new TES4ObscriptCodeGrammar()));
                return(new BuildTarget(BuildTarget.BUILD_TARGET_TIF, "", build, buildLogServices.MetadataLogService, new TIF.TranspileCommand(fragmentsParsingService, build, buildLogServices.MetadataLogService), new TIF.CompileCommand(), new TIF.ASTCommand(), new TIF.BuildScopeCommand(), new TIF.WriteCommand()));
            }

            case BuildTarget.BUILD_TARGET_PF:
            {
                return(new BuildTarget(BuildTarget.BUILD_TARGET_PF, "", build, buildLogServices.MetadataLogService, new PF.TranspileCommand(), new PF.CompileCommand(), new PF.ASTCommand(), new PF.BuildScopeCommand(), new PF.WriteCommand()));
            }

            case BuildTarget.BUILD_TARGET_QF:
            {
                FragmentsParsingService fragmentsParsingService = new FragmentsParsingService(new SyntaxErrorCleanParser(new TES4ObscriptCodeGrammar()));
                QF.WriteCommand         writeCommand;
                if (includeQFWriteCommand)
                {        //Allows for skipping TES4 file loading when using BuildFileDeleteCommand
                    ESMAnalyzer                    analyzer                   = new ESMAnalyzer(DataDirectory.TES4GameFileName);
                    TES5TypeInferencer             typeInferencer             = new TES5TypeInferencer(analyzer, BuildTarget.StandaloneSourcePath);
                    TES5ObjectCallFactory          objectCallFactory          = new TES5ObjectCallFactory(typeInferencer);
                    TES5ObjectPropertyFactory      objectPropertyFactory      = new TES5ObjectPropertyFactory(typeInferencer);
                    TES5ReferenceFactory           referenceFactory           = new TES5ReferenceFactory(objectCallFactory, objectPropertyFactory);
                    TES5ValueFactory               valueFactory               = new TES5ValueFactory(objectCallFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, buildLogServices.MetadataLogService);
                    TES5ObjectCallArgumentsFactory objectCallArgumentsFactory = new TES5ObjectCallArgumentsFactory(valueFactory);
                    TES5ValueFactoryFunctionFiller.FillFunctions(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, buildLogServices.MetadataLogService);
                    ObjectiveHandlingFactory objectiveHandlingFactory = new ObjectiveHandlingFactory(referenceFactory);
                    QFFragmentFactory        qfFragmentFactory        = new QFFragmentFactory(buildLogServices.MappedTargetsLogService, objectiveHandlingFactory);
                    writeCommand = new QF.WriteCommand(qfFragmentFactory);
                }
                else
                {
                    writeCommand = null;
                }
                return(new BuildTarget(BuildTarget.BUILD_TARGET_QF, "", build, buildLogServices.MetadataLogService, new QF.TranspileCommand(fragmentsParsingService, build, buildLogServices.MetadataLogService), new QF.CompileCommand(), new QF.ASTCommand(), new QF.BuildScopeCommand(), writeCommand));
            }

            default:
            {
                throw new InvalidOperationException("Unknown target " + target);
            }
            }
        }
        public static BuildTargetAdvancedCollection GetCollection(Build build, IEnumerable <BuildTargetSimple> buildTargets)
        {
            BuildLogServiceCollection buildLogServices   = BuildLogServiceCollection.DeleteAndStartNewFiles(build);
            ESMAnalyzer                   esmAnalyzer    = ESMAnalyzer.Load();
            TES5TypeInferencer            typeInferencer = new TES5TypeInferencer(esmAnalyzer);
            BuildTargetAdvancedCollection collection     = new BuildTargetAdvancedCollection(buildLogServices, esmAnalyzer);

            foreach (var target in buildTargets)
            {
                collection.Add(ConstructAdvanced(target, buildLogServices, esmAnalyzer, typeInferencer));
            }
            return(collection);
        }
 private static void GetFactories(MetadataLogService metadataLogService, out ESMAnalyzer analyzer, out TES5ObjectCallFactory objectCallFactory, out TES5ReferenceFactory referenceFactory, out TES5ValueFactory valueFactory, out TES5ChainedCodeChunkFactory chainedCodeChunkFactory, out TES5AdditionalBlockChangesPass additionalBlockChangesPass)
 {
     analyzer = new ESMAnalyzer(DataDirectory.TES4GameFileName);
     TES5TypeInferencer typeInferencer = new TES5TypeInferencer(analyzer, BuildTarget.StandaloneSourcePath);
     TES5ObjectPropertyFactory objectPropertyFactory = new TES5ObjectPropertyFactory(typeInferencer);
     objectCallFactory = new TES5ObjectCallFactory(typeInferencer);
     referenceFactory = new TES5ReferenceFactory(objectCallFactory, objectPropertyFactory);
     valueFactory = new TES5ValueFactory(objectCallFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService);
     TES5ObjectCallArgumentsFactory objectCallArgumentsFactory = new TES5ObjectCallArgumentsFactory(valueFactory);
     TES5ValueFactoryFunctionFiller.FillFunctions(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService);
     TES5VariableAssignationConversionFactory assignationConversionFactory = new TES5VariableAssignationConversionFactory(objectCallFactory, referenceFactory, valueFactory, typeInferencer);
     TES5ReturnFactory returnFactory = new TES5ReturnFactory(objectCallFactory);
     chainedCodeChunkFactory = new TES5ChainedCodeChunkFactory(valueFactory, returnFactory, assignationConversionFactory);
     additionalBlockChangesPass = new TES5AdditionalBlockChangesPass(objectCallFactory, referenceFactory);
 }
        private static void GetFactories(MetadataLogService metadataLogService, ESMAnalyzer esmAnalyzer, out TES5ObjectCallFactory objectCallFactory, out TES5ChainedCodeChunkFactory chainedCodeChunkFactory, out TES5AdditionalBlockChangesPass additionalBlockChangesPass)
        {
            TES5TypeInferencer        typeInferencer        = new TES5TypeInferencer(esmAnalyzer);
            TES5ObjectPropertyFactory objectPropertyFactory = new TES5ObjectPropertyFactory(typeInferencer);

            objectCallFactory = new TES5ObjectCallFactory(typeInferencer);
            TES5ReferenceFactory           referenceFactory           = new TES5ReferenceFactory(objectCallFactory, objectPropertyFactory, esmAnalyzer);
            TES5ValueFactory               valueFactory               = new TES5ValueFactory(objectCallFactory, referenceFactory, esmAnalyzer);
            TES5ObjectCallArgumentsFactory objectCallArgumentsFactory = new TES5ObjectCallArgumentsFactory(valueFactory);

            TES5ValueFactoryFunctionFiller.FillFunctions(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, metadataLogService, esmAnalyzer);
            TES5VariableAssignationConversionFactory assignationConversionFactory = new TES5VariableAssignationConversionFactory(objectCallFactory, referenceFactory, valueFactory, typeInferencer);
            TES5ReturnFactory returnFactory = new TES5ReturnFactory(objectCallFactory);

            chainedCodeChunkFactory    = new TES5ChainedCodeChunkFactory(valueFactory, returnFactory, assignationConversionFactory);
            additionalBlockChangesPass = new TES5AdditionalBlockChangesPass(objectCallFactory, referenceFactory);
        }
 public SetPCFactionMurderFactory(TES5ValueFactory valueFactory, TES5ObjectCallFactory objectCallFactory, TES5ObjectCallArgumentsFactory objectCallArgumentsFactory, TES5ReferenceFactory referenceFactory, TES5ObjectPropertyFactory objectPropertyFactory, ESMAnalyzer analyzer, TES5TypeInferencer typeInferencer, MetadataLogService metadataLogService)
     : base(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService)
 {
 }
Exemplo n.º 11
0
 public TES5ObjectCallFactory(TES5TypeInferencer typeInferencer)
 {
     this.typeInferencer = typeInferencer;
 }
Exemplo n.º 12
0
 public ForceActorValueFactory(TES5ValueFactory valueFactory, TES5ObjectCallFactory objectCallFactory, TES5ObjectCallArgumentsFactory objectCallArgumentsFactory, TES5ReferenceFactory referenceFactory, TES5ObjectPropertyFactory objectPropertyFactory, ESMAnalyzer analyzer, TES5TypeInferencer typeInferencer, MetadataLogService metadataLogService)
     : base("ForceAV", "ForceActorValue", valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService)
 {
 }
Exemplo n.º 13
0
 /*
  * Injects function handlers to value factory, as only two-way link in whole project
  */
 public static void FillFunctions(TES5ValueFactory valueFactory, TES5ObjectCallFactory objectCallFactory, TES5ObjectCallArgumentsFactory objectCallArgumentsFactory, TES5ReferenceFactory referenceFactory, TES5ObjectPropertyFactory objectPropertyFactory, ESMAnalyzer analyzer, TES5TypeInferencer typeInferencer, MetadataLogService metadataLogService)
 {
     valueFactory.AddFunctionFactory("activate", new ActivateFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("addachievement", new FillerFactory());
     valueFactory.AddFunctionFactory("additem", new AddOrRemoveItemFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("addscriptpackage", new AddScriptPackageFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("addspell", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("addtopic", new PopCalledRenameFunctionFactory("Add", referenceFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("autosave", new AutosaveFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("cast", new CastFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("clearownership", new ClearOwnershipFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("closecurrentobliviongate", new FillerFactory());
     valueFactory.AddFunctionFactory("closeobliviongate", new FillerFactory());
     valueFactory.AddFunctionFactory("completequest", new PopCalledRenameFunctionFactory("CompleteQuest", referenceFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("createfullactorcopy", new CreateFullActorCopyFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("deletefullactorcopy", new RenamedFunctionFactory("Delete", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("disablelinkedpathpoints", new FillerFactory());
     valueFactory.AddFunctionFactory("disableplayercontrols", new DisablePlayerControlsFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("disable", new DisableFactory(objectCallFactory));
     valueFactory.AddFunctionFactory("dispel", new RenamedFunctionFactory("DispelSpell", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("dropme", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("drop", new RenamedFunctionFactory("DropObject", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("duplicateallitems", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("enablefasttravel", new EnableFastTravelFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("enablelinkedpathpoints", new FillerFactory());
     valueFactory.AddFunctionFactory("enableplayercontrols", new EnablePlayerControlsFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("enable", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("equipitem", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("essentialdeathreload", new FillerFactory());
     valueFactory.AddFunctionFactory("evaluatepackage", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("forceactorvalue", new ForceActorValueFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("forcecloseobliviongate", new FillerFactory());
     valueFactory.AddFunctionFactory("forceflee", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));//WTM:  Change:  Added
     valueFactory.AddFunctionFactory("forceweather", new ForceWeatherFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getactionref", new GetActionRefFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getactorvalue", new GetActorValueFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getamountsoldstolen", new GetAmountSoldStolenFactory(objectCallFactory));
     valueFactory.AddFunctionFactory("getangle", new GetAngleFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getarmorrating", new GetArmorRatingFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getattacked", new RenamedFunctionFactory("IsInCombat", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getbaseactorvalue", new GetBaseActorValueFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getbuttonpressed", new GetButtonPressedFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getclothingvalue", new GetClothingValueFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getcombattarget", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getcontainer", new GetContainerFactory(objectCallFactory));
     valueFactory.AddFunctionFactory("getcrimegold", new GetCrimeGoldFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getcrimeknown", new ReturnFalseFactory());
     valueFactory.AddFunctionFactory("getcrime", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getcurrentaipackage", new RenamedFunctionFactory("GetCurrentPackage", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getcurrentaiprocedure", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getcurrenttime", new GetCurrentTimeFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getdayofweek", new GetDayOfWeekFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getdeadcount", new PopCalledRenameFunctionFactory("GetDeadCount", referenceFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getdead", new RenamedFunctionFactory("IsDead", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getdestroyed", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getdetected", new GetDetectedFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getdisabled", new RenamedFunctionFactory("IsDisabled", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getdisposition", new GetDispositionFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getdistance", new GetDistanceFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getequipped", new RenamedFunctionFactory("IsEquipped", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getfactionrank", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getforcesneak", new ReturnFalseFactory());
     valueFactory.AddFunctionFactory("getgamesetting", new GetGameSettingFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getgold", new RenamedFunctionFactory("GetGoldAmount", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getheadingangle", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getincell", new GetInCellFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getinfaction", new RenamedFunctionFactory("IsInFaction", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getinsamecell", new GetInSameCellFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getinworldspace", new GetInWorldspaceFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getisalerted", new RenamedFunctionFactory("IsAlerted", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getiscurrentpackage", new GetIsCurrentPackageFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getiscurrentweather", new GetIsCurrentWeatherFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getisid", new GetIsIdFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getisplayablerace", new GetIsPlayableRaceFactory(objectCallFactory));
     valueFactory.AddFunctionFactory("getisplayerbirthsign", new NotSupportedFactory());
     valueFactory.AddFunctionFactory("getisrace", new GetIsRaceFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getisreference", new GetIsReferenceFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getissex", new GetIsSexFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getitemcount", new GetItemCountFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getknockedstate", new ReturnTrueFactory());
     valueFactory.AddFunctionFactory("getlevel", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getlocked", new RenamedFunctionFactory("IsLocked", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getlos", new RenamedFunctionFactory("HasLOS", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getopenstate", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getparentref", new RenamedFunctionFactory("GetEnableParent", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getpcexpelled", new PopCalledRenameFunctionFactory("IsPlayerExpelled", referenceFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getpcfactionmurder", new GetPCFactionMurderFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getpcfactionattack", new GetPCFactionAttackFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getpcfactionsteal", new GetPCFactionStealFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getpcfame", new GetPCFameFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getpcinfamy", new GetPCInfamyFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getpcisrace", new GetPCIsRaceFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getpcissex", new GetPCIsSexFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getpcmiscstat", new GetPCMiscStatFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getplayercontrolsdisabled", new ReturnFalseFactory());
     valueFactory.AddFunctionFactory("getplayerinseworld", new GetPlayerInSEWorldFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getpos", new GetPosFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getquestrunning", new PopCalledRenameFunctionFactory("IsRunning", referenceFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getrandompercent", new GetRandomPercentFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getrestrained", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getsecondspassed", new GetSecondsPassedFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getself", new GetSelfFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getshouldattack", new ReturnFalseFactory());
     valueFactory.AddFunctionFactory("getsleeping", new RenamedFunctionFactory("GetSleepState", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getstagedone", new PopCalledRenameFunctionFactory("GetStageDone", referenceFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getstage", new PopCalledRenameFunctionFactory("GetStage", referenceFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getstartingangle", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("getstartingpos", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("gettalkedtopc", new ReturnTrueFactory());
     valueFactory.AddFunctionFactory("getweaponanimtype", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("gotojail", new GoToJailFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("hasmagiceffect", new HasMagicEffectFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("hasvampirefed", new ReturnFalseFactory());
     valueFactory.AddFunctionFactory("isactionref", new IsActionRefFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("isactorusingatorch", new RenamedFunctionFactory("IsTorchOut", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("isactor", new IsActorFactory());
     valueFactory.AddFunctionFactory("isanimplaying", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("isessential", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("isguard", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("isidleplaying", new ReturnTrueFactory());
     valueFactory.AddFunctionFactory("isincombat", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("isindangerouswater", new ReturnFalseFactory());
     valueFactory.AddFunctionFactory("isininterior", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("isowner", new IsOwnerFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("ispcamurderer", new IsPCAMurdererFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("ispcsleeping", new IsPCSleepingFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("isplayerinjail", new IsPlayerInJailFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("israining", new IsRainingFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("isridinghorse", new RenamedFunctionFactory("IsOnMount", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("issneaking", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("isspelltarget", new IsSpellTargetFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("isswimming", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("istalking", new RenamedFunctionFactory("IsInDialogueWithPlayer", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("istimepassing", new ReturnTrueFactory());
     valueFactory.AddFunctionFactory("isweaponout", new RenamedFunctionFactory("IsWeaponDrawn", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("isxbox", new ReturnFalseFactory());
     valueFactory.AddFunctionFactory("kill", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("lock", new LockFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("look", new RenamedFunctionFactory("SetLookAt", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("menumode", new MenumodeFactory(/*valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService*/));//WTM:  Change:  MenumodeFactory's constructor has no parameters.
     valueFactory.AddFunctionFactory("messagebox", new MessageBoxFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("message", new MessageFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("modactorvalue", new ModActorValueFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("modamountsoldstolen", new ModAmountSoldStolenFactory(objectCallFactory, objectCallArgumentsFactory));//WTM:  Change:  Added
     valueFactory.AddFunctionFactory("modcrimegold", new ModCrimeGoldFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("moddisposition", new ModDispositionFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("modfactionreaction", new PopCalledRenameFunctionFactory("ModReaction", referenceFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("modpcfame", new ModPCFameFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("modpcinfamy", new ModPCInfamyFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("modpcmiscstat", new FillerFactory());
     valueFactory.AddFunctionFactory("movetomarker", new RenamedFunctionFactory("MoveTo", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("moveto", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("payfine", new PayFineFactory(objectCallFactory, referenceFactory));
     valueFactory.AddFunctionFactory("payfinethief", new PayFineThiefFactory(objectCallFactory, referenceFactory));//WTM:  Change:  Added
     valueFactory.AddFunctionFactory("pickidle", new FillerFactory());
     valueFactory.AddFunctionFactory("placeatme", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("playbink", new PlayBinkFactory(objectCallFactory, objectCallArgumentsFactory));//WTM:  Change:  Added
     valueFactory.AddFunctionFactory("playgroup", new PlayGroupFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("playmagiceffectvisuals", new FillerFactory());
     valueFactory.AddFunctionFactory("playmagicshadervisuals", new FillerFactory());
     valueFactory.AddFunctionFactory("playsound3d", new PlaySound3DFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("playsound", new PlaySoundFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("purgecellbuffers", new FillerFactory());
     valueFactory.AddFunctionFactory("pushactoraway", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("refreshtopiclist", new FillerFactory());
     valueFactory.AddFunctionFactory("releaseweatheroverride", new ReleaseWeatherOverrideFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("removeallitems", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("removeitem", new AddOrRemoveItemFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("removeme", new RemoveMeFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("removescriptpackage", new FillerFactory());
     valueFactory.AddFunctionFactory("removespell", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("reset3dstate", new RenamedFunctionFactory("Reset", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("resetfalldamagetimer", new FillerFactory());
     valueFactory.AddFunctionFactory("resethealth", new ResetHealthFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("resetinterior", new PopCalledRenameFunctionFactory("Reset", referenceFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("resurrect", new ResurrectFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("rotate", new RotateFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("sayto", new SayToFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("say", new SayFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("sendtrespassalarm", new FillerFactory());
     valueFactory.AddFunctionFactory("setactoralpha", new SetActorAlphaFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("setactorfullname", new FillerFactory());
     valueFactory.AddFunctionFactory("setactorrefraction", new FillerFactory());
     valueFactory.AddFunctionFactory("setactorsai", new RenamedFunctionFactory("EnableAI", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("setactorvalue", new SetActorValueFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("setalert", new SetAlertFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("setallreachable", new FillerFactory());
     valueFactory.AddFunctionFactory("setallvisible", new FillerFactory());
     valueFactory.AddFunctionFactory("setangle", new SetAngleFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("setcellfullname", new SetCellFullNameFactory(objectCallFactory, objectCallArgumentsFactory, referenceFactory));   //WTM:  Change:  Added
     valueFactory.AddFunctionFactory("setcellpublicflag", new SetCellPublicFlagFactory(objectCallFactory, objectCallArgumentsFactory, referenceFactory));
     valueFactory.AddFunctionFactory("setcellownership", new SetCellOwnershipFactory(objectCallFactory, objectCallArgumentsFactory, referenceFactory)); //WTM:  Change:  Added
     valueFactory.AddFunctionFactory("setclass", new FillerFactory());
     valueFactory.AddFunctionFactory("setcombatstyle", new FillerFactory());
     valueFactory.AddFunctionFactory("setcrimegold", new SetCrimeGoldFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("setdestroyed", new RenamedFunctionFactory("BlockActivation", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("setdoordefaultopen", new FillerFactory());
     valueFactory.AddFunctionFactory("setessential", new PopCalledRenameFunctionFactory("SetEssential", referenceFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("setfactionrank", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("setfactionreaction", new PopCalledRenameFunctionFactory("SetReaction", referenceFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("setforcerun", new SetForceRunFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("setforcesneak", new SetForceSneakFactory(objectCallFactory));
     valueFactory.AddFunctionFactory("setghost", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("setignorefriendlyhits", new FillerFactory());
     valueFactory.AddFunctionFactory("setinchargen", new SetInChargenFactory(objectCallFactory));//WTM:  Change:  Added
     valueFactory.AddFunctionFactory("setinvestmentgold", new FillerFactory());
     valueFactory.AddFunctionFactory("setitemvalue", new FillerFactory());
     valueFactory.AddFunctionFactory("setlevel", new SetLevelFactory(objectCallFactory));//WTM:  Change:  Added
     valueFactory.AddFunctionFactory("setnoavoidance", new FillerFactory());
     valueFactory.AddFunctionFactory("setnorumors", new FillerFactory());
     valueFactory.AddFunctionFactory("setopenstate", new SetOpenStateFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("setownership", new SetOwnershipFactory(objectCallFactory, objectCallArgumentsFactory, referenceFactory, analyzer));
     valueFactory.AddFunctionFactory("setpackduration", new FillerFactory());
     valueFactory.AddFunctionFactory("setpcexpelled", new PopCalledRenameFunctionFactory("SetPlayerExpelled", referenceFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("setpcfactionattack", new SetPCFactionAttackFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("setpcfactionmurder", new SetPCFactionMurderFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("setpcfactionsteal", new SetPCFactionStealFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("setpcfame", new SetPCFameFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("setpcinfamy", new SetPCInfamyFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("setplayerinseworld", new FillerFactory());
     valueFactory.AddFunctionFactory("setpos", new SetPosFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("setpublic", new SetCellPublicFlagFactory(objectCallFactory, objectCallArgumentsFactory, referenceFactory));//WTM:  Change:  Added
     valueFactory.AddFunctionFactory("setquestobject", new FillerFactory());
     valueFactory.AddFunctionFactory("setrestrained", new FillerFactory());
     valueFactory.AddFunctionFactory("setrigidbodymass", new FillerFactory());
     valueFactory.AddFunctionFactory("setscale", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("setsceneiscomplex", new FillerFactory());
     valueFactory.AddFunctionFactory("setshowquestitems", new FillerFactory());
     valueFactory.AddFunctionFactory("setstage", new PopCalledRenameFunctionFactory("SetStage", referenceFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("setunconscious", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("setweather", new SetWeatherFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("showbirthsignmenu", new FillerFactory());
     valueFactory.AddFunctionFactory("showclassmenu", new FillerFactory());
     valueFactory.AddFunctionFactory("showdialogsubtitles", new FillerFactory());
     valueFactory.AddFunctionFactory("showenchantment", new FillerFactory());
     valueFactory.AddFunctionFactory("showmap", new ShowMapFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("showracemenu", new FillerFactory());
     valueFactory.AddFunctionFactory("showspellmaking", new FillerFactory());
     valueFactory.AddFunctionFactory("startcombat", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("startconversation", new StartConversationFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("startquest", new PopCalledRenameFunctionFactory("Start", referenceFactory, objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("stopcombatalarmonactor", new RenamedFunctionFactory("StopCombatAlarm", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("stopcombat", new StopCombatFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("stoplook", new StopLookFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("stopmagiceffectvisuals", new FillerFactory());
     valueFactory.AddFunctionFactory("stopmagicshadervisuals", new FillerFactory());
     valueFactory.AddFunctionFactory("stopwaiting", new FillerFactory());
     valueFactory.AddFunctionFactory("stopquest", new StopQuestFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("trapupdate", new FillerFactory());
     valueFactory.AddFunctionFactory("triggerhitshader", new FillerFactory());
     valueFactory.AddFunctionFactory("unequipitem", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("unlock", new UnlockFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("wait", new FillerFactory());
     valueFactory.AddFunctionFactory("wakeuppc", new NotSupportedFactory());
     valueFactory.AddFunctionFactory("yield", new DefaultFunctionFactory(objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("evp", new RenamedFunctionFactory("EvaluatePackage", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("forceav", new ForceActorValueFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("fw", new ForceWeatherFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getav", new GetActorValueFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getbaseav", new GetBaseActorValueFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getgs", new GetGameSettingFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("getiscreature", new GetIsCreatureFactory(objectCallFactory));//WTM:  Change:  This previously used IsActorFactory.
     valueFactory.AddFunctionFactory("this", new GetSelfFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("isactordetected", new RenamedFunctionFactory("IsInCombat", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("modav", new ModActorValueFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("modpcskill", new ModActorValueFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("pme", new FillerFactory());
     valueFactory.AddFunctionFactory("pms", new FillerFactory());
     valueFactory.AddFunctionFactory("pcb", new FillerFactory());
     valueFactory.AddFunctionFactory("scripteffectelapsedseconds", new GetSecondsPassedFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("saa", new SetActorAlphaFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("setav", new SetActorValueFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
     valueFactory.AddFunctionFactory("sme", new FillerFactory());
     valueFactory.AddFunctionFactory("scaonactor", new RenamedFunctionFactory("StopCombatAlarm", objectCallFactory, objectCallArgumentsFactory));
     valueFactory.AddFunctionFactory("sms", new FillerFactory());
     valueFactory.AddFunctionFactory("sw", new SetWeatherFactory(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, analyzer, typeInferencer, metadataLogService));
 }
 public TES5ObjectPropertyFactory(TES5TypeInferencer typeInferencer)
 {
     this.typeInferencer = typeInferencer;
 }
        public static BuildTargetAdvanced ConstructAdvanced(BuildTargetSimple buildTarget, BuildLogServiceCollection buildLogServices, ESMAnalyzer esmAnalyzer, TES5TypeInferencer typeInferencer)
        {
            switch (buildTarget.Name)
            {
            case StandaloneName:
            {
                StandaloneParsingService standaloneParsingService = new StandaloneParsingService(new SyntaxErrorCleanParser(new TES4OBScriptGrammar()));
                return(new BuildTargetAdvanced(buildTarget, new Standalone.TranspileCommand(standaloneParsingService, buildLogServices.MetadataLogService, esmAnalyzer), new Standalone.BuildScopeCommand(standaloneParsingService, esmAnalyzer, new TES5PropertyFactory(esmAnalyzer)), new Standalone.WriteCommand()));
            }

            case TIFName:
            {
                FragmentsParsingService fragmentsParsingService = new FragmentsParsingService(new SyntaxErrorCleanParser(new TES4ObscriptCodeGrammar()));
                return(new BuildTargetAdvanced(buildTarget, new TIF.TranspileCommand(fragmentsParsingService, buildLogServices.MetadataLogService, esmAnalyzer), new TIF.BuildScopeCommand(new TES5PropertyFactory(esmAnalyzer), new FragmentsReferencesBuilder(esmAnalyzer)), new TIF.WriteCommand()));
            }

            case PFName:
            {
                return(new BuildTargetAdvanced(buildTarget, new PF.TranspileCommand(), new PF.BuildScopeCommand(), new PF.WriteCommand()));
            }

            case QFName:
            {
                FragmentsParsingService        fragmentsParsingService    = new FragmentsParsingService(new SyntaxErrorCleanParser(new TES4ObscriptCodeGrammar()));
                TES5ObjectCallFactory          objectCallFactory          = new TES5ObjectCallFactory(typeInferencer);
                TES5ObjectPropertyFactory      objectPropertyFactory      = new TES5ObjectPropertyFactory(typeInferencer);
                TES5ReferenceFactory           referenceFactory           = new TES5ReferenceFactory(objectCallFactory, objectPropertyFactory, esmAnalyzer);
                TES5ValueFactory               valueFactory               = new TES5ValueFactory(objectCallFactory, referenceFactory, esmAnalyzer);
                TES5ObjectCallArgumentsFactory objectCallArgumentsFactory = new TES5ObjectCallArgumentsFactory(valueFactory);
                TES5ValueFactoryFunctionFiller.FillFunctions(valueFactory, objectCallFactory, objectCallArgumentsFactory, referenceFactory, objectPropertyFactory, buildLogServices.MetadataLogService, esmAnalyzer);
                TES5VariableAssignationConversionFactory assignationConversionFactory = new TES5VariableAssignationConversionFactory(objectCallFactory, referenceFactory, valueFactory, typeInferencer);
                TES5ReturnFactory           returnFactory            = new TES5ReturnFactory(objectCallFactory);
                TES5ChainedCodeChunkFactory chainedCodeChunkFactory  = new TES5ChainedCodeChunkFactory(valueFactory, returnFactory, assignationConversionFactory);
                TES5FragmentFactory         fragmentFactory          = new TES5FragmentFactory(chainedCodeChunkFactory);
                ObjectiveHandlingFactory    objectiveHandlingFactory = new ObjectiveHandlingFactory(objectCallFactory);
                QFFragmentFactory           qfFragmentFactory        = new QFFragmentFactory(buildLogServices.MappedTargetsLogService, objectiveHandlingFactory, esmAnalyzer);
                QF.WriteCommand             writeCommand             = new QF.WriteCommand(qfFragmentFactory);
                return(new BuildTargetAdvanced(buildTarget, new QF.TranspileCommand(fragmentsParsingService, fragmentFactory), new QF.BuildScopeCommand(new TES5PropertyFactory(esmAnalyzer), new FragmentsReferencesBuilder(esmAnalyzer)), writeCommand));
            }

            default:
            {
                throw new InvalidOperationException("Unknown target " + buildTarget.Name);
            }
            }
        }
        public void Execute(string targets)
        {
            if (!PreExecutionChecks(true, true, false, false))
            {
                return;
            }
            Directory.CreateDirectory(DataDirectory.GetGraphDirectoryPath());
            Build build = new Build(Build.DEFAULT_BUILD_PATH); //This argument might well not be important in this case

            using (BuildLogServices buildLogServices = new BuildLogServices(build))
            {
                BuildTargetCollection buildTargets = BuildTargetFactory.GetCollection(targets, build, buildLogServices);
                //if (!buildTargets.CanBuildAndWarnIfNot()) { return; }//WTM:  Change:  This doesn't matter for building graphs.
                Dictionary <string, List <string> > dependencyGraph = new Dictionary <string, List <string> >();
                Dictionary <string, List <string> > usageGraph      = new Dictionary <string, List <string> >();
                BuildSourceFilesCollection          sourceFiles     = buildTargets.GetSourceFiles();
                ProgressWriter     progressWriter = new ProgressWriter("Building Interoperable Compilation Graph", buildTargets.GetTotalSourceFiles());
                TES5TypeInferencer inferencer     = new TES5TypeInferencer(new ESMAnalyzer(), BuildTarget.StandaloneSourcePath);
                using (StreamWriter errorLog = new StreamWriter(TES5ScriptDependencyGraph.ErrorLogPath, false))
                {
                    using (StreamWriter debugLog = new StreamWriter(TES5ScriptDependencyGraph.DebugLogPath, false))
                    {
                        foreach (var kvp in sourceFiles)
                        {
                            var         buildTargetName  = kvp.Key;
                            var         sourceBuildFiles = kvp.Value;
                            BuildTarget buildTarget      = buildTargets.GetByName(buildTargetName);
                            foreach (var sourceFile in sourceBuildFiles)
                            {
                                string scriptName = sourceFile.Substring(0, sourceFile.Length - 4);
                                ITES4CodeFilterable AST;
                                try
                                {
                                    AST = buildTarget.GetAST(buildTarget.GetSourceFromPath(scriptName));
                                }
                                catch (EOFOnlyException) { continue; }//Ignore files that are only whitespace or comments.

                                /*catch (UnexpectedTokenException ex)
                                 * {//Exceptions no longer occur, so this code should not be invoked.
                                 *  errorLog.WriteLine(sourceFile + ":  " + ex.Message + Environment.NewLine);
                                 *  continue;
                                 * }*/
                                List <TES4ObjectProperty> propertiesAccesses = new List <TES4ObjectProperty>();
                                AST.Filter((data) =>
                                {
                                    TES4ObjectProperty property = data as TES4ObjectProperty;
                                    if (property == null)
                                    {
                                        return(false);
                                    }
                                    propertiesAccesses.Add(property);
                                    return(true);
                                });
                                Dictionary <string, TES5Property> preparedProperties      = new Dictionary <string, TES5Property>();
                                Dictionary <string, ITES5Type>    preparedPropertiesTypes = new Dictionary <string, ITES5Type>();
                                foreach (var property in propertiesAccesses)
                                {
                                    Match        match           = TES5ReferenceFactory.PropertyNameRegex.Match(property.StringValue);
                                    string       propertyName    = match.Groups[1].Value;
                                    string       propertyKeyName = propertyName.ToLower();
                                    bool         containedKey;
                                    TES5Property preparedProperty = preparedProperties.GetOrAdd(propertyKeyName, () => new TES5Property(propertyName, TES5BasicType.T_FORM, propertyName), out containedKey);
                                    ITES5Type    inferencingType  = inferencer.ResolveInferenceTypeByReferenceEdid(preparedProperty);
                                    if (!containedKey)
                                    {
                                        preparedPropertiesTypes.Add(propertyKeyName, inferencingType);
                                    }
                                    else
                                    {
                                        if (!inferencingType.Equals(preparedPropertiesTypes[propertyKeyName]))
                                        {
                                            throw new ConversionException("Cannot settle up the properties types - conflict.");
                                        }
                                    }
                                }

                                debugLog.WriteLine(scriptName + " - " + preparedProperties.Count + " prepared");
                                string lowerScriptType = scriptName.ToLower();
                                foreach (var kvp2 in preparedProperties)
                                {
                                    var    preparedPropertyKey = kvp2.Key;
                                    var    preparedProperty    = kvp2.Value;
                                    string propertyTypeName    = preparedPropertiesTypes[preparedPropertyKey].OriginalName;
                                    //Only keys are lowercased.
                                    string lowerPropertyType = propertyTypeName.ToLower();
                                    dependencyGraph.AddNewListIfNotContainsKeyAndAddValueToList(lowerPropertyType, lowerScriptType);
                                    usageGraph.AddNewListIfNotContainsKeyAndAddValueToList(lowerScriptType, lowerPropertyType);
                                    debugLog.WriteLine("Registering a dependency from " + scriptName + " to " + propertyTypeName);
                                }

                                progressWriter.IncrementAndWrite();
                            }
                        }
                    }
                }
                progressWriter.Write("Saving");
                TES5ScriptDependencyGraph graph = new TES5ScriptDependencyGraph(dependencyGraph, usageGraph);
                buildTargets.WriteGraph(graph);
                progressWriter.WriteLast();
            }
        }