Example #1
0
        public void SetValue(Localized_Text.Language language, long value)
        {
            switch (language)
            {
            case Localized_Text.Language.English:
                English = value;
                break;

            case Localized_Text.Language.French:
                French = value;
                break;

            case Localized_Text.Language.German:
                German = value;
                break;

            case Localized_Text.Language.Italian:
                Italian = value;
                break;

            case Localized_Text.Language.Spanish:
                Spanish = value;
                break;

            case Localized_Text.Language.Unknown:
                Universal = value;
                break;

            default:
                Universal = value;
                break;
            }
        }
Example #2
0
 public void Load(string path, Localized_Text.Language language)
 {
     using (var reader = new BinaryReader(System.IO.File.OpenRead(path)))
     {
         Load(reader, reader.BaseStream.Length, language);
     }
 }
Example #3
0
        public override void Load(BinaryReader reader, long length, Localized_Text.Language language)
        {
            var fileStartPos = reader.BaseStream.Position;

            var count = (uint)reader.ReadUInt64();

            for (uint i = 0; i < count; i++)
            {
                var id          = reader.ReadInt32();
                var series      = (Duel_Series)reader.ReadInt32();
                var keyOffset   = reader.ReadInt64();
                var valueOffset = reader.ReadInt64();

                var tempOffset = reader.BaseStream.Position;

                reader.BaseStream.Position = fileStartPos + keyOffset;
                var key = reader.ReadNullTerminatedString(keyEncoding);

                reader.BaseStream.Position = fileStartPos + valueOffset;
                var value = reader.ReadNullTerminatedString(valueEncoding);

                reader.BaseStream.Position = tempOffset;

                if (!Items.TryGetValue(id, out var item))
                {
                    item = new Item(id, series);
                    Items.Add(item.Id, item);
                }

                item.Key.SetText(language, key);
                item.Value.SetText(language, value);
            }
        }
Example #4
0
        private void LanguageToolStripMenuItem_Click(object Sender, EventArgs Args)
        {
            foreach (ToolStripMenuItem Lang in languageToolStripMenuItem.DropDownItems)
            {
                Lang.Checked = false;
            }

            ((ToolStripMenuItem)Sender).Checked = true;
            switch (((ToolStripMenuItem)Sender).Text)
            {
            case "English":
                Language = Localized_Text.Language.English;
                break;

            case "French":
                Language = Localized_Text.Language.French;
                break;

            case "German":
                Language = Localized_Text.Language.German;
                break;

            case "Italian":
                Language = Localized_Text.Language.Italian;
                break;

            case "Spanish":
                Language = Localized_Text.Language.Spanish;
                break;

            default:
                Language = Localized_Text.Language.Unknown;
                break;
            }
        }
Example #5
0
        public override void Save(BinaryWriter writer, Localized_Text.Language language)
        {
            const int firstChunkItemSize = 28; // Size of each item in the first chunk
            var       fileStartPos       = writer.BaseStream.Position;

            writer.Write((ulong)Items.Count);

            var offsetsOffset = writer.BaseStream.Position;

            writer.Write(new byte[Items.Count * firstChunkItemSize]);

            var index = 0;

            foreach (var item in Items.Values)
            {
                var keyLen     = GetStringSize(item.Key.GetText(language), keyEncoding);
                var valueLen   = GetStringSize(item.Value.GetText(language), valueEncoding);
                var tempOffset = writer.BaseStream.Position;

                writer.BaseStream.Position = offsetsOffset + index * firstChunkItemSize;
                writer.Write(item.Id);
                writer.WriteOffset(fileStartPos, tempOffset);
                writer.WriteOffset(fileStartPos, tempOffset + keyLen);
                writer.WriteOffset(fileStartPos, tempOffset + keyLen + valueLen);
                writer.BaseStream.Position = tempOffset;

                writer.WriteNullTerminatedString(item.Key.GetText(language), keyEncoding);
                writer.WriteNullTerminatedString(item.Value.GetText(language), valueEncoding);
                writer.WriteNullTerminatedString(item.Value2.GetText(language), value2Encoding);

                index++;
            }
        }
