/// <summary>
        /// Fills the placeholders of a code
        /// </summary>
        /// <param name="templateType">Template Type</param>
        /// <param name="code">Code to fill</param>
        /// <param name="data">Export Data</param>
        /// <returns>Filled Code</returns>
        public async Task <ExportPlaceholderFillResult> FillPlaceholders(TemplateType templateType, string code, ExportObjectData data)
        {
            ExportPlaceholderErrorCollection errorCollection = new ExportPlaceholderErrorCollection(_localizerFactory);

            Template parsedTemplate = ScribanParsingUtil.ParseTemplate(code, errorCollection);

            if (parsedTemplate != null)
            {
                ScriptObject exportObject = await BuildScriptObject(templateType, parsedTemplate, data, errorCollection);

                TemplateContext context = BuildTemplateContext(exportObject, errorCollection);
                try
                {
                    code = await parsedTemplate.RenderAsync(context);
                }
                catch (Exception ex)
                {
                    errorCollection.AddException(ex);
                }
            }

            ExportPlaceholderFillResult result = new ExportPlaceholderFillResult();

            result.Code   = code;
            result.Errors = errorCollection;
            return(result);
        }
Пример #2
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="errorValue">Error value</param>
 /// <param name="missingFieldName">Missing field name for the error collection</param>
 /// <param name="parentObject">Parent scriban object</param>
 /// <param name="errorCollection">Error collection</param>
 public ScribanMissingFlexFieldField(string errorValue, string missingFieldName, ScribanFlexFieldObject parentObject, ExportPlaceholderErrorCollection errorCollection) : base(parentObject)
 {
     ErrorValue        = errorValue;
     _missingFieldName = missingFieldName;
     _errorCollection  = errorCollection;
     Exists            = false;
 }
Пример #3
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="nodeGraphParser">Node graph parser</param>
 public NodeGraphExporter(INodeGraphParser nodeGraphParser)
 {
     _nodeGraphParser            = nodeGraphParser;
     _nodeGraphFunctionGenerator = null;
     _nodeGraphRenderer          = null;
     _errorCollection            = null;
 }
Пример #4
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="errorCollection">Error Collection</param>
        /// <param name="defaultTemplateProvider">Default Template Provider</param>
        /// <param name="cachedDbAccess">Cached Db Access</param>
        /// <param name="languageKeyGenerator">Language Key Generator</param>
        /// <param name="localizerFactory">Localizer Factory</param>
        /// <param name="exportSettings">Export Settings</param>
        /// <param name="project">Project</param>
        public ExportDialogActionRenderer(ExportPlaceholderErrorCollection errorCollection, ICachedExportDefaultTemplateProvider defaultTemplateProvider, IExportCachedDbAccess cachedDbAccess,
                                          ILanguageKeyGenerator languageKeyGenerator, IStringLocalizerFactory localizerFactory, ExportSettings exportSettings, GoNorthProject project) :
            base(errorCollection, localizerFactory)
        {
            _defaultTemplateProvider = defaultTemplateProvider;
            _languageKeyGenerator    = languageKeyGenerator;
            _localizer      = localizerFactory.Create(typeof(ExportDialogActionRenderer));
            _exportSettings = exportSettings;
            _project        = project;

            _actionRenderes = new Dictionary <ActionType, IActionRenderer>();
            _actionRenderes.Add(ActionType.ChangePlayerValue, new NpcValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true));
            _actionRenderes.Add(ActionType.ChangeNpcValue, new NpcValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false));
            _actionRenderes.Add(ActionType.SpawnItemInPlayerInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false));
            _actionRenderes.Add(ActionType.TransferItemToPlayerInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, true));
            _actionRenderes.Add(ActionType.SpawnItemInNpcInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false));
            _actionRenderes.Add(ActionType.TransferItemToNpcInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, true));
            _actionRenderes.Add(ActionType.ChangeQuestValue, new QuestValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory));
            _actionRenderes.Add(ActionType.ChangeQuestState, new SetQuestStateActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory));
            _actionRenderes.Add(ActionType.AddQuestText, new AddQuestTextRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory));
            _actionRenderes.Add(ActionType.Wait, new WaitActionRenderer(defaultTemplateProvider, localizerFactory));
            _actionRenderes.Add(ActionType.ChangePlayerState, new ChangeNpcStateActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true));
            _actionRenderes.Add(ActionType.ChangeNpcState, new ChangeNpcStateActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false));
            _actionRenderes.Add(ActionType.PlayerLearnSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, true));
            _actionRenderes.Add(ActionType.PlayerForgetSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false));
            _actionRenderes.Add(ActionType.NpcLearnSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, true));
            _actionRenderes.Add(ActionType.NpcForgetSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false));
            _actionRenderes.Add(ActionType.ChangePlayerSkillValue, new SkillValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true));
            _actionRenderes.Add(ActionType.ChangeNpcSkillValue, new SkillValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false));
            _actionRenderes.Add(ActionType.PersistDialogState, new PersistDialogStateActionRenderer(defaultTemplateProvider));
            _actionRenderes.Add(ActionType.OpenShop, new OpenShopActionRenderer(defaultTemplateProvider));
        }
