Другое С/С++ Вопрос - Ответ

Andrinall

Известный
702
528
пробовал, не работает
Адрес попробуй такой 0x583480 для хука

1719821537556.png
 

Andrinall

Известный
702
528
не-а, я хз в чем проблема (я его тоже пробовал)

обновлю ка я код


Посмотреть вложение 245072Посмотреть вложение 245073
У меня кншн щас нет визуалки чтоб протестить конкретно твой код на крестах, но накидал хук на луа и у меня всё работает!
Может ты как-то не так изменяешь данные, что у тебя крашит?

1719822744336.png

Lua:
local ffi = require 'ffi'
local hook = require 'hooks'
local sw, sh = getScreenResolution()
local RsGlobals = {
    maximumWidth = sw,
    maximumHeight = sh,
}
ffi.cdef[[
    typedef struct CVector2D { float x, y; } CVector2D;
    typedef struct RwV2d { float x, y; } RwV2d;
]]
function radar_position(out, _in)
    out[0].x = 0.5 * (94.0 * (RsGlobals.maximumWidth * 0.0015625)) + RsGlobals.maximumWidth * 0.0015625 * 40 + 94 * (RsGlobals.maximumWidth * 0.0015625) * _in.x * 0.4
    out[0].y = RsGlobals.maximumHeight - 0.002232143 * RsGlobals.maximumHeight * 104 + 76 * (0.002232143 * RsGlobals.maximumHeight) * 0.5 - 76 * (0.002232143 * RsGlobals.maximumHeight) * _in.y * 0.5
    return ffi.cast('RwV2d*', _in)
end
function main()
    transformhook = hook.jmp.new('RwV2d*(__cdecl*)(CVector2D* out, CVector2D* in)', radar_position, 0x583480)
end
 

yoonost

Известный
62
3
y
У меня кншн щас нет визуалки чтоб протестить конкретно твой код на крестах, но накидал хук на луа и у меня всё работает!
Может ты как-то не так изменяешь данные, что у тебя крашит?

Посмотреть вложение 245076
Lua:
local ffi = require 'ffi'
local hook = require 'hooks'
local sw, sh = getScreenResolution()
local RsGlobals = {
    maximumWidth = sw,
    maximumHeight = sh,
}
ffi.cdef[[
    typedef struct CVector2D { float x, y; } CVector2D;
    typedef struct RwV2d { float x, y; } RwV2d;
]]
function radar_position(out, _in)
    out[0].x = 0.5 * (94.0 * (RsGlobals.maximumWidth * 0.0015625)) + RsGlobals.maximumWidth * 0.0015625 * 40 + 94 * (RsGlobals.maximumWidth * 0.0015625) * _in.x * 0.4
    out[0].y = RsGlobals.maximumHeight - 0.002232143 * RsGlobals.maximumHeight * 104 + 76 * (0.002232143 * RsGlobals.maximumHeight) * 0.5 - 76 * (0.002232143 * RsGlobals.maximumHeight) * _in.y * 0.5
    return ffi.cast('RwV2d*', _in)
end
function main()
    transformhook = hook.jmp.new('RwV2d*(__cdecl*)(CVector2D* out, CVector2D* in)', radar_position, 0x583480)
end
не фурычит, какие у тебя значения в RsGlobals потому что у меня они нулевые
 

Andrinall

Известный
702
528
y

не фурычит, какие у тебя значения в RsGlobals потому что у меня они нулевые
Вообще это значения screen resolution, установленного в настройках игры, должны быть.
Конкретно у меня это 1600x900

(у меня там кстати очепятка, в PluginSdk это RsGlobal, а не RsGlobals... чисто на 1 символ опечатался у себя в коде. В любом случае я сам задаю значение, а не беру из игры)
 

yoonost

Известный
62
3
Вообще это значения screen resolution, установленного в настройках игры, должны быть.
Конкретно у меня это 1600x900

(у меня там кстати очепятка, в PluginSdk это RsGlobal, а не RsGlobals... чисто на 1 символ опечатался у себя в коде. В любом случае я сам задаю значение, а не беру из игры)
оооочень странно, не работают оба варианта, я думал оно не работает из-за того что в RsGlobal нулевые переменные но нет...


1719824817415.png
 

yoonost

Известный
62
3
Че за хуйня, оригинал функции верни вместо этих rwssssGloball288, ты же не логику описываешь , а входные данные меняешь
не много не понял, можешь дать пример? если я верну ориг функции то как он тогда будет данные менять
 

yoonost

Известный
62
3
полный код кинь
radar.cpp:
#include "radar.h"

void radar::initialize() {
    hookTransformPos.set_dest(0x583480);
    hookTransformPos.set_cb(std::bind(&radar::transformPos, this, _1, _2, _3));
    hookTransformPos.install();
}

