public virtual void InitializeFromCBID(UInt32 cbid, SectorMap map) { CBID = cbid; CloneBaseObject = AssetManager.Instance.ContentHolder.GetCloneBaseObjectForCBID(CBID); }
/*case "fat": // Map written in text mode, actually it doesn't exist in the packed files case "fam": // Map case "xml": // Xml case "txt": // Text case "ndw": // Not needed for the server (yet or anyways) case "cat": // Catalog case "dds": case "DDS": case "png": // Png case "tga": // Tga case "pgm": case "bak": // Backup case "anm": // Animation case "fx": case "fxh": case "fxi": case "geo": case "geo01": case "ogg": // Ogg // Unknown yet case "tec": case "sha": case "spt": case "scc": case "cache": case "tk": case "lnk":*/ public static void ReadWAD(String path) { using (var br = new BinaryReader(new FileStream(String.Format("{0}clonebase.wad", path), FileMode.Open, FileAccess.Read))) { var version = br.ReadUInt32(); Debug.Assert(version == 27); #region CloneBaseObjects var objectCount = br.ReadUInt32(); for (var i = 0U; i < objectCount; ++i) { var type = br.ReadUInt32(); CloneBaseObject cb; switch ((ObjectType) type) { case ObjectType.Object: case ObjectType.ObjectGraphicsPhysics: case ObjectType.QuestObject: case ObjectType.Item: case ObjectType.Store: case ObjectType.EnterPoint: case ObjectType.ExitPoint: case ObjectType.ContinentObject: case ObjectType.Convoy: case ObjectType.SpawnPoint: case ObjectType.Trigger: case ObjectType.Reaction: case ObjectType.MapModulePlacement: case ObjectType.MapPath: case ObjectType.Money: case ObjectType.Outpost: cb = new CloneBaseObject(br); break; case ObjectType.Commodity: cb = new CloneBaseCommodity(br); break; case ObjectType.Character: cb = new CloneBaseCharacter(br); break; case ObjectType.Weapon: case ObjectType.Bullet: cb = new CloneBaseWeapon(br); break; case ObjectType.Gadget: cb = new CloneBaseGadget(br); break; case ObjectType.TinkeringKit: cb = new CloneBaseTinkeringKit(br); break; case ObjectType.Vehicle: cb = new CloneBaseVehicle(br); break; case ObjectType.PowerPlant: cb = new CloneBasePowerPlant(br); break; case ObjectType.WheelSet: cb = new CloneBaseWheelSet(br); break; case ObjectType.Creature: cb = new CloneBaseCreature(br); break; case ObjectType.Armor: cb = new CloneBaseArmor(br); break; default: throw new Exception("asd"); } AssetContainer.AccessLock.EnterWriteLock(); AssetContainer.CloneBaseObjects.Add(cb.CloneBaseSpecific.CloneBaseId, cb); AssetContainer.AccessLock.ExitWriteLock(); } #endregion var missionCount = br.ReadUInt32(); for (var i = 0U; i < missionCount; ++i) { var q = Mission.Read(br); AssetContainer.AccessLock.EnterWriteLock(); AssetContainer.Missions.Add(q.Id, q); AssetContainer.AccessLock.ExitWriteLock(); } var skillCount = br.ReadUInt32(); for (var i = 0U; i < skillCount; ++i) { var s = Skill.Read(br); AssetContainer.AccessLock.EnterWriteLock(); AssetContainer.Skills.Add(s.Id, s); AssetContainer.AccessLock.ExitWriteLock(); } var armorPrefCount = br.ReadInt32(); for (var i = 0; i < armorPrefCount; ++i) { var pa = new PrefixArmor(br); AssetContainer.AccessLock.EnterWriteLock(); AssetContainer.ArmorPrefixes.Add(pa.Id, pa); AssetContainer.AccessLock.ExitWriteLock(); } var powerPlantPrefCount = br.ReadInt32(); for (var i = 0; i < powerPlantPrefCount; ++i) { var ppp = new PrefixPowerPlant(br); AssetContainer.AccessLock.EnterWriteLock(); AssetContainer.PowerPlantPrefixes.Add(ppp.Id, ppp); AssetContainer.AccessLock.ExitWriteLock(); } var weaponPrefCount = br.ReadInt32(); for (var i = 0; i < weaponPrefCount; ++i) { var pw = new PrefixWeapon(br); AssetContainer.AccessLock.EnterWriteLock(); AssetContainer.WeaponPrefixes.Add(pw.Id, pw); AssetContainer.AccessLock.ExitWriteLock(); } var vehiclePrefCount = br.ReadInt32(); for (var i = 0; i < vehiclePrefCount; ++i) { var pv = new PrefixVehicle(br); AssetContainer.AccessLock.EnterWriteLock(); AssetContainer.VehiclePrefixes.Add(pv.Id, pv); AssetContainer.AccessLock.ExitWriteLock(); } var ornamentPrefCount = br.ReadInt32(); for (var i = 0; i < ornamentPrefCount; ++i) { var po = new PrefixOrnament(br); AssetContainer.AccessLock.EnterWriteLock(); AssetContainer.OrnamentPrefixes.Add(po.Id, po); AssetContainer.AccessLock.ExitWriteLock(); } var raceItemPrefCount = br.ReadInt32(); for (var i = 0U; i < raceItemPrefCount; ++i) { var pri = new PrefixRaceItem(br); AssetContainer.AccessLock.EnterWriteLock(); AssetContainer.RaceItemPrefixes.Add(pri.Id, pri); AssetContainer.AccessLock.ExitWriteLock(); } Debug.Assert(br.BaseStream.Position == br.BaseStream.Length); } }