/// <summary> /// Parses agent related data /// </summary> private void parseAgentData(Stream stream) { using (var reader = CreateReader(stream)) { // 4 bytes: player count int player_count = reader.ReadInt32(); // 96 bytes: each player for (int i = 0; i < player_count; i++) { // 8 bytes: agent ulong agent = reader.ReadUInt64(); // 4 bytes: profession uint prof = reader.ReadUInt32(); // 4 bytes: is_elite uint is_elite = reader.ReadUInt32(); // 2 bytes: toughness int toughness = reader.ReadInt16(); // skip concentration ParseHelper.safeSkip(stream, 2); // 2 bytes: healing int healing = reader.ReadInt16(); ParseHelper.safeSkip(stream, 2); // 2 bytes: condition int condition = reader.ReadInt16(); ParseHelper.safeSkip(stream, 2); // 68 bytes: name String name = ParseHelper.getString(stream, 68, false); //Save Agent a = new Agent(agent, name, prof, is_elite); var agent_prof = a.getProf(this.log_data.getBuildVersion(), APIController); switch (agent_prof) { case "NPC": // NPC agent_data.addItem(new AgentItem(agent, name, a.getName() + ":" + prof.ToString().PadLeft(5, '0')), agent_prof); break; // Gadget case "GDG": agent_data.addItem(new AgentItem(agent, name, a.getName() + ":" + (prof & 0x0000ffff).ToString().PadLeft(5, '0')), agent_prof); break; default: // Player agent_data.addItem(new AgentItem(agent, name, agent_prof, toughness, healing, condition), agent_prof); break; } } } }
//sub Parse methods /// <summary> /// Parses boss related data /// </summary> private void parseBossData(Stream stream) { using (var reader = CreateReader(stream)) { // 12 bytes: arc build version var build_version = ParseHelper.getString(stream, 12); this.log_data = new LogData(build_version); // 1 byte: skip ParseHelper.safeSkip(stream, 1); // 2 bytes: boss instance ID ushort id = reader.ReadUInt16(); // 1 byte: position ParseHelper.safeSkip(stream, 1); //Save // TempData["Debug"] = build_version +" "+ instid.ToString() ; this.boss_data = new BossData(id); } }
/// <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 skill_count = reader.ReadInt32(); //TempData["Debug"] += "Skill Count:" + skill_count.ToString(); // 68 bytes: each skill for (int i = 0; i < skill_count; i++) { // 4 bytes: skill ID int skill_id = reader.ReadInt32(); // 64 bytes: name var name = ParseHelper.getString(stream, 64); if (skill_id != 0 && int.TryParse(name, out int n) && n == skill_id) { //was it a known boon? foreach (Boon b in Boon.getBoonList()) { if (skill_id == b.getID()) { name = b.getName(); } } } //Save var skill = new SkillItem(skill_id, name); skill.SetGW2APISkill(apiController); skill_data.addItem(skill); } } }