Exemple #1
0
        private const uint HIGHEST_COMP_ID = 198; // "Essence of Kemeroi", for Void Spells -- not actually ever in game!

        /// <summary>
        /// Does the math based on the crypto keys (name and description) for the spell formula.
        /// </summary>
        private static List <uint> DecryptFormula(List <uint> rawComps, string name, string desc)
        {
            List <uint> comps = new List <uint>();

            // uint testDescHash = ComputeHash(" – 200");
            uint nameHash = SpellTable.ComputeHash(name);
            uint descHash = SpellTable.ComputeHash(desc);

            uint key = (nameHash % 0x12107680) + (descHash % 0xBEADCF45);

            for (int i = 0; i < rawComps.Count; i++)
            {
                uint comp = (rawComps[i] - key);

                // This seems to correct issues with certain spells with extended characters.
                if (comp > HIGHEST_COMP_ID) // highest comp ID is 198 - "Essence of Kemeroi", for Void Spells
                {
                    comp = comp & 0xFF;
                }

                comps.Add(comp);
            }

            return(comps);
        }
        public string GetTitle(CharacterTitle title)
        {
            var titleEnums = DatManager.PortalDat.ReadFromDat <EnumMapper>(EnumMapper_CharacterTitle_FileID);

            if (!titleEnums.IdToStringMap.TryGetValue((uint)title, out var titleEnum))
            {
                return(null);
            }

            var hash = SpellTable.ComputeHash(titleEnum);

            var entry = DatManager.LanguageDat.CharacterTitles.StringTableData.FirstOrDefault(i => i.Id == hash);

            if (entry == null)
            {
                return(null);
            }

            return(entry.Strings.FirstOrDefault());
        }