Jump to content

> Preview < Pillars of Eternity Quest Editor


Recommended Posts

First @mods: Where is the modding section?

 

 

Pillars of Eternity Quest editor

 

Its here: https://xaratas.github.io/

Version 0.1: Works in FF 38 :) , *edit* does work in Chrome 43 but draws the lines wrong :mellow: , *edit 2* tested IE 11 its totally not working :(

 

What can version 0.1 do?

* Load .quest and .conversation files and display parts (conditions, scripts) of them (other parts are not implemented)

* Make the Structure in the xml files visible by drawing interconnections between the nodes.

* Edit Comments and IDs (just to test the edit features of polymer, the underlying library)

* Connect nodes via drag and drop

* Reprint modified XML to the browser console (only the implemented parts, its currently not useable ingame)

 

 

As this forum limits the time one can edit posts watch the end of the thread for updates.

 

Suggestions, improvements, coding help: Be invited by posting here or fork https://github.com/Xaratas/PillarsOfEternity-Quest-Editor

 

Documentation of the PoE quest system: http://pillarsofeternity.gamepedia.com/Modding

Misses the documentation of useable function calls, help therefor is appreciated. Easiest way to obtain the functions is IL Spy, see the PoE Modding Framework setup guide.

post-50606-0-16618800-1433090549_thumb.png

Edited by Xaratas
  • Like 16
Link to comment
Share on other sites

Holy ****! I'm always amazed at what community modders are capable of. This is the first step into "new quests for the masses" territory.

 

Now what we need next is a simple 3rd party editor that allows creating and placing custom NPCs and monsters.

 

 

When this is done, I'll volunteer on finishing the "render custom landscapes PoE-style in Maya" tutorial I started long ago.

 

 

...

I hope we will see the first companion or stronghold mods soon.

Edited by Zwiebelchen
  • Like 1
Link to comment
Share on other sites

You could already do everything this version of the editor does by going through the files manually. It's just less of a hassle now.

Of course, but seeing the connections in the xml files is quite hard. There comes a graphic representation handy.

Also the documentation of the quest system and script functions are, besides of my beginnigs, not existing. Its actually quite a hassle. And the part with the uuids I still haven't understand fully.

Link to comment
Share on other sites

So, thanks to the Polymer dev team i got a way to fix the lines. Chrome 43 is now working :)

Contains also a fix for the conditionals.

Next is to show Texts for the Nodes, which could take a few days of sparetime.

 

*edit* Rudimentary stringtable support is in my dev version. Needs a bit of polishing ;)

Edited by Xaratas
  • Like 2
Link to comment
Share on other sites

  • 2 weeks later...

@mods could you enable .conversation, .quest and .stringtable as allowed fileupload extensions?

 

Version 0.2: same place http://xaratas.github.io

 

XML complete for conversations, quests and stringtable files! Which means all xml tags are read and complete, valid xml can be exported. :w00t:

Highlighting of selected node and outgoing links from this node.

Stringtable connectable to conversations. Try the two files here in the spoiler tags. :cat:

All things, which can be changed (currently comments and strings) will be in the exported xml.

 

 

Excuse the look in chrome. I code in Firefox and run Chrome only to check if it works.

 

Cat conversation

 

 