Example #6
0
        public override void Load(BinaryReader reader, long length, Localized_Text.Language language)
        {
            var fileStartPos = reader.BaseStream.Position;

            var count = Endian.ConvertUInt32(reader.ReadUInt32());

            for (var i = 0; i < count; i++)
            {
                var offset     = Endian.ConvertUInt32(reader.ReadUInt32());
                var tempOffset = reader.BaseStream.Position;

                reader.BaseStream.Position = fileStartPos + offset;

                var text = Strings.Count > i ? Strings[i] : null;
                if (text == null)
                {
                    text = new Localized_Text();
                    Strings.Add(text);
                }

                text.SetText(language, reader.ReadNullTerminatedString(encoding));

                reader.BaseStream.Position = tempOffset;
            }
        }
Example #7
0
 public void Save(string path, Localized_Text.Language language)
 {
     using (var writer = new BinaryWriter(System.IO.File.Create(path)))
     {
         Save(writer, language);
     }
 }
Example #8
0
        public override void Save(BinaryWriter writer, Localized_Text.Language language)
        {
            const int firstChunkItemSize = 88;
            var       fileStartPos       = writer.BaseStream.Position;

            writer.Write((ulong)Items.Count);

            var offsetsOffset = writer.BaseStream.Position;

            writer.Write(new byte[Items.Count * firstChunkItemSize]);

            var index = 0;

            foreach (var item in Items.Values)
            {
                var codeNameLen              = GetStringSize(item.CodeName.GetText(language), encoding1);
                var playerAlternateSkinLen   = GetStringSize(item.PlayerAlternateSkin.GetText(language), encoding1);
                var opponentAlternateSkinLen = GetStringSize(item.OpponentAlternateSkin.GetText(language), encoding1);
                var nameLen        = GetStringSize(item.Name.GetText(language), encoding2);
                var descriptionLen = GetStringSize(item.Description.GetText(language), encoding2);
                var tempOffset     = writer.BaseStream.Position;

                writer.BaseStream.Position = offsetsOffset + index * firstChunkItemSize;
                writer.Write(item.Id);
                writer.Write((int)item.Series);
                writer.Write(item.DisplayIndex);
                writer.Write(item.PlayerCharId);
                writer.Write(item.OpponentCharId);
                writer.Write(item.PlayerDeckId);
                writer.Write(item.OpponentDeckId);
                writer.Write(item.ArenaId);
                writer.Write(item.Unk8);
                writer.Write(item.DlcId);
                writer.WriteOffset(fileStartPos, tempOffset);
                writer.WriteOffset(fileStartPos, tempOffset + codeNameLen);
                writer.WriteOffset(fileStartPos, tempOffset + codeNameLen + playerAlternateSkinLen);
                writer.WriteOffset(fileStartPos,
                                   tempOffset + codeNameLen + playerAlternateSkinLen + opponentAlternateSkinLen);
                writer.WriteOffset(fileStartPos,
                                   tempOffset + codeNameLen + playerAlternateSkinLen + opponentAlternateSkinLen + nameLen);
                writer.WriteOffset(fileStartPos,
                                   tempOffset + codeNameLen + playerAlternateSkinLen + opponentAlternateSkinLen + nameLen +
                                   descriptionLen);
                writer.BaseStream.Position = tempOffset;

                writer.WriteNullTerminatedString(item.CodeName.GetText(language), encoding1);
                writer.WriteNullTerminatedString(item.PlayerAlternateSkin.GetText(language), encoding1);
                writer.WriteNullTerminatedString(item.OpponentAlternateSkin.GetText(language), encoding1);
                writer.WriteNullTerminatedString(item.Name.GetText(language), encoding2);
                writer.WriteNullTerminatedString(item.Description.GetText(language), encoding2);
                writer.WriteNullTerminatedString(item.Tip.GetText(language), encoding2);

                index++;
            }
        }
