# Dialogue Plugin

**URL:** <https://forums.unrealengine.com/t/dialogue-plugin/59871>\
**Category:** UE Marketplace\
**Tags:** unreal-engine, fab\
**Created:** [March 31, 2016, 11:23pm UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871 "2016-03-31T23:23:48Z")\
**Posts on this page:** 20\
**Page:** 15

<div class="post-metadata">

**Author:** ![Brannigan](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Brannigan](https://forums.unrealengine.com/u/Brannigan)\
**Post date:** [August 10, 2018, 5:56pm UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/299 "2018-08-10T17:56:55Z")

</div>

Seems a lot simpler than I had expected. Should be I just need to add an FText variable in the FDialogueNode struct, then in BP in the reply widget is where I get the break DialogueNode that has the variables, which I assume is really all I need?

I was looking in your source and found the TextCommitted() in DialogueNodeWidget.cpp as well as the OnNodeTextCommitted() in DialogueViewportWidget.cpp. 99% I don’t need to touch the dialogueviewportwidget code as I assume that strictly for the text on the node, and about 90% certain I don’t need to touch the dialoguenodewidget.

Problem is adding a variable FText isn’t showing up in the widgets or bp. Checked the break node and it’s not there either. Simply copy/pasted the Text variable and changed the name.

Also, would it be possible for you guys to add blueprint style comments to your dialogue viewport? Just makes things easy to organize and shows relevant details at a glance, but I can just as easily use unconnected nodes.

---

<div class="post-metadata">

**Author:** ![CodeSpartan](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/codespartan/32/1194561_2.png) [@CodeSpartan](https://forums.unrealengine.com/u/CodeSpartan)\
**Post date:** [August 12, 2018, 9:06am UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/300 "2018-08-12T09:06:56Z")

</div>

> [@Brannigan](#):
>
> Seems a lot simpler than I had expected. Should be I just need to add an FText variable in the FDialogueNode struct, then in BP in the reply widget is where I get the break DialogueNode that has the variables, which I assume is really all I need?
> 
> I was looking in your source and found the TextCommitted() in DialogueNodeWidget.cpp as well as the OnNodeTextCommitted() in DialogueViewportWidget.cpp. 99% I don’t need to touch the dialogueviewportwidget code as I assume that strictly for the text on the node, and about 90% certain I don’t need to touch the dialoguenodewidget.
> 
> Problem is adding a variable FText isn’t showing up in the widgets or bp. Checked the break node and it’s not there either. Simply copy/pasted the Text variable and changed the name.
> 
> Also, would it be possible for you guys to add blueprint style comments to your dialogue viewport? Just makes things easy to organize and shows relevant details at a glance, but I can just as easily use unconnected nodes.

In Dialogue.h on above line 62, add:

```auto

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue Node")
    FText AlternativeText;

```

In DialoguePluginEditorSettingsDetails.h, below line 15, add:

```auto

    void TextAlternativeCommited(const FText& InText, ETextCommit::Type InCommitType, UDialogue* Dialogue, int32 id);

```

In DialoguePluginEditorSettingsDetails.cpp, below line 68, add:

```auto

        CurrentNodeCategory.AddCustomRow(LOCTEXT("AltTextLabel", "AltTextLabel"))
        .WholeRowContent()
        
            SNew(STextBlock).Font(IDetailLayoutBuilder::GetDetailFont())
            .Text(LOCTEXT("AlternativeText", "Alternative Text"))
        ];

        CurrentNodeCategory.AddCustomRow(LOCTEXT("AltTextValue", "AltTextValue"))
        .WholeRowContent()
        
            SNew(SBox)
            .HeightOverride(100)
            
                SNew(SMultiLineEditableTextBox).Text(CurrentNode.AlternativeText)
                .AutoWrapText(true)
                .OnTextCommitted(this, &FDialoguePluginEditorSettingsDetails::TextAlternativeCommited, Dialogue, Dialogue->CurrentNodeId)
                .ModiferKeyForNewLine(EModifierKey::Shift)
            ]
        ];

```

Then in the same file, at the end of the file (but above the #undef macro), add:

```auto

void FDialoguePluginEditorSettingsDetails::TextAlternativeCommited(const FText& NewText, ETextCommit::Type CommitInfo, UDialogue* Dialogue, int32 id)
{
    int32 index;
    FDialogueNode CurrentNode = Dialogue->GetNodeById(id, index);

    // we don't commit text if it hasn't changed
    if (Dialogue->Data[index].AlternativeText.EqualTo(NewText))
    {
        return;
    }

    const FScopedTransaction Transaction(LOCTEXT("AltTextCommited", "Edited Node Alternative Text"));
    Dialogue->Modify();

    Dialogue->Data[index].AlternativeText = NewText;
}

```

Now compile, open the project and check if an additional text window has appeared like this:

https://i.gyazo./2daf02620305e4981d493c1f2bc3befe.png

If it has, check that it functions correctly, and check if the Ctrl+Z works correctly.

---

<div class="post-metadata">

**Author:** ![CodeSpartan](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/codespartan/32/1194561_2.png) [@CodeSpartan](https://forums.unrealengine.com/u/CodeSpartan)\
**Post date:** [August 12, 2018, 9:13am UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/301 "2018-08-12T09:13:13Z")

</div>

> [@Brannigan](#):
>
> Also, would it be possible for you guys to add blueprint style comments to your dialogue viewport? Just makes things easy to organize and shows relevant details at a glance, but I can just as easily use unconnected nodes.

Definitely a good idea, but also a very difficult thing to do, unfortunately. So not for the foreseeable future.

---

<div class="post-metadata">

**Author:** ![Brannigan](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Brannigan](https://forums.unrealengine.com/u/Brannigan)\
**Post date:** [August 12, 2018, 2:43pm UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/302 "2018-08-12T14:43:51Z")

</div>

> [@](#):
>
> Definitely a good idea, but also a very difficult thing to do, unfortunately. So not for the foreseeable future.

No problem, I had a feeling it would be pretty complicated

Though the alternative text isn’t popping up unfortunately. Did a direct copy and paste so as to avoid any errors on my side.  
Also deleted saved, binaries, and intermediate -\> generated vs files -\> built solution then re opened the project but no luck.

---

<div class="post-metadata">

**Author:** ![CodeSpartan](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/codespartan/32/1194561_2.png) [@CodeSpartan](https://forums.unrealengine.com/u/CodeSpartan)\
**Post date:** [August 12, 2018, 5:22pm UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/303 "2018-08-12T17:22:31Z")

</div>

> [@Brannigan](#):
>
> Though the alternative text isn’t popping up unfortunately. Did a direct copy and paste so as to avoid any errors on my side.  
> Also deleted saved, binaries, and intermediate -\> generated vs files -\> built solution then re opened the project but no luck.

Have you copied the plugin from the engine into the project? If so, have you also removed the plugin from engine (in Epic Launcher)?

---

<div class="post-metadata">

**Author:** ![Brannigan](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Brannigan](https://forums.unrealengine.com/u/Brannigan)\
**Post date:** [August 12, 2018, 11:49pm UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/304 "2018-08-12T23:49:14Z")

</div>

Yes, and no

---

<div class="post-metadata">

**Author:** ![CodeSpartan](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/codespartan/32/1194561_2.png) [@CodeSpartan](https://forums.unrealengine.com/u/CodeSpartan)\
**Post date:** [August 13, 2018, 3:25am UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/305 "2018-08-13T03:25:41Z")

</div>

> [@Brannigan](#):
>
> Yes, and no

Try removing the plugin from the engine via Launcher. It looks like your project is using the engine version of the plugin, ignoring the one in your project.

---

<div class="post-metadata">

**Author:** ![Brannigan](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Brannigan](https://forums.unrealengine.com/u/Brannigan)\
**Post date:** [August 13, 2018, 9:35pm UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/306 "2018-08-13T21:35:38Z")

</div>

> [@](#):
>
> Try removing the plugin from the engine via Launcher. It looks like your project is using the engine version of the plugin, ignoring the one in your project.

Yeah, I had tried that right after seeing your reply but the project went haywire, so wasn’t sure I should have. After seeing you suggesting to though I went back through and found it went crazy because the only file in the project plugin folder was the dialogue.h class, everything else was empty.  
Reinstalled in and what you had previously posted works perfect.

Thanks for all the help!

---

<div class="post-metadata">

**Author:** ![infinitipo](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@infinitipo](https://forums.unrealengine.com/u/infinitipo)\
**Post date:** [August 18, 2018, 1:46am UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/307 "2018-08-18T01:46:08Z")

</div>

Could someone please help me out here? I can’t get anything, even the base demo of the dialogue system, to work. The documentation is very sparse and vague about some things, so I have no clue how to set anything up. I can make and understand the dialogue trees just fine, but for the life of me can’t get any of the plugin to function in-game. I’ve tried creating my own widgets using the guide, but there’s no “To NPC Reply” node available to me, and no explanation on how to make one. Basically, I feel like I just wasted a lot of money on something that looks awesome, but is essentially unusable. If there’s any way I could get some actual pointers or could request a refund, that would be much appreciated.

Cheers

---

<div class="post-metadata">

**Author:** ![CodeSpartan](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/codespartan/32/1194561_2.png) [@CodeSpartan](https://forums.unrealengine.com/u/CodeSpartan)\
**Post date:** [August 21, 2018, 12:24am UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/308 "2018-08-21T00:24:44Z")

</div>

> [@infinitipo](#):
>
> Could someone please help me out here? I can’t get anything, even the base demo of the dialogue system, to work. The documentation is very sparse and vague about some things, so I have no clue how to set anything up. I can make and understand the dialogue trees just fine, but for the life of me can’t get any of the plugin to function in-game. I’ve tried creating my own widgets using the guide, but there’s no “To NPC Reply” node available to me, and no explanation on how to make one. Basically, I feel like I just wasted a lot of money on something that looks awesome, but is essentially unusable. If there’s any way I could get some actual pointers or could request a refund, that would be much appreciated.
> 
> Cheers

Hi,

Have you watched the first tutorial video? It goes over how to create and open a dialogue in game.  
The project that you see in the video can also be downloaded and inspected, the links are on the marketplace page.

But to give one of the simplest examples of how you can open a dialogue in game is like this:

https://i.gyazo./a13a57e7a8c18b862fa78d585ea6261a.png

This will open a dialogue when you press the K button on your keyboard.  
You can put these blueprints in your Character or in your Controller, it’s up to you.

To do this, you only have to install the plugin through the Epic Launcher and make sure it’s activated in your project, no other actions are necessary, no need to even read the documentation, because it goes over concepts that are slightly more complicated.

Let me know if you need explanations on how to open your Character or Controller.

---

<div class="post-metadata">

**Author:** ![Brannigan](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Brannigan](https://forums.unrealengine.com/u/Brannigan)\
**Post date:** [August 24, 2018, 1:11am UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/309 "2018-08-24T01:11:09Z")

</div>

> [@infinitipo](#):
>
> Could someone please help me out here? I can’t get anything, even the base demo of the dialogue system, to work. The documentation is very sparse and vague about some things, so I have no clue how to set anything up. I can make and understand the dialogue trees just fine, but for the life of me can’t get any of the plugin to function in-game. I’ve tried creating my own widgets using the guide, but there’s no “To NPC Reply” node available to me, and no explanation on how to make one. Basically, I feel like I just wasted a lot of money on something that looks awesome, but is essentially unusable. If there’s any way I could get some actual pointers or could request a refund, that would be much appreciated.
> 
> Cheers

The plugin works perfectly fine and has been a huge for my game, please don’t bash and his team, if you’re new to development just ask for help.

---

<div class="post-metadata">

**Author:** ![Pugscape](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Pugscape](https://forums.unrealengine.com/u/Pugscape)\
**Post date:** [August 24, 2018, 12:36pm UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/310 "2018-08-24T12:36:30Z")

</div>

Hey maybe this has been asked already but is there a way to make the text appear with a typewriter effect?

---

<div class="post-metadata">

**Author:** ![CodeSpartan](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/codespartan/32/1194561_2.png) [@CodeSpartan](https://forums.unrealengine.com/u/CodeSpartan)\
**Post date:** [September 14, 2018, 10:39am UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/311 "2018-09-14T10:39:06Z")

</div>

> [@Vincion](#):
>
> Hey maybe this has been asked already but is there a way to make the text appear with a typewriter effect?

If you can make a typewriter effect in an empty project in UMG, then you can put it in here, too. But the plugin doesn’t provide any effects.

---

<div class="post-metadata">

**Author:** ![Brannigan](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Brannigan](https://forums.unrealengine.com/u/Brannigan)\
**Post date:** [September 21, 2018, 7:04pm UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/312 "2018-09-21T19:04:26Z")

</div>

Since you’re familiar with the innerworkings of the plugin, I figured I’d ask this here.  
How would you go about making variables on the nodes that can be changed at run time, ie: a bool that switches to false once the node has been presented.  
Essentially I’m trying to check that bool in UDialogueUserWidget::IsConditionMet\_Implementation and change it in UDialogueUserWidget::RunEventsFor\_Implementation

I’ve tried passing the FDialogueNode struct by ref using UPARAM(ref) FDialogueNode&, but I get different memory addresses every time.  
I suppose I just need a fresh outsider’s perspective

---

<div class="post-metadata">

**Author:** ![Sebviz](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Sebviz](https://forums.unrealengine.com/u/Sebviz)\
**Post date:** [September 23, 2018, 11:44pm UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/313 "2018-09-23T23:44:47Z")

</div>

Hi! I just bought you plugin , looks great!

I’ve run into a wall trying to get it to work with 3DWidgets and a gamepad.

My Issues so far:

1. Unrelated to 3DWidgets - When I press a button, it always returns the first answer. I followed you setup in the documentation but I’m obviously missing something?

2. Related to 3DWidgets - The Dialogue System works fine as a normal widget (except the first answer issue) but my 3DWidget is not updating when i press Continue. Do 3DWidgets not update at runtime?

I’ve attached some screenshots of the setup.

---

<div class="post-metadata">

**Author:** ![CodeSpartan](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/codespartan/32/1194561_2.png) [@CodeSpartan](https://forums.unrealengine.com/u/CodeSpartan)\
**Post date:** [September 25, 2018, 3:42am UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/314 "2018-09-25T03:42:09Z")

</div>

> [@Brannigan](#):
>
> Since you’re familiar with the innerworkings of the plugin, I figured I’d ask this here.  
> How would you go about making variables on the nodes that can be changed at run time, ie: a bool that switches to false once the node has been presented.  
> Essentially I’m trying to check that bool in UDialogueUserWidget::IsConditionMet\_Implementation and change it in UDialogueUserWidget::RunEventsFor\_Implementation
> 
> I’ve tried passing the FDialogueNode struct by ref using UPARAM(ref) FDialogueNode&, but I get different memory addresses every time.  
> I suppose I just need a fresh outsider’s perspective

If I understand you correctly, you want to have a bool on the node (in the data asset) and be able to change it at runtime? If that’s the case, I may venture a guess that something is wrong with your architecture and you should do it differently.

Are you trying to mark visited nodes as dirty? Because that’s not how you should do it.

---

<div class="post-metadata">

**Author:** ![CodeSpartan](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/codespartan/32/1194561_2.png) [@CodeSpartan](https://forums.unrealengine.com/u/CodeSpartan)\
**Post date:** [September 25, 2018, 3:53am UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/315 "2018-09-25T03:53:40Z")

</div>

> [@Sebviz](#):
>
> Hi! I just bought you plugin , looks great!
> 
> I’ve run into a wall trying to get it to work with 3DWidgets and a gamepad.
> 
> My Issues so far:
> 
> 1. Unrelated to 3DWidgets - When I press a button, it always returns the first answer. I followed you setup in the documentation but I’m obviously missing something?
> 
> 2. Related to 3DWidgets - The Dialogue System works fine as a normal widget (except the first answer issue) but my 3DWidget is not updating when i press Continue. Do 3DWidgets not update at runtime?
> 
> I’ve attached some screenshots of the setup.

Hey. Please upload your project to google drive and send me a link by email (you can see it on my seller’s profile on the marketplace). I don’t recognize the “get key” node that you have. You should have this: [https://api.unrealengine./INT/Blu…Key/index.html](https://api.unrealengine./INT/BlueprintAPI/Utilities/KeyEvent/GetKey/index.html)

---

<div class="post-metadata">

**Author:** ![Brannigan](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Brannigan](https://forums.unrealengine.com/u/Brannigan)\
**Post date:** [September 25, 2018, 4:37pm UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/316 "2018-09-25T16:37:14Z")

</div>

> [@](#):
>
> If I understand you correctly, you want to have a bool on the node (in the data asset) and be able to change it at runtime? If that’s the case, I may venture a guess that something is wrong with your architecture and you should do it differently.
> 
> Are you trying to mark visited nodes as dirty? Because that’s not how you should do it.

I have two bools, one visible for me to check whether I want this to be said once, and another that is set to true in the RunEventsFor, that way the next time the IsConditionsMet is run, the function will return false.

```auto

bool UDialogueUserWidget::IsConditionsMetForNode_Implementation(FDialogueNode Node)
{
    UE_LOG(LogTemp, Warning, TEXT("No repeat for node at %d is %s"), &Node, Node.noRepeat ? TEXT("True") : TEXT("False"));
    if (Node.noRepeat)
    {
        UE_LOG(LogTemp, Warning, TEXT("No repeat is true, returning false in UDialogueUserWidget::IsConditionsMet"));
        return false;
    }

    for (UDialogueConditions* Condition : Node.Conditions)
    {
        if (IsValid(Condition))
        {        
            if (!Condition->IsConditionMet(GetOwningPlayer(), NPCActor))
            {
                return false;
            }
        }
    }
    return true;
}

void UDialogueUserWidget::RunEventsForNode_Implementation(FDialogueNode Node)
{
    if (Node.sayOnce)
    {

        UE_LOG(LogTemp, Warning, TEXT("sayOnce true in UDialogueUserWidget::RunEventsForNode"));
        Node.noRepeat = true;
    }

    for (UDialogueEvents* Event : Node.Events)
    {
        if (IsValid(Event))
        {
            Event->RecieveEventTriggered(GetOwningPlayer(), NPCActor);
        }
    }
}

```

The line if statement in RunEventsFor is working as intended, but because the nodes are being passed in by value, the change isn’t being propagated to the actual data asset.  
I have tried, for these two functions only, passing the node in by ref, but I’m still getting different nodes. I can’t make the node a pointer parameter since FDialogueNode is a struct.  
void UDialogueUserWidget::RunEventsForNode\_Implementation(UPARAM(ref) FDialogueNode& Node) is how I attempted to pass by reference, which I found from Rama

I’m just wondering if you could think of a workaround that won’t break the rest of your code.

---

<div class="post-metadata">

**Author:** ![CodeSpartan](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/codespartan/32/1194561_2.png) [@CodeSpartan](https://forums.unrealengine.com/u/CodeSpartan)\
**Post date:** [September 25, 2018, 5:15pm UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/317 "2018-09-25T17:15:25Z")

</div>

> [@iSpam](#):
>
> I have two bools, one visible for me to check whether I want this to be said once, and another that is set to true in the RunEventsFor, that way the next time the IsConditionsMet is run, the function will return false.
> 
> ```auto
> 
> bool UDialogueUserWidget::IsConditionsMetForNode_Implementation(FDialogueNode Node)
> {
> UE_LOG(LogTemp, Warning, TEXT("No repeat for node at %d is %s"), &Node, Node.noRepeat ? TEXT("True") : TEXT("False"));
> if (Node.noRepeat)
> {
> UE_LOG(LogTemp, Warning, TEXT("No repeat is true, returning false in UDialogueUserWidget::IsConditionsMet"));
> return false;
> }
> 
> for (UDialogueConditions* Condition : Node.Conditions)
> {
> if (IsValid(Condition))
> {
> if (!Condition->IsConditionMet(GetOwningPlayer(), NPCActor))
> {
> return false;
> }
> }
> }
> return true;
> }
> 
> void UDialogueUserWidget::RunEventsForNode_Implementation(FDialogueNode Node)
> {
> if (Node.sayOnce)
> {
> 
> UE_LOG(LogTemp, Warning, TEXT("sayOnce true in UDialogueUserWidget::RunEventsForNode"));
> Node.noRepeat = true;
> }
> 
> for (UDialogueEvents* Event : Node.Events)
> {
> if (IsValid(Event))
> {
> Event->RecieveEventTriggered(GetOwningPlayer(), NPCActor);
> }
> }
> }
> 
> ```
> 
> The line if statement in RunEventsFor is working as intended, but because the nodes are being passed in by value, the change isn’t being propagated to the actual data asset.  
> I have tried, for these two functions only, passing the node in by ref, but I’m still getting different nodes. I can’t make the node a pointer parameter since FDialogueNode is a struct.  
> void UDialogueUserWidget::RunEventsForNode\_Implementation(UPARAM(ref) FDialogueNode& Node) is how I attempted to pass by reference, which I found from Rama
> 
> I’m just wondering if you could think of a workaround that won’t break the rest of your code.

I see.

Data assets are your game files. The only reason you can modify them at runtime in the editor is because the editor makes no distinction between whether you’re doing it through a Bluetility or in PIE. But you won’t be able to modify data assets on runtime in a cooked build. This is because they’re your game files. It’s like irrevocably modifying a mesh of a dinosaur into a bird because you’ve reached a certain checkpoint in game. But what happens if you load a prior savegame or you’ve started a new game? Your file will effectively be corrupt, because you’ll see a bird. That’s why it’s not possible.

Like I said, if you want to mark your nodes as read, you need to make an array of ints and add their indexes. This way you know you’ve visited the nodes.

---

<div class="post-metadata">

**Author:** ![Brannigan](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Brannigan](https://forums.unrealengine.com/u/Brannigan)\
**Post date:** [September 27, 2018, 6:06pm UTC](https://forums.unrealengine.com/t/dialogue-plugin/59871/318 "2018-09-27T18:06:30Z")

</div>

> [@](#):
>
> I see.
> 
> Data assets are your game files. The only reason you can modify them at runtime in the editor is because the editor makes no distinction between whether you’re doing it through a Bluetility or in PIE. But you won’t be able to modify data assets on runtime in a cooked build. This is because they’re your game files. It’s like irrevocably modifying a mesh of a dinosaur into a bird because you’ve reached a certain checkpoint in game. But what happens if you load a prior savegame or you’ve started a new game? Your file will effectively be corrupt, because you’ll see a bird. That’s why it’s not possible.
> 
> Like I said, if you want to mark your nodes as read, you need to make an array of ints and add their indexes. This way you know you’ve visited the nodes.

Ah, I was unaware of that. Thank you, I’ll definitely keep that workaround in mind

[Previous page](https://forums.unrealengine.com/t/dialogue-plugin/59871.md?page=14)

[Next page](https://forums.unrealengine.com/t/dialogue-plugin/59871.md?page=16)
