Brushman 让道具支持自动堆叠到可支持的最大堆叠数


  • 管理员

    本文只提供思路,不提供具体修改方法,因为我暂时没找到什么位置来放这些代码,有兴趣的人可以帮忙找找空位来实现修复这个bug
    首先,按照小男生曾经提出的方法,0xEFA9C的8D修改为8E的确可以解决1个番茄酱换16个小麦粉的问题,但是依旧存在的问题是
    1.换到的小麦粉不会堆叠,即每个小麦粉都是16份
    2.即便道具栏空位不足还是会进行兑换

    下面介绍如果解决第一个问题,即小麦粉不堆叠.
    首先,ida打开gmsv,跳转到文件偏移0xEFA9C,可以看到

    ```
    cmp eax, 1
    mov ebx, eax
    jge loc_8137BF0
    ```

    jge的意思是大于等于则转跳,小男把这里修改为了jle,即小于等于则转跳
    这个思路是正确的,因为这块代码的意义是
    如果要兑换的道具的最大堆叠数小于等于1,则不进行道具堆叠.

    那么对于问题一,小麦粉不堆叠的问题就应该往下看了,为了方便,直接用ida+f5反编译出代码,这样更加直白

    else
          {
            if ( v7 > v12 )
              v8 = v12;
            ITEM_setInt(v4, 9, v8);
            v12 -= v8;
          }
    

    v7: 道具的最大堆叠量
    v12: 兑换的数量
    v8: 给予玩家的道具堆叠数

    我们再转跳到这个函数开始,可以看到

    v5 = get_num2_4(&v14);
        ++v14;
        v13 = v5;
        v4 = CHAR_getItemIndex("npc/npc_brushman.c", 754, a1, v5);
        v12 = get_num2_4(&v14);
    

    v12为传递来的封包参数的偶数位参数,通过抓取封包,可以得到

    WN 3Q 1j 5z 28s 0 0\\z2 
    

    我们需要的参数即0\\z2->0|2
    0是窗口中可以兑换的道具的顺序ID,从0开始
    2是我兑换的数量,即兑换2个番茄酱
    于是问题就出现在这里了,我们兑换2个番茄酱,但是传递给这个函数的数量却不是兑换后的数量,通过

    if ( v7 > v12 )
    v8 = v12;
    

    这里不难看出,只有当我们兑换的番茄酱的数量超过小麦粉的最大堆叠值的时候,才会处理.
    所以,一个简单的思路,就是修改v12,也就是兑换数量的值,将这个值修改为
    v12 = 番茄酱数量 * 每个番茄酱可以换到的小麦粉的数量
    也就是说,这样修改后,我们传递的值是v12 = 2*16 = 32
    这样就不会造成小麦粉自身不堆叠了.

    至于第二点,即道具栏空位不足还是会进行兑换,这点是由于客户端自身认为一个番茄酱只能换一个小麦粉,所以在空位判定的时候无效,如果单纯的通过修改gmsv来实现,需要改动大量的代码,因为gmsv是先删除所有兑换的番茄酱,然后再给予小麦粉,这样就是造成即便道具栏空位不足任然后兑换的原因.
    不过通过第一点的修复,只要小麦粉的最大堆叠数/16 > 番茄酱的最大堆叠数, 就不会造成番茄酱的浪费了.
    比如,小麦粉80个算一组,番茄酱3个算一组,这样的设定利用第一点的修复就可以完美实现番茄酱的全部兑换了.
    1.jpg


    • 想着从别人那获取什么之前,请先自己做出点什么贡献。

    • 技术不是可以衣来伸手饭来张口的。

    • 在你开口问别人为什么之前,请先自己问问搜索引擎。

    • 自由和分享是需要建立在你自身的基础之上的。

    0


  • 好东西,回复一下......



  • 支持支持。



  • 好東西支持;P



  • 大力支持啊



  • 大力的支持啊。学习了



  • 大力的支持啊。学习了



  • 大力支持,凑字



  • 完全的看不明白啊



  • 完全看不明白啊。。



  • 前来学习了



  • QQQQQQQQQQQ



  • 谢谢分享~~



  • 支持~~~~~~~~~~~



  • 精品阿~~~~~~~~



  • 做做实验看



  • 完全崩溃!!!



  • 学习了!!!!!!!!!!!!!!!!



  • 楼主高手啊 ida还在学习中@~!~~



  • 好东西,支持一下



  • 給你頂一下
    單人玩不需要這麼細緻


登录后回复