关于暗杀技能的研究报告\[全职业可用,PK可用\]
-
暗杀技能由于自身的变态性被限定只许忍者与士兵学习,且只能在普通战斗中使用本文将通过对gmsv的研究来尝试修改暗杀技能让其达到以下效果
1. 全职业可使用
2. PK中可用
3. 暗杀几率调整首先说第一和第二点,全职业可使用和PK中可用
打开IDA,调用gmsv,跳到函数BATTLE_MOVE
该函数调用了两个关于暗杀技能的函数
分别是
BATTLE_CheckAssassin(player,unk1)和BATTLE_Assassin(player,unk1)
执行BATTLE_CheckAssassin的条件改写成白话为
如果(((玩家职业基础编号为150 或者 50) 并且 玩家当前执行的命令是普通攻击) 或者 (是NPC))
那么很显然,我们需要修改条件为
**如果((**玩家当前执行的命令是普通攻击) 或者 (是NPC))
既可让所有玩家触发BATTLE_CheckAssassin这个函数了
开始修改:
首先转移到gmsv文件偏移0x00062351
可以看到汇编代码
```
mov eax, [edx+0D8h] '取玩家的职业ID
cmp eax, 096h
jz loc_80AD101```
这里将代码修改为mov eax, [edx+0Ch] cmp eax, 1 jz loc_80AD101
同样0x6235C也修改为
cmp eax, 1
既可
这样所有职业使用普通攻击都会触发BATTLE_CheckAssassin这个函数,接下来进入BATTLE_CheckAssassin函数,来看看具体的内容
BATTLE_CheckAssassin这个函数主要有以下几个功能:
1. 判定是否处于可触发暗杀的环境
2. 判定暗杀是否成功释放[几率判定]对于判定是否处于可触发暗杀的环境,程序中设定的判定是
如果 (战斗类型是普通战斗 或者 被攻击目标是NPC) [这个限定局限了暗杀只会在普通战斗中触发]
对于这个判定,我们只需要修改为
如果 (战斗类型是PK 或者 战斗类型是普通战斗)既可但是方便起见,我们直接废掉这个判定就行了
开始修改
gmsv文件偏移0x00086E17cmp dword ptr [ecx+eax*4+10h], 2 jz short loc_80CEE3D
改为
cmp dword ptr [ecx+eax*4+10h], 0 jnz short loc_80CEE3D
既可
除此之外,还有一个函数需要修改,即BATTLE_Assasin_check,这个函数在BATTLE_GetExpGold中被调用,作用是普通战斗结束后的技能经验奖励
这里的判定与BATTLE_CheckAssassin的调用判定一样,只是判定职业代码
可见gmsv文件偏移0x849DEcmp edx, 32h jz short loc_80CC9F8
修改为
cmp edx, 0 jnz short loc_80CC9F8
既可
总结:1. 0x6234B 8B 82 D8 -> 8B 82 0C
2. 0x62351 3D 96 -> 3D 01
3. 0x6235C 83 F8 32 -> 83 F8 01
4. 0x86E17 83 7C 81 10 02 74 -> 83 7C 81 10 00 75
5. 0x849DE 83 FA 32 74 -> 83 FA 00 75以上修改后即可实现暗杀的全职业可用以及PK可用
测试结果如下: PK时可以触发,非忍者和士兵也可以触发,未出现挂端
P.S. 本修改未经过完整的个人试验,请谨慎测试,如有问题,请回帖交流
-
:o不知道会不会出挂端的bug呢,乱来服务器到期了。。。没法测试了,我汗
-
不会,不过就是不知道他说的这个是不是根据个人的GMSV来写的
-
好了 本地测试正常
-
都聚来了啊:loveliness::loveliness:
-
回复 Free 的帖子
暗杀几率方面
Num: Value Size Type Bind Vis Ndx Name
4291: 080ced2c 1315 FUNC GLOBAL DEFAULT 12 BATTLE_CheckAssassin跳转来到BATTLE_CheckAssassin
直接看到这个地方
cmp eax, LV
jg short loc_80.
mov [ebp+var_29C], 0-11D这里的意思是对应级别范围赋值(乱数因子)
LV 0-9 10-19 20-29 30-39 ... 100-119 还有一个情况是大于等于120级
对应赋值 0 1 2 3 ... 10 11 和?
下面我们谈谈暗杀发动公式乱数因子1=(0 to 暗杀等级)
乱数因子2= (0 to 级别对应值)当乱数因子1>乱数因子2时 就能发动暗杀
例如1级暗杀 那么对0-9级的怪物
L1 = 0 to 1
L2 = 0
则发动率为50%
又例2级暗杀 对0-9级的怪物
L1 = 0 to 2
L2 = 0
则发动率为66%又例10级暗杀 对90-99级的怪物
L1 = 0 to 10
L2 = 0 to 9
则发动率为55%
-
好东西支持下
-
干看不懂啊。怎么样修啊GMSV啊?UE的会,LZ修改的方法不会。能教一下吗?
-
很强大
-
回复 deiwr123 的帖子
帖子最后不是写了UE修改的方式了么
-
回复 bq00167 的帖子
你可以看看BOSS战斗和普通战斗的区别,从这个点开始分析就ok了,我的修改已经实现了全职业可用,pk可用
-
看完这个帖子我在思考学习汇编的重要性
-
:lol学了很多东西啊 开拓思路了
-
ide不太会用,要是ue就好了
-
_本帖最后由 小狐狸 于 2011-7-15 06:07 编辑 _
Free 发表于 2011-6-13 11:50
回复 bq00167 的帖子你可以看看BOSS战斗和普通战斗的区别,从这个点开始分析就ok了,我的修改已经实现了全职 ...
PK不是一直就可以用吗?难道是主动暗杀?还是打BOSS暗杀?
-
看的头疼痛 郁闷 多多学习啊
-
有的时候PK对方用乾坤,就会挂端貌似。如果都什么技能不用会出暗杀,也不挂端。这个方法乾坤不会挂端麽?
-
一看就明白了~很简明扼要
-
给力啊。;P
-
确实看不懂啊~!~!~!
-
我试试看啊~~~~~~