/// <summary> /// Parses skill related data /// </summary> private void ParseSkillData(Stream stream) { var apiController = new GW2APIController(); using (var reader = CreateReader(stream)) { // 4 bytes: player count int skillCount = reader.ReadInt32(); //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); if (skillId != 0 && int.TryParse(name, out int n) && n == skillId) { //was it a known buff? if (Boon.BoonsByIds.TryGetValue(skillId, out Boon boon)) { name = boon.Name; } } //Save var skill = new SkillItem(skillId, name); skill.SetGW2APISkill(apiController); _skillData.Add(skill); } } }
//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 ushort id = reader.ReadUInt16(); // 1 byte: position ParseHelper.SafeSkip(stream, 1); //Save _fightData = new FightData(id, _settings.ParsePhases); } }
/// <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 Agent a = new Agent(agent, name, prof, isElite); string agentProf = a.GetProf(_logData.BuildVersion, _aPIController); AgentItem.AgentType type; string profession; switch (agentProf) { case "NPC": // NPC profession = a.Name + ":" + prof.ToString().PadLeft(5, '0'); type = AgentItem.AgentType.NPC; break; case "GDG": // Gadget profession = a.Name + ":" + (prof & 0x0000ffff).ToString().PadLeft(5, '0'); type = AgentItem.AgentType.Gadget; break; default: // Player profession = agentProf; type = AgentItem.AgentType.Player; break; } _allAgentsList.Add(new AgentItem(agent, name, profession, type, toughness, healing, condition, concentration, hbWidth, hbHeight)); } } }