Example #9
0
        public bool Load(Localized_Text.Language language)
        {
            if (ZibFile != null)
            {
                if (ZibFile.IsFileOnDisk)
                {
                    if (!System.IO.File.Exists(ZibFile.FilePathOnDisk))
                    {
                        return(false);
                    }
                    Load(ZibFile.FilePathOnDisk, language);
                    return(true);
                }

                if (ZibFile.Owner?.File == null || ZibFile.Offset <= 0 || ZibFile.Length <= 0)
                {
                    return(false);
                }

                ZibFile.Owner.File.Archive.Reader.BaseStream.Position =
                    ZibFile.Owner.File.ArchiveOffset + ZibFile.Offset;
                Load(ZibFile.Owner.File.Archive.Reader, ZibFile.Length, language);
                return(true);
            }

            if (File == null)
            {
                return(false);
            }

            if (File.IsFileOnDisk)
            {
                if (!System.IO.File.Exists(File.FilePathOnDisk))
                {
                    return(false);
                }
                Load(File.FilePathOnDisk, language);
                return(true);
            }

            if (!File.IsArchiveFile)
            {
                return(false);
            }

            File.Archive.Reader.BaseStream.Position = File.ArchiveOffset;
            Load(File.Archive.Reader, File.ArchiveLength);
            return(true);
        }
Example #10
0
        private static void LoadCardNamesAndDescriptions(Localized_Text.Language language, IList <Card_Info> cards,
                                                         IReadOnlyDictionary <Localized_Text.Language, byte[]> indxByLanguage,
                                                         IReadOnlyDictionary <Localized_Text.Language, byte[]> namesByLanguage,
                                                         IReadOnlyDictionary <Localized_Text.Language, byte[]> descriptionsByLanguage)
        {
            if (language == Localized_Text.Language.Unknown)
            {
                return;
            }

            var indx         = indxByLanguage[language];
            var names        = namesByLanguage[language];
            var descriptions = descriptionsByLanguage[language];

            using (var indxReader = new BinaryReader(new MemoryStream(indx)))
                using (var namesReader = new BinaryReader(new MemoryStream(names)))
                    using (var descriptionsReader = new BinaryReader(new MemoryStream(descriptions)))
                    {
                        var namesByOffset        = ReadStrings(namesReader);
                        var descriptionsByOffset = ReadStrings(descriptionsReader);

                        var index = 0;
                        while (true)
                        {
                            var nameOffset        = indxReader.ReadUInt32();
                            var descriptionOffset = indxReader.ReadUInt32();

                            if (indxReader.BaseStream.Position >= indxReader.BaseStream.Length)
                            {
                                break;
                            }

                            Card_Info card = null;
                            if (cards.Count > index)
                            {
                                card = cards[index];
                            }
                            else
                            {
                                cards.Add(card = new Card_Info(index));
                            }

                            card.Name.SetText(language, namesByOffset[nameOffset]);
                            card.Description.SetText(language, descriptionsByOffset[descriptionOffset]);

                            index++;
                        }
                    }
        }
Example #11
0
        public ZIB_File GetLocalizedFile(Localized_Text.Language language)
        {
            if (LOTD_File.GetLanguageFromFileName(FileName) == language)
            {
                return(this);
            }

            var fileName = LOTD_File.GetFileNameWithLanguage(FileName, language);

            if (string.IsNullOrEmpty(fileName))
            {
                return(null);
            }
            Owner.Files.TryGetValue(fileName, out var file);
            return(file);
        }
Example #12
0
        public override void Load(BinaryReader reader, long length, Localized_Text.Language language)
        {
            var fileStartPos = reader.BaseStream.Position;

            var count = (uint)reader.ReadUInt64();

            for (uint i = 0; i < count; i++)
            {
                var id1                   = reader.ReadInt32();
                var id2                   = reader.ReadInt32();
                var series                = (Duel_Series)reader.ReadInt32();
                var signatureCardId       = reader.ReadInt32();
                var deckOwner             = reader.ReadInt32();
                var unk1                  = reader.ReadInt32();
                var deckFileNameOffset    = reader.ReadInt64();
                var deckNameOffset        = reader.ReadInt64();
                var deckDescriptionOffset = reader.ReadInt64();
                var unkStr1Offset         = reader.ReadInt64();

                var tempOffset = reader.BaseStream.Position;

                reader.BaseStream.Position = fileStartPos + deckFileNameOffset;
                var deckFileName = reader.ReadNullTerminatedString(deckFileNameEncoding);

                reader.BaseStream.Position = fileStartPos + deckNameOffset;
                var deckName = reader.ReadNullTerminatedString(deckNameEncoding);

                reader.BaseStream.Position = fileStartPos + deckDescriptionOffset;
                var deckDescription = reader.ReadNullTerminatedString(deckDescriptionEncoding);

                reader.BaseStream.Position = fileStartPos + unkStr1Offset;
                var unkStr1 = reader.ReadNullTerminatedString(unkStr1Encoding);

                reader.BaseStream.Position = tempOffset;

                if (!Items.TryGetValue(id1, out var item))
                {
                    item = new Item(id1, id2, series, signatureCardId, deckOwner, unk1);
                    Items.Add(item.Id1, item);
                }

                item.DeckFileName.SetText(language, deckFileName);
                item.DeckName.SetText(language, deckName);
                item.DeckDescription.SetText(language, deckDescription);
                item.UnkStr1.SetText(language, unkStr1);
            }
        }
