/// <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); }
/// <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); } } }
/// <summary> /// Resets properties to their default values. /// </summary> public override void Reset() { base.Reset(); TableType = StringTableType.Normal; Clear(); }
/// <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); } } }