public override CGObject ReadObject(BinaryReader reader, int objectId, MapPosition objectPosition) { CGDwelling dwelling = new CGDwelling(); dwelling.SetOwner((EPlayerColor)reader.ReadByte()); reader.Skip(3); return(dwelling); }
public override CGObject ReadObject(BinaryReader reader, int objectId, MapPosition objectPosition) { CGDwelling dwelling = new CGDwelling(); CreatureGeneratorAsCastleInfo castleInfo = null; CreatureGeneratorAsLeveledInfo levelInfo = null; switch (this.ObjectTemplate.Type) { case EObjectType.RANDOM_DWELLING: castleInfo = new CreatureGeneratorAsCastleInfo(dwelling); levelInfo = new CreatureGeneratorAsLeveledInfo(dwelling); castleInfo.Owner = dwelling; levelInfo.Owner = dwelling; break; case EObjectType.RANDOM_DWELLING_LVL: castleInfo = new CreatureGeneratorAsCastleInfo(dwelling); castleInfo.Owner = dwelling; break; case EObjectType.RANDOM_DWELLING_FACTION: levelInfo = new CreatureGeneratorAsLeveledInfo(dwelling); levelInfo.Owner = dwelling; break; default: break; } dwelling.SetOwner((EPlayerColor)reader.ReadUInt32()); //216 and 217 if (castleInfo != null) { castleInfo.InstanceId = string.Empty; castleInfo.Identifier = reader.ReadUInt32(); if (castleInfo.Identifier == 0) { castleInfo.AsCastle = false; const int MASK_SIZE = 8; byte[] mask = new byte[2]; mask[0] = reader.ReadByte(); mask[1] = reader.ReadByte(); castleInfo.AllowedFactions = new List <bool>(); for (int i = 0; i < MASK_SIZE; i++) { bool val = ((mask[0] & (1 << i)) > 0); castleInfo.AllowedFactions.Add(val); } for (int i = 0; i < (GameConstants.F_NUMBER - MASK_SIZE); i++) { bool val = ((mask[1] & (1 << i)) > 0); castleInfo.AllowedFactions.Add(val); } } else { castleInfo.AsCastle = true; } dwelling.SpecAsCastle = castleInfo; } //216 and 218 if (levelInfo != null) { levelInfo.MinLevel = Math.Max(reader.ReadByte(), (byte)1); levelInfo.MaxLevel = Math.Max(reader.ReadByte(), (byte)7); dwelling.SpecAsLeveled = levelInfo; } return(dwelling); }