<?xml version="1.0" encoding="utf-8"?>
<ConversationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <NextNodeID>12</NextNodeID>
  <Nodes>
    <FlowChartNode xsi:type="TalkNode">
      <NodeID>0</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>0</FromNodeID>
          <ToNodeID>1</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>0</FromNodeID>
          <ToNodeID>10</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
      </Links>
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components />
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <NotSkippable>false</NotSkippable>
      <IsQuestionNode>false</IsQuestionNode>
      <IsTempText>false</IsTempText>
      <PlayVOAs3DSound>false</PlayVOAs3DSound>
      <PlayType>Normal</PlayType>
      <Persistence>None</Persistence>
      <NoPlayRandomWeight>0</NoPlayRandomWeight>
      <DisplayType>Conversation</DisplayType>
      <VOFilename />
      <VoiceType />
      <ExcludedSpeakerClasses />
      <ExcludedListenerClasses />
      <IncludedSpeakerClasses />
      <IncludedListenerClasses />
      <ActorDirection />
      <SpeakerGuid>00000000-0000-0000-0000-000000000000</SpeakerGuid>
      <ListenerGuid>b1a8e901-0000-0000-0000-000000000000</ListenerGuid>
    </FlowChartNode>
    <FlowChartNode xsi:type="TalkNode">
      <NodeID>1</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>1</FromNodeID>
          <ToNodeID>3</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
      </Links>
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components />
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <NotSkippable>false</NotSkippable>
      <IsQuestionNode>false</IsQuestionNode>
      <IsTempText>false</IsTempText>
      <PlayVOAs3DSound>false</PlayVOAs3DSound>
      <PlayType>Normal</PlayType>
      <Persistence>OnceEver</Persistence>
      <NoPlayRandomWeight>0</NoPlayRandomWeight>
      <DisplayType>Conversation</DisplayType>
      <VOFilename />
      <VoiceType />
      <ExcludedSpeakerClasses />
      <ExcludedListenerClasses />
      <IncludedSpeakerClasses />
      <IncludedListenerClasses />
      <ActorDirection />
      <SpeakerGuid>1bce660e-728c-4863-84c6-da01bf636e8b</SpeakerGuid>
      <ListenerGuid>b1a8e901-0000-0000-0000-000000000000</ListenerGuid>
    </FlowChartNode>
    <FlowChartNode xsi:type="TriggerConversationNode">
      <NodeID>2</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links />
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components>
          <ExpressionComponent xsi:type="ConditionalCall">
            <Data>
              <FullName>Boolean IsGlobalValue(String, Operator, Int32)</FullName>
              <Parameters>
                <string>n_Osrya_State</string>
                <string>EqualTo</string>
                <string>3</string>
              </Parameters>
            </Data>
            <Not>false</Not>
            <Operator>Or</Operator>
          </ExpressionComponent>
          <ExpressionComponent xsi:type="ConditionalCall">
            <Data>
              <FullName>Boolean IsGlobalValue(String, Operator, Int32)</FullName>
              <Parameters>
                <string>n_Osrya_State</string>
                <string>EqualTo</string>
                <string>4</string>
              </Parameters>
            </Data>
            <Not>false</Not>
            <Operator>Or</Operator>
          </ExpressionComponent>
        </Components>
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <NotSkippable>false</NotSkippable>
      <IsQuestionNode>false</IsQuestionNode>
      <IsTempText>false</IsTempText>
      <PlayVOAs3DSound>false</PlayVOAs3DSound>
      <PlayType>Normal</PlayType>
      <Persistence>None</Persistence>
      <NoPlayRandomWeight>0</NoPlayRandomWeight>
      <DisplayType>Conversation</DisplayType>
      <VOFilename />
      <VoiceType />
      <ExcludedSpeakerClasses />
      <ExcludedListenerClasses />
      <IncludedSpeakerClasses />
      <IncludedListenerClasses />
      <ConversationFilename>Assets/Data/Conversations/07_Gilded_Vale/07_cv_osrya.conversation</ConversationFilename>
      <StartNodeID>114</StartNodeID>
    </FlowChartNode>
    <FlowChartNode xsi:type="TalkNode">
      <NodeID>3</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>3</FromNodeID>
          <ToNodeID>4</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>3</FromNodeID>
          <ToNodeID>5</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>3</FromNodeID>
          <ToNodeID>6</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>3</FromNodeID>
          <ToNodeID>7</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
      </Links>
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components />
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <NotSkippable>false</NotSkippable>
      <IsQuestionNode>true</IsQuestionNode>
      <IsTempText>false</IsTempText>
      <PlayVOAs3DSound>false</PlayVOAs3DSound>
      <PlayType>Normal</PlayType>
      <Persistence>None</Persistence>
      <NoPlayRandomWeight>0</NoPlayRandomWeight>
      <DisplayType>Conversation</DisplayType>
      <VOFilename />
      <VoiceType />
      <ExcludedSpeakerClasses />
      <ExcludedListenerClasses />
      <IncludedSpeakerClasses />
      <IncludedListenerClasses />
      <ActorDirection />
      <SpeakerGuid>1bce660e-728c-4863-84c6-da01bf636e8b</SpeakerGuid>
      <ListenerGuid>b1a8e901-0000-0000-0000-000000000000</ListenerGuid>
    </FlowChartNode>
    <FlowChartNode xsi:type="PlayerResponseNode">
      <NodeID>4</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>4</FromNodeID>
          <ToNodeID>11</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
      </Links>
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components />
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <NotSkippable>false</NotSkippable>
      <IsQuestionNode>false</IsQuestionNode>
      <IsTempText>false</IsTempText>
      <PlayVOAs3DSound>false</PlayVOAs3DSound>
      <PlayType>Normal</PlayType>
      <Persistence>MarkAsRead</Persistence>
      <NoPlayRandomWeight>0</NoPlayRandomWeight>
      <DisplayType>Conversation</DisplayType>
      <VOFilename />
      <VoiceType />
      <ExcludedSpeakerClasses />
      <ExcludedListenerClasses />
      <IncludedSpeakerClasses />
      <IncludedListenerClasses />
    </FlowChartNode>
    <FlowChartNode xsi:type="PlayerResponseNode">
      <NodeID>5</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>5</FromNodeID>
          <ToNodeID>8</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
      </Links>
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components />
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <NotSkippable>false</NotSkippable>
      <IsQuestionNode>false</IsQuestionNode>
      <IsTempText>false</IsTempText>
      <PlayVOAs3DSound>false</PlayVOAs3DSound>
      <PlayType>Normal</PlayType>
      <Persistence>MarkAsRead</Persistence>
      <NoPlayRandomWeight>0</NoPlayRandomWeight>
      <DisplayType>Conversation</DisplayType>
      <VOFilename />
      <VoiceType />
      <ExcludedSpeakerClasses />
      <ExcludedListenerClasses />
      <IncludedSpeakerClasses />
      <IncludedListenerClasses />
    </FlowChartNode>
    <FlowChartNode xsi:type="PlayerResponseNode">
      <NodeID>6</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>6</FromNodeID>
          <ToNodeID>9</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
      </Links>
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components />
      </Conditionals>
      <OnEnterScripts>
        <ScriptCall>
          <Data>
            <FullName>Void DispositionAddPoints(Axis, Strength)</FullName>
            <Parameters>
              <string>Cruel</string>
              <string>Average</string>
            </Parameters>
          </Data>
        </ScriptCall>
      </OnEnterScripts>
      <OnExitScripts />
      <OnUpdateScripts />
      <NotSkippable>false</NotSkippable>
      <IsQuestionNode>false</IsQuestionNode>
      <IsTempText>false</IsTempText>
      <PlayVOAs3DSound>false</PlayVOAs3DSound>
      <PlayType>Normal</PlayType>
      <Persistence>OnceEver</Persistence>
      <NoPlayRandomWeight>0</NoPlayRandomWeight>
      <DisplayType>Conversation</DisplayType>
      <VOFilename />
      <VoiceType />
      <ExcludedSpeakerClasses />
      <ExcludedListenerClasses />
      <IncludedSpeakerClasses />
      <IncludedListenerClasses />
    </FlowChartNode>
    <FlowChartNode xsi:type="PlayerResponseNode">
      <NodeID>7</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links />
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components />
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <NotSkippable>false</NotSkippable>
      <IsQuestionNode>false</IsQuestionNode>
      <IsTempText>false</IsTempText>
      <PlayVOAs3DSound>false</PlayVOAs3DSound>
      <PlayType>Normal</PlayType>
      <Persistence>MarkAsRead</Persistence>
      <NoPlayRandomWeight>0</NoPlayRandomWeight>
      <DisplayType>Conversation</DisplayType>
      <VOFilename />
      <VoiceType />
      <ExcludedSpeakerClasses />
      <ExcludedListenerClasses />
      <IncludedSpeakerClasses />
      <IncludedListenerClasses />
    </FlowChartNode>
    <FlowChartNode xsi:type="TalkNode">
      <NodeID>8</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>8</FromNodeID>
          <ToNodeID>2</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
      </Links>
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components />
      </Conditionals>
      <OnEnterScripts>
        <ScriptCall>
          <Data>
            <FullName>Void SetGlobalValue(String, Int32)</FullName>
            <Parameters>
              <string>b_Black_Cat</string>
              <string>1</string>
            </Parameters>
          </Data>
        </ScriptCall>
      </OnEnterScripts>
      <OnExitScripts>
        <ScriptCall>
          <Data>
            <FullName>Void ActivateObject(Guid, Boolean)</FullName>
            <Parameters>
              <string>97acd5c4-29a0-475b-8534-c8ce647cf8c3</string>
              <string>False</string>
            </Parameters>
          </Data>
        </ScriptCall>
        <ScriptCall>
          <Data>
            <FullName>Void GiveItem(String, Int32)</FullName>
            <Parameters>
              <string>ITEM_PET_BlackCat</string>
              <string>1</string>
            </Parameters>
          </Data>
        </ScriptCall>
      </OnExitScripts>
      <OnUpdateScripts />
      <NotSkippable>false</NotSkippable>
      <IsQuestionNode>false</IsQuestionNode>
      <IsTempText>false</IsTempText>
      <PlayVOAs3DSound>false</PlayVOAs3DSound>
      <PlayType>Normal</PlayType>
      <Persistence>None</Persistence>
      <NoPlayRandomWeight>0</NoPlayRandomWeight>
      <DisplayType>Conversation</DisplayType>
      <VOFilename />
      <VoiceType />
      <ExcludedSpeakerClasses />
      <ExcludedListenerClasses />
      <IncludedSpeakerClasses />
      <IncludedListenerClasses />
      <ActorDirection />
      <SpeakerGuid>1bce660e-728c-4863-84c6-da01bf636e8b</SpeakerGuid>
      <ListenerGuid>b1a8e901-0000-0000-0000-000000000000</ListenerGuid>
    </FlowChartNode>
    <FlowChartNode xsi:type="TalkNode">
      <NodeID>9</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links />
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components />
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <NotSkippable>false</NotSkippable>
      <IsQuestionNode>false</IsQuestionNode>
      <IsTempText>false</IsTempText>
      <PlayVOAs3DSound>false</PlayVOAs3DSound>
      <PlayType>Normal</PlayType>
      <Persistence>None</Persistence>
      <NoPlayRandomWeight>0</NoPlayRandomWeight>
      <DisplayType>Conversation</DisplayType>
      <VOFilename />
      <VoiceType />
      <ExcludedSpeakerClasses />
      <ExcludedListenerClasses />
      <IncludedSpeakerClasses />
      <IncludedListenerClasses />
      <ActorDirection />
      <SpeakerGuid>1bce660e-728c-4863-84c6-da01bf636e8b</SpeakerGuid>
      <ListenerGuid>b1a8e901-0000-0000-0000-000000000000</ListenerGuid>
    </FlowChartNode>
    <FlowChartNode xsi:type="TalkNode">
      <NodeID>10</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>10</FromNodeID>
          <ToNodeID>4</ToNodeID>
          <PointsToGhost>true</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>10</FromNodeID>
          <ToNodeID>5</ToNodeID>
          <PointsToGhost>true</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>10</FromNodeID>
          <ToNodeID>6</ToNodeID>
          <PointsToGhost>true</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>10</FromNodeID>
          <ToNodeID>7</ToNodeID>
          <PointsToGhost>true</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
      </Links>
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components />
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <NotSkippable>false</NotSkippable>
      <IsQuestionNode>false</IsQuestionNode>
      <IsTempText>false</IsTempText>
      <PlayVOAs3DSound>false</PlayVOAs3DSound>
      <PlayType>Normal</PlayType>
      <Persistence>None</Persistence>
      <NoPlayRandomWeight>0</NoPlayRandomWeight>
      <DisplayType>Conversation</DisplayType>
      <VOFilename />
      <VoiceType />
      <ExcludedSpeakerClasses />
      <ExcludedListenerClasses />
      <IncludedSpeakerClasses />
      <IncludedListenerClasses />
      <ActorDirection />
      <SpeakerGuid>1bce660e-728c-4863-84c6-da01bf636e8b</SpeakerGuid>
      <ListenerGuid>b1a8e901-0000-0000-0000-000000000000</ListenerGuid>
    </FlowChartNode>
    <FlowChartNode xsi:type="TalkNode">
      <NodeID>11</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>11</FromNodeID>
          <ToNodeID>3</ToNodeID>
          <PointsToGhost>true</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
      </Links>
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components />
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <NotSkippable>false</NotSkippable>
      <IsQuestionNode>false</IsQuestionNode>
      <IsTempText>false</IsTempText>
      <PlayVOAs3DSound>false</PlayVOAs3DSound>
      <PlayType>Normal</PlayType>
      <Persistence>None</Persistence>
      <NoPlayRandomWeight>0</NoPlayRandomWeight>
      <DisplayType>Conversation</DisplayType>
      <VOFilename />
      <VoiceType />
      <ExcludedSpeakerClasses />
      <ExcludedListenerClasses />
      <IncludedSpeakerClasses />
      <IncludedListenerClasses />
      <ActorDirection />
      <SpeakerGuid>1bce660e-728c-4863-84c6-da01bf636e8b</SpeakerGuid>
      <ListenerGuid>b1a8e901-0000-0000-0000-000000000000</ListenerGuid>
    </FlowChartNode>
  </Nodes>
  <Bookmarks>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
  </Bookmarks>
  <ClassExtender>
    <ExtendedProperties />
  </ClassExtender>
  <ConversationType>Conversation</ConversationType>
  <Description>Scene description.</Description>
  <SceneLocation>SCENE LOCATION</SceneLocation>
  <SceneTime>SCENE TIME</SceneTime>
  <CharacterMappings>
    <CharacterMapping>
      <Guid>1bce660e-728c-4863-84c6-da01bf636e8b</Guid>
      <InstanceTag>NPC_Osrya_Cat</InstanceTag>
    </CharacterMapping>
  </CharacterMappings>
