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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

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

namespace XFEEDToolBox.Plugin;

internal static unsafe partial class Navigation
{
    static uint GalaxyAccountMissionsSelfTest()
    {
        var memory=Platform.Allocate(0x20000);if(memory==0)return 0;
        try
        {
            uint passed=0;var fakeImage=unchecked((nuint)0x140000000UL);
            var manager=memory;var owner=memory+0x800;var vector=memory+0x1000;
            var normalBase=memory+0x2000;var normal=normalBase+0x1A8;
            var failedBase=memory+0x3000;var failed=failedBase+0x118;
            var text=memory+0x4000;var addresses=memory+0x5000;var failedAddresses=memory+0x5100;
            var map=memory+0x8000;var summary=map+8;var title=memory+0x6000;
            const ulong a=9007199254740995UL;const ulong id=0xFEDCBA9876543210UL;
            Write(manager,fakeImage+0x525EE18);Write(manager+8,fakeImage+0x525EE48);Write(manager+0x58,fakeImage+0x525EF48);Write(manager+0x10,owner);
            Write(manager+0x98,2UL);Write(manager+0xA8,2UL);Write(manager+0xB0,vector);Write(vector,failed);Write(vector+8,normal);
            Write(normalBase,fakeImage+0x52609C8);Write(normal,fakeImage+0x5260A18);Write(normal-0xC0,id);
            Write(failedBase,fakeImage+0x5260B78);Write(failed,fakeImage+0x5260BC8);Write(failed-0x40,ulong.MaxValue);
            void Header(nuint header,ulong count,nuint rows)
            {Write(header,count);Write(header+0x10,count);Write(header+0x18,rows);}
            void String(nuint pointer,string value)
            {var bytes=Encoding.UTF8.GetBytes(value);Write(pointer,(ulong)bytes.Length);Write(pointer+8,(ulong)bytes.Length);Platform.WriteBytes(pointer+0x14,bytes);}
            var key=memory+0x6200;var value=memory+0x6400;String(key,":");String(value,$"{a}:private station label");
            Header(normal-0xB0,2,text);Write(text,key);Write(text+8,value);Write(text+0x10,(byte)22);
            // An ordinary text field containing decimal digits is not a system.
            Write(text+24,key);Write(text+32,value);Write(text+40,(byte)1);
            Header(normal-0x90,2,addresses);Write(addresses,a+1);Write(addresses+8,a+2);
            Header(failed+0xE0,2,failedAddresses);Write(failedAddresses,a+3);Write(failedAddresses+8,a+3);
            Write(manager+0xC8,0UL);Write(manager+0xD0,0UL);Write(manager+0xD8,(nuint)0);
            bool Copy(out GalaxyAccountMissionItem[] result)=>CopyGalaxyMissionsManager(manager,owner,fakeImage,out result);
            if(Copy(out var data)&&data.Length==2&&data[0].missionId==id&&data[0].systemAddresses.SequenceEqual(new[]{a,a+1,a+2})&&data[0].selectedSystemAddress==a+2)passed|=1;
            if(data.Length==2&&data[1].missionId==ulong.MaxValue&&data[1].systemAddresses.SequenceEqual(new[]{a+3,a+3})&&data[1].markerType==4)passed|=2;
            Header(normal-0xB0,0,0);Header(normal-0x90,0,0);Write(normal-0xC0,0UL);
            if(Copy(out data)&&data[0].missionId==0&&data[0].systemAddresses.Length==0&&data[0].selectedSystemAddress is null&&!new GalaxyAccountMissions(1,2,data).complete)passed|=4;
            Write(normal-0xC0,id);Header(normal-0xB0,2,text);Header(normal-0x90,2,addresses);
            Write(normal-0x27,(byte)1);
            var special=Copy(out data)&&data[0].markerType==45;Write(normal-0x27,(byte)0);Write(normal-0x20,(byte)1);
            special&=Copy(out data)&&data[0].markerType==45;Write(normal-0x20,(byte)2);
            if(special&&Copy(out data)&&data[0].markerType==4)passed|=8;
            Write(manager+0xC8,1UL);Write(manager+0xD0,64UL);Write(manager+0xD8,map);Write(map,1UL);
            Write(summary,id);String(title,"fixture mission title");Write(summary+8,title);Header(summary+0x28,1,text);
            if(Copy(out data)&&data.Length==2&&data[0].selectedSystemAddress==a+2)passed|=16;
            Write(summary,12345678901234567890UL);
            if(Copy(out data)&&data.Length==3&&data[2].missionId==12345678901234567890UL&&data[2].selectedSystemAddress==a&&data[2].markerType==4)passed|=32;
            Write(title,0UL);
            if(Copy(out data)&&data.Length==2)passed|=64;
            String(title,"fixture mission title");Write(manager+0x10,owner+8);
            if(!Copy(out _))passed|=128;
            Write(manager+0x10,owner);Write(normal,fakeImage+0x5260A48);
            var tables=!Copy(out _);Write(normal,fakeImage+0x5260A18);Write(failedBase,fakeImage+0x5260BA8);
            if(tables&&!Copy(out _))passed|=256;
            Write(failedBase,fakeImage+0x5260B78);Write(manager+0xA8,4097UL);
            var bounds=!Copy(out _);Write(manager+0xA8,2UL);Header(normal-0x90,4097,addresses);
            if(bounds&&!Copy(out _))passed|=512;
            Header(normal-0x90,2,addresses);Write(addresses+8,0UL);
            var invalid=!Copy(out _);Write(addresses+8,0x80000000000000UL);
            if(invalid&&!Copy(out _))passed|=1024;
            Write(addresses+8,a+2);String(value,"not-an-address:123");
            var parsing=!Copy(out _);String(value,"184467440737095516160:bad");
            if(parsing&&!Copy(out _))passed|=2048;
            String(key,"|");String(value,$" \t{a}suffix|private description");
            if(Copy(out data)&&data[0].systemAddresses[0]==a&&data[2].selectedSystemAddress==a)passed|=4096;
            Write(manager+0xD0,3UL);var bitmap=!Copy(out _);Write(manager+0xD0,64UL);Write(map,3UL);
            if(bitmap&&!Copy(out _))passed|=8192;
            Write(map,1UL);var before=Platform.ReadBytes(memory,0x10000);
            if(Copy(out data)&&Platform.ReadBytes(memory,0x10000).AsSpan().SequenceEqual(before))
            {Write(addresses+8,a+8);if(data[0].selectedSystemAddress==a+2&&data[0].systemAddresses[2]==a+2)passed|=16384;}
            var watched=new GalaxyMissionCopy();watched.Bytes(addresses,8);Write(addresses,a+9);
            var stable=!watched.Stable();Write(manager+0xA8,0UL);Write(manager+0xC8,0UL);Write(manager+0xD0,0UL);
            if(stable&&Copy(out data)&&data.Length==0)passed|=32768;
            return passed;
        }
        finally{Platform.Free(memory);}
    }
#if PLUGIN_NAVIGATION
    [UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyAccountMissionsSelfTest")]
    internal static uint ExportGalaxyAccountMissionsSelfTest()=>RunTest(GalaxyAccountMissionsSelfTest);
#endif
}