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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions