首先我们分析一下Level::setTime(long)的原理。
Level是它的类,然而我们的插件不像js那样温柔,所以,必须获取Level。
我觉得,tick是获取Level的好办法。
class Level {
public:
static void tick();//钩子必须添加static,我现在用的是隐式
void setTime(long);
};
这是前头工作。我们将在教程里详细探讨。
第二个,操作。
static void (*t_r)(Level*);//指针声明
static void t_h(Level*l) {
level=l;
t_r(level);
}
MSHookFunction((void*)&Level::tick,(void*)&t_h,(void**)&t_r);//这是放在模板里jni那一行的。
手头工作搞定了以后,我们喝杯java,继续干。
*t_r的上面添加Level*level=NULL;//初始化,防止寄存器垃圾值
当然,要有钩子,才能触发函数,今晚继续。
![](http://imgsrc.baidu.com/forum/w%3D580/sign=ca150565fe1986184147ef8c7aed2e69/54ac6937acaf2edddac2c9ed8b1001e93901932d.jpg)
![](http://imgsrc.baidu.com/forum/w%3D580/sign=4abb9be9a5cc7cd9fa2d34d109012104/f6a217fbe6cd7b897845ba87092442a7d9330e2b.jpg)
Level是它的类,然而我们的插件不像js那样温柔,所以,必须获取Level。
我觉得,tick是获取Level的好办法。
class Level {
public:
static void tick();//钩子必须添加static,我现在用的是隐式
void setTime(long);
};
这是前头工作。我们将在教程里详细探讨。
第二个,操作。
static void (*t_r)(Level*);//指针声明
static void t_h(Level*l) {
level=l;
t_r(level);
}
MSHookFunction((void*)&Level::tick,(void*)&t_h,(void**)&t_r);//这是放在模板里jni那一行的。
手头工作搞定了以后,我们喝杯java,继续干。
*t_r的上面添加Level*level=NULL;//初始化,防止寄存器垃圾值
当然,要有钩子,才能触发函数,今晚继续。
![](http://imgsrc.baidu.com/forum/w%3D580/sign=ca150565fe1986184147ef8c7aed2e69/54ac6937acaf2edddac2c9ed8b1001e93901932d.jpg)
![](http://imgsrc.baidu.com/forum/w%3D580/sign=4abb9be9a5cc7cd9fa2d34d109012104/f6a217fbe6cd7b897845ba87092442a7d9330e2b.jpg)