Пример #5
0
 /// <summary>
 /// Sets the error collection
 /// </summary>
 /// <param name="errorCollection">Error Collection</param>
 public void SetErrorCollection(ExportPlaceholderErrorCollection errorCollection)
 {
     // Ensure to use most outer error collection
     if (_errorCollection == null)
     {
         _errorCollection = errorCollection;
     }
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="templatePlaceholderResolver">Template placeholder resolver</param>
 /// <param name="exportCachedDbAccess">Export cached database access</param>
 /// <param name="defaultTemplateProvider">Default template provider</param>
 /// <param name="errorCollection">Error collection</param>
 public DailyRoutineEventFunctionListRenderer(IExportTemplatePlaceholderResolver templatePlaceholderResolver, IExportCachedDbAccess exportCachedDbAccess, ICachedExportDefaultTemplateProvider defaultTemplateProvider,
                                              ExportPlaceholderErrorCollection errorCollection)
 {
     _templatePlaceholderResolver = templatePlaceholderResolver;
     _exportCachedDbAccess        = exportCachedDbAccess;
     _defaultTemplateProvider     = defaultTemplateProvider;
     _errorCollection             = errorCollection;
 }
Пример #7
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="templatePlaceholderResolver">Template placeholder resolver</param>
 /// <param name="exportCachedDbAccess">Export cached database access</param>
 /// <param name="defaultTemplateProvider">Default template provider</param>
 /// <param name="errorCollection">Error collection</param>
 public StateMachineFunctionPipeRenderer(IExportTemplatePlaceholderResolver templatePlaceholderResolver, IExportCachedDbAccess exportCachedDbAccess, ICachedExportDefaultTemplateProvider defaultTemplateProvider,
                                         ExportPlaceholderErrorCollection errorCollection)
 {
     _templatePlaceholderResolver = templatePlaceholderResolver;
     _exportCachedDbAccess        = exportCachedDbAccess;
     _defaultTemplateProvider     = defaultTemplateProvider;
     _errorCollection             = errorCollection;
 }
        /// <summary>
        /// Builds the template context
        /// </summary>
        /// <param name="exportObject">Export script object</param>
        /// <param name="errorCollection">Error collection</param>
        /// <returns>Template context</returns>
        private TemplateContext BuildTemplateContext(ScriptObject exportObject, ExportPlaceholderErrorCollection errorCollection)
        {
            TemplateContext context = new TemplateContext();

            context.TemplateLoader = new ScribanIncludeTemplateLoader(_exportCachedDbAccess, errorCollection);
            context.PushGlobal(exportObject);

            return(context);
        }
Пример #9
0
        /// <summary>
        /// Returns true if a node is of a certain type
        /// </summary>
        /// <param name="dialogData">Dialog Data</param>
        /// <param name="nodeType">Node Type</param>
        /// <param name="errorCollection">Error Collection to send errors to</param>
        /// <returns>true if node is of searched type</returns>
        private bool IsNodeOfType(ExportDialogData dialogData, string nodeType, ExportPlaceholderErrorCollection errorCollection)
        {
            if (string.IsNullOrEmpty(nodeType))
            {
                return(false);
            }

            return(nodeType.ToLowerInvariant() == GetNodeType(dialogData, errorCollection).ToLowerInvariant());
        }
Пример #10
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="templatePlaceholderResolver">Template placeholder resolver</param>
 /// <param name="exportCachedDbAccess">Export cached database access</param>
 /// <param name="defaultTemplateProvider">Default template provider</param>
 /// <param name="errorCollection">Error collection</param>
 /// <param name="exportObjectData">Export object data</param>
 public DialogFunctionRenderer(IExportTemplatePlaceholderResolver templatePlaceholderResolver, IExportCachedDbAccess exportCachedDbAccess, ICachedExportDefaultTemplateProvider defaultTemplateProvider,
                               ExportPlaceholderErrorCollection errorCollection, ExportObjectData exportObjectData)
 {
     _templatePlaceholderResolver = templatePlaceholderResolver;
     _exportCachedDbAccess        = exportCachedDbAccess;
     _defaultTemplateProvider     = defaultTemplateProvider;
     _errorCollection             = errorCollection;
     _exportObjectData            = exportObjectData;
 }
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="errorCollection">Error Collection</param>
        /// <param name="defaultTemplateProvider">Default Template Provider</param>
        /// <param name="cachedDbAccess">Cached Db Access</param>
        /// <param name="dailyRoutineEventPlaceholderResolver">Daily routine event placeholder resolver</param>
        /// <param name="languageKeyGenerator">Language Key Generator</param>
        /// <param name="localizerFactory">Localizer Factory</param>
        /// <param name="exportSettings">Export Settings</param>
        /// <param name="project">Project</param>
        public ExportDialogActionRenderer(ExportPlaceholderErrorCollection errorCollection, ICachedExportDefaultTemplateProvider defaultTemplateProvider, IExportCachedDbAccess cachedDbAccess, IDailyRoutineEventPlaceholderResolver dailyRoutineEventPlaceholderResolver,
                                          ILanguageKeyGenerator languageKeyGenerator, IStringLocalizerFactory localizerFactory, ExportSettings exportSettings, GoNorthProject project) :
            base(errorCollection, localizerFactory)
        {
            _defaultTemplateProvider = defaultTemplateProvider;
            _languageKeyGenerator    = languageKeyGenerator;
            _localizer      = localizerFactory.Create(typeof(ExportDialogActionRenderer));
            _exportSettings = exportSettings;
            _project        = project;

            _actionRenderes = new Dictionary <ActionType, IActionRenderer>();
            _actionRenderes.Add(ActionType.ChangePlayerValue, new NpcValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true));
            _actionRenderes.Add(ActionType.ChangeNpcValue, new NpcValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false));
            _actionRenderes.Add(ActionType.SpawnItemInPlayerInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false, false));
            _actionRenderes.Add(ActionType.TransferItemToPlayerInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, true, false));
            _actionRenderes.Add(ActionType.RemoveItemFromPlayerInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false, true));
            _actionRenderes.Add(ActionType.SpawnItemInNpcInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false, false));
            _actionRenderes.Add(ActionType.TransferItemToNpcInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, true, false));
            _actionRenderes.Add(ActionType.RemoveItemFromNpcInventory, new InventoryActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false, true));
            _actionRenderes.Add(ActionType.ChangeQuestValue, new QuestValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory));
            _actionRenderes.Add(ActionType.ChangeQuestState, new SetQuestStateActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory));
            _actionRenderes.Add(ActionType.AddQuestText, new AddQuestTextRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory));
            _actionRenderes.Add(ActionType.Wait, new WaitActionRenderer(defaultTemplateProvider, localizerFactory));
            _actionRenderes.Add(ActionType.ChangePlayerState, new ChangeNpcStateActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true));
            _actionRenderes.Add(ActionType.ChangeNpcState, new ChangeNpcStateActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false));
            _actionRenderes.Add(ActionType.PlayerLearnSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, true));
            _actionRenderes.Add(ActionType.PlayerForgetSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false));
            _actionRenderes.Add(ActionType.NpcLearnSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, true));
            _actionRenderes.Add(ActionType.NpcForgetSkill, new LearnForgetSkillActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false));
            _actionRenderes.Add(ActionType.ChangePlayerSkillValue, new SkillValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true));
            _actionRenderes.Add(ActionType.ChangeNpcSkillValue, new SkillValueChangeRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false));
            _actionRenderes.Add(ActionType.PersistDialogState, new PersistDialogStateActionRenderer(defaultTemplateProvider));
            _actionRenderes.Add(ActionType.OpenShop, new OpenShopActionRenderer(defaultTemplateProvider));
            _actionRenderes.Add(ActionType.PlayNpcAnimation, new PlayAnimationActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false));
            _actionRenderes.Add(ActionType.PlayPlayerAnimation, new PlayAnimationActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true));
            _actionRenderes.Add(ActionType.CodeAction, new CodeActionRenderer(defaultTemplateProvider, localizerFactory));
            _actionRenderes.Add(ActionType.ShowFloatingTextAboveNpc, new ShowFloatingTextAboveNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false));
            _actionRenderes.Add(ActionType.ShowFloatingTextAbovePlayer, new ShowFloatingTextAboveNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true));
            _actionRenderes.Add(ActionType.ShowFloatingTextAboveChooseNpc, new ShowFloatingTextAboveChooseNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory));
            _actionRenderes.Add(ActionType.FadeToBlack, new FadeToFromBlackRenderer(defaultTemplateProvider, localizerFactory, true));
            _actionRenderes.Add(ActionType.FadeFromBlack, new FadeToFromBlackRenderer(defaultTemplateProvider, localizerFactory, false));
            _actionRenderes.Add(ActionType.SetGameTime, new SetGameTimeActionRenderer(defaultTemplateProvider, cachedDbAccess, localizerFactory));
            _actionRenderes.Add(ActionType.DisableDailyRoutineEvent, new SetDailyRoutineEventState(defaultTemplateProvider, cachedDbAccess, dailyRoutineEventPlaceholderResolver, languageKeyGenerator, localizerFactory, true));
            _actionRenderes.Add(ActionType.EnableDailyRoutineEvent, new SetDailyRoutineEventState(defaultTemplateProvider, cachedDbAccess, dailyRoutineEventPlaceholderResolver, languageKeyGenerator, localizerFactory, false));
            _actionRenderes.Add(ActionType.TeleportNpc, new MoveNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false, false));
            _actionRenderes.Add(ActionType.TeleportPlayer, new MoveNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, true, false));
            _actionRenderes.Add(ActionType.TeleportChooseNpc, new MoveNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false, true));
            _actionRenderes.Add(ActionType.WalkNpcToMarker, new MoveNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false, false));
            _actionRenderes.Add(ActionType.WalkChooseNpcToMarker, new MoveNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false, true));
            _actionRenderes.Add(ActionType.TeleportNpcToNpc, new MoveNpcToNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, false));
            _actionRenderes.Add(ActionType.TeleportChooseNpcToNpc, new MoveNpcToNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, true, true));
            _actionRenderes.Add(ActionType.WalkNpcToNpc, new MoveNpcToNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, false));
            _actionRenderes.Add(ActionType.WalkChooseNpcToNpc, new MoveNpcToNpcActionRenderer(defaultTemplateProvider, cachedDbAccess, languageKeyGenerator, localizerFactory, false, true));
        }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="errorCollection">Error Collection</param>
 /// <param name="defaultTemplateProvider">Default Template Provider</param>
 /// <param name="languageKeyGenerator">Language Key Generator</param>
 /// <param name="conditionRenderer">Condition Renderer</param>
 /// <param name="localizerFactory">Localizer Factory</param>
 /// <param name="exportSettings">Export Settings</param>
 /// <param name="project">Project</param>
 public ExportDialogConditionRenderer(ExportPlaceholderErrorCollection errorCollection, ICachedExportDefaultTemplateProvider defaultTemplateProvider, ILanguageKeyGenerator languageKeyGenerator,
                                      IConditionRenderer conditionRenderer, IStringLocalizerFactory localizerFactory, ExportSettings exportSettings, GoNorthProject project) :
     base(errorCollection, localizerFactory)
 {
     _defaultTemplateProvider = defaultTemplateProvider;
     _languageKeyGenerator    = languageKeyGenerator;
     _conditionRenderer       = conditionRenderer;
     _localizer      = localizerFactory.Create(typeof(ExportDialogConditionRenderer));
     _exportSettings = exportSettings;
     _project        = project;
 }
