Exemplo n.º 1
0
        public override CGObject ReadObject(BinaryReader reader, int objectId, MapPosition objectPosition)
        {
            CGDwelling dwelling = new CGDwelling();

            dwelling.SetOwner((EPlayerColor)reader.ReadByte());
            reader.Skip(3);

            return(dwelling);
        }
Exemplo n.º 2
0
        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);
        }