Minisoyo社区's Archiver

欢迎注册泡面三国

lshjava 发表于 2008-1-9 18:43

halo2另类改键法

首先感谢BB大大和MINISOYO无私奉献出无功能限制的完全版HALO2,我也把一些HALO2的使用心得与大家分享,本人水平有限,希望大家不要见笑!
   最近碰到一个游戏,它是诺基亚的软件<王国之心>,我就想改到MOTO机上用.但用了JavaMagic,fulljava,MotoMidMan来改键,发现还是不行,最后使用BB大大的HALO2的改键教程也无能为力!我就估计可能程序中对键值另有映射,打开游戏GAME下的MultiOutPut.class发现方法keyPressed和keyReleased它和数组codes的值与键值 i 有关.

public void keyPressed(int i)
    {
        if(i == codes[0] || i == codes[1])
            up = true;
        if(i == codes[2] || i == codes[3])
            down = true;
        if(i == codes[4] || i == codes[5])
            left = true;
        if(i == codes[6] || i == codes[7])
            right = true;
        if(i == codes[8] || i == codes[9])
            menu_left = true;
        if(i == codes[10] || i == codes[11])
            menu_right = true;
        if(i >= 48 && i <= 57)
            key_num[i - 48] = true;
    }
例如:当codes[0]或codes[1]的值与按键"上"的键值(-1)相同时就执行方向键"上"的动作.就是说它是以数组codes的值为标准的!而数组codes的值如下:int codes[] = { -1, 1, -6, 6, -2, 2, -5, 5, -21, -6, -22, -8}.结合方法keyPressed和keyReleased分析,这数组的值两个为一组.例如:-1, 1对应的就是方向键"上";-6, 6对应的就是方向键"下".这两个数前一个是诺基亚对应键值,后一个是GAME ACTION值,GAME ACTION值是通用的不用改.既把codes[2]改为-6,codes[4]改为-2,codes[6]改为-5,codes[8]改为-21,codes[10]改为-22,需要注意:MOTO机的方向键"下"与诺基亚左软键键值相同,都是-6.应把方法keyPressed和keyReleased的这句:
if(i == codes[8] || i == codes[9])
           
   改为:
if(i == codes[8] || i == codes[8]).
分析完毕,用HALO2打开游戏,在MultiOutPut.class搜索codes. [ 图1  ]  
有3个对象,我们要改的是第一个.      [ 图2  ]
具体改法看图吧!    [ 图3  ]
最后再把keyPressed和keyReleased方法中的if(i == codes[8] || i == codes[9])改为:
if(i == codes[8] || i == codes[8]). [ 图4  ]

小庞 发表于 2008-1-9 18:45

支持

学习了:眼睛

bb 发表于 2008-1-9 18:47

在这个函数之前插入拦截代码。

if(keycode == -6)
   keycode == -22;

不用去理会后面的键值怎么处理。

_峰峰 发表于 2008-1-9 18:52

哇   强人啊

lshjava 发表于 2008-1-9 18:53

bb说的也对!但方向键"下”就没用了。只能用“8”键了!

JZY20 发表于 2008-1-9 18:55

支持一位

bb 发表于 2008-1-9 18:58

不会的。

nokia是     
   -1
-2 -5 -3
    -4

moto是
   -1
-2 -20 -5
    -6

所以方向 下 也是一样的
if(keycode = -6)
   keycode = -2;

拦截是可以拦截所有的。

实际上按你的方法去改 ,为什么不去直接改了codes的初始化,其初始化应该在静态构造函数里,也就是<clinit>里面。那样应该更方便点。

宛南 发表于 2008-1-9 18:59

强人啊!都看不懂:吹吹

lshjava 发表于 2008-1-9 19:02

估计BB没仔细看,我改的就是codes的初值!把codes[2]改为-6,codes[4]改为-2,codes[6]改为-5,codes[8]改为-21,codes[10]改为-22

宛南 发表于 2008-1-9 19:09

楼主,俺要拜你为师——:眼睛

zhangxuhui 发表于 2008-1-9 19:25

[quote]原帖由 <i>bb</i> 于 2008-1-9 18:58 发表 <a href="http://forum.minisoyo.com/redirect.php?goto=findpost&pid=1567440&ptid=78024" target="_blank"><img src="http://forum.minisoyo.com/images/common/back.gif" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmousewheel="return imgzoom(this);" alt="" /></a><br />不会的。<br /><br />nokia是 <br /> -1<br />-2 -5 -3<br /> -4<br /><br />moto是<br /> -1<br />-2 -20 -5<br /> -6<br /><br />所以方向 下 也是一样的<br />if(keycode = -6)<br /> keycode = -2;<br /><br />拦截是可以拦截所有的。<br /><br />实际上按你的方法去 ... [/quote]<br />诺机的是这样的?

lionely 发表于 2008-1-9 19:45

都很強!!!

zjh-123 发表于 2008-1-9 19:46

哇   强人啊:眼睛

怨缘远 发表于 2008-1-9 20:01

楼主可以帮我试试这个吗!
我使用BB的教程,采用拦截方法,但不知为何,就是不行!
会导致所有的按键都失效了!上下左右都无法用了
你试下帮我把软件的“-7”键值改成“27”

BB大大看到的,麻烦也帮我看看,究竟为何会这样的!

bb 发表于 2008-1-9 20:25

不好意思,没有认真看。。。:(sorry

singz 发表于 2008-1-9 23:55

厉害啊,这教程我就收下了,感谢啦~

liximin 发表于 2008-1-10 02:42

支持教程呀

lshjava 发表于 2008-1-10 16:36

回复 #14 怨缘远 的帖子

你这是什么机子?哪个键?“27”???:疑问 :疑问

怨缘远 发表于 2008-1-10 18:55

[quote]原帖由 [i]lshjava[/i] 于 2008-1-10 16:36 发表 [url=http://forum.minisoyo.com/redirect.php?goto=findpost&pid=1573908&ptid=78024][img]http://forum.minisoyo.com/images/common/back.gif[/img][/url]
你这是什么机子?哪个键?“27”???:疑问 :疑问 [/quote]
[size=5]你到这里看看,我的机子很特别!是诺基亚的7710![/size]
[url=http://forum.minisoyo.com/thread-74179-2-1.html][size=5]http://forum.minisoyo.com/thread-74179-2-1.html[/size][/url]
[size=5]键很少!就是想把软件的“菜单”使用在这里,即是这个键的键值是“27”[/size]

lshjava 发表于 2008-1-11 14:30

我帮你改好了,在netebook下的b.class文件中 protected final void keyReleased(int i1)和 protected final void keyPressed(int i1)方法中加入了:
iload_1
bipush 27
if_icmpne 6
bipush 249
istore_1
既:if(i1 == 27)
            i1 = -7;
的拦截语句.原理和方法BB大大和qsrc大大已经解释了!但在HALO2.02中存在漏洞,需在protected final void keyPressed(int i1)方法中自行调整两句switch多分支语句!tableswitch 1: 364, 2: 392, 3: 18, 4: 10, 5: 392, 6: 22, 7: 14, 8: 385, 9: 83, 10: 264, 11: 381, 12: 264, 13: 389, default: 392  和:
tableswitch 0: 165, 1: 168, 2: 171, 3: 179, 4: 187, 5: 195, 6: 203, 7: 211, 8: 219, 9: 227, default: 234
把里面的跳转的地址都加5!
估计HALO2.05已解决这个漏洞了,但我电脑用不了HALO2.05,系统冲突.请你用HALO2.05试一下!

页: [1] 2

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.