Пример #13
0
        /// <summary>
        /// Returns the node type of dailog step
        /// </summary>
        /// <param name="dialogData">Dialog data to check</param>
        /// <param name="errorCollection">Error Collection to send errors to</param>
        /// <returns>Node type</returns>
        private string GetNodeType(ExportDialogData dialogData, ExportPlaceholderErrorCollection errorCollection)
        {
            string nodeType = dialogData.GetNodeType();

            if (!string.IsNullOrEmpty(nodeType))
            {
                return(nodeType);
            }

            errorCollection.AddUnknownDialogStepError();
            return("unknown");
        }
Пример #14
0
        /// <summary>
        /// Parses a template
        /// </summary>
        /// <param name="code">Code of the template</param>
        /// <param name="errorCollection">Error collection</param>
        /// <returns>Parsed template</returns>
        public static Template ParseTemplate(string code, ExportPlaceholderErrorCollection errorCollection)
        {
            Template parsedTemplate = Template.Parse(code, "");

            if (parsedTemplate.HasErrors)
            {
                errorCollection.AddTemplateHasErrors();
                return(null);
            }

            return(parsedTemplate);
        }
Пример #15
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="exportCachedDbAccess">Export cached Db access</param>
        /// <param name="errorCollection">Error Collection</param>
        /// <param name="defaultTemplateProvider">Default Template Provider</param>
        /// <param name="dailyRoutineFunctionNameGenerator">Daily routine function name generator</param>
        /// <param name="scribanLanguageKeyGenerator">Scriban Language key generator</param>
        /// <param name="localizerFactory">Localizer Factory</param>
        /// <param name="exportSettings">Export Settings</param>
        /// <param name="project">Project</param>
        public ExportReferenceRenderer(IExportCachedDbAccess exportCachedDbAccess, ExportPlaceholderErrorCollection errorCollection, ICachedExportDefaultTemplateProvider defaultTemplateProvider, IDailyRoutineFunctionNameGenerator dailyRoutineFunctionNameGenerator,
                                       IScribanLanguageKeyGenerator scribanLanguageKeyGenerator, IStringLocalizerFactory localizerFactory, ExportSettings exportSettings, GoNorthProject project)
        {
            _errorCollection         = errorCollection;
            _defaultTemplateProvider = defaultTemplateProvider;
            _exportCachedDbAccess    = exportCachedDbAccess;
            _localizer = localizerFactory.Create(typeof(ExportReferenceRenderer));
            _project   = project;

            _renderers = new Dictionary <ExportTemplateRenderingEngine, IReferenceStepRenderer> {
                { ExportTemplateRenderingEngine.Scriban, new ScribanReferenceStepRenderer(exportCachedDbAccess, dailyRoutineFunctionNameGenerator, exportSettings, errorCollection, scribanLanguageKeyGenerator, localizerFactory) }
            };
        }
