Skip to content

Help How to Obtain an Indexer #169

@Controllerdestiny

Description

@Controllerdestiny

I attempted to retrieve the tile.
His C# class is as follows:

public class Main{
    public static TileData tile;
}

public class TileData
{
	public Tile this[int x, int y]
}

public struct Tile
{
	[Token(Token = "0x4003733")]
	[FieldOffset(Offset = "0x0")]
	public static Tile s_Null;

	[Token(Token = "0x4003734")]
	[FieldOffset(Offset = "0x0")]
	private int _tileOffset;

	[Token(Token = "0x4003735")]
	[FieldOffset(Offset = "0x4")]
	public static ushort CurrentSearchUID;

	[Token(Token = "0x4003736")]
	[FieldOffset(Offset = "0x6")]
	public static ushort MaxSearchUID;

	[Token(Token = "0x4003737")]
	public const int Type_Solid = 0;

	[Token(Token = "0x4003738")]
	public const int Type_Halfbrick = 1;

	[Token(Token = "0x4003739")]
	public const int Type_SlopeDownRight = 2;

	[Token(Token = "0x400373A")]
	public const int Type_SlopeDownLeft = 3;

	[Token(Token = "0x400373B")]
	public const int Type_SlopeUpRight = 4;

	[Token(Token = "0x400373C")]
	public const int Type_SlopeUpLeft = 5;

	[Token(Token = "0x400373D")]
	public const int Liquid_Water = 0;

	[Token(Token = "0x400373E")]
	public const int Liquid_Lava = 1;

	[Token(Token = "0x400373F")]
	public const int Liquid_Honey = 2;

	[Token(Token = "0x4003740")]
	public const int Liquid_Shimmer = 3;

	[Token(Token = "0x170005EB")]
	public bool IsLoaded
	{
		[Token(Token = "0x6002A38")]
		[Address(RVA = "0x12C5274", Offset = "0x12C5274", VA = "0x12C5274")]
		get
		{
			return default(bool);
		}
	}

	[Token(Token = "0x170005EC")]
	[Il2CppSetOption(Option.ArrayBoundsChecks, false)]
	[Il2CppSetOption(Option.NullChecks, false)]
	public ushort type
	{
		[Token(Token = "0x6002A3A")]
		[Address(RVA = "0x12C2C30", Offset = "0x12C2C30", VA = "0x12C2C30")]
		get
		{
			return default(ushort);
		}
		[Token(Token = "0x6002A3B")]
		[Address(RVA = "0x12C54A0", Offset = "0x12C54A0", VA = "0x12C54A0")]
		set
		{
		}
	}

	[Token(Token = "0x170005ED")]
	[Il2CppSetOption(Option.NullChecks, false)]
	[Il2CppSetOption(Option.ArrayBoundsChecks, false)]
	public ushort wall
	{
		[Token(Token = "0x6002A3D")]
		[Address(RVA = "0x12C56DC", Offset = "0x12C56DC", VA = "0x12C56DC")]
		get
		{
			return default(ushort);
		}
		[Token(Token = "0x6002A3E")]
		[Address(RVA = "0x12C5740", Offset = "0x12C5740", VA = "0x12C5740")]
		set
		{
		}
	}

	[Token(Token = "0x170005EE")]
	[Il2CppSetOption(Option.NullChecks, false)]
	[Il2CppSetOption(Option.ArrayBoundsChecks, false)]
	public byte liquid
	{
		[Token(Token = "0x6002A40")]
		[Address(RVA = "0x12C58C4", Offset = "0x12C58C4", VA = "0x12C58C4")]
		get
		{
			return default(byte);
		}
		[Token(Token = "0x6002A41")]
		[Address(RVA = "0x12C5928", Offset = "0x12C5928", VA = "0x12C5928")]
		set
		{
		}
	}

	[Token(Token = "0x170005EF")]
	[Il2CppSetOption(Option.NullChecks, false)]
	[Il2CppSetOption(Option.ArrayBoundsChecks, false)]
	public short sTileHeader
	{
		[Token(Token = "0x6002A43")]
		[Address(RVA = "0x12C5A64", Offset = "0x12C5A64", VA = "0x12C5A64")]
		get
		{
			return default(short);
		}
		[Token(Token = "0x6002A44")]
		[Address(RVA = "0x12C5AE4", Offset = "0x12C5AE4", VA = "0x12C5AE4")]
		set
		{
		}
	}

