//sub Parse methods /// <summary> /// Parses fight related data /// </summary> private void ParseFightData(Stream stream) { using (var reader = CreateReader(stream)) { // 12 bytes: arc build version var buildVersion = ParseHelper.GetString(stream, 12); _logData = new LogData(buildVersion); // 1 byte: skip _revision = reader.ReadByte(); // 2 bytes: fight instance ID _id = reader.ReadUInt16(); // 1 byte: position ParseHelper.SafeSkip(stream, 1); } }
/// <summary> /// Parses skill related data /// </summary> private void ParseSkillData(Stream stream) { var apiController = new GW2APIController(); using (var reader = CreateReader(stream)) { // 4 bytes: player count uint skillCount = reader.ReadUInt32(); //TempData["Debug"] += "Skill Count:" + skill_count.ToString(); // 68 bytes: each skill for (int i = 0; i < skillCount; i++) { // 4 bytes: skill ID int skillId = reader.ReadInt32(); // 64 bytes: name var name = ParseHelper.GetString(stream, 64); //Save var skill = new SkillItem(skillId, name, apiController); _skillData.Add(skill); } } }
/// <summary> /// Parses agent related data /// </summary> private void ParseAgentData(Stream stream) { using (var reader = CreateReader(stream)) { // 4 bytes: player count int playerCount = reader.ReadInt32(); // 96 bytes: each player for (int i = 0; i < playerCount; i++) { // 8 bytes: agent ulong agent = reader.ReadUInt64(); // 4 bytes: profession uint prof = reader.ReadUInt32(); // 4 bytes: is_elite uint isElite = reader.ReadUInt32(); // 2 bytes: toughness uint toughness = reader.ReadUInt16(); // 2 bytes: healing uint concentration = reader.ReadUInt16(); // 2 bytes: healing uint healing = reader.ReadUInt16(); // 2 bytes: hitbox width uint hbWidth = (uint)2 * reader.ReadUInt16(); // 2 bytes: condition uint condition = reader.ReadUInt16(); // 2 bytes: hitbox height uint hbHeight = (uint)2 * reader.ReadUInt16(); // 68 bytes: name string name = ParseHelper.GetString(stream, 68, false); //Save string agentProf = GeneralHelper.GetAgentProfString(_logData.BuildVersion, _aPIController, prof, isElite); AgentItem.AgentType type; ushort ID = 0; switch (agentProf) { case "NPC": // NPC try { ID = ushort.Parse(prof.ToString().PadLeft(5, '0')); } catch (FormatException) { ID = 0; } type = AgentItem.AgentType.NPC; break; case "GDG": // Gadget try { ID = ushort.Parse((prof & 0x0000ffff).ToString().PadLeft(5, '0')); } catch (FormatException) { ID = 0; } type = AgentItem.AgentType.Gadget; break; default: // Player type = AgentItem.AgentType.Player; break; } _allAgentsList.Add(new AgentItem(agent, name, agentProf, ID, type, toughness, healing, condition, concentration, hbWidth, hbHeight)); } } }