예제 #1
0
 public virtual void InitializeFromCBID(UInt32 cbid, SectorMap map)
 {
     CBID            = cbid;
     CloneBaseObject = AssetManager.Instance.ContentHolder.GetCloneBaseObjectForCBID(CBID);
 }
예제 #2
0
        /*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);
            }
        }