crackAddict
Silver Üye
- Katılım
- 29 Ocak 2023
- Mesajlar
- 86
- Beğeniler
- 18
uk ~ backcode alıntı
NOT: Aynı sonucu ters çevirerek ve fonksiyonları doğrudan kancalayarak da alabilirsiniz, bu çok daha kolaydır.
1. Öncelikle koordinatlarımızı tutacak bir yapı tanımlamamız gerekiyor.
NOT: Aynı sonucu ters çevirerek ve fonksiyonları doğrudan kancalayarak da alabilirsiniz, bu çok daha kolaydır.
1. Öncelikle koordinatlarımızı tutacak bir yapı tanımlamamız gerekiyor.
struct vec3 {
double x, y, z;
};
2. Şimdi yerel oyuncu pozisyonunu Python fonksiyonundan almak için fonksiyonumuzu oluşturalım.
vec3 GetMainCharacterPosition( PyObject* function ) {
PyObject* callObject = PyObject_CallObject( function, nullptr );
/* here we hold the position */
vec3 position;
/* check if the result is a tuple with at least 3 items */
if ( PyTuple_Check( callObject ) && PyTuple_GET_SIZE( callObject ) >= 3 ) {
/* then we extract them from the tuple */
PyObject* xObj = PyTuple_GetItem( callObject, 0 );
PyObject* yObj = PyTuple_GetItem( callObject, 1 );
PyObject* zObj = PyTuple_GetItem( callObject, 2 );
/* convert the objects to doubles and assign them to the struct */
position.x = PyFloat_AsDouble( xObj );
position.y = PyFloat_AsDouble( zObj );
position.z = PyFloat_AsDouble( yObj );
/* then we release the references to the objects */
Py_DECREF( xObj );
Py_DECREF( yObj );
Py_DECREF( zObj );
}
Py_DECREF( callObject );
return position;
}
3. Fonksiyonumuzu oluşturduktan sonra onu çağıralım.
void init( ) {
sdk::utilities::setup_console( "test output" );
/* import the python module */
const auto& py_module = PyImport_ImportModule( "playerm2g2" );
/* get the function for retrieving the local player position */
const auto& py_func = PyObject_GetAttrString( py_module, "GetMainCharacterPosition" );
/* here we will store our temp coords */
double x, y, z;
bool ok = true;
while ( ok ) {
if ( GetAsyncKeyState( VK_HOME ) & 1 )
ok = false;
vec3 local_pos = GetMainCharacterPosition( py_func );
x = local_pos.x;
y = local_pos.y;
z = local_pos.z;
/* beautiful, innit? */
if ( x != 0 && y != 0 && z != 0 )
std::cout << "x: " << x << " | y: " << y << " | z: " << z << std::endl;
/* avoid excessive cpu usage */
std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
}
/* release the references to the objects after the loop */
Py_DECREF( py_func );
Py_DECREF( py_module );
/* cleanup */
FreeConsole( );
FreeLibraryAndExitThread( h_module, 0 );
}
BOOLEAN WINAPI DllMain( HINSTANCE hDllHandle, DWORD nReason, LPVOID Reserved )
{
switch ( nReason ) {
case DLL_PROCESS_ATTACH:
sdk::utilities::h_module = ( HMODULE )hDllHandle;
init( );
break;
}
return true;
}
Moderatör tarafında düzenlendi: