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); }
public void AddStack(int slotIndex, StackDescriptor stack) { this.GuardArmy.Stacks.Add(stack); }
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); }