Пример #16
0
        /// <summary>
        /// Replaces the base placeholders
        /// </summary>
        /// <param name="errorCollection">Error collection</param>
        /// <param name="code">Code to fill</param>
        /// <param name="data">Dialog Step Data</param>
        /// <param name="nextStep">Next step in the dialog</param>
        /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param>
        /// <returns>Base placeholders</returns>
        public async Task <string> ReplaceBasePlaceholders(ExportPlaceholderErrorCollection errorCollection, string code, ExportDialogData data, ExportDialogData nextStep, FlexFieldObject flexFieldObject)
        {
            Template parsedTemplate = ScribanParsingUtil.ParseTemplate(code, _errorCollection);

            if (parsedTemplate == null)
            {
                return(code);
            }

            ScribanDialogStepBaseDataWithNextNode nodeData = GetBaseNodeData(data, nextStep, flexFieldObject);
            TemplateContext context = BuildTemplateContext(nodeData);

            return(await parsedTemplate.RenderAsync(context));
        }
Пример #17
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="exportCachedDbAccess">Export cached Db access</param>
        /// <param name="errorCollection">Error Collection</param>
        /// <param name="defaultTemplateProvider">Default Template Provider</param>
        /// <param name="languageKeyGenerator">Language Key Generator</param>
        /// <param name="conditionRenderer">Condition Renderer</param>
        /// <param name="localizerFactory">Localizer Factory</param>
        /// <param name="exportSettings">Export Settings</param>
        /// <param name="project">Project</param>
        public ExportDialogConditionRenderer(IExportCachedDbAccess exportCachedDbAccess, ExportPlaceholderErrorCollection errorCollection, ICachedExportDefaultTemplateProvider defaultTemplateProvider, ILanguageKeyGenerator languageKeyGenerator,
                                             IConditionRenderer conditionRenderer, IStringLocalizerFactory localizerFactory, ExportSettings exportSettings, GoNorthProject project)
        {
            _errorCollection         = errorCollection;
            _defaultTemplateProvider = defaultTemplateProvider;
            _conditionRenderer       = conditionRenderer;
            _exportSettings          = exportSettings;
            _localizer = localizerFactory.Create(typeof(ExportDialogConditionRenderer));
            _project   = project;

            _renderers = new Dictionary <ExportTemplateRenderingEngine, IConditionStepRenderer> {
                { ExportTemplateRenderingEngine.Legacy, new LegacyConditionStepRenderer(languageKeyGenerator, exportSettings, errorCollection, conditionRenderer, localizerFactory, project) },
                { ExportTemplateRenderingEngine.Scriban, new ScribanConditionStepRenderer(exportCachedDbAccess, exportSettings, errorCollection, conditionRenderer, localizerFactory, project) }
            };
        }