RwV2d* __cdecl radar::transformPos(const decltype(hookTransformPos)& hook, CVector2D* out, CVector2D* in) {
    if (FrontEndMenuManager.drawRadarOrMap) {
        out->x = FrontEndMenuManager.m_fMapZoom * in->x + FrontEndMenuManager.m_fMapBaseX;
        out->y = FrontEndMenuManager.m_fMapBaseY - FrontEndMenuManager.m_fMapZoom * in->y;
    }
    else {
        out->x = 0.5 * (94.0 * (RsGlobal.maximumWidth * 0.0015625)) + RsGlobal.maximumWidth * 0.0015625 * 40.0 + 94.0 * (RsGlobal.maximumWidth * 0.0015625) * in->x * 0.5;
        out->y = RsGlobal.maximumHeight - 0.002232143 * RsGlobal.maximumHeight * 104.0 + 76.0 * (0.002232143 * RsGlobal.maximumHeight) * 0.5 - 76.0 * (0.002232143 * RsGlobal.maximumHeight) * in->y * 0.5;
    }
    return hook.get_trampoline()(out, in);
}
radar.h:
#pragma once

#include <kthook/kthook.hpp>

#include <plugin.h>
#include <common.h>
#include <CSprite2d.h>
#include <CVector.h>
#include "CMenuManager.h"

using namespace plugin;
using namespace std::placeholders;

class radar {
public:
    void initialize();

private:
    kthook::kthook_simple<RwV2d* (__cdecl*) (CVector2D*, CVector2D*)> hookTransformPos {};
    RwV2d* __cdecl transformPos(const decltype(hookTransformPos)& hook, CVector2D* out, CVector2D* in);
};

inline radar g_radar;
 

AdCKuY_DpO4uLa

Адский дрочер
Друг
421
907
radar.cpp:
#include "radar.h"

void radar::initialize() {
    hookTransformPos.set_dest(0x583480);
    hookTransformPos.set_cb(std::bind(&radar::transformPos, this, _1, _2, _3));
    hookTransformPos.install();
}

RwV2d* __cdecl radar::transformPos(const decltype(hookTransformPos)& hook, CVector2D* out, CVector2D* in) {
    if (FrontEndMenuManager.drawRadarOrMap) {
        out->x = FrontEndMenuManager.m_fMapZoom * in->x + FrontEndMenuManager.m_fMapBaseX;
        out->y = FrontEndMenuManager.m_fMapBaseY - FrontEndMenuManager.m_fMapZoom * in->y;
    }
    else {
        out->x = 0.5 * (94.0 * (RsGlobal.maximumWidth * 0.0015625)) + RsGlobal.maximumWidth * 0.0015625 * 40.0 + 94.0 * (RsGlobal.maximumWidth * 0.0015625) * in->x * 0.5;
        out->y = RsGlobal.maximumHeight - 0.002232143 * RsGlobal.maximumHeight * 104.0 + 76.0 * (0.002232143 * RsGlobal.maximumHeight) * 0.5 - 76.0 * (0.002232143 * RsGlobal.maximumHeight) * in->y * 0.5;
    }
    return hook.get_trampoline()(out, in);
}
radar.h:
#pragma once

#include <kthook/kthook.hpp>

#include <plugin.h>
#include <common.h>
#include <CSprite2d.h>
#include <CVector.h>
#include "CMenuManager.h"

using namespace plugin;
using namespace std::placeholders;

class radar {
public:
    void initialize();

private:
    kthook::kthook_simple<RwV2d* (__cdecl*) (CVector2D*, CVector2D*)> hookTransformPos {};
    RwV2d* __cdecl transformPos(const decltype(hookTransformPos)& hook, CVector2D* out, CVector2D* in);
};

inline radar g_radar;
C++:
class radar
{
private:
    kthook::kthook_simple<void(__cdecl*)(CVector2D*, CVector2D*)> TransformRadarPointToScreenSpaceHook{};
    static void __cdecl TransformRadarPointToScreenSpace_HOOKED(const decltype(TransformRadarPointToScreenSpaceHook)& hook, CVector2D* out, CVector2D* in);
public:
    void initialize();
} g_radar;

void radar::initialize()
{
    TransformRadarPointToScreenSpaceHook.set_dest(0x583480);
    TransformRadarPointToScreenSpaceHook.set_cb(&TransformRadarPointToScreenSpace_HOOKED);
    TransformRadarPointToScreenSpaceHook.install();
}

void __cdecl radar::TransformRadarPointToScreenSpace_HOOKED(const decltype(TransformRadarPointToScreenSpaceHook)& hook, CVector2D* out, CVector2D* in) {
    if (FrontEndMenuManager.drawRadarOrMap) {
        out->x = FrontEndMenuManager.m_fMapZoom * in->x + FrontEndMenuManager.m_fMapBaseX;
        out->y = FrontEndMenuManager.m_fMapBaseY - FrontEndMenuManager.m_fMapZoom * in->y;
    }
    else {
        out->x = 0.5 * (94.0 * (RsGlobal.maximumWidth * 0.0015625)) + RsGlobal.maximumWidth * 0.0015625 * 40.0 + 94.0 * (RsGlobal.maximumWidth * 0.0015625) * in->x * 0.5;
        out->y = RsGlobal.maximumHeight - 0.002232143 * RsGlobal.maximumHeight * 104.0 + 76.0 * (0.002232143 * RsGlobal.maximumHeight) * 0.5 - 76.0 * (0.002232143 * RsGlobal.maximumHeight) * in->y * 0.5;
    }
    //ты ведь в тупую логику переписал?? если так, то не нужно вообще ориг. функцию вызывать, т.к. все рассчеты будут тут
    return;
}
еще я не тестил эту лабуду