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 GalaxyCommodityFilterSelfTest()
    {
        uint passed=0;var memory=Platform.Allocate(0x30000);if(memory==0)return passed;
        try
        {
            var expectedImage=memory-0x5FDB000;var main=memory+0x1000;var definitions=memory+0x3000;var service=memory+0x5000;var filter=memory+0x7000;var configuration=memory+0x9000;var colours=memory+0xA000;
            var metadata=memory+0xC000;var metadataBuckets=memory+0xD000;var emptyBuckets=memory+0xD100;var metadataNode=memory+0xE000;
            var definitionBuckets=memory+0xF000;var definitionNode=memory+0x10000;var name=memory+0x11000;var balanceBuckets=memory+0x12000;var balanceNode=memory+0x13000;
            const uint uid=0x2803BBB8;const ulong address=9007199254740993;
            var origin=new[]{1599520,1311520,771360};var nativePosition=origin.Select(v=>v/32f).ToArray();
            Write(main,expectedImage+0x552D788);Write(main-0x80,expectedImage+0x552D490);Write(main-0x78,expectedImage+0x552D4C0);Write(main-0x70,memory+0x17000);Write(main-0x80+0x3E0,filter);Write(main-0x80+0x50,configuration);
            Write(filter,expectedImage+0x552D9C8);Write(filter+0x10,configuration);Write(filter+0xD0,uid);for(nuint i=0;i<3;i++)Write(filter+0x78+i*4,nativePosition[(int)i]);
            var parameters=new[]{.25f,1f,.5f,.5f,1f,1f,40f};for(nuint i=0;i<(nuint)parameters.Length;i++)Write(configuration+0x1C0+i*4,parameters[(int)i]);
            var rgba=new[]{new[]{.34f,.59f,.98f,1},new[]{.22f,.7f,.28f,1},new[]{.5f,.5f,.5f,1},new[]{.5f,.5f,.5f,1},new[]{.5f,.5f,.5f,.5f}};var sprites=new[]{12,11,12,11,13};
            Write(configuration+0x1E0,colours);Write(configuration+0x1E8,5u);
            for(nuint row=0;row<5;row++){Write(colours+row*0x20+8,(uint)row);Write(colours+row*0x20+0x1C,(uint)sprites[(int)row]);for(nuint c=0;c<4;c++)Write(colours+row*0x20+0xC+c*4,rgba[(int)row][(int)c]);}
            Write(service,expectedImage+0x52420C0);Write(service-0x58,expectedImage+0x5241F80);Write(service-0x50,expectedImage+0x5241FC0);Write(service-0x48,memory+0x15000);
            Write(definitions,expectedImage+0x5219600);Write(definitions+8,expectedImage+0x5219630);Write(definitions+0x58,expectedImage+0x5219730);Write(definitions+0x10,memory+0x16000);Write(definitions+0x284,1u);
            void Map(nuint header,nuint buckets,ulong count)
            {Write(header,buckets);Write(header+8,17UL);Write(header+0x18,count);for(nuint i=0;i<17;i++)Write(buckets+i*8,buckets+i*8);}
            Map(definitions+0x1B8,definitionBuckets,1);var definitionSentinel=definitionBuckets+(nuint)(GalaxyCommodityHash(uid)%17)*8;Write(definitionNode,definitionSentinel);Write(definitionNode+8,uid);Write(definitionSentinel,definitionNode);
            var text=Encoding.UTF8.GetBytes("ActualSource");Write(definitionNode+0x18,name);Write(name,(ulong)text.Length);for(nuint i=0;i<(nuint)text.Length;i++)Write(name+0x14+i,text[(int)i]);
            Write(service+0xE8,definitionNode+0x10);Write(service+0xF0,100u);Write(service+0xE0,(byte)1);Write(service+0x144,7u);
            void Balance(float value)
            {Map(service+0xF8,balanceBuckets,1);var sentinel=balanceBuckets+(nuint)(GalaxyCommoditySystemHash(address)%17)*8;Write(balanceNode,sentinel);Write(balanceNode+8,address);Write(balanceNode+0x10,value);Write(sentinel,balanceNode);}
            Balance(.75f);
            Write(metadata,expectedImage+0x551A1B0);Map(metadata+0xA8,metadataBuckets,1);Map(metadata+0xC8,emptyBuckets,0);
            var metadataSentinel=metadataBuckets+(nuint)(GalaxyFactHash(address)%17)*8;Write(metadataNode,metadataSentinel);Write(metadataNode+8,address);Write(metadataSentinel,metadataNode);Write(metadataNode+0x40,memory+0x1B000);
            bool Context(out GalaxyCommodityFilterContext captured)=>CopyGalaxyCommodityFilterContext(main,service,definitions,metadata,origin,expectedImage,uid,out captured);
            bool Fact(GalaxyCommodityFilterContext captured,int mode,out GalaxyCommodityFilterFact? output)=>CopyGalaxyCommodityFilterFact(captured,address,[0,0,0],mode,out output);
            var before=Platform.ReadBytes(memory,0x30000);
            if(Context(out var context)&&Fact(context,0,out var fact)&&fact is{commodityUid:uid,category:0,opacity:.75f,size:1,sprite:12}&&fact.rgba.SequenceEqual(rgba[0]))passed|=1;
            var modes=Fact(context,1,out fact)&&fact is{category:0};modes&=Fact(context,2,out fact)&&fact is{category:4,opacity:1,size:.5f,sprite:13};modes&=Fact(context,3,out fact)&&fact is{category:0};
            Balance(-.25f);Write(service+0x144,8u);modes&=Context(out context)&&Fact(context,0,out fact)&&fact is{category:1,opacity:.375f,sprite:11};modes&=Fact(context,1,out fact)&&fact is{category:4};modes&=Fact(context,2,out fact)&&fact is{category:1};modes&=Fact(context,3,out fact)&&fact is{category:1};if(modes)passed|=2;
            Balance(0);Write(service+0x144,9u);var zero=Context(out context)&&Fact(context,0,out fact)&&fact is{category:2,opacity:1,size:1,sprite:12};zero&=Fact(context,2,out fact)&&fact is{category:3,sprite:11};
            Map(service+0xF8,balanceBuckets,0);Write(service+0x144,10u);zero&=Context(out context)&&Fact(context,0,out fact)&&fact is{category:4,opacity:1,size:.5f}&&fact.rgba[3]==.5f;if(zero)passed|=4;
            Balance(.75f);Write(service+0x144,11u);Write(metadataNode+0x30,3);Write(metadataNode+0x40,(nuint)0);var descriptor=Context(out context)&&Fact(context,0,out fact)&&fact is{category:4,opacity:0,size:0};
            Write(metadataNode+0x30,0);Write(metadataNode+0x40,memory+0x1B000);descriptor&=Fact(context,0,out fact)&&fact is{category:0};Map(metadata+0xA8,metadataBuckets,0);descriptor&=Fact(context,0,out fact)&&fact is null;
            Map(metadata+0xA8,metadataBuckets,1);Write(metadataSentinel,metadataNode);if(descriptor)passed|=8;
            var range=CopyGalaxyCommodityFilterFact(context,address,[40,0,0],0,out fact)&&fact is{category:4,opacity:0,size:0};range&=CopyGalaxyCommodityFilterFact(context,address,[39.96875,0,0],0,out fact)&&fact is{category:0};if(range)passed|=16;
            Write(filter+0x138,(byte)1);var pending=Context(out var unavailable)&&!unavailable.ready&&Fact(unavailable,0,out fact)&&fact is null;Write(filter+0x138,(byte)0);
            Write(service+0x140,(byte)1);pending&=Context(out unavailable)&&!unavailable.ready&&Fact(unavailable,0,out fact)&&fact is null;Write(service+0x140,(byte)0);
            Write(filter+0xD0,uid+1);pending&=!Context(out _);Write(filter+0xD0,uid);if(pending)passed|=32;
            var saved=Platform.ReadBytes(memory,0x30000);var readonlyResult=Context(out context)&&Fact(context,0,out fact);if(readonlyResult&&Platform.ReadBytes(memory,0x30000).AsSpan().SequenceEqual(saved)&&before.Length==saved.Length)passed|=64;
            var previous=context;Write(service+0x144,12u);var stale=!Fact(previous,0,out _);stale&=Context(out context)&&Fact(context,0,out fact)&&fact is{revision:12};Write(main,(nuint)0);stale&=!Context(out _);if(stale)passed|=128;
            return passed;
        }
        catch{return passed;}
        finally{Platform.Free(memory);}
    }
#if PLUGIN_NAVIGATION
    [UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyCommodityFilterSelfTest")]
    internal static uint ExportGalaxyCommodityFilterSelfTest()=>RunTest(GalaxyCommodityFilterSelfTest);
#endif
}