public static void H() { var newFuncAddr = Marshal.GetFunctionPointerForDelegate(new Del((_dbobj, _cachepack) => { var dbobj = Interop.DBObj.__CreateInstance(_dbobj); var res = oldDel(_dbobj, _cachepack); DatIOManager.OnSerializeFromCachePack(dbobj); return(res); })); Hook.cHook.Hook(addr, newFuncAddr); }
public static void H() { var newFuncAddr = Marshal.GetFunctionPointerForDelegate(new Del((_asyncCache, _dbobj, _qdid, _dbocache) => { var dbobj = Interop.DBObj.__CreateInstance(_dbobj); var qdid = Interop.QualifiedDataID.__CreateInstance(_qdid); var dbocache = Interop.DBOCache.__CreateInstance(_dbocache); DatIOManager.OnBeforeBlockingLoadInto(dbobj, qdid, dbocache); var res = oldDel(_asyncCache, _dbobj, _qdid, _dbocache); DatIOManager.OnAfterBlockingLoadInto(dbobj, qdid, dbocache); return(res); })); Hook.cHook.Hook(addr, newFuncAddr); }
public static void H() { var newFuncAddr = Marshal.GetFunctionPointerForDelegate(new Del((dbocache, qdid, arg3) => { var retval = oldDel(dbocache, qdid, arg3); if (DateTime.Now - PortaledLoader.BeginTime > TimeSpan.FromSeconds(2)) { var cmdInterp = PortaledLoader.Instance?.Host?.Actions?.CommandInterpreter; if (cmdInterp != null) { var intptr = new IntPtr(cmdInterp.Value); var cmdInterpEx = Interop.CommandInterpreter.__CreateInstance(intptr); if (cmdInterpEx.Smartbox == null) { return(retval); } var sbox = cmdInterpEx.Smartbox; var physicsObjPlayer = cmdInterpEx.Player;//FINE if (physicsObjPlayer == null) { return(retval); } var partarray = physicsObjPlayer.PartArray; var parts = partarray.Parts; //BROKEN var setup = partarray.Setup; var cache = setup.Dbobj.Dbobj.MPMaintainer; var table = cache.MObjTable.MIntrusiveTable; var buckets = table.Buckets; /* * * CPartArray* partArray = physicsObjPlayer.part_array; * CPhysicsPart** parts = partArray->parts; * CPhysicsPart* parts2 = *parts; * CPhysicsPart parts3 = *parts2; * * Core.ACTypes.CSurface* surfaces = *(Core.ACTypes.CSurface**)parts2->surfaces; * CGfxObj* gfx = *parts2->gfxobj; * * Core.ACTypes.ImgTex* tex = (Core.ACTypes.ImgTex*)surfaces->base1map;*///table.Buckets[(0x0200058e % table.MNumBuckets)].MData.MDID.Id.Id == 0x0200058e foreach (var bucket in buckets) { if (bucket != null) { if (bucket.MData != null) { var qdid1 = bucket.MData.MDID.Id.Id; if (qdid1 >= 0x02000000 && qdid1 < 0x03000000) { var csetup = Portaled.Interop.CSetup.__CreateInstance(bucket.MData.__Instance); //0x009d3808 //0x009d3930 } } } } var cacheptr = new IntPtr(*(int *)new IntPtr(0x00837bac).ToPointer()); var cachemain = Portaled.Interop.DBCache.__CreateInstance(cacheptr); if (GetIfInMemory.cache == null) { GetIfInMemory.cache = cachemain.AsyncCache; } DatIOManager.Initialize(); var t1 = Portaled.Service.Managers.DatIOManager.GetByDID <Portaled.Service.DBObj.RenderSurface>(0x060018F9); var t2 = t1.Underlying.MPSurfaceBits; var t3 = t1.Underlying.SourceData.SourceBits; physicsObjPlayer.Friction = Portaled.Service.PortaledLoader.Friction; } } return(retval); })); Hook.cHook.Hook(addr, newFuncAddr); }