Ejemplo n.º 1
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 4
0
        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);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 5
0
 public VoiceSet(STUVoiceSet voiceSet)
 {
     Init(voiceSet);
 }