</ConversationData>

 

 

 

Cat stringtable

 

 

<?xml version="1.0" encoding="utf-8"?>
<StringTableFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>conversations\07_gilded_vale\07_bs_black_cat</Name>
  <NextEntryID>1</NextEntryID>
  <EntryCount>11</EntryCount>
  <Entries>
    <Entry>
      <ID>1</ID>
      <DefaultText>Zuerst denkst du, dass diese arme Kreatur krank ist, da ihr schwarzes Fell stückweise ausgefallen zu sein scheint. Als sich die Katze aber umdreht, um eine Fliege auf der Mauer zu begutachten, bemerkst du, dass ein gutes Stück ihres Brustkorbs komplett offen ist. Ein Teil ihres Schwanzes ist abgefault und gibt den Blick auf ein paar gezackte Wirbel frei.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>2</ID>
      <DefaultText />
      <FemaleText />
    </Entry>
    <Entry>
      <ID>3</ID>
      <DefaultText>All das scheint die Katze nicht besonders zu stören. Sie stößt ein trillerndes Schnurren aus und reibt sich an deinem Schienbein.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>4</ID>
      <DefaultText>[Katze streicheln.]</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>5</ID>
      <DefaultText>[Katze hochnehmen.]</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>6</ID>
      <DefaultText>[Katze treten.] "Scher dich weg, du Biest!"</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>7</ID>
      <DefaultText>[Katze in Ruhe lassen.]</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>8</ID>
      <DefaultText>Du hebst die überraschend leichte - und unerwartet spitzknochige - Kreatur hoch, die daraufhin zufrieden in deinen Armen schnurrt.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>9</ID>
      <DefaultText>Die Katze bringt sich in Sicherheit und schleckt sich weiter ihre verfallende Pfote, als sei nichts geschehen.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>10</ID>
      <DefaultText>Die Katze sieht mit hin und her sausendem Schwanz zu dir hoch.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>11</ID>
      <DefaultText>Du verbringst ein paar angenehme Augenblicke, während du die Katze zwischen den Ohren kratzt, doch dadurch löst sich klumpenweise schwarzes Fell.</DefaultText>
      <FemaleText />
    </Entry>
  </Entries>
