Exemplo n.º 1
0
        internal void Read(BinaryReader reader, QuestsXml questsXml)
        {
            Utils.VerifyVersion(reader.ReadByte(), SaveVersionConstants.QUEST_JOURNAL);

            //num
            short questNumber = reader.ReadInt16();

            for (int i = 0; i < questNumber; ++i)
            {
                quests.Add(new Quest(reader, questsXml)
                {
                    ownerJournal = this
                });
            }
        }
Exemplo n.º 2
0
 internal QuestJournal(BinaryReader reader, QuestsXml questsXml)
 {
     Read(reader);
 }
Exemplo n.º 3
0
        internal void Read(BinaryReader reader, QuestsXml questsXml)
        {
            id = reader.ReadString();
            Utils.VerifyVersion(reader.ReadByte(), SaveVersionConstants.QUEST_QUEST);
            Utils.VerifyVersion(reader.ReadByte(), SaveVersionConstants.QUEST_FILE);

            currentState  = new Value <QuestState>((QuestState)reader.ReadByte());
            sharedOwnerId = new Value <int>(reader.ReadInt32());
            questGiverId  = new Value <int>(reader.ReadInt32());

            if (currentState.Get() == QuestState.InProgress)
            {
                tracked      = new Value <bool>(reader.ReadBoolean());
                currentPhase = new Value <byte>(reader.ReadByte());
                questCode    = new Value <int>(reader.ReadInt32());
            }

            int objectiveCount = questsXml.quests[id].objectives.Count;

            for (int i = 0; i < objectiveCount; ++i)
            {
                objectives.Add(new BaseObjective(reader));
            }

            //num2
            byte dataVariableCount = reader.ReadByte();

            for (byte i = 0; i < dataVariableCount; i++)
            {
                string key   = reader.ReadString();
                string value = reader.ReadString();

                if (!dataVariables.ContainsKey(key))
                {
                    dataVariables.Add(key, value);
                }
                else
                {
                    dataVariables[key] = value;
                }
            }

            if (currentState.Get() == QuestState.InProgress)
            {
                byte positionDataLength = reader.ReadByte();
                for (int i = 0; i < positionDataLength; ++i)
                {
                    PositionDataTypes key   = (PositionDataTypes)reader.ReadByte();
                    Vector3D <float>  value = new Vector3D <float> {
                        x = new Value <float>(reader.ReadSingle()),
                        y = new Value <float>(reader.ReadSingle()),
                        z = new Value <float>(reader.ReadSingle())
                    };

                    if (!positionData.ContainsKey(key))
                    {
                        positionData.Add(key, value);
                    }
                    else
                    {
                        positionData[key] = value;
                    }
                }

                rallyMarkerActivated = new Value <bool>(reader.ReadBoolean());
            }
            else
            {
                finishTime = new Value <ulong>(reader.ReadUInt64());
            }

            if (currentState.Get() == QuestState.InProgress || currentState.Get() == QuestState.ReadyForTurnIn)
            {
                int rewardsCount = questsXml.quests[id].rewards.Count;
                for (int i = 0; i < rewardsCount; ++i)
                {
                    rewardIndexes.Add(reader.ReadByte());
                }
            }
        }
Exemplo n.º 4
0
 internal Quest(BinaryReader reader, QuestsXml questsXml)
 {
     Read(reader, questsXml);
 }
