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
{
    // Allocated fixtures only: no game process, native calls or requests.
    static uint GalaxyPowerOptionsSelfTest()
    {
        var memory=Platform.Allocate(16384);if(memory==0)return 0;
        try
        {
            var fakeImage=unchecked((nuint)0x140000000UL);var manager=memory;var service=manager+0x58;var owner=memory+0x1000;
            var vector=memory+0x2000;var name=memory+0x3000;
            Write(manager,fakeImage+0x51BB4D0);Write(manager+8,fakeImage+0x51BB500);Write(service,fakeImage+0x51BB600);Write(manager+0x10,owner);
            Write(service+0x308,(byte)1);Write(service+0x309,(byte)1);Write(service+0x330,2UL);Write(service+0x338,vector);
            Write(name,12UL);Write(name+8,12UL);Write(name+16,1);Platform.WriteBytes(name+20,"Actual Power\0"u8);
            for(nuint i=0;i<2;i++)
            {
                var row=vector+i*0x260;Write(row,i==0?4:1);Write(row+0x18,name);Write(row+0x60,12f);Write(row+0x64,.25f);Write(row+0x68,1f);
            }
            uint passed=0;
            if(CopyGalaxyPowerOptions(manager,owner,fakeImage,out var items)&&items.Length==2&&items[0].index==0&&items[0].uiPowerId==1&&items[0].internalPowerId==4&&
               items[1].uiPowerId==2&&items[1].internalPowerId==1&&items[0].name=="Actual Power"&&items[0].rawRed==12&&items[0].rawGreen==.25f)passed|=1;
            if(new GalaxyPowerOptions(1,2,items).optionsComplete&&new GalaxyPowerOptions(1,2,items).source=="original-power-definition-table")passed|=2;
            Write(service+0x309,(byte)0);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=4;Write(service+0x309,(byte)1);
            Write(service+0x330,129UL);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=8;Write(service+0x330,2UL);
            Write(name,513UL);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=16;Write(name,12UL);
            Write(vector+0x260,4);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=32;Write(vector+0x260,1);
            Write(manager+0x10,owner+8);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=64;Write(manager+0x10,owner);
            Write(service,fakeImage+0x51BB648);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=128;Write(service,fakeImage+0x51BB600);
            Write(vector+0x60,float.NaN);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=256;Write(vector+0x60,12f);
            Write(vector,-1);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=512;Write(vector,4);
            Write(service+0x330,0UL);Write(service+0x338,(nuint)0);if(CopyGalaxyPowerOptions(manager,owner,fakeImage,out items)&&items.Length==0)passed|=1024;
            Write(service+0x330,2UL);Write(service+0x338,vector);Write(manager,fakeImage+0x51BB518);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=2048;Write(manager,fakeImage+0x51BB4D0);
            Write(vector+0x18,(nuint)0);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=4096;Write(vector+0x18,name);
            Write(service+0x338,(nuint)0);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=8192;
            Write(service+0x338,vector);Write(vector+0x70,9007199254740995UL);Write(vector+0x260+0x70,0UL);
            var before=Platform.ReadBytes(memory,16384);
            if(CopyGalaxyPowerOptions(manager,owner,fakeImage,out items)&&items[0].headquartersSystemAddress==9007199254740995UL&&
               items[1].headquartersSystemAddress is null&&Platform.ReadBytes(memory,16384).AsSpan().SequenceEqual(before))passed|=16384;
            Write(vector+0x70,ulong.MaxValue);Write(vector+0x260+0x70,0x80000000000000UL);
            if(CopyGalaxyPowerOptions(manager,owner,fakeImage,out items)&&items.All(item=>item.headquartersSystemAddress is null)&&
               items[0].internalPowerId==4&&items[1].internalPowerId==1)passed|=32768;
            return passed;
        }
        finally{Platform.Free(memory);}
    }
#if PLUGIN_NAVIGATION
    [UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyPowerOptionsSelfTest")]
    internal static uint ExportGalaxyPowerOptionsSelfTest()=>RunTest(GalaxyPowerOptionsSelfTest);
#endif
}