文明时代2吧 关注:55,586贴子:1,331,827
  • 6回复贴,共1

怎样烧自己的地

只看楼主收藏回复

从博客迁移的过程中翻出来的文章
说不准有人要用。
- - - - - - - - - 正 文 - - - - - - - - -
本文将简单阐述如何让自己的本土省份变得可以劫掠。
首先,我们先来看看在本土掠夺有什么阻碍。
第一,我们是点不了掠夺这个按钮的—会提示这不是占领而是本土省份。
与这个按钮相关的类笔者已经找好了,在Menu_InGame_Build$27。
切换到getClickable(获取可点击元素)方法,在末尾return x(这里x是寄存器,例如v0/v1)前添加 const x,0x1即可。这里牵扯到smali对于布尔值(这种数据类型只有true/false/null,可以称之为编程中的二极管)的处理:true变为1,false变为0。所以,这里我们实际上是让这个方法永远返回true。
现在进入游戏,你应该会发现原本点下去没有效果的掠夺按钮(在省份的更多里)现在会出现掠夺菜单了!不过,点下掠夺仍然不会让掠夺发生。
再跳转到DiplomacyManager类,我们会发现有两个方法:plunder和plunderProvince。我们都需要进行更改。
先说plunder。
跳转到这个方法,我们可以看到开头出现了一个if语句。
如果这个if语句判断为false,就不会执行掠夺相关的语句。
直接修改寄存器过于困难(之后的代码还需要用到这个参数,如果贸然修改可能出现各类问题),因此我们这里选择goto跳转。
找到if-eqz后面的cond标签(例如:cond_a),记住它。
找到这一个cond标签,在它上一行(如果已经有指令了就添加)输入:goto_x(x可自行替换)
接下来,在if-eqz指令下方添加goto :goto_x(跟上一个goto_x保持一致)即可。
接下来是plunderProvince。
搜索isoccupied,我们会看到一个对该方法的调用。
在这个方法的返回值被移动到指定寄存器(move-result)之后,将这个寄存器设定为0x1(true)即可。
此时进入游戏,应该已经可以我掠夺我自己了。


IP属地:福建1楼2023-11-20 22:04回复
    dd


    IP属地:山东来自Android客户端2楼2023-11-21 15:55
    回复
      可是 ai会不会也自己烧自己的地呢()


      IP属地:江西来自Android客户端3楼2023-11-26 17:27
      收起回复
        dd


        IP属地:广东来自Android客户端4楼2023-12-01 19:34
        回复
          dd


          IP属地:四川来自Android客户端5楼2024-02-27 10:09
          回复
            可不可以做一期,如何给正常的政体,赋予土著的进攻未殖民地区的能力


            IP属地:福建来自Android客户端6楼2024-08-18 20:50
            回复