客户端

扫码查看

手机触屏版

分享
查看: 514|回复: 0

[技术教程] 【技术认真讲67】GM指令分析 (限等贈送)「L1J版」

[复制链接]

【技术认真讲67】GM指令分析 (限等贈送)「L1J版」

发表于 2023-6-19 09:03:34 来自 技术教程 阅读模式 倒序浏览
514 0 查看全部
章節用意
lvpresent的指令,此指令用於贈送指定的物品給角色人物達到等級範圍內的帳號。
核心版本
  • L1J-3.80c
前言
在開始分析前,請務必先將前一篇GM指令分析 (贈送)閱讀完畢。
分析
效果:創建一個物品並指定等級範圍將其放入個人倉庫;對於無法強化的物品,指定強化的數值將被忽略。
範例:
.lvpresent ${minlvl} ${maxlvl} ${道具編號} ${強化等級} ${數量}
  • 1.分析資料表:

    • 先進入commands表,找到lvpresent的指令。
    • class_name是L1LevelPresent。

  • 2.調整角色資料

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

      註:0x開頭的表示為16進制,例:0x10014表示10014的十六進制 = 65556的十進制。提供一個進制轉換網站
      線上GM = 99, 1823000470
      路人甲  = 52, 127941146

  • 2.指令的分析:

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

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

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


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

Copyright © 2001-2024, Tencent Cloud.Comsenz Inc. Powered by Discuz! X3.5