Exemplo n.º 5
0
        private void Read(BinaryReader reader, QuestsXml questsXml = null)
        {
            if (reader.ReadChar() == 't' && reader.ReadChar() == 't' && reader.ReadChar() == 'p' &&
                reader.ReadChar() == '\0')
            {
                Utils.VerifyVersion(reader.ReadByte(), SaveVersionConstants.PLAYER_DATA_FILE);

                ecd.Read(reader);
                inventory             = ItemStack.ReadItemStack(reader);
                selectedInventorySlot = new Value <byte>(reader.ReadByte());
                bag = ItemStack.ReadItemStack(reader);

                //num
                ushort alreadyCraftedListLength = reader.ReadUInt16();
                for (ushort i = 0; i < alreadyCraftedListLength; ++i)
                {
                    alreadyCraftedList.Add(reader.ReadString());
                }

                //b
                byte spawnPointCount = reader.ReadByte();
                for (byte i = 0; i < spawnPointCount; ++i)
                {
                    Vector3D <int> spawnPoint = new Vector3D <int> {
                        x = new Value <int>(reader.ReadInt32()),
                        y = new Value <int>(reader.ReadInt32()),
                        z = new Value <int>(reader.ReadInt32())
                    };

                    spawnPoints.Add(spawnPoint);
                }

                selectedSpawnPointKey = new Value <long>(reader.ReadInt64());

                reader.ReadBoolean();
                reader.ReadInt16();

                bLoaded = new Value <bool>(reader.ReadBoolean());

                lastSpawnPosition = new Vector3D <int> {
                    x       = new Value <int>(reader.ReadInt32()),
                    y       = new Value <int>(reader.ReadInt32()),
                    z       = new Value <int>(reader.ReadInt32()),
                    heading = new Value <float>(reader.ReadSingle())
                };

                id = new Value <int>(reader.ReadInt32());

                droppedBackpackPosition = new Vector3D <int> {
                    x = new Value <int>(reader.ReadInt32()),
                    y = new Value <int>(reader.ReadInt32()),
                    z = new Value <int>(reader.ReadInt32())
                };

                playerKills = new Value <int>(reader.ReadInt32());
                zombieKills = new Value <int>(reader.ReadInt32());
                deaths      = new Value <int>(reader.ReadInt32());
                score       = new Value <int>(reader.ReadInt32());
                equipment   = new Equipment(reader);

                //num
                ushort unlockedRecipeListLength = reader.ReadUInt16();
                for (ushort i = 0; i < unlockedRecipeListLength; ++i)
                {
                    unlockedRecipeList.Add(reader.ReadString());
                }

                reader.ReadUInt16();

                markerPosition = new Vector3D <int> {
                    x = new Value <int>(reader.ReadInt32()),
                    y = new Value <int>(reader.ReadInt32()),
                    z = new Value <int>(reader.ReadInt32())
                };

                favoriteEquipment = new Equipment(reader);
                bCrouchedLocked   = new Value <bool>(reader.ReadBoolean());
                craftingData      = new CraftingData(reader);

                //num
                ushort favoriteRecipeListLength = reader.ReadUInt16();
                for (ushort i = 0; i < favoriteRecipeListLength; ++i)
                {
                    favoriteRecipeList.Add(reader.ReadString());
                }

                totalItemsCrafted = new Value <uint>(reader.ReadUInt32());
                distanceWalked    = new Value <float>(reader.ReadSingle());
                longestLife       = new Value <float>(reader.ReadSingle());

                waypoints    = new WaypointCollection(reader);
                questJournal = new QuestJournal(reader, questsXml);

                deathUpdateTime = new Value <int>(reader.ReadInt32());
                currentLife     = new Value <float>(reader.ReadSingle());
                bDead           = new Value <bool>(reader.ReadBoolean());

                reader.ReadByte();

                //bModdedSaveGame; I was asked to always save this variable as true
                reader.ReadBoolean();

                playerJournal = new PlayerJournal(reader);

                rentedVMPosition = new Vector3D <int> {
                    x = new Value <int>(reader.ReadInt32()),
                    y = new Value <int>(reader.ReadInt32()),
                    z = new Value <int>(reader.ReadInt32())
                };

                rentalEndTime = new Value <int>(reader.ReadInt32());

                ushort trackedFriendEntityIdsCount = reader.ReadUInt16();
                for (ushort i = 0; i < trackedFriendEntityIdsCount; ++i)
                {
                    trackedFriendEntityIds.Add(reader.ReadInt32());
                }

                //num2
                int progressionDataLength = reader.ReadInt32();
                progressionData = ((progressionDataLength > 0) ? new MemoryStream(reader.ReadBytes(progressionDataLength)) : new MemoryStream());

                //num2
                int buffDataLength = reader.ReadInt32();
                buffData = ((buffDataLength > 0) ? new MemoryStream(reader.ReadBytes(buffDataLength)) : new MemoryStream());

                //num2
                int stealthDataLength = reader.ReadInt32();
                stealthData = ((stealthDataLength > 0) ? new MemoryStream(reader.ReadBytes(stealthDataLength)) : new MemoryStream());

                ushort favoriteCreativeStacksCount = reader.ReadUInt16();
                for (ushort i = 0; i < favoriteCreativeStacksCount; ++i)
                {
                    favoriteCreativeStacks.Add(reader.ReadUInt16());
                }
            }
            else
            {
                throw new IOException("Save file corrupted!");
            }
        }
Exemplo n.º 6
0
 public void Load(string path, QuestsXml questsXml = null)
 {
     using (BinaryReader reader = new BinaryReader(new FileStream(path, FileMode.Open))) {
         Read(reader, questsXml);
     }
 }