Android 台灣中文網
標題: 有個問題需要大佬們幫助 [打印本頁]
作者: ziyuaner2 時間: 2016-1-4 11:12
標題: 有個問題需要大佬們幫助
public void FixedUpdate()
{
if ((this._mode == eMode.Generate) && this.GenerateEnemy())
{
if (this._nNowWave < (BattleDataManager.GetEnemyList().Length – 1))
{
this._mode = eMode.Battle;
}
else
{
this._mode = eMode.Empty;
}
this._berserkTime = 30f;
}
this._FieldJobType = 0;
foreach (CharaBehavior behavior in this._battleManager.GetMemberList(eCharaType.ENEMY, true, false, true, false))
{
this._FieldJobType |= ((int) 1) << behavior._param.jobType;
}
}
這是國服FixedUpdate() : Void的函數……
和台服日服略有不同……請問一下到底怎麼才能做到1WAVE啊?求教各路大神了!!100碎鉆雙手奉上
作者: 星幻。 時間: 2016-1-4 11:12
手邊沒有國服版.. 但應該大同小異..
已私訊你.. 你試試看..
作者: yifeixuer 時間: 2016-1-4 15:19
if (this._nNowWave < (BattleDataManager.GetEnemyList().Length – 1))
{
this._mode = eMode.Battle;
}
else
{
this._mode = eMode.Empty;
eMode.Battle 修改成 eMode.Empty 所有版本都可以這麼修改。比較簡單
作者: ziyuaner2 時間: 2016-1-4 19:40
已經有大佬這樣教過我了……但是沒有效果啊 還是我修的不對?
我是這麼修的 用reflector打开dll,找到FixedUpdate() : Void,里面eMode.Battle;,點擊Battle左邊有它的子目錄一樣的東西,右鍵reflexil用rename修改成Empty,然后再总DLL上右鍵save as就成了。是不是這麼修是錯誤的?。。。麻煩大佬們了
作者: ziyuaner2 時間: 2016-1-4 21:56
那請問怎麼修改啊?。。。能稍微詳細一點教一下么?。。。
作者: perfare 時間: 2016-1-5 02:56
在我博客上留言的是你呀。。。
ldc.i4.2 <- 把這個改的跟下方的eMode.Empty一樣,比如日服是ldc.i4.s 10
call System.Void EnemyManager::set_kEMode(EnemyManager/eMode)
這樣改有個明顯的問題就是回傳的wave數是2,雖然不管怎麼改都是五十步笑百步罷了。。。
作者: ziyuaner2 時間: 2016-1-5 16:32
哈哈,大神好~~~~~~~多謝你一如既往不吝賜教~~~~~
作者: ziyuaner2 時間: 2016-1-5 23:22
本帖最後由 ziyuaner2 於 2016-1-5 23:47 編輯
public void FixedUpdate()
{
if ((this._mode == eMode.Generate) && this.GenerateEnemy())
{
if (this._nNowWave < (BattleDataManager.GetEnemyList().Length - 1))
{
this._mode = eMode.Battle;
}
else
{
this._mode = eMode.Empty;
}
this._berserkTime = 30f;
}
this._FieldJobType = 0;
foreach (CharaBehavior behavior in this._battleManager.GetMemberList(eCharaType.ENEMY, true, false, true, false))
{
this._FieldJobType |= ((int) 1) << behavior._param.jobType;
}
}
public void FixedUpdate()
{
if ((this._mode == eMode.Generate) && this.GenerateEnemy())
{
if (this._nNowWave < (BattleDataManager.GetEnemyList().Length - 1))
{
this._mode = eMode.Battle;
}
else
{
this._mode = eMode.Empty;
}
this._berserkTime = 30f;
}
this._FieldJobType = 0;
foreach (CharaBehavior behavior in this._battleManager.GetMemberList(eCharaType.ENEMY, true, false, true, false))
{
this._FieldJobType |= ((int) 1) << behavior._param.jobType;
}
}
對應IL過來就是
.method public hidebysig instance void FixedUpdate() cil managed
{
.maxstack 17
.locals init (
[0] class [mscorlib]System.Collections.Generic.List`1<class CharaBehavior> list,
[1] class CharaBehavior behavior,
[2] valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator`0<class CharaBehavior> enumerator)
L_0000: ldarg.0
L_0001: ldfld valuetype EnemyManager/eMode EnemyManager::_mode
L_0006: ldc.i4.1
L_0007: bne.un L_0049
L_000c: ldarg.0
L_000d: call instance bool EnemyManager::GenerateEnemy()
L_0012: brfalse L_0049
L_0017: ldarg.0
L_0018: ldfld int32 EnemyManager::_nNowWave
L_001d: call class EnesetList[] BattleDataManager::GetEnemyList()
L_0022: ldlen
L_0023: conv.i4
L_0024: ldc.i4.1
L_0025: sub
L_0026: bge L_0037
L_002b: ldarg.0
L_002c: ldc.i4.2
L_002d: stfld valuetype EnemyManager/eMode EnemyManager::_mode
L_0032: br L_003e
L_0037: ldarg.0
L_0038: ldc.i4.6
L_0039: stfld valuetype EnemyManager/eMode EnemyManager::_mode
L_003e: ldarg.0
L_003f: ldc.r4 30
L_0044: stfld float32 EnemyManager::_berserkTime
L_0049: ldarg.0
L_004a: ldc.i4.0
L_004b: stfld int32 EnemyManager::_FieldJobType
L_0050: ldarg.0
L_0051: ldfld class BattleManager EnemyManager::_battleManager
L_0056: ldc.i4.1
L_0057: ldc.i4.1
L_0058: ldc.i4.0
L_0059: ldc.i4.1
L_005a: ldc.i4.0
L_005b: callvirt instance class [mscorlib]System.Collections.Generic.List`1<class CharaBehavior> BattleManager::GetMemberList(valuetype eCharaType, bool, bool, bool, bool)
L_0060: stloc.0
L_0061: ldloc.0
L_0062: callvirt instance valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator`0<!0> [mscorlib]System.Collections.Generic.List`1<class CharaBehavior>::GetEnumerator()
L_0067: stloc.2
L_0068: br L_0095
L_006d: ldloca.s enumerator
L_006f: call instance !0 [mscorlib]System.Collections.Generic.List`1/Enumerator`0<class CharaBehavior>::get_Current()
L_0074: stloc.1
L_0075: ldarg.0
L_0076: dup
L_0077: ldfld int32 EnemyManager::_FieldJobType
L_007c: ldc.i4.1
L_007d: ldloc.1
L_007e: ldfld class BattleParam CharaBehavior::_param
L_0083: callvirt instance valuetype JOB_TYPE BattleParam::get_jobType()
L_0088: ldc.i4.s 0x1f
L_008a: and
L_008b: ldc.i4.s 0x1f
L_008d: and
L_008e: shl
L_008f: or
L_0090: stfld int32 EnemyManager::_FieldJobType
L_0095: ldloca.s enumerator
L_0097: call instance bool [mscorlib]System.Collections.Generic.List`1/Enumerator`0<class CharaBehavior>::MoveNext()
L_009c: brtrue L_006d
L_00a1: leave L_00b2
L_00a6: ldloc.2
L_00a7: box [mscorlib]System.Collections.Generic.List`1/Enumerator`0<class CharaBehavior>
L_00ac: callvirt instance void [mscorlib]System.IDisposable::Dispose()
L_00b1: endfinally
L_00b2: ret
.try L_0068 to L_00a6 finally handler L_00a6 to L_00b2
}
完全不知道該怎麼辦了?。。。。你說的這個看不太明白,而且也沒有找到你說的這個ldc.i4.s這個……這個紅色的Battle在下面的IL裏面對應的是哪個啊?怎麼才能改成Empty....
作者: perfare 時間: 2016-1-6 01:24
本帖最後由 perfare 於 2016-1-6 01:29 編輯