綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[修改] 白貓修改 簡易教學+位置彙整

   關閉 [複製連結] 查看: 71631|回覆: 363|好評: 5
跳轉到指定樓層
樓主
2153030 | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2015-8-8 15:48

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
本帖最後由 2153030 於 2015-8-15 20:47 編輯

有鑑於每個人需求不同,各個遊戲參數也會不同。也因為這版上似乎還沒有很完整的討論,希望各位先進可以一起補齊。
需要注意的是:官方伺服器都有紀錄,看他們要不要抓而已。出來混總是要還的。

工具篇:(個人僅列出我使用的工具檔名,GOOGLE不難找)
APK反編譯、重編譯工具:AdvancedApkTool_v4.1.0_i-mobi_CHT_v1.1
DLL decompile、recompile工具:reflexil.for.ILSpy.2.0-preview3

步驟篇:
1. 將欲修改APK丟到AdvancedApkTool/2-In裡面
2. 執行Advanced ApkTool.exe將其反編譯,檔案會到3-Out裡面
3. ILSpy讀取3-Out/欲修改的APK檔名.apk/assets/bin/Data/Managed/Assembly-CSharp.dll
4. 進行修改
5. 將修改過後的Assembly-CSharp.dll覆蓋回去
6. 執行Advanced ApkTool.exe將其重編譯並簽名,檔案會到4-Done裡面

修改篇:
從左邊選取欲瀏覽的項目,右邊視窗則會顯示該項目之CS程式碼(左上可切換成C#, VB, IL,看大家的截圖都是直接看IL語言,其實C#、VB算是比較高階的語言,建議不要切成IL喔!)
小弟目前只知道修改IL之方法,還請大大不吝指導從CS編寫之方法。

修改IL:
左上View -> Reflixil v2.0,右下會出現reflexil視窗
對照上下方CS及IL語言,更改IL指令
        Create new...插入一條指令
        Edit...編輯當前指令
        Replace all with code...取代全部指令(小弟沒成功取代過orz)

修改完後,左邊視窗該項目 右鍵-> Update ILSpy object model,檢視修改過後的CS有沒有如你預期。
確認之後,Assembly-CSharp 右鍵-> Save as... ,儲存修改覆蓋回Assembly-CSharp.dll

參數篇:(個人僅列出我知道的,歡迎各位大大補齊)
六圍修改:Player.SetupParameterFromUnitModel
  1. int num = Util.Ftoi((float)(unit.Card.hp + unit.Card.addHp) * (1f + unit.TownAddHPRate * (1f + Singleton<InGameManager>.I.InGameLeaderSkill.BuildingEffectUpRate))); //HP倍率
複製代碼

主要是將1f + unit.TownAddHPRate的1改成你想要幾倍,2就是兩倍,依此類推
其餘五圍雷同,有幾個關鍵字分別是unit.TownAddSPRate、unit.TownAddAtkRate、unit.TownAddDefRate、unit.TownAddHitRate、unit.TownAddAgiRate

跑速修改:Player.GetRunSpeed
  1. return 3.5f * base.MoveSpeedCoefficient;
複製代碼

比較常見是改成6.5、7.5

結算修改:QuestCompleteSendParm.ctor
  1. this.gold = 30000; //金
  2. this.soul = 3000; //魂
  3. this.totalDamageCount = 0; //受到怪物的傷害次數
  4. this.totalDamageAmount = 0; //受到怪物的傷害
  5. this.totalDamageCountFromPlacementObject = 0; //受到陷阱的傷害
  6. this.totalDeadCount = 0; //全部死亡次數
  7. this.totalHelperDeadCount = 0; //協助者死亡次數
  8. this.totalBadStatusCount = 0; //負面狀況記數
  9. this.restTime = result.RestTime; //剩餘時間,用於神速SS,單位是毫秒
複製代碼


落物修改:InGameManager.CatchItem
  1. this.result.cardIds.Add(item.id); //我不太確定是什麼
  2. this.result.weaponIds.Add(item.id); //武器
  3. this.result.ornamentIds.Add(item.id); //裝飾物
  4. this.result.itemIds.Add(item.id); //石頭
複製代碼

這邊讓他loop 50圈,就是50倍

簡易do-while迴圈教學:
以CS為例,這邊就是讓this.result.itemIds.Add(item.id);跑5次
  1. int num = 0;
  2. do{
  3. this.result.itemIds.Add(item.id);
  4. num++;
  5. }
  6. while (num < 5);
複製代碼

IL語言:
  1. IL_0000: ldc.i4.0
  2. IL_0001: stloc.s 1 //儲存0到變數1
  3. // loop start (head: IL_01a0)
  4.         IL_01a0: ldarg.0
  5.         IL_01a1: ldfld class InGameManager/Result InGameManager::result
  6.         IL_01a6: ldfld class [mscorlib]System.Collections.Generic.List`1<class XorInt> InGameManager/Result::itemIds
  7.         IL_01ab: ldarg.1
  8.         IL_01ac: ldfld int32 Item::id
  9.         IL_01b1: call class XorInt XorInt::op_Implicit(int32)
  10.         IL_01b6: callvirt instance void class [mscorlib]System.Collections.Generic.List`1<class XorInt>::Add(!0)
  11.         IL_01bb: ldloc.s 1 //讀取變數1
  12.         IL_01bd: ldc.i4.1
  13.         IL_01be: add //變數1 + 整數1
  14.         IL_01bf: stloc.s 1 //儲存變數1
  15.         IL_01c1: ldloc.s 1 //讀取變數1
  16.         IL_01c3: ldc.i4 5 //讀取整數5
  17.         IL_01c8: blt.s IL_01a0 //若變數1小於整數5相等則跳至01a0位置
  18. // end loop
複製代碼


抱歉,文章打到一半有事,周末比較忙,我會找時間慢慢補齊我知道的資訊。
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)

