/*
         * Create a generic-purpose reference.
         */
        private ITES5Referencer CreateReference(string referenceName, TES5BasicType?typeForNewProperty, string?tes4ReferenceNameForType, TES5GlobalScope globalScope, TES5MultipleScriptsScope multipleScriptsScope, TES5LocalScope localScope)
        {
            if (TES5PlayerReference.EqualsPlayer(referenceName))
            {
                return(CreateReferenceToPlayer(globalScope));
            }

            Match match = ReferenceAndPropertyNameRegex.Match(referenceName);

            if (match.Success)
            {
                TES5ObjectProperty propertyReference = this.objectPropertyFactory.CreateObjectProperty(match.Groups[1].Value, match.Groups[2].Value, this, localScope, globalScope, multipleScriptsScope);
                return(propertyReference);
            }

            ITES5VariableOrProperty?property = localScope.TryGetVariable(referenceName);

            if (property == null)
            {
                property = globalScope.TryGetPropertyByOriginalName(referenceName); //todo rethink how to unify the prefix searching
                if (property == null)
                {
                    Nullable <int> tes4FormID   = null;
                    ITES5Type      propertyType =
                        typeForNewProperty != null ? typeForNewProperty :
                        GetPropertyTypeAndFormID(referenceName, tes4ReferenceNameForType, globalScope, multipleScriptsScope, out tes4FormID);
                    TES5Property propertyToAddToGlobalScope = TES5PropertyFactory.ConstructWithTES4FormID(referenceName, propertyType, referenceName, tes4FormID);
                    globalScope.AddProperty(propertyToAddToGlobalScope);
                    property = propertyToAddToGlobalScope;
                }
            }

            return(CreateReferenceToVariableOrProperty(property));
        }
        public static List <TES5GlobalScope> CreateGlobalScopes()
        {
            List <TES5GlobalScope> globalScopes = new List <TES5GlobalScope>()
            {
                new TES5GlobalScope(TES5ScriptHeaderFactory.GetFromCacheOrConstructByBasicType(TES5BasicType.TES4TimerHelperName, TES5BasicType.T_QUEST, "", false))
            };
            TES5GlobalScope globalScope = new TES5GlobalScope(TES5ScriptHeaderFactory.GetFromCacheOrConstructByBasicType(TES5BasicType.TES4ContainerName, TES5BasicType.T_QUEST, "", false));

            globalScope.AddProperty(TES5PropertyFactory.ConstructWithoutFormID("isInJail", TES5BasicType.T_BOOL, "isInJail"));
            globalScope.AddProperty(TES5PropertyFactory.ConstructWithoutFormID("isMurderer", TES5BasicType.T_BOOL, "isMurderer"));
            globalScopes.Add(globalScope);
            return(globalScopes);
        }