private void ResetData() { if (Heroes3Master.Master != null) { Heroes3Master.Master.Dispose(); Heroes3Master.Master = null; } if (selectedLodFile != null) { selectedLodFile.stream.Close(); selectedLodFile = null; } lbFiles.Items.Clear(); tabsMain.TabPages.Clear(); heroMainDataControl.HeroProfileControl.HeroIndex = -1; heroMainDataControl.HeroProfileControl.Image = null; heroMainDataControl.ResetCastles(); heroClassDataControl.Reset(); creatureDataControl.Reset(); spellDataControl.Reset(); spellDataControl.ResetSchools(); cbLodFiles.Items.Clear(); }
private void cbLodFiles_SelectedIndexChanged(object sender, EventArgs e) { if (Heroes3Master.Master != null) { selectedLodFile = Heroes3Master.Master.ResourceFiles.FirstOrDefault(f => f.Name == cbLodFiles.SelectedItem.ToString()); ReloadAndFilterData(); } }
public virtual void LoadData(LodFile parent, int count) { stream.Position = FAT_OFFSET; byte[] record = new byte[32]; for (int i = 0; i < count; i++) { stream.Read(record, 0, 32); FilesTable.Add(new FatRecord(parent, record)); } }
public FatRecord(LodFile parent, byte[] record) { if (record.Length != 32) { throw new ArgumentException("not a record"); } Parent = parent; FileName = Encoding.ASCII.GetString(record, 0, Array.IndexOf <byte>(record, 0)); fname = new byte[12]; Buffer.BlockCopy(record, 0, fname, 0, 12); Extension = FileName.Substring(FileName.IndexOf('.') + 1).ToUpper(); Unknown1 = BitConverter.ToInt32(record, 12); Offset = BitConverter.ToInt32(record, 16); RealSize = BitConverter.ToInt32(record, 20); SpriteType = BitConverter.ToInt32(record, 24); Size = BitConverter.ToInt32(record, 28); }
private void LoadAllWithExtension(string dataDirectory, string extension) { foreach (var file in Directory.GetFiles(dataDirectory, "*" + extension)) { if (file.EndsWith(extension, StringComparison.OrdinalIgnoreCase)) { FileStream fs = null; try { fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); string lcfileName = Path.GetFileName(file).ToLower(); LodFile lod = new LodFile(this, fs); lod.LoadFAT(); ResourceFiles.Add(lod); } catch (Exception ex) { fs.Close(); } } } }
private void m_openFile_Click(object sender, EventArgs e) { if (ofd.ShowDialog() == DialogResult.OK) { ResetData(); string extension = Path.GetExtension(ofd.FileName).ToLower(); if (extension == ".exe") { LoadMaster(ofd.FileName); m_saveFile.Text = "Save All Data"; m_saveFile.Visible = true; m_saveFileAs.Visible = true; btnSaveLocalChanges.Visible = true; } else { m_saveFile.Text = "Save Resource File"; m_saveFile.Visible = true; m_saveFileAs.Visible = true; var fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); selectedLodFile = new LodFile(null, fs); selectedLodFile.LoadFAT(); lbFiles.Items.AddRange(selectedLodFile.GetNames()); tabsMain.TabPages.Add(tabResources); cbLodFiles.Items.Add(Path.GetFileName(ofd.FileName)); cbLodFiles.SelectedIndex = 0; ReloadAndFilterData(); } tabsMain.Visible = true; } }
public void LoadMaster(string executablPath) { var master = Heroes3Master.LoadInfo(executablPath); selectedLodFile = master.GetByName("h3bitmap.lod"); SpecialityBuilder.LoadFromMaster(master); heroMainDataControl.LoadCastles(); heroMainDataControl.LoadHeroes(); heroClassDataControl.LoadHeroClasses(); creatureDataControl.LoadCastles(); spellDataControl.LoadSpells(); var lodFileNames = master.ResourceFiles.Select(s => s.Name).ToArray(); cbLodFiles.Items.AddRange(lodFileNames); cbLodFiles.SelectedIndex = Array.IndexOf <string>(lodFileNames, selectedLodFile.Name); tabsMain.TabPages.Add(tabHeroes); tabsMain.TabPages.Add(tabHeroClass); tabsMain.TabPages.Add(tabCreatures); tabsMain.TabPages.Add(tabSpells); tabsMain.TabPages.Add(tabResources); }