Пример #18
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="exportCachedDbAccess">Export cached Db access</param>
        /// <param name="errorCollection">Error Collection</param>
        /// <param name="defaultTemplateProvider">Default Template Provider</param>
        /// <param name="languageKeyGenerator">Language Key Generator</param>
        /// <param name="scribanLanguageKeyGenerator">Scriban Language key generator</param>
        /// <param name="localizerFactory">Localizer Factory</param>
        /// <param name="exportSettings">Export Settings</param>
        /// <param name="project">Project</param>
        /// <param name="isPlayerLine">true if its a player line, else false</param>
        public ExportDialogTextLineRenderer(IExportCachedDbAccess exportCachedDbAccess, ExportPlaceholderErrorCollection errorCollection, ICachedExportDefaultTemplateProvider defaultTemplateProvider, ILanguageKeyGenerator languageKeyGenerator,
                                            IScribanLanguageKeyGenerator scribanLanguageKeyGenerator, IStringLocalizerFactory localizerFactory, ExportSettings exportSettings, GoNorthProject project,
                                            bool isPlayerLine)
        {
            _errorCollection         = errorCollection;
            _defaultTemplateProvider = defaultTemplateProvider;
            _localizer    = localizerFactory.Create(typeof(ExportDialogTextLineRenderer));
            _project      = project;
            _isPlayerLine = isPlayerLine;

            _renderers = new Dictionary <ExportTemplateRenderingEngine, ITextLineRenderer> {
                { ExportTemplateRenderingEngine.Legacy, new LegacyTextLineRenderer(languageKeyGenerator, exportSettings, errorCollection, localizerFactory, isPlayerLine) },
                { ExportTemplateRenderingEngine.Scriban, new ScribanTextLineRenderer(exportCachedDbAccess, exportSettings, errorCollection, scribanLanguageKeyGenerator, localizerFactory, isPlayerLine) }
            };
        }
