二改说明
作者在此给坛友道个歉,当时撰写时确实时间没多少,赶着上课,所以质量不高,所以来一次二次更改!希望这一次的可以让更多人理解.也希望大家有建议也可以提出,看到后会回复.
20190426 25:35:18 下暴雨了,明天继续
20190427 08:50:29 继续更新!
问&答
因为有很多坛友都在问一些问题,就在这里回答了吧.
Q1: 请问破解的软件是什么,可以发一下吗
A1: Dnspy 建议到爱盘上下载!
直链 Dnspy爱盘链接
Q2:破解的是电脑版还是手机版
A2:电脑版,手机版的话安卓可以解包后编辑Assembly-CSharp.dll 应该是差不多的方法吧
安卓的这个文件可能在assets/bin/Data/Managed/Assembly-CSharp.dll
思路差不多,毕竟一个人写出来的
修改内容
这个星期和aaaaaaccd交流了一下,发现了一些新的破解方法,也在他的说下发现了一些没有破解到的地方
- 超级武器研究&建造时间√
- 成就全解锁√
- 攻击&防御的冷却√
- 有一个国家没有解锁(哈萨克斯坦)√
- 其他国家的速度也很快!
自动防御有时会有问题(自动防御其实可以不需要,研究就行了)
二改之后会 修改一下之前的思路,然后修改
前言
第一次在52破解发帖,也不知道发到哪个区,干脆发到脱壳破解区吧.
核弹先发制人这款游戏还是aaaaaaccd推荐的,他说想找一个破解教程,52上逛了一圈,好像还没有,就自己发个坑吧......
简介游戏
这款游戏是一个即时性战略游戏,你有几个操作:
- 攻击
- 防御
- 拓宽领土
- 研究新武器/新技能
每一个都需要时间,时间就是这个游戏中的金钱......
emm,怎么说呢......下载游戏了就知道了!!
确定方向
首先我们要破解的话,要确定好破解的方向.目前我们就讲讲一下几个吧
- 国家全解锁
- 自动防御默认开启
- 无建造时间(这个稍稍有点困难)
- (未完待续)
开场分析,寻找破解软件
这个是用的Unity写的,而且还是用的Mono打包(嘿嘿),找到 .\FirstStikeFinalHour_Data\Managed\Assembly-CSharp.dll 抱着试一试的态度打开Dnspy,一拖......
这下就用这Dnspy搞事情吧 /坏笑
国家全解锁
普通国家
首先,我们看得到,开始是只有美国是解锁的,中国是没有解锁的.我们就来解锁吧.
这个比较简单,字符搜索一下就ok了.
可以看到,这边有一个 UnlockManager 这个类,肯定就是他了!双击点进去.在这个UnlockManager里面乱翻,得到一个方法 IsAllianceUnlocked 嗯,我们来看一看这个的代码
他switch国家名称(姑且叫名称吧,其实是另一种数据类型),然后返回那个国家解锁否.emm,我们看看,这个方法的返回值是一个布尔值,而Default是false,那么我们就让他返回True吧! 点击右键->编辑方法
方法内全部内容删掉,只留下return true; 然后再编译
成果图:
哈萨克斯坦
谷歌翻译 哈萨克斯坦=>Kazakhstan
Dnspy寻找一下呗,还是在UnlockMananger里面
有一个GrantAccessToKazahstan
也不知道是干什么的,好像是解锁哈萨克斯坦的,这个怎么改呢,我们分析一下代码
public void GrantAccessToKazahstan()
{
if (!this.unlockedKazakhstan)
{
this.unlockedKazakhstan = true;
this.SaveState();
}
}
似乎是说假如说没有解锁就解锁,emm,那我们就把它放到LoadState语句吧
public void LoadState()
{
this.GrantAccessToKazahstan();
.......
.......
}
嘿嘿,既然到这里找到了UnlockManager,下面一个方法不就是IsSuperWeaponUnlocked
解锁成就
还是在这个UnlockManager里面
CheckGoalFinish函数全部返回Ture ,像国家一样
解锁超级武器
仍然这样吧,全部返回True,运行一下看看
嗯,已经全部弄好了呢!,解锁的话就在UnlockManager还有什么别的解锁需求可以自己改哦!
无等待时间
防御&攻击无冷却
还在研究,下个星期和aaaaaaccd一起研究一下!
可能是这样
在NationModel里面的RequestRocketLaunch函数
if (flag)
{
this._numAttacksOverall++;
this.CurrentState = NationState.States.cooldown;
this.view.WaitAfterLaunch(agent, 30f);
}
把他注释后成为
if (flag)
{
this._numAttacksOverall++;
//this.CurrentState = NationState.States.cooldown;
//this.view.WaitAfterLaunch(agent, 30f);
}
RequestInterceptorLaunch也是注释掉这样的语句
但是这样的话,他的武器显示不会更新,所以我们就加一个
this.UpdateWeaponBar();
emm,就加载之前注释的地方吧
建造无时间
我们就着简单的来,搜寻build,结果搜索结果一堆,那干脆搜索ICBM吧.
忽然发现了onBuildICBM,点进去一路追查,走到了BuildRocket
里面就是了!
我们把this.CurrentState = NationState.States.building;可以注释掉,让他认为这个还没有正在建造
然后发现一个更神奇的 this.arsenal.TotalRocketCapacity
嗯,追踪过去,让他返回10(最多建造10个)合理更改,免得游戏炸掉哦!
↑↑↑↑这个可能导致游戏崩溃,不建议修改!
其实在另一个BuildRocketSub里面还有东西!追踪到 GetTimeToBuildRocket 嗯,这个就是建造时间
我们直接让他返回0(似乎返回的试float,dnspy会自动加上f)
嘿嘿,这里好像都是和时间有关,看见GetTimeToXX全部返回0吧!
就这样吧!
超级武器研究&建造无冷却
搜索一下Super time ,一路跟踪到SuperWeaponManagerModel下面的GetProgressTime 这个应该就是返回的吧,我们直接让他返回0f
不过这样就有问题了,试试0.1f
0.1f可以通过,总之这个地方不能是0,似乎要执行一个时间减然后才可以解锁Button
扫描无冷却
还在寻找突破口!
自动防御
emm,直接说吧
寻找auto,看到个autoDefendeEnabled,我们往上翻,看到AutoDefenseEnabled函数里面设置了他的值,改成返回true
isfull也顺便改了,false
成就全解锁
UnlockManager改CheckGoalFinish改成
public bool CheckGoalFinish(int mission)
{
return true;
}
变态版改变
这些建议不改,影响游戏体验,而且其他国家也会一样的执行修改后的操作
地区不被毁灭
NationModel里面的ReceiveDamage函数
if(this._health.Health <= 0){
...
}
改为
if(false){
...
}
LooseNation函数里面全部注释掉,OnBurn函数也全部注释掉
小结
这次可能有点乱,有问题,或者很多方面做得不好,这只是提供了一个思路,也希望52的坛友们能补充和尝试!
©Kengwang
假如说aaaaaaccd看到了的话:)