</StringTableFile>

 

 

post-50606-0-91681100-1434308461_thumb.png

  • Like 3
Link to comment
Share on other sites

Nice. I have a noob question; why does it run via web browsers instead of as an .exe file?

A .exe file would work on Windows only. An in-browser app should work on any OS providing one of the supported browsers.

Plus, I suspect Xaratas has some experience in Web coding if he/she chose to use this kind of backend.

  • Like 1
Link to comment
Share on other sites

 

Nice. I have a noob question; why does it run via web browsers instead of as an .exe file?

A .exe file would work on Windows only. An in-browser app should work on any OS providing one of the supported browsers.

Plus, I suspect Xaratas has some experience in Web coding if he/she chose to use this kind of backend.

 

That and web is "cooler". Also i can try this polymer libary which is awesome in itself.

Link to comment
Share on other sites

  • 2 weeks later...

New features are ready :)

 

Drag and Drop in IE11 :)  Edit doesn't work in Chrome :( and IE :(. FF works :)

Ingoing links are now visible in blue, outgoing links are still green.

 

Editing!

Ever wanted to change the story text but it should still make sense? Possible! Now you can see who is speaking which text, and in what order the nodes occur.

Change the experience weight of a quest or the display type of a conversation? Possible!

 

A bit documentation of the known npcs:

http://pillarsofeternity.gamepedia.com/Modding/Quest/

 

 

Next steps

Make the conditions editable, find a usable way to change the speaking persons, enable editing of other values

 

And I need a design, if someone has something in mind, preferably in material design, he or she may please step forward.

 

 

post-50606-0-76216700-1435432073_thumb.png

  • Like 6
Link to comment
Share on other sites

  • 2 weeks later...

New Version 0.2.8, same place: https://xaratas.github.io/ same minimum design and few new features:

 

* read the stringtable files for quests and display their contents.

* write stringtable files for quests to the console

 

Next is to get the scripts and conditionals editable. Needed documentation is here in the works http://pillarsofeternity.gamepedia.com/Modding/Quest/

There is still much to do to get the data together and into the editor.

 

*edit* Wikipage updated, so many conditonals, and script functions are even more. :unsure:

 

*edit2* Totally forgot example files

 

Quest Mercenaries for Hire

 

