Ejemplo n.º 1
0
        public override CGObject ReadObject(BinaryReader reader, int objectId, MapPosition objectPosition)
        {
            /*
             * if (this.ObjectTemplate.Type == EObjectType.RANDOM_MONSTER)
             * {
             *  for (int i = 0; i < 20; i++)
             *  {
             *      byte[] data = reader.ReadBytes(10);
             *      Console.WriteLine(StringUtils.ByteArrayToString(data));
             *  }
             *
             *  reader.BaseStream.Seek(-200, SeekOrigin.Current);
             * }
             */

            // Create Creature
            CGCreature creature = new CGCreature();

            if (MapHeader.Version > EMapFormat.ROE)
            {
                creature.Identifier = reader.ReadUInt32();
                // Quest Identifier?
            }

            StackDescriptor stack = new StackDescriptor();

            stack.Amount = reader.ReadUInt16();

            //type will be set during initialization
            creature.AddStack(0, stack);

            creature.Friendliness = reader.ReadByte();

            bool hasMessage = reader.ReadBoolean();

            if (hasMessage)
            {
                creature.Message       = reader.ReadStringWithLength();
                creature.GainResources = ReadResources(reader);

                int artId;
                if (this.MapHeader.Version == EMapFormat.ROE)
                {
                    artId = reader.ReadByte();
                }
                else
                {
                    artId = reader.ReadUInt16();
                }

                if (this.MapHeader.Version == EMapFormat.ROE && artId == 0xff || this.MapHeader.Version != EMapFormat.ROE && artId == 0xffff)
                {
                    creature.GainArtifact = EArtifactId.NONE;
                }
                else
                {
                    creature.GainArtifact = (EArtifactId)artId;
                }
            }

            creature.NeverFlee      = (reader.ReadByte() > 0);
            creature.NotGrowingTeam = (reader.ReadByte() > 0);

            reader.Skip(2);

            return(creature);
        }
Ejemplo n.º 2
0
 public void AddStack(int slotIndex, StackDescriptor stack)
 {
     this.GuardArmy.Stacks.Add(stack);
 }
Ejemplo n.º 3
0
        protected CQuest ReadQuest(BinaryReader reader)
        {
            CQuest quest = new CQuest();

            quest.MissionType = (CQuest.EMissionType)reader.ReadByte();

            switch (quest.MissionType)
            {
            case CQuest.EMissionType.MISSION_NONE:
                break;

            case CQuest.EMissionType.MISSION_PRIMARY_STAT:
                quest.M2Stats = new List <uint>(4);
                for (int x = 0; x < 4; ++x)
                {
                    uint val = (uint)reader.ReadByte();
                    quest.M2Stats.Add(val);
                }
                break;

            case CQuest.EMissionType.MISSION_LEVEL:
            case CQuest.EMissionType.MISSION_KILL_HERO:
            case CQuest.EMissionType.MISSION_KILL_CREATURE:
                quest.M13489val = reader.ReadUInt32();
                break;

            case CQuest.EMissionType.MISSION_ART:
                int artNumber = reader.ReadByte();
                for (int yy = 0; yy < artNumber; ++yy)
                {
                    ushort artid = reader.ReadUInt16();
                    quest.M5Artifacts.Add(artid);
                    ///// map->allowedArtifact[artid] = false; //these are unavailable for random generation
                }
                break;

            case CQuest.EMissionType.MISSION_ARMY:
                int typeNumber = (int)reader.ReadByte();
                quest.M6Creatures = new List <StackDescriptor>(typeNumber);
                for (int hh = 0; hh < typeNumber; ++hh)
                {
                    UInt16          creatureId = reader.ReadUInt16();
                    StackDescriptor stack      = new StackDescriptor();
                    stack.Creature = new H3Creature();
                    stack.Amount   = reader.ReadUInt16();
                }
                break;

            case CQuest.EMissionType.MISSION_RESOURCES:

                quest.M7Resources = new List <uint>(7);
                for (int x = 0; x < 7; ++x)
                {
                    uint amount = reader.ReadUInt32();
                    quest.M7Resources.Add(amount);
                }
                break;

            case CQuest.EMissionType.MISSION_HERO:
            case CQuest.EMissionType.MISSION_PLAYER:
                quest.M13489val = reader.ReadByte();
                break;
            }

            uint limit = reader.ReadUInt32();

            if (limit == 0xffffffff)
            {
                quest.LastDay = -1;
            }
            else
            {
                quest.LastDay = (int)limit;
            }

            quest.FirstVisitText   = reader.ReadStringWithLength();
            quest.NextVisitText    = reader.ReadStringWithLength();
            quest.CompletedText    = reader.ReadStringWithLength();
            quest.IsCustomFirst    = quest.FirstVisitText.Length > 0;
            quest.IsCustomNext     = quest.NextVisitText.Length > 0;
            quest.IsCustomComplete = quest.CompletedText.Length > 0;

            return(quest);
        }