XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Runtime.InteropServices;

namespace XFEEDToolBox.Plugin;

internal static unsafe partial class Navigation
{
    static uint GalaxyPowerInfluenceSelfTest()
    {
        var memory=Platform.Allocate(0x6000000);if(memory==0)return 0;
        try
        {
            var expected=memory;var manager=memory+0x1000;var service=manager+0x58;var owner=memory+0x2000;
            var navigation=memory+0x3000+0x58;var metadata=memory+0x4000;var obj=memory+0x5000;var compact=memory+0x6000;
            var genericNode=memory+0x7000;var buckets=memory+0x8000;var empty=memory+0x8100;
            var storage=memory+0xA000;var definitions=memory+0xC000;var colours=memory+0xE000;
            var provider=memory+0x10000;var config=memory+0x11000;var block=memory+0x12000;
            var component=memory+0x14000;var main=component+0x30;var settings=memory+0x16000;var settingRows=memory+0x17000;var settingVt=memory+0x18000;
            var controller=memory+0x19000;var type=controller+0x28;var registry=memory+0x1A000;var regMeta=memory+0x1B000;var regSlots=memory+0x1C000;var regArray=memory+0x1D000;
            const ulong centre=9007199254740995,target=9007199254741119;
            Write(manager,expected+0x51BB4D0);Write(manager+8,expected+0x51BB500);Write(manager+0x10,owner);Write(service,expected+0x51BB600);
            Write(service+0x308,(byte)1);Write(service+0x309,(byte)1);Write(service+0x30A,(byte)1);Write(service+0x3E8,100f);
            Write(navigation,expected+0x552A9B8);Write(expected+0x552A9B8+0x50,expected+0x21E8CB0);Write(navigation-0x48,owner);Write(navigation+0x2B0,obj);
            Write(obj+0x20,2U);Write(obj+0x28,centre);Write(obj+0x38,compact);Write(compact,centre);
            Write(compact+0x42,(ushort)64);Write(compact+0x44,(ushort)96);Write(compact+0x46,(ushort)128);
            Write(metadata,expected+0x551A1B0);Write(metadata+0xA8,buckets);Write(metadata+0xB0,1UL);Write(metadata+0xC0,1UL);
            Write(metadata+0xC8,empty);Write(metadata+0xD0,1UL);Write(empty,empty);Write(buckets,genericNode);Write(genericNode,buckets);
            Write(genericNode+8,target);Write(genericNode+0x40,memory+0x9000);
            Write(service+0x330,2UL);Write(service+0x338,definitions);Write(definitions+0x1B8,10f);Write(definitions+0x260+0x1B8,6f);
            Write(service+0x3C8,2UL);Write(service+0x3D0,8UL);Write(service+0x3D8,storage);
            nuint Put(ulong address,ulong power,int state)
            {
                var slot=GalaxyFactHash(address)&7;
                while((Read<ulong>(storage)&(1UL<<(int)slot))!=0)slot=(slot+1)&7;
                Write(storage,Read<ulong>(storage)|(1UL<<(int)slot));var node=storage+16+(nuint)slot*0x180;
                Write(node,address);Write(node+0x10,power);Write(node+0x1C,state);return node;
            }
            var centreNode=Put(centre,0,1);var candidateNode=Put(target,0,0);
            Write(provider,expected+0x552E598);Write(expected+0x552E598+0x20,expected+0x3B3E510);
            Write(expected+0x552E598+0x40,expected+0x3AF6BA0);Write(expected+0x552E598+0x68,expected+0x3B27590);
            Write(provider+0x78,service);Write(provider+0x168,navigation);Write(provider+0x170,obj);Write(provider+0x180,100f);
            Write(provider+0x160,(byte)1);Write(provider+0x1B0,(byte)1);Write(provider+0x1A8,centre);Write(provider+0x1C0,10f);
            Write(provider+0x1A0,2f);Write(provider+0x10,config);Write(config+0x148,.25f);Write(provider+0xF0,2UL);Write(provider+0xF8,colours);
            Write(colours,.2f);Write(colours+4,.4f);Write(colours+8,1.5f);Write(colours+0x18,.7f);Write(colours+0x1C,.8f);Write(colours+0x20,.9f);
            Write(component,expected+0x551FE98);Write(expected+0x551FE98,expected+0x3A4C030);Write(main,expected+0x551FFC0);
            Write(expected+0x551FFC0+0xF0,expected+0x3A6AEB0);Write(expected+0x551FFC0+0xF8,expected+0x3A6AFA0);
            Write(expected+0x551FFC0+0x100,expected+0x3A6AE10);Write(expected+0x551FFC0+0x108,expected+0x3A6AD80);
            Write(main+0x1B8,settings);Write(settings,settingVt);Write(settingVt+0x1F0,expected+0x2601B60);Write(settingVt+0x200,expected+0x2646760);
            Write(settings+0x5F8,2);Write(settings+0x530,1U);Write(settings+0x538,settingRows);Write(settingRows+0x54+29*4,1U);
            Write(main+0x5AC,1);Write(main+0x5B0,0f);Write(main+0x5B4,(byte)0);Write(main+0x5B8,0);Write(main+0x280,-1);Write(main+0x288,type);
            Write(type,expected+0x552D788);Write(controller,expected+0x552D5C0);Write(controller+0x3B0,block);Write(controller+0x3B8,provider);Write(block+8,1);Write(block+0xC,1);
            Write(expected+0x5FDB224,17U);Write(registry+0x10,regMeta);Write(registry+0x18,regArray);Write(regMeta+0x18,1UL);Write(regMeta+0x30,regSlots);Write(regSlots+17*16,0UL);Write(regArray,component);
            if(!CopyGalaxyPowerOuterContext(service,owner,navigation,metadata,expected,[0,0,0],out var outer)||
                !TryCreateGalaxyPowerInfluenceContext(outer,new(){registry=registry},out var context)||context is null)return 0;
            double[] Point(float delta)=>[outer.centrePosition.x+delta,outer.centrePosition.y,outer.centrePosition.z];
            bool Copy(float delta,out GalaxyPowerInfluenceFact? fact)=>CopyGalaxyPowerInfluence(context,target,Point(delta),out fact);
            var before=Platform.ReadBytes(memory,0x20000);uint passed=0;
            if(Copy(5,out var first)&&first is{eligible:true,kind:0}&&first.fromSystemAddress==centre&&first.toSystemAddress==target&&
                first.linearRgb!.SequenceEqual(new[]{.2f,.4f,1.5f})&&first.phase==GalaxyPowerInfluenceInitialPhase(target)-.5f)passed|=1;
            if(Copy(10,out var edge)&&edge is{eligible:false}&&Copy(10.03125f,out edge)&&edge is{eligible:false})passed|=2;
            Write(candidateNode+0x1C,1);var both=Copy(5,out var same)&&same is{eligible:false};Write(provider+0x1C0,0f);
            if(TryCreateGalaxyPowerInfluenceContext(outer,new(){registry=registry},out var reversed)&&reversed is not null&&
                CopyGalaxyPowerInfluence(reversed,target,Point(5),out var reverse)&&reverse is{eligible:true,kind:1}&&reverse.fromSystemAddress==target&&reverse.toSystemAddress==centre&&both)passed|=4;
            Write(provider+0x1C0,10f);Write(candidateNode+0x1C,0);Write(centreNode+0x1C,1);
            Write(provider+0x1C0,0f);Write(candidateNode+0x1C,1);Write(candidateNode+0x10,1UL);
            var different=TryCreateGalaxyPowerInfluenceContext(outer,new(){registry=registry},out reversed)&&reversed is not null&&
                CopyGalaxyPowerInfluence(reversed,target,Point(5),out same)&&same is{eligible:false};
            Write(candidateNode+0x10,0UL);Write(centreNode+0x1C,0);
            if(different&&reversed is not null&&CopyGalaxyPowerInfluence(reversed,target,Point(5),out same)&&same is{eligible:true,kind:0})passed|=8;
            Write(centreNode+0x1C,1);Write(candidateNode+0x1C,0);Write(provider+0x1C0,10f);
            Write(provider+0x1B0,(byte)0);var pending=!Copy(5,out _);Write(provider+0x1B0,(byte)1);Write(expected+0x5FDB275,(byte)1);
            if(pending&&!Copy(5,out _))passed|=16;Write(expected+0x5FDB275,(byte)0);
            Write(candidateNode+0x1C,5);var invalid=!Copy(5,out _);Write(candidateNode+0x1C,0);Write(provider+0x1A0,3f);
            if(invalid&&!Copy(5,out _))passed|=32;Write(provider+0x1A0,2f);
            Write(colours,float.NaN);var badColour=!Copy(5,out _);Write(colours,.2f);Write(expected+0x552E598+0x68,expected+0x3B27591);
            if(badColour&&!Copy(5,out _))passed|=64;Write(expected+0x552E598+0x68,expected+0x3B27590);
            if(Copy(5,out _)&&Platform.ReadBytes(memory,0x20000).AsSpan().SequenceEqual(before)&&
                GalaxyPowerInfluenceDescription(first)?["fromSystemAddress"]?.GetValue<string>()==centre.ToString()&&
                GalaxyPowerInfluenceDescription(new(false,0,0,null,null,null,0,0,0,0))?.Count==2)passed|=128;
            return passed;
        }
        catch{return 0;}
        finally{Platform.Free(memory);}
    }
#if PLUGIN_NAVIGATION
    [UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyPowerInfluenceSelfTest")]
    internal static uint ExportGalaxyPowerInfluenceSelfTest()=>RunTest(GalaxyPowerInfluenceSelfTest);
#endif
}