Example #13
0
        public override void Save(BinaryWriter writer, Localized_Text.Language language)
        {
            var fileStartPos = writer.BaseStream.Position;

            writer.Write(Endian.ConvertUInt32((uint)Strings.Count));
            writer.Write(new byte[Strings.Count * 4]);

            for (var i = 0; i < Strings.Count; i++)
            {
                var writerOffset = writer.BaseStream.Position;

                writer.BaseStream.Position = fileStartPos + (4 + i * 4);
                writer.Write(Endian.ConvertUInt32((uint)(writerOffset - fileStartPos)));

                writer.BaseStream.Position = writerOffset;
                writer.WriteNullTerminatedString(Strings[i].GetText(language), encoding);
            }
        }
Example #14
0
        public long GetValue(Localized_Text.Language language)
        {
            switch (language)
            {
            case Localized_Text.Language.English: return(English);

            case Localized_Text.Language.French: return(French);

            case Localized_Text.Language.German: return(German);

            case Localized_Text.Language.Italian: return(Italian);

            case Localized_Text.Language.Spanish: return(Spanish);

            case Localized_Text.Language.Unknown: return(Universal);

            default: return(Universal);
            }
        }
Example #15
0
        public override void Load(BinaryReader reader, long length, Localized_Text.Language language)
        {
            var fileStartPos = reader.BaseStream.Position;

            var count = (uint)reader.ReadUInt64();

            for (uint i = 0; i < count; i++)
            {
                var id                = reader.ReadInt32();
                var series            = (Duel_Series)reader.ReadInt32();
                var challengeDeckId   = reader.ReadInt32();
                var unk3              = reader.ReadInt32();
                var dlcId             = reader.ReadInt32();
                var unk5              = reader.ReadInt32();
                var type              = reader.ReadInt64();
                var keyOffset         = reader.ReadInt64();
                var valueOffset       = reader.ReadInt64();
                var descriptionOffset = reader.ReadInt64();

                var tempOffset = reader.BaseStream.Position;

                reader.BaseStream.Position = fileStartPos + keyOffset;
                var codeName = reader.ReadNullTerminatedString(keyEncoding);

                reader.BaseStream.Position = fileStartPos + valueOffset;
                var name = reader.ReadNullTerminatedString(valueEncoding);

                reader.BaseStream.Position = fileStartPos + descriptionOffset;
                var bio = reader.ReadNullTerminatedString(valueEncoding);

                reader.BaseStream.Position = tempOffset;

                if (!Items.TryGetValue(id, out var item))
                {
                    item = new Item(id, series, challengeDeckId, unk3, dlcId, unk5, type);
                    Items.Add(item.Id, item);
                }

                item.CodeName.SetText(language, codeName);
                item.Name.SetText(language, name);
                item.Bio.SetText(language, bio);
            }
        }
