class PetInfo { public int Id {get;set;} public string Name {get;set;} public PetFigureData FigureData {get;set;} public int Level {get;set;} public PetInfo(IReadOnlyPacket p) { Id = p.ReadInt(); Name = p.ReadString(); FigureData = new PetFigureData(p); Level = p.ReadInt(); } } class PetFigureData { public int TypeId {get;set;} public int PaletteId {get;set;} public string Color {get;set;} public int BreedId {get;set;} public List CustomParts {get;set;} public PetFigureData(IReadOnlyPacket p) { TypeId = p.ReadInt(); PaletteId = p.ReadInt(); Color = p.ReadString(); BreedId = p.ReadInt(); CustomParts = new(); var customPartsLength = p.ReadInt(); for (var i = 0; i < customPartsLength; i++) { CustomParts.Add(new int[3] { p.ReadInt(), p.ReadInt(), p.ReadInt() }); } } } var pets = new List(); var loaded = false; OnIntercept((In.PetRemovedFromInventory, In.PetLevelUpdate), e => e.Block()); OnIntercept(In.PetInventory, e => { e.Block(); var fragments = e.Packet.ReadInt(); var currentFragment = e.Packet.ReadInt(); Log($"{currentFragment}/{fragments}"); if (currentFragment == 0) pets.Clear(); var petCount = e.Packet.ReadInt(); for (var petIdx = 0; petIdx < petCount; petIdx++) { pets.Add(new PetInfo(e.Packet)); } if (currentFragment == (fragments - 1)) { File.WriteAllText("petinv.json", ToJson(pets, false)); loaded = true; Log(pets.Count()); } }); while (!loaded) Delay(1000);