Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- string relativePath = @"quests\main_npcs\default_dialogues\triss_default.w2scene";
- string infile = Path.Combine(@"C:\Program Files (x86)\Steam\SteamApps\common\The Witcher 3\tools\Patch0_1.8.4", relativePath);
- string outfile = Path.Combine(ModPath, relativePath);
- var reader2 = new BinaryReader(new FileStream(@"C:\Program Files (x86)\Steam\SteamApps\common\The Witcher 3\tools\AllContent\quests\part_3\quest_files\q310_pregeels\scenes\q310_06_triss_divination_talk.w2scene", FileMode.Open, FileAccess.Read));
- var file2 = new CR2WFile(reader2);
- reader2.Close();
- var reader = new BinaryReader(new FileStream(infile, FileMode.Open, FileAccess.Read));
- var file = new CR2WFile(reader);
- reader.Close();
- var trissscene = file2.chunks.Find(delegate(CR2WChunk c)
- {
- var sectionName = (CString)c.GetVariableByName("sectionName");
- return (sectionName != null && sectionName.val == "q310_kiss_triss");
- });
- var dialogset = file2.chunks.Find(delegate(CR2WChunk c)
- {
- var sectionName = (CName)c.GetVariableByName("name");
- return (sectionName != null && sectionName.Value == "kissi_kissi_kissi");
- });
- var CStoryScene = file.GetChunkByType("CStoryScene");
- var dialogsetInstances = (CArray)CStoryScene.GetVariableByName("dialogsetInstances");
- var sections = (CArray)CStoryScene.GetVariableByName("sections");
- var controlParts = (CArray)CStoryScene.GetVariableByName("controlParts");
- var copyaction = new CR2WCopyAction();
- var copieddialogset = copyaction.Copy(dialogset, file);
- file.CreatePtr(dialogsetInstances, copieddialogset);
- var placementTag = (CTagList)copieddialogset.GetVariableByName("placementTag");
- placementTag.tags.Clear();
- placementTag.tags.Add((CName)file.CreateVariable("CName").SetValue("triss"));
- file.CreateVariable(copieddialogset, "Bool", "findSafePlacement").SetValue(false);
- file.CreateVariable(copieddialogset, "Float", "safePlacementRadius").SetValue(0.0f);
- var copiedTrissScene = copyaction.Copy(trissscene, file,
- maxdepth: 1,
- excludeProperties: new string[] {
- "linkedElements", "nextLinkElement", "eventsInfo",
- "events", "variants", "nextVariantId", "sectionId",
- "sectionName", "defaultVariantId", "elementID",
- "cameraTranslation"
- });
- file.CreatePtr(sections, copiedTrissScene);
- file.CreatePtr(controlParts, copiedTrissScene);
- var choiceHub = file.GetChunkByType("CStorySceneChoice");
- var choiceKissTriss = file.CreateChunk("CStorySceneChoiceLine", choiceHub);
- var choiceFollower = file.CreateChunk("CStorySceneChoiceLine", choiceHub);
- var choiceSplitUp = file.CreateChunk("CStorySceneChoiceLine", choiceHub);
- var choiceFollowerCondition = file.CreateChunk("CQuestFactsDBCondition", choiceFollower);
- choiceFollowerCondition.flags = 8200;
- var choiceSplitUpCondition = file.CreateChunk("CQuestFactsDBCondition", choiceSplitUp);
- choiceSplitUpCondition.flags = 8200;
- var choiceKissTrissCondition = file.CreateChunk("CQuestFactsDBCondition", choiceKissTriss);
- choiceKissTrissCondition.flags = 8200;
- var choiceLines = (CArray)choiceHub.GetVariableByName("choiceLines");
- file.CreatePtr(choiceLines, choiceKissTriss);
- file.CreatePtr(choiceLines, choiceFollower);
- file.CreatePtr(choiceLines, choiceSplitUp);
- {//choiceKissTriss
- file.CreatePtr(choiceKissTriss, "ptr:CStorySceneLinkElement", copiedTrissScene, "nextLinkElement");
- file.CreatePtr(choiceKissTriss, "ptr:IQuestCondition", choiceKissTrissCondition, "questCondition");
- ((CLocalizedString)file.CreateVariable(choiceKissTriss, "LocalizedString", "choiceLine")).val = 0x0010619f;
- }
- var scriptFollower = file.CreateChunk("CStorySceneScript", CStoryScene);
- file.CreatePtr(controlParts, scriptFollower);
- {//scriptFollower
- file.CreateVariable(scriptFollower, "CName", "functionName").SetValue("MakeFollower");
- ((CStorySceneScript)scriptFollower.data).SetScriptFunction("MakeFollower", new CVariable[] {
- file.CreateVariable("Bool", "active").SetValue(true),
- file.CreateVariable("CName", "npc").SetValue("triss"),
- file.CreateVariable("CName", "fact").SetValue("mod_triss_active_follower"),
- });
- }
- {//choiceKissTrissCondition
- file.CreateVariable(choiceKissTrissCondition, "CName", "factId").SetValue("q309_triss_lover");
- file.CreateVariable(choiceKissTrissCondition, "ECompareFunc", "compareFunc").SetValue("CF_Greater");
- }
- {//choiceFollowerCondition
- file.CreateVariable(choiceFollowerCondition, "CName", "factId").SetValue("mod_triss_active_follower");
- file.CreateVariable(choiceFollowerCondition, "ECompareFunc", "compareFunc").SetValue("CF_LessEqual");
- }
- {//choiceSplitUpCondition
- file.CreateVariable(choiceSplitUpCondition, "CName", "factId").SetValue("mod_triss_active_follower");
- file.CreateVariable(choiceSplitUpCondition, "ECompareFunc", "compareFunc").SetValue("CF_Greater");
- }
- var scriptSplitUp = file.CreateChunk("CStorySceneScript", CStoryScene);
- file.CreatePtr(controlParts, scriptSplitUp);
- {//scriptSplitUp
- file.CreateVariable(scriptSplitUp, "CName", "functionName").SetValue("MakeFollower");
- ((CStorySceneScript)scriptSplitUp.data).SetScriptFunction("MakeFollower", new CVariable[] {
- file.CreateVariable("Bool", "active").SetValue(false),
- file.CreateVariable("CName", "npc").SetValue("triss"),
- file.CreateVariable("CName", "fact").SetValue("mod_triss_active_follower"),
- });
- }
- {//choiceFollower
- file.CreatePtr(choiceFollower, "ptr:CStorySceneLinkElement", scriptFollower, "nextLinkElement");
- file.CreatePtr(choiceFollower, "ptr:IQuestCondition", choiceFollowerCondition, "questCondition");
- ((CLocalizedString)file.CreateVariable(choiceFollower, "LocalizedString", "choiceLine")).val = 0x0005ab43;
- }
- {//choiceSplitUp
- file.CreatePtr(choiceSplitUp, "ptr:CStorySceneLinkElement", scriptSplitUp, "nextLinkElement");
- file.CreatePtr(choiceSplitUp, "ptr:IQuestCondition", choiceSplitUpCondition, "questCondition");
- ((CLocalizedString)file.CreateVariable(choiceSplitUp, "LocalizedString", "choiceLine")).val = 0x0009056e;
- }
- {//copiedTrissScene
- var sceneElements = (CArray)copiedTrissScene.GetVariableByName("sceneElements");
- var storysection = (CStorySceneSection)copiedTrissScene.data;
- var factevents = storysection.storyscenesections.FindAll(delegate(CStorySceneSectionItem sectionitem)
- {
- return sectionitem.Type == "CStorySceneAddFactEvent";
- });
- foreach(var factevent in factevents)
- {
- storysection.storyscenesections.Remove(factevent);
- }
- var line1block = file.chunks[((CPtr)sceneElements.array[2]).ChunkIndex];
- var line2block = file.chunks[((CPtr)sceneElements.array[4]).ChunkIndex];
- var line1dur = (CFloat)line1block.GetVariableByName("approvedDuration");
- var line2dur = (CFloat)line2block.GetVariableByName("approvedDuration");
- line1block.Type = "CStoryScenePauseElement";
- line2block.Type = "CStoryScenePauseElement";
- ((CFloat)file.CreateVariable(line1block, "Float", "duration")).val = line1dur.val;
- ((CFloat)file.CreateVariable(line2block, "Float", "duration")).val = line2dur.val;
- }
- try { Directory.CreateDirectory(Path.GetDirectoryName(outfile)); }
- catch { }
- try { File.Delete(outfile); }
- catch { }
- var writer = new BinaryWriter(new FileStream(outfile, FileMode.Create, FileAccess.ReadWrite));
- file.Write(writer);
- writer.Close();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement