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 process attachment, account reads, game
    // function calls or requests. Each bit verifies a meaningful boundary.
    static uint GalaxyAccountSocialSelfTest()
    {
        var memory=Platform.Allocate(32768);if(memory==0)return 0;
        try
        {
            var fakeImage=unchecked((nuint)0x140000000UL);var friends=memory;var owner=memory+0x800;
            var buckets=memory+0x1000;var first=memory+0x1100;var second=memory+0x1200;var str=memory+0x1300;
            Write(friends,fakeImage+0x5238F90);Write(friends+8,fakeImage+0x5238FC0);Write(friends+0x58,fakeImage+0x52390C0);Write(friends+0x10,owner);
            Write(friends+0x220,buckets);Write(friends+0x228,1UL);Write(friends+0x238,2UL);Write(buckets,first);
            Write(first,second);Write(second,buckets);
            Write(str,6UL);Write(str+8,6UL);Write(str+16,1);Platform.WriteBytes(str+20,"Friend\0"u8);
            for(nuint i=0;i<2;i++)
            {
                var row=i==0?first:second;Write(row+8,42+(int)i);Write(row+0x10,42+(int)i);Write(row+0x18,str);
                Write(row+0x20,2);Write(row+0x28,i==0?6:0);Write(row+0x30,1234UL+(ulong)i);
                Write(row+0x40,9007199254740995UL+(ulong)i);
            }
            uint passed=0;
            if(CopyGalaxyFriendsManager(friends,owner,fakeImage,out var items)&&items.Length==2&&
               items[0].systemAddress==9007199254740995UL&&items[0].commanderId==1234&&items[0].commanderName=="Friend"&&
               items[0].statusName=="open"&&items[0].locationCurrent is null&&items[1].locationCurrent==false)passed|=1;
            if(!new GalaxyAccountSocial(1,2,true,false,items).complete)passed|=2;
            Write(first+0x20,1);Write(second+0x24,(byte)1);
            if(CopyGalaxyFriendsManager(friends,owner,fakeImage,out items)&&items.Length==0)passed|=4;
            Write(first+0x20,2);Write(second+0x24,(byte)0);Write(first+0x40,0UL);Write(second+0x40,ulong.MaxValue);
            if(CopyGalaxyFriendsManager(friends,owner,fakeImage,out items)&&items.Length==0)passed|=8;
            Write(first+0x40,9007199254740995UL);Write(second+0x40,9007199254740996UL);Write(second,first);
            if(!CopyGalaxyFriendsManager(friends,owner,fakeImage,out _))passed|=16;
            Write(second,buckets);Write(first+0x10,999);
            if(!CopyGalaxyFriendsManager(friends,owner,fakeImage,out _))passed|=32;
            Write(first+0x10,42);Write(friends+0x10,owner+8);
            if(!CopyGalaxyFriendsManager(friends,owner,fakeImage,out _))passed|=64;
            Write(friends+0x10,owner);Write(friends+0x238,0UL);Write(buckets,buckets);
            if(CopyGalaxyFriendsManager(friends,owner,fakeImage,out items)&&items.Length==0&&
               !new GalaxyAccountSocial(1,2,true,false,items).complete)passed|=128;

            var wing=memory+0x2000;var life=memory+0x3000;var registry=memory+0x4000;
            var metadata=memory+0x4100;var slots=memory+0x4200;var array=memory+0x4300;var member=memory+0x5000;
            Write(wing,fakeImage+0x52A5498);Write(wing+8,fakeImage+0x52A54C8);Write(wing+0x58,fakeImage+0x52A55C8);Write(wing+0x10,owner);
            Write(wing+0x59C,4U);
            for(nuint i=0;i<6;i++)Write(wing+0x2A8+i*0x40,ulong.MaxValue);
            Write(wing+0x2A8,99UL);Write(wing+0x2C0,life);
            Write(life+0xC0,8U);Write(life+0xC8,registry+0x30);
            Write(registry+0x10,metadata);Write(registry+0x18,array);Write(metadata+0x18,1UL);Write(metadata+0x30,slots);
            Write(slots+3*16,0UL);Write(array,member+0x58);
            Write(member,fakeImage+0x52A8538);Write(member+8,fakeImage+0x52A8568);Write(member+0x58,fakeImage+0x52A8668);Write(member+0x10,owner);
            Write(member+0x80,0x8120000000000003UL);Write(member+0x8C,5);
            if(CopyGalaxyWingManager(wing,owner,fakeImage,3,out items)&&items.Length==1&&
               items[0].kind=="wing"&&items[0].systemAddress==9007199254740995UL&&items[0].commanderId==0&&items[0].locationCurrent is null)passed|=256;
            Write(life+0xC0,4U);
            if(CopyGalaxyWingManager(wing,owner,fakeImage,3,out items)&&items.Length==0&&
               !new GalaxyAccountSocial(1,2,false,true,items).complete)passed|=512;
            Write(life+0xC0,8U);Write(member+0x80,ulong.MaxValue);
            if(CopyGalaxyWingManager(wing,owner,fakeImage,3,out items)&&items.Length==0)passed|=1024;
            Write(member+0x80,0x8120000000000003UL);Write(member,fakeImage+0x52A8570);
            if(!CopyGalaxyWingManager(wing,owner,fakeImage,3,out _))passed|=2048;
            Write(member,fakeImage+0x52A8538);Write(wing+0x2E8,99UL);
            if(!CopyGalaxyWingManager(wing,owner,fakeImage,3,out _))passed|=4096;
            Write(wing+0x2E8,ulong.MaxValue);Write(wing+0x10,owner+8);
            if(!CopyGalaxyWingManager(wing,owner,fakeImage,3,out _))passed|=8192;
            Write(wing+0x10,owner);Write(wing+0x2B8,77);
            if(CopyGalaxyWingManager(wing,owner,fakeImage,3,out items,42)&&items.Length==1&&items[0].locationCurrent==true&&
               CopyGalaxyWingManager(wing,owner,fakeImage,3,out items,77)&&items[0].locationCurrent==false)passed|=16384;
            Write(wing+0x590,(byte)2);
            if(CopyGalaxyWingManager(wing,owner,fakeImage,3,out items,42)&&items.Length==1&&items[0].locationCurrent==false&&
               GalaxyFriendMarkerCurrent(0)==false&&GalaxyFriendMarkerCurrent(13)==false&&GalaxyFriendMarkerCurrent(5) is null)passed|=32768;
            return passed;
        }
        finally{Platform.Free(memory);}
    }
#if PLUGIN_NAVIGATION
    [UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxySocialSelfTest")]
    internal static uint ExportGalaxyAccountSocialSelfTest()=>RunTest(GalaxyAccountSocialSelfTest);
#endif
}