Пример #19
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="defaultTemplateProvider">Default Template Provider</param>
 /// <param name="cachedDbAccess">Cached Db Access</param>
 /// <param name="languageKeyGenerator">Language Key Generator</param>
 /// <param name="scribanLanguageKeyGenerator">Scriban language key generator</param>
 /// <param name="conditionRenderer">Condition Renderer</param>
 /// <param name="legacyDailyRoutineEventPlaceholderResolver">Daily routine event placeholder resolver</param>
 /// <param name="dailyRoutineFunctionNameGenerator">Daily routine function name generator</param>
 /// <param name="actionTranslator">Action translator</param>
 /// <param name="stringLocalizerFactory">String Localizer Factor</param>
 public NodeGraphBaseRenderer(ICachedExportDefaultTemplateProvider defaultTemplateProvider, IExportCachedDbAccess cachedDbAccess, ILanguageKeyGenerator languageKeyGenerator, IScribanLanguageKeyGenerator scribanLanguageKeyGenerator,
                              IConditionRenderer conditionRenderer, ILegacyDailyRoutineEventPlaceholderResolver legacyDailyRoutineEventPlaceholderResolver, IDailyRoutineFunctionNameGenerator dailyRoutineFunctionNameGenerator,
                              IActionTranslator actionTranslator, IStringLocalizerFactory stringLocalizerFactory)
 {
     _defaultTemplateProvider     = defaultTemplateProvider;
     _cachedDbAccess              = cachedDbAccess;
     _languageKeyGenerator        = languageKeyGenerator;
     _scribanLanguageKeyGenerator = scribanLanguageKeyGenerator;
     _conditionRenderer           = conditionRenderer;
     _legacyDailyRoutineEventPlaceholderResolver = legacyDailyRoutineEventPlaceholderResolver;
     _dailyRoutineFunctionNameGenerator          = dailyRoutineFunctionNameGenerator;
     _actionTranslator       = actionTranslator;
     _stringLocalizerFactory = stringLocalizerFactory;
     _errorCollection        = null;
     _stepRenderers          = new List <IExportDialogStepRenderer>();
 }
