Example #1
0
        public void Read(BinaryReader reader)
        {
            version    = reader.ReadInt32();
            modid      = reader.ReadString();
            byteLength = reader.ReadInt64();
            if (!(SRModLoader.GetMod(modid) is SRMod mod))
            {
                throw new Exception($"Unrecognized mod id: {modid}");
            }
            var saveInfo = SaveRegistry.GetSaveInfo(mod);

            identifiableData.Clear();
            int count = reader.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                var e = new IdentifiedData();
                e.Read(reader, saveInfo);
                identifiableData.Add(e);
            }

            extendedData.Clear();
            count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
            {
                var e = new ExtendedDataTree();
                e.Read(reader);
                extendedData.Add(e);
            }

            if (version >= 1)
            {
                playerData.Read(reader);
                pediaData.Read(reader);
                enumTranslator = new EnumTranslator();
                enumTranslator.Read(reader);
                BinaryUtils.ReadDictionary(reader, customAmmo, (x) => AmmoIdentifier.Read(x), (x) =>
                {
                    var list      = new List <VanillaAmmoData>();
                    int ammoCount = x.ReadInt32();
                    for (int i = 0; i < ammoCount; i++)
                    {
                        if (x.ReadBoolean())
                        {
                            var newData = new VanillaAmmoData();
                            newData.Load(x.BaseStream);
                            list.Add(newData);
                        }
                        else
                        {
                            list.Add(null);
                        }
                    }

                    return(list);
                });
            }
        }
Example #2
0
        public void Write(BinaryWriter writer)
        {
            version = DATA_VERSION;
            var start = writer.BaseStream.Position;

            writer.Write(version);
            writer.Write(modid);
            var overwritePosition = writer.BaseStream.Position;

            writer.Write((long)0);
            if (!(SRModLoader.GetMod(modid) is SRMod mod))
            {
                throw new Exception($"Unrecognized mod id: {modid}");
            }
            var saveInfo = SaveRegistry.GetSaveInfo(mod);

            writer.Write(identifiableData.Count);
            foreach (var data in identifiableData)
            {
                data.Write(writer, saveInfo);
            }

            writer.Write(extendedData.Count);
            foreach (var data in extendedData)
            {
                data.Write(writer);
            }

            playerData.Write(writer);
            pediaData.Write(writer);

            BinaryUtils.WriteDictionary(writer, customAmmo, (x, y) => AmmoIdentifier.Write(y, x), (x, y) =>
            {
                x.Write(y.Count);
                foreach (var v in y)
                {
                    x.Write(v != null);
                    if (v != null)
                    {
                        v.Write(x.BaseStream);
                    }
                }
            });

            DataPiece.Serialize(writer, extendedWorldData);

            worldData.Write(writer);

            var cur = writer.BaseStream.Position;

            writer.BaseStream.Seek(overwritePosition, SeekOrigin.Begin);
            byteLength = cur - (start);
            writer.Write(byteLength);
            writer.BaseStream.Seek(cur, SeekOrigin.Begin);
        }
        public static VanillaActorData ActorCreator(GameModel gameModel, int typeId, long actorId, ActorModel actorModel)
        {
            var mod = SaveRegistry.ModForModelType(actorModel.GetType());

            if (mod != null)
            {
                var info     = SaveRegistry.GetSaveInfo(mod).GetRegistryFor <CustomActorData>();
                var newmodel = info.GetDataForID(info.GetIDForModel(actorModel.GetType()));
                newmodel.PullCustomModel(actorModel);
                return((VanillaActorData)newmodel);
            }
            return(new VanillaActorData());
        }