	[Token(Token = "0x170005F0")]
	[Il2CppSetOption(Option.ArrayBoundsChecks, false)]
	[Il2CppSetOption(Option.NullChecks, false)]
	public byte bTileHeader
	{
		[Token(Token = "0x6002A46")]
		[Address(RVA = "0x12C5D28", Offset = "0x12C5D28", VA = "0x12C5D28")]
		get
		{
			return default(byte);
		}
		[Token(Token = "0x6002A47")]
		[Address(RVA = "0x12C5D94", Offset = "0x12C5D94", VA = "0x12C5D94")]
		set
		{
		}
	}

	[Token(Token = "0x170005F1")]
	[Il2CppSetOption(Option.NullChecks, false)]
	[Il2CppSetOption(Option.ArrayBoundsChecks, false)]
	public byte bTileHeader2
	{
		[Token(Token = "0x6002A49")]
		[Address(RVA = "0x12C5F78", Offset = "0x12C5F78", VA = "0x12C5F78")]
		get
		{
			return default(byte);
		}
		[Token(Token = "0x6002A4A")]
		[Address(RVA = "0x12C5FE4", Offset = "0x12C5FE4", VA = "0x12C5FE4")]
		set
		{
		}
	}

	[Token(Token = "0x170005F2")]
	[Il2CppSetOption(Option.NullChecks, false)]
	[Il2CppSetOption(Option.ArrayBoundsChecks, false)]
	public byte bTileHeader3
	{
		[Token(Token = "0x6002A4C")]
		[Address(RVA = "0x12C61CC", Offset = "0x12C61CC", VA = "0x12C61CC")]
		get
		{
			return default(byte);
		}
		[Token(Token = "0x6002A4D")]
		[Address(RVA = "0x12C6238", Offset = "0x12C6238", VA = "0x12C6238")]
		set
		{
		}
	}

	[Token(Token = "0x170005F3")]
	[Il2CppSetOption(Option.NullChecks, false)]
	[Il2CppSetOption(Option.ArrayBoundsChecks, false)]
	public short frameX
	{
		[Token(Token = "0x6002A4F")]
		[Address(RVA = "0x12C2C9C", Offset = "0x12C2C9C", VA = "0x12C2C9C")]
		get
		{
			return default(short);
		}
		[Token(Token = "0x6002A50")]
		[Address(RVA = "0x12C641C", Offset = "0x12C641C", VA = "0x12C641C")]
		set
		{
		}
	}

	[Token(Token = "0x170005F4")]
	[Il2CppSetOption(Option.NullChecks, false)]
	[Il2CppSetOption(Option.ArrayBoundsChecks, false)]
	public short frameY
	{
		[Token(Token = "0x6002A54")]
		[Address(RVA = "0x12C324C", Offset = "0x12C324C", VA = "0x12C324C")]
		get
		{
			return default(short);
		}
		[Token(Token = "0x6002A55")]
		[Address(RVA = "0x12C6858", Offset = "0x12C6858", VA = "0x12C6858")]
		set
		{
		}
	}

	[Token(Token = "0x170005F5")]
	[Il2CppSetOption(Option.ArrayBoundsChecks, false)]
	[Il2CppSetOption(Option.NullChecks, false)]
	public ushort TileSeachUID
	{
		[Token(Token = "0x6002A59")]
		[Address(RVA = "0x12C6B78", Offset = "0x12C6B78", VA = "0x12C6B78")]
		get
		{
			return default(ushort);
		}
	}

	[Token(Token = "0x170005F6")]
	public int collisionType
}

I'm trying to retrieve the tile at specified coordinates. Here's my C++ code:

struct Tile{
    int _tileOffset;
    bool IsLoaded;
    u_short type;
    u_short wall;
    std::byte liquid;
    std::byte sTileHeader;
    std::byte bTileHeader;
    std::byte bTileHeader2;
    std::byte bTileHeader3;
    short frameX;
    short frameY;
    short TileSeachUID;
    int collisionType;
};


BNM::Field<BNM::UnityEngine::Object*> tile_f = Instance().gameClass.GetField("tile");
auto TileData_cls = BNM::Class("Terraria","TileData");
BNM::Field<int> width = TileData_cls.GetField("_width");
BNM::Method<Tile> get_Item = TileData_cls.GetMethod("get_Item");
auto ins = get_Item[tile_f()](x,y);
 LOGI("图格ID:%d %d", ins.type, width[tile_f()]());

However, the type cannot be correctly obtained.

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions