Advertisement
Guest User

Untitled

a guest
Sep 24th, 2015
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.81 KB | None | 0 0
  1.             string relativePath = @"quests\main_npcs\default_dialogues\triss_default.w2scene";
  2.             string infile = Path.Combine(@"C:\Program Files (x86)\Steam\SteamApps\common\The Witcher 3\tools\Patch0_1.8.4", relativePath);
  3.             string outfile = Path.Combine(ModPath, relativePath);
  4.  
  5.             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));
  6.             var file2 = new CR2WFile(reader2);
  7.             reader2.Close();
  8.  
  9.             var reader = new BinaryReader(new FileStream(infile, FileMode.Open, FileAccess.Read));
  10.             var file = new CR2WFile(reader);
  11.             reader.Close();
  12.  
  13.             var trissscene = file2.chunks.Find(delegate(CR2WChunk c)
  14.             {
  15.                 var sectionName = (CString)c.GetVariableByName("sectionName");
  16.                 return (sectionName != null && sectionName.val == "q310_kiss_triss");
  17.             });
  18.  
  19.             var dialogset = file2.chunks.Find(delegate(CR2WChunk c)
  20.             {
  21.                 var sectionName = (CName)c.GetVariableByName("name");
  22.                 return (sectionName != null && sectionName.Value == "kissi_kissi_kissi");
  23.             });
  24.  
  25.             var CStoryScene = file.GetChunkByType("CStoryScene");
  26.            
  27.             var dialogsetInstances = (CArray)CStoryScene.GetVariableByName("dialogsetInstances");
  28.             var sections = (CArray)CStoryScene.GetVariableByName("sections");
  29.             var controlParts = (CArray)CStoryScene.GetVariableByName("controlParts");
  30.  
  31.             var copyaction = new CR2WCopyAction();
  32.             var copieddialogset = copyaction.Copy(dialogset, file);
  33.             file.CreatePtr(dialogsetInstances, copieddialogset);
  34.             var placementTag = (CTagList)copieddialogset.GetVariableByName("placementTag");
  35.             placementTag.tags.Clear();
  36.             placementTag.tags.Add((CName)file.CreateVariable("CName").SetValue("triss"));
  37.  
  38.             file.CreateVariable(copieddialogset, "Bool", "findSafePlacement").SetValue(false);
  39.             file.CreateVariable(copieddialogset, "Float", "safePlacementRadius").SetValue(0.0f);
  40.  
  41.             var copiedTrissScene = copyaction.Copy(trissscene, file,
  42.                 maxdepth: 1,
  43.                 excludeProperties: new string[] {
  44.                     "linkedElements", "nextLinkElement", "eventsInfo",
  45.                     "events", "variants", "nextVariantId", "sectionId",
  46.                     "sectionName", "defaultVariantId", "elementID",
  47.                     "cameraTranslation"
  48.                 });
  49.             file.CreatePtr(sections, copiedTrissScene);
  50.             file.CreatePtr(controlParts, copiedTrissScene);
  51.            
  52.             var choiceHub = file.GetChunkByType("CStorySceneChoice");
  53.             var choiceKissTriss = file.CreateChunk("CStorySceneChoiceLine", choiceHub);
  54.             var choiceFollower = file.CreateChunk("CStorySceneChoiceLine", choiceHub);
  55.             var choiceSplitUp = file.CreateChunk("CStorySceneChoiceLine", choiceHub);
  56.  
  57.             var choiceFollowerCondition = file.CreateChunk("CQuestFactsDBCondition", choiceFollower);
  58.             choiceFollowerCondition.flags = 8200;
  59.             var choiceSplitUpCondition = file.CreateChunk("CQuestFactsDBCondition", choiceSplitUp);
  60.             choiceSplitUpCondition.flags = 8200;
  61.             var choiceKissTrissCondition = file.CreateChunk("CQuestFactsDBCondition", choiceKissTriss);
  62.             choiceKissTrissCondition.flags = 8200;
  63.  
  64.             var choiceLines = (CArray)choiceHub.GetVariableByName("choiceLines");
  65.             file.CreatePtr(choiceLines, choiceKissTriss);
  66.             file.CreatePtr(choiceLines, choiceFollower);
  67.             file.CreatePtr(choiceLines, choiceSplitUp);
  68.  
  69.             {//choiceKissTriss
  70.                 file.CreatePtr(choiceKissTriss, "ptr:CStorySceneLinkElement", copiedTrissScene, "nextLinkElement");
  71.                 file.CreatePtr(choiceKissTriss, "ptr:IQuestCondition", choiceKissTrissCondition, "questCondition");
  72.                 ((CLocalizedString)file.CreateVariable(choiceKissTriss, "LocalizedString", "choiceLine")).val = 0x0010619f;
  73.             }
  74.  
  75.             var scriptFollower = file.CreateChunk("CStorySceneScript", CStoryScene);
  76.             file.CreatePtr(controlParts, scriptFollower);
  77.             {//scriptFollower
  78.                 file.CreateVariable(scriptFollower, "CName", "functionName").SetValue("MakeFollower");
  79.                 ((CStorySceneScript)scriptFollower.data).SetScriptFunction("MakeFollower", new CVariable[] {
  80.                     file.CreateVariable("Bool", "active").SetValue(true),
  81.                     file.CreateVariable("CName", "npc").SetValue("triss"),
  82.                     file.CreateVariable("CName", "fact").SetValue("mod_triss_active_follower"),
  83.                 });
  84.             }
  85.  
  86.             {//choiceKissTrissCondition
  87.                 file.CreateVariable(choiceKissTrissCondition, "CName", "factId").SetValue("q309_triss_lover");
  88.                 file.CreateVariable(choiceKissTrissCondition, "ECompareFunc", "compareFunc").SetValue("CF_Greater");
  89.             }
  90.  
  91.             {//choiceFollowerCondition
  92.                 file.CreateVariable(choiceFollowerCondition, "CName", "factId").SetValue("mod_triss_active_follower");
  93.                 file.CreateVariable(choiceFollowerCondition, "ECompareFunc", "compareFunc").SetValue("CF_LessEqual");
  94.             }
  95.  
  96.             {//choiceSplitUpCondition
  97.                 file.CreateVariable(choiceSplitUpCondition, "CName", "factId").SetValue("mod_triss_active_follower");
  98.                 file.CreateVariable(choiceSplitUpCondition, "ECompareFunc", "compareFunc").SetValue("CF_Greater");
  99.             }
  100.  
  101.             var scriptSplitUp = file.CreateChunk("CStorySceneScript", CStoryScene);
  102.             file.CreatePtr(controlParts, scriptSplitUp);
  103.             {//scriptSplitUp
  104.                 file.CreateVariable(scriptSplitUp, "CName", "functionName").SetValue("MakeFollower");
  105.                 ((CStorySceneScript)scriptSplitUp.data).SetScriptFunction("MakeFollower", new CVariable[] {
  106.                     file.CreateVariable("Bool", "active").SetValue(false),
  107.                     file.CreateVariable("CName", "npc").SetValue("triss"),
  108.                     file.CreateVariable("CName", "fact").SetValue("mod_triss_active_follower"),
  109.                 });
  110.             }
  111.  
  112.             {//choiceFollower
  113.                 file.CreatePtr(choiceFollower, "ptr:CStorySceneLinkElement", scriptFollower, "nextLinkElement");
  114.                 file.CreatePtr(choiceFollower, "ptr:IQuestCondition", choiceFollowerCondition, "questCondition");
  115.                 ((CLocalizedString)file.CreateVariable(choiceFollower, "LocalizedString", "choiceLine")).val = 0x0005ab43;
  116.             }
  117.  
  118.             {//choiceSplitUp
  119.                 file.CreatePtr(choiceSplitUp, "ptr:CStorySceneLinkElement", scriptSplitUp, "nextLinkElement");
  120.                 file.CreatePtr(choiceSplitUp, "ptr:IQuestCondition", choiceSplitUpCondition, "questCondition");
  121.                 ((CLocalizedString)file.CreateVariable(choiceSplitUp, "LocalizedString", "choiceLine")).val = 0x0009056e;
  122.             }
  123.  
  124.  
  125.             {//copiedTrissScene
  126.                 var sceneElements = (CArray)copiedTrissScene.GetVariableByName("sceneElements");
  127.  
  128.                 var storysection = (CStorySceneSection)copiedTrissScene.data;
  129.                 var factevents = storysection.storyscenesections.FindAll(delegate(CStorySceneSectionItem sectionitem)
  130.                 {
  131.                     return sectionitem.Type == "CStorySceneAddFactEvent";
  132.                 });
  133.  
  134.                 foreach(var factevent in factevents)
  135.                 {
  136.                     storysection.storyscenesections.Remove(factevent);
  137.                 }
  138.  
  139.                 var line1block = file.chunks[((CPtr)sceneElements.array[2]).ChunkIndex];
  140.                 var line2block = file.chunks[((CPtr)sceneElements.array[4]).ChunkIndex];
  141.                 var line1dur = (CFloat)line1block.GetVariableByName("approvedDuration");
  142.                 var line2dur = (CFloat)line2block.GetVariableByName("approvedDuration");
  143.  
  144.                 line1block.Type = "CStoryScenePauseElement";
  145.                 line2block.Type = "CStoryScenePauseElement";
  146.                 ((CFloat)file.CreateVariable(line1block, "Float", "duration")).val = line1dur.val;
  147.                 ((CFloat)file.CreateVariable(line2block, "Float", "duration")).val = line2dur.val;
  148.             }
  149.  
  150.             try { Directory.CreateDirectory(Path.GetDirectoryName(outfile)); }
  151.             catch { }
  152.             try { File.Delete(outfile); }
  153.             catch { }
  154.  
  155.             var writer = new BinaryWriter(new FileStream(outfile, FileMode.Create, FileAccess.ReadWrite));
  156.  
  157.             file.Write(writer);
  158.             writer.Close();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement