Andrinall
Известный
- 702
- 528
Адрес попробуй такой 0x583480 для хукапробовал, не работает
Адрес попробуй такой 0x583480 для хукапробовал, не работает
не-а, я хз в чем проблема (я его тоже пробовал)
У меня кншн щас нет визуалки чтоб протестить конкретно твой код на крестах, но накидал хук на луа и у меня всё работает!не-а, я хз в чем проблема (я его тоже пробовал)
обновлю ка я код
Посмотреть вложение 245072Посмотреть вложение 245073
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 потому что у меня они нулевыеУ меня кншн щас нет визуалки чтоб протестить конкретно твой код на крестах, но накидал хук на луа и у меня всё работает!
Может ты как-то не так изменяешь данные, что у тебя крашит?
Посмотреть вложение 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
Вообще это значения screen resolution, установленного в настройках игры, должны быть.y
не фурычит, какие у тебя значения в RsGlobals потому что у меня они нулевые
оооочень странно, не работают оба варианта, я думал оно не работает из-за того что в RsGlobal нулевые переменные но нет...Вообще это значения screen resolution, установленного в настройках игры, должны быть.
Конкретно у меня это 1600x900
(у меня там кстати очепятка, в PluginSdk это RsGlobal, а не RsGlobals... чисто на 1 символ опечатался у себя в коде. В любом случае я сам задаю значение, а не беру из игры)
Бл попробуйоооочень странно, не работают оба варианта, я думал оно не работает из-за того что в RsGlobal нулевые переменные но нет...
Посмотреть вложение 245078
RwV2d*(__cdecl*)(CVector& out, CVector& in)Нет -_-Бл попробуйRwV2d*(__cdecl*)(CVector& out, CVector& in)
Чем чёрт не шутит
Нет -_-
не много не понял, можешь дать пример? если я верну ориг функции то как он тогда будет данные менятьЧе за хуйня, оригинал функции верни вместо этих rwssssGloball288, ты же не логику описываешь , а входные данные меняешь
не много не понял, можешь дать пример? если я верну ориг функции то как он тогда будет данные менять
return hook.get_trampoline()(out, in);
а, не допер сразу о чем ты говоришьC++:return hook.get_trampoline()(out, in);
полный код кинь
#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);
}
#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;
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;
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;
}