Example #16
0
        public override void Save(BinaryWriter writer, Localized_Text.Language language)
        {
            const int firstChunkItemSize = 56; // Size of each item in the first chunk
            var       fileStartPos       = writer.BaseStream.Position;

            writer.Write((ulong)Items.Count);

            var offsetsOffset = writer.BaseStream.Position;

            writer.Write(new byte[Items.Count * firstChunkItemSize]);

            var index = 0;

            foreach (var item in Items.Values)
            {
                var deckFileNameLen    = GetStringSize(item.DeckFileName.GetText(language), deckFileNameEncoding);
                var deckNameLen        = GetStringSize(item.DeckName.GetText(language), deckNameEncoding);
                var deckDescriptionLen = GetStringSize(item.DeckDescription.GetText(language), deckDescriptionEncoding);
                var tempOffset         = writer.BaseStream.Position;

                writer.BaseStream.Position = offsetsOffset + index * firstChunkItemSize;
                writer.Write(item.Id1);
                writer.Write(item.Id2);
                writer.Write((int)item.Series);
                writer.Write(item.SignatureCardId);
                writer.Write(item.DeckOwnerId);
                writer.Write(item.Unk1);
                writer.WriteOffset(fileStartPos, tempOffset);
                writer.WriteOffset(fileStartPos, tempOffset + deckFileNameLen);
                writer.WriteOffset(fileStartPos, tempOffset + deckFileNameLen + deckNameLen);
                writer.WriteOffset(fileStartPos, tempOffset + deckFileNameLen + deckNameLen + deckDescriptionLen);
                writer.BaseStream.Position = tempOffset;

                writer.WriteNullTerminatedString(item.DeckFileName.GetText(language), deckFileNameEncoding);
                writer.WriteNullTerminatedString(item.DeckName.GetText(language), deckNameEncoding);
                writer.WriteNullTerminatedString(item.DeckDescription.GetText(language), deckDescriptionEncoding);
                writer.WriteNullTerminatedString(item.UnkStr1.GetText(language), unkStr1Encoding);

                index++;
            }
        }
Example #17
0
        public override void Load(BinaryReader reader, long length, Localized_Text.Language language)
        {
            var fileStartPos = reader.BaseStream.Position;

            var count = (uint)reader.ReadUInt64();

            for (uint i = 0; i < count; i++)
            {
                var id             = reader.ReadInt32();
                var series         = (Duel_Series)reader.ReadInt32();
                var price          = reader.ReadInt32();
                var type           = (PackType)reader.ReadInt32();
                var codeNameOffset = reader.ReadInt64();
                var nameOffset     = reader.ReadInt64();
                var unkStrOffset   = reader.ReadInt64();

                var tempOffset = reader.BaseStream.Position;

                reader.BaseStream.Position = fileStartPos + codeNameOffset;
                var codeName = reader.ReadNullTerminatedString(encoding1);

                reader.BaseStream.Position = fileStartPos + nameOffset;
                var name = reader.ReadNullTerminatedString(encoding2);

                reader.BaseStream.Position = fileStartPos + unkStrOffset;
                var unkStr = reader.ReadNullTerminatedString(encoding2);

                reader.BaseStream.Position = tempOffset;

                if (!Items.TryGetValue(id, out var item))
                {
                    item = new Item(id, series, price, type);
                    Items.Add(item.Id, item);
                }

                item.CodeName.SetText(language, codeName);
                item.Name.SetText(language, name);
                item.UnkStr.SetText(language, unkStr);
            }
        }
Example #18
0
        public override void Save(BinaryWriter writer, Localized_Text.Language language)
        {
            const int firstChunkItemSize = 56; // Size of each item in the first chunk
            var       fileStartPos       = writer.BaseStream.Position;

            writer.Write((ulong)Items.Count);

            var offsetsOffset = writer.BaseStream.Position;

            writer.Write(new byte[Items.Count * firstChunkItemSize]);

            var index = 0;

            foreach (var item in Items.Values)
            {
                var keyLen     = GetStringSize(item.CodeName.GetText(language), keyEncoding);
                var valueLen   = GetStringSize(item.Name.GetText(language), valueEncoding);
                var tempOffset = writer.BaseStream.Position;

                writer.BaseStream.Position = offsetsOffset + index * firstChunkItemSize;
                writer.Write(item.Id);
                writer.Write((int)item.Series);
                writer.Write(item.ChallengeDeckId);
                writer.Write(item.Unk3);
                writer.Write(item.DlcId);
                writer.Write(item.Unk5);
                writer.Write(item.Type);
                writer.WriteOffset(fileStartPos, tempOffset);
                writer.WriteOffset(fileStartPos, tempOffset + keyLen);
                writer.WriteOffset(fileStartPos, tempOffset + keyLen + valueLen);
                writer.BaseStream.Position = tempOffset;

                writer.WriteNullTerminatedString(item.CodeName.GetText(language), keyEncoding);
                writer.WriteNullTerminatedString(item.Name.GetText(language), valueEncoding);
                writer.WriteNullTerminatedString(item.Bio.GetText(language), descriptionEncoding);

                index++;
            }
        }
