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 GalaxySocialModesSelfTest()
    {
        var memory=Platform.Allocate(32768);if(memory==0)return 0;
        try
        {
            var fakeImage=unchecked((nuint)0x140000000UL);var flow=memory+0x58;var config=memory+0x1000;
            var csm=memory+0x2000;var current=memory+0x3000;var name=memory+0x3100;
            var multiplayer=memory+0x4000;var user=memory+0x5000;var life=memory+0x6000;
            var registry=memory+0x7000;var metadata=memory+0x7100;var slots=memory+0x7200;var array=memory+0x7300;var avatar=memory+0x7400;
            Write(flow,fakeImage+0x5239F60);Write(flow-0x48,memory+0x800);Write(flow+0x310,csm);
            Write(csm,fakeImage+0x513BE00);Write(csm+0x100,current);Write(current,name);Platform.WriteBytes(name,"InGame\0"u8);
            Write(config,fakeImage+0x4DDED20);Write(flow+0x90,multiplayer);Write(multiplayer,fakeImage+0x5269B28);
            Write(multiplayer+0x140,(sbyte)12);Write(flow+0xD8,user);Write(user,fakeImage+0x52A0258);Write(user+0x138,life);
            Write(life+0xC0,8);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,avatar);
            Write(avatar,fakeImage+0x52A3188);Write(avatar+0x138,99U);
            bool ReadMode(out int? mode,out bool? gameplay)=>CopyGalaxySocialModes(flow,fakeImage,3,out mode,out gameplay);
            uint passed=0;
            if(ReadMode(out var mode,out var gameplay)&&mode is null&&gameplay==true&&Pointer(flow+0x568)==0)passed|=1;
            Write(flow+0x568,config);Write(config+0x10,0);
            if(ReadMode(out mode,out gameplay)&&mode==0&&GalaxyFriendMarkerCurrent(5,mode,gameplay)==false&&GalaxyFriendMarkerCurrent(6,mode,gameplay)==false)passed|=2;
            Write(config+0x10,1);
            if(ReadMode(out mode,out gameplay)&&mode==1&&GalaxyFriendMarkerCurrent(5,mode,gameplay)==true&&GalaxyFriendMarkerCurrent(6,mode,gameplay)==false)passed|=4;
            Write(config+0x10,2);
            if(ReadMode(out mode,out gameplay)&&mode==2&&GalaxyFriendMarkerCurrent(6,mode,gameplay)==true&&GalaxyFriendMarkerCurrent(5,mode,gameplay)==false)passed|=8;
            Write(multiplayer+0x140,(sbyte)0);
            if(ReadMode(out mode,out gameplay)&&mode==0)passed|=16;
            Write(avatar+0x138,100U);
            if(ReadMode(out mode,out gameplay)&&mode==2)passed|=32;
            Write(user+0x138,(nuint)0);
            if(ReadMode(out mode,out gameplay)&&mode==2)passed|=64;
            Write(multiplayer,fakeImage+0x5269B60);
            if(ReadMode(out mode,out gameplay)&&mode is null&&GalaxyFriendMarkerCurrent(6,mode,gameplay) is null)passed|=128;
            Write(multiplayer,fakeImage+0x5269B28);Platform.WriteBytes(name,"MainMenu\0"u8);
            if(ReadMode(out mode,out gameplay)&&gameplay==false&&GalaxyFriendMarkerCurrent(6,mode,gameplay)==false)passed|=256;
            Write(csm,fakeImage+0x513BE08);
            if(!ReadMode(out _,out _))passed|=512;
            Write(csm,fakeImage+0x513BE00);Platform.WriteBytes(name,"InGame\0"u8);Write(config,fakeImage+0x4DDED28);
            if(ReadMode(out mode,out gameplay)&&mode is null&&Pointer(config)==fakeImage+0x4DDED28)passed|=1024;
            Write(flow,fakeImage+0x5239F98);
            if(!ReadMode(out _,out _))passed|=2048;
            if(GalaxySocialGameplayStates.Contains("Pause")&&GalaxySocialGameplayStates.Contains("FriendsUnavailable")&&
               !GalaxySocialGameplayStates.Contains("InGameX")&&GalaxyFriendMarkerCurrent(13,2,true)==false&&
               GalaxyFriendMarkerCurrent(5,null,true) is null&&GalaxyFriendMarkerCurrent(6,1,null)==false)passed|=4096;
            return passed;
        }
        finally{Platform.Free(memory);}
    }
#if PLUGIN_NAVIGATION
    [UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxySocialModesSelfTest")]
    internal static uint ExportGalaxySocialModesSelfTest()=>RunTest(GalaxySocialModesSelfTest);
#endif
}