protected ExternalClass(ExternalMemorySharp emsInstance, UIntPtr address) { Ems = emsInstance ?? throw new NullReferenceException("emsInstance Can't be null, Use 'ExternalMemorySharp.MainEms' instead."); BaseAddress = address; // ReSharper disable once VirtualMemberCallInConstructor InitOffsets(); // Get All Offset Props Offsets = this.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance) .Where(f => f.FieldType == typeof(ExternalOffset) || f.FieldType.IsSubclassOfRawGeneric(typeof(ExternalOffset <>))) .Select(f => { var curOffset = (ExternalOffset)f.GetValue(this); // Set Info curOffset.Name = f.Name; curOffset.Ems = Ems; // If It's 32bit Game Then Pointer Is 4Byte if (curOffset.OffsetType == OffsetType.UIntPtr && !curOffset.IsGame64Bit) { curOffset.Size = 0x4; } else if (curOffset.OffsetType == OffsetType.ExternalClass && curOffset.ExternalClassIsPointer) { curOffset.Size = curOffset.IsGame64Bit ? 0x8 : 0x4; } return(curOffset); }) .ToList(); // Re order Offsets List <ExternalOffset> offsetsList = Offsets .Where(f => f != null) .ToList(); // Sort By Dependencies offsetsList = offsetsList.OrderBy(off => off.Offset).ToList(); List <ExternalOffset> offsets = offsetsList; Offsets = offsetsList.Sort(off => offsets.Where(offset => offset == off.Dependency)); // Get Size Of Class ClassSize = Utils.GetDependenciesSize(ExternalOffset.None, Offsets); }
/// <summary> /// Update Memory Reader/Writer /// </summary> /// <param name="externalMemorySharp">New External Memory Sharp Class That's Will Used To Read And Write</param> public void UpdateReader(ExternalMemorySharp externalMemorySharp) { Ems = externalMemorySharp; }