修改游戏:“大学生联盟”
使用到工具:IDE 3.1.0.0
.NET Reflector 8.2.0.42
打开assetsbinDataManaged目录下的Assembly-CSharp.dll文件。
分析过程就不细说了,F3 → ctrl + m → win →选择精准匹配。
我们锁定Menber = win,Declaring Type = BattleState这行,双击进去,顺便看看BattleState这个类都有些什么相关的信息。
(截取不完整,只看看它的方法吧。)
AllEnemiesDead() : Boolean 所有敌人死亡
AllHeroDead() : Boolean 所有英雄死亡
EndBattle() : Void 结束战斗
............................
............................
这里我们把直接胜利,比喻成我们想添加的toast,想让toast在启动的时候显示,就要找到主启动的activity添加进去。
在Win() : Void →右键Analyze或者ctrl + r →点加号或双击→ used By看下。
BattleState.Win() : Void
DependsOn
UsedBy
BattleState.Update() : Void #同在BattleState类下的方法
PlayerCmder.Reconnect(FullPlayerWrap) : Void #在PlayerCmder类下的方法
不舍近求远,看看Update() : Void。
public override void Update()
{
base.Update();
if ((this.m_status == Status.Init)&& (BattleApp.aBattle != null))
{
this.m_status = Status.Runing;
}
if (BattleApp.aBattle != null)
{
if (this.m_status == Status.BattleEndTutorial)
{
if (Singleton<TutorialManager>.Get().IsTutorialFinishOp(this.m_battleEndTutorial))
{
if (this.m_result == BattleResult.Win)
{
this.Win();
}
else if (this.m_result == BattleResult.Lose)
{
this.Loss();
}
}
}
else
{
if (!this.m_bTriggerStartEvent && (this.ElapseTime > 0x9c4L))
{
this.m_bTriggerStartEvent = true;
Singleton<TutorialManager>.Get().SendEvent(new BattleStart());
}
if (!this.m_bTrriggerWaveStartEvent && (this.ElapseTime > 0x9c4L))
{
this.m_bTrriggerWaveStartEvent = true;
Singleton<TutorialManager>.Get().SendEvent(new WaveStart(this._curWave));
}
bool flag= false;
if (!this.PauseTime && !this.WaveCleared)
{
this.RemainTime -= App.Clock.DeltaMillis;
if ((this.RemainTime <= 0L) || this.AllHeroDead())
{
flag = true;
this.m_result = BattleResult.Lose;
}
if (this.AllEnemiesDead())
{
this._waveCleared = true;
if (this.CurWave == this.MaxWave)
{
flag = true;
this.m_result = BattleResult.Win;
}
else
{
this.ClearWave();
}
}
if (flag)
{
this.OnBattleEnd();
if (this.m_status != Status.BattleEndTutorial)
{
if (this.m_result == BattleResult.Win)
{
this.Win();
}
elseif (this.m_result == BattleResult.Lose)
{
this.Loss();
}
}
}
if ((this.m_helpAddEpDataList != null) && (this.m_helpAddEpDataList.Count > 0))
{
HelpAddEpData data = this.m_helpAddEpDataList[0];
if ((data.Tick * 1000f) < this.ElapseTime)
{
this.m_helpAddEpDataList.RemoveAt(0);
BevUnit bevUnitByHeroID = BattleApp.aBattle.GetBevUnitByHeroID(data.HeroID);
if (bevUnitByHeroID != null)
{
bevUnitByHeroID.aUnitAttribute.aUnitProp.CurEP = UnitProp.MAX_EP;
}
}
}
}
}
}
}
可以看到胜利、失败、所有敌人死亡、所有英雄死亡。
想让游戏直接胜利,就在第一行Update() : Void上面调用Win() : Void方法。
在菜单Tools → Reflexil v1.6 →如下面两张图。
修改后:
样就能达到直接胜利的效果了,如果没记错的话,在这里修改游戏里会出现些小问题。解决办法就不写了,多多尝试开动思维哟。
本文始发于微信公众号(飓风网络安全):实战破解网游游戏源码篡改游戏结果为胜利
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论