public Form1() { Map = new CMapTypes(); InitializeComponent(); var deleteButton = new DataGridViewButtonColumn { Name = "dataGridViewDeleteButton", HeaderText = "", UseColumnTextForButtonValue = true, Text = "Delete" }; dataGridView1.Columns.Add(deleteButton); }
private void openXmlToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog diag = new OpenFileDialog { SupportMultiDottedExtensions = true, Filter = @"YTYP.XML files (*ytyp.xml)|*ytyp.xml", FileName = "def_props.ytyp.xml" }; if (diag.ShowDialog(this) != DialogResult.OK) { return; } string path = diag.FileName; try { _reading = true; dataGridView1.Rows.Clear(); dataGridView1.ClearSelection(); dataGridView1.CurrentCell = dataGridView1[0, 0]; dataGridView1.CurrentCell.Selected = false; XmlSerializer ser = new XmlSerializer(typeof(CMapTypes)); using (StreamReader reader = new StreamReader(path)) { Map = (CMapTypes)ser.Deserialize(reader); reader.Close(); } foreach (var archetype in Map.archetypes) { CreateRowFromArchetype(archetype, dataGridView1); } cMapNameTextBox.Text = Map.name; _reading = false; } catch (Exception exception) { string val = string.Empty; if (File.Exists("Error.log")) { val = File.ReadAllText("Error.log") + "\n"; } File.WriteAllText("ErrorLog.log", val + $@"[ERROR] [{DateTime.UtcNow:hh:mm:ss}]" + exception.Message + Environment.NewLine + exception.StackTrace); throw; } }
public byte[] Save() { MetaBuilder mb = new MetaBuilder(); var mdb = mb.EnsureBlock(MetaName.CMapTypes); CMapTypes mapTypes = _CMapTypes; if (Extensions == null || Extensions.Length <= 0) { mapTypes.extensions = new Array_StructurePointer(); } else { mapTypes.extensions = mb.AddWrapperArrayPtr(Extensions); } if ((AllArchetypes != null) && (AllArchetypes.Length > 0)) { for (int i = 0; i < AllArchetypes.Length; i++) { var arch = AllArchetypes[i]; //save the extensions first.. if (arch._BaseArchetypeDef.extensions.Count1 > 0) { arch._BaseArchetypeDef.extensions = mb.AddWrapperArrayPtr(arch.Extensions); } } MetaPOINTER[] ptrs = new MetaPOINTER[AllArchetypes.Length]; for (int i = 0; i < AllArchetypes.Length; i++) { var arch = AllArchetypes[i]; switch (arch) { case TimeArchetype t: ptrs[i] = mb.AddItemPtr(MetaName.CTimeArchetypeDef, t._TimeArchetypeDef); break; case MloArchetype m: try { m._MloArchetypeDef._MloArchetypeDef.entities = mb.AddWrapperArrayPtr(m.entities); m._MloArchetypeDef._MloArchetypeDef.rooms = mb.AddWrapperArray(m.rooms); m._MloArchetypeDef._MloArchetypeDef.portals = mb.AddWrapperArray(m.portals); m._MloArchetypeDef._MloArchetypeDef.entitySets = mb.AddWrapperArray(m.entitySets); m._MloArchetypeDef._MloArchetypeDef.timeCycleModifiers = mb.AddItemArrayPtr(MetaName.CMloTimeCycleModifier, m.timeCycleModifiers); } catch /* (Exception e)*/ { //todo: log save error. } ptrs[i] = mb.AddItemPtr(MetaName.CMloArchetypeDef, m._MloArchetypeDef); break; case Archetype a: ptrs[i] = mb.AddItemPtr(MetaName.CBaseArchetypeDef, a._BaseArchetypeDef); break; } } mapTypes.archetypes = mb.AddPointerArray(ptrs); } else { mapTypes.archetypes = new Array_StructurePointer(); } if (CompositeEntityTypes != null && CompositeEntityTypes.Length > 0) { var cptrs = new MetaPOINTER[CompositeEntityTypes.Length]; for (int i = 0; i < cptrs.Length; i++) { var cet = CompositeEntityTypes[i]; cptrs[i] = mb.AddItemPtr(MetaName.CCompositeEntityType, cet); } mapTypes.compositeEntityTypes = mb.AddItemArrayPtr(MetaName.CCompositeEntityType, cptrs); } mapTypes.name = NameHash; mapTypes.dependencies = new Array_uint(); // is this never used? possibly a todo? mb.AddStructureInfo(MetaName.CMapTypes); if ((AllArchetypes != null && AllArchetypes.Length > 0)) { mb.AddStructureInfo(MetaName.CBaseArchetypeDef); mb.AddEnumInfo(MetaName.rage__fwArchetypeDef__eAssetType); // ASSET_TYPE_ } if ((AllArchetypes != null) && (AllArchetypes.Any(x => x is MloArchetype))) { mb.AddStructureInfo(MetaName.CMloArchetypeDef); mb.AddStructureInfo(MetaName.CMloRoomDef); mb.AddStructureInfo(MetaName.CMloPortalDef); mb.AddStructureInfo(MetaName.CMloEntitySet); mb.AddStructureInfo(MetaName.CMloTimeCycleModifier); } if ((AllArchetypes != null) && (AllArchetypes.Any(x => x is MloArchetype m && m.entities.Length > 0))) { mb.AddStructureInfo(MetaName.CEntityDef); mb.AddEnumInfo(MetaName.rage__eLodType); //LODTYPES_ mb.AddEnumInfo(MetaName.rage__ePriorityLevel); //PRI_ } if ((AllArchetypes != null) && (AllArchetypes.Any(x => x is TimeArchetype))) { mb.AddStructureInfo(MetaName.CTimeArchetypeDef); } if (CompositeEntityTypes?.Length > 0) { mb.AddStructureInfo(MetaName.CCompositeEntityType); } mb.AddItem(MetaName.CMapTypes, mapTypes); Meta meta = mb.GetMeta(); byte[] data = ResourceBuilder.Build(meta, 2); HasChanged = false; return(data); }
public void Load(byte[] data, RpfFileEntry entry) { Name = entry.Name; RpfFileEntry = entry; RpfResourceFileEntry resentry = entry as RpfResourceFileEntry; if (resentry == null) { MemoryStream ms = new MemoryStream(data); if (RbfFile.IsRBF(ms)) { Rbf = new RbfFile(); Rbf.Load(ms); } else if (PsoFile.IsPSO(ms)) { Pso = new PsoFile(); Pso.Load(ms); //PsoTypes.EnsurePsoTypes(Pso); } else { } return; } ResourceDataReader rd = new ResourceDataReader(resentry, data); Meta = rd.ReadBlock <Meta>(); _CMapTypes = MetaTypes.GetTypedData <CMapTypes>(Meta, MetaName.CMapTypes); List <Archetype> allarchs = new List <Archetype>(); var ptrs = MetaTypes.GetPointerArray(Meta, _CMapTypes.archetypes); if (ptrs != null) { for (int i = 0; i < ptrs.Length; i++) { var ptr = ptrs[i]; var offset = ptr.Offset; var block = Meta.GetBlock(ptr.BlockID); if (block == null) { continue; } if ((offset < 0) || (block.Data == null) || (offset >= block.Data.Length)) { continue; } Archetype a = null; switch (block.StructureNameHash) { case MetaName.CBaseArchetypeDef: var basearch = PsoTypes.ConvertDataRaw <CBaseArchetypeDef>(block.Data, offset); a = new Archetype(); a.Init(this, ref basearch); a.Extensions = MetaTypes.GetExtensions(Meta, basearch.extensions); break; case MetaName.CTimeArchetypeDef: var timearch = PsoTypes.ConvertDataRaw <CTimeArchetypeDef>(block.Data, offset); var ta = new TimeArchetype(); ta.Init(this, ref timearch); ta.Extensions = MetaTypes.GetExtensions(Meta, timearch._BaseArchetypeDef.extensions); a = ta; break; case MetaName.CMloArchetypeDef: var mloarch = PsoTypes.ConvertDataRaw <CMloArchetypeDef>(block.Data, offset); var ma = new MloArchetype(); ma.Init(this, ref mloarch); ma.Extensions = MetaTypes.GetExtensions(Meta, mloarch._BaseArchetypeDef.extensions); ma.LoadChildren(Meta); a = ma; break; default: continue; } if (a != null) { allarchs.Add(a); } } } AllArchetypes = allarchs.ToArray(); Extensions = MetaTypes.GetExtensions(Meta, _CMapTypes.extensions); if (Extensions != null) { } //AudioEmitters = MetaTypes.GetTypedDataArray<CExtensionDefAudioEmitter>(Meta, MetaName.CExtensionDefAudioEmitter); //if (AudioEmitters != null) //{ } //CEntityDefs = MetaTypes.GetTypedDataArray<CEntityDef>(Meta, MetaName.CEntityDef); CompositeEntityTypes = MetaTypes.ConvertDataArray <CCompositeEntityType>(Meta, MetaName.CCompositeEntityType, _CMapTypes.compositeEntityTypes); if (CompositeEntityTypes != null) { } NameHash = _CMapTypes.name; if (NameHash == 0) { int ind = entry.NameLower.LastIndexOf('.'); if (ind > 0) { NameHash = JenkHash.GenHash(entry.NameLower.Substring(0, ind)); } else { NameHash = JenkHash.GenHash(entry.NameLower); } } Strings = MetaTypes.GetStrings(Meta); if (Strings != null) { foreach (string str in Strings) { JenkIndex.Ensure(str); //just shove them in there } } //foreach (var block in Meta.DataBlocks) //{ // switch(block.StructureNameHash) // { // case MetaName.CMapTypes: // case MetaName.CTimeArchetypeDef: // case MetaName.CBaseArchetypeDef: // case MetaName.CMloArchetypeDef: // case MetaName.CMloTimeCycleModifier: // case MetaName.CMloRoomDef: // case MetaName.CMloPortalDef: // case MetaName.CMloEntitySet: // case MetaName.CEntityDef: // case MetaName.CExtensionDefParticleEffect: // case MetaName.CExtensionDefAudioCollisionSettings: // case MetaName.CExtensionDefSpawnPoint: // case MetaName.CExtensionDefSpawnPointOverride: // case MetaName.CExtensionDefExplosionEffect: // case MetaName.CExtensionDefAudioEmitter: // case MetaName.CExtensionDefLadder: // case MetaName.CExtensionDefBuoyancy: // case MetaName.CExtensionDefExpression: // case MetaName.CExtensionDefLightShaft: // case MetaName.CExtensionDefLightEffect: // case MetaName.CExtensionDefDoor: // case MetaName.CExtensionDefWindDisturbance: // case MetaName.CExtensionDefProcObject: // case MetaName.CLightAttrDef: // case (MetaName)MetaTypeName.STRING: // case (MetaName)MetaTypeName.POINTER: // case (MetaName)MetaTypeName.UINT: // case (MetaName)MetaTypeName.VECTOR4: // break; // default: // break; // } //} //MetaTypes.ParseMetaData(Meta); }
public byte[] Save() { MetaBuilder mb = new MetaBuilder(); var mdb = mb.EnsureBlock(MetaName.CMapTypes); CMapTypes mapTypes = CMapTypes; if ((AllArchetypes != null) && (AllArchetypes.Length > 0)) { MetaPOINTER[] archPtrs = new MetaPOINTER[AllArchetypes.Length]; for (int i = 0; i < AllArchetypes.Length; i++) { var arch = AllArchetypes[i]; arch._BaseArchetypeDef.extensions = mb.AddWrapperArrayPtr(arch.Extensions); } for (int i = 0; i < archPtrs.Length; i++) { var arch = AllArchetypes[i]; if (arch is MloArchetype) { var mloArch = arch as MloArchetype; mloArch._BaseMloArchetypeDef._MloArchetypeDef.entities = mb.AddWrapperArrayPtr(mloArch.entities); mloArch._BaseMloArchetypeDef._MloArchetypeDef.rooms = mb.AddWrapperArray(mloArch.rooms); mloArch._BaseMloArchetypeDef._MloArchetypeDef.portals = mb.AddWrapperArray(mloArch.portals); mloArch._BaseMloArchetypeDef._MloArchetypeDef.entitySets = mb.AddWrapperArray(mloArch.entitySets); mloArch._BaseMloArchetypeDef._MloArchetypeDef.timeCycleModifiers = mb.AddItemArrayPtr(MetaName.CTimeCycleModifier, mloArch.timeCycleModifiers); archPtrs[i] = mb.AddItemPtr(MetaName.CMloArchetypeDef, mloArch.BaseMloArchetypeDef); } else if (arch is TimeArchetype) { var timeArch = arch as TimeArchetype; archPtrs[i] = mb.AddItemPtr(MetaName.CTimeArchetypeDef, timeArch.TimeArchetypeDef); } else { archPtrs[i] = mb.AddItemPtr(MetaName.CBaseArchetypeDef, arch.BaseArchetypeDef); } } mapTypes.archetypes = mb.AddPointerArray(archPtrs); } if ((CompositeEntityTypes != null) && (CompositeEntityTypes.Length > 0)) { MetaPOINTER[] cetPtrs = new MetaPOINTER[CompositeEntityTypes.Length]; for (int i = 0; i < cetPtrs.Length; i++) { var cet = CompositeEntityTypes[i]; cetPtrs[i] = mb.AddItemPtr(MetaName.CCompositeEntityType, cet); } mapTypes.compositeEntityTypes = mb.AddItemArrayPtr(MetaName.CCompositeEntityType, cetPtrs); } mb.AddItem(MetaName.CMapTypes, mapTypes); mb.AddStructureInfo(MetaName.CMapTypes); mb.AddStructureInfo(MetaName.CBaseArchetypeDef); mb.AddStructureInfo(MetaName.CMloArchetypeDef); mb.AddStructureInfo(MetaName.CTimeArchetypeDef); mb.AddStructureInfo(MetaName.CMloRoomDef); mb.AddStructureInfo(MetaName.CMloPortalDef); mb.AddStructureInfo(MetaName.CMloEntitySet); mb.AddStructureInfo(MetaName.CCompositeEntityType); mb.AddEnumInfo((MetaName)1991964615); mb.AddEnumInfo((MetaName)1294270217); mb.AddEnumInfo((MetaName)1264241711); mb.AddEnumInfo((MetaName)648413703); mb.AddEnumInfo((MetaName)3573596290); mb.AddEnumInfo((MetaName)700327466); mb.AddEnumInfo((MetaName)193194928); mb.AddEnumInfo((MetaName)2266515059); Meta = mb.GetMeta(); byte[] data = ResourceBuilder.Build(Meta, 2); //ymap is version 2... return(data); }