Like Share Discussion Bookmark Smile

J.J. Huang   2021-10-19   天堂私服   瀏覽次數:

天堂私服 | GM指令分析 (限等贈送)「L1J版」

章節用意

lvpresent的指令,此指令用於贈送指定的物品給角色人物達到等級範圍內的帳號。

核心版本

  • L1J-3.80c

前言

在開始分析前,請務必先將前一篇GM指令分析 (贈送)閱讀完畢。

分析

效果:創建一個物品並指定等級範圍將其放入個人倉庫;對於無法強化的物品,指定強化的數值將被忽略。
範例:

1
.lvpresent ${minlvl} ${maxlvl} ${道具編號} ${強化等級} ${數量}
  • 1.分析資料表:

    • 先進入commands表,找到lvpresent的指令。
    • class_nameL1LevelPresent
  • 2.調整角色資料

    • 修改資料表欄位characters.levelcharacters.Exp調整角色等級與經驗值。
    • 等級對應的Exp經驗值,可以查看src/l1j/server/server/datatables/ExpTable.java內。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      /**
      * 経験値テーブル(累積値) Lv0-100
      */
      private static final int _expTable[] = { 0, 125, 300, 500, 750, 1296, 2401,
      4096, 6581, 10000, 14661, 20756, 28581, 38436, 50645, 0x10014,
      0x14655, 0x19a24, 0x1fd25, 0x27114, 0x2f7c5, 0x39324, 0x44535,
      0x51010, 0x5f5f1, 0x6f920, 0x81c01, 0x96110, 0xacae1, 0xc5c20,
      0xe1791, 0x100010, 0x121891, 0x146420, 0x16e5e1, 0x19a110,
      0x1c9901, 0x1fd120, 0x234cf1, 0x271010, 0x2b1e31, 0x2f7b21,
      0x342ac2, 0x393111, 0x3e9222, 0x49b332, 0x60b772, 0x960cd1,
      0x12d4c4e, 0x3539b92, 0x579ead6, 0x7a03a1a, 0x9c6895e, 0xbecd8a2,
      0xe1327e6, 0x1039772a, 0x125fc66e, 0x148615b2, 0x16ac64f6,
      0x18d2b43a, 0x1af9037e, 0x1d1f52c2, 0x1f45a206, 0x216bf14a,
      0x2392408e, 0x25b88fd2, 0x27dedf16, 0x2a052e5a, 0x2c2b7d9e,
      0x2e51cce2, 0x30781c26, 0x329e6b6a, 0x34c4baae, 0x36eb09f2,
      0x39115936, 0x3b37a87a, 0x3d5df7be, 0x3f844702, 0x41aa9646,
      0x43d0e58a, 0x45f734ce, 0x481d8412, 0x4a43d356, 0x4c6a229a,
      0x4e9071de, 0x50b6c122, 0x52dd1066, 0x55035faa, 0x5729aeee,
      0x594ffe32, 0x5b764d76, 0x5d9c9cba, 0x5fc2ebfe, 0x61e93b42,
      0x640f8a86, 0x6635d9ca, 0x685c290e, 0x6a827852, 0x6ca8c796,
      0x6ecf16da, };

      註:0x開頭的表示為16進制,例:0x10014表示10014的十六進制 = 65556的十進制。提供一個進制轉換網站

      1
      2
      線上GM = 99, 1823000470
      路人甲 = 52, 127941146
  • 2.指令的分析:

    • 啟動模擬器除錯模式,並啟動天堂遊戲登入兩個帳號。
      1
      2
      線上GM
      路人甲
    • 首先確認路人甲道具欄倉庫的內容。
    • 倉庫無任何物品、身上無骰子匕首
    • 線上GM使用限等贈送的GM指令,指定等級範圍為52~60的,送一把+10 骰子匕首
      1
      .lvpresent 52 60 2 10 1
    • 再次確認路人甲道具欄倉庫的內容。
    • 倉庫依舊無任何物品、身上無歐西斯匕首
    • 路人甲重新登入。
    • 再次確認路人甲道具欄倉庫的內容。
    • 倉庫已經有骰子匕首
    • 骰子匕首領取並鑑定。
    • 確認線上GM道具欄倉庫的內容。
    • 可以發現並沒有骰子匕首
    • 這是因為等級不在這範圍內。
    • 如果將等級範圍修改為52~99
      1
      .lvpresent 52 99 2 10 1
    • 將兩個人物重新登入確認倉庫,會發現兩個帳號倉庫都有一把骰子匕首
    • 至此可以確認限等贈送指令,是將判斷腳色等級將物品放置倉庫內。
  • 3.分析程式碼:

    • 透過搜尋L1LevelPresent開啟程式碼。
      1
      src/l1j/server/server/command/executor/L1LevelPresent.java
    • 多數的程式碼與前一篇已經分析完成,這邊指特別點出等級飯為判斷的語法。
    • 50行,為主要的邏輯操作,可見使用的是L1DwarfInventorypresent方法。
    • 並將minlvl, maxlvl兩個參數帶入。
    • Ctrl鍵壓住,再左鍵點擊present方法即會開啟跳轉到物件與方法位置。
    • 237行,SQL語法查詢有帶入等級範圍的條件,最後將取得的account存放在一個accountList物件內。
      1
      SELECT distinct(account_name) as account_name FROM characters WHERE level between ? and ?
    • 後續的行為基本上於前一篇都是一樣的,這邊就不再列出。

結論

  • 程式碼:
    • src/l1j/server/server/command/executor/L1LevelPresent.java
      • 處理客戶端來的GM指令lvpresent的處理。

結語

限等贈送指令可以運用在活動時間內達到多少等級贈送相對應的獎勵,或是將這思維運用在等級達到多少自動贈送獎勵等等。

原創文章真的不易,希望多多支持,感謝。
最後建議回顧一下首章天堂私服 | 天堂私服架設教學,了解其章結目錄,此處會不定時更新。

免責聲明

  • 本部落格文章中皆不提供任何所謂的遊戲「主程式」、「模擬器」、「登入器」…等等相關程式的下載點。
  • 本部落格文章中所見之遊戲主程式和服務器端程序均來自網路發佈,版本歸原作者所有
  • 本部落格文章為研究SQL資料庫與修改JAVA語法使用,非商業用途,亦無做營運事實等任何一切商業行為
  • 本部落格文章內容是為研究學習設計思想和原理為目的,絕沒有故意侵權或惡意抄襲、篡改其他遊戲內容