Esempio n. 1
0
        /// <summary>
        /// Gets the table type from the specified string.
        /// </summary>
        /// <param name="value">The table type string.</param>
        /// <returns>The table type value.</returns>
        /// <exception cref="System.ArgumentException">Thrown when the specified string does not match a table type.</exception>
        public static StringTableType GetTableType(string value)
        {
            Array values = Enum.GetValues(typeof(StringTableType));

            for (int i = 0; i < values.Length; i++)
            {
                StringTableType type       = (StringTableType)values.GetValue(i);
                string          identifier = type.GetAttributeValue <StringTableTypeIdentifierAttribute, string>(x => x.Value);

                if (string.Compare(identifier, value, false) == 0)
                {
                    return(type);
                }
            }

            throw new ArgumentException("value", "Table type does not exist");
        }
        private uint GetNewNameID(StringTableType type)
        {
            var rand = new Random();
            var id   = (uint)rand.Next();

            while (Data.Strings.Any(x => x.ID == id))
            {
                //no dupes
                id = (uint)rand.Next();
            }
            Data.Strings.Add(new StringTableEntry()
            {
                Category = type,
                ID       = id,
                Value    = "NewDefinition"
            });
            return(id);
        }
Esempio n. 3
0
        /// <summary>
        /// Adds a new translation for an individual string.
        /// </summary>
        /// <param name="language">The language to which the translation will be applied.</param>
        /// <param name="key">The string's key</param>
        /// <param name="value">The string</param>
        /// <param name="tableType">Type of the table in which <paramref name="value"/> is in.</param>
        public static void AddTranslation(StringTableManager.GungeonSupportedLanguages language, string key, string value, StringTableType tableType)
        {
            if (translations == null)
            {
                Init();
            }
            if (language == StringTableManager.GungeonSupportedLanguages.ENGLISH)
            {
                switch (tableType)
                {
                case StringTableType.Core:
                    ETGMod.Databases.Strings.Core.Set(key, value);
                    break;

                case StringTableType.Items:
                    ETGMod.Databases.Strings.Items.Set(key, value);
                    break;

                case StringTableType.Enemies:
                    ETGMod.Databases.Strings.Enemies.Set(key, value);
                    break;

                case StringTableType.UI:
                    UIStrings.Set(key, value);
                    break;

                case StringTableType.Intro:
                    ETGMod.Databases.Strings.Intro.Set(key, value);
                    break;

                case StringTableType.Synergy:
                    SynergyStrings.Set(key, value);
                    break;
                }
                return;
            }
            foreach (Translation translation in translations)
            {
                if (translation.language == language && translation.type == tableType)
                {
                    translation.AddStringTranslation(key, value);
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Resets properties to their default values.
        /// </summary>
        public override void Reset()
        {
            base.Reset();

            TableType = StringTableType.Normal;
            Clear();
        }
Esempio n. 5
0
        /// <summary>
        /// Loads the file from the specified stream.
        /// </summary>
        /// <param name="stream">The stream to read from.</param>
        public override void Load(Stream stream)
        {
            BinaryReader reader = new BinaryReader(stream);

            string typeValue = reader.ReadString();
            TableType = GetTableType(typeValue);

            int rowCount = reader.ReadInt32();

            for (int i = 0; i < rowCount; i++) {
                StringTableKey key = new StringTableKey();
                key.Key = reader.ReadString();
                key.ID = reader.ReadInt32();

                keys.Add(key);
            }

            int languageCount = reader.ReadInt32();

            for (int j = 0; j < rowCount; j++) {
                StringTableRow row = new StringTableRow(languageCount);
                rows.Add(row);
            }

            for (int i = 0; i < languageCount; i++) {
                StringTableLanguage language = (StringTableLanguage)i;

                int languageOffset = reader.ReadInt32();
                long nextLanguageOffset = stream.Position;

                stream.Seek(languageOffset, SeekOrigin.Begin);

                for (int j = 0; j < rowCount; j++) {
                    int rowOffset = reader.ReadInt32();
                    long nextRowOffset = stream.Position;

                    stream.Seek(rowOffset, SeekOrigin.Begin);

                    StringTableRow row = rows[j];
                    row.SetText(reader.ReadString(), language);

                    if (TableType == StringTableType.Item || TableType == StringTableType.Quest) {
                        row.SetDescription(reader.ReadString(), language);

                        if (TableType == StringTableType.Quest) {
                            row.SetStartMessage(reader.ReadString(), language);
                            row.SetEndMessage(reader.ReadString(), language);
                        }
                    }

                    if (j < rowCount - 1) {
                        stream.Seek(nextRowOffset, SeekOrigin.Begin);
                    }
                }

                if (i < languageCount - 1) {
                    stream.Seek(nextLanguageOffset, SeekOrigin.Begin);
                }
            }
        }