Example #19
0
        /// <summary>
        ///     Gets the description of the monster.
        /// </summary>
        /// <param name="language">What language to get for.</param>
        /// <param name="pendulumDescription">Should I get pendulum description?</param>
        /// <returns></returns>
        public string GetDescription(Localized_Text.Language language, bool pendulumDescription)
        {
            if (pendulumDescription && !IsPendulum)
            {
                return(string.Empty);
            }

            var text = Description.GetText(language);

            if (!IsPendulum)
            {
                return(text);
            }

            const string pendulumHeader = "[Pendulum Effect]";
            var          index          = text.IndexOf(pendulumHeader, StringComparison.Ordinal);

            if (pendulumDescription)
            {
                return(index == -1 ? string.Empty : text.Substring(index + pendulumHeader.Length));
            }

            return(index == -1 ? text : text.Substring(0, index));
        }
Example #20
0
        public override void Save(BinaryWriter writer, Localized_Text.Language language)
        {
            const int firstChunkItemSize = 40;
            var       fileStartPos       = writer.BaseStream.Position;

            writer.Write((ulong)Items.Count);

            var offsetsOffset = writer.BaseStream.Position;

            writer.Write(new byte[Items.Count * firstChunkItemSize]);

            var index = 0;

            foreach (var item in Items.Values)
            {
                var codeNameLen = GetStringSize(item.CodeName.GetText(language), encoding1);
                var nameLen     = GetStringSize(item.Name.GetText(language), encoding2);
                var tempOffset  = writer.BaseStream.Position;

                writer.BaseStream.Position = offsetsOffset + index * firstChunkItemSize;
                writer.Write(item.Id);
                writer.Write((int)item.Series);
                writer.Write(item.Price);
                writer.Write((int)item.Type);
                writer.WriteOffset(fileStartPos, tempOffset);
                writer.WriteOffset(fileStartPos, tempOffset + codeNameLen);
                writer.WriteOffset(fileStartPos, tempOffset + codeNameLen + nameLen);
                writer.BaseStream.Position = tempOffset;

                writer.WriteNullTerminatedString(item.CodeName.GetText(language), encoding1);
                writer.WriteNullTerminatedString(item.Name.GetText(language), encoding2);
                writer.WriteNullTerminatedString(item.UnkStr.GetText(language), encoding2);

                index++;
            }
        }
Example #21
0
 /// <summary>
 ///     A function that should be used to find a card based on its name.
 /// </summary>
 /// <param name="language">What localization to use.</param>
 /// <param name="name">The card name to search for</param>
 /// <returns>The Card_Info of the card if found.</returns>
 public Card_Info FindCardByName(Localized_Text.Language language, string name)
 {
     _cardsByName[language].TryGetValue(name, out var cardInfo);
     return(cardInfo);
 }
Example #22
0
 public ZIB_File GetLocalizedZibFile(Localized_Text.Language language)
 {
     return(ZibFile?.GetLocalizedFile(language));
 }
Example #23
0
 public virtual void Load(BinaryReader reader, long length, Localized_Text.Language language)
 {
     throw new NotImplementedException("Localized Files Can't Be Loaded! CHECK CODE PLEASE!");
 }
