示例#1
0
        private void ReadEvents(BinaryReader reader)
        {
            mapObject.Events = new List <MapEvent>();

            uint numberOfEvents = reader.ReadUInt32();

            for (int yyoo = 0; yyoo < numberOfEvents; ++yyoo)
            {
                MapEvent mEvent = new MapEvent();
                mEvent.Name    = reader.ReadStringWithLength();
                mEvent.Message = reader.ReadStringWithLength();

                mEvent.Resources = MapObjectReader.ReadResources(reader);
                mEvent.Players   = reader.ReadByte();
                if (mapObject.Header.Version > EMapFormat.AB)
                {
                    mEvent.HumanAffected = reader.ReadByte();
                }
                else
                {
                    mEvent.HumanAffected = 0xff;
                }

                mEvent.ComputerAffected = reader.ReadByte();
                mEvent.FirstOccurence   = reader.ReadUInt16();
                mEvent.NextOccurence    = reader.ReadByte();

                reader.Skip(17);

                Console.WriteLine(string.Format("Map Event: {0} Name={1} Message={2}", yyoo, mEvent.Name, mEvent.Message));

                mapObject.Events.Add(mEvent);
            }
        }
示例#2
0
        private void ReadObjects(BinaryReader reader)
        {
            int objectCount = (int)reader.ReadUInt32();

            Console.WriteLine(string.Format("Totally {0} objects.", objectCount));

            this.mapObject.Objects = new List <CGObject>(objectCount);

            for (int ww = 0; ww < objectCount; ww++)
            {
                int objectId = this.mapObject.Objects.Count();

                /*
                 * if (objectId >= 2351)
                 * {
                 *  for (int i = 0; i < 20; i++)
                 *  {
                 *      byte[] data = reader.ReadBytes(10);
                 *      Console.WriteLine(StringUtils.ByteArrayToString(data));
                 *  }
                 *
                 *  reader.BaseStream.Seek(-200, SeekOrigin.Current);
                 * }
                 */

                MapPosition objectPosition      = reader.ReadPosition();
                int         objectTemplateIndex = (int)reader.ReadUInt32();

                ObjectTemplate objTemplate = mapObject.ObjectTemplates[objectTemplateIndex];
                reader.Skip(5);

                MapObjectReader objectReader = MapObjectReaderFactory.GetObjectReader(objTemplate.Type);
                CGObject        resultObject = null;
                if (objectReader != null)
                {
                    objectReader.Map            = this.mapObject;
                    objectReader.MapHeader      = this.mapObject.Header;
                    objectReader.ObjectTemplate = objTemplate;

                    resultObject = objectReader.ReadObject(reader, objectId, objectPosition);
                    if (resultObject == null)
                    {
                        continue;
                    }
                }
                else
                {
                    // Normal Object, load from JSON
                    resultObject = new CGObject();
                }

                resultObject.Position   = objectPosition;
                resultObject.Identifier = (uint)objectId;
                resultObject.Template   = objTemplate;

                if (resultObject.Template.Type != EObjectType.HERO && resultObject.Template.Type != EObjectType.HERO_PLACEHOLDER && resultObject.Template.Type != EObjectType.PRISON)
                {
                    resultObject.SubId = resultObject.Template.SubId;
                }

                resultObject.InstanceName = string.Format("{0}_{1}", resultObject.Identifier, resultObject.Template.Type);
                //// Console.WriteLine(string.Format(@"Readed object {0}, Position: [{1}, {2}, {3}]", resultObject.InstanceName, objectPosition.PosX, objectPosition.PosY, objectPosition.Level));

                mapObject.Objects.Add(resultObject);
            }
        }
示例#3
0
        public static MapObjectReader GetObjectReader(EObjectType objectType)
        {
            MapObjectReader readerObject = null;

            switch (objectType)
            {
            case EObjectType.EVENT:
                return(new CGEventReader());

            case EObjectType.HERO:
            case EObjectType.RANDOM_HERO:
            case EObjectType.PRISON:
                return(new CGHeroReader());

            case EObjectType.MONSTER:      //Monster
            case EObjectType.RANDOM_MONSTER:
            case EObjectType.RANDOM_MONSTER_L1:
            case EObjectType.RANDOM_MONSTER_L2:
            case EObjectType.RANDOM_MONSTER_L3:
            case EObjectType.RANDOM_MONSTER_L4:
            case EObjectType.RANDOM_MONSTER_L5:
            case EObjectType.RANDOM_MONSTER_L6:
            case EObjectType.RANDOM_MONSTER_L7:
                return(new CGCreatureReader());

            case EObjectType.OCEAN_BOTTLE:
            case EObjectType.SIGN:
                return(new CGSignBottleReader());

            case EObjectType.SEER_HUT:
                return(new CGSeerHutReader());

            case EObjectType.WITCH_HUT:
                return(new CGWitchHutReader());

            case EObjectType.SCHOLAR:
                return(new CGScholarReader());

            case EObjectType.GARRISON:
            case EObjectType.GARRISON2:
                return(new CGGarrisonReader());

            case EObjectType.ARTIFACT:
            case EObjectType.RANDOM_ART:
            case EObjectType.RANDOM_TREASURE_ART:
            case EObjectType.RANDOM_MINOR_ART:
            case EObjectType.RANDOM_MAJOR_ART:
            case EObjectType.RANDOM_RELIC_ART:
            case EObjectType.SPELL_SCROLL:
                return(new CGArtifactReader());

            case EObjectType.RANDOM_RESOURCE:
            case EObjectType.RESOURCE:
                return(new CGResourceReader());

            case EObjectType.RANDOM_TOWN:
            case EObjectType.TOWN:
                return(new CGTownReader());

            case EObjectType.MINE:
            case EObjectType.ABANDONED_MINE:
                return(new CGMineReader());

            case EObjectType.CREATURE_GENERATOR1:
            case EObjectType.CREATURE_GENERATOR2:
            case EObjectType.CREATURE_GENERATOR3:
            case EObjectType.CREATURE_GENERATOR4:
                return(new CGDwellingSimpleReader());

            case EObjectType.SHRINE_OF_MAGIC_GESTURE:
            case EObjectType.SHRINE_OF_MAGIC_INCANTATION:
            case EObjectType.SHRINE_OF_MAGIC_THOUGHT:
                return(new CGShrineReader());

            case EObjectType.PANDORAS_BOX:
                return(new CGPandoraBoxReader());

            case EObjectType.GRAIL:
                return(new CGGrailReader());

            case EObjectType.RANDOM_DWELLING:
            case EObjectType.RANDOM_DWELLING_FACTION:
            case EObjectType.RANDOM_DWELLING_LVL:
                return(new CGDwellingReader());

            case EObjectType.QUEST_GUARD:
                return(new CGQuestGuardReader());

            case EObjectType.SHIPYARD:
                return(new CGShipyardReader());

            case EObjectType.HERO_PLACEHOLDER:
                return(new CGHeroPlaceholderReader());

            case EObjectType.BORDERGUARD:
                return(new CGBorderGuardReader());

            case EObjectType.BORDER_GATE:
                return(new CGBorderGateReader());

            case EObjectType.PYRAMID:
                return(new CGPyramidReader());

            case EObjectType.LIGHTHOUSE:
                return(new CGLightHouseReader());

            default:
                break;
            }

            return(readerObject);
        }