Пример #1
0
	public ReferenceData(System.IO.BinaryReader reader)
	{
		var index = reader.ReadInt32();

		while (true)
		{
			var type = (SubRecordType)reader.ReadInt32();
			var size = reader.ReadInt32();

			switch (type)
			{
				case SubRecordType.Id:
					target = Record.GetRecord<CreatableRecord>(reader.ReadString(size));
					break;
				case SubRecordType.Scale:
					scale = reader.ReadSingle();
					break;
				case SubRecordType.DoorData:
					doorData = DoorExitData.Create(reader);
					break;
				case SubRecordType.DoorName:
					loadCell = reader.ReadString(size);
					break;
				case SubRecordType.FloatValue:
					lockLevel = reader.ReadInt32();
					break;
				case SubRecordType.KeyName:
					key = Record.GetRecord<MiscItemRecord>(reader.ReadString(size));
					break;
				case SubRecordType.Trapname:
					trap = Record.GetRecord<SpellRecord>(reader.ReadString(size));
					break;
				case SubRecordType.ReferenceBlocked:
					referenceBlocked = reader.ReadByte() != 0;
					break;
				case SubRecordType.OwnerName:
					owner = Record.GetRecord<NpcRecord>(reader.ReadString(size));
					break;
				case SubRecordType.BodyName:
					global = Record.GetRecord<Global>(reader.ReadString(size));
					break;
				case SubRecordType.IntValue:
					health = reader.ReadInt32(); // Health remaining? Also charge for lights
					break;
				case SubRecordType.Name9:
					quantity = reader.ReadInt32(); //0, 1, 5, 10, 25, 100. Definitely value override  or object count
					break;
				case SubRecordType.SoulName:
					soul = Record.GetRecord<CreatureRecord>(reader.ReadString(size));
					break;
				case SubRecordType.Data:
					transformData = new TransformData(reader);
					break;
				case SubRecordType.CreatureName:
					faction = Record.GetRecord<Faction>(reader.ReadString(size));
					break;
				case SubRecordType.Index:
					rank = reader.ReadInt32();
					break;
				case SubRecordType.SoulCharge:
					charge = reader.ReadSingle();
					break;
				default:
					reader.BaseStream.Position -= 8;
					return;
			}
		}
	}
Пример #2
0
        public void Initialize(BinaryReader reader, RecordHeader header)
        {
            while (reader.BaseStream.Position < header.DataEndPos)
            {
                var type = (SubRecordType)reader.ReadInt32();
                var size = reader.ReadInt32();

                switch (type)
                {
                case SubRecordType.InfoName:
                    infoName = reader.ReadString(size);
                    break;

                case SubRecordType.PreviousName:
                    previousInfoId = reader.ReadString(size);
                    break;

                case SubRecordType.NextName:
                    nextInfoId = reader.ReadString(size);
                    break;

                case SubRecordType.Data:
                    infoData = new InfoRecordData(reader);
                    break;

                case SubRecordType.ObjectName:
                    character = Record.GetRecord <CreatableRecord>(reader.ReadString(size));
                    break;

                case SubRecordType.RaceName:
                    race = Record.GetRecord <Race>(reader.ReadString(size));
                    break;

                case SubRecordType.CreatureName:
                    classId = Record.GetRecord <ClassRecord>(reader.ReadString(size));
                    break;

                case SubRecordType.Name:
                    var contents = reader.ReadString(size);
                    if (contents != "FFFF")
                    {
                        faction = Record.GetRecord <Faction>(contents);
                    }
                    break;

                case SubRecordType.Anam:
                    cell = reader.ReadString(size);
                    break;

                case SubRecordType.DoorName:
                    playerFaction = Record.GetRecord <Faction>(reader.ReadString(size));
                    break;

                case SubRecordType.Id:
                    response = reader.ReadString(size);
                    break;

                case SubRecordType.SoundName:
                    soundClip = reader.ReadString(size);
                    break;

                case SubRecordType.JournalName:
                    journalName = reader.ReadByte();
                    break;

                case SubRecordType.JournalFinished:
                    journalFinished = reader.ReadByte();
                    break;

                case SubRecordType.JournalRestart:
                    journalRestart = reader.ReadByte();
                    break;

                case SubRecordType.ScriptVariable:
                    scriptVariables.Add(new ScriptVariable(reader, size));
                    break;

                case SubRecordType.IntValue:
                    scriptVariables.Last().IntValue = reader.ReadInt32();
                    break;

                case SubRecordType.FloatValue:
                    scriptVariables.Last().FloatValue = reader.ReadSingle();
                    break;

                case SubRecordType.BodyName:
                    result = reader.ReadString(size);
                    break;
                }
            }

            DialogRecord.currentDialogueInfo.Add(this);
        }