Здравствуйте, пытаюсь вызвать функцию в одной игре с помощью C++, раньше эта игра не была зашифрована(можно было спокойно изменять Assembly-CSharp.dll), но сейчас игра уже IL2CPP, поэтому у меня есть Assembly-CSharp.dll
старой версии этой игры. Вот как на C# задается функция(SendMessage), которую я хочу вызвать(повторюсь, она из незашифрованной версии игры). Cразу говорю, вызывать ее на C# для меня не вариант.
this._connectionManager.SendMessage(new NetworkMessage
{
MessageType = MessageType.InputBuildRequest,
Content = new InputBuildRequest
{
Angle = angle,
BuildType = (uint)this._buildingDef.EntityType,
Id = 0,
TestPass = false,
X = vector.x,
Y = vector.y
}
А вот как выглядит InputBuildRequest:
public InputBuildRequest(InputBuildRequest other) : this()
{
this.id_ = other.id_;
this.buildType_ = other.buildType_;
this.x_ = other.x_;
this.y_ = other.y_;
this.angle_ = other.angle_;
this.testPass_ = other.testPass_;
this._unknownFields = UnknownFieldSet.Clone(other._unknownFields);
}
В дампе эта функция выглядит следующим образом:
{
"Address": 3252048,
"Name": "Game.Managers.ConnectionManager.ConnectionManager$$SendMessage",
"Signature": "void Game_Managers_ConnectionManager_ConnectionManager__SendMessage (Game_Managers_ConnectionManager_ConnectionManager_o* __this, ServerDefinitions_NetworkMessage_o* message, const MethodInfo* method);",
"TypeSignature": "viii"
}
Передать в нее указатель на класс я могу(т.е. первый аргумент и третий тоже), но второй это и есть тип постройки, который я не понимаю как передать. Также я прикрепил скрины того, как она выглядит в ассемблере.
Вот так выглядит на C# вызов, который я хочу осуществить , но уже на C++:
this._connectionManager.SendMessage(new NetworkMessage
{
MessageType = MessageType.InputBuildRequest,
Content = new InputBuildRequest
{
Angle = 0.3926991f,
BuildType = 23U,
Id = 0,
TestPass = false,
X = 1f,
Y = 20f
}
});
Может мне кто-то помочь сделать это, потому что функция выглядит очень непонятно, как с этим что-то делать у меня 0 идей.