private CombatItem ReadCombatItemRev1(BinaryReader reader) { // 8 bytes: time long time = reader.ReadInt64(); // 8 bytes: src_agent ulong srcAgent = reader.ReadUInt64(); // 8 bytes: dst_agent ulong dstAgent = reader.ReadUInt64(); // 4 bytes: value int value = reader.ReadInt32(); // 4 bytes: buff_dmg int buffDmg = reader.ReadInt32(); // 4 bytes: overstack_value uint overstackValue = reader.ReadUInt32(); // 4 bytes: skill_id uint skillId = reader.ReadUInt32(); // 2 bytes: src_instid ushort srcInstid = reader.ReadUInt16(); // 2 bytes: dst_instid ushort dstInstid = reader.ReadUInt16(); // 2 bytes: src_master_instid ushort srcMasterInstid = reader.ReadUInt16(); // 2 bytes: dst_master_instid ushort dstmasterInstid = reader.ReadUInt16(); // 1 byte: iff ParseEnum.IFF iff = ParseEnum.GetIFF(reader.ReadByte()); // 1 byte: buff byte buff = reader.ReadByte(); // 1 byte: result byte result = reader.ReadByte(); // 1 byte: is_activation ParseEnum.Activation isActivation = ParseEnum.GetActivation(reader.ReadByte()); // 1 byte: is_buffremove ParseEnum.BuffRemove isBuffRemove = ParseEnum.GetBuffRemove(reader.ReadByte()); // 1 byte: is_ninety byte isNinety = reader.ReadByte(); // 1 byte: is_fifty byte isFifty = reader.ReadByte(); // 1 byte: is_moving byte isMoving = reader.ReadByte(); // 1 byte: is_statechange ParseEnum.StateChange isStateChange = ParseEnum.GetStateChange(reader.ReadByte()); // 1 byte: is_flanking byte isFlanking = reader.ReadByte(); // 1 byte: is_flanking byte isShields = reader.ReadByte(); // 1 byte: is_flanking byte isOffcycle = reader.ReadByte(); // 5 bytes: offcycle (?) + garbage ParseHelper.SafeSkip(reader.BaseStream, 4); //save // Add combat return(new CombatItem(time, srcAgent, dstAgent, value, buffDmg, overstackValue, skillId, srcInstid, dstInstid, srcMasterInstid, dstmasterInstid, iff, buff, result, isActivation, isBuffRemove, isNinety, isFifty, isMoving, isStateChange, isFlanking, isShields, isOffcycle)); }
/// <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)); } } }