<?xml version="1.0" encoding="utf-8"?>
<QuestData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <NextNodeID>5</NextNodeID>
  <Nodes>
    <FlowChartNode xsi:type="QuestNode">
      <NodeID>0</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links>
        <FlowChartLink xsi:type="QuestLink">
          <FromNodeID>0</FromNodeID>
          <ToNodeID>1</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RequiredToExitObjective>false</RequiredToExitObjective>
        </FlowChartLink>
      </Links>
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components />
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <IsTempText>false</IsTempText>
      <LinkEvaluation>FirstLinkThatPasses</LinkEvaluation>
      <EndStates>
        <QuestEndState>
          <EndStateID>0</EndStateID>
          <DisplayName>Found Weapons</DisplayName>
          <PackageID>1</PackageID>
        </QuestEndState>
        <QuestEndState>
          <EndStateID>1</EndStateID>
          <DisplayName>Killed Cook</DisplayName>
          <PackageID>1</PackageID>
        </QuestEndState>
        <QuestEndState>
          <EndStateID>2</EndStateID>
          <DisplayName>Fail State</DisplayName>
          <PackageID>1</PackageID>
        </QuestEndState>
      </EndStates>
      <AlternateDescriptionIDs />
      <ExperienceType>Normal</ExperienceType>
      <ExperienceLevel>5</ExperienceLevel>
    </FlowChartNode>
    <FlowChartNode xsi:type="ObjectiveNode">
      <NodeID>1</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links>
        <FlowChartLink xsi:type="QuestLink">
          <FromNodeID>1</FromNodeID>
          <ToNodeID>2</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RequiredToExitObjective>false</RequiredToExitObjective>
        </FlowChartLink>
      </Links>
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components>
          <ExpressionComponent xsi:type="ConditionalCall">
            <Data>
              <FullName>Boolean IsQuestEventTriggered(String, Int32)</FullName>
              <Parameters>
                <string>Assets/Data/Quests/01_Defiance_Bay_Coppleane/01_qst_mercenaries_for_hire.quest</string>
                <string>0</string>
              </Parameters>
            </Data>
            <Not>false</Not>
            <Operator>And</Operator>
          </ExpressionComponent>
        </Components>
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <IsTempText>false</IsTempText>
      <LinkEvaluation>FirstLinkThatPasses</LinkEvaluation>
      <AddendumIDs>
        <int>0</int>
      </AddendumIDs>
      <ExperienceWeight>1</ExperienceWeight>
      <DisplayType>None</DisplayType>
      <SortGroup>0</SortGroup>
    </FlowChartNode>
    <FlowChartNode xsi:type="ObjectiveNode">
      <NodeID>2</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links>
        <FlowChartLink xsi:type="QuestLink">
          <FromNodeID>2</FromNodeID>
          <ToNodeID>3</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RequiredToExitObjective>false</RequiredToExitObjective>
        </FlowChartLink>
      </Links>
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components>
          <ExpressionComponent xsi:type="ConditionalCall">
            <Data>
              <FullName>Boolean IsQuestEventTriggered(String, Int32)</FullName>
              <Parameters>
                <string>Assets/Data/Quests/01_Defiance_Bay_Coppleane/01_qst_mercenaries_for_hire.quest</string>
                <string>1</string>
              </Parameters>
            </Data>
            <Not>false</Not>
            <Operator>And</Operator>
          </ExpressionComponent>
        </Components>
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <IsTempText>false</IsTempText>
      <LinkEvaluation>FirstLinkThatPasses</LinkEvaluation>
      <AddendumIDs />
      <ExperienceWeight>1</ExperienceWeight>
      <DisplayType>None</DisplayType>
      <SortGroup>0</SortGroup>
    </FlowChartNode>
    <FlowChartNode xsi:type="ObjectiveNode">
      <NodeID>3</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links>
        <FlowChartLink xsi:type="QuestLink">
          <FromNodeID>3</FromNodeID>
          <ToNodeID>4</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RequiredToExitObjective>false</RequiredToExitObjective>
        </FlowChartLink>
      </Links>
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components>
          <ExpressionComponent xsi:type="ConditionalCall">
            <Data>
              <FullName>Boolean IsQuestEventTriggered(String, Int32)</FullName>
              <Parameters>
                <string>Assets/Data/Quests/01_Defiance_Bay_Coppleane/01_qst_mercenaries_for_hire.quest</string>
                <string>2</string>
              </Parameters>
            </Data>
            <Not>false</Not>
            <Operator>And</Operator>
          </ExpressionComponent>
        </Components>
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <IsTempText>false</IsTempText>
      <LinkEvaluation>FirstLinkThatPasses</LinkEvaluation>
      <AddendumIDs />
      <ExperienceWeight>1</ExperienceWeight>
      <DisplayType>None</DisplayType>
      <SortGroup>0</SortGroup>
    </FlowChartNode>
    <FlowChartNode xsi:type="ObjectiveNode">
      <NodeID>4</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links />
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components>
          <ExpressionComponent xsi:type="ConditionalCall">
            <Data>
              <FullName>Boolean IsQuestEventTriggered(String, Int32)</FullName>
              <Parameters>
                <string>Assets/Data/Quests/01_Defiance_Bay_Coppleane/01_qst_mercenaries_for_hire.quest</string>
                <string>3</string>
              </Parameters>
            </Data>
            <Not>false</Not>
            <Operator>And</Operator>
          </ExpressionComponent>
        </Components>
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <IsTempText>false</IsTempText>
      <LinkEvaluation>FirstLinkThatPasses</LinkEvaluation>
      <AddendumIDs>
        <int>1</int>
      </AddendumIDs>
      <ExperienceWeight>1</ExperienceWeight>
      <DisplayType>None</DisplayType>
      <SortGroup>0</SortGroup>
    </FlowChartNode>
  </Nodes>
  <Bookmarks>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
  </Bookmarks>
  <ClassExtender>
    <ExtendedProperties />
  </ClassExtender>
  <NextEventID>4</NextEventID>
  <NextEndStateID>4</NextEndStateID>
  <NextAddendumID>2</NextAddendumID>
  <NextAlternateDescriptionID>1</NextAlternateDescriptionID>
  <Events>
    <QuestEvent xsi:type="QuestEventGlobalVariable">
      <EventID>0</EventID>
      <DisplayName>Quest Started</DisplayName>
      <VariableName>n_MercenaryHire_State</VariableName>
      <VariableValue>1</VariableValue>
    </QuestEvent>
    <QuestEvent xsi:type="QuestEventGlobalVariable">
      <EventID>1</EventID>
      <DisplayName>Cook Company Found</DisplayName>
      <VariableName>n_MercenaryHire_State</VariableName>
      <VariableValue>2</VariableValue>
    </QuestEvent>
    <QuestEvent xsi:type="QuestEventGlobalVariable">
      <EventID>2</EventID>
      <DisplayName>Ruins Entered</DisplayName>
      <VariableName>n_MercenaryHire_State</VariableName>
      <VariableValue>3</VariableValue>
    </QuestEvent>
    <QuestEvent xsi:type="QuestEventGlobalVariable">
      <EventID>3</EventID>
      <DisplayName>Artifacts Found</DisplayName>
      <VariableName>n_MercenaryHire_State</VariableName>
      <VariableValue>4</VariableValue>
    </QuestEvent>
  </Events>
  <QuestType>1</QuestType>