Example #24
0
        public override void Load(BinaryReader reader, long length, Localized_Text.Language language)
        {
            var fileStartPos = reader.BaseStream.Position;

            var firstChunkSize = reader.ReadInt64();

            var firstChunkItemCount  = reader.ReadInt32();
            var secondChunkItemCount = reader.ReadInt32();

            for (var i = 0; i < firstChunkItemCount; i++)
            {
                var textStartIndex = reader.ReadInt32();
                var textEndIndex   = reader.ReadInt32();
                var codeNameOffset = reader.ReadInt64();

                var tempOffset = reader.BaseStream.Position;
                reader.BaseStream.Position = fileStartPos + codeNameOffset;
                var codeName = reader.ReadNullTerminatedString(encoding);
                reader.BaseStream.Position = tempOffset;

                Script script = null;
                if (Scripts.Count > i)
                {
                    script = Scripts[i];
                }
                else
                {
                    Scripts.Add(script = new Script(textStartIndex, textEndIndex));
                }
                script.CodeName.SetText(language, codeName);
            }

            reader.BaseStream.Position = fileStartPos + firstChunkSize;

            for (var i = 0; i < secondChunkItemCount; i++)
            {
                var characterNameOffset       = reader.ReadInt64();
                var characterPositionOffset   = reader.ReadInt64();
                var characterExpressionOffset = reader.ReadInt64();
                var textOffset = reader.ReadInt64();

                var tempOffset = reader.BaseStream.Position;

                reader.BaseStream.Position = fileStartPos + characterNameOffset;
                var characterName = reader.ReadNullTerminatedString(encoding);

                reader.BaseStream.Position = fileStartPos + characterPositionOffset;
                var characterPosition = reader.ReadNullTerminatedString(encoding);

                reader.BaseStream.Position = fileStartPos + characterExpressionOffset;
                var characterExpression = reader.ReadNullTerminatedString(encoding);

                reader.BaseStream.Position = fileStartPos + textOffset;
                var text = reader.ReadNullTerminatedString(encoding);

                reader.BaseStream.Position = tempOffset;

                ScriptText scriptText = null;
                if (Text.Count > i)
                {
                    scriptText = Text[i];
                }
                else
                {
                    Text.Add(scriptText = new ScriptText());
                }
                scriptText.CharacterName.SetText(language, characterName);
                scriptText.CharacterPosition.SetText(language, characterPosition);
                scriptText.CharacterExpression.SetText(language, characterExpression);
                scriptText.Text.SetText(language, text);
            }
        }
Example #25
0
 public virtual void Save(BinaryWriter writer, Localized_Text.Language language)
 {
     throw new NotImplementedException("Localized Files Can't Be Saved! CHECK CODE PLEASE!");
 }
Example #26
0
 public LOTD_File GetLocalizedFile(Localized_Text.Language language)
 {
     return(File?.GetLocalizedFile(language));
 }
Example #27
0
        public override void Save(BinaryWriter writer, Localized_Text.Language language)
        {
            const int firstChunkOffsetsItemSize  = 4 + 4 + 8;
            const int secondChunkOffsetsItemSize = 8 * 4;

            var fileStartPos = writer.BaseStream.Position;

            writer.Write((long)0);

            writer.Write(Scripts.Count);
            writer.Write(Text.Count);

            var  firstChunkOffsetsOffset = writer.BaseStream.Position;
            long firstChunkOffsetsSize   = Scripts.Count * firstChunkOffsetsItemSize;

            writer.Write(new byte[firstChunkOffsetsSize]);

            for (var i = 0; i < Scripts.Count; i++)
            {
                var script = Scripts[i];

                var tempOffset = writer.BaseStream.Position;

                writer.BaseStream.Position = firstChunkOffsetsOffset + i * firstChunkOffsetsItemSize;
                writer.Write(script.TextStartIndex);
                writer.Write(script.TextEndIndex);
                writer.WriteOffset(fileStartPos, tempOffset);
                writer.BaseStream.Position = tempOffset;

                writer.WriteNullTerminatedString(script.CodeName.GetText(language), encoding);
            }

            var temp = writer.BaseStream.Position;

            writer.BaseStream.Position = fileStartPos;
            writer.Write(temp - fileStartPos);
            writer.BaseStream.Position = temp;

            var  secondChunkOffsetsOffset = writer.BaseStream.Position;
            long secondChunkOffsetsSize   = Text.Count * secondChunkOffsetsItemSize;

            writer.Write(new byte[secondChunkOffsetsSize]);

            for (var i = 0; i < Text.Count; i++)
            {
                var scriptText = Text[i];

                var characterNameLen       = GetStringSize(scriptText.CharacterName.GetText(language), encoding);
                var characterPositionLen   = GetStringSize(scriptText.CharacterPosition.GetText(language), encoding);
                var characterExpressionLen = GetStringSize(scriptText.CharacterExpression.GetText(language), encoding);
                var tempOffset             = writer.BaseStream.Position;

                writer.BaseStream.Position = secondChunkOffsetsOffset + i * secondChunkOffsetsItemSize;
                writer.WriteOffset(fileStartPos, tempOffset);
                writer.WriteOffset(fileStartPos, tempOffset + characterNameLen);
                writer.WriteOffset(fileStartPos, tempOffset + characterNameLen + characterPositionLen);
                writer.WriteOffset(fileStartPos,
                                   tempOffset + characterNameLen + characterPositionLen + characterExpressionLen);
                writer.BaseStream.Position = tempOffset;

                writer.WriteNullTerminatedString(scriptText.CharacterName.GetText(language), encoding);
                writer.WriteNullTerminatedString(scriptText.CharacterPosition.GetText(language), encoding);
                writer.WriteNullTerminatedString(scriptText.CharacterExpression.GetText(language), encoding);
                writer.WriteNullTerminatedString(scriptText.Text.GetText(language), encoding);
            }
        }
