public core.WeaponTreeName[] Build()
        {
            var treeNames = new Dictionary <byte, core.WeaponTreeName>();

            foreach (core.WeaponType weaponClass in Enum.GetValues(typeof(core.WeaponType)))
            {
                if (weaponClass == core.WeaponType.None)
                {
                    continue;
                }

                foreach (KeyValuePair <uint, WeaponPrimitiveBase> weapon in weapons.Table[weaponClass])
                {
                    byte treeId         = weapon.Value.TreeId;
                    bool isDisabledTree = false;
                    var  name           = new Dictionary <string, string>();

                    if (treeNames.ContainsKey(treeId))
                    {
                        continue;
                    }

                    foreach (LanguageIdPrimitive language in LanguageUtils.Languages)
                    {
                        Dictionary <uint, LanguageItem> languageEntries;
#if DEBUG
                        // Allow to work with degraded data in debug mode.
                        if (weaponSeriesLanguages.Table.TryGetValue(language, out languageEntries) == false)
                        {
                            continue;
                        }
#else
                        languageEntries = weaponSeriesLanguages.Table[language];
#endif
                        if (languageEntries.TryGetValue(treeId, out LanguageItem treeSeriesLanguageItem) == false)
                        {
                            continue;
                        }

                        string treeName = treeSeriesLanguageItem.Value;

                        if (LanguageUtils.IsValidText(treeName) == false)
                        {
                            isDisabledTree = true;
                            break;
                        }

                        if (treeName == "無効" || treeName.Length == 0)
                        {
                            isDisabledTree = true;
                            break;
                        }

                        name.Add(LanguageUtils.LanguageIdToLanguageCode(language), treeName);
                    }

                    if (isDisabledTree)
                    {
                        continue;
                    }

                    treeNames.Add(treeId, new core.WeaponTreeName {
                        TreeId = treeId, Name = name
                    });
                }
            }

            return(treeNames.Values.OrderBy(x => x.TreeId).ToArray());
        }