</QuestData>

 

 

Texts for the quest

 

<?xml version="1.0" encoding="utf-8"?>
<StringTableFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>quests\01_defiance_bay_coppleane\01_qst_mercenaries_for_hire</Name>
  <NextEntryID>1</NextEntryID>
  <EntryCount>15</EntryCount>
  <Entries>
    <Entry>
      <ID>0</ID>
      <DefaultText>Die Bronze unter dem See</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>1</ID>
      <DefaultText>Triff dich in den Waldend-Ebenen mit den Riesentötern.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>2</ID>
      <DefaultText>Betritt über die Sturmwallschlucht die Ruinen.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>3</ID>
      <DefaultText>Finde die Waffen von Lhe a Rhemen.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>4</ID>
      <DefaultText>Bringe die Waffen zu Wenan in der Expeditionshalle in Kupferweg.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>10000</ID>
      <DefaultText>Wenan fürchtet, dass die Schmelztiegelritter etwas im Schilde führen, und sucht nach mächtigen Waffen, um sich gegen sie zu verteidigen. Er hat mich gebeten, in den Ruinen von Lhe a Rhemen mächtige engwithanische Waffen zu finden.

Eine Gruppe von Abenteurern, die sich Bynes Riesentöter nennt, wurde bereits ausgesandt, war jedoch nicht erfolgreich.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>10001</ID>
      <DefaultText>Laut Wenan konnten die Riesentöter keinen Weg in die Ruinen finden. Ich soll sie in ihrem Lager in den Waldend-Ebenen aufsuchen und herausfinden, ob sie etwas Nützliches über die Ruinen in Erfahrung gebracht haben, die in der Sturmwallschlucht im Osten liegen.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>10002</ID>
      <DefaultText>Die Riesentöter haben etwas gefunden, was sie für einen „Schlüssel“ aus Adra halten, der die Ruinen in der Sturmwallschlucht östlich der Waldend-Ebenen öffnet. Sie konnten aber nicht herausfinden, wie man ihn verwendet. Nun, da ich ihn habe, kann ich mein Glück versuchen.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>10003</ID>
      <DefaultText>Wenn Wenan Recht hat, enthalten die Ruinen von Lhe a Rhemen ein Lager mächtiger Waffen. Ich werde sie sicher erkennen, wenn ich sie sehe.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>10004</ID>
      <DefaultText>Ich habe die antiken Waffen gefunden, nach denen Wenan in Lhe a Rhemen suchte. Sie sind nicht unbedingt das, was ich erwartet hätte.

Sie sind so mitgenommen, dass sie sich nicht mehr restaurieren lassen, und sie scheinen die Überbleibsel einer Art Seelenenergie zu enthalten. Ich kann Wenan all das in der Expeditionshalle erklären.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>20000</ID>
      <DefaultText>Die Riesentöter haben erwähnt, dass in der Sturmwallschlucht mehr Patrouillen der Schmelztiegelritter unterwegs seien als gewöhnlich. Ich muss vorsichtig sein.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>20001</ID>
      <DefaultText>Ich habe einen Speer gefunden, der noch in makellosem Zustand ist. Eine Waffe ist vielleicht nicht genug, um Wenans Interesse zu wecken, aber ich könnte sie möglicherweise mit meiner eigenen Essenz tränken und behalten. Vor langer, langer Zeit scheint jemand in diesen Ruinen genau das getan zu haben.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>30000</ID>
      <DefaultText>Ich habe die engwithanischen Waffen für Wenan beschafft, aber ich musste dabei eine Patrouille der Schmelztiegelritter töten. Zumindest konnte ich das Vertrauen der Dutzenden gewinnen.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>30001</ID>
      <DefaultText>Ich habe die engwithanischen Waffen für Wenan beschafft, aber ich musste dabei eine Patrouille der Schmelztiegelritter und die Riesentöter töten. Zumindest konnte ich das Vertrauen der Dutzenden gewinnen.</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>30002</ID>
      <DefaultText>Wenan ist tot. ich weiß nicht, wer sonst noch Interesse an den engwithanischen Waffen haben könnte.</DefaultText>
      <FemaleText />
    </Entry>
  </Entries>
</StringTableFile>

 

post-50606-0-00812300-1436661340_thumb.png

Edited by Xaratas
  • Like 6
Link to comment
Share on other sites

Just another newbie question: can I use it fo fix a broken quest? I have some trouble finishing Durance's quest, it's clearly bugged even after the latest patch (some dialogue options to discuss the vision about him are not showing up) and I just hoped to fix the dialogue/quest without cheating through consolle commands...

Edited by Thalon
Link to comment
Share on other sites

With the current version its somewhat possible, it shows you the order of the options and the side effects of choosing each one. But you have currently to edit the option manually.  Or add an effect of setting the global variable to the correct value to advance the quest, which need some understanding of the global variables for that quest.

