道士突破寵物召喚限制
這是我發(fā)布的baidu“希望BM"吧的帖子,也是很有學(xué)習(xí)意義,所以還是搬過來吧,當(dāng)作B站第2貼,投名狀。以下是帖子內(nèi)容,只修正不通順的詞句與錯別字,并根據(jù)情形,補充一些新的注釋,比如,這是第1條新注:為了吸引人氣,我又又又打臉妥協(xié)了,什么不搞變態(tài)的修改的話,大家全忘了吧,單機下你愛怎么折騰怎么來吧;本貼適配的游戲版本仍然是3.11.01,可疊加99物品的)
這個修改,我其實自從21版以來,完全沒搞過,而且21版時,我也沒有放開召喚3只的上限。再聲明一下,我修改宗旨一向是不作過于變態(tài)的修改!修改過于變態(tài),那就是玩游戲,而是毀游戲了,完全不再有什么游戲體驗,只是純粹體驗?zāi)愕男薷牧耍?br>但是,為了給貼吧吸引人氣,我暫時只能妥協(xié),放一個教程。
之前在修改學(xué)習(xí)群,有過這方面的討論,但我并沒有過多參與,仍然是認為這類修改易墮于變態(tài)之中。但我也給出了”查看誰訪問、改寫魔法值“之類的方法。但這次實踐,我發(fā)現(xiàn)其實有更好的尋址方式。
首先,我們要認識到,召喚成功后,寵物數(shù)據(jù)(地址)就存儲于人物數(shù)據(jù)中,沒有寵物時,此數(shù)據(jù)則為0。那么先設(shè)定一個搜索范圍(人物地址為搜索起始地址,搜索結(jié)束地址為起始地址+10000就肯定夠了),下面是操作步驟:
第1步:獲取人物地址。
打開CE附加S端(服務(wù)器端),瀏覽人物地址,(常規(guī)操作,人物基地址查找方法,在群視頻教程中?。┯益I此地址,彈出菜單項,選擇“轉(zhuǎn)到地址”,彈出的輸入框,全選文字 ,并復(fù)制此地址(新注:人物地址的獲取,可以參照第1篇帖子"法師無限誘惑”)

第2步:以人物地址為參照,設(shè)定一個搜索范圍,以便迅速搜索到寵物存儲的地址。

第3步:首次搜索 4字節(jié)的 精確數(shù)值 0; 這個沒什么說的。
第4步:召喚寵物后,修改搜索類型為“增加的數(shù)值”,然后再次搜索。
(新注:如果是純新手,數(shù)值的搜索操作請參考"法師無限誘惑”,有詳細的步驟圖示,但要明白,這里使用的“模糊搜索”方式,前一帖子是使用“精確數(shù)值”方式)

第5步:殺死寵物,然后又搜索精確數(shù)值 0。
(新注:先把掃描索類型為“精確的數(shù)值”,然后才能輸入數(shù)字0,可參考第2步的圖示,部分圖無法上傳。)
第6步:召喚寵物,按第4步的方法,又搜索“增加的數(shù)值”。這時,應(yīng)該就能搜索到唯一的地址了,也就是存儲寵物地址的地址。
(新注:如果搜索不到,請重復(fù)第5步和第6步,直到搜索出唯一地址為止。)
004.jgp
第7步,找出處理召喚的代碼的地址。鼠標(biāo)右鍵點擊第6步搜索到的地址,然后選擇“查看誰訪問此地址”。

第8步:繼續(xù)召喚寵物。追蹤到的結(jié)果,大約如下圖。

明顯,這個+42B0,就是存儲寵物數(shù)據(jù)的人物偏移了。我們有時候,查找偏移,其實從代碼中查看,會更直觀。點擊第1條數(shù)據(jù),再點擊右邊的“顯示反匯編程序”,以顯示代碼地址。
(新注:這也是迅速定位代碼地址的操作,“無限誘惑”里則是雙擊追蹤代碼,都是經(jīng)常用到的)

第9步:找出限制寵物數(shù)量的地方。
先召喚出2只寵物,然后對代碼地址右鍵,彈出菜單后選“中斷與跟蹤”,我們要追蹤為什么無法召喚3只寵。這一步無圖,操作方法請參考其它帖子,或是下載視頻教程學(xué)習(xí)。
(新注:請參考“無限誘惑”中的最后一種下斷方式,有詳細圖示)
這是追蹤到的結(jié)果:

注意看,計算完寵物數(shù)量后,eax = 2,即是有2只寵物,返回上一層代碼后,它跟另一個值?[esp+14]?比較。這里的[esp+14] ,應(yīng)該是按職業(yè)取值,道士=2,法師=3。
(新注:寄存器eax的數(shù)值,在點擊追蹤代碼后,在追蹤欄的右邊可查看到,上圖是右上角。
? [esp+14] 的值由道士的召喚技能等級決定)
我選中的代碼行,就是關(guān)鍵的判斷跳轉(zhuǎn),jnl xxxx 跳轉(zhuǎn)成立的條件是: eax 值不小于[esp+14] (大于和等于)。
(新注:匯編指令 jnl ,j = jump 跳轉(zhuǎn),n = not 不,l = little 小于,合起來的意思就是“不小于”,也就是“大于或等于”,比較結(jié)果符合,跳轉(zhuǎn)就成立。這里是比較已召出的寵物個數(shù)(eax)與技能允許召喚的數(shù)量,條件成立,則是禁止召喚,也就是限制召喚數(shù)量的地方了。)
我們先測試一下,把這行代碼置空,即讓它永遠不跳。

(新注:空指令,也可叫作“空白指令”,替換成空指令,原本要跳轉(zhuǎn),現(xiàn)在跳轉(zhuǎn)沒有了,當(dāng)然就是永遠不跳了。)
? 回游戲繼續(xù)召喚,第3只出來了。

但是無論如何再嘗試,此時3只就是最大限度了。另一個限制召喚數(shù)量,在于4樓的追蹤結(jié)果的第二行代碼“ cmp dword ptr[eax],00”,因為第3行為 “ mov [ebx+eax*4+42B0],esi ”,這已經(jīng)是存儲寵物地址了,是召喚成功了,所以,第2行肯定也是數(shù)量限制的關(guān)鍵所在。

選中上圖的第2行代碼,然后點擊”顯示反匯編程序“,照樣子跳轉(zhuǎn)到代碼欄,查看這個判斷代碼。這回是將這個判斷后的跳轉(zhuǎn)改為強制跳轉(zhuǎn)。

(新注:匯編指令 jmp 即是強制跳轉(zhuǎn),無論前面有沒有判斷,判斷的結(jié)果是什么,它都是跳到后面跟著的地址。)
再測試,此時召喚無數(shù)量限制了。
帖子結(jié)語:
雖然放出教程,但仍然不贊成搞這種無限制的召喚啊,我就保留一點點不放出成品腳本了。
而且此種修改有一些不足,召喚數(shù)量多于3只,受控制寵物其實只有3只。具體根源在于,游戲設(shè)定只存儲3只寵物,多召喚出來的,根本沒存儲其地址,所以也無法控制了(聚集、殺死等等操作)。當(dāng)然也有了另一種惡趣味玩法,你下線了,這些多出來的寵物仍然存在,如果是登陸小戰(zhàn)士,還能帶它們繼續(xù)逛街。
(新注:3只寵的存儲限制,在“無限誘惑”一視頻中,有詳細解釋,可惜我不會弄,這里上傳后給以廣告的理由封禁了5遍,我實在是怕了。有興趣請到群里下載吧,專集封面有群號。這一貼內(nèi)容,我也會做個視頻,但能不能上傳這里,我也未知,但群里肯定會有。)