天堂私服| GM指令分析/修改(描述)「L1J版」 - J.J.'s Blogs

文章推薦指數: 80 %
投票人數:10人

基本上該指令只有針對下指令的玩家取得自身的資料( L1PcInstance )。

注意到 L1PcInstance 繼承了 L1Character 。

這邊不特別分析可以看到多少資訊, ... Thiswebsite Archives Categories Tags About RSS 歡迎!您似乎正在使用廣告攔截器。

請考慮通過禁用您的廣告攔截器來支持我。

J.J.Huang   2021-09-21   天堂私服 5.核心分析/修改   瀏覽次數:次 {{moment(1632187800000).fromNow()}} 天堂私服|GM指令分析/修改(描述)「L1J版」 章節用意desc的指令,顯示玩家的資訊,或許可以套用在所謂的防親友道具(查看玩家資訊、裝備…等等)。

核心版本 L1J-3.80c 分析在開始分析前,要知道GM指令的指令效果與使用方式,才方便開啟除錯(Debug)進行分析。

效果:指定角色看到的額外資訊。

範例: 1.desc${角色名稱} 1.分析資料表: 先進入commands表,找到desc的指令。

class_name是L1Describe。

2.分析程式碼: 透過搜尋L1Describe開啟程式碼。

1src/l1j/server/server/command/executor/L1Describe.java 基本上該指令只有針對下指令的玩家取得自身的資料(L1PcInstance)。

注意到L1PcInstance繼承了L1Character。

這邊不特別分析可以看到多少資訊,因為太多了…自行除錯模式即可。

36~44行是在取得相關的資訊,並組合成字串。

45最後將物件資訊傳送數據回客戶端做顯示。

註:如果想要顯示更多資訊,可以在L1PcInstance裡面查找資料。

修改目前指令只有針對自己,希望將此指令修改程可以指定玩家做查詢。

可以發現帶入的參數有arg,而arg的取得,之前也分析過。

修改的方向是,針對傳入的玩家名稱,嘗試取得玩家資訊,如果玩家在線則將資訊回傳;如果玩家不在線上,則回傳玩家不在線上。

註:這邊只是給一個思路,當然可以套用到很多地方,一般玩家可以使用指令、道具…等等,窺視其他玩家等級、素質、裝備…等等。

以下是修改後所使用的指令方式: 1.desc${玩家名稱} 修改前1234567891011121314151617181920@Overridepublicvoidexecute(L1PcInstancepc,StringcmdName,Stringarg){ try{ StringBuildermsg=newStringBuilder(); pc.sendPackets(newS_SystemMessage("--describe:"+pc.getName()+"--")); inthpr=pc.getHpr()+pc.getInventory().hpRegenPerTick(); intmpr=pc.getMpr()+pc.getInventory().mpRegenPerTick(); msg.append("Dmg:+"+pc.getDmgup()+"/"); msg.append("Hit:+"+pc.getHitup()+"/"); msg.append("MR:"+pc.getMr()+"/"); msg.append("HPR:"+hpr+"/"); msg.append("MPR:"+mpr+"/"); msg.append("Karma:"+pc.getKarma()+"/"); msg.append("Item:"+pc.getInventory().getSize()+"/"); pc.sendPackets(newS_SystemMessage(msg.toString())); } catch(Exceptione){ pc.sendPackets(newS_SystemMessage(cmdName+"指令錯誤")); }} 修改後1234567891011121314151617181920212223publicvoidexecute(L1PcInstancepc,StringcmdName,Stringarg){try{StringBuildermsg=newStringBuilder();L1PcInstancetarget=L1World.getInstance().getPlayer(arg);if(target!=null){pc.sendPackets(newS_SystemMessage("--describe:"+target.getName()+"--"));inthpr=target.getHpr()+target.getInventory().hpRegenPerTick();intmpr=target.getMpr()+target.getInventory().mpRegenPerTick();msg.append("Dmg:+"+target.getDmgup()+"/");msg.append("Hit:+"+target.getHitup()+"/");msg.append("MR:"+target.getMr()+"/");msg.append("HPR:"+hpr+"/");msg.append("MPR:"+mpr+"/");msg.append("Karma:"+target.getKarma()+"/");msg.append("Item:"+target.getInventory().getSize()+"/");pc.sendPackets(newS_SystemMessage(msg.toString()));}else{pc.sendPackets(newS_SystemMessage((newStringBuilder()).append(arg).append("不在線上。

").toString()));}}catch(Exceptione){pc.sendPackets(newS_SystemMessage(cmdName+"指令錯誤"));}} 修改後儲存,啟動模擬器。

啟動天堂登入遊戲,登入GM帳號與另一個帳號。

GM使用指令查詢另一位玩家,可護得該玩家資訊。

結論 程式碼: src/l1j/server/server/command/executor/L1Describe.java 處理客戶端來的GM指令desc的處理。

結語其實在多分析原本的程式碼後,可以自己思考該程式碼是否可以應用在別的地方。

學習程式分析程式不外乎就是耐心,加油! 原創文章真的不易,希望多多支持,感謝。

最後建議回顧一下首章天堂私服|天堂私服架設教學,了解其章結目錄,此處會不定時更新。

免責聲明 本部落格文章中皆不提供任何所謂的遊戲「主程式」、「模擬器」、「登入器」…等等相關程式的下載點。

本部落格文章中所見之遊戲主程式和服務器端程序均來自網路發佈,版本歸原作者所有。

本部落格文章為研究SQL資料庫與修改JAVA語法使用,並非商業用途,亦無做營運事實等任何一切商業行為。

本部落格文章內容是為研究學習設計思想和原理為目的,絕沒有故意侵權或惡意抄襲、篡改其他遊戲內容! 天堂私服|GM指令分析/修改(怪物血條)「L1J版」 天堂私服|GM指令分析/修改(金幣)「L1J版」



請為這篇文章評分?