評分

參與人數 82碎鑽 +73 經驗 +1 幫助 +81 收起 理由
02131991 + 1 偶像,看完你的內容,讓我找到了活著的意義.
s8503765 + 1 + 1 非常讃
li897955 + 1 + 1 非常讃
poiuy0931 + 1 + 1 非常讃
masaharu9990 + 1 + 1 非常讃
heeroeric + 1 + 1 非常讃
redfeather + 1 偶像,看完你的內容,讓我找到了活著的意義.
darkvoidangle + 1 + 1 很給力!
taw200539 + 1 + 1 非常讃
yuminhazi + 1 偶像,看完你的內容,讓我找到了活著的意義.

查看全部評分

收藏收藏96 分享分享4 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

來自 2樓
Jacomous-Wen | 收聽TA | 只看該作者
發表於 2015-9-1 23:18
reflexil和ILSpy現在有最新版可以支援了
看完大大的帖子學了不少
然後抓了別人快刷板來看
發現可以從StageObject.UpdateDie修改快刷
自己改了一版拿來衝首抽好方便阿 XD
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 1 反對 0

使用道具 舉報

來自 3樓
wenhua4438 | 收聽TA | 只看該作者
發表於 2015-9-4 09:22
由 手機網頁 發佈
本帖最後由 wenhua4438 於 2015-9-4 09:30 編輯
2153030 發表於 2015-9-4 07:50
um...剛又將大大一開始說的看一遍,
所以對於Assembly-CSharp.dll的修改,仍然得一行一行刻IL對嗎? ...

方法有很多。可以直接用ilspy導出cs原程序。再用vs編譯。不過還不能直接build。還得修復一些亂碼後才能。

感覺最實用的還是自己編譯DLL然後在原il中注入(在想修改的代碼執行前執行自己的DLL)。省時省力

評分

參與人數 2碎鑽 +2 經驗 +1 幫助 +2 收起 理由
2153030 + 1 + 1 非常讃
20060420 + 1 + 1 + 1 good idea

查看全部評分

用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

地板
MariusCheng | 收聽TA | 只看該作者
發表於 2015-8-8 18:37
多謝分享
InGameManager.CatchItem終於知道了
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

5
king959818 | 收聽TA | 只看該作者
發表於 2015-8-8 18:59
由 手機網頁 發佈
感謝樓主無私分享

點評

請以評分替代感謝文。  發表於 2015-10-18 22:51
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

7
歹頑狼 | 收聽TA | 只看該作者
發表於 2015-8-8 19:07
感謝大大分享

點評

請以評分替代感謝文。  發表於 2015-10-18 22:51
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

8
andyt0621 | 收聽TA | 只看該作者
發表於 2015-8-8 19:14
本帖最後由 andyt0621 於 2015-8-8 19:30 編輯

結算修改 跟 落物修改 有什麼分別嗎?
---
沒事了..打開發現一個修改金魂一個石頭 =.=
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

9
king959818 | 收聽TA | 只看該作者
發表於 2015-8-8 19:22
由 手機網頁 發佈
我猜落物修改大概是符石倍率,結算應該是金魂
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

10
king750816 | 收聽TA | 只看該作者
發表於 2015-8-8 19:23
請問我照棣1個步驟把APK放進 2-In
按執行Advanced ApkTool反編譯檔案跑不進去 3-Out裡面
是還要做甚麼設定嗎

用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 1 反對 0

使用道具 舉報

11
MariusCheng | 收聽TA | 只看該作者
發表於 2015-8-8 19:31
符石倍率哪個可以修改, 害怕改錯
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

12
脱掉小红帽 | 收聽TA | 只看該作者
發表於 2015-8-8 20:41
MariusCheng 發表於 2015-8-8 19:31
符石倍率哪個可以修改, 害怕改錯

不管做什么事都会出错,人就是在出错中成长的
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 1 反對 0

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則