This is all just assumptions w/o seeing the code for the 2 functions mentioned, but
.ReadInt() looks to take 1 parameter which is an address (just a note)
This means that .Pointer() returns an address for ReadInt() to read. (just a note)
Code:
this.Mem.Pointer(this.mainModule, 24246038, 10, 28, 62, 9)
From experience it looks like this function is stepping through a list of pointers, and takes 2 things:
1) the start address
2) a list of offsets -- each offset has a corresponding pointer dereference associated with it
It probably adds the first offset to the start addr and reads an addr from that memory location(ie. dereferenced the pointer - read it's value). It adds the next offset from the list and repeats this "dereference" for each offset in the list.
order of operations:
aa = ReadMemAddr(mainModule + 24246038)
bb = ReadMemAddr(aa + 10)
cc = ReadMemAddr(bb + 28)
dd = ReadMemAddr(cc + 62)
// could be 1 or the other, depending on YOUR specific pointer/offset list. Could be either.
ee = ReadMemaddr(dd + 9) // dereference final one
or
ee = dd + 9 // no dereference
ee is the address of the 'MyLevel' variable.
edit: If the pointer list doesn't work any more, it's generally not just a matter of tweaking one of the numbers to find the right one. Easiest way would be to use CE's "PointerScan" function to find one for you.