Xaratas Posted May 31, 2015 Posted May 31, 2015 (edited) 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 , *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. Edited June 1, 2015 by Xaratas 16 More modding for PoE II | How to Work with Stringtables
Zwiebelchen Posted June 1, 2015 Posted June 1, 2015 (edited) 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 June 1, 2015 by Zwiebelchen 1
Marky Posted June 1, 2015 Posted June 1, 2015 This puts the modding community really close towards making the first companion mod. Well done Xaratas.
Bubbles Posted June 1, 2015 Posted June 1, 2015 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.
Xaratas Posted June 1, 2015 Author Posted June 1, 2015 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. More modding for PoE II | How to Work with Stringtables
Xaratas Posted June 3, 2015 Author Posted June 3, 2015 (edited) 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 June 4, 2015 by Xaratas 2 More modding for PoE II | How to Work with Stringtables
Xaratas Posted June 14, 2015 Author Posted June 14, 2015 @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. Highlighting of selected node and outgoing links from this node. Stringtable connectable to conversations. Try the two files here in the spoiler tags. 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> 3 More modding for PoE II | How to Work with Stringtables
Marky Posted June 14, 2015 Posted June 14, 2015 Nice. I have a noob question; why does it run via web browsers instead of as an .exe file?
vv221 Posted June 14, 2015 Posted June 14, 2015 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. 1 Install easily Pillars of Eternity and its extensions on GNU/Linux
Xaratas Posted June 14, 2015 Author Posted June 14, 2015 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. More modding for PoE II | How to Work with Stringtables
vv221 Posted June 14, 2015 Posted June 14, 2015 (…) web is "cooler".We could debate for a long time about this But of course you should use the tools you like the most to develop your "pet projects", or frustration would come quite quickly. (I’m more of a POSIX shell guy myself, and don’t know *anything* about GUI) 1 Install easily Pillars of Eternity and its extensions on GNU/Linux
Evange Posted June 15, 2015 Posted June 15, 2015 Wow...always great to see the modding team in action!
Xaratas Posted June 15, 2015 Author Posted June 15, 2015 Hey I have gotten a good hint why the IE don't want to play along, and now it works in IE 11 (without the drag and drop ). More modding for PoE II | How to Work with Stringtables
Xaratas Posted June 27, 2015 Author Posted June 27, 2015 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. 6 More modding for PoE II | How to Work with Stringtables
Xaratas Posted June 30, 2015 Author Posted June 30, 2015 (edited) Small update: Chrome works now too, IE should also work but i haven't tested it. Edited June 30, 2015 by Xaratas More modding for PoE II | How to Work with Stringtables
Xaratas Posted July 12, 2015 Author Posted July 12, 2015 (edited) 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. *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> Edited July 13, 2015 by Xaratas 6 More modding for PoE II | How to Work with Stringtables
Quantics Posted July 15, 2015 Posted July 15, 2015 Wow, I'd completely missed that one. Excellent job, and excellent news Xaratas.
Thalon Posted July 16, 2015 Posted July 16, 2015 (edited) 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 July 16, 2015 by Thalon
Xaratas Posted July 16, 2015 Author Posted July 16, 2015 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. More modding for PoE II | How to Work with Stringtables
player1 Posted July 17, 2015 Posted July 17, 2015 This would really be moved to different subforum, otherwise it will get lost in between bug reports. Spell Fixes compilation for Neverwinter Nights 2, as well as my other submissions for this great game.
Xaratas Posted July 25, 2015 Author Posted July 25, 2015 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 4 More modding for PoE II | How to Work with Stringtables
Xaratas Posted July 29, 2015 Author Posted July 29, 2015 Nothing new for the quest editor today, but some new documentation for the Conditionals to share. @Obsidian did I get it correct? http://pillarsofeternity.gamepedia.com/Modding/Conditionals More modding for PoE II | How to Work with Stringtables
Quantics Posted August 11, 2015 Posted August 11, 2015 @Mods, shouldn't this be moved to the general discussion? I'm sure lots of people have missed it entirely in this forum.
Xaratas Posted August 12, 2015 Author Posted August 12, 2015 (edited) 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. 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 August 13, 2015 by Xaratas 1 More modding for PoE II | How to Work with Stringtables
Xaratas Posted August 20, 2015 Author Posted August 20, 2015 Version 0.3.0 https://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. 4 More modding for PoE II | How to Work with Stringtables
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now