private void Init(STUVoiceSet voiceSet) { if (voiceSet.m_voiceLineInstances == null) { return; } VoiceLines = new Dictionary <ulong, VoiceLineInstance>(voiceSet.m_voiceLineInstances.Length); Stimuli = new Dictionary <ulong, HashSet <ulong> >(); for (int i = 0; i < voiceSet.m_voiceLineInstances.Length; i++) { ulong voiceLineGuid = voiceSet.m_voiceLineGuids[i]; STUVoiceLineInstance instance = voiceSet.m_voiceLineInstances[i]; VoiceLineInstance instanceModel = new VoiceLineInstance(instance); VoiceLines[voiceLineGuid] = instanceModel; if (instance.m_voiceLineRuntime != null) { ulong stimuli = instance.m_voiceLineRuntime.m_stimulus; if (stimuli != 0) { if (!Stimuli.ContainsKey(stimuli)) { Stimuli[stimuli] = new HashSet <ulong>(); } Stimuli[stimuli].Add(voiceLineGuid); } } } }
public VoiceSet(STUHero hero) { STUVoiceSetComponent voiceSetComponent = GetInstance <STUVoiceSetComponent>(hero.m_gameplayEntity); if (voiceSetComponent?.m_voiceDefinition == null) { Debugger.Log(0, "DataTool.DataModels.VoiceSet", "Hero VoiceSet not found"); return; } STUVoiceSet set = GetInstance <STUVoiceSet>(voiceSetComponent.m_voiceDefinition); if (set == null) { return; } Init(set); }
public void ExtractVoiceSets(ICLIFlags toolFlags) { string basePath; if (toolFlags is ExtractFlags flags) { basePath = flags.OutputPath; } else { throw new Exception("no output path"); } const string container = "DebugVoiceSet"; foreach (ulong key in TrackedFiles[0x5F]) { STUVoiceSet voiceSet = GetInstance <STUVoiceSet>(key); string voiceMaterDir = Path.Combine(basePath, container, GetFileName(key)); foreach (STUVoiceLineInstance voiceLineInstance in voiceSet.VoiceLineInstances) { if (voiceLineInstance?.SoundDataContainer == null) { continue; } Combo.ComboInfo info = new Combo.ComboInfo(); Combo.Find(info, voiceLineInstance.SoundDataContainer.SoundbankMasterResource); foreach (ulong soundInfoNew in info.Sounds.Keys) { SaveLogic.Combo.SaveSound(flags, voiceMaterDir, info, soundInfoNew); } } } }
public void ExtractHeroConvos(ICLIFlags toolFlags) { string basePath; if (toolFlags is ExtractFlags flags) { basePath = flags.OutputPath; } else { throw new Exception("no output path"); } if (flags.Positionals.Length < 4) { QueryHelp(QueryTypes); return; } string path = Path.Combine(basePath, Container); Dictionary <string, Dictionary <string, ParsedArg> > parsedTypes = ParseQuery(flags, QueryTypes, QueryNameOverrides); if (parsedTypes == null) { return; } Dictionary <ulong, VoiceSet> allVoiceSets = new Dictionary <ulong, VoiceSet>(); foreach (var voiceSetGUID in Program.TrackedFiles[0x5F]) { STUVoiceSet set = GetInstance <STUVoiceSet>(voiceSetGUID); if (set?.m_voiceLineInstances == null) { continue; } allVoiceSets[voiceSetGUID] = new VoiceSet(set); } // Dictionary<uint, string> mapNames = new Dictionary<uint, string>(); // foreach (ulong mapGuid in Program.TrackedFiles[0x9F]) { // STUMapHeader mapHeader = GetInstance<STUMapHeader>(mapGuid); // if (mapHeader == null) continue; // // mapNames[teResourceGUID.Index(mapGuid)] = GetValidFilename(GetString(mapHeader.m_1C706502) ?? GetString(mapHeader.m_displayName)); // } Combo.ComboInfo comboInfo = new Combo.ComboInfo(); foreach (ulong heroGuid in Program.TrackedFiles[0x75]) { STUHero hero = GetInstance <STUHero>(heroGuid); if (hero == null) { continue; } STUVoiceSetComponent voiceSetComponent = GetInstance <STUVoiceSetComponent>(hero.m_gameplayEntity); if (voiceSetComponent?.m_voiceDefinition == null || !allVoiceSets.TryGetValue(voiceSetComponent.m_voiceDefinition, out var set)) { Debugger.Log(0, "DataTool.SaveLogic.Unlock.VoiceLine", "[DataTool.SaveLogic.Unlock.VoiceLine]: VoiceSet not found\r\n"); continue; } string heroNameActual = (GetString(hero.m_0EDCE350) ?? $"Unknown{teResourceGUID.Index(heroGuid)}").TrimEnd(' '); Dictionary <string, ParsedArg> config = GetQuery(parsedTypes, heroNameActual.ToLowerInvariant(), "*"); if (config.Count == 0) { continue; } Log($"Processing data for {heroNameActual}"); heroNameActual = GetValidFilename(heroNameActual); foreach (VoiceLineInstance lineInstance in set.VoiceLines.Values) { // if (lineInstance.STU.m_voiceLineRuntime.m_4FF98D41 != null) { // var cond = lineInstance.STU.m_voiceLineRuntime.m_4FF98D41; // // HandleCondition(flags, comboInfo, lineInstance, path, heroNameActual, cond, mapNames); // } if (lineInstance.VoiceConversation == 0) { continue; } STUVoiceConversation conversation = GetInstance <STUVoiceConversation>(lineInstance.VoiceConversation); if (conversation == null) { continue; // wtf, blizz pls } string convoDir = Path.Combine(path, heroNameActual, GetFileName(lineInstance.VoiceConversation)); foreach (STUVoiceConversationLine line in conversation.m_voiceConversationLine) { string linePath = Path.Combine(convoDir, line.m_B4D405A1.ToString()); foreach (VoiceSet voiceSet in allVoiceSets.Values) { if (voiceSet.VoiceLines.ContainsKey(line.m_lineGUID)) { VoiceLine.SaveVoiceLine(flags, voiceSet.VoiceLines[line.m_lineGUID], linePath, comboInfo); } } } } } }
public VoiceSet(STUVoiceSet voiceSet) { Init(voiceSet); }