Example #28
0
        public override void Load(BinaryReader reader, long length, Localized_Text.Language language)
        {
            var fileStartPos = reader.BaseStream.Position;

            var count = (uint)reader.ReadUInt64();

            for (uint i = 0; i < count; i++)
            {
                var id                          = reader.ReadInt32();
                var series                      = (Duel_Series)reader.ReadInt32();
                var displayIndex                = reader.ReadInt32();
                var playerCharId                = reader.ReadInt32();
                var opponentCharId              = reader.ReadInt32();
                var playerDeckId                = reader.ReadInt32();
                var opponentDeckId              = reader.ReadInt32();
                var arenaId                     = reader.ReadInt32();
                var unk8                        = reader.ReadInt32();
                var dlcId                       = reader.ReadInt32();
                var codeNameOffset              = reader.ReadInt64();
                var playerAlternateSkinOffset   = reader.ReadInt64();
                var opponentAlternateSkinOffset = reader.ReadInt64();
                var nameOffset                  = reader.ReadInt64();
                var descriptionOffset           = reader.ReadInt64();
                var tipOffset                   = reader.ReadInt64();

                var tempOffset = reader.BaseStream.Position;

                reader.BaseStream.Position = fileStartPos + codeNameOffset;
                var codeName = reader.ReadNullTerminatedString(encoding1);

                reader.BaseStream.Position = fileStartPos + playerAlternateSkinOffset;
                var playerAlternateSkin = reader.ReadNullTerminatedString(encoding1);

                reader.BaseStream.Position = fileStartPos + opponentAlternateSkinOffset;
                var opponentAlternateSkin = reader.ReadNullTerminatedString(encoding1);

                reader.BaseStream.Position = fileStartPos + nameOffset;
                var name = reader.ReadNullTerminatedString(encoding2);

                reader.BaseStream.Position = fileStartPos + descriptionOffset;
                var description = reader.ReadNullTerminatedString(encoding2);

                reader.BaseStream.Position = fileStartPos + tipOffset;
                var tipStr = reader.ReadNullTerminatedString(encoding2);

                reader.BaseStream.Position = tempOffset;

                if (!Items.TryGetValue(id, out var item))
                {
                    item = new Item(id, series, displayIndex, playerCharId, opponentCharId, playerDeckId,
                                    opponentDeckId, arenaId, unk8, dlcId);
                    Items.Add(item.Id, item);
                }

                item.CodeName.SetText(language, codeName);
                item.PlayerAlternateSkin.SetText(language, playerAlternateSkin);
                item.OpponentAlternateSkin.SetText(language, opponentAlternateSkin);
                item.Name.SetText(language, name);
                item.Description.SetText(language, description);
                item.Tip.SetText(language, tipStr);
            }
        }