But i haven't explored the durance file yet, and as Eric Fenstermaker said its the biggest quest …, oh my, and i thought the Hearing at the ducs place with ~250 nodes was huge.

 

The files of the fix in the other thread should be the same as in the current patch, so they wont help you.

Link to comment
Share on other sites

  • 2 weeks later...

Update: Version 0.2.9 https://xaratas.github.io/

 

New Features

 

  • Editing of Conditions (click on the word). Select one out of a list of all conditions that the game understand. It updates the List of Parameters automatically. Each parameter name has a short description on hover.
  • Sets of Values for all enumerated types.
  • Help icons. On hover they show a description

 

Fixed: Adding Comments and a non displaying Zero.

 

Still there: Bad design, sorry about that, but haven't had time for this.

 

 

Regarding the Conditions:

Point 1: There is currently no validation of the input. If it shows a select box for a parameter than nothing can go wrong. If its a textbox then you are responsible for entering sane values. For example for the parameter “slot” the valid Values are 0, 1, 2, 3, 4 and 5. Sometimes the Values are noted in the helptext. For filenames and global variables you have to look up existing values. Its currently not possible with the editor to create own global variables.

Point 2: The Operator is used to combine multiple conditions. The blue line should show, which conditions stand on the same level. These will be combined with the Operator on this level. Conditions can only end in Boolean values (true and false).

Point 3: The small slider is there to invert the result of functions. It has effectively the role of a logical 'not'. This is for some functions useful which can not be inverted by a parameter, for example the 'is player race' function.

 

Next: Scripts or add and delete for Conditions

post-50606-0-33290100-1437850855_thumb.png

post-50606-0-16373900-1437850862_thumb.png

  • Like 4
Link to comment
Share on other sites

  • 2 weeks later...

Version 0.2.9b, same place. https://xaratas.github.io/

 

Not as many changes as i would like, but the Enter- and ExitScripts are now editable.

 

All Buttons labled 'add' are currently dead, there is no code behind them, sorry.

Adding new Values to the GUID Selectbox is not possible, and without explicitly knowing for what they stand its useless to even try.

Some of the Script functions expect specific GUIDs, which stands for example for Vendors, but there is currently nowhere from which i could get the Vendor Guds to show only valid entries. (Trying to show the Vendor Screen on a non Vendor Guid does nothing).

 

 

@Quantics Because of the missing modding subforum i put the thread here for a reason, the > Preview < in the topic is there for the same reason.

 

*edit* an other update

 

  • The conditions are now distinguishable. See the screenshot. Each layer (pair of parenthesis) has a own color. Each operator stands on the same column as its parts. All unneeded operators are hidden.
  • There is now a count of the elements behind the condition, enter and exit scripts button, no more random clicking only to find empty elements. :aiee:

 

Screenshot: https://www.sendspace.com/file/4sbom9 (Forum upload is broken again)

 

Crucible Knight Guads from the screenshot

 

 