Пример #20
0
        /// <summary>
        /// Returns true if any node in a list is of a certain type
        /// </summary>
        /// <param name="nodes">Dialog Nodes</param>
        /// <param name="nodeType">Node Type</param>
        /// <param name="errorCollection">Error Collection to send errors to</param>
        /// <returns>true if any node is of the searched type</returns>
        private bool IsAnyNodeOfType(List <ExportDialogData> nodes, string nodeType, ExportPlaceholderErrorCollection errorCollection)
        {
            if (nodes == null)
            {
                return(false);
            }

            foreach (ExportDialogData curNode in nodes)
            {
                if (IsNodeOfType(curNode, nodeType, errorCollection))
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #21
0
        /// <summary>
        /// Returns the npc to use
        /// </summary>
        /// <param name="npc">Npc to which the dialog belongs</param>
        /// <param name="errorCollection">Error Collection</param>
        /// <returns>Value Object</returns>
        private async Task <IFlexFieldExportable> GetNpc(KortistoNpc npc, ExportPlaceholderErrorCollection errorCollection)
        {
            if (_isPlayer)
            {
                GoNorthProject curProject = await _cachedDbAccess.GetDefaultProject();

                npc = await _cachedDbAccess.GetPlayerNpc(curProject.Id);

                if (npc == null)
                {
                    errorCollection.AddNoPlayerNpcExistsError();
                    return(null);
                }
            }

            return(npc);
        }
Пример #22
0
        /// <summary>
        /// Fills the placeholders of a code
        /// </summary>
        /// <param name="templateType">Template Type</param>
        /// <param name="code">Code to fill</param>
        /// <param name="data">Export Data</param>
        /// <returns>Filled Code</returns>
        public async Task <ExportPlaceholderFillResult> FillPlaceholders(TemplateType templateType, string code, ExportObjectData data)
        {
            ExportPlaceholderErrorCollection errorCollection = new ExportPlaceholderErrorCollection(_localizerFactory);

            foreach (IExportTemplateTopicPlaceholderResolver curResolver in _exportTemplatePlaceholderResolvers)
            {
                if (curResolver.IsValidForTemplateType(templateType))
                {
                    curResolver.SetErrorMessageCollection(errorCollection);
                    code = await curResolver.FillPlaceholders(code, data);
                }
            }

            ExportPlaceholderFillResult result = new ExportPlaceholderFillResult();

            result.Code   = code;
            result.Errors = errorCollection;
            return(result);
        }
 /// <summary>
 /// Returns the value object to use
 /// </summary>
 /// <param name="parsedData">Parsed data</param>
 /// <param name="flexFieldObject">Flex field object</param>
 /// <param name="errorCollection">Error Collection</param>
 /// <returns>Value Object</returns>
 protected abstract Task <IFlexFieldExportable> GetValueObject(SpawnObjectActionData parsedData, FlexFieldObject flexFieldObject, ExportPlaceholderErrorCollection errorCollection);
        /// <summary>
        /// Builds a preview text from parsed data
        /// </summary>
        /// <param name="parsedData">Parsed data</param>
        /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param>
        /// <param name="errorCollection">Error Collection</param>
        /// <param name="child">Child node</param>
        /// <param name="parent">Parent</param>
        /// <returns>Preview text</returns>
        public override async Task <string> BuildPreviewTextFromParsedData(SpawnObjectAtMarkerRendererBase.SpawnObjectActionData parsedData, FlexFieldObject flexFieldObject, ExportPlaceholderErrorCollection errorCollection, ExportDialogData child, ExportDialogData parent)
        {
            IFlexFieldExportable valueObject = await GetValueObject(parsedData, flexFieldObject, errorCollection);

            if (valueObject == null)
            {
                return(string.Empty);
            }

            KartaMapNamedMarkerQueryResult markerResult = await GetMarker(parsedData);

            if (markerResult == null)
            {
                return(string.Empty);
            }

            return(GetPreviewPrefixText(valueObject.Name, markerResult.MarkerName));
        }
        /// <summary>
        /// Builds an action from parsed data
        /// </summary>
        /// <param name="parsedData">Parsed data</param>
        /// <param name="data">Dialog data</param>
        /// <param name="project">Project</param>
        /// <param name="errorCollection">Error Collection</param>
        /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param>
        /// <param name="exportSettings">Export Settings</param>
        /// <returns>Action string</returns>
        public override async Task <string> BuildActionFromParsedData(SpawnObjectAtMarkerRendererBase.SpawnObjectActionData parsedData, ExportDialogData data, GoNorthProject project, ExportPlaceholderErrorCollection errorCollection, FlexFieldObject flexFieldObject, ExportSettings exportSettings)
        {
            ExportTemplate actionTemplate = await GetExportTemplate(project);

            IFlexFieldExportable valueObject = await GetValueObject(parsedData, flexFieldObject, errorCollection);

            if (valueObject == null)
            {
                return(string.Empty);
            }

            KartaMapNamedMarkerQueryResult markerResult = await GetMarker(parsedData);

            if (markerResult == null)
            {
                errorCollection.AddDialogMarkerNotFoundError();
                return(string.Empty);
            }

            string actionCode = ExportUtil.BuildPlaceholderRegex(Placeholder_TargetMarker_Name).Replace(actionTemplate.Code, markerResult.MarkerName);

            actionCode = ExportUtil.BuildPlaceholderRegex(Placeholder_Rotation_Pitch).Replace(actionCode, parsedData.Pitch.ToString());
            actionCode = ExportUtil.BuildPlaceholderRegex(Placeholder_Rotation_Yaw).Replace(actionCode, parsedData.Yaw.ToString());
            actionCode = ExportUtil.BuildPlaceholderRegex(Placeholder_Rotation_Roll).Replace(actionCode, parsedData.Roll.ToString());

            ExportObjectData flexFieldExportData = new ExportObjectData();

            flexFieldExportData.ExportData.Add(ExportConstants.ExportDataObject, valueObject);
            flexFieldExportData.ExportData.Add(ExportConstants.ExportDataObjectType, GetFlexFieldExportObjectType());

            _flexFieldPlaceholderResolver.SetErrorMessageCollection(errorCollection);
            actionCode = _flexFieldPlaceholderResolver.FillPlaceholders(actionCode, flexFieldExportData).Result;

            return(actionCode);
        }
Пример #26
0
 /// <summary>
 /// Builds a preview text from parsed data
 /// </summary>
 /// <param name="parsedData">Parsed data</param>
 /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param>
 /// <param name="errorCollection">Error Collection</param>
 /// <param name="child">Child node</param>
 /// <param name="parent">Parent</param>
 /// <returns>Preview text</returns>
 public override Task <string> BuildPreviewTextFromParsedData(ScribanOpenShopActionRenderer.OpenShopActionData parsedData, FlexFieldObject flexFieldObject, ExportPlaceholderErrorCollection errorCollection, ExportDialogData child, ExportDialogData parent)
 {
     return(Task.FromResult("Open shop"));
 }
Пример #27
0
 /// <summary>
 /// Builds an action from parsed data
 /// </summary>
 /// <param name="template">Template to export</param>
 /// <param name="parsedData">Parsed data</param>
 /// <param name="data">Dialog data</param>
 /// <param name="nextStep">Next step in the dialog</param>
 /// <param name="project">Project</param>
 /// <param name="errorCollection">Error Collection</param>
 /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param>
 /// <param name="exportSettings">Export Settings</param>
 /// <param name="stepRenderer">Action Step renderer</param>
 /// <returns>Action string</returns>
 public override async Task <string> BuildActionFromParsedData(ExportTemplate template, ScribanOpenShopActionRenderer.OpenShopActionData parsedData, ExportDialogData data, ExportDialogData nextStep, GoNorthProject project, ExportPlaceholderErrorCollection errorCollection,
                                                               FlexFieldObject flexFieldObject, ExportSettings exportSettings, IActionStepRenderer stepRenderer)
 {
     return(await ScribanActionRenderingUtil.FillPlaceholders(_cachedDbAccess, errorCollection, template.Code, parsedData, flexFieldObject, data, nextStep, null, stepRenderer));
 }
Пример #28
0
        /// <summary>
        /// Returns the quest use
        /// </summary>
        /// <param name="parsedData">Parsed data</param>
        /// <param name="errorCollection">Error Collection</param>
        /// <returns>Value Object</returns>
        private async Task <IFlexFieldExportable> GetQuest(AddQuestTextRenderer.AddQuestTextData parsedData, ExportPlaceholderErrorCollection errorCollection)
        {
            AikaQuest quest = await _cachedDbAccess.GetQuestById(parsedData.QuestId);

            if (quest == null)
            {
                errorCollection.AddDialogQuestNotFoundError();
                return(null);
            }

            return(quest);
        }
Пример #29
0
        /// <summary>
        /// Builds a preview text from parsed data
        /// </summary>
        /// <param name="parsedData">Parsed data</param>
        /// <param name="npc">Npc to which the dialog belongs</param>
        /// <param name="errorCollection">Error Collection</param>
        /// <returns>Preview text</returns>
        public override async Task <string> BuildPreviewTextFromParsedData(AddQuestTextRenderer.AddQuestTextData parsedData, KortistoNpc npc, ExportPlaceholderErrorCollection errorCollection)
        {
            IFlexFieldExportable valueObject = await GetQuest(parsedData, errorCollection);

            if (valueObject == null)
            {
                return(string.Empty);
            }

            return("AddQuestText (" + valueObject.Name + ", " + ExportUtil.BuildTextPreview(parsedData.QuestText) + ")");
        }
Пример #30
0
        /// <summary>
        /// Builds an action from parsed data
        /// </summary>
        /// <param name="parsedData">Parsed data</param>
        /// <param name="data">Dialog data</param>
        /// <param name="project">Project</param>
        /// <param name="errorCollection">Error Collection</param>
        /// <param name="npc">Npc to which the dialog belongs</param>
        /// <param name="exportSettings">Export Settings</param>
        /// <returns>Action string</returns>
        public override async Task <string> BuildActionFromParsedData(AddQuestTextRenderer.AddQuestTextData parsedData, ExportDialogData data, GoNorthProject project, ExportPlaceholderErrorCollection errorCollection, KortistoNpc npc, ExportSettings exportSettings)
        {
            ExportTemplate actionTemplate = await GetExportTemplate(project);

            IFlexFieldExportable valueObject = await GetQuest(parsedData, errorCollection);

            if (valueObject == null)
            {
                return(string.Empty);
            }

            string actionCode = ExportUtil.BuildPlaceholderRegex(Placeholder_QuestText).Replace(actionTemplate.Code, ExportUtil.EscapeCharacters(parsedData.QuestText, exportSettings.EscapeCharacter, exportSettings.CharactersNeedingEscaping, exportSettings.NewlineCharacter));

            actionCode = ExportUtil.BuildPlaceholderRegex(Placeholder_QuestText_Preview).Replace(actionCode, ExportUtil.BuildTextPreview(parsedData.QuestText));
            actionCode = ExportUtil.BuildPlaceholderRegex(Placeholder_QuestText_LangKey).Replace(actionCode, m => {
                return(_languageKeyGenerator.GetDialogTextLineKey(npc.Id, valueObject.Name, ExportConstants.LanguageKeyTypeQuest, data.Id, parsedData.QuestText).Result);
            });

            ExportObjectData flexFieldExportData = new ExportObjectData();

            flexFieldExportData.ExportData.Add(ExportConstants.ExportDataObject, valueObject);
            flexFieldExportData.ExportData.Add(ExportConstants.ExportDataObjectType, ExportConstants.ExportObjectTypeQuest);

            _flexFieldPlaceholderResolver.SetErrorMessageCollection(errorCollection);
            actionCode = _flexFieldPlaceholderResolver.FillPlaceholders(actionCode, flexFieldExportData).Result;

            return(actionCode);
        }