Пример #1
0
    public override void Initialize(System.IO.BinaryReader reader, RecordHeader header)
    {
        while (reader.BaseStream.Position < header.DataEndPos)
        {
            var subRecordType = (SubRecordType)reader.ReadInt32();
            var size          = reader.ReadInt32();

            switch (subRecordType)
            {
            case SubRecordType.Id:
                name = reader.ReadString(size);
                break;

            case SubRecordType.Data:
                type = (SoundGeneratorType)reader.ReadInt32();
                break;

            case SubRecordType.SoundName:
                sound = Record.GetRecord <SoundRecord>(reader.ReadString(size));
                break;

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

            default:
                throw new NotImplementedException(subRecordType.ToString());
            }
        }
    }
Пример #2
0
        private Creature CreateCreature(CreatureRecord creatureRecord, int mutations, List <IProcessor> processors)
        {
            var dna = creatureRecord.Dna.Take(RedirectProcessor.DnaLength).ToList();

            while (dna.Count < RedirectProcessor.DnaLength)
            {
                dna.Add(0);
            }
            for (int i = 0; i < mutations; i++)
            {
                var index = Random.Next(RedirectProcessor.DnaLength);
                dna[index] = Random.Next(DnaInterpreter.TotalCommands);
            }

            return(new Creature
            {
                Parent = creatureRecord.Id,
                Dna = DnaInterpreter.Decode(processors, dna)
            });
        }
Пример #3
0
        private CreatureRecord[] CreateBase()
        {
            var dna = new int[RedirectProcessor.DnaLength];

            DnaInterpreter.Encode(DnaInterpreter.Processors, DnaInterpreter.DefaultDnaDecrypted).CopyTo(dna, 0);

            var record = new CreatureRecord
            {
                Id       = Guid.NewGuid(),
                ParentId = null,
                Dna      = dna
            };
            var records = new CreatureRecord[DnaProcessor.GenerationSetCount];

            for (var i = 0; i < DnaProcessor.GenerationSetCount; i++)
            {
                records[i] = record;
            }

            return(records);
        }
Пример #4
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;
			}
		}
	}
Пример #5
0
        public InfoPanel DisplayInfo(Vector3 position, int quantity, bool displayIcon, CreatureRecord soul)
        {
            var infoPanel = base.CreateInfo(position, quantity, displayIcon);

            // Soul Gems
            if (soul != null)
            {
                infoPanel.AddTitle($"{fullName} ({soul})");
            }

            // Gold
            else if (fullName.StartsWith("Gold"))
            {
                var goldCountIndex = fullName.IndexOf("_");
                var goldCount      = fullName.Substring(goldCountIndex);

                infoPanel.AddTitle($"Gold ({goldCount})");
            }
            else
            {
                infoPanel.AddTitle(fullName);
            }

            infoPanel.DisplayIcon(Icon);
            data.DisplayInfo(infoPanel);

            return(infoPanel);
        }
Пример #6
0
 protected override void Initialize(MiscItemRecord record, ReferenceData referenceData)
 {
     base.Initialize(record, referenceData);
     soul = referenceData.Soul;
 }