<?xml version="1.0" encoding="utf-8"?>
<ConversationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <NextNodeID>3</NextNodeID>
  <Nodes>
    <FlowChartNode xsi:type="TalkNode">
      <NodeID>0</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>0</FromNodeID>
          <ToNodeID>1</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
        <FlowChartLink xsi:type="DialogueLink">
          <FromNodeID>0</FromNodeID>
          <ToNodeID>2</ToNodeID>
          <PointsToGhost>false</PointsToGhost>
          <ClassExtender>
            <ExtendedProperties />
          </ClassExtender>
          <RandomWeight>1</RandomWeight>
          <PlayQuestionNodeVO>true</PlayQuestionNodeVO>
          <QuestionNodeTextDisplay>ShowOnce</QuestionNodeTextDisplay>
        </FlowChartLink>
      </Links>
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components />
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <NotSkippable>false</NotSkippable>
      <IsQuestionNode>false</IsQuestionNode>
      <HideSpeaker>false</HideSpeaker>
      <IsTempText>false</IsTempText>
      <PlayVOAs3DSound>false</PlayVOAs3DSound>
      <PlayType>Normal</PlayType>
      <Persistence>None</Persistence>
      <NoPlayRandomWeight>0</NoPlayRandomWeight>
      <DisplayType>Conversation</DisplayType>
      <VOFilename />
      <VoiceType />
      <ExcludedSpeakerClasses />
      <ExcludedListenerClasses />
      <IncludedSpeakerClasses />
      <IncludedListenerClasses />
      <ActorDirection />
      <SpeakerGuid>00000000-0000-0000-0000-000000000000</SpeakerGuid>
      <ListenerGuid>b1a8e901-0000-0000-0000-000000000000</ListenerGuid>
    </FlowChartNode>
    <FlowChartNode xsi:type="TriggerConversationNode">
      <NodeID>1</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links />
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components>
          <ExpressionComponent xsi:type="ConditionalCall">
            <Data>
              <FullName>Boolean IsGlobalValue(String, Operator, Int32)</FullName>
              <Parameters>
                <string>b_Disable_Knight_Barks</string>
                <string>EqualTo</string>
                <string>0</string>
              </Parameters>
            </Data>
            <Not>false</Not>
            <Operator>And</Operator>
          </ExpressionComponent>
          <ExpressionComponent xsi:type="ConditionalExpression">
            <Operator>And</Operator>
            <Components>
              <ExpressionComponent xsi:type="ConditionalExpression">
                <Operator>Or</Operator>
                <Components>
                  <ExpressionComponent xsi:type="ConditionalCall">
                    <Data>
                      <FullName>Boolean IsGlobalValue(String, Operator, Int32)</FullName>
                      <Parameters>
                        <string>bReceivedAcolyteHeritageHillVision</string>
                        <string>EqualTo</string>
                        <string>1</string>
                      </Parameters>
                    </Data>
                    <Not>false</Not>
                    <Operator>And</Operator>
                  </ExpressionComponent>
                  <ExpressionComponent xsi:type="ConditionalCall">
                    <Data>
                      <FullName>Boolean IsGlobalValue(String, Operator, Int32)</FullName>
                      <Parameters>
                        <string>n_HH_Quest_Stage</string>
                        <string>EqualTo</string>
                        <string>0</string>
                      </Parameters>
                    </Data>
                    <Not>false</Not>
                    <Operator>And</Operator>
                  </ExpressionComponent>
                </Components>
              </ExpressionComponent>
              <ExpressionComponent xsi:type="ConditionalExpression">
                <Operator>Or</Operator>
                <Components>
                  <ExpressionComponent xsi:type="ConditionalCall">
                    <Data>
                      <FullName>Boolean IsGlobalValue(String, Operator, Int32)</FullName>
                      <Parameters>
                        <string>bReceivedAcolyteSanitariumVision</string>
                        <string>EqualTo</string>
                        <string>1</string>
                      </Parameters>
                    </Data>
                    <Not>false</Not>
                    <Operator>And</Operator>
                  </ExpressionComponent>
                  <ExpressionComponent xsi:type="ConditionalCall">
                    <Data>
                      <FullName>Boolean IsGlobalValue(String, Operator, Int32)</FullName>
                      <Parameters>
                        <string>n_Sanitarium_Quest_Stage</string>
                        <string>EqualTo</string>
                        <string>0</string>
                      </Parameters>
                    </Data>
                    <Not>false</Not>
                    <Operator>And</Operator>
                  </ExpressionComponent>
                </Components>
              </ExpressionComponent>
            </Components>
          </ExpressionComponent>
        </Components>
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <NotSkippable>false</NotSkippable>
      <IsQuestionNode>false</IsQuestionNode>
      <HideSpeaker>false</HideSpeaker>
      <IsTempText>false</IsTempText>
      <PlayVOAs3DSound>false</PlayVOAs3DSound>
      <PlayType>Normal</PlayType>
      <Persistence>None</Persistence>
      <NoPlayRandomWeight>0</NoPlayRandomWeight>
      <DisplayType>Conversation</DisplayType>
      <VOFilename />
      <VoiceType />
      <ExcludedSpeakerClasses />
      <ExcludedListenerClasses />
      <IncludedSpeakerClasses />
      <IncludedListenerClasses />
      <ConversationFilename>Assets/Data/Conversations/01_Defiance_Bay_Copperlane/01_bs_crucible_knight_guide.conversation</ConversationFilename>
      <StartNodeID>0</StartNodeID>
    </FlowChartNode>
    <FlowChartNode xsi:type="TriggerConversationNode">
      <NodeID>2</NodeID>
      <Comments />
      <PackageID>1</PackageID>
      <ContainerNodeID>-1</ContainerNodeID>
      <Links />
      <ClassExtender>
        <ExtendedProperties />
      </ClassExtender>
      <Conditionals>
        <Operator>And</Operator>
        <Components>
          <ExpressionComponent xsi:type="ConditionalCall">
            <Data>
              <FullName>Boolean IsGlobalValue(String, Operator, Int32)</FullName>
              <Parameters>
                <string>b_Disable_Knight_Barks</string>
                <string>EqualTo</string>
                <string>0</string>
              </Parameters>
            </Data>
            <Not>false</Not>
            <Operator>And</Operator>
          </ExpressionComponent>
        </Components>
      </Conditionals>
      <OnEnterScripts />
      <OnExitScripts />
      <OnUpdateScripts />
      <NotSkippable>false</NotSkippable>
      <IsQuestionNode>false</IsQuestionNode>
      <HideSpeaker>false</HideSpeaker>
      <IsTempText>false</IsTempText>
      <PlayVOAs3DSound>false</PlayVOAs3DSound>
      <PlayType>Normal</PlayType>
      <Persistence>None</Persistence>
      <NoPlayRandomWeight>0</NoPlayRandomWeight>
      <DisplayType>Conversation</DisplayType>
      <VOFilename />
      <VoiceType />
      <ExcludedSpeakerClasses />
      <ExcludedListenerClasses />
      <IncludedSpeakerClasses />
      <IncludedListenerClasses />
      <ConversationFilename>Assets/Data/Conversations/02_Defiance_Bay_First_Fires/02_bs_controller_crucible_knight_guard.conversation</ConversationFilename>
      <StartNodeID>0</StartNodeID>
    </FlowChartNode>
  </Nodes>
  <Bookmarks>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
    <Bookmark>
      <Type>Unassigned</Type>
      <Name />
      <NodeID>-1</NodeID>
      <GhostNodeParentID>-1</GhostNodeParentID>
    </Bookmark>
  </Bookmarks>
  <ClassExtender>
    <ExtendedProperties />
  </ClassExtender>
  <ConversationType>Conversation</ConversationType>
  <Description>Scene description.</Description>
  <SceneLocation>SCENE LOCATION</SceneLocation>
  <SceneTime>SCENE TIME</SceneTime>
  <CharacterMappings />
</ConversationData>

 

 

 

@Mods the attach function is broken again: Error No file was selected for upload

Edited by Xaratas
  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

Version 0.3.0 laughing.gifhttps://xaratas.github.io/
 
Milestone reached: All things necessary for Quests and Conversations can be edited! All things shown can be edited. All output is now valid xml for PoE Version 1.0.6!
 
Brand new Feature: See what the Quest Events are. They are shown in the bottom panel after selecting a Quest node. Obsidian was so kind to name all of them quite useful.
 
 
Next: Add and Remove for all things to have a full editor.
 
Same hint as last post: Buttons with the text 'new' don't do anything.
 
whencjfn.png

 

  • Like 4
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...